Den tis 23 okt. 2018 kl 18:46 skrev Elvis Stansvik
<[email protected]>:
>
> Den tis 23 okt. 2018 kl 18:26 skrev Elvis Stansvik
> <[email protected]>:
> >
> > Just going to jump in here and show how we did it (on the bus with just my 
> > phone so will be a bit terse):
> >
> > packaging/InstallWindowsDeps.cmake:
> >
> > include(BundleUtilities)
> >
> > # Dependant executables/libraries
> > set(INSIGHT_ARTIFACTS
> >     "${CMAKE_INSTALL_PREFIX}/orexplore-insight.exe"
> >     "${CMAKE_INSTALL_PREFIX}/insightmodel.dll"
> >     "${CMAKE_INSTALL_PREFIX}/insightview.dll"
> > )
> >
> > # Install the HDF5 Blosc compression plugin
> > find_path(H5ZBLOSC_DLL_PATH NAMES H5Zblosc.dll)
> > file(INSTALL
> >     DESTINATION "${CMAKE_INSTALL_PREFIX}"
> >     TYPE SHARED_LIBRARY
> >     OPTIONAL
> >     FILES "${H5ZBLOSC_DLL_PATH}/H5Zblosc.dll")
> >
> > # Install fontconfig configuration
> > #
> > # Note: This assumes the layout used by [1], where the fonts
> > #       directory is two levels up from the bin/x64 directory
> > #       where the DLL is.
> > #
> > # [1] https://github.com/ShiftMediaProject/fontconfig
> > find_path(FONTCONFIG_DLL_PATH NAMES fontconfig.dll)
> > set(FONTCONFIG_FONTS_DIR "${FONTCONFIG_DLL_PATH}/../../fonts")
> > file(INSTALL "${FONTCONFIG_FONTS_DIR}" DESTINATION 
> > "${CMAKE_INSTALL_PREFIX}")
> >
> > # Run windeployqt to install Qt libraries, plugins et.c.
> > execute_process(COMMAND windeployqt --no-translations --no-compiler-runtime 
> > --no-opengl-sw ${INSIGHT_ARTIFACTS})
> >
> > # Run fixup_bundle(..) to bring in everything else.
> > fixup_bundle(
> >     "${CMAKE_INSTALL_PREFIX}/orexplore-insight.exe"
> >     "${CMAKE_INSTALL_PREFIX}/H5Zblosc.dll"
> >     ""
> > )
> >
> > set(CODE_SIGNING_COMMAND "@INSIGHT_CODE_SIGNING_COMMAND@")
> >
> > if(NOT "${CODE_SIGNING_COMMAND}" STREQUAL "")
> >     # Sign all executables/libraries
> >     file(GLOB_RECURSE FILES_TO_SIGN
> >         "${CMAKE_INSTALL_PREFIX}/*.exe"
> >         "${CMAKE_INSTALL_PREFIX}/*.dll"
> >     )
> >
> >     separate_arguments(CODE_SIGNING_COMMAND WINDOWS_COMMAND 
> > "${CODE_SIGNING_COMMAND}")
> >
> >     foreach(FILE_TO_SIGN ${FILES_TO_SIGN})
> >         execute_process(COMMAND ${CODE_SIGNING_COMMAND} "${FILE_TO_SIGN}")
> >     endforeach()
> > endif()
> >
> >
> > packaging/Installmacosdeps.cmake:
> >
> >
> > include(BundleUtilities)
> >
> > # Install the HDF5 Blosc compression plugin
> > find_path(H5ZBLOSC_DYLIB_PATH NAMES libH5Zblosc.dylib)
> > file(INSTALL
> >     DESTINATION 
> > "${CMAKE_INSTALL_PREFIX}/@[email protected]/Contents/MacOS"
> >     TYPE SHARED_LIBRARY
> >     OPTIONAL
> >     FILES "${H5ZBLOSC_DYLIB_PATH}/libH5Zblosc.dylib")
> >
> > # We use PATH as the list of extra search dirs for macdeployqt/fixup_bundle
> > string(REPLACE ":" ";" INSIGHT_LIBRARY_SEARCH_DIRS "$ENV{PATH}")
> >
> > # Run macdeployqt to install Qt libraries, plugins et.c.
> > string(REGEX REPLACE "([^;]+)" "-libpath=\\1" _macdeployqt_flags 
> > "${INSIGHT_LIBRARY_SEARCH_DIRS}")
> > execute_process(COMMAND macdeployqt 
> > ${CMAKE_INSTALL_PREFIX}/@[email protected] 
> > ${_macdeployqt_flags} -verbose=3)
> >
> > # Gather list of Qt plugins
> > file(GLOB_RECURSE _qtplugins 
> > "${CMAKE_INSTALL_PREFIX}/@[email protected]/Contents/PlugIns/*.dylib")
> >
> > # Run fixup_bundle(..)
> > fixup_bundle(
> >     "${CMAKE_INSTALL_PREFIX}/@[email protected]"
> >     
> > "${_qtplugins};${CMAKE_INSTALL_PREFIX}/@[email protected]/Contents/MacOS/libH5Zblosc.dylib"
> >     "${INSIGHT_LIBRARY_SEARCH_DIRS}"
> > )
> >
> > # Despite what the documentation for macdeployqt says, it _does_ install
> > # non-Qt dependencies. It installs plain dylibs into Contents/Frameworks.
> > # This is a problem, because fixup_bundle(..), which we used above, will
> > # install the same libraries, but into Contents/MacOS. We thus remove the
> > # dylibs installed by macdeployqt, to avoid duplication.
> > file(GLOB _macdeployqt_dylibs 
> > "${CMAKE_INSTALL_PREFIX}/@[email protected]/Contents/Frameworks/*.dylib")
> > file(REMOVE ${_macdeployqt_dylibs})
> >
> > set(CODE_SIGNING_COMMAND "@INSIGHT_CODE_SIGNING_COMMAND@")
> >
> > if(NOT "${CODE_SIGNING_COMMAND}" STREQUAL "")
> >     separate_arguments(CODE_SIGNING_COMMAND UNIX_COMMAND 
> > "${CODE_SIGNING_COMMAND}")
> >
> >     # Sign the entire application bundle.
> >     #
> >     # Note that we assume here that the code signing command in
> >     # ${CODE_SIGNING_COMMAND} is capable of recursive signing of
> >     # an macOS application bundle (e.g. `codesign --deep ..`).
> >     execute_process(COMMAND ${CODE_SIGNING_COMMAND} 
> > "${CMAKE_INSTALL_PREFIX}/@[email protected]")
> > endif()
> >
> >
> > And then:
> >
> >
> > configure_file(CPackOptions.cmake.in "${INSIGHT_CPACK_PROJECT_CONFIG_FILE}" 
> > @ONLY)
> >
> > if(WIN32)
> >     configure_file(InstallWindowsDeps.cmake.in
> >         "${CMAKE_CURRENT_BINARY_DIR}/InstallWindowsDeps.cmake" @ONLY)
> >     install(SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/InstallWindowsDeps.cmake")
> >     set(CPACK_GENERATOR "ZIP;WIX")
> > elseif(APPLE)
> >     configure_file(InstallMacOSDeps.cmake.in
> >         "${CMAKE_CURRENT_BINARY_DIR}/InstallMacOSDeps.cmake" @ONLY)
> >     install(SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/InstallMacOSDeps.cmake")
> >     set(CPACK_GENERATOR "DragNDrop")
> > else()
> >     set(CPACK_GENERATOR "TGZ")
> > endif()
> >
> > # General CPack options
> > set(CPACK_PACKAGE_NAME "${INSIGHT_CPACK_PACKAGE_NAME}")
> > set(CPACK_PACKAGE_VENDOR "${INSIGHT_CPACK_PACKAGE_VENDOR}")
> > set(CPACK_PACKAGE_VERSION_MAJOR "${INSIGHT_CPACK_PACKAGE_VERSION_MAJOR}")
> > set(CPACK_PACKAGE_VERSION_MINOR "${INSIGHT_CPACK_PACKAGE_VERSION_MINOR}")
> > set(CPACK_PACKAGE_VERSION_PATCH "${INSIGHT_CPACK_PACKAGE_VERSION_PATCH}")
> > set(CPACK_PACKAGE_VERSION "${INSIGHT_CPACK_PACKAGE_VERSION}")
> > set(CPACK_PACKAGE_INSTALL_DIRECTORY 
> > "${INSIGHT_CPACK_PACKAGE_INSTALL_DIRECTORY}")
> > set(CPACK_PACKAGE_EXECUTABLES "${INSIGHT_CPACK_PACKAGE_EXECUTABLES}")
> > set(CPACK_CREATE_DESKTOP_LINKS "${INSIGHT_CPACK_CREATE_DESKTOP_LINKS}")
> > set(CPACK_WIX_UPGRADE_GUID "${INSIGHT_CPACK_WIX_UPGRADE_GUID}")
> > set(CPACK_WIX_UI_BANNER "${INSIGHT_CPACK_WIX_UI_BANNER}")
> > set(CPACK_WIX_UI_DIALOG "${INSIGHT_CPACK_WIX_UI_DIALOG}")
> > set(CPACK_WIX_LICENSE_RTF "${INSIGHT_CPACK_WIX_LICENSE_RTF}")
> > set(CPACK_WIX_PRODUCT_ICON "${INSIGHT_CPACK_WIX_PRODUCT_ICON}")
> > set(CPACK_WIX_PATCH_FILE "${INSIGHT_CPACK_WIX_PATCH_FILE}")
> > set(CPACK_DMG_BACKGROUND_IMAGE "${INSIGHT_CPACK_DMG_BACKGROUND_IMAGE}")
> > set(CPACK_DMG_DS_STORE_SETUP_SCRIPT 
> > "${INSIGHT_CPACK_DMG_DS_STORE_SETUP_SCRIPT}")
> > set(CPACK_PROJECT_CONFIG_FILE "${INSIGHT_CPACK_PROJECT_CONFIG_FILE}")
> >
> > include(CPack)
>
> Alright, now home at my keyboard so can explain a little more. This
> last snippet was an excerpt from
>
>     packaging/CMakeLists.txt
>
> and then in our top-level CMakeLists.txt we do:
>
>     add_subdirectory(packaging)
>
> The snippets above contained a lot of irrelevant stuff, sorry about
> that, but hope you can make out the bits related to signing.
>
> Another thing related to packaging/deployment we have is:
>
> if(WIN32)
>     add_definitions(/D_WIN32_WINNT=0x0601) # Target Windows 7+
>
>     set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION "${INSIGHT_BINDIR}")
>     set(CMAKE_INSTALL_UCRT_LIBRARIES ON)
>     include(InstallRequiredSystemLibraries)
> endif()
>
> The signing stuff in the snippets above are only for the installed
> artifacts. The final .msi installer and .dmg bundles are signed by our

s/dmg bundle/dmg disk image/

Elvis

> CI system, so done at another level (not CMake).
>
> Elvis
>
> >
> >
> > Sorry for giving you the full paste, but as you can see we're using the 
> > install(SCRIPT) approach. The scrips are generated using configure_file so 
> > we can use generator expressions.
> >
> >
> > Might not be the prettiest but has worked for us.
> >
> >
> > PS sorry for the formatting DS
> >
> > Cheers,
> >
> > Elvis
> >
> >
> > Den tis 23 okt. 2018 07:43Eric Noulard <[email protected]> skrev:
> >>
> >> Le lun. 22 oct. 2018 à 23:05, Craig Scott <[email protected]> a 
> >> écrit :
> >>>>
> >>>>
> >>>> Yes I agree that having build rpath is useful.
> >>>> I am not aware of any mechanism that enable calling some tool during 
> >>>> CPack's install step.
> >>>> Moreover I don't use MacOS at all so I don't have any experience with 
> >>>> PackageMaker.
> >>>>
> >>>> May be some Mac user may shed some more light on this.
> >>>
> >>>
> >>> You should be able to do this using install(SCRIPT) or install(CODE), 
> >>> invoking the code signing through execute_process() as part of that 
> >>> script/code.
> >>
> >>
> >> I wasn't sure of that.
> >>
> >> So just to be clear  do we know for sure that install(SCRIPT) 
> >> install(CODE) will run after the CMake builtin-generated install scripts?
> >> The builtin generated install script for target includes stripping, so for 
> >> signing to work as expect we should be sure of the execution order?
> >> Or may be you suggest not to install(TARGET) for the concerned target and 
> >> write install(SCRIPT) replacement for those?
> >>
> >>
> >>> Taking a step back though, I don't know what your package contains, but 
> >>> if you're creating an app bundle, then you don't need CPack at all. An 
> >>> app bundle is already self contained and you should be able to get it to 
> >>> build with install RPATH, at which point it should find everything it 
> >>> needs. An advantage of building with install RPATH is that you can also 
> >>> make use of the XCODE_ATTRIBUTE target property support to set up the 
> >>> code signing and have Xcode/xcodebuild drive the whole code signing 
> >>> process for you. It's likely to be easier that way and is more compatible 
> >>> with tools like Fastlane, if you end up heading in that direction. But if 
> >>> you have embedded frameworks, then yeah, you probably end up having to do 
> >>> things manually yourself (CMake doesn't yet handle those well and has no 
> >>> direct support for it).
> >>>
> >>> --
> >>> Craig Scott
> >>> Melbourne, Australia
> >>> https://crascit.com
> >>>
> >>> New book released: Professional CMake: A Practical Guide
> >>
> >>
> >> --
> >> Eric
> >> --
> >>
> >> Powered by www.kitware.com
> >>
> >> Please keep messages on-topic and check the CMake FAQ at: 
> >> http://www.cmake.org/Wiki/CMake_FAQ
> >>
> >> Kitware offers various services to support the CMake community. For more 
> >> information on each offering, please visit:
> >>
> >> CMake Support: http://cmake.org/cmake/help/support.html
> >> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> >> CMake Training Courses: http://cmake.org/cmake/help/training.html
> >>
> >> Visit other Kitware open-source projects at 
> >> http://www.kitware.com/opensource/opensource.html
> >>
> >> Follow this link to subscribe/unsubscribe:
> >> https://cmake.org/mailman/listinfo/cmake
-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake

Reply via email to