Files
create/src/MacAppBundle/QuickLook/CMakeLists.txt
2026-01-15 08:57:47 +01:00

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")