/*========================================================================= Program: CMake - Cross-Platform Makefile Generator Module: $RCSfile$ Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) 2002 Kitware, Inc., Insight Consortium. 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 cmSourceFile_h #define cmSourceFile_h #include "cmStandardIncludes.h" #include "cmCustomCommand.h" /** \class cmSourceFile * \brief Represent a class loaded from a makefile. * * cmSourceFile is represents a class loaded from * a makefile. */ class cmSourceFile { public: /** * Construct instance as a concrete class with both a * .h and .cxx file. */ cmSourceFile() { m_CustomCommand = 0; } ~cmSourceFile() { if (m_CustomCommand) { delete m_CustomCommand; } } /** * Set the name of the file, given the directory the file should be * in. The various extensions provided are tried on the name * (e.g., cxx, cpp) in the directory to find the actual file. */ void SetName(const char* name, const char* dir, const std::vector& sourceExts, const std::vector& headerExts); /** * Get the list of the custom commands for this source file */ const cmCustomCommand *GetCustomCommand() const {return m_CustomCommand;} cmCustomCommand *GetCustomCommand() {return m_CustomCommand;} void SetCustomCommand(cmCustomCommand *cc) { m_CustomCommand = cc;} /** * Set the name of the file, given the directory the file should be in. IN * this version the extension is provided in the call. This is useful for * generated files that do not exist prior to the build. */ void SetName(const char* name, const char* dir, const char *ext, bool headerFileOnly); /** * Print the structure to std::cout. */ void Print() const; ///! Set/Get a property of this source file void SetProperty(const char *prop, const char *value); const char *GetProperty(const char *prop) const; bool GetPropertyAsBool(const char *prop) const; /** * The full path to the file. */ const std::string &GetFullPath() const {return m_FullPath;} void SetFullPath(const char *name) {m_FullPath = name;} /** * The file name associated with stripped off directory and extension. * (In most cases this is the name of the class.) */ const std::string &GetSourceName() const {return m_SourceName;} void SetSourceName(const char *name) {m_SourceName = name;} /** * The file extension associated with source file */ const std::string &GetSourceExtension() const {return m_SourceExtension;} void SetSourceExtension(const char *name) {m_SourceExtension = name;} /** * Return the vector that holds the list of dependencies */ const std::vector &GetDepends() const {return m_Depends;} std::vector &GetDepends() {return m_Depends;} private: std::map m_Properties; cmCustomCommand *m_CustomCommand; std::string m_FullPath; std::string m_SourceName; std::string m_SourceExtension; std::vector m_Depends; }; #endif