157 lines
5.3 KiB
CMake
157 lines
5.3 KiB
CMake
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
|
|
cmake_minimum_required(VERSION 3.22)
|
|
project(FreeCADQuickLook)
|
|
|
|
# Configuration options for QuickLook support
|
|
option(FREECAD_QUICKLOOK_LEGACY_SUPPORT "Build legacy .qlgenerator for older macOS compatibility" ON)
|
|
option(FREECAD_QUICKLOOK_MODERN_SUPPORT "Build modern .appex extensions for macOS 15.0+" ON)
|
|
|
|
|
|
# Only build QuickLook extensions with Unix Makefiles or Ninja generator
|
|
if(NOT CMAKE_GENERATOR MATCHES "Unix Makefiles|Ninja")
|
|
message(STATUS "QuickLook extensions only supported with Unix Makefiles or Ninja generators (current: ${CMAKE_GENERATOR})")
|
|
add_custom_target(FreeCADQuickLook
|
|
COMMAND ${CMAKE_COMMAND} -E echo "QuickLook extensions require Unix Makefiles or Ninja generator"
|
|
COMMENT "QuickLook placeholder target"
|
|
)
|
|
return()
|
|
endif()
|
|
|
|
# Validate CMAKE_OSX_DEPLOYMENT_TARGET is set (or use system default)
|
|
if(NOT CMAKE_OSX_DEPLOYMENT_TARGET)
|
|
# If not explicitly set, query the system default
|
|
execute_process(
|
|
COMMAND xcrun --show-sdk-version
|
|
OUTPUT_VARIABLE MACOS_SDK_VERSION
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
if(MACOS_SDK_VERSION)
|
|
set(CMAKE_OSX_DEPLOYMENT_TARGET ${MACOS_SDK_VERSION})
|
|
message(STATUS "CMAKE_OSX_DEPLOYMENT_TARGET not set, using SDK version: ${CMAKE_OSX_DEPLOYMENT_TARGET}")
|
|
else()
|
|
message(WARNING "CMAKE_OSX_DEPLOYMENT_TARGET not set and could not determine SDK version. Defaulting to 15.0")
|
|
set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0")
|
|
endif()
|
|
endif()
|
|
|
|
# Determine which QuickLook implementations to build
|
|
set(BUILD_MODERN_EXTENSIONS OFF)
|
|
set(BUILD_LEGACY_GENERATOR OFF)
|
|
|
|
if(FREECAD_QUICKLOOK_MODERN_SUPPORT)
|
|
if(CMAKE_OSX_DEPLOYMENT_TARGET VERSION_GREATER_EQUAL "15.0")
|
|
set(BUILD_MODERN_EXTENSIONS ON)
|
|
message(STATUS "Building modern Swift .appex QuickLook extensions (macOS 15.0+)")
|
|
else()
|
|
message(STATUS "Modern QuickLook extensions require macOS 15.0+, current target: ${CMAKE_OSX_DEPLOYMENT_TARGET}")
|
|
endif()
|
|
endif()
|
|
|
|
if(FREECAD_QUICKLOOK_LEGACY_SUPPORT)
|
|
set(BUILD_LEGACY_GENERATOR ON)
|
|
message(STATUS "Building legacy .qlgenerator QuickLook support")
|
|
endif()
|
|
|
|
if(NOT BUILD_MODERN_EXTENSIONS AND NOT BUILD_LEGACY_GENERATOR)
|
|
message(WARNING "No QuickLook implementations enabled. Enable FREECAD_QUICKLOOK_MODERN_SUPPORT or FREECAD_QUICKLOOK_LEGACY_SUPPORT")
|
|
add_custom_target(FreeCADQuickLook
|
|
COMMAND ${CMAKE_COMMAND} -E echo "No QuickLook implementations enabled"
|
|
COMMENT "QuickLook disabled target"
|
|
)
|
|
return()
|
|
endif()
|
|
|
|
# Global configuration
|
|
set(FREECAD_BUNDLE_ID "org.freecad.FreeCAD")
|
|
set(TARGET_APP_BUNDLE "${CMAKE_BINARY_DIR}/src/MacAppBundle/FreeCAD.app")
|
|
|
|
# Detect target architecture
|
|
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" OR CMAKE_OSX_ARCHITECTURES STREQUAL "arm64")
|
|
set(TARGET_ARCH "arm64")
|
|
else()
|
|
set(TARGET_ARCH "x86_64")
|
|
endif()
|
|
|
|
# Build subdirectories conditionally
|
|
set(QUICKLOOK_TARGETS "")
|
|
|
|
if(BUILD_MODERN_EXTENSIONS)
|
|
add_subdirectory(modern)
|
|
list(APPEND QUICKLOOK_TARGETS FreeCADModernQuickLook)
|
|
endif()
|
|
|
|
if(BUILD_LEGACY_GENERATOR)
|
|
add_subdirectory(legacy)
|
|
list(APPEND QUICKLOOK_TARGETS FreeCADLegacyQuickLook)
|
|
endif()
|
|
|
|
# Main target that coordinates all QuickLook implementations
|
|
add_custom_target(FreeCADQuickLook ALL
|
|
DEPENDS ${QUICKLOOK_TARGETS}
|
|
COMMENT "FreeCAD QuickLook support integrated into main app"
|
|
)
|
|
|
|
# Ensure QuickLook is built after main FreeCAD app if it's available as a target
|
|
if(TARGET FreeCAD)
|
|
add_dependencies(FreeCADQuickLook FreeCAD)
|
|
endif()
|
|
|
|
# Combined verification target
|
|
set(VERIFY_COMMANDS "")
|
|
if(BUILD_MODERN_EXTENSIONS)
|
|
list(APPEND VERIFY_COMMANDS
|
|
COMMAND ${CMAKE_COMMAND} --build . --target verify_modern_build
|
|
)
|
|
endif()
|
|
if(BUILD_LEGACY_GENERATOR)
|
|
list(APPEND VERIFY_COMMANDS
|
|
COMMAND ${CMAKE_COMMAND} --build . --target verify_legacy_build
|
|
)
|
|
endif()
|
|
|
|
add_custom_target(verify_build
|
|
${VERIFY_COMMANDS}
|
|
DEPENDS FreeCADQuickLook
|
|
COMMENT "Verifying all QuickLook implementations"
|
|
)
|
|
|
|
# Combined test registration target
|
|
set(REGISTRATION_COMMANDS "")
|
|
if(BUILD_MODERN_EXTENSIONS)
|
|
list(APPEND REGISTRATION_COMMANDS
|
|
COMMAND ${CMAKE_COMMAND} --build . --target test_modern_registration
|
|
)
|
|
endif()
|
|
if(BUILD_LEGACY_GENERATOR)
|
|
list(APPEND REGISTRATION_COMMANDS
|
|
COMMAND ${CMAKE_COMMAND} --build . --target test_legacy_registration
|
|
)
|
|
endif()
|
|
|
|
add_custom_target(test_registration
|
|
${REGISTRATION_COMMANDS}
|
|
DEPENDS FreeCADQuickLook
|
|
COMMENT "Testing all QuickLook registrations"
|
|
)
|
|
|
|
# Installation components
|
|
if(BUILD_MODERN_EXTENSIONS)
|
|
# Modern extensions install themselves via their CMakeLists.txt
|
|
endif()
|
|
|
|
if(BUILD_LEGACY_GENERATOR)
|
|
# Legacy generator installs itself via its CMakeLists.txt
|
|
endif()
|
|
|
|
# Status summary
|
|
message(STATUS "FreeCAD QuickLook Configuration Summary:")
|
|
message(STATUS " Generator: ${CMAKE_GENERATOR}")
|
|
message(STATUS " Target Architecture: ${TARGET_ARCH}")
|
|
message(STATUS " Deployment Target: ${CMAKE_OSX_DEPLOYMENT_TARGET}")
|
|
message(STATUS " Target FreeCAD.app: ${TARGET_APP_BUNDLE}")
|
|
message(STATUS " Modern Extensions (.appex): ${BUILD_MODERN_EXTENSIONS}")
|
|
message(STATUS " Legacy Generator (.qlgenerator): ${BUILD_LEGACY_GENERATOR}")
|
|
|
|
message(STATUS " Code Signing: Handled by official src/Tools/macos_sign_and_notarize.sh script")
|