mirror of
https://github.com/amnezia-vpn/amnezia-client.git
synced 2026-05-08 14:33:23 +00:00
feat: initial conan support and build process refactoring (#2260)
* feat: initial conan support * feat: add awg-go and awg-apple recipes * feat: macos full feature conan build, except ss and cloak * feat: conan android initial support * fix: android libssh fixes * conan: android additional recipes and fixes * feat: openvpn add support android * fix: awg android connection establish * conan: apple full-featured support * chore: bump min macos version * chore: get rid of manual deploy recursive copying * conan: beautify makefile-based recipes * conan: add geosite.dat and geoip.dat * conan: use lib linking instead of QT_EXTRA_LIBS for OVPN * conan: address lack of SONAME of libck-ovpn-plugin.so correctly * conan: windows initial support * conan: make awg-windows and wintun be interpret as exes * conan: fix version for v2ray-rules-dat * feat: conan and platform bootstrap rework in cmake * feat: 16kb support for Android * chore(conan): recipes cleanup * feat: support of drivers for windows * feat: support full-featured cmake install * chore: exclude qtkeychain from the target build * fix: install for apple systems * fix: provide flags for cloak plugin for openvpn-pt-android * chore: bump android deps for 16kb support * feat(conan): patch cloak to properly provide env for golang * chore: remove redundant hint from conan find * feat: linux <-> conan features * feat: linux initial packaging support * feat: linux cpack support * feat: cpack windows full-featured build * feat: productbuild cpack support * feat: rework CI/CD for macos * feat: rework CI/CD for Linux * fix: libncap automake args * fix: CI/CD correct QT paths * fix: windows rework CI/CD * fix: windows artifact upload * chore: remove MacOS-old from build targets * feat: add conan to all mobile and NE builds * feat: support default amnezia conan remote * fix: use Release instead of release on Android * feat: get rid of 3rd-prebuilt * feat: conan CI/CD upload * fix: CI/CD change windows toolset versions * fix: remove MSVC version from CI/CD * feat: conan CI/CD add Release and Debug build types * feat: add multiple xcode versions for conan CI/CD * fix: correct conan CI/CD clang versions * feat: separate prebuilt baking, and add some for NE * feat: rework keychain on ios/macos even more * fix: add desktop Qt for iOS * feat: add QT_HOST_PATH to build.sh * fix: add deploy definition to cmake * fix: android adjustments for toolchains and CI/CD * fix: add needs for Android CI/CD * fix: Android CI/CD use android-28 * fix: modernize translations, and CI/CD fixes * fix: gradle min sdk compilation error * fix: CI/CD add installers to all jobs * fix: parse android platform more precisely * fix: adjust aab path in CI/CD * feat: CI/CD do not execute artifact build if there is nothing changed * fix: CI/CD use common jobs even if previous were failed * fix: Apple CI/CD use set-key-partition-list for keychains * fix: Apple CI/CD do not specify any keychain (use default) * fix: build aab as a different step in build script * chore: beautify build.sh script * feat: CI/CD build separate APKs per ABI * fix: Android CI/CD upload artifact in separate steps * chore: recipes cleanup * feat: add hints for conan on MacOS * fix: add main.cpp and tests back to CMakeLists.txt * chore: xrayProtocol codestyle changes * fix: openssl set proper X509 request version * fix: make openvpn protocol rely only on client while configuring * chore: get rid of old scripts * chore: readme update describing build process more precisely * feat: windows build script add multiprocessing capabilities * chore: bump Qt version in README * feat: add generator option and use Ninja by default in CI/CD for linux/macos --------- Co-authored-by: NickVs2015 <nv@amnezia.org>
This commit is contained in:
Binary file not shown.
147
deploy/build.bat
Normal file
147
deploy/build.bat
Normal file
@@ -0,0 +1,147 @@
|
||||
@echo off
|
||||
setlocal EnableDelayedExpansion
|
||||
|
||||
set "PROJECT_DIR=%cd%"
|
||||
set "BUILD_DIR=%PROJECT_DIR%\deploy\build"
|
||||
|
||||
:parse_args
|
||||
if "%~1"=="" goto :done_args
|
||||
if /i "%~1" == "-i" set "ARG_BUILD_INSTALLERS=!ARG_BUILD_INSTALLERS! %~2" & shift
|
||||
if /i "%~1" == "--installer" set "ARG_BUILD_INSTALLERS=!ARG_BUILD_INSTALLERS! %~2" & shift
|
||||
if /i "%~1" == "-arch" set "ARCH=%~2" & shift
|
||||
if /i "%~1" == "--architecture" set "ARCH=%~2" & shift
|
||||
shift
|
||||
goto :parse_args
|
||||
:done_args
|
||||
|
||||
if defined ARG_BUILD_INSTALLERS set "ARG_BUILD_INSTALLERS=%ARG_BUILD_INSTALLERS:all=ifw wix%"
|
||||
|
||||
:: understand toolchain arch (host_target) and Qt prefix path
|
||||
if not defined ARCH set "ARCH=%PROCESSOR_ARCHITECTURE%"
|
||||
if /i "%ARCH%" == "x64" set "ARCH=amd64"
|
||||
if /i "%ARCH%" == "amd64" (
|
||||
if /i "%PROCESSOR_ARCHITECTURE%" == "AMD64" set "_vcvars_arg=amd64"
|
||||
if /i "%PROCESSOR_ARCHITECTURE%" == "x86" set "_vcvars_arg=x86_amd64"
|
||||
set "_qt_postfix_arg=64"
|
||||
)
|
||||
if /i "%ARCH%" == "arm64" (
|
||||
if /i "%PROCESSOR_ARCHITECTURE%" == "AMD64" set "_vcvars_arg=amd64_arm64"
|
||||
if /i "%PROCESSOR_ARCHITECTURE%" == "x86" set "_vcvars_arg=x86_arm64"
|
||||
set "_qt_postfix_arg=arm64"
|
||||
)
|
||||
if not defined _vcvars_arg (
|
||||
echo ERROR: Unsupported architecture "%ARCH%"
|
||||
goto :fail
|
||||
)
|
||||
|
||||
if not defined QT_VERSION set "QT_VERSION=6.*"
|
||||
if not defined QIF_VERSION set "QIF_VERSION=*"
|
||||
|
||||
set "_qt_bases=%USERPROFILE%\Qt C:\Qt"
|
||||
if defined QT_INSTALL_DIR set "_qt_bases=%QT_INSTALL_DIR%\Qt %_qt_bases%"
|
||||
|
||||
:: search over Qt dirs to find framework and tools paths
|
||||
for %%B in (%_qt_bases%) do (
|
||||
if exist "%%~B" (
|
||||
for /d %%D in (%%~B\%QT_VERSION%) do (
|
||||
if not defined _qt_root_path (
|
||||
set "_qt_root_path=%%D"
|
||||
) else (
|
||||
for %%I in (!_qt_root_path!) do call :compare_versions "%%~nxI" "%%~nxD"
|
||||
if errorlevel 1 set "_qt_root_path=%%D"
|
||||
)
|
||||
)
|
||||
|
||||
for /d %%D in (%%~B\Tools\QtInstallerFramework\%QIF_VERSION%) do (
|
||||
if not defined _qif_root_path (
|
||||
set "_qif_root_path=%%D"
|
||||
) else (
|
||||
for %%I in (!_qif_root_path!) do call :compare_versions "%%~nxI" "%%~nxD"
|
||||
if errorlevel 1 set "_qif_root_path=%%D"
|
||||
)
|
||||
)
|
||||
|
||||
if exist "%%~B\Tools\Ninja" set "PATH=%PATH%;%%~B\Tools\Ninja"
|
||||
)
|
||||
)
|
||||
|
||||
if not defined QT_ROOT_PATH set "QT_ROOT_PATH=%_qt_root_path%"
|
||||
if not defined QIF_ROOT_PATH set "QIF_ROOT_PATH=%_qif_root_path%"
|
||||
|
||||
:: use vswhere to find path to vcvarsall.bat
|
||||
if not defined VCINSTALLDIR (
|
||||
if not defined VS_INSTALLER_PATH set "VS_INSTALLER_PATH=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe"
|
||||
if exist "%VS_INSTALLER_PATH%" (
|
||||
if defined "%VS_INSTALLATION_VERSION%" (
|
||||
set "_version=-version [%VS_INSTALLATION_VERSION%]"
|
||||
) else (
|
||||
set "_version=-latest"
|
||||
)
|
||||
for /f "usebackq tokens=*" %%I in (
|
||||
`"%VS_INSTALLER_PATH%" -products * %_version% -property resolvedInstallationPath`
|
||||
) do (
|
||||
if not defined VCVARS_PATH set "VCVARS_PATH=%%I\VC\Auxiliary\Build\vcvarsall.bat"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
:: setup MSVC toolchain using vsvarsall.bat
|
||||
if exist "%VCVARS_PATH%" (
|
||||
@echo on
|
||||
call "%VCVARS_PATH%" %_vcvars_arg%
|
||||
@echo off
|
||||
if errorlevel 1 goto :fail
|
||||
)
|
||||
|
||||
:: build project and installers
|
||||
@echo on
|
||||
cmake -S "%PROJECT_DIR%" -B "%BUILD_DIR%" -DCMAKE_BUILD_TYPE=Release "-DCMAKE_PREFIX_PATH=%QT_ROOT_PATH%\msvc2022_%_qt_postfix_arg%" "-DCMAKE_VS_GLOBALS=UseMultiToolTask=true;EnforceProcessCountAcrossBuilds=true" || goto :fail
|
||||
cmake --build "%BUILD_DIR%" --config Release -- /m || goto :fail
|
||||
@echo off
|
||||
for %%I in (%ARG_BUILD_INSTALLERS%) do (
|
||||
if /i "%%I" == "ifw" call :do_ifw
|
||||
if /i "%%I" == "wix" call :do_wix
|
||||
if errorlevel 1 goto :fail
|
||||
)
|
||||
goto :eof
|
||||
|
||||
:: bakes IFW installer
|
||||
:do_ifw
|
||||
@echo on
|
||||
cd "%BUILD_DIR%" && cpack -G IFW -D "QTIFWDIR=%QIF_ROOT_PATH%" || goto :fail
|
||||
@echo off
|
||||
goto :eof
|
||||
|
||||
:: bakes WIX installer
|
||||
:do_wix
|
||||
@echo on
|
||||
cd "%BUILD_DIR%" && cpack -G WIX -D "WIX_BIN_DIR=%WIX_ROOT_PATH%" || goto :fail
|
||||
@echo off
|
||||
goto :eof
|
||||
|
||||
:fail
|
||||
exit /b 1
|
||||
|
||||
:: compares any two versions
|
||||
:compare_versions
|
||||
set "_left=%~1"
|
||||
set "_right=%~2"
|
||||
|
||||
set "_left_temp=%_left%"
|
||||
set "_right_temp=%_right%"
|
||||
|
||||
:seg_loop
|
||||
set "_ls=0"
|
||||
for /f "tokens=1* delims=." %%A in ("%_left_temp%") do (
|
||||
set "_ls=%%A" & set "_left_temp=%%B"
|
||||
)
|
||||
set "_rs=0"
|
||||
for /f "tokens=1* delims=." %%A in ("%_right_temp%") do (
|
||||
set "_rs=%%A" & set "_right_temp=%%B"
|
||||
)
|
||||
|
||||
if %_rs% GTR %_ls% exit /b 1
|
||||
if %_rs% LSS %_ls% exit /b -1
|
||||
if defined _left_temp goto :seg_loop
|
||||
if defined _right_temp goto :seg_loop
|
||||
exit /b 0
|
||||
221
deploy/build.sh
Executable file
221
deploy/build.sh
Executable file
@@ -0,0 +1,221 @@
|
||||
#!/bin/bash
|
||||
set -o errexit
|
||||
set +o xtrace
|
||||
|
||||
run_traced() {
|
||||
PS4='\033[1;34m+ \033[0m'
|
||||
set -o xtrace
|
||||
"$@"
|
||||
{ set +o xtrace; } 2>/dev/null
|
||||
}
|
||||
|
||||
all_abis_set="arm64-v8a armeabi-v7a x86_64 x86"
|
||||
get_abi_folder() {
|
||||
case $1 in
|
||||
arm64-v8a) echo "android_arm64_v8a" ;;
|
||||
armeabi-v7a) echo "android_armv7" ;;
|
||||
x86) echo "android_x86" ;;
|
||||
all|x86_64) echo "android_x86_64" ;;
|
||||
*) echo "" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
abis=()
|
||||
installers=()
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
-b|--build) : ${BUILD_PATH:="$2"}; shift 2 ;;
|
||||
-s|--source) : ${SOURCE_PATH:="$2"}; shift 2 ;;
|
||||
-t|--target) TARGET="$2"; shift 2 ;;
|
||||
-f|--force) : ${FORCE=true}; shift ;;
|
||||
-g|--generator) : ${CMAKE_GENERATOR=$2}; shift 2 ;;
|
||||
--installer) installers+=("$2"); shift 2 ;;
|
||||
--abi) abis+=("$2"); shift 2 ;;
|
||||
--sign) : ${SIGN:=true}; shift ;;
|
||||
--aab) : ${BUILD_AAB=true}; shift ;;
|
||||
--help|-h|?)
|
||||
echo "Usage: $0 [options]"
|
||||
echo " Options:"
|
||||
echo " -b|--build <path> - specify build folder"
|
||||
echo " -s|--source <path> - specify path to amnezia-client root folder"
|
||||
echo " -t|--target <name> - specify build target"
|
||||
echo " -f|--force - force removal of build folder prior cmake configuration"
|
||||
echo " -g|--generator <name> - use specified generator for CMake"
|
||||
echo " --installer <name|all> - specify an installer(s) to build. allowed to be used multiple times"
|
||||
echo " --abi - specify Android ABIs for target to build for. all by default"
|
||||
echo " --sign - whether to sign the resulting files. only appicable to Android"
|
||||
echo " --aab - whether to build AAB. only applicable to Android"
|
||||
exit 0
|
||||
;;
|
||||
*) echo "Unknown arg \"$1\". Use $0 -h to get help"; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
: ${SOURCE_PATH:=$(pwd)}
|
||||
: ${BUILD_PATH:="$SOURCE_PATH/deploy/build"}
|
||||
: ${INSTALLERS:="${installers[@]}"}
|
||||
: ${ABIS:="${abis[@]}"}
|
||||
: ${ABIS:="all"}
|
||||
: ${HOST:="$(uname -s)"}
|
||||
: ${TARGET:="$HOST"}
|
||||
|
||||
HOST=$(echo "$HOST" | tr '[:upper:]' '[:lower:]')
|
||||
TARGET=$(echo "$TARGET" | tr '[:upper:]' '[:lower:]')
|
||||
|
||||
bases=(~/Qt /opt/Qt)
|
||||
[ -n "${QT_INSTALL_DIR}" ] && bases=("${QT_INSTALL_DIR}/Qt" "${bases[@]}")
|
||||
|
||||
# seek for Qt installation in bases folders
|
||||
qt_folders=()
|
||||
qif_folders=()
|
||||
for base in "${bases[@]}"; do
|
||||
for dir in "$base"/${QT_VERSION:-6.*}; do
|
||||
[ -d "$dir" ] && qt_folders+=("$dir")
|
||||
done
|
||||
for dir in "$base"/Tools/QtInstallerFramework/${QIF_VERSION:-*}; do
|
||||
[ -d "$dir" ] && qif_folders+=("$dir")
|
||||
done
|
||||
done
|
||||
|
||||
: ${QT_ROOT_PATH:=$(printf '%s\n' "${qt_folders[@]}" | awk -F'/' '{print $NF, $0}' | sort -V | tail -1 | awk '{print $2}')}
|
||||
: ${QIF_ROOT_PATH:=$(printf '%s\n' "${qif_folders[@]}" | awk -F'/' '{print $NF, $0}' | sort -V | tail -1 | awk '{print $2}')}
|
||||
|
||||
if [[ -z "$QT_ROOT_PATH" ]]; then
|
||||
echo "* Qt not found in standard paths and in QT_INSTALL_DIR"
|
||||
echo " Please install the suitable version of Qt"
|
||||
echo " or specify it by using QT_ROOT_PATH/QT_INSTALL_DIR variables"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# add host options
|
||||
case "$HOST" in
|
||||
linux) [[ "$HOST" != "$TARGET" ]] && [[ -n "${QT_ROOT_PATH}" ]] && : ${QT_HOST_PATH:="$QT_ROOT_PATH/gcc_64"} ;;
|
||||
darwin) [[ "$HOST" != "$TARGET" ]] && [[ -n "${QT_ROOT_PATH}" ]] && : ${QT_HOST_PATH:="$QT_ROOT_PATH/macos"} ;;
|
||||
*) echo "Unsupported host \"$HOST\""; exit 1 ;;
|
||||
esac
|
||||
|
||||
# add custom per-target options
|
||||
case "$TARGET" in
|
||||
linux)
|
||||
[ "$INSTALLERS" = "all" ] && INSTALLERS="IFW"
|
||||
: ${CMAKE_GENERATOR:="Unix Makefiles"}
|
||||
: ${CMAKE_PREFIX_PATH:="$QT_ROOT_PATH"/gcc_64}
|
||||
;;
|
||||
darwin|macos)
|
||||
[ "$INSTALLERS" = "all" ] && INSTALLERS="productbuild"
|
||||
: ${CMAKE_GENERATOR:="Unix Makefiles"}
|
||||
: ${CMAKE_PREFIX_PATH:="$QT_ROOT_PATH"/macos}
|
||||
;;
|
||||
macos-ne)
|
||||
MACOS_NE=TRUE
|
||||
DEPLOY=1
|
||||
no_installers=1
|
||||
: ${CMAKE_GENERATOR:="Xcode"}
|
||||
: ${CMAKE_PREFIX_PATH:="$QT_ROOT_PATH"/macos}
|
||||
;;
|
||||
ios)
|
||||
DEPLOY=1
|
||||
no_installers=1
|
||||
: ${CMAKE_GENERATOR:="Xcode"}
|
||||
: ${CMAKE_OSX_SYSROOT=iphoneos}
|
||||
: ${CMAKE_TOOLCHAIN_FILE:="$QT_ROOT_PATH/ios/lib/cmake/Qt6/qt.toolchain.cmake"}
|
||||
;;
|
||||
android)
|
||||
no_installers=1
|
||||
: ${CMAKE_GENERATOR:="Ninja"}
|
||||
: ${ANDROID_PLATFORM:="android-28"}
|
||||
|
||||
if [[ -n "$SIGN" ]]; then
|
||||
QT_ANDROID_SIGN_APK=TRUE
|
||||
QT_ANDROID_SIGN_AAB=TRUE
|
||||
fi
|
||||
|
||||
[[ "$ABIS" == "all" ]] && ABIS="$all_abis_set"
|
||||
|
||||
toolchain_abi=""
|
||||
for abi in $ABIS; do
|
||||
abi_exists=$(get_abi_folder "$abi")
|
||||
if [[ -z "$abi_exists" ]]; then
|
||||
echo "Unsupported ABI \"${abi}\""
|
||||
exit 1
|
||||
fi
|
||||
: ${toolchain_abi:="$abi"}
|
||||
done
|
||||
|
||||
if [[ "$ABIS" == "$all_abis_set" ]]; then
|
||||
QT_ANDROID_BUILD_ALL_ABIS=TRUE
|
||||
else
|
||||
QT_ANDROID_ABIS="${ABIS// /;}"
|
||||
fi
|
||||
|
||||
toolchain_dir=$(get_abi_folder "$toolchain_abi")
|
||||
: ${CMAKE_PREFIX_PATH:="$QT_ROOT_PATH/$toolchain_dir/lib/cmake/Qt6/qt.toolchain.cmake"}
|
||||
: ${CMAKE_TOOLCHAIN_FILE:="$QT_ROOT_PATH/$toolchain_dir/lib/cmake/Qt6/qt.toolchain.cmake"}
|
||||
;;
|
||||
*) echo "Unsupported target \"$TARGET\""; exit 1 ;;
|
||||
esac
|
||||
|
||||
if [[ "$INSTALLERS" =~ IFW ]] && [[ -z "$QIF_ROOT_PATH" ]]; then
|
||||
echo "* Qt Installer Framework not found in standard paths and in QT_INSTALL_DIR"
|
||||
echo " Please install the suitable version of Qt Installer Framework"
|
||||
echo " or specify it by using QIF_ROOT_PATH/QT_INSTALL_DIR variables"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# search for Android SDK and NDK
|
||||
if [[ "$TARGET" == "android" ]]; then
|
||||
bases=()
|
||||
case "$HOST" in
|
||||
linux) bases=(~/Android/sdk) ;;
|
||||
darwin) bases=(~/Library/Android/sdk) ;;
|
||||
esac
|
||||
[[ -n "$ANDROID_HOME" ]] && bases=("$ANDROID_HOME" "${bases[@]}")
|
||||
|
||||
ndk_dirs=()
|
||||
for base in "${bases[@]}"; do
|
||||
for ndk_dir in "$base"/ndk/${ANDROID_NDK_VERSION:-*}; do
|
||||
[[ -d "$ndk_dir" ]] && ndk_dirs+=("$ndk_dir")
|
||||
done
|
||||
done
|
||||
|
||||
: ${ANDROID_NDK_ROOT:=$(printf '%s\n' "${ndk_dirs[@]}" | awk -F'/' '{print $NF, $0}' | sort -V | tail -1 | awk '{print $2}')}
|
||||
: ${ANDROID_SDK_ROOT:="$ANDROID_NDK_ROOT/../.."}
|
||||
fi
|
||||
|
||||
: ${CMAKE_BUILD_TYPE:=Release}
|
||||
|
||||
args=()
|
||||
[[ -n "$CMAKE_GENERATOR" ]] && args+=("-G" "$CMAKE_GENERATOR")
|
||||
[[ -n "$CMAKE_BUILD_TYPE" ]] && args+=("-DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE")
|
||||
[[ -n "$CMAKE_PREFIX_PATH" ]] && args+=("-DCMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH")
|
||||
[[ -n "$CMAKE_TOOLCHAIN_FILE" ]] && args+=("-DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN_FILE")
|
||||
[[ -n "$QT_HOST_PATH" ]] && args+=("-DQT_HOST_PATH=$QT_HOST_PATH")
|
||||
[[ -n "$CMAKE_OSX_SYSROOT" ]] && args+=("-DCMAKE_OSX_SYSROOT=$CMAKE_OSX_SYSROOT")
|
||||
[[ -n "$MACOS_NE" ]] && args+=("-DMACOS_NE=$MACOS_NE")
|
||||
[[ -n "$DEPLOY" ]] && args+=("-DDEPLOY=$DEPLOY")
|
||||
[[ -n "$ANDROID_ABI" ]] && args+=("-DANDROID_ABI=$ANDROID_ABI")
|
||||
[[ -n "$ANDROID_SDK_ROOT" ]] && args+=("-DANDROID_SDK_ROOT=$ANDROID_SDK_ROOT")
|
||||
[[ -n "$ANDROID_NDK_ROOT" ]] && args+=("-DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT")
|
||||
[[ -n "$ANDROID_PLATFORM" ]] && args+=("-DANDROID_PLATFORM=$ANDROID_PLATFORM")
|
||||
[[ -n "$QT_ANDROID_SIGN_APK" ]] && args+=("-DQT_ANDROID_SIGN_APK=$QT_ANDROID_SIGN_APK")
|
||||
[[ -n "$QT_ANDROID_SIGN_AAB" ]] && args+=("-DQT_ANDROID_SIGN_AAB=$QT_ANDROID_SIGN_AAB")
|
||||
[[ -n "$QT_ANDROID_ABIS" ]] && args+=("-DQT_ANDROID_ABIS=$QT_ANDROID_ABIS")
|
||||
[[ -n "$QT_ANDROID_BUILD_ALL_ABIS" ]] && args+=("-DQT_ANDROID_BUILD_ALL_ABIS=$QT_ANDROID_BUILD_ALL_ABIS")
|
||||
|
||||
if [[ -n "$FORCE" ]]; then
|
||||
run_traced rm -rf "$BUILD_PATH"
|
||||
fi
|
||||
|
||||
run_traced cmake -S "$SOURCE_PATH" -B "$BUILD_PATH" "${args[@]}"
|
||||
run_traced cmake --build "$BUILD_PATH" --config "$CMAKE_BUILD_TYPE"
|
||||
|
||||
[[ -n "$BUILD_AAB" ]] && run_traced cmake --build "$BUILD_PATH" --config "$CMAKE_BUILD_TYPE" -t "aab"
|
||||
|
||||
if [ -z "$no_installers" ]; then
|
||||
for installer in $INSTALLERS; do
|
||||
args=()
|
||||
[[ "$installer" == IFW ]] && args+=(-D "QTIFWDIR=$QIF_ROOT_PATH")
|
||||
|
||||
(cd "$BUILD_PATH" && run_traced cpack -G "$installer" "${args[@]}")
|
||||
done
|
||||
fi
|
||||
@@ -1,188 +0,0 @@
|
||||
#!/bin/bash
|
||||
# shellcheck disable=SC2086
|
||||
|
||||
set -o errexit -o nounset
|
||||
|
||||
usage() {
|
||||
cat <<EOT
|
||||
|
||||
Usage:
|
||||
build_android [options] <artifact_types>
|
||||
|
||||
Build AmneziaVPN android client.
|
||||
|
||||
Artifact types:
|
||||
-u, --aab Build Android App Bundle (AAB)
|
||||
-a, --apk (<abi_list> | all) Build APKs for the specified ABIs or for all available ABIs
|
||||
Available ABIs: 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
|
||||
<abi_list> - list of ABIs delimited by ';'
|
||||
|
||||
Options:
|
||||
-d, --debug Build debug version
|
||||
-b, --build-platform <platform> The SDK platform used for building the Java code of the application
|
||||
By default, the latest available platform is used
|
||||
-m, --move Move the build result to the root of the build directory
|
||||
-f, --fdroid Build for F-Droid
|
||||
-h, --help Display this help
|
||||
|
||||
EOT
|
||||
}
|
||||
|
||||
BUILD_TYPE="release"
|
||||
|
||||
opts=$(getopt -l debug,aab,apk:,build-platform:,move,fdroid,help -o "dua:b:mfh" -- "$@")
|
||||
eval set -- "$opts"
|
||||
while true; do
|
||||
case "$1" in
|
||||
-d | --debug) BUILD_TYPE="debug"; shift;;
|
||||
-u | --aab) AAB=1; shift;;
|
||||
-a | --apk) ABIS=$2; shift 2;;
|
||||
-b | --build-platform) ANDROID_BUILD_PLATFORM=$2; shift 2;;
|
||||
-m | --move) MOVE_RESULT=1; shift;;
|
||||
-f | --fdroid) FDROID=1; shift;;
|
||||
-h | --help) usage; exit 0;;
|
||||
--) shift; break;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Validate ABIS parameter
|
||||
if [[ -v ABIS && \
|
||||
! "$ABIS" = "all" && \
|
||||
! "$ABIS" =~ ^((x86|x86_64|armeabi-v7a|arm64-v8a);)*(x86|x86_64|armeabi-v7a|arm64-v8a)$ ]]; then
|
||||
echo "The 'apk' option must be a list of ['x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a']" \
|
||||
"delimited by ';' or 'all', but is '$ABIS'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# At least one artifact type must be specified
|
||||
if [[ ! (-v AAB || -v ABIS) ]]; then
|
||||
usage; exit 0
|
||||
fi
|
||||
|
||||
echo "Build script started..."
|
||||
|
||||
PROJECT_DIR=$(pwd)
|
||||
DEPLOY_DIR=$PROJECT_DIR/deploy
|
||||
|
||||
mkdir -p $DEPLOY_DIR/build
|
||||
BUILD_DIR=$DEPLOY_DIR/build
|
||||
OUT_APP_DIR=$BUILD_DIR/client
|
||||
|
||||
echo "Project dir: $PROJECT_DIR"
|
||||
echo "Build dir: $BUILD_DIR"
|
||||
|
||||
# Determine path to qt bin folder with qt-cmake
|
||||
if [[ -v AAB || "$ABIS" = "all" ]]; then
|
||||
qt_bin_dir_suffix="x86_64"
|
||||
else
|
||||
if [[ $ABIS = *";"* ]]; then
|
||||
oneOf=$(echo $ABIS | cut -d';' -f 1)
|
||||
else
|
||||
oneOf=$ABIS
|
||||
fi
|
||||
case $oneOf in
|
||||
"armeabi-v7a") qt_bin_dir_suffix="armv7";;
|
||||
"arm64-v8a") qt_bin_dir_suffix="arm64_v8a";;
|
||||
*) qt_bin_dir_suffix=$oneOf;;
|
||||
esac
|
||||
fi
|
||||
# get real path
|
||||
# calls on paths containing '..' may result in a 'Permission denied'
|
||||
QT_BIN_DIR=$(cd $QT_HOST_PATH/../android_$qt_bin_dir_suffix/bin && pwd)
|
||||
|
||||
echo "Building App..."
|
||||
|
||||
echo "Qt host: $QT_HOST_PATH"
|
||||
echo "Using Qt in $QT_BIN_DIR"
|
||||
echo "Using Android SDK in $ANDROID_SDK_ROOT"
|
||||
echo "Using Android NDK in $ANDROID_NDK_ROOT"
|
||||
|
||||
# Run qt-cmake to configure build
|
||||
qt_cmake_opts=()
|
||||
|
||||
if [[ -v AAB || "$ABIS" = "all" ]]; then
|
||||
qt_cmake_opts+=(-DQT_ANDROID_BUILD_ALL_ABIS=ON)
|
||||
else
|
||||
qt_cmake_opts+=(-DQT_ANDROID_ABIS="$ABIS")
|
||||
fi
|
||||
|
||||
# QT_NO_GLOBAL_APK_TARGET_PART_OF_ALL=ON - Skip building apks as part of the default 'ALL' target
|
||||
# We'll build apks during androiddeployqt
|
||||
$QT_BIN_DIR/qt-cmake -S $PROJECT_DIR -B $BUILD_DIR \
|
||||
-DQT_NO_GLOBAL_APK_TARGET_PART_OF_ALL=ON \
|
||||
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
|
||||
"${qt_cmake_opts[@]}"
|
||||
|
||||
# Build app
|
||||
cmake --build $BUILD_DIR --config $BUILD_TYPE
|
||||
|
||||
# Build and package APK or AAB
|
||||
echo "Building APK/AAB..."
|
||||
|
||||
deployqt_opts=()
|
||||
|
||||
if [ -v AAB ]; then
|
||||
deployqt_opts+=(--aab)
|
||||
fi
|
||||
|
||||
if [ -v ANDROID_BUILD_PLATFORM ]; then
|
||||
deployqt_opts+=(--android-platform "$ANDROID_BUILD_PLATFORM")
|
||||
fi
|
||||
|
||||
if [ "$BUILD_TYPE" = "release" ]; then
|
||||
deployqt_opts+=(--release)
|
||||
fi
|
||||
|
||||
# for gradle to skip all tasks when it is executed by androiddeployqt
|
||||
# gradle is started later explicitly
|
||||
export ANDROIDDEPLOYQT_RUN=1
|
||||
|
||||
$QT_HOST_PATH/bin/androiddeployqt \
|
||||
--input $OUT_APP_DIR/android-AmneziaVPN-deployment-settings.json \
|
||||
--output $OUT_APP_DIR/android-build \
|
||||
"${deployqt_opts[@]}"
|
||||
|
||||
# run gradle
|
||||
gradle_opts=()
|
||||
|
||||
if [ -v FDROID ]; then
|
||||
BUILD_TYPE="fdroid"
|
||||
fi
|
||||
|
||||
if [ -v AAB ]; then
|
||||
gradle_opts+=(bundle"${BUILD_TYPE^}")
|
||||
fi
|
||||
if [ -v ABIS ]; then
|
||||
gradle_opts+=(assemble"${BUILD_TYPE^}")
|
||||
fi
|
||||
|
||||
$OUT_APP_DIR/android-build/gradlew \
|
||||
--project-dir $OUT_APP_DIR/android-build \
|
||||
-DexplicitRun=1 \
|
||||
"${gradle_opts[@]}"
|
||||
|
||||
if [[ -v CI || -v MOVE_RESULT ]]; then
|
||||
echo "Moving APK/AAB..."
|
||||
if [ -v AAB ]; then
|
||||
mv -u $OUT_APP_DIR/android-build/build/outputs/bundle/$BUILD_TYPE/AmneziaVPN-$BUILD_TYPE.aab \
|
||||
$PROJECT_DIR/deploy/build/
|
||||
fi
|
||||
|
||||
if [ -v ABIS ]; then
|
||||
if [ "$ABIS" = "all" ]; then
|
||||
ABIS="x86;x86_64;armeabi-v7a;arm64-v8a"
|
||||
fi
|
||||
|
||||
suffix=$BUILD_TYPE
|
||||
if [ -v FDROID ]; then
|
||||
suffix+="-unsigned"
|
||||
fi
|
||||
|
||||
IFS=';' read -r -a abi_array <<< "$ABIS"
|
||||
for ABI in "${abi_array[@]}"
|
||||
do
|
||||
mv -u $OUT_APP_DIR/android-build/build/outputs/apk/$BUILD_TYPE/AmneziaVPN-$ABI-$suffix.apk \
|
||||
$PROJECT_DIR/deploy/build/
|
||||
done
|
||||
fi
|
||||
fi
|
||||
@@ -1,99 +0,0 @@
|
||||
#!/bin/bash
|
||||
echo "Build script started ..."
|
||||
|
||||
set -o errexit -o nounset
|
||||
|
||||
# Hold on to current directory
|
||||
PROJECT_DIR=$(pwd)
|
||||
|
||||
BUILD_DIR=$PROJECT_DIR/build-ios
|
||||
mkdir -p $BUILD_DIR
|
||||
|
||||
echo "Project dir: ${PROJECT_DIR}"
|
||||
echo "Build dir: ${BUILD_DIR}"
|
||||
|
||||
APP_NAME=AmneziaVPN
|
||||
APP_FILENAME=$APP_NAME.app
|
||||
APP_DOMAIN=org.amneziavpn.package
|
||||
PLIST_NAME=$APP_NAME.plist
|
||||
|
||||
|
||||
# Search Qt
|
||||
if [ -z "${QT_VERSION+x}" ]; then
|
||||
QT_VERSION=6.6.2;
|
||||
QT_BIN_DIR=$HOME/Qt/$QT_VERSION/ios/bin
|
||||
fi
|
||||
|
||||
echo "Using Qt in $QT_BIN_DIR"
|
||||
|
||||
# Checking env
|
||||
$QT_BIN_DIR/qt-cmake --version
|
||||
cmake --version
|
||||
clang -v
|
||||
|
||||
# Generate XCodeProj
|
||||
$QT_BIN_DIR/qt-cmake . -B $BUILD_DIR -GXcode -DQT_HOST_PATH=$QT_MACOS_ROOT_DIR -DDEPLOY=ON
|
||||
|
||||
KEYCHAIN=amnezia.build.ios.keychain
|
||||
KEYCHAIN_FILE=$HOME/Library/Keychains/${KEYCHAIN}-db
|
||||
|
||||
# Setup keychain
|
||||
if [ "${IOS_SIGNING_CERT_BASE64+x}" ]; then
|
||||
echo "Import certificate"
|
||||
|
||||
TRUST_CERT_CER=$BUILD_DIR/trust-cert.cer
|
||||
SIGNING_CERT_P12=$BUILD_DIR/signing-cert.p12
|
||||
|
||||
echo $IOS_TRUST_CERT_BASE64 | base64 --decode > $TRUST_CERT_CER
|
||||
echo $IOS_SIGNING_CERT_BASE64 | base64 --decode > $SIGNING_CERT_P12
|
||||
|
||||
shasum -a 256 $TRUST_CERT_CER
|
||||
shasum -a 256 $SIGNING_CERT_P12
|
||||
|
||||
KEYCHAIN_PASS=$IOS_SIGNING_CERT_PASSWORD
|
||||
|
||||
security create-keychain -p $KEYCHAIN_PASS $KEYCHAIN || true
|
||||
security default-keychain -s $KEYCHAIN
|
||||
security unlock-keychain -p $KEYCHAIN_PASS $KEYCHAIN
|
||||
|
||||
security default-keychain
|
||||
security list-keychains
|
||||
|
||||
security import $TRUST_CERT_CER -k $KEYCHAIN -P "" -T /usr/bin/codesign
|
||||
security import $SIGNING_CERT_P12 -k $KEYCHAIN -P $IOS_SIGNING_CERT_PASSWORD -T /usr/bin/codesign
|
||||
|
||||
security set-key-partition-list -S "apple-tool:,apple:,codesign:" -s -k $KEYCHAIN_PASS $KEYCHAIN
|
||||
security find-identity -p codesigning
|
||||
security set-keychain-settings $KEYCHAIN_FILE
|
||||
security set-keychain-settings -t 3600 $KEYCHAIN_FILE
|
||||
security unlock-keychain -p $KEYCHAIN_PASS $KEYCHAIN_FILE
|
||||
|
||||
# Copy provisioning prifiles
|
||||
mkdir -p "$HOME/Library/MobileDevice/Provisioning Profiles/"
|
||||
|
||||
echo $IOS_APP_PROVISIONING_PROFILE | base64 --decode > ~/Library/MobileDevice/Provisioning\ Profiles/app.mobileprovision
|
||||
echo $IOS_NE_PROVISIONING_PROFILE | base64 --decode > ~/Library/MobileDevice/Provisioning\ Profiles/ne.mobileprovision
|
||||
|
||||
shasum -a 256 ~/Library/MobileDevice/Provisioning\ Profiles/app.mobileprovision
|
||||
shasum -a 256 ~/Library/MobileDevice/Provisioning\ Profiles/ne.mobileprovision
|
||||
|
||||
profile_uuid=`grep UUID -A1 -a ~/Library/MobileDevice/Provisioning\ Profiles/app.mobileprovision | grep -io "[-A-F0-9]\{36\}"`
|
||||
profile_ne_uuid=`grep UUID -A1 -a ~/Library/MobileDevice/Provisioning\ Profiles/ne.mobileprovision | grep -io "[-A-F0-9]\{36\}"`
|
||||
|
||||
mv ~/Library/MobileDevice/Provisioning\ Profiles/app.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/$profile_uuid.mobileprovision
|
||||
mv ~/Library/MobileDevice/Provisioning\ Profiles/ne.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/$profile_ne_uuid.mobileprovision
|
||||
else
|
||||
echo "Failed to import certificate, aborting..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Build project
|
||||
xcodebuild \
|
||||
"OTHER_CODE_SIGN_FLAGS=--keychain '$KEYCHAIN_FILE'" \
|
||||
-configuration Release \
|
||||
-scheme AmneziaVPN \
|
||||
-destination "generic/platform=iOS,name=Any iOS'" \
|
||||
-project $BUILD_DIR/AmneziaVPN.xcodeproj
|
||||
|
||||
# restore keychain
|
||||
security default-keychain -s login.keychain
|
||||
@@ -1,90 +0,0 @@
|
||||
#!/bin/bash
|
||||
echo "Build script started ..."
|
||||
|
||||
set -o errexit -o nounset
|
||||
|
||||
|
||||
# Hold on to current directory
|
||||
PROJECT_DIR=$(pwd)
|
||||
DEPLOY_DIR=$PROJECT_DIR/deploy
|
||||
|
||||
mkdir -p $DEPLOY_DIR/build
|
||||
BUILD_DIR=$DEPLOY_DIR/build
|
||||
|
||||
APP_DIR=$DEPLOY_DIR/AppDir
|
||||
mkdir -p $APP_DIR
|
||||
|
||||
TOOLS_DIR=$DEPLOY_DIR/Tools
|
||||
mkdir -p $TOOLS_DIR
|
||||
|
||||
CQTDEPLOYER_DIR=$TOOLS_DIR/cqtdeployer
|
||||
mkdir -p $CQTDEPLOYER_DIR
|
||||
|
||||
echo "Project dir: ${PROJECT_DIR}"
|
||||
echo "Build dir: ${BUILD_DIR}"
|
||||
|
||||
APP_NAME=AmneziaVPN
|
||||
APP_FILENAME=$APP_NAME.app
|
||||
APP_DOMAIN=org.amneziavpn.package
|
||||
|
||||
DEPLOY_DATA_DIR=$PROJECT_DIR/deploy/data/linux
|
||||
PREBUILT_DEPLOY_DATA_DIR=$PROJECT_DIR/client/3rd-prebuilt/deploy-prebuilt/linux/client/bin
|
||||
INSTALLER_DATA_DIR=$PROJECT_DIR/deploy/installer/packages/$APP_DOMAIN/data
|
||||
|
||||
PRO_FILE_PATH=$PROJECT_DIR/$APP_NAME.pro
|
||||
QMAKE_STASH_FILE=$PROJECT_DIR/.qmake_stash
|
||||
|
||||
# Search Qt
|
||||
if [ -z "${QT_VERSION+x}" ]; then
|
||||
QT_VERSION=6.6.2
|
||||
if [ -f /opt/Qt/$QT_VERSION/gcc_64/bin/qmake ]; then
|
||||
QT_BIN_DIR=/opt/Qt/$QT_VERSION/gcc_64/bin
|
||||
elif [ -f $HOME/Qt/$QT_VERSION/gcc_64/bin/qmake ]; then
|
||||
QT_BIN_DIR=$HOME/Qt/$QT_VERSION/gcc_64/bin
|
||||
elif [ -f /usr/lib/qt6/bin/qmake ]; then
|
||||
QT_BIN_DIR=/usr/lib/qt6/bin
|
||||
elif [ -f /usr/lib/x86_64-linux-gnu/qt6/bin/qmake ]; then
|
||||
QT_BIN_DIR=/usr/lib/x86_64-linux-gnu/qt6/bin
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Using Qt in $QT_BIN_DIR"
|
||||
|
||||
|
||||
# Checking env
|
||||
$QT_BIN_DIR/qt-cmake --version
|
||||
gcc -v
|
||||
|
||||
# Build App
|
||||
echo "Building App..."
|
||||
cd $BUILD_DIR
|
||||
|
||||
$QT_BIN_DIR/qt-cmake -S $PROJECT_DIR
|
||||
cmake --build . -j --config release
|
||||
|
||||
# Build and run tests here
|
||||
|
||||
#echo "............Deploy.................."
|
||||
|
||||
cp -r $DEPLOY_DATA_DIR/* $APP_DIR
|
||||
cp -r $PREBUILT_DEPLOY_DATA_DIR $APP_DIR/client
|
||||
|
||||
if [ ! -f $CQTDEPLOYER_DIR/cqtdeployer.sh ]; then
|
||||
wget -O $TOOLS_DIR/CQtDeployer.zip https://github.com/QuasarApp/CQtDeployer/releases/download/v1.5.4.17/CQtDeployer_1.5.4.17_Linux_x86_64.zip
|
||||
unzip -o $TOOLS_DIR/CQtDeployer.zip -d $CQTDEPLOYER_DIR/
|
||||
chmod +x -R $CQTDEPLOYER_DIR
|
||||
fi
|
||||
|
||||
|
||||
$CQTDEPLOYER_DIR/cqtdeployer.sh -bin $BUILD_DIR/client/AmneziaVPN -qmake $QT_BIN_DIR/qmake -qmlDir $PROJECT_DIR/client/ui/qml/ -targetDir $APP_DIR/client/
|
||||
$CQTDEPLOYER_DIR/cqtdeployer.sh -bin $BUILD_DIR/service/server/AmneziaVPN-service -qmake $QT_BIN_DIR/qmake -targetDir $APP_DIR/service/
|
||||
|
||||
rm -f $INSTALLER_DATA_DIR/data.7z
|
||||
|
||||
7z a $INSTALLER_DATA_DIR/data.7z $APP_DIR/*
|
||||
|
||||
ldd $CQTDEPLOYER_DIR/bin/binarycreator
|
||||
|
||||
cp -r $PROJECT_DIR/deploy/installer $BUILD_DIR
|
||||
|
||||
$CQTDEPLOYER_DIR/binarycreator.sh --offline-only -v -c $BUILD_DIR/installer/config/linux.xml -p $BUILD_DIR/installer/packages -f $PROJECT_DIR/deploy/AmneziaVPN_Linux_Installer.bin
|
||||
@@ -1,287 +0,0 @@
|
||||
#!/bin/bash
|
||||
# -----------------------------------------------------------------------------
|
||||
# Usage:
|
||||
# Export the required signing credentials before running this script, e.g.:
|
||||
# export MAC_APP_CERT_PW='pw-for-DeveloperID-Application'
|
||||
# export MAC_INSTALL_CERT_PW='pw-for-DeveloperID-Installer'
|
||||
# export MAC_SIGNER_ID='Developer ID Application: Some Company Name (XXXXXXXXXX)'
|
||||
# export MAC_INSTALLER_SIGNER_ID='Developer ID Installer: Some Company Name (XXXXXXXXXX)'
|
||||
# export APPLE_DEV_EMAIL='your@email.com'
|
||||
# export APPLE_DEV_PASSWORD='<your-password>'
|
||||
# bash deploy/build_macos.sh [-n]
|
||||
# -----------------------------------------------------------------------------
|
||||
echo "Build script started ..."
|
||||
|
||||
set -o errexit -o nounset
|
||||
|
||||
while getopts n flag
|
||||
do
|
||||
case "${flag}" in
|
||||
n) NOTARIZE_APP=1;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Hold on to current directory
|
||||
PROJECT_DIR=$(pwd)
|
||||
DEPLOY_DIR=$PROJECT_DIR/deploy
|
||||
|
||||
mkdir -p "$DEPLOY_DIR/build"
|
||||
BUILD_DIR="$DEPLOY_DIR/build"
|
||||
|
||||
echo "Project dir: ${PROJECT_DIR}"
|
||||
echo "Build dir: ${BUILD_DIR}"
|
||||
|
||||
APP_NAME=AmneziaVPN
|
||||
APP_FILENAME=$APP_NAME.app
|
||||
APP_DOMAIN=org.amneziavpn.package
|
||||
PLIST_NAME=$APP_NAME.plist
|
||||
|
||||
OUT_APP_DIR=$BUILD_DIR/client
|
||||
BUNDLE_DIR=$OUT_APP_DIR/$APP_FILENAME
|
||||
|
||||
# Prebuilt deployment assets are available via the symlink under deploy/data
|
||||
PREBUILT_DEPLOY_DATA_DIR=$PROJECT_DIR/deploy/data/deploy-prebuilt/macos
|
||||
DEPLOY_DATA_DIR=$PROJECT_DIR/deploy/data/macos
|
||||
|
||||
|
||||
# Search Qt
|
||||
if [ -z "${QT_VERSION+x}" ]; then
|
||||
QT_VERSION=6.8.3;
|
||||
QT_BIN_DIR=$HOME/Qt/$QT_VERSION/macos/bin
|
||||
fi
|
||||
|
||||
echo "Using Qt in $QT_BIN_DIR"
|
||||
|
||||
|
||||
# Checking env
|
||||
"$QT_BIN_DIR/qt-cmake" --version
|
||||
cmake --version
|
||||
clang -v
|
||||
|
||||
# Build App
|
||||
echo "Building App..."
|
||||
cd "$BUILD_DIR"
|
||||
|
||||
"$QT_BIN_DIR/qt-cmake" -S "$PROJECT_DIR" -B "$BUILD_DIR"
|
||||
cmake --build . --config release --target all
|
||||
|
||||
# Build and run tests here
|
||||
|
||||
# Create a temporary keychain and import certificates
|
||||
KEYCHAIN_PATH="$PROJECT_DIR/mac_sign.keychain"
|
||||
trap 'echo "Cleaning up mac_sign.keychain..."; security delete-keychain "$KEYCHAIN_PATH" 2>/dev/null || true; rm -f "$KEYCHAIN_PATH" 2>/dev/null || true' EXIT
|
||||
KEYCHAIN=$(security default-keychain -d user | tr -d '"[:space:]"')
|
||||
|
||||
# Build a clean list of the *existing* user key-chains. The raw output of
|
||||
# security list-keychains -d user
|
||||
# looks roughly like:
|
||||
# " \"/Users/foo/Library/Keychains/login.keychain-db\"\n \"/Library/Keychains/System.keychain\""
|
||||
# Every entry is surrounded by quotes and indented with a few blanks. Feeding
|
||||
# that verbatim back to `security list-keychains -s` inside a single quoted
|
||||
# argument leads to one long, invalid path on some systems. We therefore strip
|
||||
# the quotes and rely on the shell to split the string on whitespace so that
|
||||
# each path becomes its own argument.
|
||||
|
||||
read -ra EXISTING_KEYCHAINS <<< "$(security list-keychains -d user | tr -d '"')"
|
||||
|
||||
security list-keychains -d user -s "$KEYCHAIN_PATH" "$KEYCHAIN" "${EXISTING_KEYCHAINS[@]}"
|
||||
KEYCHAIN_PWD="" # Empty password keeps things simple for CI jobs
|
||||
# Create, unlock and configure the temporary key-chain so that `codesign` can
|
||||
# access the imported identities without triggering interactive prompts.
|
||||
security create-keychain -p "$KEYCHAIN_PWD" "$KEYCHAIN_PATH"
|
||||
# Keep the key-chain unlocked for the duration of the job (6 hours is plenty).
|
||||
security set-keychain-settings -lut 21600 "$KEYCHAIN_PATH"
|
||||
security unlock-keychain -p "$KEYCHAIN_PWD" "$KEYCHAIN_PATH"
|
||||
|
||||
# Import the signing certificates only when the corresponding passwords are
|
||||
# available in the environment. This allows the script to run in environments
|
||||
# where code-signing is intentionally turned off (e.g. CI jobs that just build
|
||||
# the artefacts without releasing them).
|
||||
|
||||
if [ -n "${MAC_APP_CERT_PW-}" ]; then
|
||||
# If the certificate is provided via environment variable, decode it.
|
||||
if [ -n "${MAC_APP_CERT_CERT-}" ]; then
|
||||
echo "$MAC_APP_CERT_CERT" | base64 -d > "$DEPLOY_DIR/DeveloperIdApplicationCertificate.p12"
|
||||
fi
|
||||
security import "$DEPLOY_DIR/DeveloperIdApplicationCertificate.p12" \
|
||||
-k "$KEYCHAIN_PATH" -P "$MAC_APP_CERT_PW" -A
|
||||
fi
|
||||
|
||||
if [ -n "${MAC_INSTALL_CERT_PW-}" ]; then
|
||||
# Same logic for the installer certificate.
|
||||
if [ -n "${MAC_INSTALLER_SIGNER_CERT-}" ]; then
|
||||
echo "$MAC_INSTALLER_SIGNER_CERT" | base64 -d > "$DEPLOY_DIR/DeveloperIdInstallerCertificate.p12"
|
||||
fi
|
||||
security import "$DEPLOY_DIR/DeveloperIdInstallerCertificate.p12" \
|
||||
-k "$KEYCHAIN_PATH" -P "$MAC_INSTALL_CERT_PW" -A
|
||||
fi
|
||||
|
||||
# This certificate has no password.
|
||||
security import "$DEPLOY_DIR/DeveloperIDG2CA.cer" -k "$KEYCHAIN_PATH" -T /usr/bin/codesign
|
||||
|
||||
security list-keychains -d user -s "$KEYCHAIN_PATH"
|
||||
|
||||
echo "____________________________________"
|
||||
echo "............Deploy.................."
|
||||
echo "____________________________________"
|
||||
|
||||
# Package
|
||||
echo "Packaging ..."
|
||||
|
||||
|
||||
cp -Rv "$PREBUILT_DEPLOY_DATA_DIR"/* "$BUNDLE_DIR/Contents/macOS"
|
||||
"$QT_BIN_DIR/macdeployqt" "$OUT_APP_DIR/$APP_FILENAME" -always-overwrite -qmldir="$PROJECT_DIR"
|
||||
cp -av "$BUILD_DIR/service/server/$APP_NAME-service" "$BUNDLE_DIR/Contents/macOS"
|
||||
rsync -av --exclude="$PLIST_NAME" --exclude=post_install.sh --exclude=post_uninstall.sh "$DEPLOY_DATA_DIR/" "$BUNDLE_DIR/Contents/macOS/"
|
||||
|
||||
if [ "${MAC_APP_CERT_PW+x}" ]; then
|
||||
|
||||
# Path to the p12 that contains the Developer ID *Application* certificate
|
||||
CERTIFICATE_P12=$DEPLOY_DIR/DeveloperIdApplicationCertificate.p12
|
||||
|
||||
# Ensure launchd plist is bundled, but place it inside Resources so that
|
||||
# the bundle keeps a valid structure (nothing but `Contents` at the root).
|
||||
mkdir -p "$BUNDLE_DIR/Contents/Resources"
|
||||
cp "$DEPLOY_DATA_DIR/$PLIST_NAME" "$BUNDLE_DIR/Contents/Resources/$PLIST_NAME"
|
||||
|
||||
# Show available signing identities (useful for debugging)
|
||||
security find-identity -p codesigning || true
|
||||
|
||||
echo "Signing App bundle..."
|
||||
/usr/bin/codesign --deep --force --verbose --timestamp -o runtime --keychain "$KEYCHAIN_PATH" --sign "$MAC_SIGNER_ID" "$BUNDLE_DIR"
|
||||
/usr/bin/codesign --verify -vvvv "$BUNDLE_DIR" || true
|
||||
spctl -a -vvvv "$BUNDLE_DIR" || true
|
||||
|
||||
fi
|
||||
|
||||
echo "Packaging installer..."
|
||||
PKG_DIR=$BUILD_DIR/pkg
|
||||
# Remove any stale packaging data from previous runs
|
||||
rm -rf "$PKG_DIR"
|
||||
PKG_ROOT=$PKG_DIR/root
|
||||
SCRIPTS_DIR=$PKG_DIR/scripts
|
||||
RESOURCES_DIR=$PKG_DIR/resources
|
||||
INSTALL_PKG=$PKG_DIR/${APP_NAME}_install.pkg
|
||||
UNINSTALL_PKG=$PKG_DIR/${APP_NAME}_uninstall.pkg
|
||||
FINAL_PKG=$PKG_DIR/${APP_NAME}.pkg
|
||||
UNINSTALL_SCRIPTS_DIR=$PKG_DIR/uninstall_scripts
|
||||
|
||||
mkdir -p "$PKG_ROOT/Applications" "$SCRIPTS_DIR" "$RESOURCES_DIR" "$UNINSTALL_SCRIPTS_DIR"
|
||||
|
||||
cp -R "$BUNDLE_DIR" "$PKG_ROOT/Applications"
|
||||
# launchd plist is already inside the bundle; no need to add it again after signing
|
||||
/usr/bin/codesign --deep --force --verbose --timestamp -o runtime --keychain "$KEYCHAIN_PATH" --sign "$MAC_SIGNER_ID" "$PKG_ROOT/Applications/$APP_FILENAME"
|
||||
/usr/bin/codesign --verify --deep --strict --verbose=4 "$PKG_ROOT/Applications/$APP_FILENAME" || true
|
||||
cp "$DEPLOY_DATA_DIR/post_install.sh" "$SCRIPTS_DIR/post_install.sh"
|
||||
cp "$DEPLOY_DATA_DIR/post_uninstall.sh" "$UNINSTALL_SCRIPTS_DIR/postinstall"
|
||||
mkdir -p "$RESOURCES_DIR/scripts"
|
||||
cp "$DEPLOY_DATA_DIR/check_install.sh" "$RESOURCES_DIR/scripts/check_install.sh"
|
||||
cp "$DEPLOY_DATA_DIR/check_uninstall.sh" "$RESOURCES_DIR/scripts/check_uninstall.sh"
|
||||
|
||||
cat > "$SCRIPTS_DIR/postinstall" <<'EOS'
|
||||
#!/bin/bash
|
||||
SCRIPT_DIR="$(dirname "$0")"
|
||||
bash "$SCRIPT_DIR/post_install.sh"
|
||||
exit 0
|
||||
EOS
|
||||
|
||||
chmod +x "$SCRIPTS_DIR"/*
|
||||
chmod +x "$UNINSTALL_SCRIPTS_DIR"/*
|
||||
chmod +x "$RESOURCES_DIR/scripts"/*
|
||||
cp "$PROJECT_DIR/LICENSE" "$RESOURCES_DIR/LICENSE"
|
||||
|
||||
APP_VERSION=$(grep -m1 -E 'project\(' "$PROJECT_DIR/CMakeLists.txt" | sed -E 's/.*VERSION ([0-9.]+).*/\1/')
|
||||
echo "Building component package $INSTALL_PKG ..."
|
||||
|
||||
# Disable bundle relocation so the app always ends up in /Applications even if
|
||||
# another copy is lying around somewhere. We do this by letting pkgbuild
|
||||
# analyse the contents, flipping the BundleIsRelocatable flag to false for every
|
||||
# bundle it discovers and then feeding that plist back to pkgbuild.
|
||||
|
||||
COMPONENT_PLIST="$PKG_DIR/component.plist"
|
||||
# Create the component description plist first
|
||||
pkgbuild --analyze --root "$PKG_ROOT" "$COMPONENT_PLIST"
|
||||
|
||||
# Turn all `BundleIsRelocatable` keys to false (PlistBuddy is available on all
|
||||
# macOS systems). We first convert to xml1 to ensure predictable formatting.
|
||||
|
||||
# Turn relocation off for every bundle entry in the plist. PlistBuddy cannot
|
||||
# address keys that contain slashes without quoting, so we iterate through the
|
||||
# top-level keys it prints.
|
||||
plutil -convert xml1 "$COMPONENT_PLIST"
|
||||
for bundle_key in $(/usr/libexec/PlistBuddy -c "Print" "$COMPONENT_PLIST" | awk '/^[ \t]*[A-Za-z0-9].*\.app/ {print $1}'); do
|
||||
/usr/libexec/PlistBuddy -c "Set :'${bundle_key}':BundleIsRelocatable false" "$COMPONENT_PLIST" || true
|
||||
done
|
||||
|
||||
# Now build the real payload package with the edited plist so that the final
|
||||
# PackageInfo contains relocatable="false".
|
||||
pkgbuild --root "$PKG_ROOT" \
|
||||
--identifier "$APP_DOMAIN" \
|
||||
--version "$APP_VERSION" \
|
||||
--install-location "/" \
|
||||
--scripts "$SCRIPTS_DIR" \
|
||||
--component-plist "$COMPONENT_PLIST" \
|
||||
--sign "$MAC_INSTALLER_SIGNER_ID" \
|
||||
"$INSTALL_PKG"
|
||||
|
||||
# Build uninstaller component package
|
||||
UNINSTALL_COMPONENT_PKG=$PKG_DIR/${APP_NAME}_uninstall_component.pkg
|
||||
echo "Building uninstaller component package $UNINSTALL_COMPONENT_PKG ..."
|
||||
pkgbuild --nopayload \
|
||||
--identifier "$APP_DOMAIN.uninstall" \
|
||||
--version "$APP_VERSION" \
|
||||
--scripts "$UNINSTALL_SCRIPTS_DIR" \
|
||||
--sign "$MAC_INSTALLER_SIGNER_ID" \
|
||||
"$UNINSTALL_COMPONENT_PKG"
|
||||
|
||||
# Wrap uninstaller component in a distribution package for clearer UI
|
||||
echo "Building uninstaller distribution package $UNINSTALL_PKG ..."
|
||||
UNINSTALL_RESOURCES=$PKG_DIR/uninstall_resources
|
||||
rm -rf "$UNINSTALL_RESOURCES"
|
||||
mkdir -p "$UNINSTALL_RESOURCES"
|
||||
cp "$DEPLOY_DATA_DIR/uninstall_welcome.html" "$UNINSTALL_RESOURCES"
|
||||
cp "$DEPLOY_DATA_DIR/uninstall_conclusion.html" "$UNINSTALL_RESOURCES"
|
||||
productbuild \
|
||||
--distribution "$DEPLOY_DATA_DIR/distribution_uninstall.xml" \
|
||||
--package-path "$PKG_DIR" \
|
||||
--resources "$UNINSTALL_RESOURCES" \
|
||||
--sign "$MAC_INSTALLER_SIGNER_ID" \
|
||||
"$UNINSTALL_PKG"
|
||||
|
||||
cp "$PROJECT_DIR/deploy/data/macos/distribution.xml" "$PKG_DIR/distribution.xml"
|
||||
|
||||
echo "Creating final installer $FINAL_PKG ..."
|
||||
productbuild --distribution "$PKG_DIR/distribution.xml" \
|
||||
--package-path "$PKG_DIR" \
|
||||
--resources "$RESOURCES_DIR" \
|
||||
--sign "$MAC_INSTALLER_SIGNER_ID" \
|
||||
"$FINAL_PKG"
|
||||
|
||||
if [ "${MAC_INSTALL_CERT_PW+x}" ] && [ "${NOTARIZE_APP+x}" ]; then
|
||||
echo "Notarizing installer package..."
|
||||
xcrun notarytool submit "$FINAL_PKG" \
|
||||
--apple-id "$APPLE_DEV_EMAIL" \
|
||||
--team-id "$MAC_TEAM_ID" \
|
||||
--password "$APPLE_DEV_PASSWORD" \
|
||||
--wait
|
||||
|
||||
echo "Stapling ticket..."
|
||||
xcrun stapler staple "$FINAL_PKG"
|
||||
xcrun stapler validate "$FINAL_PKG"
|
||||
fi
|
||||
|
||||
if [ "${MAC_INSTALL_CERT_PW+x}" ]; then
|
||||
/usr/bin/codesign --verify -vvvv "$FINAL_PKG" || true
|
||||
spctl -a -vvvv "$FINAL_PKG" || true
|
||||
fi
|
||||
|
||||
# Sign app bundle
|
||||
/usr/bin/codesign --deep --force --verbose --timestamp -o runtime --keychain "$KEYCHAIN_PATH" --sign "$MAC_SIGNER_ID" "$BUNDLE_DIR"
|
||||
spctl -a -vvvv "$BUNDLE_DIR" || true
|
||||
|
||||
# Restore login keychain as the only user keychain and delete the temporary keychain
|
||||
KEYCHAIN="$HOME/Library/Keychains/login.keychain-db"
|
||||
security list-keychains -d user -s "$KEYCHAIN"
|
||||
security delete-keychain "$KEYCHAIN_PATH"
|
||||
|
||||
echo "Finished, artifact is $FINAL_PKG"
|
||||
@@ -1,122 +0,0 @@
|
||||
#!/bin/bash
|
||||
echo "Build script for macOS Network Extension started ..."
|
||||
|
||||
set -o errexit -o nounset
|
||||
|
||||
while getopts n flag
|
||||
do
|
||||
case "${flag}" in
|
||||
n) NOTARIZE_APP=1;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Hold on to current directory
|
||||
PROJECT_DIR=$(pwd)
|
||||
DEPLOY_DIR=$PROJECT_DIR/deploy
|
||||
|
||||
mkdir -p $DEPLOY_DIR/build-macos
|
||||
BUILD_DIR=$DEPLOY_DIR/build-macos
|
||||
|
||||
echo "Project dir: ${PROJECT_DIR}"
|
||||
echo "Build dir: ${BUILD_DIR}"
|
||||
|
||||
APP_NAME=AmneziaVPN
|
||||
APP_FILENAME=$APP_NAME.app
|
||||
APP_DOMAIN=org.amneziavpn.package
|
||||
PLIST_NAME=$APP_NAME.plist
|
||||
|
||||
OUT_APP_DIR=$BUILD_DIR/client
|
||||
BUNDLE_DIR=$OUT_APP_DIR/$APP_FILENAME
|
||||
|
||||
PREBUILT_DEPLOY_DATA_DIR=$PROJECT_DIR/deploy/data/deploy-prebuilt/macos
|
||||
DEPLOY_DATA_DIR=$PROJECT_DIR/deploy/data/macos
|
||||
|
||||
INSTALLER_DATA_DIR=$BUILD_DIR/installer/packages/$APP_DOMAIN/data
|
||||
INSTALLER_BUNDLE_DIR=$BUILD_DIR/installer/$APP_FILENAME
|
||||
DMG_FILENAME=$PROJECT_DIR/${APP_NAME}.dmg
|
||||
|
||||
echo "Import certificate"
|
||||
|
||||
TRUST_CERT_CER=$BUILD_DIR/trust-cert.cer
|
||||
SIGNING_CERT_P12=$BUILD_DIR/signing-cert.p12
|
||||
|
||||
echo $MAC_TRUST_CERT_BASE64 | base64 --decode > $TRUST_CERT_CER
|
||||
echo $MAC_SIGNING_CERT_BASE64 | base64 --decode > $SIGNING_CERT_P12
|
||||
|
||||
shasum -a 256 $TRUST_CERT_CER
|
||||
shasum -a 256 $SIGNING_CERT_P12
|
||||
KEYCHAIN_PASS=$MAC_SIGNING_CERT_PASSWORD
|
||||
|
||||
# Keychain setup
|
||||
KEYCHAIN=amnezia.build.macos.keychain
|
||||
TEMP_PASS=tmp_pass
|
||||
KEYCHAIN_FILE=$HOME/Library/Keychains/$KEYCHAIN-db
|
||||
|
||||
security create-keychain -p $TEMP_PASS $KEYCHAIN || true
|
||||
security default-keychain -s $KEYCHAIN
|
||||
security unlock-keychain -p $TEMP_PASS $KEYCHAIN
|
||||
|
||||
security default-keychain
|
||||
security list-keychains
|
||||
|
||||
# Import certificates into keychain
|
||||
security import $TRUST_CERT_CER -k $KEYCHAIN -P "" -T /usr/bin/codesign || true
|
||||
security import $SIGNING_CERT_P12 -k $KEYCHAIN -P $MAC_SIGNING_CERT_PASSWORD -T /usr/bin/codesign || true
|
||||
|
||||
# Configure keychain settings
|
||||
security set-key-partition-list -S apple-tool:,apple: -k $TEMP_PASS $KEYCHAIN
|
||||
security find-identity -p codesigning
|
||||
|
||||
# Setup provisioning profiles for main app and NE
|
||||
echo "Setting up provisioning profiles..."
|
||||
|
||||
# Copy provisioning prifiles
|
||||
mkdir -p "$HOME/Library/MobileDevice/Provisioning Profiles/"
|
||||
|
||||
echo $MAC_APP_PROVISIONING_PROFILE | base64 --decode > ~/Library/MobileDevice/Provisioning\ Profiles/app.mobileprovision
|
||||
echo $MAC_NE_PROVISIONING_PROFILE | base64 --decode > ~/Library/MobileDevice/Provisioning\ Profiles/ne.mobileprovision
|
||||
|
||||
shasum -a 256 ~/Library/MobileDevice/Provisioning\ Profiles/app.mobileprovision
|
||||
shasum -a 256 ~/Library/MobileDevice/Provisioning\ Profiles/ne.mobileprovision
|
||||
|
||||
profile_uuid=`grep UUID -A1 -a ~/Library/MobileDevice/Provisioning\ Profiles/app.mobileprovision | grep -io "[-A-F0-9]\{36\}"`
|
||||
echo $profile_uuid
|
||||
profile_ne_uuid=`grep UUID -A1 -a ~/Library/MobileDevice/Provisioning\ Profiles/ne.mobileprovision | grep -io "[-A-F0-9]\{36\}"`
|
||||
echo $profile_ne_uuid
|
||||
|
||||
mv ~/Library/MobileDevice/Provisioning\ Profiles/app.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/$profile_uuid.mobileprovision
|
||||
mv ~/Library/MobileDevice/Provisioning\ Profiles/ne.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/$profile_ne_uuid.mobileprovision
|
||||
|
||||
# setup environment
|
||||
QT_MACOS_BIN=$QT_BIN_DIR
|
||||
export PATH=$PATH:~/go/bin
|
||||
echo "QT_BIN_DIR: $QT_BIN_DIR"
|
||||
|
||||
|
||||
# Build the Network Extension app
|
||||
echo "Building MAC Network Extension App..."
|
||||
mkdir -p build-macos
|
||||
|
||||
$QT_MACOS_BIN/qt-cmake . -B build-macos -GXcode -DQT_HOST_PATH=$QT_MACOS_ROOT_DIR -DMACOS_NE=TRUE -DCMAKE_BUILD_TYPE=Release -DDEPLOY=ON
|
||||
|
||||
# Build and run tests here
|
||||
|
||||
echo "____________________________________"
|
||||
echo "............Deploying..............."
|
||||
echo "____________________________________"
|
||||
echo "Deploying MAC Network Extension App..."
|
||||
|
||||
echo "xcode build"
|
||||
xcodebuild \
|
||||
"OTHER_CODE_SIGN_FLAGS=--keychain '$KEYCHAIN_FILE'" \
|
||||
-configuration Release \
|
||||
-scheme AmneziaVPN \
|
||||
-destination "platform=macOS" \
|
||||
-project $PROJECT_DIR/build-macos/AmneziaVPN.xcodeproj
|
||||
|
||||
|
||||
# Restore keychain to default
|
||||
echo "Restoring default keychain..."
|
||||
security default-keychain -s "/Users/runner/Library/Keychains/login.keychain-db"
|
||||
|
||||
echo "Build and signing process completed successfully!"
|
||||
@@ -1,151 +0,0 @@
|
||||
@ECHO OFF
|
||||
|
||||
CHCP 1252
|
||||
|
||||
REM %VAR:"=% mean dequoted %VAR%
|
||||
|
||||
set PATH=%QT_BIN_DIR:"=%;%PATH%
|
||||
|
||||
echo "Using Qt in %QT_BIN_DIR%"
|
||||
echo "Using QIF in %QIF_BIN_DIR%"
|
||||
echo "Using WiX in %WIX_BIN_DIR%"
|
||||
|
||||
if "%WIX_BIN_DIR%"=="" (
|
||||
echo "WIX_BIN_DIR is not set"
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
set WIX_BIN_DIR_UNQUOTED=%WIX_BIN_DIR:"=%
|
||||
|
||||
set WIX_CLI=%WIX_BIN_DIR_UNQUOTED%\wix.exe
|
||||
|
||||
if not exist "%WIX_CLI%" (
|
||||
echo "WiX CLI (wix.exe) was not found in %WIX_BIN_DIR%"
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM Hold on to current directory
|
||||
set PROJECT_DIR=%cd%
|
||||
set SCRIPT_DIR=%PROJECT_DIR:"=%\deploy
|
||||
|
||||
set WORK_DIR=%SCRIPT_DIR:"=%\build_%BUILD_ARCH:"=%
|
||||
set APP_NAME=AmneziaVPN
|
||||
set APP_FILENAME=%APP_NAME:"=%.exe
|
||||
set SERVICE_FILENAME=%APP_NAME:"=%-service.exe
|
||||
set APP_DOMAIN=org.amneziavpn.package
|
||||
set OUT_APP_DIR=%WORK_DIR:"=%\client\release
|
||||
set PREBILT_DEPLOY_DATA_DIR=%PROJECT_DIR:"=%\client\3rd-prebuilt\deploy-prebuilt\windows\x%BUILD_ARCH:"=%
|
||||
set DEPLOY_DATA_DIR=%SCRIPT_DIR:"=%\data\windows\x%BUILD_ARCH:"=%
|
||||
set INSTALLER_DATA_DIR=%WORK_DIR:"=%\installer\packages\%APP_DOMAIN:"=%\data
|
||||
set TARGET_FILENAME=%PROJECT_DIR:"=%\%APP_NAME:"=%_x%BUILD_ARCH:"=%.exe
|
||||
set TARGET_MSI_FILENAME=%PROJECT_DIR:"=%\%APP_NAME:"=%_x%BUILD_ARCH:"=%.msi
|
||||
set STAGE_DIR=%WORK_DIR:"=%\stage
|
||||
|
||||
echo "Environment:"
|
||||
echo "WORK_DIR: %WORK_DIR%"
|
||||
echo "APP_FILENAME: %APP_FILENAME%"
|
||||
echo "SERVICE_FILENAME: %SERVICE_FILENAME%"
|
||||
echo "PROJECT_DIR: %PROJECT_DIR%"
|
||||
echo "SCRIPT_DIR: %SCRIPT_DIR%"
|
||||
echo "OUT_APP_DIR: %OUT_APP_DIR%"
|
||||
echo "DEPLOY_DATA_DIR: %DEPLOY_DATA_DIR%"
|
||||
echo "INSTALLER_DATA_DIR: %INSTALLER_DATA_DIR%"
|
||||
echo "TARGET_FILENAME: %TARGET_FILENAME%"
|
||||
echo "TARGET_MSI_FILENAME: %TARGET_MSI_FILENAME%"
|
||||
echo "STAGE_DIR: %STAGE_DIR%"
|
||||
|
||||
echo "Cleanup..."
|
||||
rmdir /Q /S %WORK_DIR%
|
||||
del %TARGET_FILENAME%
|
||||
del %TARGET_MSI_FILENAME%
|
||||
rmdir /Q /S "%STAGE_DIR%"
|
||||
|
||||
mkdir %WORK_DIR%
|
||||
|
||||
call "%QT_BIN_DIR:"=%\qt-cmake" --version
|
||||
"%QT_BIN_DIR:"=%\windeployqt" -v
|
||||
cmake --version
|
||||
|
||||
cd %PROJECT_DIR%
|
||||
call cmake . -B %WORK_DIR% "-DCMAKE_BUILD_TYPE:STRING=Release" "-DCMAKE_PREFIX_PATH:PATH=%QT_BIN_DIR%"
|
||||
|
||||
cd %WORK_DIR%
|
||||
cmake --build . --config release -- /p:UseMultiToolTask=true /m
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
|
||||
echo "Deploying..."
|
||||
|
||||
mkdir "%OUT_APP_DIR%"
|
||||
copy "%WORK_DIR%\service\server\release\%SERVICE_FILENAME%" "%OUT_APP_DIR%"
|
||||
rem copy "%WORK_DIR%\client\%APP_FILENAME%" "%OUT_APP_DIR%"
|
||||
|
||||
copy /Y "%PROJECT_DIR%\client\images\app.ico" "%OUT_APP_DIR%\AmneziaVPN.ico" >nul
|
||||
|
||||
echo "Signing exe"
|
||||
cd %OUT_APP_DIR%
|
||||
signtool sign /v /n "Privacy Technologies OU" /fd sha256 /tr http://timestamp.comodoca.com/?td=sha256 /td sha256 *.exe
|
||||
|
||||
"%QT_BIN_DIR:"=%\windeployqt" --release --qmldir "%PROJECT_DIR:"=%\client" --force --no-translations --force-openssl "%OUT_APP_DIR:"=%\%APP_FILENAME:"=%"
|
||||
"%QT_BIN_DIR:"=%\windeployqt" --release "%OUT_APP_DIR:"=%\%SERVICE_FILENAME:"=%"
|
||||
|
||||
signtool sign /v /n "Privacy Technologies OU" /fd sha256 /tr http://timestamp.comodoca.com/?td=sha256 /td sha256 *.dll
|
||||
|
||||
echo "Copying deploy data..."
|
||||
xcopy %DEPLOY_DATA_DIR% %OUT_APP_DIR% /s /e /y /i /f
|
||||
xcopy %PREBILT_DEPLOY_DATA_DIR% %OUT_APP_DIR% /s /e /y /i /f
|
||||
|
||||
cd %SCRIPT_DIR%
|
||||
xcopy %SCRIPT_DIR:"=%\installer %WORK_DIR:"=%\installer /s /e /y /i /f
|
||||
mkdir %INSTALLER_DATA_DIR%
|
||||
|
||||
echo "Deploy finished, content:"
|
||||
dir %OUT_APP_DIR%
|
||||
|
||||
cd %OUT_APP_DIR%
|
||||
echo "Compressing data..."
|
||||
"%QIF_BIN_DIR:"=%\archivegen" -c 9 %INSTALLER_DATA_DIR:"=%\%APP_NAME:"=%.7z .
|
||||
|
||||
cd "%WORK_DIR:"=%\installer"
|
||||
echo "Creating installer..."
|
||||
"%QIF_BIN_DIR:"=%\binarycreator" --offline-only -v -c config\windows.xml -p packages -f %TARGET_FILENAME%
|
||||
|
||||
timeout 5
|
||||
|
||||
cd %PROJECT_DIR%
|
||||
signtool sign /v /n "Privacy Technologies OU" /fd sha256 /tr http://timestamp.comodoca.com/?td=sha256 /td sha256 "%TARGET_FILENAME%"
|
||||
|
||||
echo "Preparing staging directory for MSI..."
|
||||
rmdir /Q /S "%STAGE_DIR%"
|
||||
mkdir "%STAGE_DIR%"
|
||||
xcopy "%OUT_APP_DIR%" "%STAGE_DIR%" /s /e /y /i /f >nul
|
||||
|
||||
echo "Building MSI via CPack..."
|
||||
rmdir /Q /S "%WORK_DIR%\_CPack_Packages"
|
||||
cd %WORK_DIR%
|
||||
cpack -G WIX -C Release --config "%WORK_DIR%\CPackConfig.cmake"
|
||||
if exist "%WORK_DIR%\_CPack_Packages\win64\WIX\wix.log" (
|
||||
echo ---------------------------------------------
|
||||
echo Contents of wix.log:
|
||||
type "%WORK_DIR%\_CPack_Packages\win64\WIX\wix.log"
|
||||
echo ---------------------------------------------
|
||||
)
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
|
||||
set GENERATED_MSI=
|
||||
for /f "delims=" %%i in ('dir /b /a:-d /o:-d "%WORK_DIR%\*.msi"') do (
|
||||
if not defined GENERATED_MSI set GENERATED_MSI=%WORK_DIR%\%%i
|
||||
)
|
||||
|
||||
if "%GENERATED_MSI%"=="" (
|
||||
echo "Failed to locate generated MSI package"
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
copy /Y "%GENERATED_MSI%" "%TARGET_MSI_FILENAME%"
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
|
||||
cd %PROJECT_DIR%
|
||||
signtool sign /v /n "Privacy Technologies OU" /fd sha256 /tr http://timestamp.comodoca.com/?td=sha256 /td sha256 "%TARGET_MSI_FILENAME%"
|
||||
|
||||
echo "Finished, see %TARGET_FILENAME% and %TARGET_MSI_FILENAME%"
|
||||
exit 0
|
||||
1
deploy/data/LICENSE.txt
Symbolic link
1
deploy/data/LICENSE.txt
Symbolic link
@@ -0,0 +1 @@
|
||||
../../LICENSE
|
||||
@@ -1 +0,0 @@
|
||||
../../client/3rd-prebuilt/deploy-prebuilt/
|
||||
@@ -7,8 +7,7 @@ StartLimitIntervalSec=0
|
||||
Type=simple
|
||||
Restart=always
|
||||
RestartSec=1
|
||||
ExecStart=/opt/AmneziaVPN/service/AmneziaVPN-service.sh
|
||||
Environment=LD_LIBRARY_PATH=/opt/AmneziaVPN/client/lib
|
||||
ExecStart=/opt/AmneziaVPN/bin/AmneziaVPN-service
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# This is default bat run script of The CQtDeployer project.
|
||||
# This file contains key word that will replaced after deploy project.
|
||||
#
|
||||
# ####################################################################
|
||||
#
|
||||
# LIB_PATH - are relative path to libraries of a deployed distribution.
|
||||
# QML_PATH - are relative path to qml libraries of a deployed distribution.
|
||||
# PLUGIN_PATH - are relative path to qt plugins of a deployed distribution.
|
||||
# BIN_PATH - are relative path to targets of a deployed distribution.
|
||||
|
||||
# SYSTEM_LIB_PATH - are relative path to system libraries of a deployed distribution.
|
||||
# BASE_NAME - are base name of the executable that will be launched after run this script.
|
||||
# CUSTOM_SCRIPT_BLOCK - This is code from the customScript option
|
||||
# RUN_COMMAND - This is command for run application. Required BASE_DIR variable.
|
||||
#
|
||||
# ####################################################################
|
||||
|
||||
BASE_DIR=$(dirname "$(readlink -f "$0")")
|
||||
export LD_LIBRARY_PATH="$BASE_DIR"/lib/:"$BASE_DIR":$LD_LIBRARY_PATH
|
||||
export QML_IMPORT_PATH="$BASE_DIR"/qml/:$QML_IMPORT_PATH
|
||||
export QML2_IMPORT_PATH="$BASE_DIR"/qml/:$QML2_IMPORT_PATH
|
||||
export QT_PLUGIN_PATH="$BASE_DIR"/plugins/:$QT_PLUGIN_PATH
|
||||
export QTWEBENGINEPROCESS_PATH="$BASE_DIR"/bin//QtWebEngineProcess
|
||||
export QTDIR="$BASE_DIR"
|
||||
export CQT_PKG_ROOT="$BASE_DIR"
|
||||
export CQT_RUN_FILE="$BASE_DIR/AmneziaVPN.sh"
|
||||
|
||||
export QT_QPA_PLATFORM_PLUGIN_PATH="$BASE_DIR"/plugins//platforms:$QT_QPA_PLATFORM_PLUGIN_PATH
|
||||
|
||||
|
||||
|
||||
"$BASE_DIR/bin/AmneziaVPN" "$@"
|
||||
@@ -1,7 +0,0 @@
|
||||
[Paths]
|
||||
Prefix= ./../
|
||||
Libraries= ./lib/
|
||||
Plugins= ./plugins/
|
||||
Imports= ./qml/
|
||||
Translations= ./translations/
|
||||
Qml2Imports= ./qml/
|
||||
@@ -36,9 +36,8 @@ sudo cp $APP_PATH/$APP_NAME.service /etc/systemd/system/ >> $LOG_FILE
|
||||
|
||||
sudo systemctl start $APP_NAME >> $LOG_FILE
|
||||
sudo systemctl enable $APP_NAME >> $LOG_FILE
|
||||
sudo chmod 555 $APP_PATH/client/$APP_NAME.sh >> $LOG_FILE
|
||||
sudo ln -s $APP_PATH/client/$APP_NAME.sh /usr/local/sbin/$APP_NAME >> $LOG_FILE
|
||||
sudo ln -s $APP_PATH/client/$APP_NAME.sh /usr/local/bin/$APP_NAME >> $LOG_FILE
|
||||
sudo ln -sf $APP_PATH/bin/$APP_NAME /usr/local/sbin/$APP_NAME >> $LOG_FILE
|
||||
sudo ln -sf $APP_PATH/bin/$APP_NAME /usr/local/bin/$APP_NAME >> $LOG_FILE
|
||||
|
||||
echo "user desktop creation loop started" >> $LOG_FILE
|
||||
sudo cp $APP_PATH/$APP_NAME.desktop /usr/share/applications/ >> $LOG_FILE
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# This is default bat run script of The CQtDeployer project.
|
||||
# This file contains key word that will replaced after deploy project.
|
||||
#
|
||||
# ####################################################################
|
||||
#
|
||||
# LIB_PATH - are relative path to libraries of a deployed distribution.
|
||||
# QML_PATH - are relative path to qml libraries of a deployed distribution.
|
||||
# PLUGIN_PATH - are relative path to qt plugins of a deployed distribution.
|
||||
# BIN_PATH - are relative path to targets of a deployed distribution.
|
||||
|
||||
# SYSTEM_LIB_PATH - are relative path to system libraries of a deployed distribution.
|
||||
# BASE_NAME - are base name of the executable that will be launched after run this script.
|
||||
# CUSTOM_SCRIPT_BLOCK - This is code from the customScript option
|
||||
# RUN_COMMAND - This is command for run application. Required BASE_DIR variable.
|
||||
#
|
||||
# ####################################################################
|
||||
|
||||
BASE_DIR=$(dirname "$(readlink -f "$0")")
|
||||
export LD_LIBRARY_PATH="$BASE_DIR"/lib/:"$BASE_DIR":$LD_LIBRARY_PATH
|
||||
export QML_IMPORT_PATH="$BASE_DIR"/qml/:$QML_IMPORT_PATH
|
||||
export QML2_IMPORT_PATH="$BASE_DIR"/qml/:$QML2_IMPORT_PATH
|
||||
export QT_PLUGIN_PATH="$BASE_DIR"/plugins/:$QT_PLUGIN_PATH
|
||||
export QTWEBENGINEPROCESS_PATH="$BASE_DIR"/bin//QtWebEngineProcess
|
||||
export QTDIR="$BASE_DIR"
|
||||
export CQT_PKG_ROOT="$BASE_DIR"
|
||||
export CQT_RUN_FILE="$BASE_DIR/AmneziaVPN-service.sh"
|
||||
|
||||
export QT_QPA_PLATFORM_PLUGIN_PATH="$BASE_DIR"/plugins//platforms:$QT_QPA_PLATFORM_PLUGIN_PATH
|
||||
|
||||
|
||||
|
||||
"$BASE_DIR/bin/AmneziaVPN-service" "$@"
|
||||
@@ -1,7 +0,0 @@
|
||||
[Paths]
|
||||
Prefix= ./../
|
||||
Libraries= ./lib/
|
||||
Plugins= ./plugins/
|
||||
Imports= ./qml/
|
||||
Translations= ./translations/
|
||||
Qml2Imports= ./qml/
|
||||
6
deploy/data/macos/CPack.distribution.dist.in
Normal file
6
deploy/data/macos/CPack.distribution.dist.in
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<installer-gui-script minSpecVersion="1.0">
|
||||
<title>@CPACK_PACKAGE_NAME@</title>
|
||||
<license file="@CPACK_RESOURCE_FILE_LICENSE_NOPATH@"/>
|
||||
@CPACK_APPLE_PKG_INSTALLER_CONTENT@
|
||||
</installer-gui-script>
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
if [ -d "/Applications/AmneziaVPN.app" ] || pgrep -x "AmneziaVPN-service" >/dev/null; then
|
||||
exit 1
|
||||
fi
|
||||
exit 0
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
if [ -d "/Applications/AmneziaVPN.app" ] || pgrep -x "AmneziaVPN-service" >/dev/null; then
|
||||
exit 0
|
||||
fi
|
||||
exit 1
|
||||
@@ -1,17 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<installer-gui-script minSpecVersion="1">
|
||||
<title>AmneziaVPN Installer</title>
|
||||
<license file="LICENSE"/>
|
||||
<choices-outline>
|
||||
<line choice="install"/>
|
||||
<line choice="uninstall"/>
|
||||
</choices-outline>
|
||||
<choice id="install" title="Install AmneziaVPN" start_selected="true">
|
||||
<pkg-ref id="org.amneziavpn.package"/>
|
||||
</choice>
|
||||
<choice id="uninstall" title="Uninstall AmneziaVPN" start_selected="false">
|
||||
<pkg-ref id="org.amneziavpn.uninstall"/>
|
||||
</choice>
|
||||
<pkg-ref id="org.amneziavpn.package" auth="Root" install-check="scripts/check_install.sh">AmneziaVPN_install.pkg</pkg-ref>
|
||||
<pkg-ref id="org.amneziavpn.uninstall" auth="Root" install-check="scripts/check_uninstall.sh">AmneziaVPN_uninstall_component.pkg</pkg-ref>
|
||||
</installer-gui-script>
|
||||
@@ -1,13 +0,0 @@
|
||||
<installer-gui-script minSpecVersion="1">
|
||||
<title>Uninstall AmneziaVPN</title>
|
||||
<options customize-install-button="always"/>
|
||||
<welcome file="uninstall_welcome.html"/>
|
||||
<conclusion file="uninstall_conclusion.html"/>
|
||||
<choices-outline>
|
||||
<line choice="uninstall"/>
|
||||
</choices-outline>
|
||||
<choice id="uninstall" title="Uninstall AmneziaVPN" start_selected="true">
|
||||
<pkg-ref id="org.amneziavpn.uninstall"/>
|
||||
</choice>
|
||||
<pkg-ref id="org.amneziavpn.uninstall" auth="Root">AmneziaVPN_uninstall_component.pkg</pkg-ref>
|
||||
</installer-gui-script>
|
||||
@@ -1,7 +0,0 @@
|
||||
<html>
|
||||
<head><title>Uninstall Complete</title></head>
|
||||
<body>
|
||||
<h1>AmneziaVPN has been uninstalled</h1>
|
||||
<p>Thank you for using AmneziaVPN. The application and its components have been removed.</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,7 +0,0 @@
|
||||
<html>
|
||||
<head><title>Uninstall AmneziaVPN</title></head>
|
||||
<body>
|
||||
<h1>Uninstall AmneziaVPN</h1>
|
||||
<p>This process will remove AmneziaVPN from your system. Click Continue to proceed.</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,32 +1,32 @@
|
||||
set AmneziaPath=%~dp0
|
||||
echo %AmneziaPath%
|
||||
|
||||
rem Define directories for logs
|
||||
set "ORG_DIR=%AppData%\AmneziaVPN.ORG"
|
||||
set "USER_APP_DIR=%ORG_DIR%\AmneziaVPN"
|
||||
set "USER_LOG_DIR=%USER_APP_DIR%\log"
|
||||
set "SYS_APP_DIR=%ProgramData%\AmneziaVPN"
|
||||
set "SYS_LOG_DIR=%SYS_APP_DIR%\log"
|
||||
set "SYS_LOG_FILE=%SYS_LOG_DIR%\AmneziaVPN-service.log"
|
||||
|
||||
timeout /t 1
|
||||
sc stop AmneziaVPN-service
|
||||
sc delete AmneziaVPN-service
|
||||
sc stop AmneziaWGTunnel$AmneziaVPN
|
||||
sc delete AmneziaWGTunnel$AmneziaVPN
|
||||
taskkill /IM "AmneziaVPN-service.exe" /F
|
||||
taskkill /IM "AmneziaVPN.exe" /F
|
||||
|
||||
rem Delete the service log file under ProgramData
|
||||
if exist "%SYS_LOG_FILE%" del /F /Q "%SYS_LOG_FILE%"
|
||||
if exist "%SYS_LOG_DIR%" rmdir /S /Q "%SYS_LOG_DIR%"
|
||||
rem Try to remove application dir if empty
|
||||
rd "%SYS_APP_DIR%" 2>nul
|
||||
|
||||
rem Delete client logs under current user's AppData\Roaming (Organization\Application)
|
||||
if exist "%USER_LOG_DIR%" rmdir /S /Q "%USER_LOG_DIR%"
|
||||
rem Try to remove app and org directories if empty
|
||||
rd "%USER_APP_DIR%" 2>nul
|
||||
rd "%ORG_DIR%" 2>nul
|
||||
|
||||
exit /b 0
|
||||
set AmneziaPath=%~dp0
|
||||
echo %AmneziaPath%
|
||||
|
||||
rem Define directories for logs
|
||||
set "ORG_DIR=%AppData%\AmneziaVPN.ORG"
|
||||
set "USER_APP_DIR=%ORG_DIR%\AmneziaVPN"
|
||||
set "USER_LOG_DIR=%USER_APP_DIR%\log"
|
||||
set "SYS_APP_DIR=%ProgramData%\AmneziaVPN"
|
||||
set "SYS_LOG_DIR=%SYS_APP_DIR%\log"
|
||||
set "SYS_LOG_FILE=%SYS_LOG_DIR%\AmneziaVPN-service.log"
|
||||
|
||||
timeout /t 1
|
||||
sc stop AmneziaVPN-service
|
||||
sc delete AmneziaVPN-service
|
||||
sc stop AmneziaWGTunnel$AmneziaVPN
|
||||
sc delete AmneziaWGTunnel$AmneziaVPN
|
||||
taskkill /IM "AmneziaVPN-service.exe" /F
|
||||
taskkill /IM "AmneziaVPN.exe" /F
|
||||
|
||||
rem Delete the service log file under ProgramData
|
||||
if exist "%SYS_LOG_FILE%" del /F /Q "%SYS_LOG_FILE%"
|
||||
if exist "%SYS_LOG_DIR%" rmdir /S /Q "%SYS_LOG_DIR%"
|
||||
rem Try to remove application dir if empty
|
||||
rd "%SYS_APP_DIR%" 2>nul
|
||||
|
||||
rem Delete client logs under current user's AppData\Roaming (Organization\Application)
|
||||
if exist "%USER_LOG_DIR%" rmdir /S /Q "%USER_LOG_DIR%"
|
||||
rem Try to remove app and org directories if empty
|
||||
rd "%USER_APP_DIR%" 2>nul
|
||||
rd "%ORG_DIR%" 2>nul
|
||||
|
||||
exit /b 0
|
||||
@@ -1,5 +0,0 @@
|
||||
sc stop AmneziaWGTunnel$AmneziaVPN
|
||||
sc delete AmneziaWGTunnel$AmneziaVPN
|
||||
taskkill /IM "AmneziaVPN-service.exe" /F
|
||||
taskkill /IM "AmneziaVPN.exe" /F
|
||||
exit /b 0
|
||||
@@ -1,32 +0,0 @@
|
||||
set AmneziaPath=%~dp0
|
||||
echo %AmneziaPath%
|
||||
|
||||
rem Define directories for logs
|
||||
set "ORG_DIR=%AppData%\AmneziaVPN.ORG"
|
||||
set "USER_APP_DIR=%ORG_DIR%\AmneziaVPN"
|
||||
set "USER_LOG_DIR=%USER_APP_DIR%\log"
|
||||
set "SYS_APP_DIR=%ProgramData%\AmneziaVPN"
|
||||
set "SYS_LOG_DIR=%SYS_APP_DIR%\log"
|
||||
set "SYS_LOG_FILE=%SYS_LOG_DIR%\AmneziaVPN-service.log"
|
||||
|
||||
timeout /t 1
|
||||
sc stop AmneziaVPN-service
|
||||
sc delete AmneziaVPN-service
|
||||
sc stop AmneziaWGTunnel$AmneziaVPN
|
||||
sc delete AmneziaWGTunnel$AmneziaVPN
|
||||
taskkill /IM "AmneziaVPN-service.exe" /F
|
||||
taskkill /IM "AmneziaVPN.exe" /F
|
||||
|
||||
rem Delete the service log file under ProgramData
|
||||
if exist "%SYS_LOG_FILE%" del /F /Q "%SYS_LOG_FILE%"
|
||||
if exist "%SYS_LOG_DIR%" rmdir /S /Q "%SYS_LOG_DIR%"
|
||||
rem Try to remove application dir if empty
|
||||
rd "%SYS_APP_DIR%" 2>nul
|
||||
|
||||
rem Delete client logs under current user's AppData\Roaming (Organization\Application)
|
||||
if exist "%USER_LOG_DIR%" rmdir /S /Q "%USER_LOG_DIR%"
|
||||
rem Try to remove app and org directories if empty
|
||||
rd "%USER_APP_DIR%" 2>nul
|
||||
rd "%ORG_DIR%" 2>nul
|
||||
|
||||
exit /b 0
|
||||
@@ -1,23 +0,0 @@
|
||||
if(WIN32)
|
||||
set(RootDir "@RootDir@")
|
||||
configure_file(
|
||||
${CMAKE_CURRENT_LIST_DIR}/config/windows.xml.in
|
||||
${CMAKE_BINARY_DIR}/installer/config/windows.xml
|
||||
)
|
||||
elseif(LINUX)
|
||||
set(ApplicationsDir "@ApplicationsDir@")
|
||||
configure_file(
|
||||
${CMAKE_CURRENT_LIST_DIR}/config/linux.xml.in
|
||||
${CMAKE_BINARY_DIR}/installer/config/linux.xml
|
||||
)
|
||||
|
||||
configure_file(
|
||||
${CMAKE_CURRENT_LIST_DIR}/config/AmneziaVPN.desktop.in
|
||||
${CMAKE_BINARY_DIR}/../AppDir/AmneziaVPN.desktop
|
||||
)
|
||||
endif()
|
||||
|
||||
configure_file(
|
||||
${CMAKE_CURRENT_LIST_DIR}/packages/org.amneziavpn.package/meta/package.xml.in
|
||||
${CMAKE_BINARY_DIR}/installer/packages/org.amneziavpn.package/meta/package.xml
|
||||
)
|
||||
@@ -1,27 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Installer>
|
||||
<Name>AmneziaVPN</Name>
|
||||
<Version>@CMAKE_PROJECT_VERSION@</Version>
|
||||
<Title>AmneziaVPN</Title>
|
||||
<Publisher>AmneziaVPN</Publisher>
|
||||
<StartMenuDir>AmneziaVPN</StartMenuDir>
|
||||
<TargetDir>@ApplicationsDir@/AmneziaVPN</TargetDir>
|
||||
<WizardDefaultWidth>600</WizardDefaultWidth>
|
||||
<WizardDefaultHeight>380</WizardDefaultHeight>
|
||||
<WizardStyle>Modern</WizardStyle>
|
||||
<RemoveTargetDir>true</RemoveTargetDir>
|
||||
<AllowSpaceInPath>true</AllowSpaceInPath>
|
||||
<AllowNonAsciiCharacters>false</AllowNonAsciiCharacters>
|
||||
<ControlScript>controlscript.js</ControlScript>
|
||||
<RepositorySettingsPageVisible>false</RepositorySettingsPageVisible>
|
||||
<DependsOnLocalInstallerBinary>true</DependsOnLocalInstallerBinary>
|
||||
<SupportsModify>false</SupportsModify>
|
||||
<DisableAuthorizationFallback>true</DisableAuthorizationFallback>
|
||||
<RemoteRepositories>
|
||||
<Repository>
|
||||
<Url>https://amneziavpn.org/updates/linux</Url>
|
||||
<Enabled>true</Enabled>
|
||||
<DisplayName>AmneziaVPN - repository for Linux</DisplayName>
|
||||
</Repository>
|
||||
</RemoteRepositories>
|
||||
</Installer>
|
||||
@@ -1,20 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Installer>
|
||||
<Name>AmneziaVPN</Name>
|
||||
<Version>@CMAKE_PROJECT_VERSION@</Version>
|
||||
<Title>AmneziaVPN</Title>
|
||||
<Publisher>AmneziaVPN</Publisher>
|
||||
<StartMenuDir>AmneziaVPN</StartMenuDir>
|
||||
<TargetDir>@RootDir@/Program Files/AmneziaVPN</TargetDir>
|
||||
<WizardDefaultWidth>600</WizardDefaultWidth>
|
||||
<WizardDefaultHeight>380</WizardDefaultHeight>
|
||||
<WizardStyle>Modern</WizardStyle>
|
||||
<RemoveTargetDir>true</RemoveTargetDir>
|
||||
<AllowSpaceInPath>true</AllowSpaceInPath>
|
||||
<AllowNonAsciiCharacters>false</AllowNonAsciiCharacters>
|
||||
<ControlScript>controlscript.js</ControlScript>
|
||||
<RepositorySettingsPageVisible>false</RepositorySettingsPageVisible>
|
||||
<DependsOnLocalInstallerBinary>true</DependsOnLocalInstallerBinary>
|
||||
<SupportsModify>false</SupportsModify>
|
||||
<DisableAuthorizationFallback>true</DisableAuthorizationFallback>
|
||||
</Installer>
|
||||
@@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Package>
|
||||
<DisplayName>AmneziaVPN</DisplayName>
|
||||
<Description>Installation package for AmneziaVPN</Description>
|
||||
<Version>@CMAKE_PROJECT_VERSION@</Version>
|
||||
<ReleaseDate>@RELEASE_DATE@</ReleaseDate>
|
||||
<Default>true</Default>
|
||||
<ForcedInstallation>true</ForcedInstallation>
|
||||
<RequiresAdminRights>true</RequiresAdminRights>
|
||||
<Script>componentscript.js</Script>
|
||||
</Package>
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CPackWiXPatch>
|
||||
<CPackWiXFragment Id="CM_CP_AmneziaVPN_service.exe">
|
||||
<CPackWiXFragment Id="CM_CP_AmneziaVPN.AmneziaVPN_service.exe">
|
||||
<ServiceInstall
|
||||
Id="AmneziaServiceInstall"
|
||||
Name="AmneziaVPN-service"
|
||||
@@ -21,4 +21,4 @@
|
||||
Remove="uninstall"
|
||||
Wait="yes" />
|
||||
</CPackWiXFragment>
|
||||
</CPackWiXPatch>
|
||||
</CPackWiXPatch>
|
||||
|
||||
Reference in New Issue
Block a user