aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgnacio Burgueño <ignaciob@inconcertcc.com>2013-04-21 18:30:23 -0300
committerIgnacio Burgueño <ignaciob@inconcertcc.com>2013-04-21 18:30:23 -0300
commitd0890120f9b1cf1d986cf6299e0b59c533480591 (patch)
tree2d9691bfd2870db46d9b3d30a2ba716a02b30e63
parent6cc2c255777d77a73197ed6b960f898391dabfe6 (diff)
downloadluarocks-d0890120f9b1cf1d986cf6299e0b59c533480591.tar.gz
luarocks-d0890120f9b1cf1d986cf6299e0b59c533480591.tar.bz2
luarocks-d0890120f9b1cf1d986cf6299e0b59c533480591.zip
Rewrote install batch file in Lua.
This is mostly a direct translation, so there are lots of things to improve, but it is a working install script written in Lua.
Diffstat (limited to '')
-rw-r--r--install.bat1067
1 files changed, 571 insertions, 496 deletions
diff --git a/install.bat b/install.bat
index 2a0e677b..d0d641b7 100644
--- a/install.bat
+++ b/install.bat
@@ -1,499 +1,574 @@
1@ECHO OFF 1rem=rem --[[
2@setlocal& set luafile="%~f0" & if exist "%~f0.bat" set luafile="%~f0.bat"
3@lua5.1\bin\lua5.1.exe %luafile% %*& exit /b ]]
2 4
3REM Boy, it feels like 1994 all over again. 5local vars = {}
4 6
5SETLOCAL ENABLEDELAYEDEXPANSION 7vars.PREFIX = [[C:\LuaRocks]]
6 8vars.VERSION = "2.0"
7SET PREFIX=C:\LuaRocks 9vars.SYSCONFDIR = [[C:\LuaRocks]]
8SET VERSION=2.0 10vars.ROCKS_TREE = [[C:\LuaRocks]]
9SET SYSCONFDIR=C:\LuaRocks 11vars.SCRIPTS_DIR = nil
10SET ROCKS_TREE=C:\LuaRocks 12vars.LUA_INTERPRETER = nil
11SET SCRIPTS_DIR= 13vars.LUA_PREFIX = nil
12SET FORCE=OFF 14vars.LUA_BINDIR = nil
13SET INSTALL_LUA=OFF 15vars.LUA_INCDIR = nil
14SET LUA_INTERPRETER= 16vars.LUA_LIBDIR = nil
15SET LUA_PREFIX= 17vars.LUA_LIBNAME = nil
16SET LUA_BINDIR= 18vars.LUA_VERSION = "5.1"
17SET LUA_INCDIR= 19vars.LUA_SHORTV = nil
18SET LUA_LIBDIR= 20vars.LUA_LIB_NAMES = "lua5.1.lib lua51.dll liblua.dll.a"
19SET LUA_LIBNAME= 21
20SET FORCE_CONFIG= 22local P_SET = false
21SET USE_MINGW= 23local FORCE = false
22SET MKDIR=.\bin\mkdir -p 24local FORCE_CONFIG = false
23SET LUA_VERSION=5.1 25local INSTALL_LUA = false
24SET LUA_SHORTV= 26local USE_MINGW = false
25SET LUA_LIB_NAMES=lua5.1.lib lua51.dll liblua.dll.a 27local REGISTRY = false
26SET REGISTRY=OFF 28
27SET P_SET=FALSE 29---
28 30-- Some helpers
29REM *********************************************************** 31--
30REM Option parser 32local function die(message)
31REM *********************************************************** 33 if message then print(message) end
32ECHO LuaRocks %VERSION%.x installer. 34 print()
33ECHO. 35 print("Failed installing LuaRocks. Run with /? for help.")
34 36 os.exit(1)
35:PARSE_LOOP 37end
36IF [%1]==[] GOTO DONE_PARSING 38
37IF [%1]==[/?] ( 39local function exec(cmd)
38 ECHO Installs LuaRocks. 40 --print(cmd)
39 ECHO. 41 local status = os.execute(cmd)
40 ECHO /P [dir] ^(REQUIRED^) Where to install. 42 return status == 0
41 ECHO Note that version; %VERSION%, will be 43end
42 ECHO appended to this path. 44
43 ECHO /CONFIG [dir] Location where the config file should be installed. 45local function exists(filename)
44 ECHO Default is same place of installation 46 local cmd = [[.\bin\test -e "]]..filename..[["]]
45 ECHO /TREE [dir] Root of the local tree of installed rocks. 47 return exec(cmd)
46 ECHO Default is same place of installation 48end
47 ECHO /SCRIPTS [dir] Where to install scripts installed by rocks. 49
48 ECHO Default is TREE/bin. 50local function mkdir (dir)
49 ECHO. 51 return exec([[.\bin\mkdir -p "]]..dir..[[" >NUL]])
50 ECHO /LV [version] Lua version to use; either 5.1 or 5.2. 52end
51 ECHO Default is 5.1 53
52 ECHO /L Install LuaRocks' own copy of Lua even if detected, 54-- interpolate string with values from 'vars' table
53 ECHO this will always be a 5.1 installation. 55local function S (tmpl)
54 ECHO ^(/LUA, /INC, /LIB, /BIN cannot be used with /L^) 56 return (tmpl:gsub('%$([%a_][%w_]*)', vars))
55 ECHO /LUA [dir] Location where Lua is installed - e.g. c:\lua\5.1\ 57end
56 ECHO This is the base directory, the installer will look 58
57 ECHO for subdirectories bin, lib, include. Alternatively 59local function print_help()
58 ECHO these can be specified explicitly using the /INC, 60 print(S[[
59 ECHO /LIB, and /BIN options. 61Installs LuaRocks.
60 ECHO /INC [dir] Location of Lua includes - e.g. c:\lua\5.1\include 62
61 ECHO If provided overrides sub directory found using /LUA. 63/P [dir] ^(REQUIRED^) Where to install.
62 ECHO /LIB [dir] Location of Lua libraries -e.g. c:\lua\5.1\lib 64 Note that version; $VERSION, will be
63 ECHO If provided overrides sub directory found using /LUA. 65 appended to this path.
64 ECHO /BIN [dir] Location of Lua executables - e.g. c:\lua\5.1\bin 66/CONFIG [dir] Location where the config file should be installed.
65 ECHO If provided overrides sub directory found using /LUA. 67 Default is same place of installation
66 ECHO. 68/TREE [dir] Root of the local tree of installed rocks.
67 ECHO /MW Use mingw as build system instead of MSVC 69 Default is same place of installation
68 ECHO. 70/SCRIPTS [dir] Where to install scripts installed by rocks.
69 ECHO /FORCECONFIG Use a single config location. Do not use the 71 Default is TREE/bin.
70 ECHO LUAROCKS_CONFIG variable or the user's home directory. 72
71 ECHO Useful to avoid conflicts when LuaRocks 73/LV [version] Lua version to use; either 5.1 or 5.2.
72 ECHO is embedded within an application. 74 Default is 5.1
73 ECHO. 75/L Install LuaRocks' own copy of Lua even if detected,
74 ECHO /F Remove installation directory if it already exists. 76 this will always be a 5.1 installation.
75 ECHO. 77 ^(/LUA, /INC, /LIB, /BIN cannot be used with /L^)
76 ECHO /R Load registry information to register '.rockspec' 78/LUA [dir] Location where Lua is installed - e.g. c:\lua\5.1\
77 ECHO extension with LuaRocks commands ^(right-click^). 79 This is the base directory, the installer will look
78 ECHO. 80 for subdirectories bin, lib, include. Alternatively
79 GOTO QUIT 81 these can be specified explicitly using the /INC,
80) 82 /LIB, and /BIN options.
81IF /I [%1]==[/P] ( 83/INC [dir] Location of Lua includes - e.g. c:\lua\5.1\include
82 SET PREFIX=%~2 84 If provided overrides sub directory found using /LUA.
83 SET SYSCONFDIR=%~2 85/LIB [dir] Location of Lua libraries -e.g. c:\lua\5.1\lib
84 SET ROCKS_TREE=%~2 86 If provided overrides sub directory found using /LUA.
85 SET P_SET=TRUE 87/BIN [dir] Location of Lua executables - e.g. c:\lua\5.1\bin
86 SHIFT /1 88 If provided overrides sub directory found using /LUA.
87 SHIFT /1 89
88 GOTO PARSE_LOOP 90/MW Use mingw as build system instead of MSVC
89) 91
90IF /I [%1]==[/CONFIG] ( 92/FORCECONFIG Use a single config location. Do not use the
91 SET SYSCONFDIR=%~2 93 LUAROCKS_CONFIG variable or the user's home directory.
92 SHIFT /1 94 Useful to avoid conflicts when LuaRocks
93 SHIFT /1 95 is embedded within an application.
94 GOTO PARSE_LOOP 96
95) 97/F Remove installation directory if it already exists.
96IF /I [%1]==[/TREE] ( 98
97 SET ROCKS_TREE=%~2 99/R Load registry information to register '.rockspec'
98 SHIFT /1 100 extension with LuaRocks commands ^(right-click^).
99 SHIFT /1 101
100 GOTO PARSE_LOOP 102]])
101) 103end
102IF /I [%1]==[/SCRIPTS] ( 104
103 SET SCRIPTS_DIR=%~2 105-- ***********************************************************
104 SHIFT /1 106-- Option parser
105 SHIFT /1 107-- ***********************************************************
106 GOTO PARSE_LOOP 108local function parse_options(args)
107) 109 for _, option in ipairs(args) do
108IF /I [%1]==[/LV] ( 110 local name = option.name:upper()
109 SET LUA_VERSION=%~2 111 if name == "/?" then
110 SHIFT /1 112 print_help()
111 SHIFT /1 113 os.exit(0)
112 GOTO PARSE_LOOP 114
113) 115 elseif name == "/P" then
114IF /I [%1]==[/L] ( 116 vars.PREFIX = option.value
115 SET INSTALL_LUA=ON 117 vars.SYSCONFDIR = option.value
116 SHIFT /1 118 vars.ROCKS_TREE = option.value
117 GOTO PARSE_LOOP 119 P_SET = true
118) 120 elseif name == "/CONFIG" then
119IF /I [%1]==[/MW] ( 121 vars.SYSCONFDIR = option.value
120 SET USE_MINGW=ON 122 elseif name == "/TREE" then
121 SHIFT /1 123 vars.ROCKS_TREE = option.value
122 GOTO PARSE_LOOP 124 elseif name == "/SCRIPTS" then
123) 125 vars.SCRIPTS_DIR = option.value
124IF /I [%1]==[/LUA] ( 126 elseif name == "/LV" then
125 SET LUA_PREFIX=%~2 127 vars.LUA_VERSION = option.value
126 SHIFT /1 128 elseif name == "/L" then
127 SHIFT /1 129 INSTALL_LUA = true
128 GOTO PARSE_LOOP 130 elseif name == "/MW" then
129) 131 USE_MINGW = true
130IF /I [%1]==[/LIB] ( 132 elseif name == "/LUA" then
131 SET LUA_LIBDIR=%~2 133 vars.LUA_PREFIX = option.value
132 SHIFT /1 134 elseif name == "/LIB" then
133 SHIFT /1 135 vars.LUA_LIBDIR = option.value
134 GOTO PARSE_LOOP 136 elseif name == "/INC" then
135) 137 vars.LUA_INCDIR = option.value
136IF /I [%1]==[/INC] ( 138 elseif name == "/BIN" then
137 SET LUA_INCDIR=%~2 139 vars.LUA_BINDIR = option.value
138 SHIFT /1 140 elseif name == "/FORCECONFIG" then
139 SHIFT /1 141 FORCE_CONFIG = true
140 GOTO PARSE_LOOP 142 elseif name == "/F" then
141) 143 FORCE = true
142IF /I [%1]==[/BIN] ( 144 elseif name == "/R" then
143 SET LUA_BINDIR=%~2 145 REGISTRY = true
144 SHIFT /1 146 else
145 SHIFT /1 147 die("Unrecognized option: " .. name)
146 GOTO PARSE_LOOP 148 end
147) 149 end
148IF /I [%1]==[/FORCECONFIG] ( 150end
149 SET FORCE_CONFIG=ON 151
150 SHIFT /1 152-- check for combination/required flags
151 GOTO PARSE_LOOP 153local function check_flags()
152) 154 if not P_SET then
153IF /I [%1]==[/F] ( 155 die("Missing required parameter /P")
154 SET FORCE=ON 156 end
155 SHIFT /1 157 if INSTALL_LUA then
156 GOTO PARSE_LOOP 158 if vars.LUA_INCDIR or vars.LUA_BINDIR or vars.LUA_LIBDIR or vars.LUA_PREFIX then
157) 159 die("Cannot combine option /L with any of /LUA /BIN /LIB /INC")
158IF /I [%1]==[/R] ( 160 end
159 SET REGISTRY=ON 161 if vars.LUA_VERSION ~= "5.1" then
160 SHIFT /1 162 die("Bundled Lua version is 5.1, cannot install 5.2")
161 GOTO PARSE_LOOP 163 end
162) 164 end
163ECHO Unrecognized option: %1 165 if vars.LUA_VERSION ~= "5.1" then
164GOTO ERROR 166 if vars.LUA_VERSION == "5.2" then
165:DONE_PARSING 167 vars.LUA_LIB_NAMES = vars.LUA_LIB_NAMES:gsub("5([%.]?)1", "5%12")
166 168 else
167REM check for combination/required flags 169 die("Bad argument: /LV must either be 5.1 or 5.2")
168IF NOT [%P_SET%]==[TRUE] ( 170 end
169 Echo Missing required parameter /P 171 end
170 GOTO ERROR 172end
171) 173
172IF [%INSTALL_LUA%]==[ON] ( 174-- ***********************************************************
173 IF NOT [%LUA_INCDIR%%LUA_BINDIR%%LUA_LIBDIR%%LUA_PREFIX%]==[] ( 175-- Detect Lua
174 ECHO Cannot combine option /L with any of /LUA /BIN /LIB /INC 176-- ***********************************************************
175 GOTO ERROR 177local function look_for_interpreter (directory)
176 ) 178 if vars.LUA_BINDIR then
177 IF NOT [%LUA_VERSION%]==[5.1] ( 179 if exists( S"$LUA_BINDIR\\lua$LUA_VERSION.exe" ) then
178 ECHO Bundled Lua version is 5.1, cannot install 5.2 180 vars.LUA_INTERPRETER = S"lua$LUA_VERSION.exe"
179 GOTO ERROR 181 print(S" Found $LUA_BINDIR\\$LUA_INTERPRETER")
180 ) 182 return true
181) 183 elseif exists(S"$LUA_BINDIR\\lua.exe") then
182IF NOT [%LUA_VERSION%]==[5.1] ( 184 vars.LUA_INTERPRETER = "lua.exe"
183 IF [%LUA_VERSION%]==[5.2] ( 185 print(S" Found $LUA_BINDIR\\$LUA_INTERPRETER")
184 SET LUA_LIB_NAMES=%LUA_LIB_NAMES:5.1=5.2% 186 return true
185 SET LUA_LIB_NAMES=%LUA_LIB_NAMES:51=52% 187 elseif exists(S"$LUA_BINDIR\\luajit.exe") then
186 ) ELSE ( 188 vars.LUA_INTERPRETER = "luajit.exe"
187 ECHO Bad argument: /LV must either be 5.1 or 5.2 189 print(S" Found $LUA_BINDIR\\$LUA_INTERPRETER")
188 GOTO ERROR 190 return true
189 ) 191 end
190) 192 die(S"Lua executable lua.exe, luajit.exe or lua$LUA_VERSION.exe not found in $LUA_BINDIR")
191 193 end
192SET FULL_PREFIX=%PREFIX%\%VERSION% 194
193SET BINDIR=%FULL_PREFIX% 195 for _, e in ipairs{ [[\]], [[\bin\]] } do
194SET LIBDIR=%FULL_PREFIX% 196 if exists(directory..e.."\\lua"..vars.LUA_VERSION..".exe") then
195SET LUADIR=%FULL_PREFIX%\lua 197 vars.LUA_INTERPRETER = S"lua$LUA_VERSION.exe"
196SET INCDIR=%FULL_PREFIX%\include 198 vars.LUA_BINDIR = directory .. e
197SET LUA_SHORTV=%LUA_VERSION:.=% 199 print(" Found ."..e..vars.LUA_INTERPRETER)
198 200 return true
199REM *********************************************************** 201
200REM Detect Lua 202 elseif exists(directory..e.."\\lua.exe") then
201REM *********************************************************** 203 vars.LUA_INTERPRETER = "lua.exe"
202 204 vars.LUA_BINDIR = directory..e
203IF [%INSTALL_LUA%]==[ON] GOTO USE_OWN_LUA 205 print(" Found ."..e..vars.LUA_INTERPRETER)
204 206 return true
205ECHO Looking for Lua interpreter 207
206FOR %%L IN (%LUA_PREFIX% c:\lua\5.1.2 c:\lua c:\kepler\1.1) DO ( 208 elseif exists(directory..e.."\\luajit.exe") then
207 ECHO checking %%L 209 vars.LUA_INTERPRETER = "luajit.exe"
208 SET CURR=%%L 210 vars.LUA_BINDIR = directory..e
209 IF EXIST "%%L" ( 211 print(" Found ."..e..vars.LUA_INTERPRETER)
210 IF NOT [%LUA_BINDIR%]==[] ( 212 return true
211 IF EXIST %LUA_BINDIR%\lua%LUA_VERSION%.exe ( 213 end
212 SET LUA_INTERPRETER=lua%LUA_VERSION%.exe 214 end
213 ECHO Found .\!LUA_INTERPRETER! 215 print(" No Lua interpreter found")
214 GOTO INTERPRETER_IS_SET 216 return false
215 ) 217end
216 IF EXIST %LUA_BINDIR%\lua.exe ( 218
217 SET LUA_INTERPRETER=lua.exe 219local function look_for_link_libraries (directory)
218 ECHO Found .\!LUA_INTERPRETER! 220 if vars.LUA_LIBDIR then
219 GOTO INTERPRETER_IS_SET 221 for name in vars.LUA_LIB_NAMES:gmatch("[^%s]+") do
220 ) 222 print(S" checking for $LUA_LIBDIR\\"..name)
221 IF EXIST %LUA_BINDIR%\luajit.exe ( 223 if exists(vars.LUA_LIBDIR.."\\"..name) then
222 SET LUA_INTERPRETER=luajit.exe 224 vars.LUA_LIBNAME = name
223 ECHO Found .\!LUA_INTERPRETER! 225 print(" Found "..name)
224 GOTO INTERPRETER_IS_SET 226 return true
225 ) 227 end
226 ECHO Lua executable lua.exe, luajit.exe or lua%LUA_VERSION%.exe not found in %LUA_BINDIR% 228 end
227 GOTO ERROR 229 die(S"link library ^(one of; $LUA_LIB_NAMES^) not found in $LUA_LIBDIR")
228 ) 230 end
229 SET CURR=%%L 231
230 FOR %%E IN (\ \bin\) DO ( 232 for _, e in ipairs{ [[\]], [[\lib\]], [[\bin\]]} do
231 IF EXIST "%%L%%E\lua%LUA_VERSION%.exe" ( 233 for name in vars.LUA_LIB_NAMES:gmatch("[^%s]+") do
232 SET LUA_INTERPRETER=lua%LUA_VERSION%.exe 234 print(" checking for "..directory..e.."\\"..name)
233 SET LUA_BINDIR=%%L%%E 235 if exists(directory..e.."\\"..name) then
234 ECHO Found .\%%E\!LUA_INTERPRETER! 236 vars.LUA_LIBDIR = directory .. e
235 GOTO INTERPRETER_IS_SET 237 vars.LUA_LIBNAME = name
236 ) 238 print(" Found "..name)
237 IF EXIST "%%L%%E\lua.exe" ( 239 return true
238 SET LUA_INTERPRETER=lua.exe 240 end
239 SET LUA_BINDIR=%%L%%E 241 end
240 ECHO Found .\%%E\!LUA_INTERPRETER! 242 end
241 GOTO INTERPRETER_IS_SET 243 return true
242 ) 244end
243 IF EXIST "%%L%%E\luajit.exe" (
244 SET LUA_INTERPRETER=luajit.exe
245 SET LUA_BINDIR=%%L%%E
246 ECHO Found .\%%E\!LUA_INTERPRETER!
247 GOTO INTERPRETER_IS_SET
248 )
249 )
250 ECHO No Lua interpreter found
251 GOTO TRY_NEXT_LUA_DIR
252 :INTERPRETER_IS_SET
253 ECHO Interpreter found, now looking for link libraries...
254 IF NOT [%LUA_LIBDIR%]==[] (
255 FOR %%T IN (%LUA_LIB_NAMES%) DO (
256 ECHO checking for %LUA_LIBDIR%\%%T
257 IF EXIST "%LUA_LIBDIR%\%%T" (
258 SET LUA_LIBNAME=%%T
259 ECHO Found %%T
260 GOTO LIBDIR_IS_SET
261 )
262 )
263 ECHO link library ^(one of; %LUA_LIB_NAMES%^) not found in %LUA_LIBDIR%
264 GOTO ERROR
265 )
266 FOR %%E IN (\ \lib\ \bin\) DO (
267 FOR %%S IN (%LUA_LIB_NAMES%) DO (
268 ECHO checking for %CURR%%%E\%%S
269 IF EXIST "%CURR%%%E\%%S" (
270 SET LUA_LIBDIR=%CURR%%%E
271 SET LUA_LIBNAME=%%S
272 ECHO Found %%S
273 GOTO LIBDIR_IS_SET
274 )
275 )
276 )
277 GOTO TRY_NEXT_LUA_DIR
278 :LIBDIR_IS_SET
279 ECHO Link library found, now looking for headers...
280 IF NOT [%LUA_INCDIR%]==[] (
281 ECHO checking for %LUA_INCDIR%\lua.h
282 IF EXIST %LUA_INCDIR%\lua.h (
283 ECHO Found lua.h
284 GOTO INCDIR_IS_SET
285 )
286 ECHO lua.h not found in %LUA_INCDIR%
287 GOTO ERROR
288 )
289 FOR %%E IN (\ \include\) DO (
290 ECHO checking for %CURR%%%E\lua.h
291 IF EXIST "%CURR%%%E\lua.h" (
292 SET LUA_INCDIR=%CURR%%%E
293 ECHO Found lua.h
294 GOTO INCDIR_IS_SET
295 )
296 )
297 GOTO TRY_NEXT_LUA_DIR
298 :INCDIR_IS_SET
299 ECHO Headers found, now testing interpreter...
300 %LUA_BINDIR%\%LUA_INTERPRETER% -v 2>NUL
301 IF NOT ERRORLEVEL 1 (
302 ECHO Ok
303 GOTO LUA_IS_SET
304 )
305 ECHO Interpreter returned an error, not ok
306 )
307:TRY_NEXT_LUA_DIR
308 REM wtf
309)
310ECHO Could not find Lua. Will install its own copy.
311ECHO See /? for options for specifying the location of Lua.
312:USE_OWN_LUA
313IF NOT [%LUA_VERSION%]==[5.1] (
314 ECHO Cannot install own copy because no 5.2 version is bundled
315 GOTO ERROR
316)
317SET INSTALL_LUA=ON
318SET LUA_INTERPRETER=lua5.1
319SET LUA_BINDIR=%BINDIR%
320SET LUA_LIBDIR=%LIBDIR%
321SET LUA_INCDIR=%INCDIR%
322SET LUA_LIBNAME=lua5.1.lib
323:LUA_IS_SET
324ECHO.
325ECHO Will configure LuaRocks with the following paths:
326ECHO LuaRocks : %FULL_PREFIX%
327ECHO Lua interpreter: %LUA_BINDIR%\%LUA_INTERPRETER%
328ECHO Lua binaries : %LUA_BINDIR%
329ECHO Lua libraries : %LUA_LIBDIR%
330ECHO Lua includes : %LUA_INCDIR%
331ECHO Binaries will be linked against: %LUA_LIBNAME%
332ECHO.
333
334REM ***********************************************************
335REM Install LuaRocks files
336REM ***********************************************************
337
338IF [%FORCE%]==[ON] (
339 ECHO Removing %FULL_PREFIX%...
340 RD /S /Q "%FULL_PREFIX%"
341 ECHO.
342)
343
344IF NOT EXIST "%FULL_PREFIX%" GOTO NOT_EXIST_PREFIX
345 ECHO %FULL_PREFIX% exists. Use /F to force removal and reinstallation.
346 GOTO ERROR
347:NOT_EXIST_PREFIX
348
349ECHO Installing LuaRocks in %FULL_PREFIX%...
350IF NOT EXIST "%BINDIR%" %MKDIR% "%BINDIR%"
351IF ERRORLEVEL 1 GOTO ERROR
352IF [%INSTALL_LUA%]==[ON] (
353 REM Copy the included Lua interpreter binaries
354 IF NOT EXIST "%LUA_BINDIR%" %MKDIR% "%LUA_BINDIR%"
355 IF NOT EXIST "%LUA_INCDIR%" %MKDIR% "%LUA_INCDIR%"
356 COPY lua5.1\bin\*.* "%LUA_BINDIR%" >NUL
357 COPY lua5.1\include\*.* "%LUA_INCDIR%" >NUL
358 ECHO Installed the LuaRocks bundled Lua interpreter in %LUA_BINDIR%
359)
360REM Copy the LuaRocks binaries
361COPY bin\*.* "%BINDIR%" >NUL
362IF ERRORLEVEL 1 GOTO ERROR
363REM Copy the LuaRocks lua source files
364IF NOT EXIST "%LUADIR%\luarocks" %MKDIR% "%LUADIR%\luarocks"
365IF ERRORLEVEL 1 GOTO ERROR
366XCOPY /S src\luarocks\*.* "%LUADIR%\luarocks" >NUL
367IF ERRORLEVEL 1 GOTO ERROR
368REM Create start scripts
369COPY src\bin\*.* "%BINDIR%" >NUL
370IF ERRORLEVEL 1 GOTO ERROR
371FOR %%C IN (luarocks luarocks-admin) DO (
372 REM rename unix-lua scripts to .lua files
373 RENAME "%BINDIR%\%%C" %%C.lua
374 IF ERRORLEVEL 1 GOTO ERROR
375 REM create a bootstrap batch file for the lua file, to start them
376 DEL /F /Q "%BINDIR%\%%C.bat" 2>NUL
377 ECHO @ECHO OFF>> "%BINDIR%\%%C.bat"
378 ECHO SETLOCAL>> "%BINDIR%\%%C.bat"
379 ECHO SET LUA_PATH=%LUADIR%\?.lua;%LUADIR%\?\init.lua;%%LUA_PATH%%>> "%BINDIR%\%%C.bat"
380 ECHO SET PATH=%BINDIR%\;%%PATH%%>> "%BINDIR%\%%C.bat"
381 ECHO "%LUA_INTERPRETER%" "%BINDIR%\%%C.lua" %%*>> "%BINDIR%\%%C.bat"
382 ECHO ENDLOCAL>> "%BINDIR%\%%C.bat"
383 ECHO Created LuaRocks command: %BINDIR%\%%C.bat
384)
385REM configure 'scripts' directory
386IF [%SCRIPTS_DIR%]==[] (
387 %MKDIR% "%ROCKS_TREE%"\bin >NUL
388 IF [%USE_MINGW%]==[] (
389 REM definitly not for MinGW because of conflicting runtimes
390 REM but is it ok to do it for others???
391 COPY lua5.1\bin\*.dll "%ROCKS_TREE%"\bin >NUL
392 )
393) ELSE (
394 %MKDIR% "%SCRIPTS_DIR%" >NUL
395 IF [%USE_MINGW%]==[] (
396 REM definitly not for MinGW because of conflicting runtimes
397 REM but is it ok to do it for others???
398 COPY lua5.1\bin\*.dll "%SCRIPTS_DIR%" >NUL
399 )
400)
401
402
403ECHO.
404ECHO Configuring LuaRocks...
405REM Create a site-config file
406IF EXIST "%LUADIR%\luarocks\site_config.lua" RENAME "%LUADIR%\luarocks\site_config.lua" site_config.lua.bak
407ECHO module("luarocks.site_config")>> "%LUADIR%\luarocks\site_config.lua"
408ECHO LUA_INCDIR=[[%LUA_INCDIR%]]>> "%LUADIR%\luarocks\site_config.lua"
409ECHO LUA_LIBDIR=[[%LUA_LIBDIR%]]>> "%LUADIR%\luarocks\site_config.lua"
410ECHO LUA_BINDIR=[[%LUA_BINDIR%]]>> "%LUADIR%\luarocks\site_config.lua"
411ECHO LUA_INTERPRETER=[[%LUA_INTERPRETER%]]>> "%LUADIR%\luarocks\site_config.lua"
412IF [%USE_MINGW%]==[ON] (
413ECHO LUAROCKS_UNAME_S=[[MINGW]]>> "%LUADIR%\luarocks\site_config.lua"
414) ELSE (
415ECHO LUAROCKS_UNAME_S=[[WindowsNT]]>> "%LUADIR%\luarocks\site_config.lua"
416)
417ECHO LUAROCKS_UNAME_M=[[x86]]>> "%LUADIR%\luarocks\site_config.lua"
418ECHO LUAROCKS_SYSCONFIG=[[%SYSCONFDIR%/config.lua]]>> "%LUADIR%\luarocks\site_config.lua"
419ECHO LUAROCKS_ROCKS_TREE=[[%ROCKS_TREE%]]>> "%LUADIR%\luarocks\site_config.lua"
420ECHO LUAROCKS_PREFIX=[[%PREFIX%]]>> "%LUADIR%\luarocks\site_config.lua"
421ECHO LUAROCKS_DOWNLOADER=[[wget]]>> "%LUADIR%\luarocks\site_config.lua"
422ECHO LUAROCKS_MD5CHECKER=[[md5sum]]>> "%LUADIR%\luarocks\site_config.lua"
423IF NOT [%FORCE_CONFIG%]==[] ECHO local LUAROCKS_FORCE_CONFIG=true>> "%LUADIR%\luarocks\site_config.lua"
424IF EXIST "%LUADIR%\luarocks\site_config.lua.bak" TYPE "%LUADIR%\luarocks\site_config.lua.bak">> "%LUADIR%\luarocks\site_config.lua"
425
426IF EXIST "%LUADIR%\luarocks\site_config.lua.bak" DEL /F /Q "%LUADIR%\luarocks\site_config.lua.bak"
427ECHO Created LuaRocks site-config file: %LUADIR%\luarocks\site_config.lua
428
429REM create config file
430SET CONFIG_FILE=%SYSCONFDIR%\config.lua
431
432IF NOT EXIST "%SYSCONFDIR%" %MKDIR% "%SYSCONFDIR%"
433IF NOT EXIST "%CONFIG_FILE%" (
434 ECHO rocks_servers = {>> "%CONFIG_FILE%"
435 ECHO [[http://luarocks.org/repositories/rocks]]>> "%CONFIG_FILE%"
436 ECHO }>> "%CONFIG_FILE%"
437 ECHO rocks_trees = {>> "%CONFIG_FILE%"
438 IF [%FORCE_CONFIG%]==[] ECHO home..[[/luarocks]],>> "%CONFIG_FILE%"
439 ECHO [[%ROCKS_TREE%]]>> "%CONFIG_FILE%"
440 ECHO }>> "%CONFIG_FILE%"
441 IF NOT [%SCRIPTS_DIR%]==[] ECHO scripts_dir=[[%SCRIPTS_DIR%]]>> "%CONFIG_FILE%"
442 ECHO variables = {>> "%CONFIG_FILE%"
443 IF [%USE_MINGW%]==[ON] (
444 ECHO MSVCRT = 'm',>> "%CONFIG_FILE%"
445 ) ELSE (
446 ECHO MSVCRT = 'msvcr80',>> "%CONFIG_FILE%"
447 )
448 ECHO LUALIB = '%LUA_LIBNAME%'>> "%CONFIG_FILE%"
449 ECHO }>> "%CONFIG_FILE%"
450 ECHO Created LuaRocks config file: %CONFIG_FILE%
451) ELSE (
452 ECHO LuaRocks config file already exists: %CONFIG_FILE%
453)
454
455ECHO.
456ECHO Creating rocktrees...
457IF NOT EXIST "%ROCKS_TREE%" (
458 %MKDIR% "%ROCKS_TREE%"
459 ECHO Created rocktree: "%ROCKS_TREE%"
460) ELSE (
461 ECHO Rocktree exists: "%ROCKS_TREE%"
462)
463IF NOT EXIST "%APPDATA%/luarocks" (
464 %MKDIR% "%APPDATA%/luarocks"
465 ECHO Created rocktree: "%APPDATA%\luarocks"
466) ELSE (
467 ECHO Rocktree exists: "%APPDATA%\luarocks"
468)
469
470REM Load registry information
471IF [%REGISTRY%]==[ON] (
472 REM expand template with correct path information
473 ECHO.
474 ECHO Loading registry information for ".rockspec" files
475 lua5.1\bin\lua5.1.exe "%FULL_PREFIX%\create_reg_file.lua" "%FULL_PREFIX%\LuaRocks.reg.template"
476 %FULL_PREFIX%\LuaRocks.reg
477)
478
479REM ***********************************************************
480REM Exit handlers
481REM ***********************************************************
482
483ECHO.
484ECHO *** LuaRocks is installed! ***
485ECHO.
486ECHO You may want to add the following elements to your paths;
487ECHO PATH : %LUA_BINDIR%;%FULL_PREFIX%
488ECHO LUA_PATH : %ROCKS_TREE%\share\lua\%LUA_VERSION%\?.lua;%ROCKS_TREE%\share\lua\%LUA_VERSION%\?\init.lua
489ECHO LUA_CPATH: %LUA_LIBDIR%\lua\%LUA_VERSION%\?.dll
490ECHO.
491:QUIT
492ENDLOCAL
493EXIT /B 0
494 245
495:ERROR 246local function look_for_headers (directory)
496ECHO. 247 if vars.LUA_INCDIR then
497ECHO Failed installing LuaRocks. Run with /? for help. 248 print(S" checking for $LUA_INCDIR\\lua.h")
249 if exists(S"$LUA_INCDIR\\lua.h") then
250 print(" Found lua.h")
251 return true
252 end
253 die(S"lua.h not found in $LUA_INCDIR")
254 end
255
256 for _, e in ipairs{ [[\]], [[\include\]]} do
257 print(" checking for "..directory..e.."\\lua.h")
258 if exists(directory..e.."\\lua.h") then
259 vars.LUA_INCDIR = directory..e
260 print(" Found lua.h")
261 return true
262 end
263 end
264end
265
266local function look_for_lua_install ()
267 print("Looking for Lua interpreter")
268 local directories = { [[c:\lua5.1.2]], [[c:\lua]], [[c:\kepler\1.1]] }
269 if vars.LUA_PREFIX then
270 table.insert(1, vars.LUA_PREFIX)
271 end
272 if vars.LUA_BINDIR and vars.LUA_LIBDIR and vars.LUA_INCDIR then
273 if look_for_interpreter(vars.LUA_BINDIR) and
274 look_for_link_libraries(vars.LUA_LIBDIR) and
275 look_for_headers(vars.LUA_INCDIR)
276 then
277 if exec(S"$LUA_BINDIR\\$LUA_INTERPRETER -v 2>NUL") then
278 print(" Ok")
279 return true
280 end
281 end
282 return false
283 end
284
285 for _, directory in ipairs(directories) do
286 print(" checking " .. directory)
287 if exists(directory) then
288 if look_for_interpreter(directory) then
289 print("Interpreter found, now looking for link libraries...")
290 if look_for_link_libraries(directory) then
291 print("Link library found, now looking for headers...")
292 if look_for_headers(directory) then
293 print("Headers found, now testing interpreter...")
294 if exec(S[[$LUA_BINDIR\$LUA_INTERPRETER -v 2>NUL]]) then
295 print(" Ok")
296 return true
297 end
298 print(" Interpreter returned an error, not ok")
299 end
300 end
301 end
302 end
303 end
304 return false
305end
306
307---
308-- Poor man's command-line parsing
309local config = {}
310local with_arg = {
311 ["/P"] = true,
312 ["/CONFIG"] = true,
313 ["/TREE"] = true,
314 ["/SCRIPTS"] = true,
315 ["/LV"] = true,
316 ["/LUA"] = true,
317 ["/INC"] = true,
318 ["/BIN"] = true,
319 ["/LIB"] = true,
320}
321local i = 1
322while i <= #arg do
323 local opt = arg[i]
324 if with_arg[opt] then
325 local value = arg[i + 1]
326 if not value then
327 die("Missing value for option "..opt)
328 end
329 config[#config + 1] = { name = opt, value = value }
330 i = i + 1
331 else
332 config[#config + 1] = { name = opt }
333 end
334 i = i + 1
335end
336
337print(S"LuaRocks $VERSION.x installer.\n")
338
339parse_options(config)
340check_flags()
341
342vars.FULL_PREFIX = S"$PREFIX\\$VERSION"
343vars.BINDIR = vars.FULL_PREFIX
344vars.LIBDIR = vars.FULL_PREFIX
345vars.LUADIR = S"$FULL_PREFIX\\lua"
346vars.INCDIR = S"$FULL_PREFIX\\include"
347vars.LUA_SHORTV = vars.LUA_VERSION:gsub("%.", "")
348
349if not look_for_lua_install() then
350 print("Could not find Lua. Will install its own copy.")
351 print("See /? for options for specifying the location of Lua.")
352 if vars.LUA_VERSION ~= "5.1" then
353 die("Cannot install own copy because no 5.2 version is bundled")
354 end
355 INSTALL_LUA = true
356 vars.LUA_INTERPRETER = "lua5.1"
357 vars.LUA_BINDIR = vars.BINDIR
358 vars.LUA_LIBDIR = vars.LIBDIR
359 vars.LUA_INCDIR = vars.INCDIR
360 vars.LUA_LIBNAME = "lua5.1.lib"
361else
362 print(S[[
363Will configure LuaRocks with the following paths:
364LuaRocks : $FULL_PREFIX
365Lua interpreter: $LUA_BINDIR\$LUA_INTERPRETER
366Lua binaries : $LUA_BINDIR
367Lua libraries : $LUA_LIBDIR
368Lua includes : $LUA_INCDIR
369Binaries will be linked against: $LUA_LIBNAME
370
371]])
372end
373
374-- ***********************************************************
375-- Install LuaRocks files
376-- ***********************************************************
377if FORCE then
378 print(S"Removing $FULL_PREFIX...")
379 exec(S[[RD /S /Q "$FULL_PREFIX"]])
380 print()
381end
382
383if exists(vars.FULL_PREFIX) then
384 die(S"$FULL_PREFIX exists. Use /F to force removal and reinstallation.")
385end
386
387print(S"Installing LuaRocks in $FULL_PREFIX...")
388if not exists(vars.BINDIR) then
389 if not mkdir(vars.BINDIR) then
390 die()
391 end
392end
393
394if INSTALL_LUA then
395 -- Copy the included Lua interpreter binaries
396 if not exists(vars.LUA_BINDIR) then
397 mkdir(vars.LUA_BINDIR)
398 end
399 if not exists(vars.LUA_INCDIR) then
400 mkdir(vars.LUA_INCDIR)
401 end
402 exec(S[[COPY lua5.1\bin\*.* "$LUA_BINDIR" >NUL]])
403 exec(S[[COPY lua5.1\include\*.* "$LUA_INCDIR" >NUL]])
404 print(S"Installed the LuaRocks bundled Lua interpreter in $LUA_BINDIR")
405end
406
407-- Copy the LuaRocks binaries
408if not exec(S[[COPY bin\*.* "$BINDIR" >NUL]]) then
409 die()
410end
411-- Copy the LuaRocks lua source files
412if not exists(S[[$LUADIR\luarocks]]) then
413 if not mkdir(S[[$LUADIR\luarocks]]) then
414 die()
415 end
416end
417if not exec(S[[XCOPY /S src\luarocks\*.* "$LUADIR\luarocks" >NUL]]) then
418 die()
419end
420-- Create start scripts
421if not exec(S[[COPY src\bin\*.* "$BINDIR" >NUL]]) then
422 die()
423end
424for _, c in ipairs{"luarocks", "luarocks-admin"} do
425 -- rename unix-lua scripts to .lua files
426 if not exec( (S[[RENAME "$BINDIR\%s" %s.lua]]):format(c, c) ) then
427 die()
428 end
429 -- create a bootstrap batch file for the lua file, to start them
430 exec(S[[DEL /F /Q "$BINDIR\]]..c..[[.bat" 2>NUL]])
431 local f = io.open(vars.BINDIR.."\\"..c..".bat", "w")
432 f:write(S[[
433@ECHO OFF
434SETLOCAL
435SET LUA_PATH=$LUADIR\?.lua;$LUADIR\?\init.lua;%LUA_PATH%
436SET PATH=$BINDIR\;%PATH%
437"$LUA_INTERPRETER" "$BINDIR\]]..c..[[.lua" %*
498ENDLOCAL 438ENDLOCAL
499EXIT /B 1 439]])
440 f:close()
441 print(S"Created LuaRocks command: $BINDIR\\"..c..".bat")
442end
443-- configure 'scripts' directory
444if vars.SCRIPTS_DIR then
445 mkdir(vars.SCRIPTS_DIR)
446 if USE_MINGW then
447 -- definitly not for MinGW because of conflicting runtimes
448 -- but is it ok to do it for others???
449 exec(S[[COPY lua5.1\bin\*.dll "$SCRIPTS_DIR" >NUL]])
450 end
451else
452 mkdir(S[[$ROCKS_TREE\bin]])
453 if USE_MINGW then
454 -- definitly not for MinGW because of conflicting runtimes
455 -- but is it ok to do it for others???
456 exec(S[[COPY lua5.1\bin\*.dll "$ROCKS_TREE"\bin >NUL]])
457 end
458end
459
460
461print()
462print("Configuring LuaRocks...")
463-- Create a site-config file
464if exists(S[[$LUADIR\luarocks\site_config.lua]]) then
465 exec(S[[RENAME "$LUADIR\luarocks\site_config.lua" site_config.lua.bak]])
466end
467local f = io.open(vars.LUADIR.."\\luarocks\\site_config.lua", "w")
468f:write(S[=[
469module("luarocks.site_config")
470LUA_INCDIR=[[$LUA_INCDIR]]
471LUA_LIBDIR=[[$LUA_LIBDIR]]
472LUA_BINDIR=[[$LUA_BINDIR]]
473LUA_INTERPRETER=[[$LUA_INTERPRETER]]
474]=])
475if USE_MINGW then
476 f:write("LUAROCKS_UNAME_S=[[MINGW]]\n")
477else
478 f:write("LUAROCKS_UNAME_S=[[WindowsNT]]\n")
479end
480f:write(S[=[
481LUAROCKS_UNAME_M=[[x86]]
482LUAROCKS_SYSCONFIG=[[$SYSCONFDIR\config.lua]]
483LUAROCKS_ROCKS_TREE=[[$ROCKS_TREE]]
484LUAROCKS_PREFIX=[[$PREFIX]]
485LUAROCKS_DOWNLOADER=[[wget]]
486LUAROCKS_MD5CHECKER=[[md5sum]]
487]=])
488if FORCE_CONFIG then
489 f:write("local LUAROCKS_FORCE_CONFIG=true\n")
490end
491if exists(vars.LUADIR.."\\luarocks\\site_config.lua.bak") then
492 for line in io.lines(vars.LUADIR.."\\luarocks\\site_config.lua.bak", "r") do
493 f:write(line)
494 f:write("\n")
495 end
496 exec(S[[DEL /F /Q "$LUADIR\luarocks\site_config.lua.bak"]])
497end
498f:close()
499print(S[[Created LuaRocks site-config file: $LUADIR\luarocks\site_config.lua]])
500
501-- create config file
502vars.CONFIG_FILE = vars.SYSCONFDIR.."\\config.lua"
503if not exists(vars.SYSCONFDIR) then
504 mkdir(vars.SYSCONFDIR)
505end
506if not exists(vars.CONFIG_FILE) then
507 local f = io.open(vars.CONFIG_FILE, "w")
508 f:write([=[
509rocks_servers = {
510 [[http://luarocks.org/repositories/rocks]]
511}
512rocks_trees = {
513]=])
514 if FORCE_CONFIG then
515 f:write(" home..[[/luarocks]],\n")
516 end
517 f:write(S" [[$ROCKS_TREE]]\n")
518 f:write("}\n")
519 if vars.SCRIPTS_DIR then
520 f:write(S"scripts_dir=[[$SCRIPTS_DIR]]\n")
521 end
522 f:write("variables = {\n")
523 if USE_MINGW then
524 f:write(" MSVCRT = 'm',\n")
525 else
526 f:write(" MSVCRT = 'msvcr80',\n")
527 end
528 f:write(S" LUALIB = '$LUA_LIBNAME'\n")
529 f:write("}\n")
530 f:close()
531 print(S"Created LuaRocks config file: $CONFIG_FILE")
532else
533 print(S"LuaRocks config file already exists: $CONFIG_FILE")
534end
535
536print()
537print("Creating rocktrees...")
538if not exists(vars.ROCKS_TREE) then
539 mkdir(vars.ROCKS_TREE)
540 print(S[[Created rocktree: "$ROCKS_TREE"]])
541else
542 print(S[[Rocktree exists: "$ROCKS_TREE"]])
543end
544local APPDATA = os.getenv("APPDATA")
545if not exists(APPDATA.."\\luarocks") then
546 mkdir(APPDATA.."\\luarocks")
547 print([[Created rocktree: "]]..APPDATA..[[\luarocks"]])
548else
549 print([[Rocktree exists: "]]..APPDATA..[[\luarocks"]])
550end
551
552-- Load registry information
553if REGISTRY then
554 -- expand template with correct path information
555 print()
556 print([[Loading registry information for ".rockspec" files]])
557 exec( S[[lua5.1\bin\lua5.1.exe "$FULL_PREFIX\create_reg_file.lua" "$FULL_PREFIX\LuaRocks.reg.template"]] )
558 exec( S"$FULL_PREFIX\\LuaRocks.reg" )
559end
560
561-- ***********************************************************
562-- Exit handlers
563-- ***********************************************************
564
565print(S[[
566*** LuaRocks is installed! ***
567
568 You may want to add the following elements to your paths;
569PATH : $LUA_BINDIR;$FULL_PREFIX
570LUA_PATH : $ROCKS_TREE\share\lua\$LUA_VERSION\?.lua;$ROCKS_TREE\share\lua\$LUA_VERSION\?\init.lua
571LUA_CPATH: $LUA_LIBDIR\lua\$LUA_VERSION\?.dll
572
573]])
574os.exit(0)