diff --git a/Source/CTest/cmCTestTestHandler.cxx b/Source/CTest/cmCTestTestHandler.cxx index 44bb98df6..1eb0648a0 100644 --- a/Source/CTest/cmCTestTestHandler.cxx +++ b/Source/CTest/cmCTestTestHandler.cxx @@ -36,7 +36,7 @@ #include // 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 const& args) +bool cmCTestAddSubdirectoryCommand +::InitialPass(std::vector const& args) { if(args.size() < 1 ) { this->SetError("called with incorrect number of arguments"); return false; } - std::vector::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; - 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()); + std::string cwd = cmSystemTools::GetCurrentWorkingDirectory(); + cmSystemTools::ChangeDirectory(cwd.c_str()); + std::string fname = cwd; + fname += "/"; + fname += args[1]; + + 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 66007d47d..9c7c4b601 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 be7ae5904..e5038c9e4 100644 --- a/Source/cmLocalUnixMakefileGenerator3.cxx +++ b/Source/cmLocalUnixMakefileGenerator3.cxx @@ -210,8 +210,7 @@ void cmLocalUnixMakefileGenerator3::WriteAllProgressVariable() cmGlobalUnixMakefileGenerator3 *gg = static_cast(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 e95a3bbe7..f43f191c2 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -1185,7 +1185,19 @@ int cmake::ExecuteCMakeCommand(std::vector& 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());