Browse Source

xcode: Don't set INSTALL_PATH unless target is SHARED_LIBRARY

An empty INSTALL_PATH will confuse Xcode, resulting in the archive
action producing archives that can not be uploaded to the App Store.

The logic to pull out a install_name_dir only applies to
SHARED_LIBRARY targets, so we can skip the setting of the
property for all other targets.

There might be cases where the INSTALL_PATH code path will also
end up setting an empty INSTALL_PATH, but it's unclear whether
this is a problem, so to keep the patch minimal the existing
code is left as is.

Fixes: #15183
Tor Arne Vestbø 3 years ago
parent
commit
61acaa12af
1 changed files with 3 additions and 3 deletions
  1. 3 3
      Source/cmGlobalXCodeGenerator.cxx

+ 3 - 3
Source/cmGlobalXCodeGenerator.cxx

@@ -2894,8 +2894,8 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmGeneratorTarget* gtgt,
   }
 
   // Create the INSTALL_PATH attribute.
-  std::string install_name_dir;
   if (gtgt->GetType() == cmStateEnums::SHARED_LIBRARY) {
+    std::string install_name_dir;
     // Get the install_name directory for the build tree.
     install_name_dir = gtgt->GetInstallNameDirForBuildTree(configName);
     // Xcode doesn't create the correct install_name in some cases.
@@ -2917,9 +2917,9 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmGeneratorTarget* gtgt,
       extraLinkOptions += " -install_name ";
       extraLinkOptions += XCodeEscapePath(install_name);
     }
+    buildSettings->AddAttribute("INSTALL_PATH",
+                                this->CreateString(install_name_dir));
   }
-  buildSettings->AddAttribute("INSTALL_PATH",
-                              this->CreateString(install_name_dir));
 
   // Create the LD_RUNPATH_SEARCH_PATHS
   cmComputeLinkInformation* pcli = gtgt->GetLinkInformation(configName);