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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: proj_tree_builder.hpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/06/16 17:05:26  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef PROJECT_TREE_BUILDER__PROJ_TREE_BUILDER__HPP
  10. #define PROJECT_TREE_BUILDER__PROJ_TREE_BUILDER__HPP
  11. /* $Id: proj_tree_builder.hpp,v 1000.3 2004/06/16 17:05:26 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 <app/project_tree_builder/proj_item.hpp>
  40. #include <app/project_tree_builder/proj_tree.hpp>
  41. #include <set>
  42. #include <app/project_tree_builder/resolver.hpp>
  43. #include <corelib/ncbienv.hpp>
  44. BEGIN_NCBI_SCOPE
  45. // Traits classes - creation helpers for CProjectTreeBuilder:
  46. /////////////////////////////////////////////////////////////////////////////
  47. ///
  48. /// SMakeProjectT --
  49. ///
  50. /// Base traits and policies.
  51. ///
  52. /// Common traits and policies for all project types.
  53. struct SMakeProjectT
  54. {
  55.     typedef CProjectItemsTree::TFiles TFiles;
  56.     static CProjItem::TProjType GetProjType(const string& base_dir,
  57.                                             const string& projname);
  58.     struct SMakeInInfo
  59.     {
  60.         typedef enum {
  61.             eApp,
  62.             eLib,
  63.             eAsn,
  64.             eMsvc
  65.         } TMakeinType;
  66.         SMakeInInfo(TMakeinType          type,
  67.                     const list<string>&  names)
  68.             :m_Type     (type),
  69.              m_ProjNames(names)
  70.         {
  71.         }
  72.         
  73.         TMakeinType   m_Type;
  74.         list<string>  m_ProjNames;
  75.     };
  76.     typedef list<SMakeInInfo> TMakeInInfoList;
  77.     static void    AnalyzeMakeIn(const CSimpleMakeFileContents& makein_contents,
  78.                                  TMakeInInfoList*               info);
  79.     
  80.     static string CreateMakeAppLibFileName(const string& base_dir,
  81.                                            const string& projname);
  82.     static void   CreateFullPathes        (const string&      dir, 
  83.                                            const list<string> files,
  84.                                            list<string>*      full_pathes);
  85.     static string GetOneIncludeDir        (const string& flag, 
  86.                                            const string& token);
  87.     
  88.     
  89.     static void   CreateIncludeDirs       (const list<string>& cpp_flags,
  90.                                            const string&       source_base_dir,
  91.                                            list<string>*       include_dirs);
  92.     static void   CreateDefines           (const list<string>& cpp_flags,
  93.                                            list<string>*       defines);
  94.     
  95.     static void   Create3PartyLibs        (const list<string>& libs_flags, 
  96.                                            list<string>*       libs_list);
  97.     static void   DoResolveDefs           (CSymResolver&              resolver,
  98.                                            CProjectItemsTree::TFiles& files,
  99.                                            const set<string>&         keys);
  100.     static bool   IsMakeInFile            (const string& name);
  101.     static bool   IsMakeLibFile           (const string& name);
  102.     static bool   IsMakeAppFile           (const string& name);
  103.     static bool   IsUserProjFile          (const string& name);
  104.     static void   ConvertLibDepends       (const list<string>& depends_libs, 
  105.                                            list<CProjKey>*     depends_ids);
  106.     static bool   IsConfigurableDefine    (const string& define);
  107.     static string StripConfigurableDefine (const string& define);
  108. };
  109. /////////////////////////////////////////////////////////////////////////////
  110. ///
  111. /// SAppProjectT --
  112. ///
  113. /// APP_PROJ traits and policies.
  114. ///
  115. /// Traits and policies specific for APP_PROJ.
  116. struct SAppProjectT : public SMakeProjectT
  117. {
  118.     static void CreateNcbiCToolkitLibs(const CSimpleMakeFileContents& makefile,
  119.                                        list<string>*                  libs_list);
  120.     static CProjKey DoCreate(const string&      source_base_dir,
  121.                              const string&      proj_name,
  122.                              const string&      applib_mfilepath,
  123.                              const TFiles&      makeapp, 
  124.                              CProjectItemsTree* tree);
  125. };
  126. /////////////////////////////////////////////////////////////////////////////
  127. ///
  128. /// SLibProjectT --
  129. ///
  130. /// LIB_PROJ traits and policies.
  131. ///
  132. /// Traits and policies specific for LIB_PROJ.
  133. struct SLibProjectT : public SMakeProjectT
  134. {
  135.     static CProjKey DoCreate(const string&      source_base_dir,
  136.                              const string&      proj_name,
  137.                              const string&      applib_mfilepath,
  138.                              const TFiles&      makeapp, 
  139.                              CProjectItemsTree* tree);
  140. };
  141. /////////////////////////////////////////////////////////////////////////////
  142. ///
  143. /// SAsnProjectT --
  144. ///
  145. /// Base traits and policies for project with datatool-generated source files.
  146. ///
  147. /// Common traits and policies for projects with datatool-generated sources.
  148. struct SAsnProjectT : public SMakeProjectT
  149. {
  150.     typedef CProjectItemsTree::TProjects TProjects;
  151.     static CProjKey DoCreate(const string&      source_base_dir,
  152.                              const string&      proj_name,
  153.                              const string&      applib_mfilepath,
  154.                              const TFiles&      makeapp, 
  155.                              const TFiles&      makelib, 
  156.                              CProjectItemsTree* tree);
  157.     
  158.     typedef enum {
  159.             eNoAsn,
  160.             eSingle,
  161.             eMultiple,
  162.         } TAsnType;
  163.     static TAsnType GetAsnProjectType(const string& applib_mfilepath,
  164.                                       const TFiles& makeapp,
  165.                                       const TFiles& makelib);
  166. };
  167. /////////////////////////////////////////////////////////////////////////////
  168. ///
  169. /// SAsnProjectSingleT --
  170. ///
  171. /// Traits and policies for project one ASN/DTD file.
  172. ///
  173. /// Traits and policies specific for project with one ASN/DTD file.
  174. struct SAsnProjectSingleT : public SAsnProjectT
  175. {
  176.     static CProjKey DoCreate(const string&      source_base_dir,
  177.                              const string&      proj_name,
  178.                              const string&      applib_mfilepath,
  179.                              const TFiles&      makeapp, 
  180.                              const TFiles&      makelib, 
  181.                              CProjectItemsTree* tree);
  182. };
  183. /////////////////////////////////////////////////////////////////////////////
  184. ///
  185. /// SAsnProjectMultipleT --
  186. ///
  187. /// Traits and policies for project multiple ASN/DTD files.
  188. ///
  189. /// Traits and policies specific for project with several ASN/DTD files.
  190. struct SAsnProjectMultipleT : public SAsnProjectT
  191. {
  192.     static CProjKey DoCreate(const string&      source_base_dir,
  193.                              const string&      proj_name,
  194.                              const string&      applib_mfilepath,
  195.                              const TFiles&      makeapp, 
  196.                              const TFiles&      makelib, 
  197.                              CProjectItemsTree* tree);
  198. };
  199. /////////////////////////////////////////////////////////////////////////////
  200. ///
  201. /// SUserProjectT --
  202. ///
  203. /// Traits and policies for user project makefiles
  204. ///
  205. /// Traits and policies specific for user-generated projects
  206. struct SMsvcProjectT : public SMakeProjectT
  207. {
  208.     static CProjKey DoCreate(const string&      source_base_dir,
  209.                              const string&      proj_name,
  210.                              const string&      applib_mfilepath,
  211.                              const TFiles&      makemsvc, 
  212.                              CProjectItemsTree* tree);
  213. };
  214. /////////////////////////////////////////////////////////////////////////////
  215. ///
  216. /// CProjectTreeBuilder --
  217. ///
  218. /// Builder class for project tree.
  219. ///
  220. /// Builds tree, resolvs macrodefines and adds dependents projects.
  221. class CProjectTreeBuilder
  222. {
  223. public:
  224.     typedef map<string, CSimpleMakeFileContents> TFiles;
  225.     //              IN      LIB     APP
  226. //    typedef STriple<TFiles, TFiles, TFiles> TMakeFiles;
  227.     
  228.     struct SMakeFiles
  229.     {
  230.         TFiles m_In;
  231.         TFiles m_Lib;
  232.         TFiles m_App;
  233.         TFiles m_User;
  234.     };
  235.     /// Build project tree and include all projects this tree depends upon
  236.     static void BuildProjectTree(const IProjectFilter* filter,
  237.                                  const string&         root_src_path,
  238.                                  CProjectItemsTree*    tree  );
  239. private:
  240.     /// Build one project tree and do not resolve (include) depends
  241.     static void BuildOneProjectTree(const IProjectFilter* filter,
  242.                                     const string&         root_src_path,
  243.                                     CProjectItemsTree*    tree  );
  244.     
  245.     static void ProcessDir (const string&         dir_name, 
  246.                             bool                  is_root,
  247.                             const IProjectFilter* filter,
  248.                             SMakeFiles*           makefiles);
  249.     static void ProcessMakeInFile  (const string& file_name, 
  250.                                     SMakeFiles*   makefiles);
  251.     static void ProcessMakeLibFile (const string& file_name, 
  252.                                     SMakeFiles*   makefiles);
  253.     static void ProcessMakeAppFile (const string& file_name, 
  254.                                     SMakeFiles*   makefiles);
  255.     static void ProcessUserProjFile (const string& file_name, 
  256.                                      SMakeFiles*   makefiles);
  257.     static void ResolveDefs(CSymResolver& resolver, SMakeFiles& makefiles);
  258.     
  259.     static void AddDatatoolSourcesDepends(CProjectItemsTree* tree);
  260. };
  261. END_NCBI_SCOPE
  262. /*
  263.  * ===========================================================================
  264.  * $Log: proj_tree_builder.hpp,v $
  265.  * Revision 1000.3  2004/06/16 17:05:26  gouriano
  266.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  267.  *
  268.  * Revision 1.6  2004/06/10 15:12:55  gorelenk
  269.  * Added newline at the file end to avoid GCC warning.
  270.  *
  271.  * Revision 1.5  2004/05/10 19:48:21  gorelenk
  272.  * + SMsvcProjectT .
  273.  *
  274.  * Revision 1.4  2004/04/06 17:12:37  gorelenk
  275.  * Added member-functions IsConfigurableDefine and StripConfigurableDefine
  276.  * to struct SMakeProjectT .
  277.  *
  278.  * Revision 1.3  2004/03/18 17:41:03  gorelenk
  279.  * Aligned classes member-functions parameters inside declarations.
  280.  *
  281.  * Revision 1.2  2004/03/16 23:54:49  gorelenk
  282.  * Changed parameters list of member-function CreateNcbiCToolkitLibs
  283.  * of struct SAppProjectT.
  284.  *
  285.  * Revision 1.1  2004/03/02 16:35:16  gorelenk
  286.  * Initial revision.
  287.  *
  288.   * ===========================================================================
  289.  */
  290. #endif //PROJECT_TREE_BUILDER__PROJ_TREE_BUILDER__HPP