187 lines
7.4 KiB
Batchfile
187 lines
7.4 KiB
Batchfile
@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
|