Browse Source

add_custom_command: Fix dependency on macOS framework target

When the `DEPENDS` option names a logical target name, convert to the
"real" path of that target rather than any of the symlink-provided
alternative file names.  This makes the dependencies consistent with the
outputs named by link rules producing the target artifacts.

Fixes: #20264
Brad King 5 years ago
parent
commit
08699cec68
3 changed files with 14 additions and 1 deletions
  1. 2 1
      Source/cmLocalGenerator.cxx
  2. 8 0
      Tests/CustomCommand/CMakeLists.txt
  3. 4 0
      Tests/CustomCommand/mac_fw.c

+ 2 - 1
Source/cmLocalGenerator.cxx

@@ -1969,7 +1969,8 @@ bool cmLocalGenerator::GetRealDependency(const std::string& inName,
       case cmStateEnums::SHARED_LIBRARY:
       case cmStateEnums::MODULE_LIBRARY:
       case cmStateEnums::UNKNOWN_LIBRARY:
-        dep = target->GetLocation(config);
+        dep = target->GetFullPath(config, cmStateEnums::RuntimeBinaryArtifact,
+                                  /*realname=*/true);
         return true;
       case cmStateEnums::OBJECT_LIBRARY:
         // An object library has no single file on which to depend.

+ 8 - 0
Tests/CustomCommand/CMakeLists.txt

@@ -566,3 +566,11 @@ add_custom_command(
 )
 
 add_custom_target(depends_on_in_rel_source_path ALL DEPENDS "depends_on_in_rel_source_path.txt")
+
+add_library(mac_fw SHARED mac_fw.c)
+set_target_properties(mac_fw PROPERTIES
+  FRAMEWORK 1
+  LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib
+  )
+add_custom_command(OUTPUT mac_fw.txt COMMAND ${CMAKE_COMMAND} -E touch mac_fw.txt DEPENDS mac_fw)
+add_custom_target(drive_mac_fw ALL DEPENDS mac_fw.txt)

+ 4 - 0
Tests/CustomCommand/mac_fw.c

@@ -0,0 +1,4 @@
+int mac_fw(void)
+{
+  return 0;
+}