mirror of
https://github.com/darlinghq/darling.git
synced 2025-03-01 06:06:03 +00:00
Support for nested frameworks
Reexporting is also much, much easier with the new "reexport" function too. Fixes #521 In order to nest a framework within another, set the new PARENT argument of the darling_framework function to be the name of the framework to nest inside (as a string, not a target name for now)
This commit is contained in:
parent
ab56f3209d
commit
8df457b039
@ -2,8 +2,12 @@ include(CMakeParseArguments)
|
||||
include(darling_lib)
|
||||
include(InstallSymlink)
|
||||
|
||||
define_property(TARGET PROPERTY DYLIB_INSTALL_NAME BRIEF_DOCS "Stores the DYLIB_INSTALL_NAME of the framework's main binary"
|
||||
FULL_DOCS "Used to make reexporting child frameworks less painful.")
|
||||
|
||||
function(add_framework name)
|
||||
cmake_parse_arguments(FRAMEWORK "CURRENT_VERSION;FAT;PRIVATE" "VERSION;LINK_FLAGS" "SOURCES;DEPENDENCIES;CIRCULAR_DEPENDENCIES;RESOURCES" ${ARGN})
|
||||
cmake_parse_arguments(FRAMEWORK "CURRENT_VERSION;FAT;PRIVATE" "VERSION;LINK_FLAGS;PARENT;PARENT_VERSION"
|
||||
"SOURCES;DEPENDENCIES;CIRCULAR_DEPENDENCIES;RESOURCES" ${ARGN})
|
||||
if (FRAMEWORK_CURRENT_VERSION)
|
||||
set(my_name "${name}")
|
||||
else (FRAMEWORK_CURRENT_VERSION)
|
||||
@ -15,10 +19,19 @@ function(add_framework name)
|
||||
else (FRAMEWORK_PRIVATE)
|
||||
set(dir_name "Frameworks")
|
||||
endif (FRAMEWORK_PRIVATE)
|
||||
|
||||
if(DEFINED FRAMEWORK_PARENT)
|
||||
if(NOT DEFINED FRAMEWORK_PARENT_VERSION)
|
||||
# 99% of the time it's version A
|
||||
set(FRAMEWORK_PARENT_VERSION "A")
|
||||
endif(NOT DEFINED FRAMEWORK_PARENT_VERSION)
|
||||
InstallSymlink(Versions/Current/Frameworks
|
||||
"${CMAKE_INSTALL_PREFIX}/libexec/darling/System/Library/${dir_name}/${FRAMEWORK_PARENT}.framework/Frameworks")
|
||||
set(dir_name "${dir_name}/${FRAMEWORK_PARENT}.framework/Versions/${FRAMEWORK_PARENT_VERSION}/Frameworks")
|
||||
endif(DEFINED FRAMEWORK_PARENT)
|
||||
|
||||
set(DYLIB_INSTALL_NAME "/System/Library/${dir_name}/${name}.framework/Versions/${FRAMEWORK_VERSION}/${name}")
|
||||
|
||||
|
||||
if (FRAMEWORK_CIRCULAR_DEPENDENCIES)
|
||||
if (FRAMEWORK_FAT)
|
||||
set (FRAMEWORK_FAT_ARG FAT)
|
||||
@ -38,7 +51,8 @@ function(add_framework name)
|
||||
endif (FRAMEWORK_FAT)
|
||||
|
||||
endif (FRAMEWORK_CIRCULAR_DEPENDENCIES)
|
||||
|
||||
|
||||
set_property(TARGET ${my_name} PROPERTY DYLIB_INSTALL_NAME ${DYLIB_INSTALL_NAME})
|
||||
|
||||
if (FRAMEWORK_CURRENT_VERSION)
|
||||
add_library("${name}_${FRAMEWORK_VERSION}" ALIAS "${name}")
|
||||
|
@ -1,4 +1,7 @@
|
||||
set(dylib_paths "")
|
||||
FUNCTION(use_ld64 target)
|
||||
get_property(ld_dylib_paths GLOBAL PROPERTY ld_dylib_paths)
|
||||
message("dylib path is ${ld_dylib_paths}")
|
||||
set_property(TARGET ${target} APPEND_STRING PROPERTY
|
||||
LINK_FLAGS " -B ${CMAKE_BINARY_DIR}/src/external/cctools-port/cctools/ld64/src/ \
|
||||
-B ${CMAKE_BINARY_DIR}/src/external/cctools-port/cctools/misc/ \
|
||||
@ -58,9 +61,19 @@ FUNCTION(use_ld64 target)
|
||||
-Wl,-dylib_file,/usr/lib/native/libGL.dylib:${CMAKE_BINARY_DIR}/src/native/libGL.dylib \
|
||||
-Wl,-dylib_file,/System/Library/Frameworks/CoreImage.framework/Versions/A/CoreImage:${CMAKE_BINARY_DIR}/src/CoreImage/CoreImage \
|
||||
-Wl,-dylib_file,/System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo:${CMAKE_BINARY_DIR}/src/CoreVideo/CoreVideo \
|
||||
")
|
||||
${ld_dylib_paths}")
|
||||
|
||||
add_dependencies(${target} x86_64-apple-darwin11-ld)
|
||||
|
||||
ENDFUNCTION(use_ld64)
|
||||
|
||||
function(reexport reexporter reexportee)
|
||||
get_property(reexportee_binary_dir TARGET ${reexportee} PROPERTY BINARY_DIR)
|
||||
get_property(reexportee_output_name TARGET ${reexportee} PROPERTY OUTPUT_NAME)
|
||||
set(reexportee_output "${reexportee_binary_dir}/${reexportee_output_name}")
|
||||
get_property(reexportee_install_name TARGET ${reexportee} PROPERTY DYLIB_INSTALL_NAME)
|
||||
set_property(TARGET ${reexporter} APPEND_STRING PROPERTY
|
||||
LINK_FLAGS " -Wl,-reexport_library,${reexportee_output} ")
|
||||
set_property(GLOBAL APPEND_STRING PROPERTY ld_dylib_paths " -Wl,-dylib_file,${reexportee_install_name}:${reexportee_output} ")
|
||||
add_dependencies(${reexporter} ${reexportee})
|
||||
endfunction(reexport)
|
||||
|
@ -46,9 +46,6 @@ set(CoreServices_SRCS
|
||||
LSApplicationProxy.m
|
||||
LSApplicationWorkspace.m
|
||||
constants.m
|
||||
|
||||
src/FSEvents.c
|
||||
src/LaunchServices.c
|
||||
)
|
||||
|
||||
if (WITH_COREAUDIO)
|
||||
@ -56,7 +53,35 @@ if (WITH_COREAUDIO)
|
||||
endif (WITH_COREAUDIO)
|
||||
|
||||
set(DYLIB_COMPAT_VERSION "1.0.0")
|
||||
set(DYLIB_CURRENT_VERSION "1.0.0")
|
||||
set(DYLIB_CURRENT_VERSION "1239.200.12")
|
||||
add_framework(FSEvents
|
||||
FAT
|
||||
CURRENT_VERSION
|
||||
VERSION "A"
|
||||
PARENT "CoreServices"
|
||||
SOURCES
|
||||
src/FSEvents/FSEvents.c
|
||||
DEPENDENCIES
|
||||
CoreFoundation
|
||||
system
|
||||
)
|
||||
|
||||
set(DYLIB_COMPAT_VERSION "1.0.0")
|
||||
set(DYLIB_CURRENT_VERSION "945.0.0")
|
||||
add_framework(LaunchServices
|
||||
FAT
|
||||
CURRENT_VERSION
|
||||
VERSION "A"
|
||||
PARENT "CoreServices"
|
||||
SOURCES
|
||||
src/LaunchServices/LaunchServices.c
|
||||
DEPENDENCIES
|
||||
CoreFoundation
|
||||
system
|
||||
)
|
||||
|
||||
set(DYLIB_COMPAT_VERSION "1.0.0")
|
||||
set(DYLIB_CURRENT_VERSION "945.0.0")
|
||||
add_framework(CoreServices
|
||||
FAT
|
||||
CURRENT_VERSION
|
||||
@ -64,6 +89,8 @@ add_framework(CoreServices
|
||||
SOURCES
|
||||
${CoreServices_SRCS}
|
||||
DEPENDENCIES
|
||||
FSEvents
|
||||
LaunchServices
|
||||
icucore
|
||||
system
|
||||
CoreFoundation
|
||||
@ -73,5 +100,8 @@ add_framework(CoreServices
|
||||
${EXTRA_LIBS}
|
||||
)
|
||||
|
||||
reexport(CoreServices FSEvents)
|
||||
reexport(CoreServices LaunchServices)
|
||||
|
||||
install(FILES SystemVersion.plist DESTINATION "libexec/darling/System/Library/CoreServices")
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user