From 7992b0b9abbb85504995c9fee46c9484e7948f56 Mon Sep 17 00:00:00 2001 From: Albrecht Schlosser Date: Wed, 14 Feb 2024 17:06:10 +0100 Subject: [PATCH] CMake: fix installation on macOS fluid and fltk-options are now installed correctly as bundles and as stand-alone executables side by side in the 'bin' folder relative to CMAKE_INSTALL_PREFIX. This works but the installation folders may be changed in the future. Targets fltk::fluid is now exported correctly so find_package(FLTK CONFIG ...) works with both the build folder and an installed version. --- CMake/export.cmake | 13 +++++++--- fltk-options/CMakeLists.txt | 49 ++++++++++++++++--------------------- fluid/CMakeLists.txt | 48 ++++++++++++++++-------------------- 3 files changed, 51 insertions(+), 59 deletions(-) diff --git a/CMake/export.cmake b/CMake/export.cmake index 220e6dc2c..fa5816d53 100644 --- a/CMake/export.cmake +++ b/CMake/export.cmake @@ -70,11 +70,16 @@ else() endif() # generate FLTK-Targets.cmake for build directory use +set(export_targets + ${FLTK_LIBRARIES} + ${FLTK_LIBRARIES_SHARED} + ${FLUID_EXPORT} + ${FLTK_OPTIONS_EXPORT} +) +message(STATUS "export.cmake: exporting targets...") +fl_debug_var(export_targets) export(TARGETS - ${FLTK_LIBRARIES} - ${FLTK_LIBRARIES_SHARED} - ${FLUID_EXPORT} - ${FLTK_OPTIONS_EXPORT} + ${export_targets} FILE ${CMAKE_CURRENT_BINARY_DIR}/FLTK-Targets.cmake NAMESPACE diff --git a/fltk-options/CMakeLists.txt b/fltk-options/CMakeLists.txt index d48eb5f23..912832839 100644 --- a/fltk-options/CMakeLists.txt +++ b/fltk-options/CMakeLists.txt @@ -70,43 +70,36 @@ endforeach() if(APPLE AND NOT FLTK_BACKEND_X11) - # On macOS, fltk-options must be installed twice. The bundled version of - # fltk-options needs to go into the /Applications folder to make it visible - # as a user App with full GUI. - # The binary without bundle should go into ${FLTK_BINDIR}, usually - # /usr/local/bin, so it will be picked up as a command line tool by - # the build process of other apps. - # On macOS the command line tool is the same target ('fltk-options') as the - # one included in the bundle. + # On macOS, fltk-options will be installed twice: + # - The bundled version goes into the destination folder ${FLTK_BINDIR}. + # - The binary without bundle goes into ${FLTK_BINDIR} as well. + # These folders are relative to the install prefix, usually 'bin'. + # The command line tool is the same executable as the one included in the bundle. + # Note: + # Both the bundle and the commandline tool are currently installed side by side. + # This may be changed in the future. - # create bundle + # set bundle properties set_target_properties(fltk-options PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/fltk-options.plist") set_target_properties(fltk-options PROPERTIES MACOSX_BUNDLE_ICON_FILE ${ICON_NAME}) set_target_properties(fltk-options PROPERTIES XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "org.fltk.fltk-options") - # The line below would wrongly install /Applications/fltk-options.icns - # ## set_target_properties(fltk-options PROPERTIES RESOURCE ${ICON_PATH}) - - # install fltk-options GUI and commandline tools - # install(TARGETS fltk-options DESTINATION "/Applications") - # install command line tool - install(PROGRAMS $ DESTINATION ${FLTK_BINDIR}) - -else() - - # install fltk-options GUI and optional commandline tool 'fltk-options-cmd' - # (only on Windows) - - install(TARGETS ${TARGETS} - EXPORT FLTK-Targets - RUNTIME DESTINATION ${FLTK_BINDIR} - LIBRARY DESTINATION ${FLTK_LIBDIR} - ARCHIVE DESTINATION ${FLTK_LIBDIR} - ) + install(PROGRAMS $ + DESTINATION ${FLTK_BINDIR}) endif(APPLE AND NOT FLTK_BACKEND_X11) +# Install the GUI and (on Windows only) the commandline tool 'fltk-options-cmd' + +install(TARGETS ${TARGETS} + EXPORT FLTK-Targets + RUNTIME DESTINATION ${FLTK_BINDIR} + LIBRARY DESTINATION ${FLTK_LIBDIR} + ARCHIVE DESTINATION ${FLTK_LIBDIR} + BUNDLE DESTINATION ${FLTK_BINDIR} # macOS: bundles +) + # Install desktop files if(UNIX) diff --git a/fluid/CMakeLists.txt b/fluid/CMakeLists.txt index 66f16a99f..7a9f85ddf 100644 --- a/fluid/CMakeLists.txt +++ b/fluid/CMakeLists.txt @@ -194,41 +194,35 @@ endforeach() if(APPLE AND NOT FLTK_BACKEND_X11) - # On macOS, Fluid must be installed twice. The bundled version of Fluid needs - # to go into the /Applications folder to make it visible as a user App with - # full GUI. The binary without bundle should go into ${FLTK_BINDIR}, usually - # /usr/local/bin, so it will be picked up as a command line tool by - # the build process of other apps. - # On macOS the command line tool is the same target ('fluid') as the one - # included in the bundle. + # On macOS, fluid will be installed twice: + # - The bundled version of Fluid goes into the destination folder ${FLTK_BINDIR}. + # - The binary without bundle goes into ${FLTK_BINDIR} as well. + # The command line tool is the same executable as the one included in the bundle. + # Note: + # Both the bundle and the commandline tool are currently installed side by side. + # This may be changed in the future. - # create bundle + # Set bundle properties set_target_properties(fluid PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/fluid.plist") set_target_properties(fluid PROPERTIES MACOSX_BUNDLE_ICON_FILE ${ICON_NAME}) set_target_properties(fluid PROPERTIES XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "org.fltk.fluid") - # The line below would wrongly install /Applications/fluid.icns - # ## set_target_properties(fluid PROPERTIES RESOURCE ${ICON_PATH}) - - # install fluid GUI and commandline tools - # install(TARGETS fluid DESTINATION "/Applications") - - # install command line tool - install(PROGRAMS $ DESTINATION ${FLTK_BINDIR}) - -else() - - # install Fluid GUI and optional commandline tool 'fluid-cmd' (only on Windows) - - install(TARGETS ${TARGETS} - EXPORT FLTK-Targets - RUNTIME DESTINATION ${FLTK_BINDIR} - LIBRARY DESTINATION ${FLTK_LIBDIR} - ARCHIVE DESTINATION ${FLTK_LIBDIR} - ) + # Install command line tool + install(PROGRAMS $ + DESTINATION ${FLTK_BINDIR}) endif(APPLE AND NOT FLTK_BACKEND_X11) +# Install the GUI and (on Windows only) the commandline tool 'fluid-cmd' + +install(TARGETS ${TARGETS} + EXPORT FLTK-Targets + RUNTIME DESTINATION ${FLTK_BINDIR} + LIBRARY DESTINATION ${FLTK_LIBDIR} + ARCHIVE DESTINATION ${FLTK_LIBDIR} + BUNDLE DESTINATION ${FLTK_BINDIR} # macOS: bundles +) + # Install desktop files if(UNIX)