@echo off setlocal enableextensions enabledelayedexpansion rem --------------------------------------------------------------------------- rem Check that required commands are in the PATH. rem --------------------------------------------------------------------------- set CHECK_CMD=cmake.exe set CHECK_DESC=CMake call :check_installed set CHECK_CMD=msbuild.exe set CHECK_DESC=MSBuild call :check_installed rem --------------------------------------------------------------------------- rem Parse command-line arguments. rem %1: Command ("build" or "clean") rem %2: Generator (e.g. "Visual Studio 12" for VS2013) rem %3: Platform toolset (e.g. "v120_xp" for VS2013 toolset for Windows XP) rem --------------------------------------------------------------------------- if "%1"=="clean" ( echo Cleaning if exist zlib\installed rmdir /s /q zlib\installed if errorlevel 1 goto exit_failure if exist zlib\build rmdir /s /q zlib\build if errorlevel 1 goto exit_failure if exist ..\build rmdir /s /q ..\build if errorlevel 1 goto exit_failure if exist ..\regress\bigzero.zip del ..\regress\bigzero.zip if errorlevel 1 goto exit_failure if exist ..\regress\manyfiles.zip del ..\regress\manyfiles.zip if errorlevel 1 goto exit_failure if exist ..\regress\manyfiles-133000.zip del ..\regress\manyfiles-133000.zip if errorlevel 1 goto exit_failure if exist ..\regress\manyfiles-65536.zip del ..\regress\manyfiles-65536.zip if errorlevel 1 goto exit_failure if exist ..\regress\manyfiles-zip64-modulo.zip del ..\regress\manyfiles-zip64-modulo.zip if errorlevel 1 goto exit_failure if exist ..\regress\manyfiles-zip64.zip del ..\regress\manyfiles-zip64.zip if errorlevel 1 goto exit_failure if exist ..\regress\manyfiles-fewer.zip del ..\regress\manyfiles-fewer.zip if errorlevel 1 goto exit_failure if exist ..\regress\manyfiles-more.zip del ..\regress\manyfiles-more.zip if errorlevel 1 goto exit_failure echo Done exit /b 0 ) else if "%1"=="build" ( set CMAKE_GENERATOR=%2 set CMAKE_TOOLSET=%3 set LIBZIP_RUN_TESTS=false ) else if "%1"=="build+test" ( set CMAKE_GENERATOR=%2 set CMAKE_TOOLSET=%3 set LIBZIP_RUN_TESTS=true ) else ( echo Invalid command "%1" exit /b 1 ) rem --------------------------------------------------------------------------- rem If we're running tests, we'll also need a Perl interpreter. rem --------------------------------------------------------------------------- if "%LIBZIP_RUN_TESTS%"=="true" ( set CHECK_CMD=perl.exe set CHECK_DESC=a Perl interpreter (to run tests) call :check_installed ) rem --------------------------------------------------------------------------- rem Configure and build zlib. rem --------------------------------------------------------------------------- pushd zlib for /f %%p in (".\installed") do set ZLIB_INSTALL_PATH=%%~fp echo zlib will be "installed" to %ZLIB_INSTALL_PATH% if not exist build ( mkdir build if errorlevel 1 popd & goto exit_failure ) cd build if errorlevel 1 popd & goto exit_failure echo Configuring zlib cmake .. -G %CMAKE_GENERATOR% -T %CMAKE_TOOLSET% -DCMAKE_INSTALL_PREFIX="%ZLIB_INSTALL_PATH%" if errorlevel 1 popd & goto exit_failure echo Building zlib msbuild /P:Configuration=Debug INSTALL.vcxproj if errorlevel 1 popd & goto exit_failure msbuild /P:Configuration=Release INSTALL.vcxproj if errorlevel 1 popd & goto exit_failure popd rem --------------------------------------------------------------------------- rem Prepare the build directory and run CMake to configure the project. rem --------------------------------------------------------------------------- pushd .. if not exist build ( echo Creating build directory mkdir build if errorlevel 1 popd & goto exit_failure ) cd build if errorlevel 1 popd & goto exit_failure cmake .. -G %CMAKE_GENERATOR% -T %CMAKE_TOOLSET% -DCMAKE_PREFIX_PATH="%ZLIB_INSTALL_PATH%" if errorlevel 1 popd & goto exit_failure goto :EOF rem --------------------------------------------------------------------------- rem Build libzip. rem --------------------------------------------------------------------------- msbuild /P:Configuration=Debug ALL_BUILD.vcxproj if errorlevel 1 popd & goto exit_failure msbuild /P:Configuration=Release ALL_BUILD.vcxproj if errorlevel 1 popd & goto exit_failure popd rem --------------------------------------------------------------------------- rem Copy DLLs so zipcmp/zipmerge can run. rem --------------------------------------------------------------------------- echo Copying DLLs copy zlib\installed\bin\zlibd.dll ..\build\src\Debug if errorlevel 1 goto exit_failure copy zlib\installed\bin\zlib.dll ..\build\src\Release if errorlevel 1 goto exit_failure copy ..\build\lib\Release\zip.dll ..\build\src\Release if errorlevel 1 goto exit_failure copy ..\build\lib\Debug\zip.dll ..\build\src\Debug if errorlevel 1 goto exit_failure rem --------------------------------------------------------------------------- rem Run the tests, if required. rem --------------------------------------------------------------------------- if "%LIBZIP_RUN_TESTS%"=="true" ( echo Copying libraries for tests pushd ..\build\regress copy ..\..\vstudio\zlib\installed\bin\zlib.dll . if errorlevel 1 popd & goto exit_failure copy ..\lib\Release\zip.dll . if errorlevel 1 popd & goto exit_failure copy Release\*.exe . if errorlevel 1 popd & goto exit_failure copy ..\src\Release\*.exe . if errorlevel 1 popd & goto exit_failure echo Extracting test files if not exist ..\..\regress\bigzero.zip ziptool ..\..\regress\bigzero-zip.zip cat 0 > ..\..\regress\bigzero.zip if errorlevel 1 popd & goto exit_failure if not exist ..\..\regress\manyfiles.zip ziptool ..\..\regress\manyfiles-zip.zip cat 0 > ..\..\regress\manyfiles.zip if errorlevel 1 popd & goto exit_failure if not exist ..\..\regress\manyfiles-133000.zip ziptool ..\..\regress\manyfiles-zip.zip cat 1 > ..\..\regress\manyfiles-133000.zip if errorlevel 1 popd & goto exit_failure if not exist ..\..\regress\manyfiles-65536.zip ziptool ..\..\regress\manyfiles-zip.zip cat 2 > ..\..\regress\manyfiles-65536.zip if errorlevel 1 popd & goto exit_failure if not exist ..\..\regress\manyfiles-zip64-modulo.zip ziptool ..\..\regress\manyfiles-zip.zip cat 3 > ..\..\regress\manyfiles-zip64-modulo.zip if errorlevel 1 popd & goto exit_failure if not exist ..\..\regress\manyfiles-zip64.zip ziptool ..\..\regress\manyfiles-zip.zip cat 4 > ..\..\regress\manyfiles-zip64.zip if errorlevel 1 popd & goto exit_failure if not exist ..\..\regress\manyfiles-fewer.zip ziptool ..\..\regress\manyfiles-zip.zip cat 5 > ..\..\regress\manyfiles-fewer.zip if errorlevel 1 popd & goto exit_failure if not exist ..\..\regress\manyfiles-more.zip ziptool ..\..\regress\manyfiles-zip.zip cat 6 > ..\..\regress\manyfiles-more.zip if errorlevel 1 popd & goto exit_failure echo Generating runtest script for /f %%p in ("..\..\regress") do set ABS_SRCDIR=%%~fp set ABS_SRCDIR=!ABS_SRCDIR:\=\\! perl -p -e "s/@[s]rcdir@/..\\..\\regress/g;s/@[a]bs_srcdir@/!ABS_SRCDIR!/g;s|../../src/zipcmp|..\\..\\src\\Release\\zipcmp|g;" ..\..\regress\runtest.in > runtest if errorlevel 1 popd & goto exit_failure echo Running tests ctest popd if errorlevel 1 goto exit_failure ) goto :EOF :check_installed where %CHECK_CMD% > nul 2>&1 if "%errorlevel%"=="9009" ( echo This build script requires where.exe. If running on Windows XP or echo earlier, this can be found in the Windows Resource Kit. exit /b 1 ) if errorlevel 1 ( echo Please make sure that %CHECK_DESC% is installed and in your PATH. exit /b 1 ) goto :EOF :exit_failure echo Build failed. exit /b 1