NEW: add kdevelop patch from Alexander Neundorf
This commit is contained in:
parent
4b7f371593
commit
766c093d69
|
@ -42,6 +42,7 @@ cmLocalUnixMakefileGenerator.h
|
||||||
cmVariableWatch.h
|
cmVariableWatch.h
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# configure the .h file
|
# configure the .h file
|
||||||
CONFIGURE_FILE(
|
CONFIGURE_FILE(
|
||||||
${CMake_SOURCE_DIR}/Source/cmConfigure.cmake.h.in
|
${CMake_SOURCE_DIR}/Source/cmConfigure.cmake.h.in
|
||||||
|
@ -63,6 +64,14 @@ IF (APPLE)
|
||||||
)
|
)
|
||||||
ENDIF (APPLE)
|
ENDIF (APPLE)
|
||||||
|
|
||||||
|
# Kdevelop only works on UNIX and not windows
|
||||||
|
IF(UNIX AND NOT WIN32)
|
||||||
|
SET(SRCS ${SRCS}
|
||||||
|
cmGlobalKdevelopGenerator.cxx
|
||||||
|
cmLocalKdevelopGenerator.cxx)
|
||||||
|
ENDIF(UNIX AND NOT WIN32)
|
||||||
|
|
||||||
|
|
||||||
IF (WIN32)
|
IF (WIN32)
|
||||||
IF(NOT UNIX)
|
IF(NOT UNIX)
|
||||||
SET(SRCS ${SRCS}
|
SET(SRCS ${SRCS}
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
/*=========================================================================
|
||||||
|
|
||||||
|
Program: CMake - Cross-Platform Makefile Generator
|
||||||
|
Module: $RCSfile$
|
||||||
|
Language: C++
|
||||||
|
Date: $Date$
|
||||||
|
Version: $Revision$
|
||||||
|
|
||||||
|
Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
|
||||||
|
Copyright (c) 2004 Alexander Neundorf, neundorf@kde.org. All rights reserved.
|
||||||
|
See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
|
||||||
|
|
||||||
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
||||||
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. See the above copyright notices for more information.
|
||||||
|
|
||||||
|
=========================================================================*/
|
||||||
|
|
||||||
|
#include "cmGlobalKdevelopGenerator.h"
|
||||||
|
#include "cmLocalKdevelopGenerator.h"
|
||||||
|
#include "cmMakefile.h"
|
||||||
|
#include "cmake.h"
|
||||||
|
|
||||||
|
cmGlobalKdevelopGenerator::cmGlobalKdevelopGenerator()
|
||||||
|
{
|
||||||
|
// This type of makefile always requires unix style paths
|
||||||
|
m_ForceUnixPaths = true;
|
||||||
|
m_FindMakeProgramFile = "CMakeUnixFindMake.cmake";
|
||||||
|
}
|
||||||
|
|
||||||
|
///! Create a local generator appropriate to this Global Generator
|
||||||
|
cmLocalGenerator *cmGlobalKdevelopGenerator::CreateLocalGenerator()
|
||||||
|
{
|
||||||
|
cmLocalGenerator *lg = new cmLocalKdevelopGenerator;
|
||||||
|
lg->SetGlobalGenerator(this);
|
||||||
|
return lg;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void cmGlobalKdevelopGenerator::GetDocumentation(cmDocumentationEntry& entry) const
|
||||||
|
{
|
||||||
|
entry.name = this->GetName();
|
||||||
|
entry.brief = "Generates KDevelop 3 project files.";
|
||||||
|
entry.full =
|
||||||
|
"A hierarchy of UNIX makefiles is generated into the build tree. Any "
|
||||||
|
"standard UNIX-style make program can build the project through the "
|
||||||
|
"default make target. A \"make install\" target is also provided."
|
||||||
|
"Additionally in each directory which features executable or library"
|
||||||
|
" targets a KDevelop 3 project file is generated.\n"
|
||||||
|
"If you change the settings using KDevelop your cmake will try its best"
|
||||||
|
"to keep your changes when regenerating the project files.";
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
/*=========================================================================
|
||||||
|
|
||||||
|
Program: CMake - Cross-Platform Makefile Generator
|
||||||
|
Module: $RCSfile$
|
||||||
|
Language: C++
|
||||||
|
Date: $Date$
|
||||||
|
Version: $Revision$
|
||||||
|
|
||||||
|
Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
|
||||||
|
Copyright (c) 2004 Alexander Neundorf, neundorf@kde.org. All rights reserved.
|
||||||
|
See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
|
||||||
|
|
||||||
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
||||||
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. See the above copyright notices for more information.
|
||||||
|
|
||||||
|
=========================================================================*/
|
||||||
|
#ifndef cmGlobalKdevelopGenerator_h
|
||||||
|
#define cmGlobalKdevelopGenerator_h
|
||||||
|
|
||||||
|
#include "cmGlobalUnixMakefileGenerator.h"
|
||||||
|
|
||||||
|
/** \class cmGlobalUnixMakefileGenerator
|
||||||
|
* \brief Write a Unix makefiles.
|
||||||
|
*
|
||||||
|
* cmGlobalUnixMakefileGenerator manages UNIX build process for a tree
|
||||||
|
*/
|
||||||
|
class cmGlobalKdevelopGenerator : public cmGlobalUnixMakefileGenerator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
cmGlobalKdevelopGenerator();
|
||||||
|
static cmGlobalGenerator* New() { return new cmGlobalKdevelopGenerator; }
|
||||||
|
|
||||||
|
///! Get the name for the generator.
|
||||||
|
virtual const char* GetName() const {
|
||||||
|
return cmGlobalKdevelopGenerator::GetActualName();}
|
||||||
|
static const char* GetActualName() {return "KDevelop3";}
|
||||||
|
|
||||||
|
/** Get the documentation entry for this generator. */
|
||||||
|
virtual void GetDocumentation(cmDocumentationEntry& entry) const;
|
||||||
|
|
||||||
|
///! Create a local generator appropriate to this Global Generator
|
||||||
|
virtual cmLocalGenerator *CreateLocalGenerator();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,378 @@
|
||||||
|
/*=========================================================================
|
||||||
|
|
||||||
|
Program: CMake - Cross-Platform Makefile Generator
|
||||||
|
Module: $RCSfile$
|
||||||
|
Language: C++
|
||||||
|
Date: $Date$
|
||||||
|
Version: $Revision$
|
||||||
|
|
||||||
|
Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
|
||||||
|
Copyright (c) 2004 Alexander Neundorf, neundorf@kde.org. All rights reserved.
|
||||||
|
See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
|
||||||
|
|
||||||
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
||||||
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. See the above copyright notices for more information.
|
||||||
|
|
||||||
|
=========================================================================*/
|
||||||
|
#include "cmGlobalGenerator.h"
|
||||||
|
#include "cmLocalKdevelopGenerator.h"
|
||||||
|
#include "cmMakefile.h"
|
||||||
|
#include "cmSystemTools.h"
|
||||||
|
#include "cmSourceFile.h"
|
||||||
|
#include "cmMakeDepend.h"
|
||||||
|
#include "cmCacheManager.h"
|
||||||
|
#include "cmGeneratedFileStream.h"
|
||||||
|
|
||||||
|
#include <cmsys/RegularExpression.hxx>
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
|
||||||
|
cmLocalKdevelopGenerator::cmLocalKdevelopGenerator()
|
||||||
|
:cmLocalUnixMakefileGenerator()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
cmLocalKdevelopGenerator::~cmLocalKdevelopGenerator()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
void cmLocalKdevelopGenerator::Generate(bool fromTheTop)
|
||||||
|
{
|
||||||
|
cmLocalUnixMakefileGenerator::Generate(fromTheTop);
|
||||||
|
|
||||||
|
bool containsTargets=false;
|
||||||
|
std::string executable;
|
||||||
|
cmTargets& targets=m_Makefile->GetTargets();
|
||||||
|
for (cmTargets::const_iterator ti = targets.begin(); ti != targets.end(); ti++)
|
||||||
|
{
|
||||||
|
switch (ti->second.GetType())
|
||||||
|
{
|
||||||
|
case cmTarget::EXECUTABLE:
|
||||||
|
executable=ti->first;
|
||||||
|
case cmTarget::STATIC_LIBRARY:
|
||||||
|
case cmTarget::SHARED_LIBRARY:
|
||||||
|
case cmTarget::MODULE_LIBRARY:
|
||||||
|
case cmTarget::UTILITY:
|
||||||
|
containsTargets=true;
|
||||||
|
break;
|
||||||
|
case cmTarget::INSTALL_FILES:
|
||||||
|
case cmTarget::INSTALL_PROGRAMS:
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (containsTargets)
|
||||||
|
{
|
||||||
|
std::string projectFileDir=m_Makefile->GetStartOutputDirectory();
|
||||||
|
std::string filelistDir=m_Makefile->GetDefinition("PROJECT_SOURCE_DIR");
|
||||||
|
//build the project name by taking the subdir
|
||||||
|
std::string projectName=m_Makefile->GetProjectName();
|
||||||
|
projectName+=m_Makefile->GetStartOutputDirectory();
|
||||||
|
cmSystemTools::ReplaceString(projectName, filelistDir.c_str(), "");
|
||||||
|
cmSystemTools::ReplaceString(projectName, "/", "_");
|
||||||
|
|
||||||
|
std::string cmakeFilePattern("*/CMakeLists.txt;*.cmake;");
|
||||||
|
|
||||||
|
if (!this->CreateFilelistFile(filelistDir, projectName, cmakeFilePattern))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->CreateProjectFile(filelistDir, projectName, executable, cmakeFilePattern);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cmLocalKdevelopGenerator::CreateProjectFile(const std::string& dir,
|
||||||
|
const std::string& projectname,
|
||||||
|
const std::string& executable,
|
||||||
|
const std::string& cmakeFilePattern)
|
||||||
|
{
|
||||||
|
std::string filename=m_Makefile->GetStartOutputDirectory();
|
||||||
|
filename+="/";
|
||||||
|
filename+=projectname+".kdevelop";
|
||||||
|
|
||||||
|
if (cmSystemTools::FileExists(filename.c_str()))
|
||||||
|
{
|
||||||
|
this->MergeProjectFiles(dir, filename, executable, cmakeFilePattern);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this->CreateNewProjectFile(dir, filename, executable, cmakeFilePattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void cmLocalKdevelopGenerator::MergeProjectFiles(const std::string& dir,
|
||||||
|
const std::string& filename,
|
||||||
|
const std::string& executable,
|
||||||
|
const std::string& cmakeFilePattern)
|
||||||
|
{
|
||||||
|
std::ifstream oldProjectFile(filename.c_str());
|
||||||
|
if (!oldProjectFile)
|
||||||
|
{
|
||||||
|
this->CreateNewProjectFile(dir, filename, executable, cmakeFilePattern);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string tmp;
|
||||||
|
std::vector<std::string> lines;
|
||||||
|
while (cmSystemTools::GetLineFromStream(oldProjectFile, tmp))
|
||||||
|
{
|
||||||
|
lines.push_back(tmp);
|
||||||
|
}
|
||||||
|
oldProjectFile.close();
|
||||||
|
|
||||||
|
cmGeneratedFileStream tempFile(filename.c_str());
|
||||||
|
tempFile.SetAlwaysCopy(true);
|
||||||
|
std::ostream& fout = tempFile.GetStream();
|
||||||
|
if(!fout)
|
||||||
|
{
|
||||||
|
cmSystemTools::Error("Error can not open for write: ", filename.c_str());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (std::vector<std::string>::const_iterator it=lines.begin();
|
||||||
|
it!=lines.end(); it++)
|
||||||
|
{
|
||||||
|
const char* line=(*it).c_str();
|
||||||
|
|
||||||
|
if ((strstr(line, "<projectdirectory>")!=0)
|
||||||
|
|| (strstr(line, "<projectmanagement>")!=0)
|
||||||
|
|| (strstr(line, "<absoluteprojectpath>")!=0)
|
||||||
|
|| (strstr(line, "<buildtool>")!=0)
|
||||||
|
|| (strstr(line, "<builddir>")!=0))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
fout<<*it<<"\n";
|
||||||
|
|
||||||
|
if (strstr(line, "<general>"))
|
||||||
|
{
|
||||||
|
fout<<" <projectmanagement>KDevCustomProject</projectmanagement>\n";
|
||||||
|
fout<<" <projectdirectory>"<<dir.c_str()<<"</projectdirectory>\n"; //this one is important
|
||||||
|
fout<<" <absoluteprojectpath>true</absoluteprojectpath>\n"; //and this one
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strstr(line, "<build>"))
|
||||||
|
{
|
||||||
|
fout<<" <buildtool>make</buildtool>\n"; //this one is important
|
||||||
|
fout<<" <builddir>"<<m_Makefile->GetStartOutputDirectory()<<"</builddir>\n"; //and this one
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cmLocalKdevelopGenerator::CreateNewProjectFile(const std::string& dir, const std::string& filename,
|
||||||
|
const std::string& executable, const std::string& cmakeFilePattern)
|
||||||
|
{
|
||||||
|
|
||||||
|
cmGeneratedFileStream tempFile(filename.c_str());
|
||||||
|
tempFile.SetAlwaysCopy(true);
|
||||||
|
|
||||||
|
std::ostream& fout = tempFile.GetStream();
|
||||||
|
if(!fout)
|
||||||
|
{
|
||||||
|
cmSystemTools::Error("Error can not open for write: ", filename.c_str());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fout<<"<?xml version = '1.0'?>\n";
|
||||||
|
fout<<"<kdevelop>\n";
|
||||||
|
fout<<" <general>\n";
|
||||||
|
fout<<" <author></author>\n";
|
||||||
|
fout<<" <email></email>\n";
|
||||||
|
fout<<" <version>$VERSION$</version>\n";
|
||||||
|
fout<<" <projectmanagement>KDevCustomProject</projectmanagement>\n";
|
||||||
|
fout<<" <primarylanguage>C++</primarylanguage>\n";
|
||||||
|
fout<<" <ignoreparts/>\n";
|
||||||
|
fout<<" <projectdirectory>"<<dir.c_str()<<"</projectdirectory>\n"; //this one is important
|
||||||
|
fout<<" <absoluteprojectpath>true</absoluteprojectpath>\n"; //and this one
|
||||||
|
fout<<" <secondaryLanguages>\n";
|
||||||
|
fout<<" <language>C</language>\n";
|
||||||
|
fout<<" </secondaryLanguages>\n";
|
||||||
|
fout<<" </general>\n";
|
||||||
|
fout<<" <kdevcustomproject>\n";
|
||||||
|
fout<<" <run>\n";
|
||||||
|
fout<<" <mainprogram>"<<m_Makefile->GetStartOutputDirectory()<<"/"<<executable.c_str()<<"</mainprogram>\n";
|
||||||
|
fout<<" <directoryradio>custom</directoryradio>\n";
|
||||||
|
fout<<" <customdirectory>/</customdirectory>\n";
|
||||||
|
fout<<" <programargs></programargs>\n";
|
||||||
|
fout<<" <terminal>false</terminal>\n";
|
||||||
|
fout<<" <autocompile>true</autocompile>\n";
|
||||||
|
fout<<" <envvars/>\n";
|
||||||
|
fout<<" </run>\n";
|
||||||
|
fout<<" <build>\n";
|
||||||
|
fout<<" <buildtool>make</buildtool>\n"; //this one is important
|
||||||
|
fout<<" <builddir>"<<m_Makefile->GetStartOutputDirectory()<<"</builddir>\n"; //and this one
|
||||||
|
fout<<" </build>\n";
|
||||||
|
fout<<" <make>\n";
|
||||||
|
fout<<" <abortonerror>false</abortonerror>\n";
|
||||||
|
fout<<" <numberofjobs>1</numberofjobs>\n";
|
||||||
|
fout<<" <dontact>false</dontact>\n";
|
||||||
|
fout<<" <makebin></makebin>\n";
|
||||||
|
fout<<" <selectedenvironment>default</selectedenvironment>\n";
|
||||||
|
fout<<" <environments>\n";
|
||||||
|
fout<<" <default/>\n";
|
||||||
|
fout<<" </environments>\n";
|
||||||
|
fout<<" </make>\n";
|
||||||
|
fout<<" </kdevcustomproject>\n";
|
||||||
|
fout<<" <kdevfileCreate>\n";
|
||||||
|
fout<<" <filetypes/>\n";
|
||||||
|
fout<<" <useglobaltypes>\n";
|
||||||
|
fout<<" <type ext=\"ui\" />\n";
|
||||||
|
fout<<" <type ext=\"cpp\" />\n";
|
||||||
|
fout<<" <type ext=\"h\" />\n";
|
||||||
|
fout<<" </useglobaltypes>\n";
|
||||||
|
fout<<" </kdevfilecreate>\n";
|
||||||
|
fout<<" <kdevdoctreeview>\n";
|
||||||
|
fout<<" <projectdoc>\n";
|
||||||
|
fout<<" <userdocDir>html/</userdocDir>\n";
|
||||||
|
fout<<" <apidocDir>html/</apidocDir>\n";
|
||||||
|
fout<<" </projectdoc>\n";
|
||||||
|
fout<<" <ignoreqt_xml/>\n";
|
||||||
|
fout<<" <ignoredoxygen/>\n";
|
||||||
|
fout<<" <ignorekdocs/>\n";
|
||||||
|
fout<<" <ignoretocs/>\n";
|
||||||
|
fout<<" <ignoredevhelp/>\n";
|
||||||
|
fout<<" </kdevdoctreeview>\n";
|
||||||
|
fout<<" <cppsupportpart>\n";
|
||||||
|
fout<<" <filetemplates>\n";
|
||||||
|
fout<<" <interfacesuffix>.h</interfacesuffix>\n";
|
||||||
|
fout<<" <implementationsuffix>.cpp</implementationsuffix>\n";
|
||||||
|
fout<<" </filetemplates>\n";
|
||||||
|
fout<<" </cppsupportpart>\n";
|
||||||
|
fout<<" <kdevcppsupport>\n";
|
||||||
|
fout<<" <codecompletion>\n";
|
||||||
|
fout<<" <includeGlobalFunctions>true</includeGlobalFunctions>\n";
|
||||||
|
fout<<" <includeTypes>true</includeTypes>\n";
|
||||||
|
fout<<" <includeEnums>true</includeEnums>\n";
|
||||||
|
fout<<" <includeTypedefs>false</includeTypedefs>\n";
|
||||||
|
fout<<" <automaticCodeCompletion>true</automaticCodeCompletion>\n";
|
||||||
|
fout<<" <automaticArgumentsHint>true</automaticArgumentsHint>\n";
|
||||||
|
fout<<" <automaticHeaderCompletion>true</automaticHeaderCompletion>\n";
|
||||||
|
fout<<" <codeCompletionDelay>250</codeCompletionDelay>\n";
|
||||||
|
fout<<" <argumentsHintDelay>400</argumentsHintDelay>\n";
|
||||||
|
fout<<" <headerCompletionDelay>250</headerCompletionDelay>\n";
|
||||||
|
fout<<" </codecompletion>\n";
|
||||||
|
fout<<" <references/>\n";
|
||||||
|
fout<<" </kdevcppsupport>\n";
|
||||||
|
fout<<" <kdevfileview>\n";
|
||||||
|
fout<<" <groups>\n";
|
||||||
|
fout<<" <group pattern=\""<<cmakeFilePattern.c_str()<<"\" name=\"CMake\" />\n";
|
||||||
|
fout<<" <group pattern=\"*.h;*.hxx\" name=\"Header\" />\n";
|
||||||
|
fout<<" <group pattern=\"*.cpp;*.c;*.C;*.cxx\" name=\"Sources\" />\n";
|
||||||
|
fout<<" <group pattern=\"*.ui\" name=\"Qt Designer files\" />\n";
|
||||||
|
fout<<" <hidenonprojectfiles>true</hidenonprojectfiles>\n";
|
||||||
|
fout<<" </groups>\n";
|
||||||
|
fout<<" <tree>\n";
|
||||||
|
fout<<" <hidepatterns>*.o,*.lo,CVS,*~,cmake*</hidepatterns>\n";
|
||||||
|
fout<<" <hidenonprojectfiles>true</hidenonprojectfiles>\n";
|
||||||
|
fout<<" </tree>\n";
|
||||||
|
fout<<" </kdevfileview>\n";
|
||||||
|
fout<<"</kdevelop>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cmLocalKdevelopGenerator::CreateFilelistFile(const std::string& _dir,
|
||||||
|
const std::string& projectname,
|
||||||
|
std::string& cmakeFilePattern)
|
||||||
|
{
|
||||||
|
std::string filelistDir=_dir+"/";
|
||||||
|
std::string filename=filelistDir+projectname+".kdevelop.filelist";
|
||||||
|
|
||||||
|
std::set<cmStdString> files;
|
||||||
|
|
||||||
|
//get all cmake files
|
||||||
|
std::string tmp;
|
||||||
|
const std::vector<std::string>& listFiles=m_Makefile->GetListFiles();
|
||||||
|
for (std::vector<std::string>::const_iterator it=listFiles.begin(); it!=listFiles.end(); it++)
|
||||||
|
{
|
||||||
|
tmp=*it;
|
||||||
|
cmSystemTools::ReplaceString(tmp, filelistDir.c_str(), "");
|
||||||
|
if (tmp[0]!='/')
|
||||||
|
{
|
||||||
|
files.insert(tmp);
|
||||||
|
tmp=cmSystemTools::GetFilenameName(tmp);
|
||||||
|
//add all files which dont match the default */CMakeLists.txt;*cmake; to the file pattern
|
||||||
|
if ((tmp!="CMakeLists.txt")
|
||||||
|
&& (strstr(tmp.c_str(), ".cmake")==0))
|
||||||
|
{
|
||||||
|
cmakeFilePattern+="*/"+tmp+";";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//get all sources
|
||||||
|
cmTargets& targets=m_Makefile->GetTargets();
|
||||||
|
for (cmTargets::const_iterator ti = targets.begin(); ti != targets.end(); ti++)
|
||||||
|
{
|
||||||
|
const std::vector<std::string>& sources=ti->second.GetSourceLists();
|
||||||
|
for (std::vector<std::string>::const_iterator it=sources.begin(); it!=sources.end(); it++)
|
||||||
|
{
|
||||||
|
tmp=*it;
|
||||||
|
|
||||||
|
if (tmp[0]!='/') //no absolute path
|
||||||
|
{
|
||||||
|
tmp=std::string(m_Makefile->GetDefinition("CMAKE_CURRENT_SOURCE_DIR"))+"/"+tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp=cmSystemTools::CollapseFullPath(tmp.c_str());
|
||||||
|
cmSystemTools::ReplaceString(tmp, filelistDir.c_str(), "");
|
||||||
|
if (tmp[0]=='/')
|
||||||
|
{
|
||||||
|
std::string errorMessage("In order to get working KDevelop project files, you have to call "
|
||||||
|
"PROJECT() in a directory which is a parent directory of all source files. The source file ");
|
||||||
|
errorMessage+=tmp+" is not located beneath your current project directory "+filelistDir+" .";
|
||||||
|
cmSystemTools::Error(errorMessage.c_str());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
files.insert(tmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//check if the output file already exists and read it
|
||||||
|
//insert all files which exist into the set of files
|
||||||
|
std::ifstream oldFilelist(filename.c_str());
|
||||||
|
if (oldFilelist)
|
||||||
|
{
|
||||||
|
while (cmSystemTools::GetLineFromStream(oldFilelist, tmp))
|
||||||
|
{
|
||||||
|
if (tmp[0]=='/')
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
std::string completePath=filelistDir+tmp;
|
||||||
|
if (cmSystemTools::FileExists(completePath.c_str()))
|
||||||
|
{
|
||||||
|
files.insert(tmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
oldFilelist.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
cmGeneratedFileStream tempFile(filename.c_str());
|
||||||
|
tempFile.SetAlwaysCopy(true);
|
||||||
|
std::ostream& fout = tempFile.GetStream();
|
||||||
|
if(!fout)
|
||||||
|
{
|
||||||
|
cmSystemTools::Error("Error can not open for write: ", filename.c_str());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (std::set<cmStdString>::const_iterator it=files.begin(); it!=files.end(); it++)
|
||||||
|
{
|
||||||
|
fout<<*it<<"\n";
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
/*=========================================================================
|
||||||
|
|
||||||
|
Program: CMake - Cross-Platform Makefile Generator
|
||||||
|
Module: $RCSfile$
|
||||||
|
Language: C++
|
||||||
|
Date: $Date$
|
||||||
|
Version: $Revision$
|
||||||
|
|
||||||
|
Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
|
||||||
|
Copyright (c) 2004 Alexander Neundorf, neundorf@kde.org. All rights reserved.
|
||||||
|
See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
|
||||||
|
|
||||||
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
||||||
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. See the above copyright notices for more information.
|
||||||
|
|
||||||
|
=========================================================================*/
|
||||||
|
#ifndef cmLocalKdevelopGenerator_h
|
||||||
|
#define cmLocalKdevelopGenerator_h
|
||||||
|
|
||||||
|
#include "cmLocalUnixMakefileGenerator.h"
|
||||||
|
|
||||||
|
class cmDependInformation;
|
||||||
|
class cmMakeDepend;
|
||||||
|
class cmTarget;
|
||||||
|
class cmSourceFile;
|
||||||
|
|
||||||
|
/** \class cmLocalKdevelopGenerator
|
||||||
|
* \brief Write a LocalUnix makefiles.
|
||||||
|
*
|
||||||
|
* cmLocalKdevelopGenerator produces a LocalUnix makefile from its
|
||||||
|
* member m_Makefile.
|
||||||
|
*/
|
||||||
|
class cmLocalKdevelopGenerator : public cmLocalUnixMakefileGenerator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
///! Set cache only and recurse to false by default.
|
||||||
|
cmLocalKdevelopGenerator();
|
||||||
|
|
||||||
|
virtual ~cmLocalKdevelopGenerator();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate the makefile for this directory. fromTheTop indicates if this
|
||||||
|
* is being invoked as part of a global Generate or specific to this
|
||||||
|
* directory. The difference is that when done from the Top we might skip
|
||||||
|
* some steps to save time, such as dependency generation for the
|
||||||
|
* makefiles. This is done by a direct invocation from make.
|
||||||
|
*/
|
||||||
|
virtual void Generate(bool fromTheTop);
|
||||||
|
protected:
|
||||||
|
///Create the foo.kdevelop file. This one calls MergeProjectFiles() if it already exists, otherwise createNewProjectFile()
|
||||||
|
void CreateProjectFile(const std::string& dir, const std::string& projectname, const std::string& executable, const std::string& cmakeFilePattern);
|
||||||
|
/// Create the foo.kdevelop.filelist file, return false if it doesn't succeed
|
||||||
|
bool CreateFilelistFile(const std::string& dir, const std::string& projectname, std::string& cmakeFilePattern);
|
||||||
|
///Reads the old foo.kdevelop line by line and only replaces the "important" lines
|
||||||
|
void MergeProjectFiles(const std::string& dir, const std::string& filename, const std::string& executable, const std::string& cmakeFilePattern);
|
||||||
|
///Creates a new foo.kdevelop file
|
||||||
|
void CreateNewProjectFile(const std::string& dir, const std::string& filename, const std::string& executable, const std::string& cmakeFilePattern);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -33,11 +33,11 @@
|
||||||
# endif
|
# endif
|
||||||
# include "cmGlobalBorlandMakefileGenerator.h"
|
# include "cmGlobalBorlandMakefileGenerator.h"
|
||||||
# include "cmGlobalNMakeMakefileGenerator.h"
|
# include "cmGlobalNMakeMakefileGenerator.h"
|
||||||
#include "cmGlobalUnixMakefileGenerator.h"
|
|
||||||
# include "cmWin32ProcessExecution.h"
|
# include "cmWin32ProcessExecution.h"
|
||||||
#else
|
#else
|
||||||
#include "cmGlobalUnixMakefileGenerator.h"
|
|
||||||
#endif
|
#endif
|
||||||
|
#include "cmGlobalUnixMakefileGenerator.h"
|
||||||
|
#include "cmGlobalKdevelopGenerator.h"
|
||||||
|
|
||||||
#include <stdlib.h> // required for atoi
|
#include <stdlib.h> // required for atoi
|
||||||
|
|
||||||
|
@ -1415,6 +1415,10 @@ void cmake::AddDefaultGenerators()
|
||||||
#endif
|
#endif
|
||||||
m_Generators[cmGlobalUnixMakefileGenerator::GetActualName()] =
|
m_Generators[cmGlobalUnixMakefileGenerator::GetActualName()] =
|
||||||
&cmGlobalUnixMakefileGenerator::New;
|
&cmGlobalUnixMakefileGenerator::New;
|
||||||
|
#if !defined(_WIN32)
|
||||||
|
m_Generators[cmGlobalKdevelopGenerator::GetActualName()] =
|
||||||
|
&cmGlobalKdevelopGenerator::New;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int cmake::LoadCache()
|
int cmake::LoadCache()
|
||||||
|
|
Loading…
Reference in New Issue