diff options
Diffstat (limited to 'Source/cmGlobalKdevelopGenerator.cxx')
-rw-r--r-- | Source/cmGlobalKdevelopGenerator.cxx | 60 |
1 files changed, 49 insertions, 11 deletions
diff --git a/Source/cmGlobalKdevelopGenerator.cxx b/Source/cmGlobalKdevelopGenerator.cxx index 012262d..94b431d 100644 --- a/Source/cmGlobalKdevelopGenerator.cxx +++ b/Source/cmGlobalKdevelopGenerator.cxx @@ -66,10 +66,11 @@ void cmGlobalKdevelopGenerator::Generate() std::string projectDir=mf->GetHomeDirectory(); std::string projectName=mf->GetProjectName(); std::string cmakeFilePattern("CMakeLists.txt;*.cmake;"); + std::string fileToOpen; // create the project.kdevelop.filelist file if(!this->CreateFilelistFile(it->second[0], it->second, outputDir, projectDir, - projectName, cmakeFilePattern)) + projectName, cmakeFilePattern, fileToOpen)) { cmSystemTools::Error("Can not create filelist file"); return; @@ -83,13 +84,13 @@ void cmGlobalKdevelopGenerator::Generate() { if (ti->second.GetType()==cmTarget::EXECUTABLE) { - executable=ti->first; + executable = ti->second.GetProperty("LOCATION"); break; } } // now create a project file this->CreateProjectFile(outputDir, projectDir, projectName, - executable, cmakeFilePattern); + executable, cmakeFilePattern, fileToOpen); } } @@ -99,7 +100,8 @@ bool cmGlobalKdevelopGenerator const std::string& outputDir, const std::string& projectDirIn, const std::string& projectname, - std::string& cmakeFilePattern) + std::string& cmakeFilePattern, + std::string& fileToOpen) { std::string projectDir = projectDirIn + "/"; std::string filename = outputDir+ "/" + projectname +".kdevelop.filelist"; @@ -188,11 +190,21 @@ bool cmGlobalKdevelopGenerator return false; } + fileToOpen=""; for (std::set<cmStdString>::const_iterator it=files.begin(); it!=files.end(); it++) { // get the full path to the file tmp=cmSystemTools::CollapseFullPath(it->c_str(), projectDir.c_str()); + // just select the first source file + if (fileToOpen.empty()) + { + std::string ext = cmSystemTools::GetFilenameExtension(tmp); + if ((ext==".c") || (ext==".cc") || (ext==".cpp") || (ext==".C") || (ext==".h")) + { + fileToOpen=tmp; + } + } // make it relative to the project dir cmSystemTools::ReplaceString(tmp, projectDir.c_str(), ""); // only put relative paths @@ -212,20 +224,24 @@ cmGlobalKdevelopGenerator::CreateProjectFile(const std::string& outputDir, const std::string& projectDir, const std::string& projectname, const std::string& executable, - const std::string& cmakeFilePattern) + const std::string& cmakeFilePattern, + const std::string& fileToOpen) { std::string filename=outputDir+"/"; filename+=projectname+".kdevelop"; + std::string sessionFilename=outputDir+"/"; + sessionFilename+=projectname+".kdevses"; if (cmSystemTools::FileExists(filename.c_str())) { this->MergeProjectFiles(outputDir, projectDir, filename, - executable, cmakeFilePattern); + executable, cmakeFilePattern, fileToOpen, sessionFilename); } else { + this->CreateNewProjectFile(outputDir, projectDir, filename, - executable, cmakeFilePattern); + executable, cmakeFilePattern, fileToOpen, sessionFilename); } } @@ -235,12 +251,14 @@ cmGlobalKdevelopGenerator::MergeProjectFiles(const std::string& outputDir, const std::string& projectDir, const std::string& filename, const std::string& executable, - const std::string& cmakeFilePattern) + const std::string& cmakeFilePattern, + const std::string& fileToOpen, + const std::string& sessionFilename) { std::ifstream oldProjectFile(filename.c_str()); if (!oldProjectFile) { - this->CreateNewProjectFile(outputDir, projectDir, filename, executable, cmakeFilePattern); + this->CreateNewProjectFile(outputDir, projectDir, filename, executable, cmakeFilePattern, fileToOpen, sessionFilename); return; } @@ -305,7 +323,9 @@ cmGlobalKdevelopGenerator::CreateNewProjectFile(const std::string& outputDir, const std::string& projectDir, const std::string& filename, const std::string& executable, - const std::string& cmakeFilePattern) + const std::string& cmakeFilePattern, + const std::string& fileToOpen, + const std::string& sessionFilename) { cmGeneratedFileStream fout(filename.c_str()); if(!fout) @@ -331,7 +351,7 @@ cmGlobalKdevelopGenerator::CreateNewProjectFile(const std::string& outputDir, fout<<" <kdevcustomproject>\n"; fout<<" <filelistdirectory>"<<outputDir.c_str()<<"</filelistdirectory>\n"; fout<<" <run>\n"; - fout<<" <mainprogram>"<<outputDir.c_str()<<"/"<<executable.c_str()<<"</mainprogram>\n"; + fout<<" <mainprogram>"<<executable.c_str()<<"</mainprogram>\n"; fout<<" <directoryradio>custom</directoryradio>\n"; fout<<" <customdirectory>/</customdirectory>\n"; fout<<" <programargs></programargs>\n"; @@ -409,5 +429,23 @@ cmGlobalKdevelopGenerator::CreateNewProjectFile(const std::string& outputDir, fout<<" </kdevfileview>\n"; fout<<"</kdevelop>\n"; + if (sessionFilename.empty()) + return; + + // and a session file, so that kdevelop opens a file if it opens the project the first time + cmGeneratedFileStream devses(sessionFilename.c_str()); + if(!devses) + { + return; + } + devses<<"<?xml version = '1.0' encoding = \'UTF-8\'?>\n"; + devses<<"<!DOCTYPE KDevPrjSession>\n"; + devses<<"<KDevPrjSession>\n"; + devses<<" <DocsAndViews NumberOfDocuments=\"1\" >\n"; + devses<<" <Doc0 NumberOfViews=\"1\" URL=\"file://"<<fileToOpen.c_str()<<"\" >\n"; + devses<<" <View0 line=\"0\" Type=\"Source\" />\n"; + devses<<" </Doc0>\n"; + devses<<" </DocsAndViews>\n"; + devses<<"</KDevPrjSession>\n"; } |