| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526 | 
							- /*=========================================================================
 
-   Program:   Insight Segmentation & Registration Toolkit
 
-   Module:    $RCSfile$
 
-   Language:  C++
 
-   Date:      $Date$
 
-   Version:   $Revision$
 
- Copyright (c) 2001 Insight Consortium
 
- All rights reserved.
 
- Redistribution and use in source and binary forms, with or without
 
- modification, are permitted provided that the following conditions are met:
 
-  * Redistributions of source code must retain the above copyright notice,
 
-    this list of conditions and the following disclaimer.
 
-  * Redistributions in binary form must reproduce the above copyright notice,
 
-    this list of conditions and the following disclaimer in the documentation
 
-    and/or other materials provided with the distribution.
 
-  * The name of the Insight Consortium, nor the names of any consortium members,
 
-    nor of any contributors, may be used to endorse or promote products derived
 
-    from this software without specific prior written permission.
 
-   * Modified source versions must be plainly marked as such, and must not be
 
-     misrepresented as being the original software.
 
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS ``AS IS''
 
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
 
- ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
- =========================================================================*/
 
- #ifndef cmMakefile_h
 
- #define cmMakefile_h
 
- #include "cmStandardIncludes.h"
 
- #include "cmData.h"
 
- #include "cmSourceFile.h"
 
- #include "cmSystemTools.h"
 
- #include "cmSourceGroup.h"
 
- #include "cmTarget.h"
 
- class cmFunctionBlocker;
 
- class cmCommand;
 
- class cmMakefileGenerator;
 
- /** \class cmMakefile
 
-  * \brief Process the input CMakeLists.txt file.
 
-  *
 
-  * Process and store into memory the input CMakeLists.txt file.
 
-  * Each CMakeLists.txt file is parsed and the commands found there
 
-  * are added into the build process.
 
-  */
 
- class cmMakefile
 
