msvc_makefile.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:14k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: msvc_makefile.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/16 17:04:52  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.10
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef PROJECT_TREE_BULDER__MSVC_MAKEFILE__HPP
  10. #define PROJECT_TREE_BULDER__MSVC_MAKEFILE__HPP
  11. /* $Id: msvc_makefile.hpp,v 1000.2 2004/06/16 17:04:52 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Author:  Viatcheslav Gorelenkov
  37.  *
  38.  */
  39. #include <corelib/ncbireg.hpp>
  40. #include <app/project_tree_builder/proj_item.hpp>
  41. #include <app/project_tree_builder/msvc_prj_utils.hpp>
  42. #include <corelib/ncbiobj.hpp>
  43. #include <corelib/ncbienv.hpp>
  44. BEGIN_NCBI_SCOPE
  45. /// 
  46. /// Interface of master msvc makefile
  47. class IMsvcMetaMakefile
  48. {
  49. public:
  50.     virtual string GetCompilerOpt (const string&       opt, 
  51.                                    const SConfigInfo&  config)   const = 0;
  52.     virtual string GetLinkerOpt   (const string&       opt, 
  53.                                    const SConfigInfo&  config)   const = 0;
  54.     virtual string GetLibrarianOpt(const string&       opt, 
  55.                                    const SConfigInfo&  config)   const = 0;
  56.     
  57.     virtual string GetResourceCompilerOpt 
  58.                                   (const string&       opt, 
  59.                                    const SConfigInfo&  config)   const = 0;
  60. };
  61. ///
  62. /// Interface of msvc project makefile
  63. class IMsvcProjectMakefile
  64. {
  65.     virtual bool IsExcludeProject (bool default_val)             const = 0;
  66.     virtual void GetAdditionalSourceFiles
  67.                                   (const SConfigInfo& config, 
  68.                                    list<string>*      files)     const = 0;
  69.     virtual void GetAdditionalLIB (const SConfigInfo& config, 
  70.                                    list<string>*      lib_ids)   const = 0;
  71.     virtual void GetExcludedSourceFiles  
  72.                                   (const SConfigInfo& config, 
  73.                                    list<string>*      files)     const = 0;
  74.     virtual void GetExcludedLIB   (const SConfigInfo& config, 
  75.                                    list<string>*      lib_ids)   const = 0;
  76.     
  77.     virtual void GetAdditionalIncludeDirs
  78.                                   (const SConfigInfo& config, 
  79.                                    list<string>*      files)     const = 0;
  80.     virtual void GetCustomBuildInfo
  81.                                   (list<SCustomBuildInfo>* info) const = 0;
  82.     virtual void GetResourceFiles (const SConfigInfo& config, 
  83.                                   list<string>*      files)      const = 0;
  84. };
  85. /////////////////////////////////////////////////////////////////////////////
  86. ///
  87. /// CMsvcMetaMakefile --
  88. ///
  89. /// Abstraction of global settings for building of C++ projects.
  90. ///
  91. /// Provides information about default compiler, linker and librarian 
  92. /// settinngs.
  93. class CMsvcMetaMakefile : public CObject,
  94.                           public IMsvcMetaMakefile
  95. {
  96. public:
  97.     CMsvcMetaMakefile(const string& file_path);
  98.     
  99.    
  100.     bool IsEmpty                  (void) const;
  101.     // IMsvcMetaMakefile
  102.     virtual string GetCompilerOpt (const string&       opt, 
  103.                                    const SConfigInfo&  config) const;
  104.     virtual string GetLinkerOpt   (const string&       opt, 
  105.                                    const SConfigInfo&  config) const;
  106.     virtual string GetLibrarianOpt(const string&       opt, 
  107.                                    const SConfigInfo&  config) const;
  108.     
  109.     virtual string GetResourceCompilerOpt 
  110.                                   (const string&       opt, 
  111.                                    const SConfigInfo&  config) const;
  112.     bool   IsPchEnabled           (void) const;
  113.     string GetUsePchThroughHeader (const string& project_id,
  114.                                    const string& source_file_full_path,
  115.                                    const string& tree_src_dir) const;
  116.     string GetPchUsageDefine      (void) const;
  117. protected:
  118.     CNcbiRegistry m_MakeFile;
  119.     string        m_MakeFileBaseDir;
  120.     struct SPchInfo
  121.     {
  122.         bool m_UsePch;
  123.         typedef map<string, string> TSubdirPchfile;
  124.         TSubdirPchfile m_PchUsageMap;
  125.         typedef list<string> TDontUsePch;
  126.         TDontUsePch    m_DontUsePchList;
  127.         string m_PchUsageDefine;
  128.     };
  129.     const SPchInfo& GetPchInfo(void) const;
  130. private:
  131.     auto_ptr<SPchInfo> m_PchInfo;
  132.     CMsvcMetaMakefile(const CMsvcMetaMakefile&);
  133.     CMsvcMetaMakefile& operator= (const CMsvcMetaMakefile&);
  134. };
  135. /////////////////////////////////////////////////////////////////////////////
  136. ///
  137. /// CMsvcProjectMakefile --
  138. ///
  139. /// Abstraction of project MSVC specific settings
  140. ///
  141. /// Provides information about project include/exclude to build, 
  142. /// additional/excluded files and project specific compiler, linker 
  143. /// and librarian settinngs.
  144. class CMsvcProjectMakefile : public CMsvcMetaMakefile,
  145.                              public IMsvcProjectMakefile
  146. {
  147. public:
  148.     CMsvcProjectMakefile(const string& file_path);
  149.     // IMsvcProjectMakefile
  150.     virtual bool IsExcludeProject        (bool default_val) const;
  151.     virtual void GetAdditionalSourceFiles(const SConfigInfo& config, 
  152.                                           list<string>*      files) const;
  153.     virtual void GetAdditionalLIB        (const SConfigInfo& config, 
  154.                                           list<string>*      lib_ids) const;
  155.     virtual void GetExcludedSourceFiles  (const SConfigInfo& config, 
  156.                                           list<string>*      files) const;
  157.     virtual void GetExcludedLIB          (const SConfigInfo& config, 
  158.                                           list<string>*      lib_ids) const;
  159.     
  160.     virtual void GetAdditionalIncludeDirs(const SConfigInfo& config, 
  161.                                           list<string>*      files) const;
  162.     virtual void GetCustomBuildInfo      (list<SCustomBuildInfo>* info) const;
  163.     virtual void GetResourceFiles        (const SConfigInfo& config, 
  164.                                           list<string>*      files) const;
  165.     string m_ProjectBaseDir;
  166. private:
  167.     
  168.     //Prohibited to
  169.     CMsvcProjectMakefile(void);
  170.     CMsvcProjectMakefile(const CMsvcProjectMakefile&);
  171.     CMsvcProjectMakefile& operator= (const CMsvcProjectMakefile&);
  172. };
  173. ///
  174. /// Abstraction of rule for generation of project settings 
  175. /// based on component usage
  176. class CMsvcProjectRuleMakefile : public CMsvcProjectMakefile
  177. {
  178. public:
  179.     CMsvcProjectRuleMakefile(const string& file_path);
  180.     int GetRulePriority(const SConfigInfo& config) const; 
  181. private:
  182.     //Prohibited to
  183.     CMsvcProjectRuleMakefile(void);
  184.     CMsvcProjectRuleMakefile(const CMsvcProjectRuleMakefile&);
  185.     CMsvcProjectRuleMakefile& operator= (const CMsvcProjectRuleMakefile&);
  186. };
  187. ///
  188. /// Combining of rules and project makefile
  189. class CMsvcCombinedProjectMakefile : public IMsvcMetaMakefile,
  190.                                      public IMsvcProjectMakefile
  191. {
  192. public:
  193.     CMsvcCombinedProjectMakefile(CProjItem::TProjType        project_type,
  194.                                  const CMsvcProjectMakefile* project_makefile,
  195.                                  const string&               rules_basedir,
  196.                                  const list<string>          requires_list);
  197.     virtual ~CMsvcCombinedProjectMakefile(void);
  198.     
  199.     // IMsvcMetaMakefile
  200.     virtual string GetCompilerOpt (const string&       opt, 
  201.                                    const SConfigInfo&  config) const;
  202.     virtual string GetLinkerOpt   (const string&       opt, 
  203.                                    const SConfigInfo&  config) const;
  204.     virtual string GetLibrarianOpt(const string&       opt, 
  205.                                    const SConfigInfo&  config) const;
  206.     
  207.     virtual string GetResourceCompilerOpt 
  208.                                   (const string&       opt, 
  209.                                    const SConfigInfo&  config) const;
  210.     // IMsvcProjectMakefile
  211.     virtual bool IsExcludeProject        (bool default_val) const;
  212.     virtual void GetAdditionalSourceFiles(const SConfigInfo& config, 
  213.                                           list<string>*      files) const;
  214.     virtual void GetAdditionalLIB        (const SConfigInfo& config, 
  215.                                           list<string>*      lib_ids) const;
  216.     virtual void GetExcludedSourceFiles  (const SConfigInfo& config, 
  217.                                           list<string>*      files) const;
  218.     virtual void GetExcludedLIB          (const SConfigInfo& config, 
  219.                                           list<string>*      lib_ids) const;
  220.     
  221.     virtual void GetAdditionalIncludeDirs(const SConfigInfo& config, 
  222.                                           list<string>*      files) const;
  223.     virtual void GetCustomBuildInfo      (list<SCustomBuildInfo>* info) const;
  224.     virtual void GetResourceFiles        (const SConfigInfo& config, 
  225.                                           list<string>*      files) const;
  226. private:
  227.     typedef const CMsvcProjectMakefile*    TProjectMakefile;
  228.     TProjectMakefile                       m_ProjectMakefile;
  229.     typedef CRef<CMsvcProjectRuleMakefile> TRule;
  230.     typedef list<TRule>                    TRules;
  231.     TRules                                 m_Rules;
  232.     //Prohibited to
  233.     CMsvcCombinedProjectMakefile(void);
  234.     CMsvcCombinedProjectMakefile(const CMsvcCombinedProjectMakefile&);
  235.     CMsvcCombinedProjectMakefile& 
  236.         operator= (const CMsvcCombinedProjectMakefile&);
  237. };
  238. /// Create project makefile name
  239. string CreateMsvcProjectMakefileName(const string&        project_name,
  240.                                      CProjItem::TProjType type);
  241. string CreateMsvcProjectMakefileName(const CProjItem& project);
  242. /// Get option with taking into account 2 makefiles : matafile and project_file
  243. /// Compiler
  244. string GetCompilerOpt        (const IMsvcMetaMakefile& meta_file,
  245.                               const IMsvcMetaMakefile& project_file,
  246.                               const string&            opt,
  247.                               const SConfigInfo&       config);
  248. /// Linker
  249. string GetLinkerOpt          (const IMsvcMetaMakefile& meta_file, 
  250.                               const IMsvcMetaMakefile& project_file,
  251.                               const string&            opt,
  252.                               const SConfigInfo&       config);
  253. /// Librarian
  254. string GetLibrarianOpt       (const IMsvcMetaMakefile& meta_file, 
  255.                               const IMsvcMetaMakefile& project_file,
  256.                               const string&            opt,
  257.                               const SConfigInfo&       config);
  258. /// ResourceCompiler
  259. string GetResourceCompilerOpt(const IMsvcMetaMakefile& meta_file, 
  260.                               const IMsvcMetaMakefile& project_file,
  261.                               const string&            opt,
  262.                               const SConfigInfo&       config);
  263. END_NCBI_SCOPE
  264. /*
  265.  * ===========================================================================
  266.  * $Log: msvc_makefile.hpp,v $
  267.  * Revision 1000.2  2004/06/16 17:04:52  gouriano
  268.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.10
  269.  *
  270.  * Revision 1.10  2004/06/10 15:12:55  gorelenk
  271.  * Added newline at the file end to avoid GCC warning.
  272.  *
  273.  * Revision 1.9  2004/06/07 13:49:35  gorelenk
  274.  * Introduced interfaces for meta-makefile and project-makefile.
  275.  * Declared classes CMsvcProjectRuleMakefile and CMsvcCombinedProjectMakefile
  276.  * to implement rules for projects.
  277.  *
  278.  * Revision 1.8  2004/05/17 14:33:53  gorelenk
  279.  * Added declaration of GetPchUsageDefine to class CMsvcMetaMakefile.
  280.  *
  281.  * Revision 1.7  2004/05/10 14:24:44  gorelenk
  282.  * + IsPchEnabled and GetUsePchThroughHeader.
  283.  *
  284.  * Revision 1.6  2004/02/23 20:43:42  gorelenk
  285.  * Added support of MSVC ResourceCompiler tool.
  286.  *
  287.  * Revision 1.5  2004/02/23 18:49:24  gorelenk
  288.  * Added declaration of GetResourceFiles member-function
  289.  * to class CMsvcProjectMakefile.
  290.  *
  291.  * Revision 1.4  2004/02/12 16:22:39  gorelenk
  292.  * Changed generation of command line for custom build info.
  293.  *
  294.  * Revision 1.3  2004/02/10 18:02:01  gorelenk
  295.  * + GetAdditionalLIB.
  296.  * + GetExcludedLIB - customization of depends.
  297.  *
  298.  * Revision 1.2  2004/01/28 17:55:04  gorelenk
  299.  * += For msvc makefile support of :
  300.  *                 Requires tag, ExcludeProject tag,
  301.  *                 AddToProject section (SourceFiles and IncludeDirs),
  302.  *                 CustomBuild section.
  303.  * += For support of user local site.
  304.  *
  305.  * Revision 1.1  2004/01/26 19:25:40  gorelenk
  306.  * += MSVC meta makefile support
  307.  * += MSVC project makefile support
  308.  *
  309.  * ===========================================================================
  310.  */
  311. #endif //PROJECT_TREE_BULDER__MSVC_MAKEFILE__HPP