From 9a02e0b6b3a235578d841fe66c9b7b2a7463b681 Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Wed, 19 Oct 2016 18:00:27 +0200 Subject: [PATCH] Schwabe/cpack osx (#3776) * [Companion] Add logic to add background and DS_Store. Start with Cpack for OS X * Major overhaul of the OpenTX packing for OS X * Update DS_Store to not show toolbar (noticed by @Kilrah, thanks!) * Minor fixes * set BU_CHMOD_ITEMS to avoid packaging errors * Rename the app to a nicer name on OS X (OpenTX Companion 2.2.app instead of companion.app) * Embed dfu-util into bundle (first part of #3908) * Fix showing status bar showing in disk image * Workaround for CMAKE_OSX_DEPLOYMENT_TARGET --- CMakeLists.txt | 2 + companion/src/CMakeLists.txt | 151 +++++++++++++++++++-------------- companion/targets/mac/DS_Store | Bin 0 -> 10244 bytes radio/src/CMakeLists.txt | 3 + 4 files changed, 91 insertions(+), 65 deletions(-) create mode 100644 companion/targets/mac/DS_Store diff --git a/CMakeLists.txt b/CMakeLists.txt index c1d4e5ac7..424e870d4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,6 +18,8 @@ if(POLICY CMP0043) cmake_policy(SET CMP0043 NEW) endif() +set(CMAKE_COLOR_MAKEFILE ON) + set(CMAKE_CXX_STANDARD 11) set(RADIO_DIRECTORY ${PROJECT_SOURCE_DIR}/radio) diff --git a/companion/src/CMakeLists.txt b/companion/src/CMakeLists.txt index 03a417961..829508899 100644 --- a/companion/src/CMakeLists.txt +++ b/companion/src/CMakeLists.txt @@ -1,4 +1,4 @@ -if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") + if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") set(C9X_NAME_SUFFIX ${VERSION_MAJOR}${VERSION_MINOR}) set(COMPANION_NAME "companion${C9X_NAME_SUFFIX}") set(SIMULATOR_NAME "simulator${C9X_NAME_SUFFIX}") @@ -6,11 +6,17 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") else(${CMAKE_SYSTEM_NAME} MATCHES "Linux") set(COMPANION_NAME "companion") set(SIMULATOR_NAME "simulator") - if(APPLE) - set(SIMULATOR_LIB_PATH ${CMAKE_INSTALL_PREFIX}/Contents/companion.app/Ressources) - endif() endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") +# This the name that the user will see in the generated DMG and what the application +# will be called under /Applications. We include the version string to make installing +# different versions for different eeproms easier, i.e. without manually renaming +set(COMPANION_OSX_FINAL_NAME "OpenTX Companion ${VERSION_MAJOR}.${VERSION_MINOR}") + +# On OS X we copy dfu-util to the application bundle. This the path from which we copy +# the binary (default homebrew path) +set(DFU_UTIL_PATH "/usr/local/bin/dfu-util") + option(ALLOW_NIGHTLY_BUILDS "Allow nightly builds download / update") # Disabled by default if(ALLOW_NIGHTLY_BUILDS) add_definitions(-DALLOW_NIGHTLY_BUILDS) @@ -225,13 +231,7 @@ add_custom_target(gen_qrc DEPENDS ${companion_RCC}) add_definitions(-DQT_TRANSLATIONS_DIR="${QT_TRANSLATIONS_DIR}") -if(APPLE) - add_executable(${COMPANION_NAME} MACOSX_BUNDLE ${companion_SRCS} ${companion_RCC} ${companion_QM}) - # OS X compiler no longer automatically includes /Library/Frameworks in search path - set(CMAKE_EXE_LINKER_FLAGS -F/Library/Frameworks) -else() - add_executable(${COMPANION_NAME} WIN32 ${companion_SRCS} ${companion_RCC} ${companion_QM}) -endif() +add_executable(${COMPANION_NAME} MACOSX_BUNDLE WIN32 ${companion_SRCS} ${companion_RCC} ${companion_QM}) add_dependencies(${COMPANION_NAME} gen_qrc) qt5_use_modules(${COMPANION_NAME} Core Widgets Network) @@ -255,11 +255,8 @@ if(WIN32) set(simu_SRCS ${simu_SRCS} icon.rc) endif() -if(APPLE) - add_executable(${SIMULATOR_NAME} MACOSX_BUNDLE ${simu_SRCS} ${companion_RCC}) -else() - add_executable(${SIMULATOR_NAME} WIN32 ${simu_SRCS} ${companion_RCC}) -endif() + +add_executable(${SIMULATOR_NAME} MACOSX_BUNDLE WIN32 ${simu_SRCS} ${companion_RCC}) add_dependencies(${SIMULATOR_NAME} gen_qrc) # TODO not the same link command than companion? @@ -267,15 +264,11 @@ target_link_libraries(${SIMULATOR_NAME} PRIVATE simulation common qxtcommandopti ############# Packaging #################### message(STATUS ${CMAKE_BINARY_DIR} ${CMAKE_INSTALL_PREFIX}/bin) -if(APPLE) - install(DIRECTORY ${CMAKE_BINARY_DIR}/ DESTINATION ${SIMULATOR_LIB_PATH} USE_SOURCE_PERMISSIONS - FILES_MATCHING PATTERN "libopentx-*.dylib" - ) -elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") +if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") install(TARGETS ${COMPANION_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) install(TARGETS ${SIMULATOR_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) install(DIRECTORY ${CMAKE_BINARY_DIR}/ DESTINATION ${SIMULATOR_LIB_PATH} USE_SOURCE_PERMISSIONS - FILES_MATCHING PATTERN "libopentx-*.so" + FILES_MATCHING PATTERN "libopentx-*${CMAKE_SHARED_LIBRARY_SUFFIX}" PATTERN "CMakeFiles" EXCLUDE PATTERN "_CPack_Packages" EXCLUDE PATTERN "companion" EXCLUDE @@ -353,37 +346,6 @@ if(WIN32) ) endif() -if(APPLE) - set(MACOSX_BUNDLE_ICON_FILE iconmac.icns) - SET_SOURCE_FILES_PROPERTIES(${PROJECT_SOURCE_DIR}/images/${MACOSX_BUNDLE_ICON_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) - set(${COMPANION_SOURCES} ${COMPANION_SOURCES} ${PROJECT_SOURCE_DIR}/images/${MACOSX_BUNDLE_ICON_FILE}) - - if(CMAKE_GENERATOR STREQUAL Xcode) - set(WORK_DIR ${CMAKE_BINARY_DIR}/Debug) - else() - set(WORK_DIR ${PROJECT_BINARY_DIR}) - endif() - - add_custom_target(addframeworks - COMMAND mkdir -p companion.app/Contents/Frameworks - COMMAND mkdir -p companion.app/Contents/Resources - COMMAND mkdir -p companion.app/Contents/translations - COMMAND rsync ${PROJECT_SOURCE_DIR}/images/${MACOSX_BUNDLE_ICON_FILE} companion.app/Contents/Resources/${MACOSX_BUNDLE_ICON_FILE} # Copy the icon files - COMMAND rsync -r --exclude=.svn ${PROJECT_SOURCE_DIR}/../targets/mac/qt_menu.nib companion.app/Contents/Resources/ - COMMAND rsync ${PROJECT_BINARY_DIR}/*.qm companion.app/Contents/translations - COMMAND rsync ${PROJECT_BINARY_DIR}/*.qm companion.app/Contents/translations - COMMAND rsync -r /Library/Frameworks/SDL.framework companion.app/Contents/Frameworks/ - COMMAND ${QT_BINARY_DIR}/macdeployqt companion.app - COMMAND install_name_tool -change @rpath/SDL.framework/Versions/A/SDL @executable_path/../Frameworks/SDL.framework/Versions/A/SDL companion.app/Contents/MacOS/companion - WORKING_DIRECTORY ${WORK_DIR} - DEPENDS ${COMPANION_NAME}) - - add_custom_target(makedmg - COMMAND ${QT_BINARY_DIR}/macdeployqt companion.app -dmg -no-plugins - WORKING_DIRECTORY ${WORK_DIR} - DEPENDS addframeworks opentx-simulators-bundle) -endif() - if(LUPDATE_FOUND) add_custom_target(translations WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} @@ -403,16 +365,82 @@ string(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_PACKAGE_NAME_LOWERCASE) # very poor trace-backs from the users when they report Companion crash set(CPACK_STRIP_FILES FALSE) + +SET(plugin_dest_dir bin) +SET(qtconf_dest_dir bin) +SET(APPS "\${CMAKE_INSTALL_PREFIX}/bin/${COMPANION_NAME}") +IF(APPLE) + SET(plugin_dest_dir ${COMPANION_NAME}.app/Contents/Plugins) + SET(qtconf_dest_dir ${COMPANION_NAME}.app/Contents/Resources) + SET(translations_dest_dir ${COMPANION_NAME}.app/Contents/translations) + SET(APPS "\${CMAKE_INSTALL_PREFIX}/${COMPANION_NAME}.app") + set_target_properties(${COMPANION_NAME} PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "OpenTX Companion ${VERSION_MAJOR}.${VERSION_MINOR}") + set_target_properties(${SIMULATOR_NAME} PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "OpenTX Simulator ${VERSION_MAJOR}.${VERSION_MINOR}") +ENDIF(APPLE) +IF(WIN32) + SET(APPS "\${CMAKE_INSTALL_PREFIX}/bin/QtTest.exe") + +ENDIF(WIN32) + + INSTALL(TARGETS ${COMPANION_NAME} BUNDLE DESTINATION . COMPONENT Runtime RUNTIME DESTINATION bin COMPONENT Runtime ) +# Qt5 + Cmake + Mac is poorly documented. A lot of this is guesswork +# and trial and error. Do not hestinate to fix it for the better +if(APPLE) + set(APPS "\${CMAKE_INSTALL_PREFIX}/${COMPANION_NAME}.app") -# directories to look for dependencies -SET(DIRS ${QT_LIBRARY_DIRS}) + file(GLOB simulator_plugins "${CMAKE_BINARY_DIR}/libopentx-*${CMAKE_SHARED_LIBRARY_SUFFIX}") + SET(companion_res_dir ${COMPANION_NAME}.app/Contents/Resources) + install(FILES ${simulator_plugins} DESTINATION "${companion_res_dir}" COMPONENT Runtime) + + # Write qt.conf to tell qt where to find it plugins + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/qt.conf" + "[Paths]\nPlugins = Plugins\n") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/qt.conf" + DESTINATION "${companion_res_dir}" + COMPONENT Runtime) + + # menu file + INSTALL(DIRECTORY ${PROJECT_SOURCE_DIR}/companion/targets/mac/qt_menu.nib DESTINATION "${companion_res_dir}" COMPONENT Runtime) + + # translations file + INSTALL(FILES ${companion_QM} DESTINATION "${translations_dest_dir}" COMPONENT Runtime) + + # manually add the cocoa plugin + get_target_property(QPA_PLUGIN Qt5::QCocoaIntegrationPlugin LOCATION) + INSTALL(FILES ${QPA_PLUGIN} DESTINATION "${plugin_dest_dir}/platforms/" COMPONENT Runtime) + set(bundle_qt_libs "\${CMAKE_INSTALL_PREFIX}/${plugin_dest_dir}/platforms/libqcocoa.dylib") + + # Add icon + set(MACOSX_BUNDLE_ICON_FILE iconmac.icns) + set(MAC_ICON_FILE ${COMPANION_SRC_DIRECTORY}/images/${MACOSX_BUNDLE_ICON_FILE}) + SET_SOURCE_FILES_PROPERTIES(${MAC_ICON_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) + set(${COMPANION_SOURCES} ${COMPANION_SOURCES} ${PROJECT_SOURCE_DIR}/images/${MACOSX_BUNDLE_ICON_FILE}) + INSTALL(FILES ${MAC_ICON_FILE} DESTINATION ${companion_res_dir} COMPONENT Runtime) + + # Copy dfu-util, resolve symlink first + get_filename_component(DFU_UTIL_ABSOLUTE_PATH ${DFU_UTIL_PATH} REALPATH) + INSTALL(FILES ${DFU_UTIL_ABSOLUTE_PATH} DESTINATION ${companion_res_dir} COMPONENT Runtime) + set(bundle_dfu_util_path "\${CMAKE_INSTALL_PREFIX}/${companion_res_dir}/dfu-util") + + # Include depencies (adding frameworks, fixing the embbeded libraries) + # I get write errors without setting BU_CHMOD_BUNDLE_ITEMS even though it is + # technically a hack (that is already is in the Bundle library ....) + INSTALL(CODE " + include(BundleUtilities) + file(GLOB bundle_simulator_libs \"\${CMAKE_INSTALL_PREFIX}/${companion_res_dir}/libopentx-*${CMAKE_SHARED_LIBRARY_SUFFIX}\") + set(BU_CHMOD_BUNDLE_ITEMS on) + fixup_bundle(\"${APPS}\" \"\${bundle_simulator_libs};${bundle_qt_libs};${bundle_dfu_util_path}\" \"\") + file(RENAME \"\${CMAKE_INSTALL_PREFIX}/${COMPANION_NAME}.app\" \"\${CMAKE_INSTALL_PREFIX}/${COMPANION_OSX_FINAL_NAME}.app\") + " COMPONENT Runtime) +endif() find_program(DPKG_PROGRAM dpkg DOC "dpkg program of Debian-based systems") + if(DPKG_PROGRAM) set(CPACK_GENERATOR "DEB") execute_process( @@ -428,13 +456,13 @@ if(DPKG_PROGRAM) set(CPACK_DEBIAN_ARCHITECTURE $(CMAKE_SYSTEM_PROCESSOR)) set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) elseif(APPLE) - set(APPS "${COMPANION_NAME}.app") set(CPACK_GENERATOR "DragNDrop") +# set(CPACK_GENERATOR "TGZ") # for quick testing set(CPACK_BINARY_DRAGNDROP ON) - set(CPACK_DMG_BACKGROUND_IMAGE ${COMPANION_SRC_DIRECTORY}/images/dmg_background.png) + set(CPACK_DMG_BACKGROUND_IMAGE ${COMPANION_SRC_DIRECTORY}/images/splash22_3_dmg.png) set(CPACK_DMG_VOLUME_NAME "OpenTX Companion") set(CPACK_DMG_DS_STORE ${PROJECT_SOURCE_DIR}/companion/targets/mac/DS_Store) - + set(CPACK_PACKAGE_FILE_NAME "opentx-${CPACK_PACKAGE_NAME_LOWERCASE}-${VERSION}") else(DPKG_PROGRAM) set(CPACK_GENERATOR "RPM") set(CPACK_RPM_PACKAGE_VERSION ${VERSION}) @@ -443,11 +471,4 @@ else(DPKG_PROGRAM) SET(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/lib /lib/udev /lib/udev/rules.d") endif(DPKG_PROGRAM) -INSTALL(CODE " - include(BundleUtilities) - " COMPONENT Runtime - VERIFY_APP(${COMPANION_NAME}) - ) - - include(CPack) diff --git a/companion/targets/mac/DS_Store b/companion/targets/mac/DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d874b8a2b392ecf711fe550124fb7bd38eab57ce GIT binary patch literal 10244 zcmeHMU2Ggz6+YvPlXY#!V>^x#5~2YY$yL0&v%B{GI6_&k9XGC0Y;|4NQ4`#mov|~` zdS=-j=cmDvL5K&0gj8t710X~L1n5H_sE|sKf=UaKQmIw)P%0#(Dv-zK0i^Z?_|D9o z-Ss*t6ahl8$2s?W_wU?$&$)B%y&EEu3hQQqNF|~On5EK#jcN zl6av={^-!J`prqo2eO^EEzq{Wb_)b=_t?Xa&1>tmE$?>=jU|d1=W7+C>>9{@U{uO> z&C|5sN*z1o&Yim=T@U!A^gnRAc*Z?n^mK2%R?w?Y`Z?RQ41wo$?@WjnT(?}uy0K_m z=a-c|Q?BFbwqsSBx}JK%c1-tt!CiOE+Nolo?+M%V&MYfK^Hu8{y3Xs4wP@FD!!Fz2 z#fVSK%DzjNQd)Xc9nYjTM%7E{6!2IwwXvc6C=xmF(D>w|Co3CY`Q8hczyE_DUU~Jk zz%G)AEi~9-r`H2h*rjvA6!NXm6u(#c8pi1E>D}F@^bZW~QHGSgdk6OI|JZ?LWzf(| zXIHDdh$*-1Rtx2I3kzw?E%Ss7?_ z^%Xv5nV)SGEnKW@RqwZXxN2F>ldDzRoLgC`S>93;K6%O?)U(!RofQ}Q*{*XH&vu>K zqE)Ryp46*V-C4B?7f+XU!z#}?1=sW3HD61yqL*xEb@=Grz;1K>J4P8HMU+6eE*T<(_!nsf{1#>IT4mpcdRiE zpH(LzzG6-E@d{lR-L_=q#;L6+eZoLVkgkaL`Sm)f!54l-T}{X9IK~-ZW0UWf<(x{qaS&yuN1D;;j=T z+9O@z^&-XUyDH^%&sB@XX)fDJZ#{36V1JT3v}XrPp@X8ySTd%?%(ai?1bOH6L$JRc zju6I#i+_fjb!sKPbTX=Tkqxk|-Yl&I&vT zd|Y4^_)7xkfiDZp-jW4Y7*jx-cZuE>Ch2Fja)8Ukg|w>7vaT#j*As^Bd61Q?;3WQ^PQ?N0zT z@?nS%>xcZ>M*Uuq5B2g!|0?)f;1|K%j~6xhi!Z*+!G9l^cQU5yQ=gE{LV`tyQ6P0; z$J=FVA|7uE$e&7TQ(;7n*XK^kEq}VrWAfqiAnU?_sX``~OBA%|w3aPIQ`yw9=;Tah zGFq4!pUh1brW1+WOgKMX%<(_9wk01N;n=)BrqCXL7V~QM8QkZuuYRf^ANB_vnGkt@fBam1V+#2P z!EBTCOk(WV)OaRZm>x?;Q(9pxnw>5bqBGganN&JaNN0{^LtlM?`+!@0#bvAuXF@%K zmePrpgtcO&vdK&-t7SDUXQs9Bv24mTO(QqHGNx(C+=^b0b=$!|9YM9Rx-xA{OP6v9 z>qvZ^5897<&|xoNO&mdaA2RiWIfC}UXG|PHF9_TkLBAo&J5-{1;mA(lYhiofHwEqo z=D5JbQS-Ja=cxH7fmL8lw9$aWNGV-I1P%27^FC%8xJL9-QQjI&PYFHy(a!hX{cmFQ z6xy&2=q}MHHX_H%4)tHZrf`q*ICachE_SY1b;_=Pq4qZ$N@`x&!z%$(Vd}oK z#=}oK5WaTak?IdWymh*Jm7eb2?yXP1W#wS=Lv6uwj+L!*mNQp9p?g;FGW>VG0Ppwo zj3^sjkuLvbm`;r2Wtd3w%P^DC@G?xLH#Q<&k;umnKeA|C{PNd-^0QZe_4==WbN%)o z{utPZ-Ru*`p=P>+%zX^lV)!1K#5IyHk~XfMIxdsJRlhb{c1z-gjSoWlF*L40&hym} zwD0de7S#H+Rp$}5>Z6;`@iaEw3qqf-)KA1VR{3l`hU2!UQPoCm3$!ipe_{bio-R%o zu-GujwXU1bK^6QIn2FnM2GZ|>#6Kz_`Rw5g-=RhrqfBGT1e_OgGmt0&{pbHPp#AKCng8MU|K9*lcDpG6 literal 0 HcmV?d00001 diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 06a6e6c22..921678680 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -337,6 +337,9 @@ set(CMAKE_EXECUTABLE_SUFFIX ".elf") set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") set(CMAKE_COMMON_FLAGS "") +# similar for -mmacosx-version-min=" +set(CMAKE_C_OSX_DEPLOYMENT_TARGET_FLAG "") +set(CMAKE_CXX_OSX_DEPLOYMENT_TARGET_FLAG "") set(CMAKE_EXE_LINKER_FLAGS "") set(CMAKE_C_LINK_EXECUTABLE " -o ") set(CMAKE_CXX_LINK_EXECUTABLE " -o ")