From e45e4109730204420b7d63f0299f553dea2ec969 Mon Sep 17 00:00:00 2001 From: Sebastian Messmer Date: Thu, 27 Sep 2018 04:18:06 +0200 Subject: [PATCH] Build Windows Installer package with CPack and WIX --- LICENSE => LICENSE.txt | 0 appveyor.yml | 13 +++++++-- cpack/CMakeLists.txt | 55 +++++++++++++++++++++++++---------- cpack/wix/change_path_env.xml | 7 +++++ src/cryfs-cli/CMakeLists.txt | 2 +- src/fspp/fuse/CMakeLists.txt | 14 +++++---- 6 files changed, 68 insertions(+), 23 deletions(-) rename LICENSE => LICENSE.txt (100%) create mode 100644 cpack/wix/change_path_env.xml diff --git a/LICENSE b/LICENSE.txt similarity index 100% rename from LICENSE rename to LICENSE.txt diff --git a/appveyor.yml b/appveyor.yml index cc6307f0..2daf2cbe 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -10,8 +10,9 @@ platform: - Any CPU configuration: - - Debug - - RelWithDebInfo + - Debug + - RelWithDebInfo + - Release version: '{branch}-{build}' @@ -45,3 +46,11 @@ build_script: - cmd: .\test\blobstore\%CONFIGURATION%\blobstore-test.exe - cmd: .\test\cryfs\%CONFIGURATION%\cryfs-test.exe #- cmd: .\test\cryfs-cli\%CONFIGURATION%\cryfs-cli-test.exe + - cmd: cpack --verbose -G WIX + +on_failure: + - cmd: type C:\projects\cryfs\build\_CPack_Packages\win64\WIX\wix.log + +artifacts: + - path: build/cryfs-*.msi + name: CryFS diff --git a/cpack/CMakeLists.txt b/cpack/CMakeLists.txt index 4bc95b99..0dc4f86c 100644 --- a/cpack/CMakeLists.txt +++ b/cpack/CMakeLists.txt @@ -1,3 +1,23 @@ +# appends a build number from the APPVEYOR_BUILD_NUMBER environment variable as fourth component to a version number, +# i.e. "0.10" becomes "0.10.0.[buildnumber]", "1" becomes "1.0.0.[buildnumber]". +function(append_build_number VERSION_NUMBER OUTPUT) + string(REPLACE "." ";" VERSION_COMPONENTS ${STRIPPED_VERSION_NUMBER}) + list(LENGTH VERSION_COMPONENTS NUM_VERSION_COMPONENTS) + if (${NUM_VERSION_COMPONENTS} LESS_EQUAL 0) + message(FATAL_ERROR "Didn't find any version components") + endif() + if (${NUM_VERSION_COMPONENTS} LESS_EQUAL 1) + string(APPEND STRIPPED_VERSION_NUMBER ".0") + endif() + if (${NUM_VERSION_COMPONENTS} LESS_EQUAL 2) + string(APPEND STRIPPED_VERSION_NUMBER ".0") + endif() + if (NOT $ENV{APPVEYOR_BUILD_NUMBER} STREQUAL "") + string(APPEND STRIPPED_VERSION_NUMBER ".$ENV{APPVEYOR_BUILD_NUMBER}") + endif() + set(${OUTPUT} "${STRIPPED_VERSION_NUMBER}" PARENT_SCOPE) +endfunction() + # We only allow generating distribution packages if: # - it is a release build (to ensure all generated debian packages are fine to be distributed) string(TOUPPER "${CMAKE_BUILD_TYPE}" BUILDTYPE) @@ -11,27 +31,32 @@ if(BUILDTYPE MATCHES RELEASE OR BUILDTYPE MATCHES RELWITHDEBINFO) # When installing the .deb package and these files have the wrong permissions, the package manager complains. execute_process(COMMAND /bin/bash -c "chmod 0755 ${CMAKE_CURRENT_SOURCE_DIR}/debfiles/*") - set(CPACK_GENERATOR TGZ DEB RPM) set(CPACK_PACKAGE_NAME "cryfs") - get_git_version(GITVERSION_VERSION_STRING) - set(CPACK_PACKAGE_VERSION "${GITVERSION_VERSION_STRING}") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Encrypt your files and store them in the cloud.") set(CPACK_PACKAGE_DESCRIPTION "CryFS encrypts your files, so you can safely store them anywhere. It works well together with cloud services like Dropbox, iCloud, OneDrive and others.") set(CPACK_PACKAGE_CONTACT "Sebastian Messmer ") set(CPACK_PACKAGE_VENDOR "Sebastian Messmer") - set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/../LICENSE") - set(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}") + set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/../LICENSE.txt") + + get_git_version(GITVERSION_VERSION_STRING) + if(WIN32 AND NOT UNIX) - # There is a bug in NSI that does not handle full unix paths properly. Make - # sure there is at least one set of four (4) backlasshes. - #set(CPACK_PACKAGE_ICON "${CMake_SOURCE_DIR}/Utilities/Release\\\\InstallIcon.bmp") - #set(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\cryfs.exe") - #set(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} CryFS") - #set(CPACK_NSIS_HELP_LINK "http:\\\\\\\\www.cryfs.org") - #set(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\www.cryfs.org") - #set(CPACK_NSIS_CONTACT "messmer@cryfs.org") - #set(CPACK_NSIS_MODIFY_PATH ON) - else(WIN32 AND NOT UNIX) + set(CPACK_GENERATOR WIX) + + string(REGEX REPLACE "^([0-9\\.]+)([-+][0-9\\.a-zA-Z+-]+)?$" "\\1" STRIPPED_VERSION_NUMBER "${GITVERSION_VERSION_STRING}") + append_build_number(${STRIPPED_VERSION_NUMBER} WIX_VERSION_NUMBER) + message(STATUS "WIX package version is ${WIX_VERSION_NUMBER}") + set(CPACK_PACKAGE_VERSION "${WIX_VERSION_NUMBER}") + + set(CPACK_WIX_UPGRADE_GUID "8b872ce1-557d-48e6-ac57-9f5e574feabf") + set(CPACK_WIX_PRODUCT_GUID "26116061-4f99-4c44-a178-2153fa396308") + #set(CPACK_WIX_PRODUCT_ICON "...") + set(CPACK_WIX_PROPERTY_ARPURLINFOABOUT "https://www.cryfs.org") + set(CPACK_PACKAGE_INSTALL_DIRECTORY "CryFS/${GITVERSION_VERSION_STRING}") + set(CPACK_WIX_PATCH_FILE "${CMAKE_CURRENT_SOURCE_DIR}/wix/change_path_env.xml") + else() + set(CPACK_GENERATOR TGZ DEB RPM) + set(CPACK_PACKAGE_VERSION "${GITVERSION_VERSION_STRING}") set(CPACK_STRIP_FILES OFF) set(CPACK_SOURCE_STRIP_FILES OFF) endif() diff --git a/cpack/wix/change_path_env.xml b/cpack/wix/change_path_env.xml new file mode 100644 index 00000000..d41c4169 --- /dev/null +++ b/cpack/wix/change_path_env.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/src/cryfs-cli/CMakeLists.txt b/src/cryfs-cli/CMakeLists.txt index 7a93c8b3..07301c51 100644 --- a/src/cryfs-cli/CMakeLists.txt +++ b/src/cryfs-cli/CMakeLists.txt @@ -28,5 +28,5 @@ target_activate_cpp14(${PROJECT_NAME}_bin) install(TARGETS ${PROJECT_NAME}_bin DESTINATION ${CMAKE_INSTALL_BINDIR} - CONFIGURATIONS Release + CONFIGURATIONS Release RelWithDebInfo ) diff --git a/src/fspp/fuse/CMakeLists.txt b/src/fspp/fuse/CMakeLists.txt index d59c5df5..f493ec60 100644 --- a/src/fspp/fuse/CMakeLists.txt +++ b/src/fspp/fuse/CMakeLists.txt @@ -19,17 +19,21 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") get_target_architecture(TARGET_ARCH) message(STATUS "Linking to Dokan ${TARGET_ARCH}") if ("${TARGET_ARCH}" STREQUAL "x86_64") - set(DOKAN_LIB_PATH "${DOKAN_PATH}\\lib") + set(DOKAN_LIB_PATH "${DOKAN_PATH}") elseif("${TARGET_ARCH}" STREQUAL "i386") - set(DOKAN_LIB_PATH "${DOKAN_PATH}\\x86\\lib") + set(DOKAN_LIB_PATH "${DOKAN_PATH}\\x86") else() message(FATAL_ERROR "Unsupported architecture: ${TARGET_ARCH}") endif() target_include_directories(${PROJECT_NAME} PUBLIC "${DOKAN_PATH}\\include") - target_link_libraries(${PROJECT_NAME} PUBLIC "${DOKAN_LIB_PATH}\\dokan1.lib") - #target_link_libraries(${PROJECT_NAME} PUBLIC "${DOKAN_LIB_PATH}\\dokannp1.lib") - target_link_libraries(${PROJECT_NAME} PUBLIC "${DOKAN_LIB_PATH}\\dokanfuse1.lib") + target_link_libraries(${PROJECT_NAME} PUBLIC "${DOKAN_LIB_PATH}\\lib\\dokan1.lib") + #target_link_libraries(${PROJECT_NAME} PUBLIC "${DOKAN_LIB_PATH}\\lib\\dokannp1.lib") + target_link_libraries(${PROJECT_NAME} PUBLIC "${DOKAN_LIB_PATH}\\lib\\dokanfuse1.lib") + + install(FILES ${DOKAN_LIB_PATH}\\dokan1.dll ${DOKAN_LIB_PATH}\\dokanfuse1.dll + DESTINATION ${CMAKE_INSTALL_BINDIR} + ) elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(CMAKE_FIND_FRAMEWORK LAST)