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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: msvc_site.hpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/06/16 17:05:06  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.16
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef PROJECT_TREE_BUILDER_MSVC_SITE__HPP
  10. #define PROJECT_TREE_BUILDER_MSVC_SITE__HPP
  11. /* $Id: msvc_site.hpp,v 1000.3 2004/06/16 17:05:06 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 <set>
  41. #include <app/project_tree_builder/msvc_prj_utils.hpp>
  42. #include <corelib/ncbienv.hpp>
  43. BEGIN_NCBI_SCOPE
  44. /////////////////////////////////////////////////////////////////////////////
  45. ///
  46. /// SLibInfo --
  47. ///
  48. /// Abstraction of lib description in site.
  49. ///
  50. /// Provides information about 
  51. /// additional include dir, library path and libs list.
  52. struct SLibInfo
  53. {
  54.     string       m_IncludeDir;
  55.     list<string> m_LibDefines;
  56.     string       m_LibPath;
  57.     list<string> m_Libs;
  58.     bool IsEmpty(void) const
  59.     {
  60.         return m_IncludeDir.empty() &&
  61.                m_LibDefines.empty() &&
  62.                m_LibPath.empty()    && 
  63.                m_Libs.empty();
  64.     }
  65.     void Clear(void)
  66.     {
  67.         m_IncludeDir.erase();
  68.         m_LibDefines.clear();
  69.         m_LibPath.erase();
  70.         m_Libs.clear();
  71.     }
  72. };
  73. bool IsLibOk(const SLibInfo& lib_info);
  74. /////////////////////////////////////////////////////////////////////////////
  75. ///
  76. /// CMsvcSite --
  77. ///
  78. /// Abstraction of user site for building of C++ projects.
  79. ///
  80. /// Provides information about libraries availability as well as implicit
  81. /// exclusion of some branches from project tree.
  82. class CMsvcSite
  83. {
  84. public:
  85.     CMsvcSite(const CNcbiRegistry& registry);
  86.     // Is REQUIRES provided?
  87.     bool IsProvided(const string& thing) const;
  88.     /// Get components from site
  89.     void GetComponents(const string& entry, list<string>* components) const;
  90.     /// Is section present in site registry?
  91.     bool IsDescribed(const string& section) const;
  92.     // Get library (LIBS) description
  93.     void GetLibInfo(const string& lib, 
  94.                     const SConfigInfo& config, SLibInfo* libinfo) const;
  95.     // Is this lib available in certain config
  96.     bool IsLibEnabledInConfig(const string&      lib, 
  97.                               const SConfigInfo& config) const;
  98.     
  99.     // Resolve define (now from CPPFLAGS)
  100.     string ResolveDefine(const string& define) const;
  101.     // Configure related:
  102.     // Path from tree root to file where configure defines must be.
  103.     string GetConfigureDefinesPath(void) const;
  104.     // What we have to define:
  105.     void   GetConfigureDefines    (list<string>* defines) const;
  106.     // Lib Choices related:
  107.     enum ELibChoice {
  108.         eUnknown,
  109.         eLib,
  110.         e3PartyLib
  111.     };
  112.     struct SLibChoice
  113.     {
  114.         SLibChoice(void);
  115.         SLibChoice(const CMsvcSite& site,
  116.                    const string&    lib,
  117.                    const string&    lib_3party);
  118.         ELibChoice m_Choice;
  119.         string     m_LibId;
  120.         string     m_3PartyLib;
  121.     };
  122.     bool IsLibWithChoice            (const string& lib_id) const;
  123.     bool Is3PartyLibWithChoice      (const string& lib3party_id) const;
  124.     ELibChoice GetChoiceForLib      (const string& lib_id) const;
  125.     ELibChoice GetChoiceFor3PartyLib(const string& lib3party_id) const;
  126.     void GetLibChoiceIncludes       (const string& cpp_flags_define, 
  127.                                      list<string>* abs_includes) const;
  128.     SLibChoice GetLibChoiceForLib   (const string& lib_id) const;
  129.     
  130.     string GetAppDefaultResource(void) const;
  131.     void   GetThirdPartyLibsToInstall    (list<string>* libs) const;
  132.     string GetThirdPartyLibsBinPathSuffix(void) const;
  133.     string GetThirdPartyLibsBinSubDir    (void) const;
  134.     
  135. private:
  136.     const CNcbiRegistry& m_Registry;
  137.     
  138.     set<string> m_NotProvidedThing;
  139.     list<SLibChoice> m_LibChoices;
  140.     /// Prohibited to:
  141.     CMsvcSite(void);
  142.     CMsvcSite(const CMsvcSite&);
  143.     CMsvcSite& operator= (const CMsvcSite&);
  144. };
  145. END_NCBI_SCOPE
  146. /*
  147.  * ===========================================================================
  148.  * $Log: msvc_site.hpp,v $
  149.  * Revision 1000.3  2004/06/16 17:05:06  gouriano
  150.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.16
  151.  *
  152.  * Revision 1.16  2004/06/10 15:12:55  gorelenk
  153.  * Added newline at the file end to avoid GCC warning.
  154.  *
  155.  * Revision 1.15  2004/06/01 16:02:40  gorelenk
  156.  * + GetLibChoiceForLib to class CMsvcSite,
  157.  * + default constructor for struct SLibChoice.
  158.  *
  159.  * Revision 1.14  2004/05/24 14:39:17  gorelenk
  160.  * Added declaration member-functions for third-party libs
  161.  * auto-install support: GetThirdPartyLibsToInstall,
  162.  * GetThirdPartyLibsBinPathSuffix, GetThirdPartyLibsBinSubDir
  163.  * to class CMsvcSite.
  164.  *
  165.  * Revision 1.13  2004/05/17 14:35:21  gorelenk
  166.  * Added declaration of GetAppDefaultResource to class CMsvcSite.
  167.  *
  168.  * Revision 1.12  2004/05/13 14:54:01  gorelenk
  169.  * Added GetLibChoiceIncludes to class CMsvcSite.
  170.  *
  171.  * Revision 1.11  2004/04/19 15:37:43  gorelenk
  172.  * Added lib choice related members : enum ELibChoice, struct SLibChoice,
  173.  * functions IsLibWithChoice, Is3PartyLibWithChoice,
  174.  * GetChoiceForLib and GetChoiceFor3PartyLib to class CMsvcSite.
  175.  *
  176.  * Revision 1.10  2004/03/22 14:45:38  gorelenk
  177.  * Added member m_LibDefines to struct SLibInfo.
  178.  *
  179.  * Revision 1.9  2004/02/24 20:48:49  gorelenk
  180.  * Added declaration of member-function IsLibEnabledInConfig
  181.  * to class CMsvcSite.
  182.  *
  183.  * Revision 1.8  2004/02/24 17:16:30  gorelenk
  184.  * Redesigned member-function IsEmpty of struct SLibInfo.
  185.  *
  186.  * Revision 1.7  2004/02/06 23:15:40  gorelenk
  187.  * Implemented support of ASN projects, semi-auto configure,
  188.  * CPPFLAGS support. Second working version.
  189.  *
  190.  * Revision 1.6  2004/02/05 16:32:22  gorelenk
  191.  * Added declaration of function GetComponents.
  192.  *
  193.  * Revision 1.5  2004/02/05 15:28:14  gorelenk
  194.  * + Configuration information provision.
  195.  *
  196.  * Revision 1.4  2004/02/04 23:16:25  gorelenk
  197.  * To class CMsvcSite added member function ResolveDefine.
  198.  *
  199.  * Revision 1.3  2004/02/03 17:06:44  gorelenk
  200.  * Removed members from class CMsvcSite.
  201.  *
  202.  * Revision 1.2  2004/01/28 17:55:06  gorelenk
  203.  * += For msvc makefile support of :
  204.  *                 Requires tag, ExcludeProject tag,
  205.  *                 AddToProject section (SourceFiles and IncludeDirs),
  206.  *                 CustomBuild section.
  207.  * += For support of user local site.
  208.  *
  209.  * Revision 1.1  2004/01/26 19:25:41  gorelenk
  210.  * += MSVC meta makefile support
  211.  * += MSVC project makefile support
  212.  *
  213.  * ===========================================================================
  214.  */
  215. #endif //PROJECT_TREE_BUILDER_MSVC_SITE__HPP