@@ -4,10 +4,27 @@ include(CMakePackageConfigHelpers)
44# Paths
55if (LSL_UNIXFOLDERS)
66 include (GNUInstallDirs)
7+ if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
8+ set (FRAMEWORK_DIR_DEFAULT Library/Frameworks)
9+ else ()
10+ set (FRAMEWORK_DIR_DEFAULT Frameworks)
11+ endif ()
12+ set (CMAKE_INSTALL_FRAMEWORK_DIR ${FRAMEWORK_DIR_DEFAULT} CACHE PATH "Install directory for frameworks on macOS" )
713else ()
814 set (CMAKE_INSTALL_BINDIR LSL)
915 set (CMAKE_INSTALL_LIBDIR LSL)
1016 set (CMAKE_INSTALL_INCLUDEDIR LSL/include )
17+ set (CMAKE_INSTALL_FRAMEWORK_DIR LSL/Frameworks CACHE PATH "Install directory for frameworks on macOS" )
18+ endif ()
19+
20+ # For Apple frameworks, we need to next the install directories within the framework.
21+ if (APPLE AND LSL_FRAMEWORK)
22+ # For the includes, this is insufficient. Later we will create more accessible symlinks.
23+ set (LSL_INSTALL_INCLUDEDIR ${CMAKE_INSTALL_FRAMEWORK_DIR} /lsl.framework /Versions/A/include )
24+ set (LSL_CONFIG_INSTALL_DIR ${CMAKE_INSTALL_FRAMEWORK_DIR} /lsl.framework /Resources/CMake)
25+ else ()
26+ set (LSL_INSTALL_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR} )
27+ set (LSL_CONFIG_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR} /cmake/lsl)
1128endif ()
1229
1330# Generate a version file for the package.
@@ -27,20 +44,21 @@ install(TARGETS ${LSLTargets}
2744 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
2845 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
2946 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
30- FILE_SET HEADERS DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
47+ FRAMEWORK DESTINATION ${CMAKE_INSTALL_FRAMEWORK_DIR}
48+ FILE_SET HEADERS DESTINATION ${LSL_INSTALL_INCLUDEDIR}
3149)
3250
3351# Generate the LSLConfig.cmake file and mark it for installation
3452install (EXPORT LSLTargets
3553 FILE LSLConfig.cmake
3654 COMPONENT liblsl
3755 NAMESPACE "LSL::"
38- DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/LSL
56+ DESTINATION ${LSL_CONFIG_INSTALL_DIR}
3957)
4058# A common alternative to installing the exported package config file is to generate it from a template.
4159#configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/lslConfig.cmake.in
4260# ${CMAKE_CURRENT_BINARY_DIR}/LSLConfig.cmake
43- # INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/lsl )
61+ # INSTALL_DESTINATION ${LSL_CONFIG_INSTALL_DIR} )
4462# If we use this method, then we need a corresponding install(FILES ...) command to install the generated file.
4563
4664# Install the version file and the helper CMake script.
@@ -49,5 +67,17 @@ install(
4967 cmake/LSLCMake.cmake
5068 ${CMAKE_CURRENT_BINARY_DIR} /LSLConfigVersion.cmake
5169 COMPONENT liblsl
52- DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/LSL
70+ DESTINATION ${LSL_CONFIG_INSTALL_DIR}
5371)
72+
73+ if (APPLE AND LSL_FRAMEWORK)
74+ # Create symlinks for the framework. The variables we want to use to identify the symlink locations
75+ # are not available at install time. Instead, we create a script during configuration time that will
76+ # be run at install time to create the symlinks.
77+ configure_file (
78+ ${CMAKE_CURRENT_SOURCE_DIR} /cmake/CreateFrameworkSymlinks.cmake.in
79+ ${CMAKE_CURRENT_BINARY_DIR} /CreateFrameworkSymlinks.cmake
80+ @ONLY
81+ )
82+ install (SCRIPT ${CMAKE_CURRENT_BINARY_DIR} /CreateFrameworkSymlinks.cmake COMPONENT liblsl)
83+ endif ()
0 commit comments