|
|
@@ -376,11 +376,13 @@ void cmExtraCodeBlocksGenerator
|
|
|
fout<<" </Build>\n";
|
|
|
|
|
|
|
|
|
- // Collect all used source files in the project
|
|
|
- // Sort them into two containers, one for C/C++ implementation files
|
|
|
- // which may have an acompanying header, one for all other files
|
|
|
- std::map<std::string, cmSourceFile*> cFiles;
|
|
|
- std::set<std::string> otherFiles;
|
|
|
+ // Collect all used source files in the project.
|
|
|
+ // Keep a list of C/C++ source files which might have an acompanying header
|
|
|
+ // that should be looked for.
|
|
|
+ typedef std::map<std::string, CbpUnit> all_files_map_t;
|
|
|
+ all_files_map_t allFiles;
|
|
|
+ std::vector<std::string> cFiles;
|
|
|
+
|
|
|
for (std::vector<cmLocalGenerator*>::const_iterator lg=lgs.begin();
|
|
|
lg!=lgs.end(); lg++)
|
|
|
{
|
|
|
@@ -429,15 +431,15 @@ void cmExtraCodeBlocksGenerator
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // then put it accordingly into one of the two containers
|
|
|
- if (isCFile)
|
|
|
- {
|
|
|
- cFiles[(*si)->GetFullPath()] = *si ;
|
|
|
- }
|
|
|
- else
|
|
|
+ std::string fullPath = (*si)->GetFullPath();
|
|
|
+
|
|
|
+ if(isCFile)
|
|
|
{
|
|
|
- otherFiles.insert((*si)->GetFullPath());
|
|
|
+ cFiles.push_back(fullPath);
|
|
|
}
|
|
|
+
|
|
|
+ CbpUnit &cbpUnit = allFiles[fullPath];
|
|
|
+ cbpUnit.Targets.push_back(&(ti->second));
|
|
|
}
|
|
|
}
|
|
|
default: // intended fallthrough
|
|
|
@@ -447,19 +449,21 @@ void cmExtraCodeBlocksGenerator
|
|
|
}
|
|
|
|
|
|
// The following loop tries to add header files matching to implementation
|
|
|
- // files to the project. It does that by iterating over all source files,
|
|
|
+ // files to the project. It does that by iterating over all
|
|
|
+ // C/C++ source files,
|
|
|
// replacing the file name extension with ".h" and checks whether such a
|
|
|
// file exists. If it does, it is inserted into the map of files.
|
|
|
// A very similar version of that code exists also in the kdevelop
|
|
|
// project generator.
|
|
|
- for (std::map<std::string, cmSourceFile*>::const_iterator
|
|
|
+ for (std::vector<std::string>::const_iterator
|
|
|
sit=cFiles.begin();
|
|
|
sit!=cFiles.end();
|
|
|
++sit)
|
|
|
{
|
|
|
- std::string headerBasename=cmSystemTools::GetFilenamePath(sit->first);
|
|
|
+ std::string const& fileName = *sit;
|
|
|
+ std::string headerBasename=cmSystemTools::GetFilenamePath(fileName);
|
|
|
headerBasename+="/";
|
|
|
- headerBasename+=cmSystemTools::GetFilenameWithoutExtension(sit->first);
|
|
|
+ headerBasename+=cmSystemTools::GetFilenameWithoutExtension(fileName);
|
|
|
|
|
|
// check if there's a matching header around
|
|
|
for(std::vector<std::string>::const_iterator
|
|
|
@@ -471,37 +475,38 @@ void cmExtraCodeBlocksGenerator
|
|
|
hname += ".";
|
|
|
hname += *ext;
|
|
|
// if it's already in the set, don't check if it exists on disk
|
|
|
- std::set<std::string>::const_iterator headerIt=otherFiles.find(hname);
|
|
|
- if (headerIt != otherFiles.end())
|
|
|
+ if (allFiles.find(hname) != allFiles.end())
|
|
|
{
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
if(cmSystemTools::FileExists(hname.c_str()))
|
|
|
{
|
|
|
- otherFiles.insert(hname);
|
|
|
+ allFiles[hname].Targets = allFiles[fileName].Targets;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// insert all source files in the CodeBlocks project
|
|
|
- // first the C/C++ implementation files, then all others
|
|
|
- for (std::map<std::string, cmSourceFile*>::const_iterator
|
|
|
- sit=cFiles.begin();
|
|
|
- sit!=cFiles.end();
|
|
|
+ for (all_files_map_t::const_iterator
|
|
|
+ sit=allFiles.begin();
|
|
|
+ sit!=allFiles.end();
|
|
|
++sit)
|
|
|
{
|
|
|
- fout<<" <Unit filename=\""<< sit->first <<"\">\n"
|
|
|
- " </Unit>\n";
|
|
|
- }
|
|
|
- for (std::set<std::string>::const_iterator
|
|
|
- sit=otherFiles.begin();
|
|
|
- sit!=otherFiles.end();
|
|
|
- ++sit)
|
|
|
- {
|
|
|
- fout<<" <Unit filename=\""<< *sit <<"\">\n"
|
|
|
- " </Unit>\n";
|
|
|
+ std::string const& unitFilename = sit->first;
|
|
|
+ CbpUnit const& unit = sit->second;
|
|
|
+
|
|
|
+ fout<<" <Unit filename=\""<< cmXMLSafe(unitFilename) <<"\">\n";
|
|
|
+
|
|
|
+ for(std::vector<const cmTarget*>::const_iterator ti = unit.Targets.begin();
|
|
|
+ ti != unit.Targets.end(); ++ti)
|
|
|
+ {
|
|
|
+ std::string const& targetName = (*ti)->GetName();
|
|
|
+ fout<<" <Option target=\""<< cmXMLSafe(targetName) <<"\"/>\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ fout<<" </Unit>\n";
|
|
|
}
|
|
|
|
|
|
// Add CMakeLists.txt
|