aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.appveyor/build.bat7
-rw-r--r--install.bat131
-rw-r--r--src/luarocks/cfg.lua36
3 files changed, 97 insertions, 77 deletions
diff --git a/.appveyor/build.bat b/.appveyor/build.bat
index 48e72514..a4ff6378 100644
--- a/.appveyor/build.bat
+++ b/.appveyor/build.bat
@@ -18,9 +18,8 @@ if not defined LUAROCKS_VER set LUAROCKS_VER=2.2.1
18set LUAROCKS_SHORTV=%LUAROCKS_VER:~0,3% 18set LUAROCKS_SHORTV=%LUAROCKS_VER:~0,3%
19 19
20if not defined LR_EXTERNAL set LR_EXTERNAL=c:\external 20if not defined LR_EXTERNAL set LR_EXTERNAL=c:\external
21if not defined LUAROCKS_INSTALL set LUAROCKS_INSTALL=%LUA_DIR%\LuaRocks 21if not defined LR_ROOT set LR_ROOT=%LUA_DIR%\LuaRocks
22if not defined LR_ROOT set LR_ROOT=%LUAROCKS_INSTALL%\%LUAROCKS_SHORTV% 22if not defined LR_SYSTREE set LR_SYSTREE=%LR_ROOT%\systree
23if not defined LR_SYSTREE set LR_SYSTREE=%LUAROCKS_INSTALL%\systree
24 23
25:: 24::
26:: ========================================================= 25:: =========================================================
@@ -35,7 +34,7 @@ if not exist %LUA_DIR%\bin\%LUA%.exe call :die "Missing Lua interpreter at %LUA_
35:: ========================================================= 34:: =========================================================
36 35
37cd %APPVEYOR_BUILD_FOLDER% 36cd %APPVEYOR_BUILD_FOLDER%
38call install.bat /LUA %LUA_DIR% /Q /LV %LUA_SHORTV% /P "%LUAROCKS_INSTALL%" /TREE "%LR_SYSTREE%" 37call install.bat /LUA %LUA_DIR% /Q /LV %LUA_SHORTV% /P "%LR_ROOT%" /TREE "%LR_SYSTREE%"
39 38
40if not exist "%LR_ROOT%" call :die "LuaRocks not found at %LR_ROOT%" 39if not exist "%LR_ROOT%" call :die "LuaRocks not found at %LR_ROOT%"
41 40
diff --git a/install.bat b/install.bat
index 57e3611c..42b01c43 100644
--- a/install.bat
+++ b/install.bat
@@ -8,6 +8,7 @@ local vars = {}
8vars.PREFIX = nil 8vars.PREFIX = nil
9vars.VERSION = "2.2" 9vars.VERSION = "2.2"
10vars.SYSCONFDIR = nil 10vars.SYSCONFDIR = nil
11vars.CONFBACKUPDIR = nil
11vars.SYSCONFFILENAME = nil 12vars.SYSCONFFILENAME = nil
12vars.CONFIG_FILE = nil 13vars.CONFIG_FILE = nil
13vars.TREE_ROOT = nil 14vars.TREE_ROOT = nil
@@ -79,7 +80,7 @@ end
79 80
80local function exec(cmd) 81local function exec(cmd)
81 --print(cmd) 82 --print(cmd)
82 local status = os.execute(cmd) 83 local status = os.execute("type NUL && "..cmd)
83 return (status == 0 or status == true) -- compat 5.1/5.2 84 return (status == 0 or status == true) -- compat 5.1/5.2
84end 85end
85 86
@@ -97,7 +98,7 @@ local function permission()
97 return exec("net session >NUL 2>&1") -- fails if not admin 98 return exec("net session >NUL 2>&1") -- fails if not admin
98end 99end
99 100
100-- rename file (full path) to backup (name only), appending number if required 101-- rename filename (full path) to backupname (name only), appending number if required
101-- returns the new name (name only) 102-- returns the new name (name only)
102local function backup(filename, backupname) 103local function backup(filename, backupname)
103 local path = filename:match("(.+)%\\.-$").."\\" 104 local path = filename:match("(.+)%\\.-$").."\\"
@@ -121,14 +122,12 @@ local function print_help()
121Installs LuaRocks. 122Installs LuaRocks.
122 123
123/P [dir] Where to install LuaRocks. 124/P [dir] Where to install LuaRocks.
124 Note that version; $VERSION, will be appended to this
125 path, so "/P c:\luarocks\" will install in
126 "c:\luarocks\$VERSION\"
127 Default is %PROGRAMFILES%\LuaRocks 125 Default is %PROGRAMFILES%\LuaRocks
128 126
129Configuring the destinations: 127Configuring the destinations:
130/TREE [dir] Root of the local tree of installed rocks. 128/TREE [dir] Root of the local system tree of installed rocks.
131 Default is %PROGRAMFILES%\LuaRocks\systree 129 Default is {BIN}\..\ if {BIN} ends with '\bin'
130 otherwise it is {BIN}\systree.
132/SCRIPTS [dir] Where to install commandline scripts installed by 131/SCRIPTS [dir] Where to install commandline scripts installed by
133 rocks. Default is {TREE}\bin. 132 rocks. Default is {TREE}\bin.
134/LUAMOD [dir] Where to install Lua modules installed by rocks. 133/LUAMOD [dir] Where to install Lua modules installed by rocks.
@@ -255,7 +254,7 @@ local function check_flags()
255 die("Cannot combine option /L with any of /LUA /BIN /LIB /INC") 254 die("Cannot combine option /L with any of /LUA /BIN /LIB /INC")
256 end 255 end
257 if vars.LUA_VERSION ~= "5.1" then 256 if vars.LUA_VERSION ~= "5.1" then
258 die("Bundled Lua version is 5.1, cannot install 5.2") 257 die("Bundled Lua version is 5.1, cannot install "..vars.LUA_VERSION)
259 end 258 end
260 end 259 end
261 if vars.LUA_VERSION ~= "5.1" then 260 if vars.LUA_VERSION ~= "5.1" then
@@ -479,6 +478,28 @@ local function look_for_lua_install ()
479 return false 478 return false
480end 479end
481 480
481-- backup config[x.x].lua[.bak] and site_config[_x_x].lua
482local function backup_config_files()
483 local temppath
484 while not temppath do
485 temppath = os.getenv("temp").."\\LR-config-backup-"..tostring(math.random(10000))
486 if exists(temppath) then temppath = nil end
487 end
488 vars.CONFBACKUPDIR = temppath
489 mkdir(vars.CONFBACKUPDIR)
490 exec(S[[COPY "$PREFIX\config*.*" "$CONFBACKUPDIR" >NUL]])
491 exec(S[[COPY "$PREFIX\lua\luarocks\site_config*.*" "$CONFBACKUPDIR" >NUL]])
492end
493
494-- restore previously backed up config files
495local function restore_config_files()
496 if not vars.CONFBACKUPDIR then return end -- there is no backup to restore
497 exec(S[[COPY "$CONFBACKUPDIR\config*.*" "$PREFIX" >NUL]])
498 exec(S[[COPY "$CONFBACKUPDIR\site_config*.*" "$PREFIX\lua\luarocks" >NUL]])
499 -- cleanup
500 exec(S[[RD /S /Q "$CONFBACKUPDIR"]])
501 vars.CONFBACKUPDIR = nil
502end
482 503
483-- *********************************************************** 504-- ***********************************************************
484-- Installer script start 505-- Installer script start
@@ -586,11 +607,10 @@ else
586end 607end
587 608
588vars.PREFIX = vars.PREFIX or os.getenv("PROGRAMFILES")..[[\LuaRocks]] 609vars.PREFIX = vars.PREFIX or os.getenv("PROGRAMFILES")..[[\LuaRocks]]
589vars.FULL_PREFIX = S"$PREFIX\\$VERSION" 610vars.BINDIR = vars.PREFIX
590vars.BINDIR = vars.FULL_PREFIX 611vars.LIBDIR = vars.PREFIX
591vars.LIBDIR = vars.FULL_PREFIX 612vars.LUADIR = S"$PREFIX\\lua"
592vars.LUADIR = S"$FULL_PREFIX\\lua" 613vars.INCDIR = S"$PREFIX\\include"
593vars.INCDIR = S"$FULL_PREFIX\\include"
594vars.LUA_SHORTV = vars.LUA_VERSION:gsub("%.", "") 614vars.LUA_SHORTV = vars.LUA_VERSION:gsub("%.", "")
595 615
596if INSTALL_LUA then 616if INSTALL_LUA then
@@ -611,17 +631,23 @@ else
611 vars.UNAME_M = get_architecture() -- can only do when installation was found 631 vars.UNAME_M = get_architecture() -- can only do when installation was found
612end 632end
613 633
614local datapath 634-- check location of system tree
615if vars.UNAME_M == "x86" then 635if not vars.TREE_ROOT then
616 datapath = os.getenv("PROGRAMFILES") .. [[\LuaRocks]] 636 -- no system tree location given, so we need to construct a default value
617else 637 if vars.LUA_BINDIR:lower():match([[([\/]+bin[\/]*)$]]) then
618 -- our target interpreter is 64bit, so the tree (with binaries) should go into 64bit program files 638 -- lua binary is located in a 'bin' subdirectory, so assume
619 datapath = os.getenv("ProgramW6432") .. [[\LuaRocks]] 639 -- default Lua layout and match rocktree on top
640 vars.TREE_ROOT = vars.LUA_BINDIR:lower():gsub([[[\/]+bin[\/]*$]], [[\]])
641 else
642 -- no 'bin', so use a named tree next to the Lua executable
643 vars.TREE_ROOT = vars.LUA_BINDIR .. [[\systree]]
644 end
620end 645end
646
647local datapath
621vars.SYSCONFDIR = vars.SYSCONFDIR or vars.PREFIX 648vars.SYSCONFDIR = vars.SYSCONFDIR or vars.PREFIX
622vars.SYSCONFFILENAME = S"config-$LUA_VERSION.lua" 649vars.SYSCONFFILENAME = S"config-$LUA_VERSION.lua"
623vars.CONFIG_FILE = vars.SYSCONFDIR.."\\"..vars.SYSCONFFILENAME 650vars.CONFIG_FILE = vars.SYSCONFDIR.."\\"..vars.SYSCONFFILENAME
624vars.TREE_ROOT = vars.TREE_ROOT or datapath..[[\systree]]
625if SELFCONTAINED then 651if SELFCONTAINED then
626 vars.SYSCONFDIR = vars.PREFIX 652 vars.SYSCONFDIR = vars.PREFIX
627 vars.TREE_ROOT = vars.PREFIX..[[\systree]] 653 vars.TREE_ROOT = vars.PREFIX..[[\systree]]
@@ -635,7 +661,7 @@ print(S[[
635========================== 661==========================
636 662
637Will configure LuaRocks with the following paths: 663Will configure LuaRocks with the following paths:
638LuaRocks : $FULL_PREFIX 664LuaRocks : $PREFIX
639Config file : $CONFIG_FILE 665Config file : $CONFIG_FILE
640Rocktree : $TREE_ROOT 666Rocktree : $TREE_ROOT
641 667
@@ -664,17 +690,19 @@ print([[
664-- *********************************************************** 690-- ***********************************************************
665-- Install LuaRocks files 691-- Install LuaRocks files
666-- *********************************************************** 692-- ***********************************************************
667if FORCE then
668 print(S"Removing $FULL_PREFIX...")
669 exec(S[[RD /S /Q "$FULL_PREFIX"]])
670 print()
671end
672 693
673if exists(vars.FULL_PREFIX) then 694if exists(vars.PREFIX) then
674 die(S"$FULL_PREFIX exists. Use /F to force removal and reinstallation.") 695 if not FORCE then
696 die(S"$PREFIX exists. Use /F to force removal and reinstallation.")
697 else
698 backup_config_files()
699 print(S"Removing $PREFIX...")
700 exec(S[[RD /S /Q "$PREFIX"]])
701 print()
702 end
675end 703end
676 704
677print(S"Installing LuaRocks in $FULL_PREFIX...") 705print(S"Installing LuaRocks in $PREFIX...")
678if not exists(vars.BINDIR) then 706if not exists(vars.BINDIR) then
679 if not mkdir(vars.BINDIR) then 707 if not mkdir(vars.BINDIR) then
680 die() 708 die()
@@ -776,37 +804,21 @@ exit /b %EXITCODE%
776 print(S"Created LuaRocks command: $BINDIR\\"..c..".bat") 804 print(S"Created LuaRocks command: $BINDIR\\"..c..".bat")
777end 805end
778 806
779-- part below was commented out as its purpose was unclear
780-- see https://github.com/keplerproject/luarocks/pull/197#issuecomment-30176548
781
782-- configure 'scripts' directory
783-- if vars.TREE_BIN then
784-- mkdir(vars.TREE_BIN)
785-- if not USE_MINGW then
786-- -- definitly not for MinGW because of conflicting runtimes
787-- -- but is it ok to do it for others???
788-- exec(S[[COPY lua5.1\bin\*.dll "$TREE_BIN" >NUL]])
789-- end
790-- else
791-- if not USE_MINGW then
792-- mkdir(S[[$TREE_ROOT\bin]])
793-- -- definitly not for MinGW because of conflicting runtimes
794-- -- but is it ok to do it for others???
795-- exec(S[[COPY lua5.1\bin\*.dll "$TREE_ROOT"\bin >NUL]])
796-- end
797-- end
798
799-- *********************************************************** 807-- ***********************************************************
800-- Configure LuaRocks 808-- Configure LuaRocks
801-- *********************************************************** 809-- ***********************************************************
802 810
811restore_config_files()
803print() 812print()
804print("Configuring LuaRocks...") 813print("Configuring LuaRocks...")
805 814
806-- Create a site-config file 815-- Create a site-config file
807local site_config = S("site_config_$LUA_VERSION"):gsub("%.","_") 816local site_config = S("site_config_$LUA_VERSION"):gsub("%.","_")
808if exists(S([[$LUADIR\luarocks\]]..site_config..[[.lua]])) then 817if exists(S([[$LUADIR\luarocks\]]..site_config..[[.lua]])) then
809 exec(S([[RENAME "$LUADIR\luarocks\]]..site_config..[[.lua" site_config.lua.bak]])) 818 local nname = backup(S([[$LUADIR\luarocks\]]..site_config..[[.lua]]), site_config..".lua.bak")
819 print("***************")
820 print("*** WARNING *** LuaRocks site_config file already exists: '"..site_config..".lua'. The old file has been renamed to '"..nname.."'")
821 print("***************")
810end 822end
811local f = io.open(vars.LUADIR.."\\luarocks\\"..site_config..".lua", "w") 823local f = io.open(vars.LUADIR.."\\luarocks\\"..site_config..".lua", "w")
812f:write(S[=[ 824f:write(S[=[
@@ -832,13 +844,6 @@ site_config.LUAROCKS_MD5CHECKER=[[md5sum]]
832if FORCE_CONFIG then 844if FORCE_CONFIG then
833 f:write("site_config.LUAROCKS_FORCE_CONFIG=true\n") 845 f:write("site_config.LUAROCKS_FORCE_CONFIG=true\n")
834end 846end
835if exists(vars.LUADIR.."\\luarocks\\"..site_config..".lua.bak") then
836 for line in io.lines(vars.LUADIR.."\\luarocks\\"..site_config..".lua.bak", "r") do
837 f:write(line)
838 f:write("\n")
839 end
840 exec(S([[DEL /F /Q "$LUADIR\luarocks\]]..site_config..[[.lua.bak"]]))
841end
842f:write("return site_config\n") 847f:write("return site_config\n")
843f:close() 848f:close()
844print(S([[Created LuaRocks site-config file: $LUADIR\luarocks\]]..site_config..[[.lua]])) 849print(S([[Created LuaRocks site-config file: $LUADIR\luarocks\]]..site_config..[[.lua]]))
@@ -913,17 +918,17 @@ if REGISTRY then
913 -- expand template with correct path information 918 -- expand template with correct path information
914 print() 919 print()
915 print([[Loading registry information for ".rockspec" files]]) 920 print([[Loading registry information for ".rockspec" files]])
916 exec( S[[win32\lua5.1\bin\lua5.1.exe "$FULL_PREFIX\LuaRocks.reg.lua" "$FULL_PREFIX\LuaRocks.reg.template"]] ) 921 exec( S[[win32\lua5.1\bin\lua5.1.exe "$PREFIX\LuaRocks.reg.lua" "$PREFIX\LuaRocks.reg.template"]] )
917 exec( S[[regedit /S "$FULL_PREFIX\\LuaRocks.reg"]] ) 922 exec( S[[regedit /S "$PREFIX\\LuaRocks.reg"]] )
918end 923end
919 924
920-- *********************************************************** 925-- ***********************************************************
921-- Cleanup 926-- Cleanup
922-- *********************************************************** 927-- ***********************************************************
923-- remove regsitry related files, no longer needed 928-- remove regsitry related files, no longer needed
924exec( S[[del "$FULL_PREFIX\LuaRocks.reg.*" >NUL]] ) 929exec( S[[del "$PREFIX\LuaRocks.reg.*" >NUL]] )
925-- remove pe-parser module 930-- remove pe-parser module
926exec( S[[del "$FULL_PREFIX\pe-parser.lua" >NUL]] ) 931exec( S[[del "$PREFIX\pe-parser.lua" >NUL]] )
927 932
928-- *********************************************************** 933-- ***********************************************************
929-- Exit handlers 934-- Exit handlers
@@ -943,8 +948,8 @@ Lua interpreter;
943 PATH : $LUA_BINDIR 948 PATH : $LUA_BINDIR
944 PATHEXT : .LUA 949 PATHEXT : .LUA
945LuaRocks; 950LuaRocks;
946 PATH : $FULL_PREFIX 951 PATH : $PREFIX
947 LUA_PATH : $FULL_PREFIX\lua\?.lua;$FULL_PREFIX\lua\?\init.lua 952 LUA_PATH : $PREFIX\lua\?.lua;$PREFIX\lua\?\init.lua
948Local user rocktree (Note: %APPDATA% is user dependent); 953Local user rocktree (Note: %APPDATA% is user dependent);
949 PATH : %APPDATA%\LuaRocks\bin 954 PATH : %APPDATA%\LuaRocks\bin
950 LUA_PATH : %APPDATA%\LuaRocks\share\lua\$LUA_VERSION\?.lua;%APPDATA%\LuaRocks\share\lua\$LUA_VERSION\?\init.lua 955 LUA_PATH : %APPDATA%\LuaRocks\share\lua\$LUA_VERSION\?.lua;%APPDATA%\LuaRocks\share\lua\$LUA_VERSION\?\init.lua
diff --git a/src/luarocks/cfg.lua b/src/luarocks/cfg.lua
index 3b7f9c37..e3d6e74b 100644
--- a/src/luarocks/cfg.lua
+++ b/src/luarocks/cfg.lua
@@ -228,17 +228,33 @@ end
228if not site_config.LUAROCKS_FORCE_CONFIG then 228if not site_config.LUAROCKS_FORCE_CONFIG then
229 229
230 home_config_file_default = home_config_dir.."/config-"..cfg.lua_version..".lua" 230 home_config_file_default = home_config_dir.."/config-"..cfg.lua_version..".lua"
231 local list = {
232 os.getenv("LUAROCKS_CONFIG_" .. version_suffix) or os.getenv("LUAROCKS_CONFIG"),
233 home_config_file_default,
234 home_config_dir.."/config.lua",
235 }
236 -- first entry might be a silent nil, check and remove if so
237 if not list[1] then table.remove(list, 1) end
238 231
239 home_config_file = load_config_file(list) 232 local config_env_var = "LUAROCKS_CONFIG_" .. version_suffix
240 home_config_ok = (home_config_file ~= nil) 233 local config_env_value = os.getenv(config_env_var)
234 if not config_env_value then
235 config_env_var = "LUAROCKS_CONFIG"
236 config_env_value = os.getenv(config_env_var)
237 end
238
239 -- first try environment provided file, so we can explicitly warn when it is missing
240 if config_env_value then
241 local list = { config_env_value }
242 home_config_file = load_config_file(list)
243 home_config_ok = (home_config_file ~= nil)
244 if not home_config_ok then
245 io.stderr:write("Warning: could not load configuration file `"..config_env_value.."` given in environment variable "..config_env_var.."\n")
246 end
247 end
241 248
249 -- try the alternative defaults if there was no environment specified file or it didn't work
250 if not home_config_ok then
251 local list = {
252 home_config_file_default,
253 home_config_dir.."/config.lua",
254 }
255 home_config_file = load_config_file(list)
256 home_config_ok = (home_config_file ~= nil)
257 end
242end 258end
243 259
244 260
@@ -375,7 +391,7 @@ local defaults = {
375} 391}
376 392
377if cfg.platforms.windows then 393if cfg.platforms.windows then
378 local full_prefix = (site_config.LUAROCKS_PREFIX or (os.getenv("PROGRAMFILES")..[[\LuaRocks]])).."\\"..cfg.major_version 394 local full_prefix = (site_config.LUAROCKS_PREFIX or (os.getenv("PROGRAMFILES")..[[\LuaRocks]]))
379 extra_luarocks_module_dir = full_prefix.."\\lua\\?.lua" 395 extra_luarocks_module_dir = full_prefix.."\\lua\\?.lua"
380 396
381 home_config_file = home_config_file and home_config_file:gsub("\\","/") 397 home_config_file = home_config_file and home_config_file:gsub("\\","/")