feat: cpack windows full-featured build

This commit is contained in:
Yaroslav Gurov
2026-04-05 06:18:18 +02:00
parent b08154671e
commit de5e2635e3
18 changed files with 203 additions and 255 deletions
+1 -35
View File
@@ -45,38 +45,4 @@ if(NOT IOS AND NOT ANDROID AND NOT MACOS_NE)
add_subdirectory(service)
endif()
set(AMNEZIA_STAGE_DIR "${CMAKE_BINARY_DIR}/stage")
include(${CMAKE_SOURCE_DIR}/cmake/package.cmake)
if(WIN32 AND NOT IOS AND NOT ANDROID AND NOT MACOS_NE)
file(TO_CMAKE_PATH "${AMNEZIA_STAGE_DIR}" AMNEZIA_STAGE_DIR_CMAKE)
set(CPACK_GENERATOR "WIX")
set(CPACK_WIX_VERSION 4)
set(CPACK_PACKAGE_NAME "AmneziaVPN")
set(CPACK_PACKAGE_VENDOR "AmneziaVPN")
set(CPACK_PACKAGE_VERSION ${AMNEZIAVPN_VERSION})
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "AmneziaVPN client")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "AmneziaVPN")
set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}")
set(CPACK_PACKAGE_EXECUTABLES "AmneziaVPN" "AmneziaVPN")
set(CPACK_WIX_UPGRADE_GUID "{2D55AC62-96D6-4692-8C05-0D85BBF95485}")
set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/client/images/app.ico")
# WiX patches
set(_AMNEZIA_WIX_PATCH_SERVICE "${CMAKE_SOURCE_DIR}/deploy/installer/wix/service_install_patch.xml")
set(_AMNEZIA_WIX_PATCH_CLOSE_APP "${CMAKE_SOURCE_DIR}/deploy/installer/wix/close_client_patch.xml")
file(TO_CMAKE_PATH "${_AMNEZIA_WIX_PATCH_SERVICE}" _AMNEZIA_WIX_PATCH_SERVICE_CMAKE)
file(TO_CMAKE_PATH "${_AMNEZIA_WIX_PATCH_CLOSE_APP}" _AMNEZIA_WIX_PATCH_CLOSE_APP_CMAKE)
set(CPACK_WIX_PATCH_FILE "${_AMNEZIA_WIX_PATCH_SERVICE_CMAKE};${_AMNEZIA_WIX_PATCH_CLOSE_APP_CMAKE}")
# WiX v4 Util extension for CloseApplication + namespace for util
set(CPACK_WIX_EXTENSIONS "${CPACK_WIX_EXTENSIONS};WixToolset.Util.wixext")
set(CPACK_WIX_CUSTOM_XMLNS "util=http://wixtoolset.org/schemas/v4/wxs/util")
set(CPACK_INSTALLED_DIRECTORIES "${AMNEZIA_STAGE_DIR_CMAKE};/")
include(CPack)
endif()
include(${CMAKE_SOURCE_DIR}/cmake/CPack.cmake)
+6 -23
View File
@@ -196,29 +196,6 @@ endif()
target_link_libraries(${PROJECT} PRIVATE ${LIBS})
target_compile_definitions(${PROJECT} PRIVATE "MZ_$<UPPER_CASE:${MZ_PLATFORM_NAME}>")
# deploy artifacts required to run the application to the debug build folder
if(WIN32)
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
set(DEPLOY_PLATFORM_PATH "windows/x64")
else()
set(DEPLOY_PLATFORM_PATH "windows/x32")
endif()
elseif(LINUX)
set(DEPLOY_PLATFORM_PATH "linux/client")
elseif(APPLE AND NOT IOS)
set(DEPLOY_PLATFORM_PATH "macos")
endif()
if(NOT IOS AND NOT ANDROID AND NOT MACOS_NE)
add_custom_command(
TARGET ${PROJECT} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E $<IF:$<CONFIG:Debug>,copy_directory,true>
${CMAKE_SOURCE_DIR}/deploy/data/${DEPLOY_PLATFORM_PATH}
$<TARGET_FILE_DIR:${PROJECT}>
COMMAND_EXPAND_LISTS
)
endif()
target_sources(${PROJECT} PRIVATE ${SOURCES} ${HEADERS} ${RESOURCES} ${QRC} ${I18NQRC})
# Finalize the executable so Qt can gather/deploy QML modules and plugins correctly (Android needs this).
@@ -240,10 +217,16 @@ install(FILES $<TARGET_RUNTIME_DLLS:${PROJECT}>
COMPONENT client
)
set(deploy_tool_options "")
if(WIN32)
set(deploy_tool_options "--force-openssl --force")
endif()
qt_generate_deploy_qml_app_script(
TARGET ${PROJECT}
OUTPUT_SCRIPT QT_DEPLOY_SCRIPT
NO_UNSUPPORTED_PLATFORM_ERROR
DEPLOY_TOOL_OPTIONS ${deploy_tool_options}
)
install(SCRIPT ${QT_DEPLOY_SCRIPT}
COMPONENT client
+83
View File
@@ -0,0 +1,83 @@
set(CPACK_PACKAGE_VENDOR AmneziaVPN)
set(CPACK_PACKAGE_VERSION ${AMNEZIAVPN_VERSION})
set(CPACK_PACKAGE_INSTALL_DIRECTORY AmneziaVPN)
set(CPACK_PACKAGE_EXECUTABLES AmneziaVPN AmneziaVPN)
# set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
set(CPACK_PRE_BUILD_SCRIPTS ${CMAKE_CURRENT_LIST_DIR}/sign_binaries.cmake)
set(CPACK_POST_BUILD_SCRIPTS ${CMAKE_CURRENT_LIST_DIR}/sign_packages.cmake)
set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_CURRENT_LIST_DIR}/CPackOptions.cmake)
if (LINUX AND NOT ANDROID)
set(CPACK_GENERATOR IFW)
elseif (WIN32)
set(CPACK_GENERATOR IFW)
endif()
set(CPACK_IFW_PACKAGE_NAME AmneziaVPN)
set(CPACK_IFW_PACKAGE_TITLE AmneziaVPN)
set(CPACK_IFW_PACKAGE_WIZARD_DEFAULT_WIDTH 600)
set(CPACK_IFW_PACKAGE_WIZARD_DEFAULT_HEIGHT 380)
set(CPACK_IFW_PACKAGE_WIZARD_STYLE Modern)
set(CPACK_IFW_PACKAGE_REMOVE_TARGET_DIR ON)
set(CPACK_IFW_PACKAGE_ALLOW_SPACE_IN_PATH ON)
set(CPACK_IFW_PACKAGE_ALLOW_NON_ASCII_CHARACTERS ON)
set(CPACK_IFW_PACKAGE_CONTROL_SCRIPT "${CMAKE_SOURCE_DIR}/deploy/installer/qif/controlscript.js")
set(CPACK_WIX_VERSION 4)
set(CPACK_WIX_UPGRADE_GUID "{2D55AC62-96D6-4692-8C05-0D85BBF95485}")
set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/client/images/app.ico")
set(CPACK_WIX_CUSTOM_XMLNS "util=http://wixtoolset.org/schemas/v4/wxs/util")
set(_AMNEZIA_WIX_PATCH_SERVICE "${CMAKE_SOURCE_DIR}/deploy/installer/wix/service_install_patch.xml")
set(_AMNEZIA_WIX_PATCH_CLOSE_APP "${CMAKE_SOURCE_DIR}/deploy/installer/wix/close_client_patch.xml")
file(TO_CMAKE_PATH "${_AMNEZIA_WIX_PATCH_SERVICE}" _AMNEZIA_WIX_PATCH_SERVICE_CMAKE)
file(TO_CMAKE_PATH "${_AMNEZIA_WIX_PATCH_CLOSE_APP}" _AMNEZIA_WIX_PATCH_CLOSE_APP_CMAKE)
set(CPACK_WIX_PATCH_FILE "${_AMNEZIA_WIX_PATCH_SERVICE_CMAKE};${_AMNEZIA_WIX_PATCH_CLOSE_APP_CMAKE}")
set(CPACK_WIX_EXTENSIONS "${CPACK_WIX_EXTENSIONS};WixToolset.Util.wixext")
if(LINUX AND NOT ANDROID)
install(FILES
"${CMAKE_SOURCE_DIR}/deploy/data/linux/AmneziaVPN.service"
"${CMAKE_SOURCE_DIR}/deploy/data/linux/AmneziaVPN.png"
"${CMAKE_SOURCE_DIR}/deploy/data/linux/AmneziaVPN.desktop"
"${CMAKE_SOURCE_DIR}/deploy/data/linux/post_install.sh"
"${CMAKE_SOURCE_DIR}/deploy/data/linux/post_uninstall.sh"
DESTINATION "."
COMPONENT auxiliary
)
endif()
if(WIN32)
install(FILES
"${CMAKE_SOURCE_DIR}/deploy/data/windows/post_install.cmd"
"${CMAKE_SOURCE_DIR}/deploy/data/windows/post_uninstall.cmd"
DESTINATION "."
COMPONENT auxiliary
)
endif()
include(CPack)
cpack_add_component_group(AmneziaVPN
DISPLAY_NAME AmneziaVPN
)
cpack_add_component(client
DISPLAY_NAME "AmneziaVPN Client"
GROUP AmneziaVPN
)
cpack_add_component(service
DISPLAY_NAME "AmneziaVPN Service"
GROUP AmneziaVPN
)
cpack_add_component(auxiliary
DISPLAY_NAME "Auxiliary scripts"
GROUP AmneziaVPN
)
include(CPackIFW)
cpack_ifw_configure_component_group(AmneziaVPN
VERSION ${AMNEZIAVPN_VERSION}
RELEASE_DATE ${RELEASE_DATE}
REQUIRES_ADMIN_RIGHTS
FORCED_INSTALLATION
SCRIPT "${CMAKE_SOURCE_DIR}/deploy/installer/qif/componentscript.js"
)
+5
View File
@@ -0,0 +1,5 @@
if (CPACK_GENERATOR STREQUAL IFW)
set(CPACK_COMPONENTS_ALL client service auxiliary)
else()
set(CPACK_MONOLITHIC_INSTALL TRUE)
endif()
-58
View File
@@ -1,58 +0,0 @@
if (LINUX)
install(FILES
"${CMAKE_SOURCE_DIR}/deploy/data/linux/AmneziaVPN.service"
"${CMAKE_SOURCE_DIR}/deploy/data/linux/AmneziaVPN.png"
"${CMAKE_SOURCE_DIR}/deploy/data/linux/AmneziaVPN.desktop"
"${CMAKE_SOURCE_DIR}/deploy/data/linux/post_install.sh"
"${CMAKE_SOURCE_DIR}/deploy/data/linux/post_uninstall.sh"
DESTINATION "."
COMPONENT auxiliary
)
set(CPACK_COMPONENTS_ALL client service auxiliary)
set(CPACK_GENERATOR "IFW")
set(CPACK_IFW_PACKAGE_NAME "AmneziaVPN")
set(CPACK_IFW_PACKAGE_TITLE "AmneziaVPN")
set(CPACK_IFW_PACKAGE_VERSION "${AMNEZIAVPN_VERSION}")
set(CPACK_IFW_TARGET_DIRECTORY "@ApplicationsDir@/AmneziaVPN")
set(CPACK_IFW_PACKAGE_WIZARD_DEFAULT_WIDTH "600")
set(CPACK_IFW_PACKAGE_WIZARD_DEFAULT_HEIGHT "380")
set(CPACK_IFW_PACKAGE_WIZARD_STYLE "Modern")
set(CPACK_IFW_PACKAGE_REMOVE_TARGET_DIR ON)
set(CPACK_IFW_PACKAGE_ALLOW_SPACE_IN_PATH ON)
set(CPACK_IFW_PACKAGE_ALLOW_NON_ASCII_CHARACTERS ON)
set(CPACK_IFW_PACKAGE_CONTROL_SCRIPT "${CMAKE_SOURCE_DIR}/deploy/data/linux/controlscript.js")
include(CPack)
include(CPackIFW)
# cpack_ifw_add_repository(main
# URL "https://amneziavpn.org/updates/linux"
# DISPLAY_NAME "AmneziaVPN - repository for Linux"
# )
cpack_add_component_group(AmneziaVPN
DISPLAY_NAME AmneziaVPN
)
cpack_add_component(client
DISPLAY_NAME "AmneziaVPN Client"
GROUP AmneziaVPN
)
cpack_add_component(service
DISPLAY_NAME "AmneziaVPN Service"
GROUP AmneziaVPN
)
cpack_add_component(auxiliary
DISPLAY_NAME "Auxiliary scripts"
GROUP AmneziaVPN
)
cpack_ifw_configure_component_group(AmneziaVPN
VERSION ${AMNEZIAVPN_VERSION}
RELEASE_DATE ${RELEASE_DATE}
REQUIRES_ADMIN_RIGHTS
FORCED_INSTALLATION
SCRIPT "${CMAKE_SOURCE_DIR}/deploy/data/linux/componentscript.js"
)
endif()
+11
View File
@@ -0,0 +1,11 @@
if(WIN32)
file(GLOB_RECURSE BINARIES
"${CPACK_TEMPORARY_DIRECTORY}/*.dll"
"${CPACK_TEMPORARY_DIRECTORY}/*.exe"
)
if(BINARIES)
include(${CMAKE_CURRENT_LIST_DIR}/util/signtool.cmake)
signtool_sign_files("${BINARIES}" "${SIGNTOOL_SUBJECT_NAME}")
endif()
endif()
+8
View File
@@ -0,0 +1,8 @@
if(WIN32)
if (CPACK_PACKAGE_FILES)
include(${CMAKE_CURRENT_LIST_DIR}/util/signtool.cmake)
foreach(PACKAGE_FILE IN LISTS CPACK_PACKAGE_FILES)
signtool_sign_files("${PACKAGE_FILE}" "${SIGNTOOL_SUBJECT_NAME}")
endforeach()
endif()
endif()
+38
View File
@@ -0,0 +1,38 @@
find_program(SIGNTOOL_COMMAND signtool REQUIRED)
function(signtool_sign_files PACKAGE_FILES SUBJECT_NAME)
if(NOT SUBJECT_NAME)
set(SUBJECT_NAME "Privacy Technologies OU")
endif()
if(PACKAGE_FILES)
set(args sign
/n ${SUBJECT_NAME}
/fd sha256
/td sha256
/tr http://timestamp.comodoca.com/?td=sha256
)
foreach(file IN LISTS PACKAGE_FILES)
set(local_args ${args})
if (NOT "${file}" MATCHES "\\.msi$")
list(APPEND local_args /as)
endif()
set(cmd ${SIGNTOOL_COMMAND} ${local_args} ${file})
list(JOIN cmd " " cmd_str)
message(STATUS "${cmd_str}")
execute_process(
COMMAND ${cmd}
RESULT_VARIABLE result
ERROR_VARIABLE error
)
if(NOT result EQUAL 0)
string(REPLACE "\n" "\n " error " ${error}")
message(FATAL_ERROR "signtool failed:\n${error}")
endif()
endforeach()
endif()
endfunction()
@@ -1,34 +1,34 @@
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
sc stop AmneziaVPNSplitTunnel
sc delete AmneziaVPNSplitTunnel
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
sc stop AmneziaVPNSplitTunnel
sc delete AmneziaVPNSplitTunnel
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
-5
View File
@@ -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,34 +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
sc stop AmneziaVPNSplitTunnel
sc delete AmneziaVPNSplitTunnel
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
-27
View File
@@ -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>
-20
View File
@@ -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>
+17 -8
View File
@@ -384,14 +384,23 @@ add_custom_command(TARGET ${PROJECT} POST_BUILD
${CONAN_EXECS} ${CONAN_BINS}
"$<TARGET_FILE_DIR:${PROJECT}>"
)
install(FILES ${CONAN_EXECS}
DESTINATION ${CMAKE_INSTALL_BINDIR}
COMPONENT service
PERMISSIONS
OWNER_READ OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE
)
if(WIN32)
# using PERMISSIONS on Windows appends read-only flag
# to the files so just omit it for it
install(FILES ${CONAN_EXECS}
DESTINATION ${CMAKE_INSTALL_BINDIR}
COMPONENT service
)
else()
install(FILES ${CONAN_EXECS}
DESTINATION ${CMAKE_INSTALL_BINDIR}
COMPONENT service
PERMISSIONS
OWNER_READ OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE
)
endif()
install(FILES ${CONAN_BINS}
DESTINATION ${CMAKE_INSTALL_BINDIR}
COMPONENT service