浏览代码

Genex: Fix TARGET_BUNDLE_DIR_NAME incorrect extension

Fix the genex from commit 997af2e1a6 (Genex: Add TARGET_BUNDLE_DIR_NAME,
2022-04-14, v3.24.0-rc1~233^2) to use the correct bundle directory
extension for each bundle type.

Fixes: #23683
Ben Leadbetter 3 年之前
父节点
当前提交
8bd98b8117

+ 12 - 2
Source/cmGeneratorExpressionNode.cxx

@@ -2763,8 +2763,18 @@ struct TargetFilesystemArtifactResultCreator<ArtifactBundleDirNameTag>
       return std::string();
     }
 
-    return target->GetAppBundleDirectory(context->Config,
-                                         cmGeneratorTarget::BundleDirLevel);
+    auto level = cmGeneratorTarget::BundleDirLevel;
+    auto config = context->Config;
+    if (target->IsAppBundleOnApple()) {
+      return target->GetAppBundleDirectory(config, level);
+    }
+    if (target->IsFrameworkOnApple()) {
+      return target->GetFrameworkDirectory(config, level);
+    }
+    if (target->IsCFBundleOnApple()) {
+      return target->GetCFBundleDirectory(config, level);
+    }
+    return std::string();
   }
 };
 

+ 3 - 0
Tests/RunCMake/GenEx-TARGET_FILE/RunCMakeTest.cmake

@@ -2,6 +2,9 @@ include(RunCMake)
 
 run_cmake(TARGET_FILE-recursion)
 run_cmake(OUTPUT_NAME-recursion)
+if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
+  run_cmake(TARGET_BUNDLE_DIR_NAME)
+endif()
 run_cmake(TARGET_FILE_DIR-dependency)
 run_cmake(TARGET_FILE_DIR-no-dependency)
 run_cmake(TARGET_FILE_PREFIX-imported-target)

+ 1 - 0
Tests/RunCMake/GenEx-TARGET_FILE/TARGET_BUNDLE_DIR_NAME-check.cmake

@@ -0,0 +1 @@
+include ("${RunCMake_TEST_BINARY_DIR}/TARGET_BUNDLE_DIR_NAME-generated.cmake")

+ 33 - 0
Tests/RunCMake/GenEx-TARGET_FILE/TARGET_BUNDLE_DIR_NAME.cmake

@@ -0,0 +1,33 @@
+enable_language(C)
+
+set(GENERATE_CONTENT [[
+macro (check_value test_msg value expected)
+  if (NOT "${value}" STREQUAL "${expected}")
+    string (APPEND RunCMake_TEST_FAILED "${test_msg}: actual result:\n [${value}]\nbut expected:\n [${expected}]\n")
+  endif()
+endmacro()
+]])
+
+add_library(test-lib MODULE empty.c)
+set_target_properties(test-lib PROPERTIES BUNDLE TRUE)
+
+add_library(test-fw empty.c)
+set_target_properties(test-fw PROPERTIES FRAMEWORK TRUE)
+
+add_executable(test-app MACOSX_BUNDLE empty.c)
+
+add_executable(test-app-custom MACOSX_BUNDLE empty.c)
+set_target_properties(test-app-custom PROPERTIES BUNDLE_EXTENSION custom)
+
+string(APPEND GENERATE_CONTENT [[
+check_value("TARGET_BUNDLE_DIR_NAME library" "$<TARGET_BUNDLE_DIR_NAME:test-lib>" "test-lib.bundle")
+check_value("TARGET_BUNDLE_DIR_NAME framework" "$<TARGET_BUNDLE_DIR_NAME:test-fw>" "test-fw.framework")
+check_value("TARGET_BUNDLE_DIR_NAME app" "$<TARGET_BUNDLE_DIR_NAME:test-app>" "test-app.app")
+check_value("TARGET_BUNDLE_DIR_NAME custom" "$<TARGET_BUNDLE_DIR_NAME:test-app-custom>" "test-app-custom.custom")
+]])
+
+file(
+  GENERATE
+  OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/TARGET_BUNDLE_DIR_NAME-generated.cmake"
+  CONTENT "${GENERATE_CONTENT}"
+)