@@ -8,6 +8,19 @@ set PATH=%QT_BIN_DIR:"=%;%PATH%
88
99echo " Using Qt in %QT_BIN_DIR% "
1010echo " Using QIF in %QIF_BIN_DIR% "
11+ echo " Using WiX in %WIX_BIN_DIR% "
12+
13+ if " %WIX_BIN_DIR% " == " " (
14+ echo " WIX_BIN_DIR is not set"
15+ exit /b 1
16+ )
17+
18+ set WIX_BIN_DIR_UNQUOTED = %WIX_BIN_DIR:" =%
19+
20+ if not exist " %WIX_BIN_DIR_UNQUOTED% \heat.exe" (
21+ echo " WiX Toolset binaries were not found in %WIX_BIN_DIR% "
22+ exit /b 1
23+ )
1124
1225REM Hold on to current directory
1326set PROJECT_DIR = %cd%
@@ -22,6 +35,22 @@ set PREBILT_DEPLOY_DATA_DIR=%PROJECT_DIR:"=%\client\3rd-prebuilt\deploy-prebuilt
2235set DEPLOY_DATA_DIR = %SCRIPT_DIR:" =% \data\windows\x%BUILD_ARCH:" =%
2336set INSTALLER_DATA_DIR = %WORK_DIR:" =% \installer\packages\%APP_DOMAIN:" =% \data
2437set TARGET_FILENAME = %PROJECT_DIR:" =% \%APP_NAME:" =% _x%BUILD_ARCH:" =% .exe
38+ set TARGET_MSI_FILENAME = %PROJECT_DIR:" =% \%APP_NAME:" =% _x%BUILD_ARCH:" =% .msi
39+
40+ set APP_VERSION =
41+ for /f " tokens=2 delims= " %%i in ('findstr /R /C:" ^set(AMNEZIAVPN_VERSION" " %PROJECT_DIR% \CMakeLists.txt" ') do set APP_VERSION = %%i
42+ set APP_VERSION = %APP_VERSION:) =%
43+ set APP_VERSION = %APP_VERSION:" =%
44+
45+ if " %APP_VERSION% " == " " (
46+ set APP_VERSION = 1.0.0
47+ )
48+
49+ if " %BUILD_ARCH% " == " 32" (
50+ set WIX_PLATFORM = x86
51+ ) else (
52+ set WIX_PLATFORM = x64
53+ )
2554
2655echo " Environment:"
2756echo " WORK_DIR: %WORK_DIR% "
@@ -32,10 +61,14 @@ echo "OUT_APP_DIR: %OUT_APP_DIR%"
3261echo " DEPLOY_DATA_DIR: %DEPLOY_DATA_DIR% "
3362echo " INSTALLER_DATA_DIR: %INSTALLER_DATA_DIR% "
3463echo " TARGET_FILENAME: %TARGET_FILENAME% "
64+ echo " TARGET_MSI_FILENAME: %TARGET_MSI_FILENAME% "
65+ echo " APP_VERSION: %APP_VERSION% "
66+ echo " WIX_PLATFORM: %WIX_PLATFORM% "
3567
3668echo " Cleanup..."
3769rmdir /Q /S %WORK_DIR%
3870del %TARGET_FILENAME%
71+ del %TARGET_MSI_FILENAME%
3972
4073mkdir %WORK_DIR%
4174
@@ -56,6 +89,8 @@ mkdir "%OUT_APP_DIR%"
5689copy " %WORK_DIR% \service\server\release\%APP_NAME% -service.exe" " %OUT_APP_DIR% "
5790rem copy "%WORK_DIR%\client\%APP_FILENAME%" "%OUT_APP_DIR%"
5891
92+ copy /Y " %PROJECT_DIR% \client\images\app.ico" " %OUT_APP_DIR% \AmneziaVPN.ico" > nul
93+
5994
6095echo " Signing exe"
6196cd %OUT_APP_DIR%
@@ -89,5 +124,31 @@ timeout 5
89124cd %PROJECT_DIR%
90125signtool sign /v /n " Privacy Technologies OU" /fd sha256 /tr http://timestamp.comodoca.com/?td=sha256 /td sha256 " %TARGET_FILENAME% "
91126
92- echo " Finished, see %TARGET_FILENAME% "
127+ echo " Building MSI installer..."
128+ set MSI_SOURCE_DIR = %WORK_DIR% \installer\wix
129+ set MSI_HARVEST_FILE = %MSI_SOURCE_DIR% \HarvestedFiles.wxs
130+
131+ if not exist " %MSI_SOURCE_DIR% " (
132+ echo " WiX source directory not found: %MSI_SOURCE_DIR% "
133+ exit /b 1
134+ )
135+
136+ echo " Harvesting files for MSI..."
137+ " %WIX_BIN_DIR_UNQUOTED% \heat.exe" dir " %OUT_APP_DIR% " -nologo -cg AppFiles -dr INSTALLFOLDER -sfrag -srd -var var.SourceDir -out " %MSI_HARVEST_FILE% "
138+ if %errorlevel% neq 0 exit /b %errorlevel%
139+
140+ cd " %MSI_SOURCE_DIR% "
141+
142+ echo " Compiling WiX sources..."
143+ " %WIX_BIN_DIR_UNQUOTED% \candle.exe" -nologo -ext WixUtilExtension -arch %WIX_PLATFORM% -dPlatform=%WIX_PLATFORM% -dProductVersion=%APP_VERSION% -dSourceDir=" %OUT_APP_DIR% " " -dWixToolPath=%WIX_BIN_DIR_UNQUOTED% " Product.wxs HarvestedFiles.wxs
144+ if %errorlevel% neq 0 exit /b %errorlevel%
145+
146+ echo " Linking MSI..."
147+ " %WIX_BIN_DIR_UNQUOTED% \light.exe" -nologo -ext WixUtilExtension -spdb Product.wixobj HarvestedFiles.wixobj -out " %TARGET_MSI_FILENAME% "
148+ if %errorlevel% neq 0 exit /b %errorlevel%
149+
150+ cd %PROJECT_DIR%
151+ signtool sign /v /n " Privacy Technologies OU" /fd sha256 /tr http://timestamp.comodoca.com/?td=sha256 /td sha256 " %TARGET_MSI_FILENAME% "
152+
153+ echo " Finished, see %TARGET_FILENAME% and %TARGET_MSI_FILENAME% "
93154exit 0
0 commit comments