You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

427 lines
12 KiB
Batchfile

@echo off
setlocal enableextensions
set "BUILD_DIR=%CD%"
:GETOPTS
if /I "%1" == "--help" (
call:Help
exit /b
)
if /I "%1" == "--webready" set "_WEBREADY_=1"
if /I "%1" == "--config" set "_CONFIG_=%2"& shift
if /I "%1" == "--temp" set "_TEMP_=%2"& shift
if /I "%1" == "--generator" set "_GENERATOR_=%2"& shift
if /I "%1" == "--exiv2" set "_EXIV2_=%2"& shift
if /I "%1" == "--verbose" set "_VERBOSE_=1"
if /I "%1" == "--dryrun" set "_DRYRUN_=1"
if /I "%1" == "--rebuild" set "_REBUILD_=1"
if /I "%1" == "--silent" set "_SILENT_=1"
if /I "%1" == "--silent" set "_QUIET_=1"
if /I "%1" == "--quiet" set "_QUIET_=1"
shift
if not (%1) EQU () goto GETOPTS
rem ----
call:echo calling setenv
call setenv.cmd
IF ERRORLEVEL 1 (
echo "*** setenv.cmd has failed ***"
GOTO error_end
)
rem if NOT DEFINED _DRYRUN_ if DEFINED _REBUILD_ (
rem for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
rem )
rem ----
call:echo checking that %_EXIV2_% exists
if NOT EXIST %_EXIV2_% (
echo "_EXIV2_ = %_EXIV2_% does not exist ***"
exit /b 1
)
pushd %_EXIV2_%
set _EXIV2_=%CD%
popd
call:echo _EXIV2_ = %_EXIV2_%
rem ----
call:echo testing VSINSTALLDIR "%VSINSTALLDIR%"
IF NOT DEFINED VSINSTALLDIR (
echo "VSINSTALLDIR not set. Run vcvars32.bat or vcvarsall.bat ***"
GOTO error_end
)
IF NOT EXIST "%VSINSTALLDIR%" (
echo "VSINSTALLDIR %VSINSTALLDIR% does not exist. Run vcvars32.bat or vcvarsall.bat ***"
GOTO error_end
)
rem http://stackoverflow.com/questions/9252980/how-to-split-the-filename-from-a-full-path-in-batch
for %%A in ("%VSINSTALLDIR%") do (
set "VSSTUDIO=%%~nA"
)
call:echo VSSTUDIO = "%VSSTUDIO%"
rem ----
call:echo setting CMake command options
IF "%VSSTUDIO%" EQU "Microsoft Visual Studio 14" (
rem Visual Studio 2015
set VS_SHORT=vc14
set VS_CMAKE=Visual Studio 14
set VS_PROG_FILES=Microsoft Visual Studio 14.0
set VS_OPENSSL=vs2015
) ELSE IF "%VSSTUDIO%" EQU "Microsoft Visual Studio 12" (
rem Visual Studio 2013
set VS_SHORT=vc12
set VS_CMAKE=Visual Studio 12
set VS_PROG_FILES=Microsoft Visual Studio 12.0
set VS_OPENSSL=vs2013
) ELSE IF "%VSSTUDIO%" EQU "Microsoft Visual Studio 11" (
rem Visual Studio 2012
set VS_SHORT=vc11
set VS_CMAKE=Visual Studio 11
set VS_PROG_FILES=Microsoft Visual Studio 11.0
set VS_OPENSSL=vs2012
) ELSE IF "%VSSTUDIO%" EQU "Microsoft Visual Studio 10" (
rem Visual Studio 2010
set VS_SHORT=vc10
set VS_CMAKE=Visual Studio 10
set VS_PROG_FILES=Microsoft Visual Studio 10.0
set VS_OPENSSL=vs2010
) ELSE IF "%VSSTUDIO%" EQU "Microsoft Visual Studio 9" (
rem Visual Studio 2008
set VS_SHORT=vc9
set VS_CMAKE=Visual Studio 9 2008
set VS_PROG_FILES=Microsoft Visual Studio 9.0
set VS_OPENSSL=vs2008
) ELSE IF "%VSSTUDIO%" EQU "Microsoft Visual Studio 8" (
rem Visual Studio 2005
set VS_SHORT=vc8
set VS_CMAKE=Visual Studio 8 2005
set VS_PROG_FILES=Microsoft Visual Studio 8.0
set VS_OPENSSL=vs2005
) ELSE (
echo "*** Unsupported version of Visual Studio in '%VSINSTALLDIR%' ***"
GOTO error_end
)
call:echo testing architecture
if "%PROCESSOR_ARCHITECTURE%" EQU "AMD64" (
set Platform=x64
set RawPlatform=x64
set CpuPlatform=intel64
) ELSE (
set Platform=Win32
set RawPlatform=x86
set CpuPlatform=ia32
)
IF %Platform% EQU x64 (
set VS_CMAKE=%VS_CMAKE% Win64
)
call:echo Platform = %Platform% (%RawPlatform%)
rem ----
call:echo testing out of source build
dir/s exiv2.cpp >NUL 2>NUL
IF NOT ERRORLEVEL 1 (
echo "*** error: do not execute this script within the exiv2 source directory ***"
goto error_end
)
rem ----
call:echo testing compiler
cl > NUL 2>NUL
IF ERRORLEVEL 1 (
echo "*** ensure cl is on path. Run vcvars32.bat or vcvarsall.bat ***"
GOTO error_end
)
if NOT DEFINED _SILENT_ cl>/NUL
rem ----
call:echo testing svn is on path
svn --version > NUL
IF ERRORLEVEL 1 (
echo "*** please ensure SVN.exe is on the PATH ***"
GOTO error_end
)
rem ----
call:echo testing cmake is on path
cmake --version > NUL
IF ERRORLEVEL 1 (
echo "*** please ensure cmake.exe is on the PATH ***"
GOTO error_end
)
rem ----
call:echo testing the cygwin_dir exists
if NOT EXIST %CYGWIN_DIR% (
echo "*** CYGWIN_DIR %CYGWIN_DIR% does not exist ***"
GOTO error_end
)
rem ----
call:echo testing cygwin tools are available
SET 7Z_PATH=%CYGWIN_DIR%\lib\p7zip\7z.exe
IF NOT EXIST %CYGWIN_DIR%\lib\p7zip\7z.exe GOTO cygwin_error
IF NOT EXIST %CYGWIN_DIR%\bin\cp.exe GOTO cygwin_error
IF NOT EXIST %CYGWIN_DIR%\bin\gzip.exe GOTO cygwin_error
IF NOT EXIST %CYGWIN_DIR%\bin\mv.exe GOTO cygwin_error
IF NOT EXIST %CYGWIN_DIR%\bin\svn.exe GOTO cygwin_error
IF NOT EXIST %CYGWIN_DIR%\bin\tar.exe GOTO cygwin_error
IF NOT EXIST %CYGWIN_DIR%\bin\unzip.exe GOTO cygwin_error
IF NOT EXIST %CYGWIN_DIR%\bin\wget.exe GOTO cygwin_error
rem SET PATH=%PATH%;%CYGWIN_DIR%\bin
GOTO cygwin_ok
:cygwin_error
echo ERROR: Cygwin with
echo 7z
echo cp
echo gzip
echo mv
echo svn
echo tar
echo unzip
echo wget
echo is required
GOTO error_end
:cygwin_ok
pushd %CYGWIN_DIR%
set CYGWIN_DIR=%CD%
popd
set %PATH=%PATH%;%CYGWIN_DIR%\bin"
rem ----
call:echo testing temporary directory
IF NOT EXIST %_TEMP_% mkdir %_TEMP_%
pushd "%_TEMP_%"
set "_TEMP_=%CD%"
popd
call:echo _TEMP_ = %_TEMP_%
rem ----
call:echo testing INSTALL
SET _INSTALL_=dist
IF NOT EXIST %_INSTALL_% mkdir %_INSTALL_%
pushd %_INSTALL_%
set "_INSTALL_=%CD%"
popd
call:echo _INSTALL_ = %_INSTALL_%
if NOT DEFINED _GENERATOR_ set "_GENERATOR_=%VS_CMAKE%"
if /I "%_GENERATOR_%" == "NMake" set "_GENERATOR_=NMake Makefiles"
call:echo setting cmake options
IF DEFINED _WEBREADY_ set T=ON
IF NOT DEFINED _WEBREADY_ set T=OFF
set "_WEBREADY_=-DEXIV2_ENABLE_WEBREADY=%T%"
rem ----
echo.
echo config = %_CONFIG_% webready = %_WEBREADY_% _EXIV2_= %_EXIV2_%"
IF DEFINED _DRYRUN_ exit /b 1
rem ---- location of library code ---------
rem https://github.com/bagder/curl
SET CURL_COMMIT_LONG=dd39a671019d713bd077be9eed511c2dc6013598
rem http://www.npcglib.org/~stathis/blog/precompiled-openssl/
SET OPENSSL_VERSION=openssl-1.0.2d
echo ---------- building ZLIB ------------------
call:buildLib zlib-1.2.8
echo ---------- building EXPAT -----------------
set "TARGET=--target expat"
call:buildLib expat-2.1.0
set TARGET=
rem SET OPENSSL_LONG=%OPENSSL_VERSION%-%VS_OPENSSL%
rem IF NOT EXIST %_TEMP_%\%OPENSSL_LONG%.7z (
rem %CYGWIN_DIR%\bin\wget.exe -O %_TEMP_%/%OPENSSL_LONG%.7z --no-check-certificate http://www.npcglib.org/~stathis/downloads/%OPENSSL_LONG%.7z
rem )
rem IF NOT EXIST %OPENSSL_LONG% (
rem %CYGWIN_DIR%\lib\p7zip\7z.exe x %_TEMP_%/%OPENSSL_LONG%.7z
rem IF %Platform% EQU x64 (
rem ren %OPENSSL_LONG%\lib xxlib
rem ren %OPENSSL_LONG%\lib64 lib
rem ren %OPENSSL_LONG%\bin xxbin
rem ren %OPENSSL_LONG%\bin64 bin
rem )
rem )
rem robocopy %OPENSSL_LONG%\bin %_INSTALL_%\bin libeay32MD.dll /MIR /NJS >nul
rem robocopy %OPENSSL_LONG%\bin %_INSTALL_%\bin ssleay32MD.dll /MIR /NJS >nul
rem
rem
rem SET CURL_COMMIT=%CURL_COMMIT_LONG:~0,7%
rem IF NOT EXIST %_TEMP_%\curl-%CURL_COMMIT%.zip (
rem %CYGWIN_DIR%\bin\wget.exe -O %_TEMP_%/curl-%CURL_COMMIT%.zip --no-check-certificate http://github.com/bagder/curl/zipball/%CURL_COMMIT_LONG%
rem )
rem
rem IF NOT EXIST curl-%CURL_COMMIT% (
rem %CYGWIN_DIR%\bin\unzip.exe -q %_TEMP_%/curl-%CURL_COMMIT%.zip
rem %CYGWIN_DIR%\bin\mv.exe bagder-curl-* curl-%CURL_COMMIT%
rem )
rem
rem IF NOT EXIST curl-%CURL_COMMIT%.build (
rem mkdir curl-%CURL_COMMIT%.build
rem
rem pushd curl-%CURL_COMMIT%.build
rem cmake -G "%_GENERATOR_%" -DCMAKE_INSTALL_PREFIX=..\%_INSTALL_% -DCMAKE_PREFIX_PATH=..\%OPENSSL_LONG% -DBUILD_CURL_TESTS=OFF -DCMAKE_USE_OPENSSL=ON -DCMAKE_USE_LIBSSH2=OFF ..\curl-%CURL_COMMIT%
rem IF errorlevel 1 goto error_end
rem cmake --build . --config %_CONFIG_%
rem IF errorlevel 1 goto error_end
rem cmake --build . --config %_CONFIG_% --target install
rem IF errorlevel 1 goto error_end
rem
rem popd
rem )
rem
rem SET SSH_VERSION=0.7.2
rem IF NOT EXIST %_TEMP_%\libssh-%SSH_VERSION%.zip (
rem %CYGWIN_DIR%\bin\wget.exe -O %_TEMP_%/libssh-%SSH_VERSION%.zip --no-check-certificate https://git.libssh.org/projects/libssh.git/snapshot/libssh-%SSH_VERSION%.zip
rem )
rem IF NOT EXIST libssh-%SSH_VERSION% (
rem %CYGWIN_DIR%\bin\unzip.exe -q %_TEMP_%/libssh-%SSH_VERSION%.zip
rem )
rem IF NOT EXIST libssh-%SSH_VERSION%.build (
rem mkdir libssh-%SSH_VERSION%.build
rem
rem pushd libssh-%SSH_VERSION%.build
rem
rem cmake -G "%_GENERATOR_%" -DWITH_GSSAPI=OFF -DWITH_ZLIB=ON -DWITH_SFTP=ON -DWITH_SERVER=OFF -DWITH_EXAMPLES=OFF -DWITH_NACL=OFF -DCMAKE_PREFIX_PATH=..\%OPENSSL_LONG% -DWITH_PCAP=OFF -DCMAKE_INSTALL_PREFIX=..\%_INSTALL_% ..\libssh-%SSH_VERSION%
rem
rem IF errorlevel 1 goto error_end
rem cmake --build . --config %_CONFIG_%
rem IF errorlevel 1 goto error_end
rem cmake --build . --config %_CONFIG_% --target install
rem IF errorlevel 1 goto error_end
rem
rem popd
rem )
echo ---------- building EXIV2 ------------------
set EXIV_BUILD="%_TEMP_%\exiv2"
if defined _REBUILD_ "%EXIV_BUILD%"
IF NOT EXIST "%EXIV_BUILD%" mkdir "%EXIV_BUILD%"
pushd "%EXIV_BUILD%"
call:run cmake -G "%_GENERATOR_%" ^
"-DCMAKE_INSTALL_PREFIX=%_INSTALL_%" "-DCMAKE_PROGRAM_PATH=%SVN_DIR%" ^
"%_WEBREADY_%" -DEXIV2_ENABLE_BUILD_SAMPLES=ON ^
-DEXIV2_ENABLE_CURL=OFF -DEXIV2_ENABLE_SSH=OFF -DEXIV2_ENABLE_NLS=OFF ^
-DEXIV2_ENABLE_WIN_UNICODE=OFF -DEXIV2_ENABLE_SHARED=ON ^
"-DCMAKE_LIBRARY_PATH=%INSTALL_PATH%\lib" "-DCMAKE_INCLUDE_PATH=%INSTALL_PATH%\include" ^
"%_EXIV2_%"
IF errorlevel 1 (
echo "*** errors in EXIV2 build [1] ***"
popd
goto error_end
)
call:run cmake --build . --config %_CONFIG_%
IF errorlevel 1 (
echo "*** errors in EXIV2 build [2] ***"
popd
goto error_end
)
call:run cmake --build . --config %_CONFIG_% --target install
IF errorlevel 1 (
echo "*** errors in EXIV2 build [3] ***"
popd
goto error_end
)
copy/y "samples\%_CONFIG_%\"*.exe "%_INSTALL_%\bin"
popd
rem -----------------------------------------
rem Exit
:error_end
endlocal
REM pause
exit /b 1
:end
endlocal
exit /b 0
rem -----------------------------------------
rem Functions
:help
echo Options: --help ^| --webready ^| --dryrun ^| --verbose ^| --rebuild ^| --silent ^| --verbose
echo. --exiv2 directory ^| --cygwin directory ^| --temp directory ^| --config name ^| --generator generator
exit /b 0
:echo
if NOT DEFINED _SILENT_ echo %*%
exit /b 0
:run
if defined _VERBOSE_ (
echo.
echo ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
echo CD = %CD%
echo %*%
)
if defined _SILENT_ %*% >nul 2>nul
if NOT defined _SILENT_ %*%
exit /b %ERRORLEVEL%
rem -------------------------------------------------------------
:buildLib
cd "%BUILD_DIR%"
set LIB=%1%
set LIB_T=%LIB%.tar
set LIB_Z=%LIB%.tar.Z
set LIB_B="%_TEMP_%\%LIB%"
if defined _REBUILD_ del "%LIB_Z%"
IF NOT EXIST "%LIB_Z%" (
call:run svn export svn://dev.exiv2.org/svn/team/libraries/%LIB_Z%
)
if defined _REBUILD_ rmdir/s/q "%LIB%"
IF NOT EXIST "%LIB%" "%CYGWIN_DIR%\bin\tar.exe" xzf "%LIB_Z%"
if defined _REBUILD_ rmdir/s/q "%LIB_B%"
IF NOT EXIST %LIB_B% mkdir "%LIB_B%"
pushd "%LIB_B%"
call:run cmake -G "%_GENERATOR_%" -DCMAKE_INSTALL_PREFIX=%_INSTALL_% ..\..\%LIB%
IF errorlevel 1 (
echo "*** errors in %LIB% build [1] ***"
popd
exit /b 1
)
call:run cmake --build . --config %_CONFIG_% %TARGET%
IF errorlevel 1 (
echo "*** warning: errors in %LIB% build [2] ***"
popd
exit /b 0
)
call:run cmake --build . --config %_CONFIG_% --target install
IF errorlevel 1 (
echo "*** warning: errors in %LIB% build [3] ***"
popd
exit /b 0
)
popd
exit /b 0