labrecorder 1.0.0rc0__cp311-cp311-macosx_26_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of labrecorder might be problematic. Click here for more details.
- Frameworks/lsl.framework/Versions/A/Resources/CMake/LSLCMake.cmake +495 -0
- Frameworks/lsl.framework/Versions/A/Resources/CMake/LSLConfig-release.cmake +19 -0
- Frameworks/lsl.framework/Versions/A/Resources/CMake/LSLConfig.cmake +102 -0
- Frameworks/lsl.framework/Versions/A/Resources/CMake/LSLConfigVersion.cmake +43 -0
- Frameworks/lsl.framework/Versions/A/Resources/Info.plist +28 -0
- Frameworks/lsl.framework/Versions/A/_CodeSignature/CodeResources +240 -0
- Frameworks/lsl.framework/Versions/A/include/lsl/common.h +229 -0
- Frameworks/lsl.framework/Versions/A/include/lsl/inlet.h +309 -0
- Frameworks/lsl.framework/Versions/A/include/lsl/outlet.h +252 -0
- Frameworks/lsl.framework/Versions/A/include/lsl/resolver.h +156 -0
- Frameworks/lsl.framework/Versions/A/include/lsl/streaminfo.h +196 -0
- Frameworks/lsl.framework/Versions/A/include/lsl/types.h +60 -0
- Frameworks/lsl.framework/Versions/A/include/lsl/xml.h +103 -0
- Frameworks/lsl.framework/Versions/A/include/lsl_c.h +36 -0
- Frameworks/lsl.framework/Versions/A/include/lsl_cpp.h +1720 -0
- Frameworks/lsl.framework/Versions/A/lsl +0 -0
- Frameworks/lsl.framework/lsl +0 -0
- LICENSE +21 -0
- LabRecorder.cfg +69 -0
- LabRecorderCLI +0 -0
- README.md +184 -0
- labrecorder-1.0.0rc0.dist-info/METADATA +193 -0
- labrecorder-1.0.0rc0.dist-info/RECORD +27 -0
- labrecorder-1.0.0rc0.dist-info/WHEEL +5 -0
- labrecorder-1.0.0rc0.dist-info/licenses/LICENSE +21 -0
- labrecorder.cpython-311-darwin.so +0 -0
- libxdfwriter.a +0 -0
|
@@ -0,0 +1,495 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# LSLCMake.cmake - Common CMake utilities for LSL applications
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# This module provides helper functions for LSL applications.
|
|
5
|
+
#
|
|
6
|
+
# Functions:
|
|
7
|
+
# LSL_get_target_arch() - Detect target architecture for package naming
|
|
8
|
+
# LSL_get_os_name() - Detect OS name for package naming
|
|
9
|
+
# LSL_configure_rpath() - Configure RPATH for all platforms
|
|
10
|
+
# LSL_install_liblsl() - Install liblsl with the application
|
|
11
|
+
# LSL_install_mingw_runtime() - Install MinGW runtime DLLs (Windows only)
|
|
12
|
+
# LSL_deploy_qt() - Deploy Qt libraries with the application
|
|
13
|
+
# LSL_codesign() - Sign macOS app bundles with entitlements
|
|
14
|
+
#
|
|
15
|
+
# Usage:
|
|
16
|
+
# find_package(LSL REQUIRED)
|
|
17
|
+
# include(LSLCMake) # Now available after finding LSL
|
|
18
|
+
#
|
|
19
|
+
# LSL_configure_rpath() # Call before creating targets
|
|
20
|
+
# # ... create your targets ...
|
|
21
|
+
# LSL_install_liblsl(DESTINATION "." FRAMEWORK_DESTINATION "MyApp.app/Contents/Frameworks")
|
|
22
|
+
# LSL_install_mingw_runtime(DESTINATION ".")
|
|
23
|
+
# =============================================================================
|
|
24
|
+
|
|
25
|
+
cmake_minimum_required(VERSION 3.28)
|
|
26
|
+
|
|
27
|
+
message(STATUS "Included LSLCMake helpers, rev. 18")
|
|
28
|
+
|
|
29
|
+
# =============================================================================
|
|
30
|
+
# LSL_get_target_arch()
|
|
31
|
+
# =============================================================================
|
|
32
|
+
# Detects the target architecture by compiling a small test file.
|
|
33
|
+
# Works correctly even when cross-compiling.
|
|
34
|
+
#
|
|
35
|
+
# Sets: LSL_ARCH (cached) - one of: arm64, arm, i386, amd64, ia64, ppc64, powerpc, unknown
|
|
36
|
+
#
|
|
37
|
+
# Example:
|
|
38
|
+
# LSL_get_target_arch()
|
|
39
|
+
# message(STATUS "Building for ${LSL_ARCH}")
|
|
40
|
+
# =============================================================================
|
|
41
|
+
function(LSL_get_target_arch)
|
|
42
|
+
if(LSL_ARCH)
|
|
43
|
+
return()
|
|
44
|
+
endif()
|
|
45
|
+
file(WRITE "${CMAKE_BINARY_DIR}/arch.c" "
|
|
46
|
+
#if defined(__ARM_ARCH_ISA_A64) || defined(__aarch64__)
|
|
47
|
+
#error cmake_ARCH arm64
|
|
48
|
+
#elif defined(__arm__) || defined(__TARGET_ARCH_ARM)
|
|
49
|
+
#error cmake_ARCH arm
|
|
50
|
+
#elif defined(__i386) || defined(__i386__) || defined(_M_IX86)
|
|
51
|
+
#error cmake_ARCH i386
|
|
52
|
+
#elif defined(__x86_64) || defined(__x86_64__) || defined(__amd64) || defined(_M_X64)
|
|
53
|
+
#error cmake_ARCH amd64
|
|
54
|
+
#elif defined(__ia64) || defined(__ia64__) || defined(_M_IA64)
|
|
55
|
+
#error cmake_ARCH ia64
|
|
56
|
+
#elif defined(__ppc__) || defined(__ppc) || defined(__powerpc__) \\
|
|
57
|
+
|| defined(_ARCH_COM) || defined(_ARCH_PWR) || defined(_ARCH_PPC) \\
|
|
58
|
+
|| defined(_M_MPPC) || defined(_M_PPC)
|
|
59
|
+
#if defined(__ppc64__) || defined(__powerpc64__) || defined(__64BIT__)
|
|
60
|
+
#error cmake_ARCH ppc64
|
|
61
|
+
#else
|
|
62
|
+
#error cmake_ARCH powerpc
|
|
63
|
+
#endif
|
|
64
|
+
#else
|
|
65
|
+
#error cmake_ARCH unknown
|
|
66
|
+
#endif")
|
|
67
|
+
enable_language(C)
|
|
68
|
+
try_compile(dummy_result "${CMAKE_BINARY_DIR}"
|
|
69
|
+
SOURCES "${CMAKE_BINARY_DIR}/arch.c"
|
|
70
|
+
OUTPUT_VARIABLE ARCH)
|
|
71
|
+
string(REGEX REPLACE ".*cmake_ARCH ([a-z0-9]+).*" "\\1" ARCH "${ARCH}")
|
|
72
|
+
message(STATUS "LSL: Detected architecture: ${ARCH}")
|
|
73
|
+
set(LSL_ARCH "${ARCH}" CACHE INTERNAL "Target architecture")
|
|
74
|
+
endfunction()
|
|
75
|
+
|
|
76
|
+
# =============================================================================
|
|
77
|
+
# LSL_get_os_name()
|
|
78
|
+
# =============================================================================
|
|
79
|
+
# Detects the OS name for package naming.
|
|
80
|
+
# On Linux, attempts to get the distribution codename (e.g., "jammy", "noble").
|
|
81
|
+
#
|
|
82
|
+
# Sets: LSL_OS (cached) - e.g., "macOS", "Win", "jammy", "Linux"
|
|
83
|
+
#
|
|
84
|
+
# Example:
|
|
85
|
+
# LSL_get_os_name()
|
|
86
|
+
# set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}-${LSL_OS}_${LSL_ARCH}")
|
|
87
|
+
# =============================================================================
|
|
88
|
+
function(LSL_get_os_name)
|
|
89
|
+
if(LSL_OS)
|
|
90
|
+
return()
|
|
91
|
+
endif()
|
|
92
|
+
if(APPLE)
|
|
93
|
+
set(_os "macOS")
|
|
94
|
+
elseif(WIN32)
|
|
95
|
+
set(_os "Win")
|
|
96
|
+
else()
|
|
97
|
+
# Try to get Linux distribution codename
|
|
98
|
+
find_program(LSB_RELEASE lsb_release)
|
|
99
|
+
if(LSB_RELEASE)
|
|
100
|
+
execute_process(
|
|
101
|
+
COMMAND ${LSB_RELEASE} -cs
|
|
102
|
+
OUTPUT_VARIABLE _codename
|
|
103
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
104
|
+
ERROR_QUIET
|
|
105
|
+
)
|
|
106
|
+
if(_codename AND NOT _codename STREQUAL "n/a")
|
|
107
|
+
set(_os "${_codename}")
|
|
108
|
+
else()
|
|
109
|
+
set(_os "Linux")
|
|
110
|
+
endif()
|
|
111
|
+
else()
|
|
112
|
+
set(_os "Linux")
|
|
113
|
+
endif()
|
|
114
|
+
endif()
|
|
115
|
+
message(STATUS "LSL: Detected OS: ${_os}")
|
|
116
|
+
set(LSL_OS "${_os}" CACHE INTERNAL "Target OS name")
|
|
117
|
+
endfunction()
|
|
118
|
+
|
|
119
|
+
# =============================================================================
|
|
120
|
+
# LSL_configure_rpath()
|
|
121
|
+
# =============================================================================
|
|
122
|
+
# Configures RPATH for the current project. Must be called BEFORE creating targets.
|
|
123
|
+
#
|
|
124
|
+
# On macOS: Sets @executable_path-relative paths for both app bundles and CLI tools
|
|
125
|
+
# On Linux: Sets $ORIGIN-relative paths
|
|
126
|
+
# On Windows: No-op (Windows uses PATH / same-directory lookup)
|
|
127
|
+
#
|
|
128
|
+
# Example:
|
|
129
|
+
# LSL_configure_rpath()
|
|
130
|
+
# add_executable(MyApp main.cpp)
|
|
131
|
+
# =============================================================================
|
|
132
|
+
function(LSL_configure_rpath)
|
|
133
|
+
if(APPLE)
|
|
134
|
+
# Support both:
|
|
135
|
+
# - App bundles: @executable_path/../Frameworks
|
|
136
|
+
# - CLI tools: @executable_path/Frameworks or @executable_path
|
|
137
|
+
set(CMAKE_INSTALL_RPATH
|
|
138
|
+
"@executable_path/../Frameworks"
|
|
139
|
+
"@executable_path/Frameworks"
|
|
140
|
+
"@executable_path"
|
|
141
|
+
PARENT_SCOPE
|
|
142
|
+
)
|
|
143
|
+
elseif(UNIX AND NOT ANDROID)
|
|
144
|
+
set(CMAKE_INSTALL_RPATH "$ORIGIN;$ORIGIN/../lib" PARENT_SCOPE)
|
|
145
|
+
endif()
|
|
146
|
+
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE PARENT_SCOPE)
|
|
147
|
+
endfunction()
|
|
148
|
+
|
|
149
|
+
# =============================================================================
|
|
150
|
+
# LSL_install_liblsl()
|
|
151
|
+
# =============================================================================
|
|
152
|
+
# Installs liblsl alongside the application, handling platform differences:
|
|
153
|
+
# - macOS: Copies lsl.framework to specified destination
|
|
154
|
+
# - Windows: Copies lsl.dll
|
|
155
|
+
# - Linux: Copies liblsl.so with proper symlinks
|
|
156
|
+
#
|
|
157
|
+
# Automatically detects whether liblsl was found via find_package (imported target)
|
|
158
|
+
# or built via FetchContent (regular target) and handles each case appropriately.
|
|
159
|
+
#
|
|
160
|
+
# Arguments:
|
|
161
|
+
# DESTINATION - Install destination for DLL/so (required for Windows/Linux)
|
|
162
|
+
# FRAMEWORK_DESTINATION - Install destination for framework (required for macOS GUI apps)
|
|
163
|
+
#
|
|
164
|
+
# Example (GUI app):
|
|
165
|
+
# LSL_install_liblsl(
|
|
166
|
+
# DESTINATION "."
|
|
167
|
+
# FRAMEWORK_DESTINATION "${PROJECT_NAME}.app/Contents/Frameworks"
|
|
168
|
+
# )
|
|
169
|
+
#
|
|
170
|
+
# Example (CLI app or Linux/Windows):
|
|
171
|
+
# LSL_install_liblsl(DESTINATION "${CMAKE_INSTALL_LIBDIR}")
|
|
172
|
+
# =============================================================================
|
|
173
|
+
function(LSL_install_liblsl)
|
|
174
|
+
cmake_parse_arguments(ARG "" "DESTINATION;FRAMEWORK_DESTINATION" "" ${ARGN})
|
|
175
|
+
|
|
176
|
+
# Detect if liblsl is from FetchContent (regular target) or find_package (imported)
|
|
177
|
+
set(_lsl_is_fetched FALSE)
|
|
178
|
+
if(TARGET lsl)
|
|
179
|
+
get_target_property(_lsl_imported lsl IMPORTED)
|
|
180
|
+
if(NOT _lsl_imported)
|
|
181
|
+
set(_lsl_is_fetched TRUE)
|
|
182
|
+
endif()
|
|
183
|
+
endif()
|
|
184
|
+
|
|
185
|
+
if(APPLE)
|
|
186
|
+
if(NOT ARG_FRAMEWORK_DESTINATION AND NOT ARG_DESTINATION)
|
|
187
|
+
message(FATAL_ERROR "LSL_install_liblsl: FRAMEWORK_DESTINATION or DESTINATION required on macOS")
|
|
188
|
+
endif()
|
|
189
|
+
# Determine destination - prefer FRAMEWORK_DESTINATION for GUI apps
|
|
190
|
+
set(_fw_dest "${ARG_FRAMEWORK_DESTINATION}")
|
|
191
|
+
if(NOT _fw_dest)
|
|
192
|
+
set(_fw_dest "${ARG_DESTINATION}")
|
|
193
|
+
endif()
|
|
194
|
+
# Use install(CODE) with generator expressions for FetchContent compatibility
|
|
195
|
+
install(CODE "
|
|
196
|
+
set(_lsl_binary \"$<TARGET_FILE:LSL::lsl>\")
|
|
197
|
+
cmake_path(GET _lsl_binary PARENT_PATH _lsl_fw_dir) # Versions/A
|
|
198
|
+
cmake_path(GET _lsl_fw_dir PARENT_PATH _lsl_fw_dir) # Versions
|
|
199
|
+
cmake_path(GET _lsl_fw_dir PARENT_PATH _lsl_fw_dir) # lsl.framework
|
|
200
|
+
message(STATUS \"LSL: Bundling lsl.framework from: \${_lsl_fw_dir}\")
|
|
201
|
+
file(COPY \"\${_lsl_fw_dir}\"
|
|
202
|
+
DESTINATION \"\${CMAKE_INSTALL_PREFIX}/${_fw_dest}\"
|
|
203
|
+
USE_SOURCE_PERMISSIONS
|
|
204
|
+
)
|
|
205
|
+
")
|
|
206
|
+
elseif(WIN32)
|
|
207
|
+
if(NOT ARG_DESTINATION)
|
|
208
|
+
message(FATAL_ERROR "LSL_install_liblsl: DESTINATION required on Windows")
|
|
209
|
+
endif()
|
|
210
|
+
if(_lsl_is_fetched)
|
|
211
|
+
install(TARGETS lsl RUNTIME DESTINATION "${ARG_DESTINATION}")
|
|
212
|
+
else()
|
|
213
|
+
install(IMPORTED_RUNTIME_ARTIFACTS LSL::lsl RUNTIME DESTINATION "${ARG_DESTINATION}")
|
|
214
|
+
endif()
|
|
215
|
+
else()
|
|
216
|
+
# Linux
|
|
217
|
+
if(NOT ARG_DESTINATION)
|
|
218
|
+
message(FATAL_ERROR "LSL_install_liblsl: DESTINATION required on Linux")
|
|
219
|
+
endif()
|
|
220
|
+
if(_lsl_is_fetched)
|
|
221
|
+
install(TARGETS lsl LIBRARY DESTINATION "${ARG_DESTINATION}")
|
|
222
|
+
else()
|
|
223
|
+
install(IMPORTED_RUNTIME_ARTIFACTS LSL::lsl LIBRARY DESTINATION "${ARG_DESTINATION}")
|
|
224
|
+
endif()
|
|
225
|
+
endif()
|
|
226
|
+
endfunction()
|
|
227
|
+
|
|
228
|
+
# =============================================================================
|
|
229
|
+
# LSL_install_mingw_runtime()
|
|
230
|
+
# =============================================================================
|
|
231
|
+
# Installs MinGW runtime DLLs so executables work outside the build environment.
|
|
232
|
+
# Only has effect when building with MinGW; no-op on other compilers.
|
|
233
|
+
#
|
|
234
|
+
# Arguments:
|
|
235
|
+
# DESTINATION - Install destination for DLLs (required)
|
|
236
|
+
#
|
|
237
|
+
# Example:
|
|
238
|
+
# LSL_install_mingw_runtime(DESTINATION ".")
|
|
239
|
+
# =============================================================================
|
|
240
|
+
function(LSL_install_mingw_runtime)
|
|
241
|
+
if(NOT MINGW)
|
|
242
|
+
return()
|
|
243
|
+
endif()
|
|
244
|
+
|
|
245
|
+
cmake_parse_arguments(ARG "" "DESTINATION" "" ${ARGN})
|
|
246
|
+
|
|
247
|
+
if(NOT ARG_DESTINATION)
|
|
248
|
+
message(FATAL_ERROR "LSL_install_mingw_runtime: DESTINATION required")
|
|
249
|
+
endif()
|
|
250
|
+
|
|
251
|
+
get_filename_component(MINGW_BIN_DIR "${CMAKE_CXX_COMPILER}" DIRECTORY)
|
|
252
|
+
set(MINGW_RUNTIME_DLLS
|
|
253
|
+
"${MINGW_BIN_DIR}/libgcc_s_seh-1.dll"
|
|
254
|
+
"${MINGW_BIN_DIR}/libstdc++-6.dll"
|
|
255
|
+
"${MINGW_BIN_DIR}/libwinpthread-1.dll"
|
|
256
|
+
)
|
|
257
|
+
foreach(_dll ${MINGW_RUNTIME_DLLS})
|
|
258
|
+
if(EXISTS "${_dll}")
|
|
259
|
+
install(FILES "${_dll}" DESTINATION "${ARG_DESTINATION}")
|
|
260
|
+
endif()
|
|
261
|
+
endforeach()
|
|
262
|
+
endfunction()
|
|
263
|
+
|
|
264
|
+
# =============================================================================
|
|
265
|
+
# LSL_deploy_qt()
|
|
266
|
+
# =============================================================================
|
|
267
|
+
# Deploys Qt libraries alongside the application using platform-specific tools.
|
|
268
|
+
# - Windows: Uses windeployqt to copy Qt DLLs and plugins
|
|
269
|
+
# - macOS: Uses macdeployqt to bundle Qt frameworks
|
|
270
|
+
# - Linux: No-op (Qt libraries typically come from system packages)
|
|
271
|
+
#
|
|
272
|
+
# Requires Qt6::qmake target to be available (from find_package(Qt6)).
|
|
273
|
+
#
|
|
274
|
+
# Arguments:
|
|
275
|
+
# TARGET - Target name (without .exe or .app extension)
|
|
276
|
+
# DESTINATION - Install destination directory
|
|
277
|
+
#
|
|
278
|
+
# Example:
|
|
279
|
+
# LSL_deploy_qt(TARGET "${PROJECT_NAME}" DESTINATION ".")
|
|
280
|
+
# =============================================================================
|
|
281
|
+
function(LSL_deploy_qt)
|
|
282
|
+
cmake_parse_arguments(ARG "" "TARGET;DESTINATION" "" ${ARGN})
|
|
283
|
+
|
|
284
|
+
if(NOT ARG_TARGET)
|
|
285
|
+
message(FATAL_ERROR "LSL_deploy_qt: TARGET required")
|
|
286
|
+
endif()
|
|
287
|
+
if(NOT ARG_DESTINATION)
|
|
288
|
+
message(FATAL_ERROR "LSL_deploy_qt: DESTINATION required")
|
|
289
|
+
endif()
|
|
290
|
+
|
|
291
|
+
if(NOT TARGET Qt6::qmake)
|
|
292
|
+
message(WARNING "LSL_deploy_qt: Qt6::qmake not found, skipping Qt deployment")
|
|
293
|
+
return()
|
|
294
|
+
endif()
|
|
295
|
+
|
|
296
|
+
get_target_property(_qt_qmake_executable Qt6::qmake IMPORTED_LOCATION)
|
|
297
|
+
get_filename_component(_qt_bin_dir "${_qt_qmake_executable}" DIRECTORY)
|
|
298
|
+
|
|
299
|
+
if(WIN32)
|
|
300
|
+
find_program(_windeployqt_executable windeployqt HINTS "${_qt_bin_dir}")
|
|
301
|
+
if(_windeployqt_executable)
|
|
302
|
+
install(CODE "
|
|
303
|
+
message(STATUS \"Running windeployqt...\")
|
|
304
|
+
execute_process(
|
|
305
|
+
COMMAND \"${_windeployqt_executable}\"
|
|
306
|
+
--no-translations
|
|
307
|
+
--no-system-d3d-compiler
|
|
308
|
+
--no-opengl-sw
|
|
309
|
+
--no-compiler-runtime
|
|
310
|
+
--dir \"\${CMAKE_INSTALL_PREFIX}/${ARG_DESTINATION}\"
|
|
311
|
+
\"\${CMAKE_INSTALL_PREFIX}/${ARG_DESTINATION}/${ARG_TARGET}.exe\"
|
|
312
|
+
)
|
|
313
|
+
")
|
|
314
|
+
else()
|
|
315
|
+
message(WARNING "LSL_deploy_qt: windeployqt not found")
|
|
316
|
+
endif()
|
|
317
|
+
elseif(APPLE)
|
|
318
|
+
find_program(_macdeployqt_executable macdeployqt HINTS "${_qt_bin_dir}")
|
|
319
|
+
if(_macdeployqt_executable)
|
|
320
|
+
install(CODE "
|
|
321
|
+
message(STATUS \"Running macdeployqt...\")
|
|
322
|
+
execute_process(
|
|
323
|
+
COMMAND \"${_macdeployqt_executable}\"
|
|
324
|
+
\"\${CMAKE_INSTALL_PREFIX}/${ARG_DESTINATION}/${ARG_TARGET}.app\"
|
|
325
|
+
-verbose=0
|
|
326
|
+
-always-overwrite
|
|
327
|
+
RESULT_VARIABLE _deploy_result
|
|
328
|
+
ERROR_QUIET
|
|
329
|
+
)
|
|
330
|
+
if(NOT _deploy_result EQUAL 0)
|
|
331
|
+
message(WARNING \"macdeployqt returned \${_deploy_result}\")
|
|
332
|
+
endif()
|
|
333
|
+
")
|
|
334
|
+
else()
|
|
335
|
+
message(WARNING "LSL_deploy_qt: macdeployqt not found")
|
|
336
|
+
endif()
|
|
337
|
+
endif()
|
|
338
|
+
# Linux: No-op - Qt libraries typically installed via system packages
|
|
339
|
+
endfunction()
|
|
340
|
+
|
|
341
|
+
# =============================================================================
|
|
342
|
+
# LSL_codesign()
|
|
343
|
+
# =============================================================================
|
|
344
|
+
# Signs macOS app bundles or executables with entitlements for ad-hoc local development.
|
|
345
|
+
# Uses the "-" identity (ad-hoc signing) which doesn't require a Developer ID certificate.
|
|
346
|
+
#
|
|
347
|
+
# For release builds with proper signing/notarization, use a separate CI script
|
|
348
|
+
# with an actual Developer ID certificate.
|
|
349
|
+
#
|
|
350
|
+
# Arguments:
|
|
351
|
+
# TARGET - Target name (without .app extension for bundles)
|
|
352
|
+
# DESTINATION - Install destination directory
|
|
353
|
+
# ENTITLEMENTS - Path to entitlements file (required)
|
|
354
|
+
# BUNDLE - If set, signs as app bundle (.app), otherwise signs as executable
|
|
355
|
+
# FRAMEWORK - Optional: Path to framework to sign before the executable (for CLI apps)
|
|
356
|
+
#
|
|
357
|
+
# Example (GUI app bundle):
|
|
358
|
+
# LSL_codesign(
|
|
359
|
+
# TARGET "${PROJECT_NAME}"
|
|
360
|
+
# DESTINATION "${INSTALL_BINDIR}"
|
|
361
|
+
# ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/app.entitlements"
|
|
362
|
+
# BUNDLE
|
|
363
|
+
# )
|
|
364
|
+
#
|
|
365
|
+
# Example (CLI executable with framework):
|
|
366
|
+
# LSL_codesign(
|
|
367
|
+
# TARGET "${PROJECT_NAME}CLI"
|
|
368
|
+
# DESTINATION "${INSTALL_BINDIR}"
|
|
369
|
+
# ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/app.entitlements"
|
|
370
|
+
# FRAMEWORK "Frameworks/lsl.framework"
|
|
371
|
+
# )
|
|
372
|
+
# =============================================================================
|
|
373
|
+
function(LSL_codesign)
|
|
374
|
+
if(NOT APPLE)
|
|
375
|
+
return()
|
|
376
|
+
endif()
|
|
377
|
+
|
|
378
|
+
cmake_parse_arguments(ARG "BUNDLE" "TARGET;DESTINATION;ENTITLEMENTS;FRAMEWORK" "" ${ARGN})
|
|
379
|
+
|
|
380
|
+
if(NOT ARG_TARGET)
|
|
381
|
+
message(FATAL_ERROR "LSL_codesign: TARGET required")
|
|
382
|
+
endif()
|
|
383
|
+
if(NOT ARG_DESTINATION)
|
|
384
|
+
message(FATAL_ERROR "LSL_codesign: DESTINATION required")
|
|
385
|
+
endif()
|
|
386
|
+
if(NOT ARG_ENTITLEMENTS)
|
|
387
|
+
message(FATAL_ERROR "LSL_codesign: ENTITLEMENTS required")
|
|
388
|
+
endif()
|
|
389
|
+
|
|
390
|
+
if(ARG_BUNDLE)
|
|
391
|
+
# Sign app bundle
|
|
392
|
+
install(CODE "
|
|
393
|
+
set(_app \"\${CMAKE_INSTALL_PREFIX}/${ARG_DESTINATION}/${ARG_TARGET}.app\")
|
|
394
|
+
set(_ent \"${ARG_ENTITLEMENTS}\")
|
|
395
|
+
|
|
396
|
+
message(STATUS \"Signing app bundle...\")
|
|
397
|
+
execute_process(
|
|
398
|
+
COMMAND codesign --force --deep --sign - --entitlements \"\${_ent}\" \"\${_app}\"
|
|
399
|
+
RESULT_VARIABLE _sign_result
|
|
400
|
+
)
|
|
401
|
+
|
|
402
|
+
execute_process(COMMAND codesign --verify --verbose \"\${_app}\" RESULT_VARIABLE _verify_result)
|
|
403
|
+
if(_verify_result EQUAL 0)
|
|
404
|
+
message(STATUS \"App bundle signature verified successfully\")
|
|
405
|
+
else()
|
|
406
|
+
message(WARNING \"App bundle signature verification failed!\")
|
|
407
|
+
endif()
|
|
408
|
+
")
|
|
409
|
+
else()
|
|
410
|
+
# Sign executable (and optionally framework first)
|
|
411
|
+
install(CODE "
|
|
412
|
+
set(_exe \"\${CMAKE_INSTALL_PREFIX}/${ARG_DESTINATION}/${ARG_TARGET}\")
|
|
413
|
+
set(_ent \"${ARG_ENTITLEMENTS}\")
|
|
414
|
+
|
|
415
|
+
# Sign framework first if specified
|
|
416
|
+
if(NOT \"${ARG_FRAMEWORK}\" STREQUAL \"\")
|
|
417
|
+
set(_fw \"\${CMAKE_INSTALL_PREFIX}/${ARG_FRAMEWORK}\")
|
|
418
|
+
message(STATUS \"Signing framework: \${_fw}\")
|
|
419
|
+
execute_process(COMMAND codesign --force --sign - \"\${_fw}\")
|
|
420
|
+
endif()
|
|
421
|
+
|
|
422
|
+
message(STATUS \"Signing executable: \${_exe}\")
|
|
423
|
+
execute_process(
|
|
424
|
+
COMMAND codesign --force --sign - --entitlements \"\${_ent}\" \"\${_exe}\"
|
|
425
|
+
RESULT_VARIABLE _sign_result
|
|
426
|
+
)
|
|
427
|
+
")
|
|
428
|
+
endif()
|
|
429
|
+
endfunction()
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
# =============================================================================
|
|
433
|
+
# DEPRECATED FUNCTIONS
|
|
434
|
+
# =============================================================================
|
|
435
|
+
# The following functions are deprecated and will be removed in a future version.
|
|
436
|
+
# They are kept for backward compatibility with existing liblsl builds.
|
|
437
|
+
# New applications should use the modern functions above.
|
|
438
|
+
# =============================================================================
|
|
439
|
+
|
|
440
|
+
# Deprecated: Use standard install() commands instead
|
|
441
|
+
function(installLSLApp target)
|
|
442
|
+
message(DEPRECATION "installLSLApp() is deprecated. Use standard CMake install() commands.")
|
|
443
|
+
|
|
444
|
+
# Basic install for the target
|
|
445
|
+
include(GNUInstallDirs)
|
|
446
|
+
install(TARGETS ${target}
|
|
447
|
+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
448
|
+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
449
|
+
BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
450
|
+
)
|
|
451
|
+
endfunction()
|
|
452
|
+
|
|
453
|
+
# Deprecated: Use standard install(FILES/DIRECTORY) instead
|
|
454
|
+
function(installLSLAuxFiles target)
|
|
455
|
+
message(DEPRECATION "installLSLAuxFiles() is deprecated. Use standard CMake install() commands.")
|
|
456
|
+
|
|
457
|
+
include(GNUInstallDirs)
|
|
458
|
+
set(destdir "${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}")
|
|
459
|
+
|
|
460
|
+
if("${ARGV1}" STREQUAL "directory")
|
|
461
|
+
install(DIRECTORY ${ARGV2} DESTINATION ${destdir})
|
|
462
|
+
else()
|
|
463
|
+
install(FILES ${ARGN} DESTINATION ${destdir})
|
|
464
|
+
endif()
|
|
465
|
+
endfunction()
|
|
466
|
+
|
|
467
|
+
# Deprecated: Apps should configure CPack themselves
|
|
468
|
+
macro(LSLGenerateCPackConfig)
|
|
469
|
+
message(DEPRECATION "LSLGenerateCPackConfig() is deprecated. Configure CPack directly in your CMakeLists.txt.")
|
|
470
|
+
|
|
471
|
+
LSL_get_target_arch()
|
|
472
|
+
LSL_get_os_name()
|
|
473
|
+
|
|
474
|
+
set(CPACK_PACKAGE_NAME "${PROJECT_NAME}")
|
|
475
|
+
set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}")
|
|
476
|
+
if(NOT CPACK_PACKAGE_VENDOR)
|
|
477
|
+
set(CPACK_PACKAGE_VENDOR "Labstreaminglayer")
|
|
478
|
+
endif()
|
|
479
|
+
set(CPACK_STRIP_FILES ON)
|
|
480
|
+
|
|
481
|
+
if(APPLE)
|
|
482
|
+
set(CPACK_GENERATOR TGZ)
|
|
483
|
+
elseif(WIN32)
|
|
484
|
+
set(CPACK_GENERATOR ZIP)
|
|
485
|
+
else()
|
|
486
|
+
set(CPACK_GENERATOR DEB TGZ)
|
|
487
|
+
if(NOT CPACK_DEBIAN_PACKAGE_MAINTAINER)
|
|
488
|
+
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "LabStreamingLayer Developers")
|
|
489
|
+
endif()
|
|
490
|
+
set(CPACK_DEBIAN_PACKAGE_SECTION "science")
|
|
491
|
+
endif()
|
|
492
|
+
|
|
493
|
+
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}-${LSL_OS}_${LSL_ARCH}")
|
|
494
|
+
include(CPack)
|
|
495
|
+
endmacro()
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#----------------------------------------------------------------
|
|
2
|
+
# Generated CMake target import file for configuration "Release".
|
|
3
|
+
#----------------------------------------------------------------
|
|
4
|
+
|
|
5
|
+
# Commands may need to know the format version.
|
|
6
|
+
set(CMAKE_IMPORT_FILE_VERSION 1)
|
|
7
|
+
|
|
8
|
+
# Import target "LSL::lsl" for configuration "Release"
|
|
9
|
+
set_property(TARGET LSL::lsl APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
|
|
10
|
+
set_target_properties(LSL::lsl PROPERTIES
|
|
11
|
+
IMPORTED_LOCATION_RELEASE "/opt/homebrew/Cellar/lsl/1.17.4/Frameworks/lsl.framework/Versions/A/lsl"
|
|
12
|
+
IMPORTED_SONAME_RELEASE "@rpath/lsl.framework/Versions/A/lsl"
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
list(APPEND _cmake_import_check_targets LSL::lsl )
|
|
16
|
+
list(APPEND _cmake_import_check_files_for_LSL::lsl "/opt/homebrew/Cellar/lsl/1.17.4/Frameworks/lsl.framework/Versions/A/lsl" )
|
|
17
|
+
|
|
18
|
+
# Commands beyond this point should not need to know the version.
|
|
19
|
+
set(CMAKE_IMPORT_FILE_VERSION)
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Generated by CMake
|
|
2
|
+
|
|
3
|
+
if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8)
|
|
4
|
+
message(FATAL_ERROR "CMake >= 2.8.3 required")
|
|
5
|
+
endif()
|
|
6
|
+
if(CMAKE_VERSION VERSION_LESS "2.8.3")
|
|
7
|
+
message(FATAL_ERROR "CMake >= 2.8.3 required")
|
|
8
|
+
endif()
|
|
9
|
+
cmake_policy(PUSH)
|
|
10
|
+
cmake_policy(VERSION 2.8.3...4.0)
|
|
11
|
+
#----------------------------------------------------------------
|
|
12
|
+
# Generated CMake target import file.
|
|
13
|
+
#----------------------------------------------------------------
|
|
14
|
+
|
|
15
|
+
# Commands may need to know the format version.
|
|
16
|
+
set(CMAKE_IMPORT_FILE_VERSION 1)
|
|
17
|
+
|
|
18
|
+
# Protect against multiple inclusion, which would fail when already imported targets are added once more.
|
|
19
|
+
set(_cmake_targets_defined "")
|
|
20
|
+
set(_cmake_targets_not_defined "")
|
|
21
|
+
set(_cmake_expected_targets "")
|
|
22
|
+
foreach(_cmake_expected_target IN ITEMS LSL::lsl)
|
|
23
|
+
list(APPEND _cmake_expected_targets "${_cmake_expected_target}")
|
|
24
|
+
if(TARGET "${_cmake_expected_target}")
|
|
25
|
+
list(APPEND _cmake_targets_defined "${_cmake_expected_target}")
|
|
26
|
+
else()
|
|
27
|
+
list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}")
|
|
28
|
+
endif()
|
|
29
|
+
endforeach()
|
|
30
|
+
unset(_cmake_expected_target)
|
|
31
|
+
if(_cmake_targets_defined STREQUAL _cmake_expected_targets)
|
|
32
|
+
unset(_cmake_targets_defined)
|
|
33
|
+
unset(_cmake_targets_not_defined)
|
|
34
|
+
unset(_cmake_expected_targets)
|
|
35
|
+
unset(CMAKE_IMPORT_FILE_VERSION)
|
|
36
|
+
cmake_policy(POP)
|
|
37
|
+
return()
|
|
38
|
+
endif()
|
|
39
|
+
if(NOT _cmake_targets_defined STREQUAL "")
|
|
40
|
+
string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}")
|
|
41
|
+
string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}")
|
|
42
|
+
message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n")
|
|
43
|
+
endif()
|
|
44
|
+
unset(_cmake_targets_defined)
|
|
45
|
+
unset(_cmake_targets_not_defined)
|
|
46
|
+
unset(_cmake_expected_targets)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
# The installation prefix configured by this project.
|
|
50
|
+
set(_IMPORT_PREFIX "/opt/homebrew/Cellar/lsl/1.17.4")
|
|
51
|
+
|
|
52
|
+
# Create imported target LSL::lsl
|
|
53
|
+
add_library(LSL::lsl SHARED IMPORTED)
|
|
54
|
+
set_property(TARGET LSL::lsl PROPERTY FRAMEWORK 1)
|
|
55
|
+
|
|
56
|
+
set_target_properties(LSL::lsl PROPERTIES
|
|
57
|
+
INTERFACE_COMPILE_DEFINITIONS "\$<IF:\$<BOOL:OFF>,LIBLSL_STATIC,LIBLSL_EXPORTS>;\$<\$<CXX_COMPILER_ID:MSVC>:LSLNOAUTOLINK>"
|
|
58
|
+
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/Frameworks/lsl.framework/Versions/A/Headers"
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
# Load information for each installed configuration.
|
|
62
|
+
file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/LSLConfig-*.cmake")
|
|
63
|
+
foreach(_cmake_config_file IN LISTS _cmake_config_files)
|
|
64
|
+
include("${_cmake_config_file}")
|
|
65
|
+
endforeach()
|
|
66
|
+
unset(_cmake_config_file)
|
|
67
|
+
unset(_cmake_config_files)
|
|
68
|
+
|
|
69
|
+
# Cleanup temporary variables.
|
|
70
|
+
set(_IMPORT_PREFIX)
|
|
71
|
+
|
|
72
|
+
# Loop over all imported files and verify that they actually exist
|
|
73
|
+
foreach(_cmake_target IN LISTS _cmake_import_check_targets)
|
|
74
|
+
if(CMAKE_VERSION VERSION_LESS "3.28"
|
|
75
|
+
OR NOT DEFINED _cmake_import_check_xcframework_for_${_cmake_target}
|
|
76
|
+
OR NOT IS_DIRECTORY "${_cmake_import_check_xcframework_for_${_cmake_target}}")
|
|
77
|
+
foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}")
|
|
78
|
+
if(NOT EXISTS "${_cmake_file}")
|
|
79
|
+
message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file
|
|
80
|
+
\"${_cmake_file}\"
|
|
81
|
+
but this file does not exist. Possible reasons include:
|
|
82
|
+
* The file was deleted, renamed, or moved to another location.
|
|
83
|
+
* An install or uninstall procedure did not complete successfully.
|
|
84
|
+
* The installation package was faulty and contained
|
|
85
|
+
\"${CMAKE_CURRENT_LIST_FILE}\"
|
|
86
|
+
but not all the files it references.
|
|
87
|
+
")
|
|
88
|
+
endif()
|
|
89
|
+
endforeach()
|
|
90
|
+
endif()
|
|
91
|
+
unset(_cmake_file)
|
|
92
|
+
unset("_cmake_import_check_files_for_${_cmake_target}")
|
|
93
|
+
endforeach()
|
|
94
|
+
unset(_cmake_target)
|
|
95
|
+
unset(_cmake_import_check_targets)
|
|
96
|
+
|
|
97
|
+
# This file does not depend on other imported targets which have
|
|
98
|
+
# been exported from the same project but in a separate export set.
|
|
99
|
+
|
|
100
|
+
# Commands beyond this point should not need to know the version.
|
|
101
|
+
set(CMAKE_IMPORT_FILE_VERSION)
|
|
102
|
+
cmake_policy(POP)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# This is a basic version file for the Config-mode of find_package().
|
|
2
|
+
# It is used by write_basic_package_version_file() as input file for configure_file()
|
|
3
|
+
# to create a version-file which can be installed along a config.cmake file.
|
|
4
|
+
#
|
|
5
|
+
# The created file sets PACKAGE_VERSION_EXACT if the current version string and
|
|
6
|
+
# the requested version string are exactly the same and it sets
|
|
7
|
+
# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version.
|
|
8
|
+
# The variable CVF_VERSION must be set before calling configure_file().
|
|
9
|
+
|
|
10
|
+
set(PACKAGE_VERSION "1.17.4")
|
|
11
|
+
|
|
12
|
+
if (PACKAGE_FIND_VERSION_RANGE)
|
|
13
|
+
# Package version must be in the requested version range
|
|
14
|
+
if ((PACKAGE_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MIN)
|
|
15
|
+
OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_GREATER PACKAGE_FIND_VERSION_MAX)
|
|
16
|
+
OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_GREATER_EQUAL PACKAGE_FIND_VERSION_MAX)))
|
|
17
|
+
set(PACKAGE_VERSION_COMPATIBLE FALSE)
|
|
18
|
+
else()
|
|
19
|
+
set(PACKAGE_VERSION_COMPATIBLE TRUE)
|
|
20
|
+
endif()
|
|
21
|
+
else()
|
|
22
|
+
if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
|
|
23
|
+
set(PACKAGE_VERSION_COMPATIBLE FALSE)
|
|
24
|
+
else()
|
|
25
|
+
set(PACKAGE_VERSION_COMPATIBLE TRUE)
|
|
26
|
+
if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
|
|
27
|
+
set(PACKAGE_VERSION_EXACT TRUE)
|
|
28
|
+
endif()
|
|
29
|
+
endif()
|
|
30
|
+
endif()
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
|
|
34
|
+
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "8" STREQUAL "")
|
|
35
|
+
return()
|
|
36
|
+
endif()
|
|
37
|
+
|
|
38
|
+
# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
|
|
39
|
+
if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "8")
|
|
40
|
+
math(EXPR installedBits "8 * 8")
|
|
41
|
+
set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
|
|
42
|
+
set(PACKAGE_VERSION_UNSUITABLE TRUE)
|
|
43
|
+
endif()
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>CFBundleDevelopmentRegion</key>
|
|
6
|
+
<string>English</string>
|
|
7
|
+
<key>CFBundleExecutable</key>
|
|
8
|
+
<string>lsl</string>
|
|
9
|
+
<key>CFBundleIconFile</key>
|
|
10
|
+
<string></string>
|
|
11
|
+
<key>CFBundleIdentifier</key>
|
|
12
|
+
<string>org.labstreaminglayer.liblsl</string>
|
|
13
|
+
<key>CFBundleInfoDictionaryVersion</key>
|
|
14
|
+
<string>6.0</string>
|
|
15
|
+
<key>CFBundleName</key>
|
|
16
|
+
<string></string>
|
|
17
|
+
<key>CFBundlePackageType</key>
|
|
18
|
+
<string>FMWK</string>
|
|
19
|
+
<key>CFBundleSignature</key>
|
|
20
|
+
<string>????</string>
|
|
21
|
+
<key>CFBundleVersion</key>
|
|
22
|
+
<string>1.17.4</string>
|
|
23
|
+
<key>CFBundleShortVersionString</key>
|
|
24
|
+
<string>1.17</string>
|
|
25
|
+
<key>CSResourcesFileMapped</key>
|
|
26
|
+
<true/>
|
|
27
|
+
</dict>
|
|
28
|
+
</plist>
|