Browse Source

Merge topic 'fix-getsafedef-stdstring'

2428422c02 Fix regression in target output file naming logic
d686f81e58 Restore possibly regressed CMP0018 logic

Acked-by: Kitware Robot <[email protected]>
Merge-request: !2402
Brad King 7 years ago
parent
commit
76a19eb6c1

+ 8 - 9
Source/cmGeneratorTarget.cxx

@@ -3494,13 +3494,12 @@ void cmGeneratorTarget::GetFullNameInternal(
   }
 
   // if there is no prefix on the target use the cmake definition
-  std::string targetPrefix2, targetSuffix2;
   if (!targetPrefix && prefixVar) {
-    targetPrefix2 = this->Makefile->GetSafeDefinition(prefixVar);
+    targetPrefix = this->Makefile->GetSafeDefinition(prefixVar).c_str();
   }
   // if there is no suffix on the target use the cmake definition
   if (!targetSuffix && suffixVar) {
-    targetSuffix2 = this->Makefile->GetSafeDefinition(suffixVar);
+    targetSuffix = this->Makefile->GetSafeDefinition(suffixVar).c_str();
   }
 
   // frameworks have directory prefix but no suffix
@@ -3508,19 +3507,19 @@ void cmGeneratorTarget::GetFullNameInternal(
   if (this->IsFrameworkOnApple()) {
     fw_prefix = this->GetFrameworkDirectory(config, ContentLevel);
     fw_prefix += "/";
-    targetPrefix2 = fw_prefix;
-    targetSuffix2.clear();
+    targetPrefix = fw_prefix.c_str();
+    targetSuffix = nullptr;
   }
 
   if (this->IsCFBundleOnApple()) {
     fw_prefix = this->GetCFBundleDirectory(config, FullLevel);
     fw_prefix += "/";
-    targetPrefix2 = fw_prefix;
-    targetSuffix2.clear();
+    targetPrefix = fw_prefix.c_str();
+    targetSuffix = nullptr;
   }
 
   // Begin the final name with the prefix.
-  outPrefix = targetPrefix2;
+  outPrefix = targetPrefix ? targetPrefix : "";
 
   // Append the target name or property-specified name.
   outBase += this->GetOutputName(config, artifact);
@@ -3539,7 +3538,7 @@ void cmGeneratorTarget::GetFullNameInternal(
   }
 
   // Append the suffix.
-  outSuffix = targetSuffix2;
+  outSuffix = targetSuffix ? targetSuffix : "";
 }
 
 std::string cmGeneratorTarget::GetLinkerLanguage(

+ 1 - 4
Source/cmGlobalGenerator.cxx

@@ -828,11 +828,8 @@ void cmGlobalGenerator::EnableLanguage(
     std::string sharedLibFlagsVar = "CMAKE_SHARED_LIBRARY_";
     sharedLibFlagsVar += lang;
     sharedLibFlagsVar += "_FLAGS";
-    std::string const& sharedLibFlags =
+    this->LanguageToOriginalSharedLibFlags[lang] =
       mf->GetSafeDefinition(sharedLibFlagsVar);
-    if (!sharedLibFlags.empty()) {
-      this->LanguageToOriginalSharedLibFlags[lang] = sharedLibFlags;
-    }
 
     // Translate compiler ids for compatibility.
     this->CheckCompilerIdCompatibility(mf, lang);

+ 1 - 1
Source/cmLocalGenerator.cxx

@@ -1826,7 +1826,7 @@ bool cmLocalGenerator::GetShouldUseOldFlags(bool shared,
     flagsVar += "_FLAGS";
     std::string const& flags = this->Makefile->GetSafeDefinition(flagsVar);
 
-    if (!flags.empty() && flags != originalFlags) {
+    if (flags != originalFlags) {
       switch (this->GetPolicyStatus(cmPolicies::CMP0018)) {
         case cmPolicies::WARN: {
           std::ostringstream e;

+ 1 - 0
Tests/CMakeLists.txt

@@ -368,6 +368,7 @@ if(BUILD_TESTING)
   ADD_TEST_MACRO(CxxSubdirC CxxSubdirC)
   ADD_TEST_MACRO(IPO COnly/COnly)
   ADD_TEST_MACRO(OutDir runtime/OutDir)
+  ADD_TEST_MACRO(OutName exe.OutName.exe)
   ADD_TEST_MACRO(ObjectLibrary UseCshared)
   ADD_TEST_MACRO(NewlineArgs NewlineArgs)
   ADD_TEST_MACRO(SetLang SetLang)

+ 6 - 0
Tests/OutName/CMakeLists.txt

@@ -0,0 +1,6 @@
+cmake_minimum_required(VERSION 3.12)
+project(OutName C)
+
+add_executable(OutName main.c)
+set_property(TARGET OutName PROPERTY PREFIX exe.)
+set_property(TARGET OutName PROPERTY SUFFIX .exe)

+ 4 - 0
Tests/OutName/main.c

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