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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: msvc_prj_generator.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/16 17:02:30  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.35
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #include <ncbi_pch.hpp>
  10. #include <app/project_tree_builder/msvc_prj_generator.hpp>
  11. #include <app/project_tree_builder/proj_builder_app.hpp>
  12. #include <app/project_tree_builder/msvc_project_context.hpp>
  13. #include <app/project_tree_builder/msvc_prj_utils.hpp>
  14. #include <app/project_tree_builder/msvc_prj_defines.hpp>
  15. #include <app/project_tree_builder/msvc_prj_files_collector.hpp>
  16. #include <algorithm>
  17. BEGIN_NCBI_SCOPE
  18. static 
  19. void s_CreateDatatoolCustomBuildInfo(const CProjItem&              prj,
  20.                                      const CMsvcPrjProjectContext& context,
  21.                                      const CDataToolGeneratedSrc&  src,                                   
  22.                                      SCustomBuildInfo*             build_info);
  23. //-----------------------------------------------------------------------------
  24. CMsvcProjectGenerator::CMsvcProjectGenerator(const list<SConfigInfo>& configs)
  25.     :m_Configs(configs)
  26. {
  27. }
  28. CMsvcProjectGenerator::~CMsvcProjectGenerator(void)
  29. {
  30. }
  31. void CMsvcProjectGenerator::Generate(const CProjItem& prj)
  32. {
  33.     // Already have it
  34.     if ( prj.m_ProjType == CProjKey::eMsvc)
  35.         return;
  36.     CMsvcPrjProjectContext project_context(prj);
  37.     CVisualStudioProject xmlprj;
  38.     // Checking configuration availability:
  39.     list<SConfigInfo> project_configs;
  40.     ITERATE(list<SConfigInfo>, p , m_Configs) {
  41.         const SConfigInfo& cfg_info = *p;
  42.         // Check config availability
  43.         if ( !project_context.IsConfigEnabled(cfg_info) ) {
  44.             LOG_POST(Info << "Configuration "
  45.                           << cfg_info.m_Name
  46.                           << " disabled in project "
  47.                           << project_context.ProjectId());
  48.         } else {
  49.             project_configs.push_back(cfg_info);
  50.         }
  51.     }
  52.     
  53.     {{
  54.         // Attributes:
  55.         xmlprj.SetAttlist().SetProjectType (MSVC_PROJECT_PROJECT_TYPE);
  56.         xmlprj.SetAttlist().SetVersion     (MSVC_PROJECT_VERSION);
  57.         xmlprj.SetAttlist().SetName        (project_context.ProjectName());
  58.         xmlprj.SetAttlist().SetKeyword     (MSVC_PROJECT_KEYWORD_WIN32);
  59.     }}
  60.     
  61.     {{
  62.         // Platforms
  63.          CRef<CPlatform> platform(new CPlatform(""));
  64.          platform->SetAttlist().SetName(MSVC_PROJECT_PLATFORM);
  65.          xmlprj.SetPlatforms().SetPlatform().push_back(platform);
  66.     }}
  67.     ITERATE(list<SConfigInfo>, p , project_configs) {
  68.         const SConfigInfo& cfg_info = *p;
  69.  
  70.         // Contexts:
  71.         
  72.         CMsvcPrjGeneralContext general_context(cfg_info, project_context);
  73.         // MSVC Tools
  74.         CMsvcTools msvc_tool(general_context, project_context);
  75.         CRef<CConfiguration> conf(new CConfiguration());
  76. #define BIND_TOOLS(tool, msvctool, X) 
  77.                   tool->SetAttlist().Set##X(msvctool->X())
  78.         {{
  79.             //Configuration
  80.             //Name
  81.             BIND_TOOLS(conf, msvc_tool.Configuration(), Name);
  82.             
  83.             //OutputDirectory
  84.             BIND_TOOLS(conf, msvc_tool.Configuration(), OutputDirectory);
  85.             //IntermediateDirectory
  86.             BIND_TOOLS(conf, msvc_tool.Configuration(), IntermediateDirectory);
  87.             //ConfigurationType
  88.             BIND_TOOLS(conf, msvc_tool.Configuration(), ConfigurationType);
  89.             //CharacterSet
  90.             BIND_TOOLS(conf, msvc_tool.Configuration(), CharacterSet);
  91.         }}
  92.         
  93.         {{
  94.             //Compiler
  95.             CRef<CTool> tool(new CTool("")); 
  96.             //Name
  97.             BIND_TOOLS(tool, msvc_tool.Compiler(), Name);
  98.             
  99.             //Optimization
  100.             BIND_TOOLS(tool, msvc_tool.Compiler(), Optimization);
  101.             //AdditionalIncludeDirectories - more dirs are coming from makefile
  102.             BIND_TOOLS(tool, 
  103.                        msvc_tool.Compiler(), AdditionalIncludeDirectories);
  104.             //PreprocessorDefinitions
  105.             BIND_TOOLS(tool, msvc_tool.Compiler(), PreprocessorDefinitions);
  106.             
  107.             //MinimalRebuild
  108.             BIND_TOOLS(tool, msvc_tool.Compiler(), MinimalRebuild);
  109.             //BasicRuntimeChecks
  110.             BIND_TOOLS(tool, msvc_tool.Compiler(), BasicRuntimeChecks);
  111.             //RuntimeLibrary
  112.             BIND_TOOLS(tool, msvc_tool.Compiler(), RuntimeLibrary);
  113.             //RuntimeTypeInfo
  114.             BIND_TOOLS(tool, msvc_tool.Compiler(), RuntimeTypeInfo);
  115.             //UsePrecompiledHeader
  116.             BIND_TOOLS(tool, msvc_tool.Compiler(), UsePrecompiledHeader);
  117.             //WarningLevel
  118.             BIND_TOOLS(tool, msvc_tool.Compiler(), WarningLevel);
  119.             //Detect64BitPortabilityProblems
  120.             BIND_TOOLS(tool, 
  121.                        msvc_tool.Compiler(), Detect64BitPortabilityProblems);
  122.             //DebugInformationFormat
  123.             BIND_TOOLS(tool, msvc_tool.Compiler(), DebugInformationFormat);
  124.             //CompileAs
  125.             BIND_TOOLS(tool, msvc_tool.Compiler(), CompileAs);
  126.             
  127.             //InlineFunctionExpansion
  128.             BIND_TOOLS(tool, msvc_tool.Compiler(), InlineFunctionExpansion);
  129.             //OmitFramePointers
  130.             BIND_TOOLS(tool, msvc_tool.Compiler(), OmitFramePointers);
  131.             //StringPooling
  132.             BIND_TOOLS(tool, msvc_tool.Compiler(), StringPooling);
  133.             //EnableFunctionLevelLinking
  134.             BIND_TOOLS(tool, msvc_tool.Compiler(), EnableFunctionLevelLinking);
  135.             //OptimizeForProcessor
  136.             BIND_TOOLS(tool, msvc_tool.Compiler(), OptimizeForProcessor);
  137.             
  138.             //StructMemberAlignment 
  139.             BIND_TOOLS(tool, msvc_tool.Compiler(), StructMemberAlignment);
  140.             
  141.             //CallingConvention
  142.             BIND_TOOLS(tool, msvc_tool.Compiler(), CallingConvention);
  143.             
  144.             //IgnoreStandardIncludePath
  145.             BIND_TOOLS(tool, msvc_tool.Compiler(), IgnoreStandardIncludePath);
  146.             
  147.             //ExceptionHandling
  148.             BIND_TOOLS(tool, msvc_tool.Compiler(), ExceptionHandling);
  149.             
  150.             //BufferSecurityCheck
  151.             BIND_TOOLS(tool, msvc_tool.Compiler(), BufferSecurityCheck);
  152.             
  153.             //DisableSpecificWarnings
  154.             BIND_TOOLS(tool, msvc_tool.Compiler(), DisableSpecificWarnings);
  155.             
  156.             //UndefinePreprocessorDefinitions
  157.             BIND_TOOLS(tool, 
  158.                        msvc_tool.Compiler(), UndefinePreprocessorDefinitions);
  159.             
  160.             //AdditionalOptions
  161.             BIND_TOOLS(tool, msvc_tool.Compiler(), AdditionalOptions);
  162.             
  163.             //GlobalOptimizations
  164.             BIND_TOOLS(tool, msvc_tool.Compiler(), GlobalOptimizations);
  165.             
  166.             //FavorSizeOrSpeed
  167.             BIND_TOOLS(tool, msvc_tool.Compiler(), FavorSizeOrSpeed);
  168.             
  169.             //BrowseInformation
  170.             BIND_TOOLS(tool, msvc_tool.Compiler(), BrowseInformation);
  171.             conf->SetTool().push_back(tool);
  172.         }}
  173.         {{
  174.             //Linker
  175.             CRef<CTool> tool(new CTool(""));
  176.             //Name
  177.             BIND_TOOLS(tool, msvc_tool.Linker(), Name);
  178.             //AdditionalOptions
  179.             BIND_TOOLS(tool, msvc_tool.Linker(), AdditionalOptions);
  180.             
  181.             //OutputFile
  182.             BIND_TOOLS(tool, msvc_tool.Linker(), OutputFile);
  183.             //LinkIncremental
  184.             BIND_TOOLS(tool, msvc_tool.Linker(), LinkIncremental);
  185.             
  186.             //GenerateDebugInformation
  187.             BIND_TOOLS(tool, msvc_tool.Linker(), GenerateDebugInformation);
  188.             
  189.             //ProgramDatabaseFile
  190.             BIND_TOOLS(tool, msvc_tool.Linker(), ProgramDatabaseFile);
  191.             //SubSystem
  192.             BIND_TOOLS(tool, msvc_tool.Linker(), SubSystem);
  193.             //ImportLibrary
  194.             BIND_TOOLS(tool, msvc_tool.Linker(), ImportLibrary);
  195.             //TargetMachine
  196.             BIND_TOOLS(tool, msvc_tool.Linker(), TargetMachine);
  197.             //OptimizeReferences
  198.             BIND_TOOLS(tool, msvc_tool.Linker(), OptimizeReferences);
  199.             //EnableCOMDATFolding
  200.             BIND_TOOLS(tool, msvc_tool.Linker(), EnableCOMDATFolding);
  201.             //IgnoreAllDefaultLibraries
  202.             BIND_TOOLS(tool, msvc_tool.Linker(), IgnoreAllDefaultLibraries);
  203.             
  204.             //IgnoreDefaultLibraryNames
  205.             BIND_TOOLS(tool, msvc_tool.Linker(), IgnoreDefaultLibraryNames);
  206.             
  207.             //AdditionalLibraryDirectories
  208.             BIND_TOOLS(tool, msvc_tool.Linker(), AdditionalLibraryDirectories);
  209.             conf->SetTool().push_back(tool);
  210.         }}
  211.         {{
  212.             //Librarian
  213.             CRef<CTool> tool(new CTool(""));
  214.             //Name
  215.             BIND_TOOLS(tool, msvc_tool.Librarian(), Name);
  216.             //AdditionalOptions
  217.             BIND_TOOLS(tool, msvc_tool.Librarian(), AdditionalOptions);
  218.             //OutputFile
  219.             BIND_TOOLS(tool, msvc_tool.Librarian(), OutputFile);
  220.             //IgnoreAllDefaultLibraries
  221.             BIND_TOOLS(tool, msvc_tool.Librarian(), IgnoreAllDefaultLibraries);
  222.             //IgnoreDefaultLibraryNames
  223.             BIND_TOOLS(tool, msvc_tool.Librarian(), IgnoreDefaultLibraryNames);
  224.             //AdditionalLibraryDirectories
  225.             BIND_TOOLS(tool, 
  226.                        msvc_tool.Librarian(), AdditionalLibraryDirectories);
  227.             conf->SetTool().push_back(tool);
  228.         }}
  229.         {{
  230.             //CustomBuildTool
  231.             CRef<CTool> tool(new CTool(""));
  232.             //Name
  233.             BIND_TOOLS(tool, msvc_tool.CustomBuid(), Name);
  234.             conf->SetTool().push_back(tool);
  235.         }}
  236.         {{
  237.             //MIDL
  238.             CRef<CTool> tool(new CTool(""));
  239.             //Name
  240.             BIND_TOOLS(tool, msvc_tool.MIDL(), Name);
  241.             conf->SetTool().push_back(tool);
  242.         }}
  243.         {{
  244.             //PostBuildEvent
  245.             CRef<CTool> tool(new CTool(""));
  246.             //Name
  247.             BIND_TOOLS(tool, msvc_tool.PostBuildEvent(), Name);
  248.             conf->SetTool().push_back(tool);
  249.         }}
  250.         {{
  251.             //PreBuildEvent
  252.             CRef<CTool> tool(new CTool(""));
  253.             //Name
  254.             BIND_TOOLS(tool, msvc_tool.PreBuildEvent(), Name);
  255.             //CommandLine
  256.             BIND_TOOLS(tool, msvc_tool.PreBuildEvent(), CommandLine);
  257.             conf->SetTool().push_back(tool);
  258.         }}
  259.         {{
  260.             //PreLinkEvent
  261.             CRef<CTool> tool(new CTool(""));
  262.             //Name
  263.             BIND_TOOLS(tool, msvc_tool.PreLinkEvent(), Name);
  264.             conf->SetTool().push_back(tool);
  265.         }}
  266.         {{
  267.             //ResourceCompiler
  268.             CRef<CTool> tool(new CTool(""));
  269.             //Name
  270.             BIND_TOOLS(tool, msvc_tool.ResourceCompiler(), Name);
  271.              
  272.             //AdditionalIncludeDirectories
  273.             BIND_TOOLS(tool, 
  274.                        msvc_tool.ResourceCompiler(), 
  275.                        AdditionalIncludeDirectories);
  276.             //AdditionalOptions
  277.             BIND_TOOLS(tool, 
  278.                        msvc_tool.ResourceCompiler(), 
  279.                        AdditionalOptions);
  280.             //Culture
  281.             BIND_TOOLS(tool, msvc_tool.ResourceCompiler(), Culture);
  282.             //PreprocessorDefinitions
  283.             BIND_TOOLS(tool, 
  284.                        msvc_tool.ResourceCompiler(), 
  285.                        PreprocessorDefinitions);
  286.             
  287.             conf->SetTool().push_back(tool);
  288.         }}
  289.         {{
  290.             //WebServiceProxyGenerator
  291.             CRef<CTool> tool(new CTool(""));
  292.             //Name
  293.             BIND_TOOLS(tool, msvc_tool.WebServiceProxyGenerator(), Name);
  294.             conf->SetTool().push_back(tool);
  295.         }}
  296.         {{
  297.             //XMLDataGenerator
  298.             CRef<CTool> tool(new CTool(""));
  299.             //Name
  300.             BIND_TOOLS(tool, msvc_tool.XMLDataGenerator(), Name);
  301.             conf->SetTool().push_back(tool);
  302.         }}
  303.         {{
  304.             //ManagedWrapperGenerator
  305.             CRef<CTool> tool(new CTool(""));
  306.             //Name
  307.             BIND_TOOLS(tool, msvc_tool.ManagedWrapperGenerator(), Name);
  308.             conf->SetTool().push_back(tool);
  309.         }}
  310.         {{
  311.             //AuxiliaryManagedWrapperGenerator
  312.             CRef<CTool> tool(new CTool(""));
  313.             //Name
  314.             BIND_TOOLS(tool, 
  315.                        msvc_tool.AuxiliaryManagedWrapperGenerator(),
  316.                        Name);
  317.             conf->SetTool().push_back(tool);
  318.         }}
  319.         xmlprj.SetConfigurations().SetConfiguration().push_back(conf);
  320.     }
  321.     {{
  322.         //References
  323.         xmlprj.SetReferences("");
  324.     }}
  325.     // Collect all source, header, inline, resource files
  326.     CMsvcPrjFilesCollector      collector(project_context, prj);
  327.     
  328.     // Insert sources, headers, inlines:
  329.     auto_ptr<IFilesToProjectInserter> inserter;
  330.     if (prj.m_ProjType == CProjKey::eDll) {
  331.         inserter.reset(new CDllProjectFilesInserter
  332.                                     (&xmlprj,
  333.                                      CProjKey(prj.m_ProjType, prj.m_ID), 
  334.                                      project_configs, 
  335.                                      project_context.ProjectDir()));
  336.     } else {
  337.         inserter.reset(new CBasicProjectsFilesInserter 
  338.                                      (&xmlprj,
  339.                                       prj.m_ID,
  340.                                       project_configs, 
  341.                                       project_context.ProjectDir()));
  342.     }
  343.     ITERATE(list<string>, p, collector.SourceFiles()) {
  344.         //Include collected source files
  345.         const string& rel_source_file = *p;
  346.         inserter->AddSourceFile(rel_source_file);
  347.     }
  348.     ITERATE(list<string>, p, collector.HeaderFiles()) {
  349.         //Include collected header files
  350.         const string& rel_source_file = *p;
  351.         inserter->AddHeaderFile(rel_source_file);
  352.     }
  353.     ITERATE(list<string>, p, collector.InlineFiles()) {
  354.         //Include collected inline files
  355.         const string& rel_source_file = *p;
  356.         inserter->AddInlineFile(rel_source_file);
  357.     }
  358.     inserter->Finalize();
  359.     {{
  360.         //Resource Files - header files - empty
  361.         CRef<CFilter> filter(new CFilter());
  362.         filter->SetAttlist().SetName("Resource Files");
  363.         filter->SetAttlist().SetFilter
  364.             ("rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx");
  365.         ITERATE(list<string>, p, collector.ResourceFiles()) {
  366.             //Include collected header files
  367.             CRef<CFFile> file(new CFFile());
  368.             file->SetAttlist().SetRelativePath(*p);
  369.             CRef< CFilter_Base::C_FF::C_E > ce(new CFilter_Base::C_FF::C_E());
  370.             ce->SetFile(*file);
  371.             filter->SetFF().SetFF().push_back(ce);
  372.         }
  373.         xmlprj.SetFiles().SetFilter().push_back(filter);
  374.     }}
  375.     {{
  376.         //Custom Build files
  377.         const list<SCustomBuildInfo>& info_list = 
  378.             project_context.GetCustomBuildInfo();
  379.         if ( !info_list.empty() ) {
  380.             CRef<CFilter> filter(new CFilter());
  381.             filter->SetAttlist().SetName("Custom Build Files");
  382.             filter->SetAttlist().SetFilter("");
  383.             
  384.             ITERATE(list<SCustomBuildInfo>, p, info_list) { 
  385.                 const SCustomBuildInfo& build_info = *p;
  386.                 AddCustomBuildFileToFilter(filter, 
  387.                                            project_configs, 
  388.                                            project_context.ProjectDir(),
  389.                                            build_info);
  390.             }
  391.             xmlprj.SetFiles().SetFilter().push_back(filter);
  392.         }
  393.     }}
  394.     {{
  395.         //Datatool files
  396.         if ( !prj.m_DatatoolSources.empty() ) {
  397.             
  398.             CRef<CFilter> filter(new CFilter());
  399.             filter->SetAttlist().SetName("Datatool Files");
  400.             filter->SetAttlist().SetFilter("");
  401.             ITERATE(list<CDataToolGeneratedSrc>, p, prj.m_DatatoolSources) {
  402.                 const CDataToolGeneratedSrc& src = *p;
  403.                 SCustomBuildInfo build_info;
  404.                 s_CreateDatatoolCustomBuildInfo(prj, 
  405.                                               project_context, 
  406.                                               src, 
  407.                                               &build_info);
  408.                 AddCustomBuildFileToFilter(filter, 
  409.                                            project_configs, 
  410.                                            project_context.ProjectDir(), 
  411.                                            build_info);
  412.             }
  413.             xmlprj.SetFiles().SetFilter().push_back(filter);
  414.         }
  415.     }}
  416.     {{
  417.         //Globals
  418.         xmlprj.SetGlobals("");
  419.     }}
  420.     string project_path = CDirEntry::ConcatPath(project_context.ProjectDir(), 
  421.                                                 project_context.ProjectName());
  422.     project_path += MSVC_PROJECT_FILE_EXT;
  423.     SaveIfNewer(project_path, xmlprj);
  424. }
  425. static 
  426. void s_CreateDatatoolCustomBuildInfo(const CProjItem&              prj,
  427.                                      const CMsvcPrjProjectContext& context,
  428.                                      const CDataToolGeneratedSrc&  src,                                   
  429.                                      SCustomBuildInfo*             build_info)
  430. {
  431.     build_info->Clear();
  432.     //SourceFile
  433.     build_info->m_SourceFile = 
  434.         CDirEntry::ConcatPath(src.m_SourceBaseDir, src.m_SourceFile);
  435.     //CommandLine
  436.     //exe location - path is supposed to be relative encoded
  437.     string tool_exe_location("");
  438.     if (prj.m_ProjType == CProjKey::eApp)
  439.         tool_exe_location = GetApp().GetDatatoolPathForApp();
  440.     else if (prj.m_ProjType == CProjKey::eLib)
  441.         tool_exe_location = GetApp().GetDatatoolPathForLib();
  442.     else if (prj.m_ProjType == CProjKey::eDll)
  443.         tool_exe_location = GetApp().GetDatatoolPathForApp();
  444.     else
  445.         return;
  446.     //command line
  447.     string tool_cmd_prfx = GetApp().GetDatatoolCommandLine();
  448.     tool_cmd_prfx += " -or ";
  449.     tool_cmd_prfx += 
  450.         CDirEntry::CreateRelativePath(GetApp().GetProjectTreeInfo().m_Src,
  451.                                       src.m_SourceBaseDir);
  452.     tool_cmd_prfx += " -oR ";
  453.     tool_cmd_prfx += CDirEntry::CreateRelativePath(context.ProjectDir(),
  454.                                          GetApp().GetProjectTreeInfo().m_Root);
  455.     string tool_cmd(tool_cmd_prfx);
  456.     if ( !src.m_ImportModules.empty() ) {
  457.         tool_cmd += " -M "";
  458.         tool_cmd += NStr::Join(src.m_ImportModules, " ");
  459.         tool_cmd += '"';
  460.     }
  461.     build_info->m_CommandLine = 
  462.         "@echo onn" + tool_exe_location + " " + tool_cmd;
  463.     //Description
  464.     build_info->m_Description = 
  465.         "Using datatool to create a C++ object from ASN/DTD $(InputPath)";
  466.     //Outputs
  467. #if 0
  468.     string data_tool_src_base;
  469.     CDirEntry::SplitPath(src.m_SourceFile, NULL, &data_tool_src_base);
  470.     string outputs = "$(InputDir)" + data_tool_src_base + "__.cpp;";
  471.     outputs += "$(InputDir)" + data_tool_src_base + "___.cpp;";
  472.     build_info->m_Outputs = outputs;
  473. #endif
  474.     build_info->m_Outputs = "$(InputDir)$(InputName).files;";
  475.     //Additional Dependencies
  476.     build_info->m_AdditionalDependencies = "$(InputDir)$(InputName).def;";
  477. }
  478. END_NCBI_SCOPE
  479. /*
  480.  * ===========================================================================
  481.  * $Log: msvc_prj_generator.cpp,v $
  482.  * Revision 1000.2  2004/06/16 17:02:30  gouriano
  483.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.35
  484.  *
  485.  * Revision 1.35  2004/06/10 15:16:46  gorelenk
  486.  * Changed macrodefines to be comply with GCC 3.4.0 .
  487.  *
  488.  * Revision 1.34  2004/05/26 18:01:46  gorelenk
  489.  * Changed CMsvcProjectGenerator::Generate :
  490.  * Changed insertion fo source files, headers, inlines.
  491.  * Changed s_CreateDatatoolCustomBuildInfo :
  492.  * used $(InputDir)$(InputName).files as a datatool sources custom build step
  493.  * output.
  494.  *
  495.  * Revision 1.33  2004/05/21 21:41:41  gorelenk
  496.  * Added PCH ncbi_pch.hpp
  497.  *
  498.  * Revision 1.32  2004/05/10 19:55:08  gorelenk
  499.  * Changed CMsvcProjectGenerator::Generate .
  500.  *
  501.  * Revision 1.31  2004/05/10 14:28:01  gorelenk
  502.  * Changed implementation CMsvcProjectGenerator::Generate .
  503.  *
  504.  * Revision 1.30  2004/04/30 13:57:01  dicuccio
  505.  * Fixed project generation to correct dependency rules for datatool-generated
  506.  * code.
  507.  *
  508.  * Revision 1.29  2004/03/18 22:44:26  gorelenk
  509.  * Changed implementation of CMsvcProjectGenerator::Generate - implemented
  510.  * custom builds only in available configurations.
  511.  *
  512.  * Revision 1.28  2004/03/16 21:26:26  gorelenk
  513.  * Added generation dependencies from $(InputDir)$(InputName).def
  514.  * to s_CreateDatatoolCustomBuildInfo.
  515.  *
  516.  * Revision 1.27  2004/03/15 22:22:01  gorelenk
  517.  * Changed implementation of s_CreateDatatoolCustomBuildInfo.
  518.  *
  519.  * Revision 1.26  2004/03/10 16:39:56  gorelenk
  520.  * Changed LOG_POST inside CMsvcProjectGenerator::Generate.
  521.  *
  522.  * Revision 1.25  2004/03/08 23:35:04  gorelenk
  523.  * Changed implementation of CMsvcProjectGenerator::Generate.
  524.  *
  525.  * Revision 1.24  2004/03/05 20:31:54  gorelenk
  526.  * Files collecting functionality was moved to separate class :
  527.  * CMsvcPrjFilesCollector.
  528.  *
  529.  * Revision 1.23  2004/03/05 18:07:22  gorelenk
  530.  * Changed implementation of s_CreateDatatoolCustomBuildInfo .
  531.  *
  532.  * Revision 1.22  2004/02/25 20:19:36  gorelenk
  533.  * Changed implementation of function s_IsInsideDatatoolSourceDir.
  534.  *
  535.  * Revision 1.21  2004/02/25 19:42:35  gorelenk
  536.  * Changed implementation of function s_IsProducedByDatatool.
  537.  *
  538.  * Revision 1.20  2004/02/24 21:03:06  gorelenk
  539.  * Added checking of config availability to implementation of
  540.  * member-function Generate of class CMsvcProjectGenerator.
  541.  *
  542.  * Revision 1.19  2004/02/23 20:42:57  gorelenk
  543.  * Added support of MSVC ResourceCompiler tool.
  544.  *
  545.  * Revision 1.18  2004/02/20 22:53:26  gorelenk
  546.  * Added analysis of ASN projects depends.
  547.  *
  548.  * Revision 1.17  2004/02/13 23:11:10  gorelenk
  549.  * Changed implementation of function s_CreateDatatoolCustomBuildInfo - added
  550.  * list of output files to generated SCustomBuildInfo.
  551.  *
  552.  * Revision 1.16  2004/02/13 20:31:20  gorelenk
  553.  * Changed source relative path for datatool input files.
  554.  *
  555.  * Revision 1.15  2004/02/12 16:27:57  gorelenk
  556.  * Changed generation of command line for datatool.
  557.  *
  558.  * Revision 1.14  2004/02/10 18:09:12  gorelenk
  559.  * Added definitions of functions SaveIfNewer and PromoteIfDifferent
  560.  * - support for file overwriting only if it was changed.
  561.  *
  562.  * Revision 1.13  2004/02/06 23:14:59  gorelenk
  563.  * Implemented support of ASN projects, semi-auto configure,
  564.  * CPPFLAGS support. Second working version.
  565.  *
  566.  * Revision 1.12  2004/02/05 00:02:08  gorelenk
  567.  * Added support of user site and  Makefile defines.
  568.  *
  569.  * Revision 1.11  2004/02/03 17:20:47  gorelenk
  570.  * Changed implementation of method Generate of class CMsvcProjectGenerator.
  571.  *
  572.  * Revision 1.10  2004/01/30 20:46:55  gorelenk
  573.  * Added support of ASN projects.
  574.  *
  575.  * Revision 1.9  2004/01/29 15:48:58  gorelenk
  576.  * Support of projects fitering transfered to CProjBulderApp class
  577.  *
  578.  * Revision 1.8  2004/01/28 17:55:48  gorelenk
  579.  * += For msvc makefile support of :
  580.  *                 Requires tag, ExcludeProject tag,
  581.  *                 AddToProject section (SourceFiles and IncludeDirs),
  582.  *                 CustomBuild section.
  583.  * += For support of user local site.
  584.  *
  585.  * Revision 1.7  2004/01/26 19:27:28  gorelenk
  586.  * += MSVC meta makefile support
  587.  * += MSVC project makefile support
  588.  *
  589.  * Revision 1.6  2004/01/22 17:57:54  gorelenk
  590.  * first version
  591.  *
  592.  * ===========================================================================
  593.  */