diff options
author | Ken Martin <ken.martin@kitware.com> | 2006-12-11 15:26:10 (GMT) |
---|---|---|
committer | Ken Martin <ken.martin@kitware.com> | 2006-12-11 15:26:10 (GMT) |
commit | 179579bed7aa3e1d6894e0f8399e9a53ca450112 (patch) | |
tree | 1cae7421324a41a1ee94cc959da47ae4cf9396f4 /Source/cmSetSourceFilesPropertiesCommand.cxx | |
parent | 09029e9cd864be132bb8b381635d95764f1209d4 (diff) | |
download | CMake-179579bed7aa3e1d6894e0f8399e9a53ca450112.zip CMake-179579bed7aa3e1d6894e0f8399e9a53ca450112.tar.gz CMake-179579bed7aa3e1d6894e0f8399e9a53ca450112.tar.bz2 |
ENH: improve SetProperties and fix a couple warnings
Diffstat (limited to 'Source/cmSetSourceFilesPropertiesCommand.cxx')
-rw-r--r-- | Source/cmSetSourceFilesPropertiesCommand.cxx | 92 |
1 files changed, 60 insertions, 32 deletions
diff --git a/Source/cmSetSourceFilesPropertiesCommand.cxx b/Source/cmSetSourceFilesPropertiesCommand.cxx index 8c085ff..5e7618d 100644 --- a/Source/cmSetSourceFilesPropertiesCommand.cxx +++ b/Source/cmSetSourceFilesPropertiesCommand.cxx @@ -28,56 +28,89 @@ bool cmSetSourceFilesPropertiesCommand::InitialPass( return false; } - // first collect up the list of files + // break the arguments into source file names and properties + int numFiles = 0; + std::vector<std::string>::const_iterator j; + j = args.begin(); + // old style allows for specifier before PROPERTIES keyword + while (*j != "ABSTRACT" && + *j != "WRAP_EXCLUDE" && + *j != "GENERATED" && + *j != "COMPILE_FLAGS" && + *j != "OBJECT_DEPENDS" && + *j != "PROPERTIES") + { + numFiles++; + ++j; + } + + // now call the worker function + std::string errors; + bool ret = + cmSetSourceFilesPropertiesCommand + ::RunCommand(this->Makefile, + args.begin(), + args.begin() + numFiles, + args.begin() + numFiles, + args.end(), errors); + if (!ret) + { + this->SetError(errors.c_str()); + } + return ret; +} + +bool cmSetSourceFilesPropertiesCommand +::RunCommand(cmMakefile *mf, + std::vector<std::string>::const_iterator filebeg, + std::vector<std::string>::const_iterator fileend, + std::vector<std::string>::const_iterator propbeg, + std::vector<std::string>::const_iterator propend, + std::string &errors) +{ std::vector<std::string> propertyPairs; - bool doingFiles = true; bool generated = false; - int numFiles = 0; std::vector<std::string>::const_iterator j; - for(j= args.begin(); j != args.end();++j) + // build the property pairs + for(j= propbeg; j != propend;++j) { // old style allows for specifier before PROPERTIES keyword if(*j == "ABSTRACT") { - doingFiles = false; propertyPairs.push_back("ABSTRACT"); propertyPairs.push_back("1"); } else if(*j == "WRAP_EXCLUDE") { - doingFiles = false; propertyPairs.push_back("WRAP_EXCLUDE"); propertyPairs.push_back("1"); } else if(*j == "GENERATED") { - doingFiles = false; generated = true; propertyPairs.push_back("GENERATED"); propertyPairs.push_back("1"); } else if(*j == "COMPILE_FLAGS") { - doingFiles = false; propertyPairs.push_back("COMPILE_FLAGS"); ++j; - if(j == args.end()) + if(j == propend) { - this->SetError("called with incorrect number of arguments " - "COMPILE_FLAGS with no flags"); + errors = "called with incorrect number of arguments " + "COMPILE_FLAGS with no flags"; return false; } propertyPairs.push_back(*j); } else if(*j == "OBJECT_DEPENDS") { - doingFiles = false; propertyPairs.push_back("OBJECT_DEPENDS"); ++j; - if(j == args.end()) + if(j == propend) { - this->SetError("called with incorrect number of arguments " - "OBJECT_DEPENDS with no dependencies"); + errors = "called with incorrect number of arguments " + "OBJECT_DEPENDS with no dependencies"; return false; } propertyPairs.push_back(*j); @@ -87,13 +120,13 @@ bool cmSetSourceFilesPropertiesCommand::InitialPass( // now loop through the rest of the arguments, new style ++j; bool dontPush = false; - while (j != args.end()) + while (j != propend) { propertyPairs.push_back(*j); if(*j == "GENERATED") { ++j; - if(j != args.end() && cmSystemTools::IsOn(j->c_str())) + if(j != propend && cmSystemTools::IsOn(j->c_str())) { generated = true; } @@ -101,10 +134,10 @@ bool cmSetSourceFilesPropertiesCommand::InitialPass( else if(*j == "MACOSX_PACKAGE_LOCATION") { ++j; - if(j == args.end()) + if(j == propend) { - this->SetError("called with incorrect number of arguments " - "MACOSX_PACKAGE_LOCATION with no flags"); + errors = "called with incorrect number of arguments " + "MACOSX_PACKAGE_LOCATION with no flags"; return false; } propertyPairs.push_back(*j); @@ -122,9 +155,9 @@ bool cmSetSourceFilesPropertiesCommand::InitialPass( { ++j; } - if(j == args.end()) + if(j == propend) { - this->SetError("called with incorrect number of arguments."); + errors = "called with incorrect number of arguments."; return false; } if ( !dontPush ) @@ -137,29 +170,24 @@ bool cmSetSourceFilesPropertiesCommand::InitialPass( // break out of the loop because j is already == end break; } - else if (doingFiles) - { - numFiles++; - } else { - this->SetError("called with illegal arguments, maybe missing a " - "PROPERTIES specifier?"); + errors = "called with illegal arguments, maybe missing a " + "PROPERTIES specifier?"; return false; } } // now loop over all the files - int i; - unsigned int k; - for(i = 0; i < numFiles; ++i) + for(j= filebeg; j != fileend;++j) { // get the source file cmSourceFile* sf = - this->Makefile->GetOrCreateSource(args[i].c_str(), generated); + mf->GetOrCreateSource(j->c_str(), generated); if(sf) { // now loop through all the props and set them + unsigned int k; for (k = 0; k < propertyPairs.size(); k = k + 2) { sf->SetProperty(propertyPairs[k].c_str(),propertyPairs[k+1].c_str()); |