mirror of https://github.com/darlinghq/darling
[build] Support arbitrary framework directories
This is necessary for stubs for the CoreSimulator framework (needed for Xcode), which lives in `/Library/Developer/PrivateFrameworks`.
This commit is contained in:
parent
6a8943df80
commit
9d84a2a4fa
|
|
@ -7,7 +7,7 @@ define_property(TARGET PROPERTY DYLIB_INSTALL_NAME BRIEF_DOCS "Stores the DYLIB_
|
|||
FULL_DOCS "Used to make reexporting child frameworks less painful.")
|
||||
|
||||
function(add_framework name)
|
||||
cmake_parse_arguments(FRAMEWORK "CURRENT_VERSION;FAT;PRIVATE;IOSSUPPORT;CIRCULAR;NO_INSTALL" "VERSION;LINK_FLAGS;PARENT;PARENT_VERSION;TARGET_NAME;PARENT_COMPONENT"
|
||||
cmake_parse_arguments(FRAMEWORK "CURRENT_VERSION;FAT;PRIVATE;IOSSUPPORT;CIRCULAR;NO_INSTALL" "VERSION;LINK_FLAGS;PARENT;PARENT_VERSION;TARGET_NAME;PARENT_COMPONENT;PARENT_DIR"
|
||||
"SOURCES;DEPENDENCIES;CIRCULAR_DEPENDENCIES;RESOURCES;UPWARD_DEPENDENCIES;OBJECTS;STRONG_DEPENDENCIES" ${ARGN})
|
||||
|
||||
if (FRAMEWORK_NO_INSTALL)
|
||||
|
|
@ -36,6 +36,16 @@ function(add_framework name)
|
|||
set(sys_library_dir "System/Library")
|
||||
endif (FRAMEWORK_IOSSUPPORT)
|
||||
|
||||
set(root_dir "/${sys_library_dir}/${dir_name}")
|
||||
|
||||
if (FRAMEWORK_PARENT_DIR)
|
||||
set(root_dir "${FRAMEWORK_PARENT_DIR}")
|
||||
endif()
|
||||
|
||||
if (NOT (root_dir MATCHES "^/"))
|
||||
set(root_dir "/${root_dir}")
|
||||
endif()
|
||||
|
||||
if(DEFINED FRAMEWORK_PARENT)
|
||||
if(NOT DEFINED FRAMEWORK_PARENT_VERSION)
|
||||
# 99% of the time it's version A
|
||||
|
|
@ -47,12 +57,12 @@ function(add_framework name)
|
|||
set(COMPONENT_ARG "")
|
||||
endif()
|
||||
InstallSymlink(Versions/Current/Frameworks
|
||||
"${CMAKE_INSTALL_PREFIX}/libexec/darling/${sys_library_dir}/${dir_name}/${FRAMEWORK_PARENT}.framework/Frameworks"
|
||||
"${CMAKE_INSTALL_PREFIX}/libexec/darling${root_dir}/${FRAMEWORK_PARENT}.framework/Frameworks"
|
||||
${EXCLUDE_FROM_ALL_ARG} ${COMPONENT_ARG})
|
||||
set(dir_name "${dir_name}/${FRAMEWORK_PARENT}.framework/Versions/${FRAMEWORK_PARENT_VERSION}/Frameworks")
|
||||
set(root_dir "${root_dir}/${FRAMEWORK_PARENT}.framework/Versions/${FRAMEWORK_PARENT_VERSION}/Frameworks")
|
||||
endif(DEFINED FRAMEWORK_PARENT)
|
||||
|
||||
set(DYLIB_INSTALL_NAME "/${sys_library_dir}/${dir_name}/${name}.framework/Versions/${FRAMEWORK_VERSION}/${name}")
|
||||
set(DYLIB_INSTALL_NAME "${root_dir}/${name}.framework/Versions/${FRAMEWORK_VERSION}/${name}")
|
||||
|
||||
if (FRAMEWORK_CIRCULAR OR FRAMEWORK_CIRCULAR_DEPENDENCIES OR FRAMEWORK_UPWARD_DEPENDENCIES)
|
||||
if (FRAMEWORK_FAT)
|
||||
|
|
@ -98,11 +108,11 @@ function(add_framework name)
|
|||
set_property(TARGET ${my_name} APPEND_STRING PROPERTY LINK_FLAGS " ${FRAMEWORK_LINK_FLAGS}")
|
||||
endif (FRAMEWORK_LINK_FLAGS)
|
||||
|
||||
install(TARGETS ${my_name} DESTINATION "libexec/darling/${sys_library_dir}/${dir_name}/${name}.framework/Versions/${FRAMEWORK_VERSION}/" ${EXCLUDE_FROM_ALL_ARG})
|
||||
install(TARGETS ${my_name} DESTINATION "libexec/darling${root_dir}/${name}.framework/Versions/${FRAMEWORK_VERSION}/" ${EXCLUDE_FROM_ALL_ARG})
|
||||
|
||||
if (FRAMEWORK_RESOURCES)
|
||||
if (FRAMEWORK_CURRENT_VERSION)
|
||||
InstallSymlink("Versions/Current/Resources" "${CMAKE_INSTALL_PREFIX}/libexec/darling/${sys_library_dir}/${dir_name}/${name}.framework/Resources" ${EXCLUDE_FROM_ALL_ARG})
|
||||
InstallSymlink("Versions/Current/Resources" "${CMAKE_INSTALL_PREFIX}/libexec/darling${root_dir}/${name}.framework/Resources" ${EXCLUDE_FROM_ALL_ARG})
|
||||
endif (FRAMEWORK_CURRENT_VERSION)
|
||||
while (FRAMEWORK_RESOURCES)
|
||||
list(GET FRAMEWORK_RESOURCES 0 res_install_path)
|
||||
|
|
@ -110,15 +120,15 @@ function(add_framework name)
|
|||
get_filename_component(res_install_dir ${res_install_path} DIRECTORY)
|
||||
get_filename_component(res_install_name ${res_install_path} NAME)
|
||||
install(FILES ${res_source_path}
|
||||
DESTINATION libexec/darling/${sys_library_dir}/${dir_name}/${name}.framework/Versions/${FRAMEWORK_VERSION}/Resources/${res_install_dir}
|
||||
DESTINATION libexec/darling${root_dir}/${name}.framework/Versions/${FRAMEWORK_VERSION}/Resources/${res_install_dir}
|
||||
RENAME ${res_install_name} ${EXCLUDE_FROM_ALL_ARG})
|
||||
list(REMOVE_AT FRAMEWORK_RESOURCES 0 1)
|
||||
endwhile (FRAMEWORK_RESOURCES)
|
||||
endif()
|
||||
|
||||
if (FRAMEWORK_CURRENT_VERSION)
|
||||
InstallSymlink(${FRAMEWORK_VERSION} "${CMAKE_INSTALL_PREFIX}/libexec/darling/${sys_library_dir}/${dir_name}/${name}.framework/Versions/Current" ${EXCLUDE_FROM_ALL_ARG})
|
||||
InstallSymlink("Versions/Current/${name}" "${CMAKE_INSTALL_PREFIX}/libexec/darling/${sys_library_dir}/${dir_name}/${name}.framework/${name}" ${EXCLUDE_FROM_ALL_ARG})
|
||||
InstallSymlink(${FRAMEWORK_VERSION} "${CMAKE_INSTALL_PREFIX}/libexec/darling${root_dir}/${name}.framework/Versions/Current" ${EXCLUDE_FROM_ALL_ARG})
|
||||
InstallSymlink("Versions/Current/${name}" "${CMAKE_INSTALL_PREFIX}/libexec/darling${root_dir}/${name}.framework/${name}" ${EXCLUDE_FROM_ALL_ARG})
|
||||
endif()
|
||||
endfunction(add_framework)
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ include(create_symlink)
|
|||
function(remove_sdk_framework name)
|
||||
cmake_parse_arguments(SDK
|
||||
"PRIVATE;IOSSUPPORT"
|
||||
""
|
||||
"PARENT_DIR"
|
||||
""
|
||||
${ARGN}
|
||||
)
|
||||
|
|
@ -28,6 +28,11 @@ function(remove_sdk_framework name)
|
|||
|
||||
set(developer_sdk_path "Developer/Platforms/${developer_platform}/Developer/SDKs/${developer_sdk}")
|
||||
set(developer_framework_path "${DARLING_TOP_DIRECTORY}/${developer_sdk_path}/${developer_sys_library_dir}/${developer_framework_dir}/${name}.framework")
|
||||
|
||||
if (SDK_PARENT_DIR)
|
||||
set(developer_framework_path "${DARLING_TOP_DIRECTORY}/${developer_sdk_path}/${SDK_PARENT_DIR}/${name}.framework")
|
||||
endif()
|
||||
|
||||
set(header_framework_include_path "${DARLING_TOP_DIRECTORY}/${header_framework_include}/${name}")
|
||||
|
||||
# Remove file from 'Developer' folder
|
||||
|
|
@ -35,14 +40,14 @@ function(remove_sdk_framework name)
|
|||
# Also remove the the header folder from the framework/framework-private-include header
|
||||
file(REMOVE_RECURSE ${header_framework_include_path})
|
||||
|
||||
message("Deleted SDK framework ${developer_sdk_path}")
|
||||
message("Deleted SDK framework ${developer_framework_path}")
|
||||
endif (REGENERATE_SDK)
|
||||
endfunction(remove_sdk_framework)
|
||||
|
||||
function(get_path_preframework result)
|
||||
cmake_parse_arguments(SDK
|
||||
"PRIVATE;IOSSUPPORT"
|
||||
""
|
||||
"PARENT_DIR"
|
||||
""
|
||||
${ARGN}
|
||||
)
|
||||
|
|
@ -63,7 +68,13 @@ function(get_path_preframework result)
|
|||
set(developer_framework_dir "Frameworks")
|
||||
endif (SDK_PRIVATE)
|
||||
|
||||
set("${result}" "${DARLING_TOP_DIRECTORY}/${developer_sdk_path}/${developer_sys_library_dir}/${developer_framework_dir}" PARENT_SCOPE)
|
||||
set(developer_framework_path "${DARLING_TOP_DIRECTORY}/${developer_sdk_path}/${developer_sys_library_dir}/${developer_framework_dir}")
|
||||
|
||||
if (SDK_PARENT_DIR)
|
||||
set(developer_framework_path "${DARLING_TOP_DIRECTORY}/${developer_sdk_path}/${SDK_PARENT_DIR}")
|
||||
endif()
|
||||
|
||||
set("${result}" "${developer_framework_path}" PARENT_SCOPE)
|
||||
endfunction(get_path_preframework)
|
||||
|
||||
function(append_path_sdk_subframework input_path output_path name)
|
||||
|
|
@ -80,7 +91,7 @@ endfunction(append_path_sdk_subframework)
|
|||
function(internal_generate_developer_framework name path)
|
||||
cmake_parse_arguments(SDK
|
||||
""
|
||||
"VERSION;HEADER"
|
||||
"VERSION;HEADER;PARENT_DIR"
|
||||
""
|
||||
${ARGN}
|
||||
)
|
||||
|
|
@ -133,7 +144,7 @@ endfunction(internal_generate_framework_include)
|
|||
function(generate_sdk_framework name)
|
||||
cmake_parse_arguments(SDK
|
||||
"PRIVATE;IOSSUPPORT"
|
||||
"VERSION;HEADER"
|
||||
"VERSION;HEADER;PARENT_DIR"
|
||||
""
|
||||
${ARGN}
|
||||
)
|
||||
|
|
@ -154,6 +165,7 @@ function(generate_sdk_framework name)
|
|||
get_path_preframework(sdk_path
|
||||
${PRIVATE}
|
||||
${IOSSUPPORT}
|
||||
PARENT_DIR "${SDK_PARENT_DIR}"
|
||||
)
|
||||
|
||||
internal_generate_developer_framework(${name}
|
||||
|
|
@ -195,4 +207,4 @@ function(generate_sdk_subframework name)
|
|||
${PRIVATE}
|
||||
)
|
||||
endif (REGENERATE_SDK)
|
||||
endfunction(generate_sdk_subframework)
|
||||
endfunction(generate_sdk_subframework)
|
||||
|
|
|
|||
Loading…
Reference in New Issue