summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorKen Martin <ken.martin@kitware.com>2008-01-18 15:25:25 (GMT)
committerKen Martin <ken.martin@kitware.com>2008-01-18 15:25:25 (GMT)
commit7c473d482824cb251db0213955b36f1d391120a1 (patch)
treeed2fcb0b61d551a3ce6a42a8701a70ff00d1796e /Source
parent6ad79d13ddd74b9bf1a1819527d5eb1e88bac8c2 (diff)
downloadCMake-7c473d482824cb251db0213955b36f1d391120a1.zip
CMake-7c473d482824cb251db0213955b36f1d391120a1.tar.gz
CMake-7c473d482824cb251db0213955b36f1d391120a1.tar.bz2
BUG: fix bugs 5539 (progress going beyond 100% when new files are added) and 5889 (tests are not found in some cases when using add_subdirectory to .. etc)
Diffstat (limited to 'Source')
-rw-r--r--Source/CTest/cmCTestTestHandler.cxx87
-rw-r--r--Source/cmLocalGenerator.cxx19
-rw-r--r--Source/cmLocalUnixMakefileGenerator3.cxx23
-rw-r--r--Source/cmake.cxx14
4 files changed, 73 insertions, 70 deletions
diff --git a/Source/CTest/cmCTestTestHandler.cxx b/Source/CTest/cmCTestTestHandler.cxx
index 44bb98d..1eb0648 100644
--- a/Source/CTest/cmCTestTestHandler.cxx
+++ b/Source/CTest/cmCTestTestHandler.cxx
@@ -36,7 +36,7 @@
#include <memory> // auto_ptr
//----------------------------------------------------------------------
-class cmCTestSubdirCommand : public cmCommand
+class cmCTestAddSubdirectoryCommand : public cmCommand
{
public:
/**
@@ -44,7 +44,7 @@ public:
*/
virtual cmCommand* Clone()
{
- cmCTestSubdirCommand* c = new cmCTestSubdirCommand;
+ cmCTestAddSubdirectoryCommand* c = new cmCTestAddSubdirectoryCommand;
c->TestHandler = this->TestHandler;
return c;
}
@@ -58,65 +58,63 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "SUBDIRS";}
+ virtual const char* GetName() { return "add_subdirectory";}
// Unused methods
virtual const char* GetTerseDocumentation() { return ""; }
virtual const char* GetFullDocumentation() { return ""; }
- cmTypeMacro(cmCTestSubdirCommand, cmCommand);
+ cmTypeMacro(cmCTestAddSubdirectoryCommand, cmCommand);
cmCTestTestHandler* TestHandler;
};
//----------------------------------------------------------------------
-bool cmCTestSubdirCommand::InitialPass(std::vector<std::string> const& args)
+bool cmCTestAddSubdirectoryCommand
+::InitialPass(std::vector<std::string> const& args)
{
if(args.size() < 1 )
{
this->SetError("called with incorrect number of arguments");
return false;
}
- std::vector<std::string>::const_iterator it;
+
std::string cwd = cmSystemTools::GetCurrentWorkingDirectory();
- for ( it = args.begin(); it != args.end(); ++ it )
- {
- cmSystemTools::ChangeDirectory(cwd.c_str());
- std::string fname = cwd;
- fname += "/";
- fname += *it;
+ cmSystemTools::ChangeDirectory(cwd.c_str());
+ std::string fname = cwd;
+ fname += "/";
+ fname += args[1];
- if ( !cmSystemTools::FileExists(fname.c_str()) )
- {
- // No subdirectory? So what...
- continue;
- }
- cmSystemTools::ChangeDirectory(fname.c_str());
- const char* testFilename;
- if( cmSystemTools::FileExists("CTestTestfile.cmake") )
- {
- // does the CTestTestfile.cmake exist ?
- testFilename = "CTestTestfile.cmake";
- }
- else
- {
- // No CTestTestfile? Who cares...
- cmSystemTools::ChangeDirectory(cwd.c_str());
- continue;
- }
- fname += "/";
- fname += testFilename;
- bool readit =
- this->Makefile->ReadListFile(this->Makefile->GetCurrentListFile(),
- fname.c_str());
+ if ( !cmSystemTools::FileExists(fname.c_str()) )
+ {
+ // No subdirectory? So what...
+ return true;
+ }
+ cmSystemTools::ChangeDirectory(fname.c_str());
+ const char* testFilename;
+ if( cmSystemTools::FileExists("CTestTestfile.cmake") )
+ {
+ // does the CTestTestfile.cmake exist ?
+ testFilename = "CTestTestfile.cmake";
+ }
+ else
+ {
+ // No CTestTestfile? Who cares...
cmSystemTools::ChangeDirectory(cwd.c_str());
- if(!readit)
- {
- std::string m = "Could not find include file: ";
- m += fname;
- this->SetError(m.c_str());
- return false;
- }
+ return true;
+ }
+ fname += "/";
+ fname += testFilename;
+ bool readit =
+ this->Makefile->ReadListFile(this->Makefile->GetCurrentListFile(),
+ fname.c_str());
+ cmSystemTools::ChangeDirectory(cwd.c_str());
+ if(!readit)
+ {
+ std::string m = "Could not find include file: ";
+ m += fname;
+ this->SetError(m.c_str());
+ return false;
}
return true;
}
@@ -1260,8 +1258,9 @@ void cmCTestTestHandler::GetListOfTests()
newCom1->TestHandler = this;
cm.AddCommand(newCom1);
- // Add handler for SUBDIR
- cmCTestSubdirCommand* newCom2 = new cmCTestSubdirCommand;
+ // Add handler for ADD_SUBDIRECTORY
+ cmCTestAddSubdirectoryCommand* newCom2 =
+ new cmCTestAddSubdirectoryCommand;
newCom2->TestHandler = this;
cm.AddCommand(newCom2);
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 66007d4..9c7c4b6 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -272,22 +272,19 @@ void cmLocalGenerator::GenerateTestFiles()
}
if ( this->Children.size())
{
- fout << "SUBDIRS(";
size_t i;
- std::string outDir = this->Makefile->GetStartOutputDirectory();
- outDir += "/";
for(i = 0; i < this->Children.size(); ++i)
{
- std::string binP =
+ fout << "ADD_SUBDIRECTORY(";
+ std::string srcP =
+ this->Children[i]->GetMakefile()->GetStartDirectory();
+ fout << this->Convert(srcP.c_str(),START);
+ fout << " ";
+ std::string outP =
this->Children[i]->GetMakefile()->GetStartOutputDirectory();
- cmSystemTools::ReplaceString(binP, outDir.c_str(), "");
- if ( i > 0 )
- {
- fout << " ";
- }
- fout << binP.c_str();
+ fout << this->Convert(outP.c_str(),START_OUTPUT);
+ fout << ")" << std::endl;
}
- fout << ")" << std::endl << std::endl;;
}
}
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx
index be7ae59..e5038c9 100644
--- a/Source/cmLocalUnixMakefileGenerator3.cxx
+++ b/Source/cmLocalUnixMakefileGenerator3.cxx
@@ -210,8 +210,7 @@ void cmLocalUnixMakefileGenerator3::WriteAllProgressVariable()
cmGlobalUnixMakefileGenerator3 *gg =
static_cast<cmGlobalUnixMakefileGenerator3*>(this->GlobalGenerator);
- ruleFileStream << "CMAKE_ALL_PROGRESS = "
- << gg->GetNumberOfProgressActionsInAll(this) << "\n";
+ ruleFileStream << gg->GetNumberOfProgressActionsInAll(this) << "\n";
}
//----------------------------------------------------------------------------
@@ -1577,17 +1576,6 @@ void cmLocalUnixMakefileGenerator3
this->WriteSpecialTargetsTop(ruleFileStream);
// Include the progress variables for the target.
- std::string progressFile = cmake::GetCMakeFilesDirectory();
- progressFile += "/progress.make";
- std::string progressFileNameFull =
- this->ConvertToFullPath(progressFile.c_str());
- ruleFileStream
- << "# Include the progress variables for this target.\n"
- << this->IncludeDirective << " "
- << this->Convert(progressFileNameFull.c_str(),
- cmLocalGenerator::START_OUTPUT,
- cmLocalGenerator::MAKEFILE) << "\n\n";
-
// Write all global targets
this->WriteDivider(ruleFileStream);
ruleFileStream
@@ -1672,7 +1660,14 @@ void cmLocalUnixMakefileGenerator3
progCmd << this->Convert(progressDir.c_str(),
cmLocalGenerator::FULL,
cmLocalGenerator::SHELL);
- progCmd << " $(CMAKE_ALL_PROGRESS)";
+
+ std::string progressFile = cmake::GetCMakeFilesDirectory();
+ progressFile += "/progress.make";
+ std::string progressFileNameFull =
+ this->ConvertToFullPath(progressFile.c_str());
+ progCmd << " " << this->Convert(progressFileNameFull.c_str(),
+ cmLocalGenerator::FULL,
+ cmLocalGenerator::SHELL);
commands.push_back(progCmd.str());
}
std::string mf2Dir = cmake::GetCMakeFilesDirectoryPostSlash();
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index e95a3bb..f43f191 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -1185,7 +1185,19 @@ int cmake::ExecuteCMakeCommand(std::vector<std::string>& args)
std::string dirName = args[2];
dirName += "/Progress";
cmSystemTools::RemoveADirectory(dirName.c_str());
- int count = atoi(args[3].c_str());
+
+ // is the last argument a filename that exists?
+ FILE *countFile = fopen(args[3].c_str(),"r");
+ int count;
+ if (countFile)
+ {
+ fscanf(countFile,"%i",&count);
+ fclose(countFile);
+ }
+ else
+ {
+ count = atoi(args[3].c_str());
+ }
if (count)
{
cmSystemTools::MakeDirectory(dirName.c_str());