Browse Source

Merge topic 'ninja-framework-POST_BUILD'

20278872 Ninja: Fix POST_BUILD commands on macOS Frameworks
Brad King 9 years ago
parent
commit
dabd177922
2 changed files with 9 additions and 2 deletions
  1. 4 2
      Source/cmNinjaNormalTargetGenerator.cxx
  2. 5 0
      Tests/Framework/CMakeLists.txt

+ 4 - 2
Source/cmNinjaNormalTargetGenerator.cxx

@@ -652,7 +652,9 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
   std::string postBuildCmdLine = localGen.BuildCommandLine(postBuildCmdLines);
 
   cmNinjaVars symlinkVars;
-  if (targetOutput == targetOutputReal) {
+  bool const symlinkNeeded =
+    (targetOutput != targetOutputReal && !gt.IsFrameworkOnApple());
+  if (!symlinkNeeded) {
     vars["POST_BUILD"] = postBuildCmdLine;
   } else {
     vars["POST_BUILD"] = ":";
@@ -694,7 +696,7 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
                        commandLineLengthLimit, &usedResponseFile);
   this->WriteLinkRule(usedResponseFile);
 
-  if (targetOutput != targetOutputReal && !gt.IsFrameworkOnApple()) {
+  if (symlinkNeeded) {
     if (targetType == cmState::EXECUTABLE) {
       globalGen.WriteBuild(
         this->GetBuildFileStream(),

+ 5 - 0
Tests/Framework/CMakeLists.txt

@@ -51,6 +51,11 @@ install(TARGETS foo bar
   # duplicate install rules for the pieces of the framework.
 )
 
+# test that framework post-build commands run
+add_custom_command(TARGET foo POST_BUILD COMMAND ${CMAKE_COMMAND} -E touch foo-post-build)
+add_custom_target(fooCustom ALL COMMAND ${CMAKE_COMMAND} -E copy foo-post-build foo-custom)
+add_dependencies(fooCustom foo)
+
 # Make a static library and apply the framework properties to it to verify
 # that everything still builds correctly, but it will not actually produce
 # a framework... The framework properties only apply when the library type