diff --git a/cmake/darling_framework.cmake b/cmake/darling_framework.cmake index 1324fda7e..f9a8ede15 100644 --- a/cmake/darling_framework.cmake +++ b/cmake/darling_framework.cmake @@ -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) diff --git a/cmake/darling_open_source_sdk.cmake b/cmake/darling_open_source_sdk.cmake index b8ef88332..56063d4c0 100644 --- a/cmake/darling_open_source_sdk.cmake +++ b/cmake/darling_open_source_sdk.cmake @@ -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) \ No newline at end of file +endfunction(generate_sdk_subframework)