Browse Source

cmTargetPropertyComputer::GetProperty: return cmProp

Vitaly Stakhovsky 5 years ago
parent
commit
fad0ee5404
3 changed files with 23 additions and 19 deletions
  1. 4 4
      Source/cmGeneratorTarget.cxx
  2. 5 3
      Source/cmTarget.cxx
  3. 14 12
      Source/cmTargetPropertyComputer.h

+ 4 - 4
Source/cmGeneratorTarget.cxx

@@ -52,11 +52,11 @@
 class cmMessenger;
 
 template <>
-const char* cmTargetPropertyComputer::GetSources<cmGeneratorTarget>(
+cmProp cmTargetPropertyComputer::GetSources<cmGeneratorTarget>(
   cmGeneratorTarget const* tgt, cmMessenger* /* messenger */,
   cmListFileBacktrace const& /* context */)
 {
-  return tgt->GetSourcesProperty().c_str();
+  return &tgt->GetSourcesProperty();
 }
 
 template <>
@@ -376,9 +376,9 @@ const char* cmGeneratorTarget::GetProperty(const std::string& prop) const
         this->GetBacktrace())) {
     return nullptr;
   }
-  if (const char* result = cmTargetPropertyComputer::GetProperty(
+  if (cmProp result = cmTargetPropertyComputer::GetProperty(
         this, prop, this->Makefile->GetMessenger(), this->GetBacktrace())) {
-    return result;
+    return result->c_str();
   }
   if (cmSystemTools::GetFatalErrorOccured()) {
     return nullptr;

+ 5 - 3
Source/cmTarget.cxx

@@ -78,7 +78,7 @@ const std::string& cmTargetPropertyComputer::ComputeLocation<cmTarget>(
 }
 
 template <>
-const char* cmTargetPropertyComputer::GetSources<cmTarget>(
+cmProp cmTargetPropertyComputer::GetSources<cmTarget>(
   cmTarget const* tgt, cmMessenger* messenger,
   cmListFileBacktrace const& context)
 {
@@ -156,7 +156,7 @@ const char* cmTargetPropertyComputer::GetSources<cmTarget>(
   }
   static std::string srcs;
   srcs = ss.str();
-  return srcs.c_str();
+  return &srcs;
 }
 
 class cmTargetInternals
@@ -1613,7 +1613,9 @@ const char* cmTarget::GetComputedProperty(
   const std::string& prop, cmMessenger* messenger,
   cmListFileBacktrace const& context) const
 {
-  return cmTargetPropertyComputer::GetProperty(this, prop, messenger, context);
+  cmProp retVal =
+    cmTargetPropertyComputer::GetProperty(this, prop, messenger, context);
+  return retVal ? retVal->c_str() : nullptr;
 }
 
 const char* cmTarget::GetProperty(const std::string& prop) const

+ 14 - 12
Source/cmTargetPropertyComputer.h

@@ -14,15 +14,17 @@
 
 class cmMessenger;
 
+using cmProp = const std::string*;
+
 class cmTargetPropertyComputer
 {
 public:
   template <typename Target>
-  static const char* GetProperty(Target const* tgt, const std::string& prop,
-                                 cmMessenger* messenger,
-                                 cmListFileBacktrace const& context)
+  static cmProp GetProperty(Target const* tgt, const std::string& prop,
+                            cmMessenger* messenger,
+                            cmListFileBacktrace const& context)
   {
-    if (const char* loc = GetLocation(tgt, prop, messenger, context)) {
+    if (cmProp loc = GetLocation(tgt, prop, messenger, context)) {
       return loc;
     }
     if (cmSystemTools::GetFatalErrorOccured()) {
@@ -52,9 +54,9 @@ private:
                                             std::string const& config);
 
   template <typename Target>
-  static const char* GetLocation(Target const* tgt, std::string const& prop,
-                                 cmMessenger* messenger,
-                                 cmListFileBacktrace const& context)
+  static cmProp GetLocation(Target const* tgt, std::string const& prop,
+                            cmMessenger* messenger,
+                            cmListFileBacktrace const& context)
 
   {
     // Watch for special "computed" properties that are dependent on
@@ -71,7 +73,7 @@ private:
                                           context)) {
           return nullptr;
         }
-        return ComputeLocationForBuild(tgt).c_str();
+        return &ComputeLocationForBuild(tgt);
       }
 
       // Support "LOCATION_<CONFIG>".
@@ -82,7 +84,7 @@ private:
           return nullptr;
         }
         std::string configName = prop.substr(9);
-        return ComputeLocation(tgt, configName).c_str();
+        return &ComputeLocation(tgt, configName);
       }
 
       // Support "<CONFIG>_LOCATION".
@@ -95,7 +97,7 @@ private:
                                             context)) {
             return nullptr;
           }
-          return ComputeLocation(tgt, configName).c_str();
+          return &ComputeLocation(tgt, configName);
         }
       }
     }
@@ -103,8 +105,8 @@ private:
   }
 
   template <typename Target>
-  static const char* GetSources(Target const* tgt, cmMessenger* messenger,
-                                cmListFileBacktrace const& context);
+  static cmProp GetSources(Target const* tgt, cmMessenger* messenger,
+                           cmListFileBacktrace const& context);
 };
 
 #endif