/*============================================================================ CMake - Cross Platform Makefile Generator Copyright 2004-2009 Kitware, Inc. Copyright 2004 Alexander Neundorf (neundorf@kde.org) Distributed under the OSI-approved BSD License (the "License"); see accompanying file Copyright.txt for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the License for more information. ============================================================================*/ #ifndef cmExtraSublimeTextGenerator_h #define cmExtraSublimeTextGenerator_h #include "cmExternalMakefileProjectGenerator.h" #include "cmSourceFile.h" class cmLocalGenerator; class cmMakefile; class cmTarget; class cmGeneratedFileStream; class cmGeneratorTarget; /** \class cmExtraSublimeTextGenerator * \brief Write Sublime Text 2 project files for Makefile based projects */ class cmExtraSublimeTextGenerator : public cmExternalMakefileProjectGenerator { public: typedef std::map > MapSourceFileFlags; cmExtraSublimeTextGenerator(); virtual const char* GetName() const { return cmExtraSublimeTextGenerator::GetActualName();} static const char* GetActualName() { return "Sublime Text 2";} static cmExternalMakefileProjectGenerator* New() { return new cmExtraSublimeTextGenerator; } /** Get the documentation entry for this generator. */ virtual void GetDocumentation(cmDocumentationEntry& entry, const char* fullName) const; virtual void Generate(); private: void CreateProjectFile(const std::vector& lgs); void CreateNewProjectFile(const std::vector& lgs, const std::string& filename); /** Appends all targets as build systems to the project file and get all * include directories and compiler definitions used. */ void AppendAllTargets(const std::vector& lgs, const cmMakefile* mf, cmGeneratedFileStream& fout, MapSourceFileFlags& sourceFileFlags); /** Returns the build command that needs to be executed to build the * specified target. */ std::string BuildMakeCommand(const std::string& make, const char* makefile, const char* target); /** Appends the specified target to the generated project file as a Sublime * Text build system. */ void AppendTarget(cmGeneratedFileStream& fout, const char* targetName, cmLocalGenerator* lg, cmTarget* target, const char* make, const cmMakefile* makefile, const char* compiler, MapSourceFileFlags& sourceFileFlags, bool firstTarget); /** * Compute the flags for compilation of object files for a given @a language. * @note Generally it is the value of the variable whose name is computed * by LanguageFlagsVarName(). */ std::string ComputeFlagsForObject(cmSourceFile *source, cmLocalGenerator* lg, cmTarget *target, cmGeneratorTarget* gtgt); std::string ComputeDefines(cmSourceFile *source, cmLocalGenerator* lg, cmTarget *target, cmGeneratorTarget* gtgt); }; #endif