diff --git a/.appveyor/install.bat b/.appveyor/install.bat new file mode 100644 index 0000000..401ba89 --- /dev/null +++ b/.appveyor/install.bat @@ -0,0 +1,215 @@ +@echo off + +cd %APPVEYOR_BUILD_FOLDER% + +:: ========================================================= +:: Set some defaults. Infer some variables. +:: +:: These are set globally +if not "%LUA_VER%"=="" ( + set LUA=lua + set LUA_SHORTV=%LUA_VER:~0,3% +) else if not "%LJ_VER%"=="" ( + set LUA=luajit + set LJ_SHORTV=%LJ_VER:~0,3% + set LUA_SHORTV=5.1 +) else ( + echo Can not recognize needed Lua version + echo Please set LUA_VER or LJ_VER + exit /B 3 +) + +:: Now we declare a scope +Setlocal EnableDelayedExpansion EnableExtensions + +set LUAROCKS_SHORTV=%LUAROCKS_VER:~0,3% + +if not defined LUAROCKS_URL set LUAROCKS_URL=http://keplerproject.github.io/luarocks/releases +if not defined LUAROCKS_REPO set LUAROCKS_REPO=http://rocks.moonscript.org +if not defined LUA_URL set LUA_URL=http://www.lua.org/ftp +if not defined LUAJIT_GIT_REPO set LUAJIT_GIT_REPO=http://luajit.org/git/luajit-2.0.git +if not defined LUAJIT_URL set LUAJIT_URL=http://luajit.org/download + +if not defined LR_EXTERNAL set LR_EXTERNAL=c:\external +if not defined LUAROCKS_INSTALL set LUAROCKS_INSTALL=%ProgramFiles(x86)%\LuaRocks +if not defined LR_ROOT set LR_ROOT=%LUAROCKS_INSTALL%\%LUAROCKS_SHORTV% +if not defined LR_SYSTREE set LR_SYSTREE=%LUAROCKS_INSTALL%\systree +if /I "%platform%"=="x64" set LR_SYSTREE=%ProgramFiles%\LuaRocks\systree + +if not defined SEVENZIP set SEVENZIP=7z + +:: +:: ========================================================= + +:: first create some necessary directories: +mkdir downloads 2>NUL + +:: defines LUA_DIR so Cmake can find this Lua install +if "%LUA%"=="luajit" ( + set LUA_DIR=c:\lua\lj%LJ_SHORTV% +) else ( + set LUA_DIR=c:\lua\%LUA_VER% +) + +:: Download and compile Lua (or LuaJIT) +if "%LUA%"=="luajit" ( + if not exist %LUA_DIR% ( + if "%LJ_SHORTV%"=="2.1" ( + :: Clone repository and checkout 2.1 branch + set lj_source_folder=%APPVEYOR_BUILD_FOLDER%\downloads\luajit-%LJ_VER% + if not exist !lj_source_folder! ( + echo Cloning git repo %LUAJIT_GIT_REPO% !lj_source_folder! + git clone %LUAJIT_GIT_REPO% !lj_source_folder! || call :die "Failed to clone repository" + ) + cd !lj_source_folder!\src + git checkout v2.1 || call :die + ) else ( + set lj_source_folder=%APPVEYOR_BUILD_FOLDER%\downloads\luajit-%LJ_VER% + if not exist !lj_source_folder! ( + echo Downloading... %LUAJIT_URL%/LuaJIT-%LJ_VER%.tar.gz + curl --silent --fail --max-time 120 --connect-timeout 30 %LUAJIT_URL%/LuaJIT-%LJ_VER%.tar.gz | %SEVENZIP% x -si -so -tgzip | %SEVENZIP% x -si -ttar -aoa -odownloads + ) + cd !lj_source_folder!\src + ) + :: Compiles LuaJIT + call msvcbuild.bat + + mkdir %LUA_DIR% 2> NUL + for %%a in (bin include lib) do ( mkdir "%LUA_DIR%\%%a" ) + + for %%a in (luajit.exe lua51.dll) do ( move "!lj_source_folder!\src\%%a" "%LUA_DIR%\bin" ) + + move "!lj_source_folder!\src\lua51.lib" "%LUA_DIR%\lib" + for %%a in (lauxlib.h lua.h lua.hpp luaconf.h lualib.h luajit.h) do ( + copy "!lj_source_folder!\src\%%a" "%LUA_DIR%\include" + ) + + ) else ( + echo LuaJIT %LJ_VER% already installed at %LUA_DIR% + ) +) else ( + if not exist %LUA_DIR% ( + :: Download and compile Lua + if not exist downloads\lua-%LUA_VER% ( + curl --silent --fail --max-time 120 --connect-timeout 30 %LUA_URL%/lua-%LUA_VER%.tar.gz | %SEVENZIP% x -si -so -tgzip | %SEVENZIP% x -si -ttar -aoa -odownloads + ) + + mkdir downloads\lua-%LUA_VER%\etc 2> NUL + if not exist downloads\lua-%LUA_VER%\etc\winmake.bat ( + curl --silent --location --insecure --fail --max-time 120 --connect-timeout 30 https://github.com/Tieske/luawinmake/archive/master.tar.gz | %SEVENZIP% x -si -so -tgzip | %SEVENZIP% e -si -ttar -aoa -odownloads\lua-%LUA_VER%\etc luawinmake-master\etc\winmake.bat + ) + + cd downloads\lua-%LUA_VER% + call etc\winmake + call etc\winmake install %LUA_DIR% + ) else ( + echo Lua %LUA_VER% already installed at %LUA_DIR% + ) +) + +if not exist %LUA_DIR%\bin\%LUA%.exe ( + echo Missing Lua interpreter + exit /B 1 +) + +set PATH=%LUA_DIR%\bin;%PATH% +call %LUA% -v + +:: ========================================================= +:: LuaRocks +:: ========================================================= + +if not exist "%LR_ROOT%" ( + :: Downloads and installs LuaRocks + cd %APPVEYOR_BUILD_FOLDER% + + if not exist downloads\luarocks-%LUAROCKS_VER%-win32.zip ( + echo Downloading LuaRocks... + curl --silent --fail --max-time 120 --connect-timeout 30 --output downloads\luarocks-%LUAROCKS_VER%-win32.zip %LUAROCKS_URL%/luarocks-%LUAROCKS_VER%-win32.zip + %SEVENZIP% x -aoa -odownloads downloads\luarocks-%LUAROCKS_VER%-win32.zip + ) + + cd downloads\luarocks-%LUAROCKS_VER%-win32 + call install.bat /LUA %LUA_DIR% /Q /LV %LUA_SHORTV% /P "%LUAROCKS_INSTALL%" +) + +if not exist "%LR_ROOT%" ( + echo LuaRocks installation failed. + exit /B 2 +) + +set PATH=%LR_ROOT%;%LR_SYSTREE%\bin;%PATH% + +:: Lua will use just the system rocks +set LUA_PATH=%LR_ROOT%\lua\?.lua;%LR_ROOT%\lua\?\init.lua +set LUA_PATH=%LUA_PATH%;%LR_SYSTREE%\share\lua\%LUA_SHORTV%\?.lua +set LUA_PATH=%LUA_PATH%;%LR_SYSTREE%\share\lua\%LUA_SHORTV%\?\init.lua +set LUA_CPATH=%LR_SYSTREE%\lib\lua\%LUA_SHORTV%\?.dll + +call luarocks --version || call :die "Error with LuaRocks installation" +call luarocks list + +if not exist "%LR_EXTERNAL%" ( + mkdir "%LR_EXTERNAL%" + mkdir "%LR_EXTERNAL%\lib" + mkdir "%LR_EXTERNAL%\include" +) + +set PATH=%LR_EXTERNAL%;%PATH% + +:: Exports the following variables: +:: (beware of whitespace between & and ^ below) +endlocal & set PATH=%PATH%&^ +set LUA_DIR=%LUA_DIR%&^ +set LR_SYSTREE=%LR_SYSTREE%&^ +set LUA_PATH=%LUA_PATH%&^ +set LUA_CPATH=%LUA_CPATH%&^ +set LR_EXTERNAL=%LR_EXTERNAL% + +echo ====================================================== +if "%LUA%"=="luajit" ( + echo Installation of LuaJIT %LJ_VER% and LuaRocks %LUAROCKS_VER% done. +) else ( + echo Installation of Lua %LUA_VER% and LuaRocks %LUAROCKS_VER% done. +) +echo Platform - %platform% +echo LUA - %LUA% +echo LUA_SHORTV - %LUA_SHORTV% +echo LJ_SHORTV - %LJ_SHORTV% +echo LUA_PATH - %LUA_PATH% +echo LUA_CPATH - %LUA_CPATH% +echo +echo LR_EXTERNAL - %LR_EXTERNAL% +echo ====================================================== + +goto :eof + + + + + + + + + + + + + + + + + + +:: This blank space is intentional. If you see errors like "The system cannot find the batch label specified 'foo'" +:: then try adding or removing blank lines lines above. +:: Yes, really. +:: http://stackoverflow.com/questions/232651/why-the-system-cannot-find-the-batch-label-specified-is-thrown-even-if-label-e + +:: helper functions: + +:: for bailing out when an error occurred +:die %1 +echo %1 +exit 1 +goto :eof diff --git a/.appveyor/install_curl.bat b/.appveyor/install_curl.bat new file mode 100644 index 0000000..2c91e98 --- /dev/null +++ b/.appveyor/install_curl.bat @@ -0,0 +1,48 @@ +SETLOCAL + +set PLAT_NAME=Win32 +set CURL_PLAT=Win32 +set CURL_URL=http://curl.haxx.se/download +set CURL_CFG=DLL Release - DLL Windows SSPI + +if /I "%platform%" == "x64" ( + set PLAT_NAME=Win64 + set CURL_PLAT=x64 +) + +cd %APPVEYOR_BUILD_FOLDER% + +echo ========================================= +echo External library path: %LR_EXTERNAL% +echo ========================================= + +if not exist %LR_EXTERNAL%\libcurl.dll ( + @echo Download %CURL_URL%/curl-%CURL_VER%.zip ... + + appveyor DownloadFile %CURL_URL%/curl-%CURL_VER%.zip + 7z x curl-%CURL_VER%.zip + cd curl-%CURL_VER% + + @echo Build curl %CURL_CFG% / %PLAT_NAME% ... + + if exist projects\Windows\VC12\curl.sln ( + msbuild projects\Windows\VC12\curl.sln /p:Configuration="%CURL_CFG%" /p:Platform=%CURL_PLAT% + ) else ( + msbuild projects\Windows\VC12\curl-all.sln /p:Configuration="%CURL_CFG%" /p:Platform=%CURL_PLAT% + ) + + @echo Build curl done + + if not exist %LR_EXTERNAL%\include\curl mkdir %LR_EXTERNAL%\include\curl + copy "include\curl\*.h" %LR_EXTERNAL%\include\curl + copy "build\%PLAT_NAME%\VC12\%CURL_CFG%\libcurl.lib" %LR_EXTERNAL%\lib\libcurl.lib + copy "build\%PLAT_NAME%\VC12\%CURL_CFG%\libcurl.dll" %LR_EXTERNAL%\libcurl.dll +) + +if not exist %LR_EXTERNAL%\libcurl.dll ( + exit /B 1 +) + +appveyor PushArtifact %LR_EXTERNAL%\libcurl.dll -DeploymentName ext-deps + +cd %APPVEYOR_BUILD_FOLDER% diff --git a/.appveyor/pack_artifact.bat b/.appveyor/pack_artifact.bat new file mode 100644 index 0000000..bd52934 --- /dev/null +++ b/.appveyor/pack_artifact.bat @@ -0,0 +1,12 @@ +@setlocal + +@for /f "delims=" %%A in ('luarocks pack %1') do @set "rock_name=%%A" + +@set rock_name=%rock_name:Packed: =% + +@echo make rock file as artifact: %rock_name% + +@appveyor PushArtifact %rock_name% -DeploymentName %2 + +@endlocal + diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..a7ec4c9 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,65 @@ +version: 0.3.2.{build} + +os: +- Windows Server 2012 R2 + +shallow_clone: true + +environment: + LUAROCKS_VER: 2.2.1 + CURL_VER: 7.41.0 + + matrix: + - LUA_VER: 5.1.5 + # - LUA_VER: 5.2.4 + # - LUA_VER: 5.3.0 + # - LJ_VER: 2.0.3 + # - LJ_VER: 2.1 + +platform: + - x64 + - x86 + +cache: + - c:\lua -> appveyor.yml + - c:\external -> appveyor.yml + - C:\Program Files (x86)\LuaRocks -> appveyor.yml + - C:\Program Files\LuaRocks -> appveyor.yml + +init: + - call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" %platform% + +install: + # Setup Lua development/build environment + - call .appveyor\install.bat + +before_build: + # external deps + - call .appveyor\install_curl.bat + +build_script: + - set LUA_CURL_VER=scm-0 + - if "%APPVEYOR_REPO_TAG%" == "true" set set LUA_CURL_VER=%APPVEYOR_REPO_TAG_NAME:~1%-1 + - echo "Making lua-curl-%LUA_CURL_VER% ..." + - luarocks make rockspecs/lua-curl-%LUA_CURL_VER%.rockspec + +before_test: + # test deps + - luarocks install lunitx + - luarocks install dkjson + - luarocks install luafilesystem + - if "%LUA_SHORTV%"=="5.1" luarocks install bit32 + - luarocks install lua-path + +test_script: + - echo "Testing..." + - cd %APPVEYOR_BUILD_FOLDER%\test + - lua test_easy.lua + - lua test_safe.lua + - lua test_form.lua + - lua test_pause02.c.lua + - lua test_curl.lua + +after_test: + - cd %APPVEYOR_BUILD_FOLDER% + - .appveyor\pack_artifact.bat lua-curl bin-rock