176 lines
5.5 KiB
Batchfile
176 lines
5.5 KiB
Batchfile
@echo off
|
|
setlocal EnableDelayedExpansion
|
|
|
|
set ROOT=%~dp0%\..
|
|
pushd "%ROOT%"
|
|
|
|
set ROOT=%CD%
|
|
set PATH=%ROOT%\bin;%ROOT%\bin\curl\bin;%PATH%
|
|
set CMAKE=cmake
|
|
set VS_CMAKE_GENERATOR=Visual Studio 16 2019
|
|
set TARGET_MODE=%1
|
|
set /a ENABLE_PACKAGING=%2
|
|
set /a DISABLE_TESTING=%3
|
|
set /a DISABLE_PAUSE=%4
|
|
shift
|
|
set REPOSITORY=repertory
|
|
set ERROR_EXIT=0
|
|
|
|
set OPENSSL_BIN="c:\OpenSSL-%BUILD_ARCH%\bin\openssl.exe"
|
|
set REPERTORY_OPENSSL_ROOT="c:\OpenSSL-%BUILD_ARCH%"
|
|
set BUILD_ARCH=Win64
|
|
set BUILD_ARCH_LOWER=win64
|
|
set MSBUILD_ARCH=x64
|
|
set WINFSP_BASE_NAME=winfsp-x64
|
|
if NOT EXIST %OPENSSL_BIN% (
|
|
set OPENSSL_BIN="c:\Program Files\OpenSSL-!BUILD_ARCH!\bin\openssl.exe"
|
|
set REPERTORY_OPENSSL_ROOT="c:\Program Files\OpenSSL-!BUILD_ARCH!"
|
|
)
|
|
|
|
set PRIVATE_KEY="c:\src\cert\blockstorage_dev_private.pem"
|
|
set PUBLIC_KEY="%ROOT%\blockstorage_dev_public.pem"
|
|
|
|
if "%TARGET_MODE%" NEQ "Debug" (
|
|
if "%TARGET_MODE%" NEQ "Release" (
|
|
call :ERROR "[Debug|Release] not specified"
|
|
)
|
|
)
|
|
|
|
if "%APPVEYOR_BUILD%" == "1" (
|
|
set CMAKE_OPTS=-DOPENSSL_ROOT_DIR=C:\OpenSSL-v111-!BUILD_ARCH!
|
|
) else (
|
|
set CMAKE_OPTS=-DOPENSSL_ROOT_DIR=!REPERTORY_OPENSSL_ROOT!
|
|
)
|
|
|
|
if "%DISABLE_SIGNING%" == "1" (
|
|
set CMAKE_OPTS=%CMAKE_OPTS% -DENABLE_SIGNING=OFF
|
|
) else (
|
|
if "%USERNAME%" == "sgraves" (
|
|
set CMAKE_OPTS=%CMAKE_OPTS% -DENABLE_SIGNING=ON
|
|
)
|
|
if "%USERNAME%" == "scott" (
|
|
set CMAKE_OPTS=%CMAKE_OPTS% -DENABLE_SIGNING=ON
|
|
)
|
|
if "%USERNAME%" == "Scott Graves" (
|
|
set CMAKE_OPTS=%CMAKE_OPTS% -DENABLE_SIGNING=ON
|
|
)
|
|
)
|
|
|
|
set BUILD_DIR=build%OUTPUT_DIR_EXTRA%
|
|
for /F "tokens=*" %%f in ('git rev-parse --short HEAD') do (set GIT_REV=%%f)
|
|
|
|
mkdir "%BUILD_DIR%" >NUL 2>&1
|
|
mkdir "%BUILD_DIR%\%TARGET_MODE%" >NUL 2>&1
|
|
pushd "%BUILD_DIR%\%TARGET_MODE%" >NUL 2>&1
|
|
echo Building [%TARGET_MODE%] [%BUILD_ARCH%]
|
|
((%CMAKE% "%ROOT%" %CMAKE_OPTS% -A %MSBUILD_ARCH% -DCMAKE_BUILD_TYPE=%TARGET_MODE% -DCMAKE_GENERATOR="%VS_CMAKE_GENERATOR%" -DCMAKE_CONFIGURATION_TYPES="%TARGET_MODE%" && (%CMAKE% --build . --config %TARGET_MODE%)) || (
|
|
popd
|
|
call :ERROR "Compile Error"
|
|
)
|
|
|
|
for /f "tokens=*" %%i in ('grep -m1 -a REPERTORY_VERSION repertory.vcxproj ^| sed -e "s/.*REPERTORY_VERSION=\"//g" -e "s/\".*//g"') do (
|
|
set APP_VER=%%i
|
|
)
|
|
|
|
for /f "tokens=2 delims=-" %%a in ("%APP_VER%") do (
|
|
set APP_RELEASE_TYPE=%%a
|
|
)
|
|
for /f "tokens=1 delims=." %%a in ("%APP_RELEASE_TYPE%") do (
|
|
set APP_RELEASE_TYPE=%%a
|
|
)
|
|
|
|
if "%APP_RELEASE_TYPE%"=="alpha" set APP_RELEASE_TYPE=Alpha
|
|
if "%APP_RELEASE_TYPE%"=="beta" set APP_RELEASE_TYPE=Beta
|
|
if "%APP_RELEASE_TYPE%"=="rc" set APP_RELEASE_TYPE=RC
|
|
if "%APP_RELEASE_TYPE%"=="release" set APP_RELEASE_TYPE=Release
|
|
|
|
echo Repertory Version: %APP_VER%
|
|
set TARGET_MODE_LOWER=%TARGET_MODE%
|
|
call :LOWERCASE TARGET_MODE_LOWER
|
|
|
|
set OUT_NAME=repertory_%APP_VER%_%GIT_REV%_!TARGET_MODE_LOWER!_%BUILD_ARCH_LOWER%.zip
|
|
set OUT_FILE=..\..\%OUT_NAME%
|
|
|
|
pushd %TARGET_MODE%
|
|
if "%DISABLE_TESTING%" NEQ "1" (
|
|
echo Testing [%TARGET_MODE%]
|
|
del /q unittests.err 1>NUL 2>&1
|
|
start "Unittests" /wait /min cmd /v:on /c "unittests.exe>unittests.log 2>&1 || echo ^!errorlevel^!>unittests.err"
|
|
if EXIST unittests.err (
|
|
call :ERROR "Unittests Failed"
|
|
)
|
|
)
|
|
|
|
if "%APPVEYOR_BUILD%" NEQ "1" (
|
|
echo Signing Application
|
|
del /q repertory.exe.sha256 1>NUL 2>&1
|
|
del /q repertory.exe.sig 1>NUL 2>&1
|
|
((certutil -hashfile repertory.exe SHA256 | sed -e "1d" -e "$d" -e "s/\ //g") > repertory.exe.sha256) || (call :ERROR "Create repertory sha-256 failed")
|
|
(%OPENSSL_BIN% dgst -sha256 -sign "%PRIVATE_KEY%" -out repertory.exe.sig repertory.exe) || (call :ERROR "Create repertory signature failed")
|
|
(%OPENSSL_BIN% dgst -sha256 -verify "%PUBLIC_KEY%" -signature repertory.exe.sig repertory.exe) || (call :ERROR "Verify repertory signature failed")
|
|
)
|
|
|
|
if "%ENABLE_PACKAGING%"=="1" (
|
|
echo Creating Archive [%OUT_FILE%]
|
|
(7za u "%OUT_FILE%" repertory.exe repertory.exe.sha256 repertory.exe.sig %WINFSP_BASE_NAME%.dll cacert.pem) || (call :ERROR "Create repertory zip failed")
|
|
|
|
echo Signing Archive [%OUT_FILE%]
|
|
(certutil -hashfile "%OUT_FILE%" SHA256 | sed -e "1d" -e "$d" -e "s/\ //g" > "%OUT_FILE%.sha256") || (call :ERROR "Create zip sha-256 failed")
|
|
(%OPENSSL_BIN% dgst -sha256 -sign "%PRIVATE_KEY%" -out "%OUT_FILE%.sig" "%OUT_FILE%") || (call :ERROR "Create zip signature failed")
|
|
(%OPENSSL_BIN% dgst -sha256 -verify "%PUBLIC_KEY%" -signature "%OUT_FILE%.sig" "%OUT_FILE%") || (call :ERROR "Verify zip signature failed")
|
|
(b64.exe -e "%OUT_FILE%.sig" "%OUT_FILE%.sig.b64") || (call :ERROR "Create zip base64 signature failed")
|
|
for /f "delims=" %%i in ('type %OUT_FILE%.sig.b64') do set APP_SIG=!APP_SIG!%%i
|
|
for /f "delims=" %%i in ('type %OUT_FILE%.sha256') do set APP_SHA256=!APP_SHA256!%%i
|
|
)
|
|
popd
|
|
popd
|
|
|
|
goto :END
|
|
|
|
:ERROR
|
|
echo %1
|
|
set ERROR_EXIT=1
|
|
if "%DISABLE_PAUSE%" NEQ "1" (
|
|
pause
|
|
)
|
|
goto :END
|
|
|
|
:NO_QUOTES
|
|
set %~1=!%~1:"=!
|
|
goto :EOF
|
|
|
|
:LOWERCASE
|
|
set %~1=!%~1:A=a!
|
|
set %~1=!%~1:B=b!
|
|
set %~1=!%~1:C=c!
|
|
set %~1=!%~1:D=d!
|
|
set %~1=!%~1:E=e!
|
|
set %~1=!%~1:F=f!
|
|
set %~1=!%~1:G=g!
|
|
set %~1=!%~1:H=h!
|
|
set %~1=!%~1:I=i!
|
|
set %~1=!%~1:J=j!
|
|
set %~1=!%~1:K=k!
|
|
set %~1=!%~1:L=l!
|
|
set %~1=!%~1:M=m!
|
|
set %~1=!%~1:N=n!
|
|
set %~1=!%~1:O=o!
|
|
set %~1=!%~1:P=p!
|
|
set %~1=!%~1:Q=q!
|
|
set %~1=!%~1:R=r!
|
|
set %~1=!%~1:S=s!
|
|
set %~1=!%~1:T=t!
|
|
set %~1=!%~1:U=u!
|
|
set %~1=!%~1:V=v!
|
|
set %~1=!%~1:W=w!
|
|
set %~1=!%~1:X=x!
|
|
set %~1=!%~1:Y=y!
|
|
set %~1=!%~1:Z=z!
|
|
goto :EOF
|
|
|
|
:END
|
|
popd
|
|
if "!ERROR_EXIT!" NEQ "0" (
|
|
exit !ERROR_EXIT!
|
|
)
|