From 8a06f173d906a750808ac1f5fbdbd91293ac474d Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 18 Jun 2024 08:24:23 -0400 Subject: Apple: Add CFBundleName to framework Info.plist files Fixes: #26046 --- Help/prop_tgt/MACOSX_FRAMEWORK_INFO_PLIST.rst | 8 ++++++++ Help/release/dev/apple-framework-bundle-name.rst | 6 ++++++ Modules/MacOSXFrameworkInfo.plist.in | 2 ++ Source/cmLocalGenerator.cxx | 1 + .../Framework/FrameworkLayout-check-common.cmake | 24 ++++++++++++++++++++++ Tests/RunCMake/Framework/FrameworkLayout.cmake | 4 ++++ .../Framework/OSXFrameworkLayout-build-check.cmake | 2 ++ .../Framework/iOSFrameworkLayout-build-check.cmake | 2 ++ 8 files changed, 49 insertions(+) create mode 100644 Help/release/dev/apple-framework-bundle-name.rst create mode 100644 Tests/RunCMake/Framework/FrameworkLayout-check-common.cmake diff --git a/Help/prop_tgt/MACOSX_FRAMEWORK_INFO_PLIST.rst b/Help/prop_tgt/MACOSX_FRAMEWORK_INFO_PLIST.rst index 82fdcc0..a1f7c66 100644 --- a/Help/prop_tgt/MACOSX_FRAMEWORK_INFO_PLIST.rst +++ b/Help/prop_tgt/MACOSX_FRAMEWORK_INFO_PLIST.rst @@ -12,12 +12,20 @@ file name which may be a full path. The following target properties may be set to specify content to be configured into the file: +``MACOSX_FRAMEWORK_BUNDLE_NAME`` + .. versionadded:: 3.31 + + Sets ``CFBundleName``. + ``MACOSX_FRAMEWORK_BUNDLE_VERSION`` Sets ``CFBundleVersion``. + ``MACOSX_FRAMEWORK_ICON_FILE`` Sets ``CFBundleIconFile``. + ``MACOSX_FRAMEWORK_IDENTIFIER`` Sets ``CFBundleIdentifier``. + ``MACOSX_FRAMEWORK_SHORT_VERSION_STRING`` Sets ``CFBundleShortVersionString``. diff --git a/Help/release/dev/apple-framework-bundle-name.rst b/Help/release/dev/apple-framework-bundle-name.rst new file mode 100644 index 0000000..541845b --- /dev/null +++ b/Help/release/dev/apple-framework-bundle-name.rst @@ -0,0 +1,6 @@ +apple-framework-bundle-name +--------------------------- + +* The :prop_tgt:`MACOSX_FRAMEWORK_BUNDLE_NAME ` + target property was added to set the ``CFBundleName`` key in an Apple + :prop_tgt:`FRAMEWORK`'s ``Info.plist`` file. diff --git a/Modules/MacOSXFrameworkInfo.plist.in b/Modules/MacOSXFrameworkInfo.plist.in index 18eaef2..f053fda 100644 --- a/Modules/MacOSXFrameworkInfo.plist.in +++ b/Modules/MacOSXFrameworkInfo.plist.in @@ -12,6 +12,8 @@ ${MACOSX_FRAMEWORK_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 + CFBundleName + ${MACOSX_FRAMEWORK_BUNDLE_NAME} CFBundlePackageType FMWK CFBundleSignature diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index 94e62ff..aa3f28e 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -4369,6 +4369,7 @@ void cmLocalGenerator::GenerateFrameworkInfoPList( cmLGInfoProp(mf, target, "MACOSX_FRAMEWORK_ICON_FILE"); cmLGInfoProp(mf, target, "MACOSX_FRAMEWORK_IDENTIFIER"); cmLGInfoProp(mf, target, "MACOSX_FRAMEWORK_SHORT_VERSION_STRING"); + cmLGInfoProp(mf, target, "MACOSX_FRAMEWORK_BUNDLE_NAME"); cmLGInfoProp(mf, target, "MACOSX_FRAMEWORK_BUNDLE_VERSION"); mf->ConfigureFile(inFile, fname, false, false, false); } diff --git a/Tests/RunCMake/Framework/FrameworkLayout-check-common.cmake b/Tests/RunCMake/Framework/FrameworkLayout-check-common.cmake new file mode 100644 index 0000000..13a91df --- /dev/null +++ b/Tests/RunCMake/Framework/FrameworkLayout-check-common.cmake @@ -0,0 +1,24 @@ +macro(check_plist key expect) + execute_process( + COMMAND plutil -extract "${key}" xml1 "${plist-file}" -o - + RESULT_VARIABLE result + OUTPUT_VARIABLE actual + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(actual MATCHES "([^<>]*)") + set(actual "${CMAKE_MATCH_1}") + endif() + if(NOT "${actual}" STREQUAL "${expect}") + string(CONCAT RunCMake_TEST_FAILED + "Framework Info.plist key \"${key}\" has value:\n" + " \"${actual}\"\n" + "but we expected:\n" + " \"${expect}\"" + ) + endif() +endmacro() + +check_plist(CFBundleIdentifier MyFrameworkId) +check_plist(CFBundleName MyFrameworkBundleName) +check_plist(CFBundleVersion 3.2.1) +check_plist(CFBundleShortVersionString 3) diff --git a/Tests/RunCMake/Framework/FrameworkLayout.cmake b/Tests/RunCMake/Framework/FrameworkLayout.cmake index d09e8a0..e230e07 100644 --- a/Tests/RunCMake/Framework/FrameworkLayout.cmake +++ b/Tests/RunCMake/Framework/FrameworkLayout.cmake @@ -15,6 +15,10 @@ if("${CMAKE_FRAMEWORK}" STREQUAL "") FRAMEWORK TRUE) endif() set_target_properties(Framework PROPERTIES + MACOSX_FRAMEWORK_BUNDLE_NAME MyFrameworkBundleName + MACOSX_FRAMEWORK_BUNDLE_VERSION 3.2.1 + MACOSX_FRAMEWORK_SHORT_VERSION_STRING 3 + MACOSX_FRAMEWORK_IDENTIFIER MyFrameworkId PUBLIC_HEADER foo.h RESOURCE "res.txt") set_source_files_properties(flatresource.txt PROPERTIES MACOSX_PACKAGE_LOCATION Resources) diff --git a/Tests/RunCMake/Framework/OSXFrameworkLayout-build-check.cmake b/Tests/RunCMake/Framework/OSXFrameworkLayout-build-check.cmake index 7d58946..b436128 100644 --- a/Tests/RunCMake/Framework/OSXFrameworkLayout-build-check.cmake +++ b/Tests/RunCMake/Framework/OSXFrameworkLayout-build-check.cmake @@ -58,3 +58,5 @@ if(NOT EXISTS ${framework-header}) set(RunCMake_TEST_FAILED "Framework header file not found at \n ${framework-header}") return() endif() + +include(${CMAKE_CURRENT_LIST_DIR}/FrameworkLayout-check-common.cmake) diff --git a/Tests/RunCMake/Framework/iOSFrameworkLayout-build-check.cmake b/Tests/RunCMake/Framework/iOSFrameworkLayout-build-check.cmake index 719a749..be9a5fe 100644 --- a/Tests/RunCMake/Framework/iOSFrameworkLayout-build-check.cmake +++ b/Tests/RunCMake/Framework/iOSFrameworkLayout-build-check.cmake @@ -58,3 +58,5 @@ if(NOT EXISTS ${framework-header}) set(RunCMake_TEST_FAILED "Framework headers not found at\n ${framework-header}") return() endif() + +include(${CMAKE_CURRENT_LIST_DIR}/FrameworkLayout-check-common.cmake) -- cgit v0.12