Procházet zdrojové kódy

Record backtrace for every add_test command

We teach cmTest to hold a backtrace for the add_test command that
created it.  This will be used later to report context for errors at
generate time.
Brad King před 16 roky
rodič
revize
0bc050677f
3 změnil soubory, kde provedl 21 přidání a 17 odebrání
  1. 1 2
      Source/cmMakefile.cxx
  2. 12 9
      Source/cmTest.cxx
  3. 8 6
      Source/cmTest.h

+ 1 - 2
Source/cmMakefile.cxx

@@ -3314,9 +3314,8 @@ cmTest* cmMakefile::CreateTest(const char* testName)
     {
     return test;
     }
-  test = new cmTest;
+  test = new cmTest(this);
   test->SetName(testName);
-  test->SetMakefile(this);
   this->Tests[testName] = test;
   return test;
 }

+ 12 - 9
Source/cmTest.cxx

@@ -21,15 +21,25 @@
 #include "cmMakefile.h"
 
 //----------------------------------------------------------------------------
-cmTest::cmTest() 
+cmTest::cmTest(cmMakefile* mf)
 {
-  this->Makefile = 0;
+  this->Makefile = mf;
   this->OldStyle = true;
+  this->Properties.SetCMakeInstance(mf->GetCMakeInstance());
+  this->Backtrace = new cmListFileBacktrace;
+  this->Makefile->GetBacktrace(*this->Backtrace);
 }
 
 //----------------------------------------------------------------------------
 cmTest::~cmTest()
 {
+  delete this->Backtrace;
+}
+
+//----------------------------------------------------------------------------
+cmListFileBacktrace const& cmTest::GetBacktrace() const
+{
+  return *this->Backtrace;
 }
 
 //----------------------------------------------------------------------------
@@ -88,13 +98,6 @@ void cmTest::AppendProperty(const char* prop, const char* value)
   this->Properties.AppendProperty(prop, value, cmProperty::TEST);
 }
 
-//----------------------------------------------------------------------------
-void cmTest::SetMakefile(cmMakefile* mf)
-{
-  this->Makefile = mf;
-  this->Properties.SetCMakeInstance(mf->GetCMakeInstance());
-}
-
 //----------------------------------------------------------------------------
 void cmTest::DefineProperties(cmake *cm)
 {

+ 8 - 6
Source/cmTest.h

@@ -20,6 +20,7 @@
 #include "cmCustomCommand.h"
 #include "cmPropertyMap.h"
 class cmMakefile;
+class cmListFileBacktrace;
 
 /** \class cmTest
  * \brief Represent a test
@@ -31,7 +32,7 @@ class cmTest
 public:
   /**
    */
-  cmTest();
+  cmTest(cmMakefile* mf);
   ~cmTest();
 
   ///! Set the test name
@@ -59,10 +60,12 @@ public:
   // Define the properties
   static void DefineProperties(cmake *cm);
 
-  ///! Set the cmMakefile that owns this test
-  void SetMakefile(cmMakefile *mf);
+  /** Get the cmMakefile instance that owns this test.  */
   cmMakefile *GetMakefile() { return this->Makefile;};
 
+  /** Get the backtrace of the command that created this test.  */
+  cmListFileBacktrace const& GetBacktrace() const;
+
   /** Get/Set whether this is an old-style test.  */
   bool GetOldStyle() const { return this->OldStyle; }
   void SetOldStyle(bool b) { this->OldStyle = b; }
@@ -74,9 +77,8 @@ private:
 
   bool OldStyle;
 
-  // The cmMakefile instance that owns this target.  This should
-  // always be set.
-  cmMakefile* Makefile;  
+  cmMakefile* Makefile;
+  cmListFileBacktrace* Backtrace;
 };
 
 #endif