- {
 
- public:
 
-   /**
 
-    * Return major and minor version numbers for cmake.
 
-    */
 
-   static unsigned int GetMajorVersion() { return 0;}
 
-   static unsigned int GetMinorVersion() { return 1;}
 
-   /**
 
-    * Return the major and minor version of the cmake that
 
-    * was used to write the currently loaded cache, note
 
-    * this method will not work before the cache is loaded.
 
-    */
 
-   static unsigned int GetCacheMajorVersion();
 
-   static unsigned int GetCacheMinorVersion();
 
-   
 
-   /**
 
-    * Construct an empty makefile.
 
-    */
 
-   cmMakefile();
 
-   /**
 
-    * Destructor.
 
-    */
 
-   ~cmMakefile();
 
-   /**
 
-    * Read and parse a CMakeLists.txt file.
 
-    */
 
-   bool ReadListFile(const char* listfile, const char* external= 0); 
 
-   /**
 
-    * Add a wrapper generator.
 
-    */
 
-   void AddCommand(cmCommand* );
 
-   /**
 
-    * Add a function blocker to this makefile
 
-    */
 
-   void AddFunctionBlocker(cmFunctionBlocker *fb)
 
-     { m_FunctionBlockers.insert(fb);}
 
-   void RemoveFunctionBlocker(cmFunctionBlocker *fb)
 
-     { m_FunctionBlockers.erase(fb);}
 
-   void RemoveFunctionBlocker(const char *name, const std::vector<std::string> &args);
 
-   
 
-   /**
 
-    * Specify the makefile generator. This is platform/compiler
 
-    * dependent, although the interface is through a generic
 
-    * superclass.
 
-    */
 
-   void SetMakefileGenerator(cmMakefileGenerator*);
 
-   
 
-   ///! Get the current makefile generator.
 
-   cmMakefileGenerator* GetMakefileGenerator() 
 
-     { return m_MakefileGenerator;}
 
-   /**
 
-    * Produce the output makefile.
 
-    */
 
-   void GenerateMakefile();
 
-   /**
 
-    * Print the object state to std::cout.
 
-    */
 
-   void Print() const;
 
-   
 
-   /**
 
-    * Add a custom command to the build.
 
-    */
 
-   void AddCustomCommand(const char* source,
 
-                         const char* command,
 
-                         const char* commandArgs,
 
-                         const std::vector<std::string>& depends,
 
-                         const std::vector<std::string>& outputs,
 
-                         const char *target);
 
-   void AddCustomCommand(const char* source,
 
-                         const char* command,
 
-                         const char* commandArgs,
 
-                         const std::vector<std::string>& depends,
 
-                         const char* output,
 
-                         const char* target);
 
-   
 
-   /**
 
-    * Add a define flag to the build.
 
-    */
 
-   void AddDefineFlag(const char* definition);
 
-   /**
 
-    * Add an executable to the build.
 
-    */
 
-   void AddExecutable(const char *exename, 
 
-                      const std::vector<std::string> &srcs);
 
-   void AddExecutable(const char *exename, 
 
-                      const std::vector<std::string> &srcs, bool win32);
 
-   /**
 
-    * Add a utility to the build.  A utiltity target is
 
-    * a command that is run every time a target is built.
 
-    */
 
-   void AddUtilityCommand(const char* utilityName,
 
-                          const char* command,
 
-                          bool all);
 
-   void AddUtilityCommand(const char* utilityName,
 
-                          const char* command,
 
-                          bool all,
 
-                          const std::vector<std::string> &depends,
 
-                          const std::vector<std::string> &outputs);
 
-   /**
 
-    * Get a list of link libraries in the build.
 
-    */
 
-   cmTarget::LinkLibraries& GetLinkLibraries()
 
-     { 
 
-     return m_LinkLibraries;
 
-     }
 
-   /**
 
-    * Add a link library to the build.
 
-    */
 
-   void AddLinkLibrary(const char*);
 
-   void AddLinkLibrary(const char*, cmTarget::LinkLibraryType type);
 
-   void AddLinkLibraryForTarget(const char *tgt, const char*, 
 
-                                cmTarget::LinkLibraryType type);
 
-   /**
 
-    * Add a link directory to the build.
 
-    */
 
-   void AddLinkDirectory(const char*);
 
-   /**
 
-    * Add a subdirectory to the build.
 
-    */
 
-   void AddSubDirectory(const char*);
 
-   /**
 
-    * Add an include directory to the build.
 
-    */
 
-   void AddIncludeDirectory(const char*);
 
-   /**
 
-    * Add a variable definition to the build. This variable
 
-    * can be used in CMake to refer to lists, directories, etc.
 
-    */
 
-   void AddDefinition(const char* name, const char* value);
 
-   /**
 
-    * Add bool variable definition to the build. 
 
-    */
 
-   void AddDefinition(const char* name, bool);
 
-   /**
 
-    * Specify the name of the project for this build.
 
-    */
 
-   void SetProjectName(const char*);
 
-   /**
 
-    * Get the name of the project for this build.
 
-    */
 
-   const char* GetProjectName()
 
-     {
 
-     return m_ProjectName.c_str();
 
-     }
 
-   
 
-   /**
 
-    * Set the name of the library.
 
-    */
 
-   void AddLibrary(const char *libname, const std::vector<std::string> &srcs);
 
-   /**
 
-    * Add a class/source file to the build.
 
-    */
 
-   void AddSource(cmSourceFile& ,const char *srcListName);
 
-   /**
 
-    * Add a source group for consideration when adding a new source.
 
-    */
 
-   void AddSourceGroup(const char* name, const char* regex);
 
-   
 
-   /**
 
-    * Add an auxiliary directory to the build.
 
-    */
 
-   void AddExtraDirectory(const char* dir);
 
-   
 
-   /**
 
-    * Add an auxiliary directory to the build.
 
-    */
 
-   void MakeStartDirectoriesCurrent()
 
-     {
 
-       m_cmCurrentDirectory = m_cmStartDirectory;
 
-       m_CurrentOutputDirectory = m_StartOutputDirectory;
 
-     }
 
-   
 
-   //@{
 
-   /**
 
-    * Set/Get the home directory (or output directory) in the project. The
 
-    * home directory is the top directory of the project. It is where
 
-    * CMakeSetup or configure was run. Remember that CMake processes
 
-    * CMakeLists files by recursing up the tree starting at the StartDirectory
 
-    * and going up until it reaches the HomeDirectory.  
 
-    */
 
-   void SetHomeDirectory(const char* dir);
 
-   const char* GetHomeDirectory() const
 
-     {
 
-     return m_cmHomeDirectory.c_str();
 
-     }
 
-   void SetHomeOutputDirectory(const char* lib);
 
-   const char* GetHomeOutputDirectory() const
 
-     {
 
-     return m_HomeOutputDirectory.c_str();
 
-     }
 
-   //@}
 
-   
 
-   //@{
 
-   /**
 
-    * Set/Get the start directory (or output directory). The start directory
 
-    * is the directory of the CMakeLists.txt file that started the current
 
-    * round of processing. Remember that CMake processes CMakeLists files by
 
-    * recursing up the tree starting at the StartDirectory and going up until
 
-    * it reaches the HomeDirectory.  
 
-    */
 
-   void SetStartDirectory(const char* dir) 
 
-     {
 
-       m_cmStartDirectory = dir;
 
-       cmSystemTools::ConvertToUnixSlashes(m_cmStartDirectory);
 
-     }
 
-   const char* GetStartDirectory() const
 
-     {
 
-       return m_cmStartDirectory.c_str();
 
-     }
 
-   void SetStartOutputDirectory(const char* lib)
 
-     {
 
-       m_StartOutputDirectory = lib;
 
-       cmSystemTools::ConvertToUnixSlashes(m_StartOutputDirectory);
 
-     }
 
-   const char* GetStartOutputDirectory() const
 
-     {
 
-       return m_StartOutputDirectory.c_str();
 
-     }
 
-   //@}
 
-   //@{
 
-   /**
 
-    * Set/Get the current directory (or output directory) in the project. The
 
-    * current directory is the directory of the CMakeLists.txt file that is
 
-    * currently being processed. Remember that CMake processes CMakeLists
 
-    * files by recursing up the tree starting at the StartDirectory and going
 
-    * up until it reaches the HomeDirectory.  
 
-    */
 
-   void SetCurrentDirectory(const char* dir) 
 
-     {
 
-       m_cmCurrentDirectory = dir;
 
-       cmSystemTools::ConvertToUnixSlashes(m_cmCurrentDirectory);
 
-     }
 
-   const char* GetCurrentDirectory() const 
 
-     {
 
-       return m_cmCurrentDirectory.c_str();
 
-     }
 
-   void SetCurrentOutputDirectory(const char* lib)
 
-     {
 
-       m_CurrentOutputDirectory = lib;
 
-       cmSystemTools::ConvertToUnixSlashes(m_CurrentOutputDirectory);
 
-     }
 
-   const char* GetCurrentOutputDirectory() const
 
-     {
 
-       return m_CurrentOutputDirectory.c_str();
 
-     }
 
-   /* Get the current CMakeLists.txt file that is being processed.  This
 
-    * is just used in order to be able to 'branch' from one file to a second
 
-    * transparently */
 
-   const char* GetCurrentListFile() const
 
-     {
 
-       return m_cmCurrentListFile.c_str();
 
-     }
 
-   //@}
 
-   /** 
 
-    * Set a regular expression that include files must match
 
-    * in order to be considered as part of the depend information.
 
-    */
 
-   void SetIncludeRegularExpression(const char* regex)
 
-     {
 
-       m_IncludeFileRegularExpression = regex;
 
-     }
 
-   /**
 
-    * Get the list of targets
 
-    */
 
-   cmTargets &GetTargets() { return m_Targets; }
 
-   const cmTargets &GetTargets() const { return m_Targets; }
 
-   /**
 
-    * Get a list of the build subdirectories.
 
-    */
 
-   const std::vector<std::string>& GetSubDirectories()
 
-     { 
 
-     return m_SubDirectories;
 
-     }
 
-   /**
 
-    * Get a list of include directories in the build.
 
-    */
 
-   std::vector<std::string>& GetIncludeDirectories()
 
-     { 
 
-     return m_IncludeDirectories;
 
-     }
 
-   const std::vector<std::string>& GetIncludeDirectories() const
 
-     { 
 
-     return m_IncludeDirectories;
 
-     }
 
-   /**
 
-    * Get a list of link directories in the build.
 
-    */
 
-   std::vector<std::string>& GetLinkDirectories()
 
-     { 
 
-     return m_LinkDirectories;
 
-     }
 
-   
 
-   /**
 
-    * Return a list of source files in this makefile.
 
-    */
 
-   typedef std::map<std::string,std::vector<cmSourceFile> > SourceMap;
 
-   const SourceMap &GetSources() const {return  m_Sources;}
 
-   SourceMap &GetSources() {return  m_Sources;}
 
-   cmSourceFile *GetSource(const char *srclist, const char *sourceName);
 
-   
 
-   /**
 
-    * Obtain a list of auxiliary source directories.
 
-    */
 
-   std::vector<std::string>& GetAuxSourceDirectories()
 
-     {return m_AuxSourceDirectories;}
 
-   /**
 
-    * Given a variable name, return its value (as a string).
 
-    */
 
-   const char* GetDefinition(const char*);
 
-   /**
 
-    * Get a list of preprocessor define flags.
 
-    */
 
-   const char* GetDefineFlags()
 
-     {return m_DefineFlags.c_str();}
 
-   
 
-   /**
 
-    * Get the vector of used command instances.
 
-    */
 
-   const std::vector<cmCommand*>& GetUsedCommands() const
 
-     {return m_UsedCommands;}
 
-   
 
-   /**
 
-    * Get the vector source groups.
 
-    */
 
-   const std::vector<cmSourceGroup>& GetSourceGroups() const
 
-     { return m_SourceGroups; }
 
-   /**
 
-    * Get the vector of list files on which this makefile depends
 
-    */
 
-   const std::vector<std::string>& GetListFiles() const
 
-     { return m_ListFiles; }
 
-   
 
-   /**
 
-    * Dump documentation to a file. If 0 is returned, the
 
-    * operation failed.
 
-    */
 
-   int DumpDocumentationToFile(const char *fileName);
 
-   /**
 
-    * Expand all defined varibles in the string.  
 
-    * Defined varibles come from the m_Definitions map.
 
-    * They are expanded with ${var} where var is the
 
-    * entry in the m_Definitions map.  Also @var@ is
 
-    * expanded to match autoconf style expansions.
 
-    */
 
-   void ExpandVariablesInString(std::string& source) const;
 
-   /**
 
-    * Remove any remaining variables in the string. Anything with ${var} or
 
-    * @var@ will be removed.  
 
-    */
 
-   void RemoveVariablesInString(std::string& source) const;
 
-   /**
 
-    * Expand variables in the makefiles ivars such as link directories etc
 
-    */
 
-   void ExpandVariables();  
 
-       
 
-   /** Recursivly read and create a cmMakefile object for
 
-    *  all CMakeLists.txt files in the GetSubDirectories list.
 
-    *  Once the file is found, it ReadListFile is called on
 
-    *  the cmMakefile created for it.
 
-    */
 
-   void FindSubDirectoryCMakeListsFiles(std::vector<cmMakefile*>& makefiles);
 
-   
 
-   /**
 
-    * find what source group this source is in
 
-    */
 
-   cmSourceGroup& FindSourceGroup(const char* source,
 
-                                  std::vector<cmSourceGroup> &groups);
 
-   void RegisterData(cmData*);
 
-   void RegisterData(const char*, cmData*);
 
-   cmData* LookupData(const char*) const;
 
-   
 
- protected:
 
-   std::string m_Prefix;
 
-   std::vector<std::string> m_AuxSourceDirectories; // 
 
-   std::string m_cmCurrentDirectory; 
 
-   std::string m_CurrentOutputDirectory; 
 
-   std::string m_cmStartDirectory; 
 
-   std::string m_StartOutputDirectory; 
 
-   std::string m_cmHomeDirectory; 
 
-   std::string m_HomeOutputDirectory;
 
-   std::string m_cmCurrentListFile;
 
-   std::string m_ProjectName;	// project name
 
-   // libraries, classes, and executables
 
-   cmTargets m_Targets;
 
-   SourceMap m_Sources; 
 
-   std::vector<std::string> m_SubDirectories; // list of sub directories
 
-   std::vector<std::string> m_IncludeDirectories;
 
-   std::vector<std::string> m_LinkDirectories;
 
-   std::vector<std::string> m_ListFiles; // list of command files loaded
 
-   
 
-   
 
-   cmTarget::LinkLibraries m_LinkLibraries;
 
-   std::string m_IncludeFileRegularExpression;
 
-   std::string m_DefineFlags;
 
-   std::vector<cmSourceGroup> m_SourceGroups;
 
-   typedef std::map<std::string, cmCommand*> RegisteredCommandsMap;
 
-   typedef std::map<std::string, std::string> DefinitionMap;
 
-   DefinitionMap m_Definitions;
 
-   RegisteredCommandsMap m_Commands;
 
-   std::vector<cmCommand*> m_UsedCommands;
 
-   cmMakefileGenerator* m_MakefileGenerator;
 
-   bool IsFunctionBlocked(const char *name, std::vector<std::string> &args) const;
 
-   
 
- private:
 
-   /**
 
-    * Get the name of the parent directories CMakeLists file
 
-    * given a current CMakeLists file name
 
-    */
 
-   std::string GetParentListFileName(const char *listFileName);
 
-   void ReadSources(std::ifstream& fin, bool t);
 
-   friend class cmMakeDepend;	// make depend needs direct access 
 
- 				// to the m_Sources array 
 
-   void PrintStringVector(const char* s, const std::vector<std::string>& v) const;
 
-   void AddDefaultCommands();
 
-   void AddDefaultDefinitions();
 
-   std::set<cmFunctionBlocker *> m_FunctionBlockers;
 
-   
 
-   typedef std::map<std::string, cmData*> DataMap;
 
-   DataMap m_DataMap;
 
- };
 
- #endif
 
 
  |