diff options
| author | Thijs Schreijer <thijs@thijsschreijer.nl> | 2013-04-30 09:29:39 +0200 |
|---|---|---|
| committer | Thijs Schreijer <thijs@thijsschreijer.nl> | 2013-04-30 09:29:39 +0200 |
| commit | e13ed563952168ee19c396759a9fbd025b8ffc77 (patch) | |
| tree | ee919afa1b8a909cacb27b7e4be87b1401e6451f | |
| parent | 3440b0daf06ceccd30d72e3e978d453de26f1319 (diff) | |
| download | luarocks-e13ed563952168ee19c396759a9fbd025b8ffc77.tar.gz luarocks-e13ed563952168ee19c396759a9fbd025b8ffc77.tar.bz2 luarocks-e13ed563952168ee19c396759a9fbd025b8ffc77.zip | |
using objdump.exe to automatically detect the runtime dll to use for the chosen interpreter
| -rw-r--r-- | install.bat | 56 | ||||
| -rw-r--r-- | win32/bin/objdump.exe | bin | 0 -> 2247694 bytes |
2 files changed, 47 insertions, 9 deletions
diff --git a/install.bat b/install.bat index 2150d2c3..4e1ede31 100644 --- a/install.bat +++ b/install.bat | |||
| @@ -18,6 +18,7 @@ vars.LUA_LIBNAME = nil | |||
| 18 | vars.LUA_VERSION = "5.1" | 18 | vars.LUA_VERSION = "5.1" |
| 19 | vars.LUA_SHORTV = nil | 19 | vars.LUA_SHORTV = nil |
| 20 | vars.LUA_LIB_NAMES = "lua5.1.lib lua51.dll liblua.dll.a" | 20 | vars.LUA_LIB_NAMES = "lua5.1.lib lua51.dll liblua.dll.a" |
| 21 | vars.LUA_RUNTIME = nil | ||
| 21 | 22 | ||
| 22 | local P_SET = false | 23 | local P_SET = false |
| 23 | local FORCE = false | 24 | local FORCE = false |
| @@ -263,6 +264,39 @@ local function look_for_headers (directory) | |||
| 263 | return false | 264 | return false |
| 264 | end | 265 | end |
| 265 | 266 | ||
| 267 | local function get_runtime() | ||
| 268 | local infile = vars.LUA_BINDIR .."\\"..vars.LUA_INTERPRETER | ||
| 269 | local outfile = "output.txt" | ||
| 270 | local content | ||
| 271 | -- analyze binary | ||
| 272 | if exec([[.\bin\objdump -x "]]..infile..[[" > ]]..outfile) then | ||
| 273 | -- read temp file | ||
| 274 | local fh = io.open(outfile) | ||
| 275 | content = fh:read("*a") | ||
| 276 | fh:close() | ||
| 277 | end | ||
| 278 | -- delete temp file | ||
| 279 | os.remove(outfile) | ||
| 280 | if not content then | ||
| 281 | print(" Failed to analyze "..infile.." for the runtime used") | ||
| 282 | return false | ||
| 283 | end | ||
| 284 | |||
| 285 | -- lookup | ||
| 286 | content = content:upper() | ||
| 287 | local result = content:match('DLL NAME%: (MSVCR%d*)%.DLL') | ||
| 288 | if not result then | ||
| 289 | result = content:match('DLL NAME%: (MSVCRT)%.DLL') | ||
| 290 | end | ||
| 291 | |||
| 292 | if result then | ||
| 293 | vars.LUA_RUNTIME = result | ||
| 294 | print(" "..vars.LUA_INTERPRETER.." uses "..tostring(result)..".DLL as runtime") | ||
| 295 | return true | ||
| 296 | end | ||
| 297 | return false | ||
| 298 | end | ||
| 299 | |||
| 266 | local function look_for_lua_install () | 300 | local function look_for_lua_install () |
| 267 | print("Looking for Lua interpreter") | 301 | print("Looking for Lua interpreter") |
| 268 | local directories = { [[c:\lua5.1.2]], [[c:\lua]], [[c:\kepler\1.1]] } | 302 | local directories = { [[c:\lua5.1.2]], [[c:\lua]], [[c:\kepler\1.1]] } |
| @@ -275,7 +309,7 @@ local function look_for_lua_install () | |||
| 275 | look_for_headers(vars.LUA_INCDIR) | 309 | look_for_headers(vars.LUA_INCDIR) |
| 276 | then | 310 | then |
| 277 | if exec(S"$LUA_BINDIR\\$LUA_INTERPRETER -v 2>NUL") then | 311 | if exec(S"$LUA_BINDIR\\$LUA_INTERPRETER -v 2>NUL") then |
| 278 | print(" Ok") | 312 | print(" Ok") |
| 279 | return true | 313 | return true |
| 280 | end | 314 | end |
| 281 | end | 315 | end |
| @@ -290,12 +324,15 @@ local function look_for_lua_install () | |||
| 290 | if look_for_link_libraries(directory) then | 324 | if look_for_link_libraries(directory) then |
| 291 | print("Link library found, now looking for headers...") | 325 | print("Link library found, now looking for headers...") |
| 292 | if look_for_headers(directory) then | 326 | if look_for_headers(directory) then |
| 293 | print("Headers found, now testing interpreter...") | 327 | print("Headers found, checking runtime to use...") |
| 294 | if exec(S[[$LUA_BINDIR\$LUA_INTERPRETER -v 2>NUL]]) then | 328 | if get_runtime() then |
| 295 | print(" Ok") | 329 | print("Runtime found, now testing interpreter...") |
| 296 | return true | 330 | if exec(S[[$LUA_BINDIR\$LUA_INTERPRETER -v 2>NUL]]) then |
| 331 | print(" Ok") | ||
| 332 | return true | ||
| 333 | end | ||
| 334 | print(" Interpreter returned an error, not ok") | ||
| 297 | end | 335 | end |
| 298 | print(" Interpreter returned an error, not ok") | ||
| 299 | end | 336 | end |
| 300 | end | 337 | end |
| 301 | end | 338 | end |
| @@ -358,6 +395,7 @@ if not look_for_lua_install() then | |||
| 358 | vars.LUA_LIBDIR = vars.LIBDIR | 395 | vars.LUA_LIBDIR = vars.LIBDIR |
| 359 | vars.LUA_INCDIR = vars.INCDIR | 396 | vars.LUA_INCDIR = vars.INCDIR |
| 360 | vars.LUA_LIBNAME = "lua5.1.lib" | 397 | vars.LUA_LIBNAME = "lua5.1.lib" |
| 398 | vars.LUA_RUNTIME = "MSVCR80" | ||
| 361 | else | 399 | else |
| 362 | print(S[[ | 400 | print(S[[ |
| 363 | 401 | ||
| @@ -367,7 +405,7 @@ Lua interpreter: $LUA_BINDIR\$LUA_INTERPRETER | |||
| 367 | Lua binaries : $LUA_BINDIR | 405 | Lua binaries : $LUA_BINDIR |
| 368 | Lua libraries : $LUA_LIBDIR | 406 | Lua libraries : $LUA_LIBDIR |
| 369 | Lua includes : $LUA_INCDIR | 407 | Lua includes : $LUA_INCDIR |
| 370 | Binaries will be linked against: $LUA_LIBNAME | 408 | Binaries will be linked against: $LUA_LIBNAME with runtime $LUA_RUNTIME |
| 371 | 409 | ||
| 372 | ]]) | 410 | ]]) |
| 373 | end | 411 | end |
| @@ -521,10 +559,10 @@ rocks_trees = { | |||
| 521 | f:write(S"scripts_dir=[[$SCRIPTS_DIR]]\n") | 559 | f:write(S"scripts_dir=[[$SCRIPTS_DIR]]\n") |
| 522 | end | 560 | end |
| 523 | f:write("variables = {\n") | 561 | f:write("variables = {\n") |
| 524 | if USE_MINGW then | 562 | if USE_MINGW and vars.LUA_RUNTIME == "MSVCRT" then |
| 525 | f:write(" MSVCRT = 'm',\n") | 563 | f:write(" MSVCRT = 'm',\n") |
| 526 | else | 564 | else |
| 527 | f:write(" MSVCRT = 'msvcr80',\n") | 565 | f:write(" MSVCRT = '"..vars.LUA_RUNTIME.."',\n") |
| 528 | end | 566 | end |
| 529 | f:write(S" LUALIB = '$LUA_LIBNAME'\n") | 567 | f:write(S" LUALIB = '$LUA_LIBNAME'\n") |
| 530 | f:write("}\n") | 568 | f:write("}\n") |
diff --git a/win32/bin/objdump.exe b/win32/bin/objdump.exe new file mode 100644 index 00000000..4429d103 --- /dev/null +++ b/win32/bin/objdump.exe | |||
| Binary files differ | |||
