@@ -52,6 +52,7 @@ if(LSL_SOURCE_DIR)
5252 add_library (LSL::lsl ALIAS lsl )
5353 endif ()
5454 set (LSL_FOUND TRUE )
55+ include ("${LSL_SOURCE_DIR} /cmake/LSLCMake.cmake" )
5556else ()
5657 # Priority 2 & 3: Try to find installed liblsl
5758 set (_lsl_hints)
6061 endif ()
6162 # Common development layout hints (including CLion cmake-build-* directories)
6263 string (TOLOWER "${CMAKE_BUILD_TYPE} " _build_type_lower)
64+ if (NOT _build_type_lower)
65+ set (_build_type_lower "release" )
66+ endif ()
6367 if (MSVC )
6468 set (_clion_build_dir "cmake-build-${_build_type_lower} -visual-studio" )
6569 else ()
9498
9599 if (LSL_FOUND)
96100 message (STATUS "Found installed liblsl: ${LSL_DIR} " )
101+ include ("${LSL_DIR} /LSLCMake.cmake" )
97102 elseif (LSL_FETCH_IF_MISSING)
98103 # Priority 4: Fetch from GitHub
99104 message (STATUS "liblsl not found locally, fetching ${LSL_FETCH_REF} from GitHub..." )
@@ -113,6 +118,7 @@ else()
113118 add_library (LSL::lsl ALIAS lsl )
114119 endif ()
115120 set (LSL_FOUND TRUE )
121+ include ("${liblsl_SOURCE_DIR} /cmake/LSLCMake.cmake" )
116122 message (STATUS "liblsl fetched and configured" )
117123 else ()
118124 message (FATAL_ERROR
@@ -151,12 +157,7 @@ find_package(Threads REQUIRED)
151157# =============================================================================
152158# RPATH Configuration (must be set before targets are created)
153159# =============================================================================
154- if (APPLE )
155- set (CMAKE_INSTALL_RPATH "@executable_path/../Frameworks" )
156- elseif (UNIX AND NOT ANDROID )
157- set (CMAKE_INSTALL_RPATH "$ORIGIN;$ORIGIN/../lib" )
158- endif ()
159- set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE )
160+ LSL_configure_rpath ()
160161
161162# =============================================================================
162163# Application Target
@@ -247,171 +248,43 @@ install(TARGETS ${PROJECT_NAME}
247248# =============================================================================
248249# Bundle liblsl with the application
249250# =============================================================================
250- # Detect if liblsl is from FetchContent (regular target) or find_package (imported)
251- set (_lsl_is_fetched FALSE )
252- if (TARGET lsl)
253- get_target_property (_lsl_imported lsl IMPORTED )
254- if (NOT _lsl_imported)
255- set (_lsl_is_fetched TRUE )
256- endif ()
257- endif ()
258-
259- if (APPLE )
260- # macOS: Install framework into app bundle
261- install (CODE "
262- set(_lsl_binary \" $<TARGET_FILE :LSL ::lsl >\" )
263- cmake_path(GET _lsl_binary PARENT_PATH _lsl_fw_dir) # Versions/A
264- cmake_path(GET _lsl_fw_dir PARENT_PATH _lsl_fw_dir) # Versions
265- cmake_path(GET _lsl_fw_dir PARENT_PATH _lsl_fw_dir) # lsl.framework
266- message(STATUS \" Bundling lsl.framework from: \$ {_lsl_fw_dir}\" )
267- file(COPY \"\$ {_lsl_fw_dir}\"
268- DESTINATION \"\$ {CMAKE_INSTALL_PREFIX}/${INSTALL_BINDIR} /${PROJECT_NAME} .app/Contents/Frameworks\"
269- USE_SOURCE_PERMISSIONS
270- )
271- " )
272- elseif (WIN32 )
273- if (_lsl_is_fetched)
274- install (TARGETS lsl RUNTIME DESTINATION "${INSTALL_BINDIR} " )
275- else ()
276- install (IMPORTED_RUNTIME_ARTIFACTS LSL::lsl RUNTIME DESTINATION "${INSTALL_BINDIR} " )
277- endif ()
278- else ()
279- # Linux: Use modern CMake install commands that handle symlinks properly
280- if (_lsl_is_fetched)
281- install (TARGETS lsl LIBRARY DESTINATION "${INSTALL_LIBDIR} " )
282- else ()
283- install (IMPORTED_RUNTIME_ARTIFACTS LSL::lsl LIBRARY DESTINATION "${INSTALL_LIBDIR} " )
284- endif ()
285- endif ()
251+ LSL_install_liblsl (
252+ DESTINATION "${INSTALL_LIBDIR} "
253+ FRAMEWORK_DESTINATION "${INSTALL_BINDIR} /${PROJECT_NAME} .app/Contents/Frameworks"
254+ )
286255
287256# =============================================================================
288257# Qt Deployment
289258# =============================================================================
290- get_target_property (QT_QMAKE_EXECUTABLE Qt6::qmake IMPORTED_LOCATION )
291- get_filename_component (QT_BIN_DIR "${QT_QMAKE_EXECUTABLE} " DIRECTORY )
292-
293- if (WIN32 )
294- find_program (WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${QT_BIN_DIR} " )
295- if (WINDEPLOYQT_EXECUTABLE)
296- install (CODE "
297- message(STATUS \" Running windeployqt...\" )
298- execute_process(
299- COMMAND \" ${WINDEPLOYQT_EXECUTABLE} \"
300- --no-translations
301- --no-system-d3d-compiler
302- --no-opengl-sw
303- --no-compiler-runtime
304- --dir \"\$ {CMAKE_INSTALL_PREFIX}/${INSTALL_BINDIR} \"
305- \"\$ {CMAKE_INSTALL_PREFIX}/${INSTALL_BINDIR} /${PROJECT_NAME} .exe\"
306- )
307- " )
308- endif ()
309- elseif (APPLE )
310- find_program (MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${QT_BIN_DIR} " )
311- if (MACDEPLOYQT_EXECUTABLE)
312- install (CODE "
313- message(STATUS \" Running macdeployqt...\" )
314- execute_process(
315- COMMAND \" ${MACDEPLOYQT_EXECUTABLE} \"
316- \"\$ {CMAKE_INSTALL_PREFIX}/${INSTALL_BINDIR} /${PROJECT_NAME} .app\"
317- -verbose=0
318- -always-overwrite
319- RESULT_VARIABLE _deploy_result
320- ERROR_QUIET
321- )
322- if(NOT _deploy_result EQUAL 0)
323- message(WARNING \" macdeployqt returned \$ {_deploy_result}\" )
324- endif()
325- " )
326- endif ()
327- endif ()
259+ LSL_deploy_qt (TARGET "${PROJECT_NAME} " DESTINATION "${INSTALL_BINDIR} " )
328260
329261# =============================================================================
330262# MinGW Runtime Deployment
331- # Copy MinGW runtime DLLs so executables work outside the build environment
332263# =============================================================================
333- if (MINGW)
334- get_filename_component (MINGW_BIN_DIR "${CMAKE_CXX_COMPILER} " DIRECTORY )
335- set (MINGW_RUNTIME_DLLS
336- "${MINGW_BIN_DIR} /libgcc_s_seh-1.dll"
337- "${MINGW_BIN_DIR} /libstdc++-6.dll"
338- "${MINGW_BIN_DIR} /libwinpthread-1.dll"
339- )
340- foreach (_dll ${MINGW_RUNTIME_DLLS} )
341- if (EXISTS "${_dll} " )
342- install (FILES "${_dll} " DESTINATION "${INSTALL_BINDIR} " )
343- endif ()
344- endforeach ()
345- endif ()
264+ LSL_install_mingw_runtime (DESTINATION "${INSTALL_BINDIR} " )
346265
347266# =============================================================================
348267# macOS Code Signing
349268# =============================================================================
350- if (APPLE )
351- install (CODE "
352- set(_app \"\$ {CMAKE_INSTALL_PREFIX}/${INSTALL_BINDIR} /${PROJECT_NAME} .app\" )
353- set(_ent \" ${CMAKE_CURRENT_SOURCE_DIR} /app.entitlements\" )
354-
355- message(STATUS \" Signing app bundle...\" )
356- execute_process(
357- COMMAND codesign --force --deep --sign - --entitlements \"\$ {_ent}\" \"\$ {_app}\"
358- RESULT_VARIABLE _sign_result
359- )
360-
361- execute_process(COMMAND codesign --verify --verbose \"\$ {_app}\" RESULT_VARIABLE _verify_result)
362- if(_verify_result EQUAL 0)
363- message(STATUS \" App bundle signature verified successfully\" )
364- else()
365- message(WARNING \" App bundle signature verification failed!\" )
366- endif()
367- " )
368- endif ()
269+ LSL_codesign (
270+ TARGET "${PROJECT_NAME} "
271+ DESTINATION "${INSTALL_BINDIR} "
272+ ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR} /app.entitlements"
273+ BUNDLE
274+ )
369275
370276# =============================================================================
371277# CPack Configuration
372278# =============================================================================
373-
374- # Detect target architecture
375- if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64|ARM64)" )
376- set (PACKAGE_ARCH "arm64" )
377- elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|amd64|AMD64)" )
378- set (PACKAGE_ARCH "amd64" )
379- elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv7|arm)" )
380- set (PACKAGE_ARCH "armhf" )
381- elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(i.86|x86)" )
382- set (PACKAGE_ARCH "i386" )
383- else ()
384- set (PACKAGE_ARCH "${CMAKE_SYSTEM_PROCESSOR} " )
385- endif ()
386-
387- # Detect OS for package naming
388- if (APPLE )
389- set (PACKAGE_OS "macOS" )
390- elseif (WIN32 )
391- set (PACKAGE_OS "Win" )
392- else ()
393- find_program (LSB_RELEASE lsb_release )
394- if (LSB_RELEASE)
395- execute_process (COMMAND ${LSB_RELEASE} -cs
396- OUTPUT_VARIABLE _codename
397- OUTPUT_STRIP_TRAILING_WHITESPACE
398- ERROR_QUIET )
399- if (_codename AND NOT _codename STREQUAL "n/a" )
400- set (PACKAGE_OS "${_codename} " )
401- else ()
402- set (PACKAGE_OS "Linux" )
403- endif ()
404- else ()
405- set (PACKAGE_OS "Linux" )
406- endif ()
407- endif ()
279+ LSL_get_target_arch ()
280+ LSL_get_os_name ()
408281
409282set (CPACK_PACKAGE_NAME "${PROJECT_NAME} " )
410283set (CPACK_PACKAGE_VERSION "${PROJECT_VERSION} " )
411284set (CPACK_PACKAGE_VENDOR "Labstreaminglayer" )
412285set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_DESCRIPTION} " )
413286set (CPACK_PACKAGE_HOMEPAGE_URL "${PROJECT_HOMEPAGE_URL} " )
414- set (CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME} -${PROJECT_VERSION} -${PACKAGE_OS } _${PACKAGE_ARCH } " )
287+ set (CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME} -${PROJECT_VERSION} -${LSL_OS } _${LSL_ARCH } " )
415288set (CPACK_STRIP_FILES ON )
416289
417290if (WIN32 )
0 commit comments