/////////////////////////////////////////////////////////////////////////////////
//
// vcprojconfiguration class implementation
//
// S.Rodriguez - Sept 2002
//
//
// purpose : fill class members with actual configuration data from the .vcproj file
//
//
//
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <atlbase.h> // CComPtr
#include <comutil.h> // _variant_t
#pragma comment(lib, "comsupp.lib")
#include <msxml2.h>
#include "slnprocess.h"
#include "symbols.h"
#include "vcprojconfiguration.h"
vcprojconfiguration::vcprojconfiguration()
{
setMasterProjConfigurations(NULL);
}
// Accessors
void vcprojconfiguration::setMasterProjConfigurations(vcprojconfiguration *p) // used for FileConfiguration
{
m_cpParentConfigurations = p;
}
CString vcprojconfiguration::getConfigName()
{
CString s;
s = General.GetValue(XMLATTRIB_NAME);
return s;
}
BOOL vcprojconfiguration::hasVCConfigTool(CString &szToolName)
{
if (szToolName.CompareNoCase(VCCOMPILERTOOL))
return VCCLCompilerTool.GetValue(XMLATTRIB_NAME).GetLength()>0;
else if (szToolName.CompareNoCase(VCLIBRARIANTOOL))
return VCLibrarianTool.GetValue(XMLATTRIB_NAME).GetLength()>0;
else if (szToolName.CompareNoCase(VCLINKERTOOL))
return VCLinkerTool.GetValue(XMLATTRIB_NAME).GetLength()>0;
else if (szToolName.CompareNoCase(VCRESOURCECOMPILERTOOL))
return VCResourceCompilerTool.GetValue(XMLATTRIB_NAME).GetLength()>0;
else if (szToolName.CompareNoCase(VCMIDLTOOL))
return VCMidlTool.GetValue(XMLATTRIB_NAME).GetLength()>0;
else if (szToolName.CompareNoCase(VCBSCMAKETOOL))
return VCBscMakeTool.GetValue(XMLATTRIB_NAME).GetLength()>0;
else if (szToolName.CompareNoCase(VCPREBUILDEVENTTOOL))
return VCPreBuildEventTool.GetValue(XMLATTRIB_NAME).GetLength()>0;
else if (szToolName.CompareNoCase(VCPRELINKEVENTTOOL))
return VCPreLinkEventTool.GetValue(XMLATTRIB_NAME).GetLength()>0;
else if (szToolName.CompareNoCase(VCPOSTBUILDEVENTTOOL))
return VCPostBuildEventTool.GetValue(XMLATTRIB_NAME).GetLength()>0;
else if (szToolName.CompareNoCase(VCCUSTOMBUILDTOOL))
return VCCustomBuildTool.GetValue(XMLATTRIB_NAME).GetLength()>0;
else if (szToolName.CompareNoCase(VCNMAKETOOL))
return VCNMakeTool.GetValue(XMLATTRIB_NAME).GetLength()>0;
else if (szToolName.CompareNoCase(VCDEBUGSETTINGSTOOL))
return VCDebugSettingsTool.GetValue(XMLATTRIB_NAME).GetLength()>0;
return FALSE;
}
void vcprojconfiguration::fill(/*in*/IXMLDOMElement *p) // fill class members
{
if (!p) return; // good bye!
// first of all, store all attribute names/values in the "General" member
//
fillFromAttributes(p, General);
// then proceed, with all <Tool> occurences
//
CComPtr<IXMLDOMNodeList> pTools;
p->getElementsByTagName( _bstr_t(XMLNODE_TOOL), &pTools);
if (pTools)
{
long nb = 0;
pTools->get_length(&nb);
for (long i=0; i<nb; i++)
{
CComPtr<IXMLDOMNode> pToolNode;
pTools->get_item(i,&pToolNode);
if (pToolNode)
{
CComQIPtr<IXMLDOMElement> pTool( pToolNode );
CString szToolName;
getAttribValue(pTool, XMLATTRIB_NAME, szToolName);
if (szToolName.CompareNoCase(VCCOMPILERTOOL))
fillFromAttributes(pTool, VCCLCompilerTool);
else if (szToolName.CompareNoCase(VCLIBRARIANTOOL))
fillFromAttributes(pTool, VCLibrarianTool);
else if (szToolName.CompareNoCase(VCLINKERTOOL))
fillFromAttributes(pTool, VCLinkerTool);
else if (szToolName.CompareNoCase(VCRESOURCECOMPILERTOOL))
fillFromAttributes(pTool, VCResourceCompilerTool);
else if (szToolName.CompareNoCase(VCMIDLTOOL))
fillFromAttributes(pTool, VCMidlTool);
else if (szToolName.CompareNoCase(VCBSCMAKETOOL))
fillFromAttributes(pTool, VCBscMakeTool);
else if (szToolName.CompareNoCase(VCPREBUILDEVENTTOOL))
fillFromAttributes(pTool, VCPreBuildEventTool);
else if (szToolName.CompareNoCase(VCPRELINKEVENTTOOL))
fillFromAttributes(pTool, VCPreLinkEventTool);
else if (szToolName.CompareNoCase(VCPOSTBUILDEVENTTOOL))
fillFromAttributes(pTool, VCPostBuildEventTool);
else if (szToolName.CompareNoCase(VCCUSTOMBUILDTOOL))
fillFromAttributes(pTool, VCCustomBuildTool);
else if (szToolName.CompareNoCase(VCNMAKETOOL))
fillFromAttributes(pTool, VCNMakeTool);
else if (szToolName.CompareNoCase(VCDEBUGSETTINGSTOOL))
fillFromAttributes(pTool, VCDebugSettingsTool);
}
}
} // end if (pTools)
}
void vcprojconfiguration::fillFromAttributes(/*in*/IXMLDOMElement *p, /*out*/FindableArray &arrAttribs)
{
CComPtr<IXMLDOMNamedNodeMap> pAttributes;
p->get_attributes(&pAttributes);
if (pAttributes)
{
long nbAttribs = 0;
pAttributes->get_length(&nbAttribs);
for (long i=0; i<nbAttribs; i++)
{
CComPtr<IXMLDOMNode> pAttrib;
pAttributes->get_item(i,&pAttrib);
if (pAttrib)
{
BSTR bstrName;
pAttrib->get_nodeName(&bstrName);
CString szName;
BSTR_to_CString(bstrName,szName);
VARIANT vtValue;
pAttrib->get_nodeValue( &vtValue);
CString szValue;
VARIANT_to_CString( vtValue, szValue);
// add this name/value pair
if (!szName.IsEmpty())
{
SINGLEVALUEPARAM *p = new SINGLEVALUEPARAM();
if (p)
{
p->szName = szName;
p->szValue = szValue;
}
arrAttribs.Add( p );
}
}
}
} // end if (pAttributes)
}
CString vcprojconfiguration::serializeCPPSymbols(BOOL bFileConfiguration)
{
long i;
CString szReturn, s;
// sections are divided wrt to VC++7 (rescrambled for any reason by MS from VC++6)
// -- general tab
//
CString szAdditionalIncludeDirectories;
ArrayCString arrAdditionalIncludeDirectories;
s = VCCLCompilerTool.GetValue("AdditionalIncludeDirectories");
if (s.Find(0,",")>-1)
TokenizeString(s,',',arrAdditionalIncludeDirectories); // parse comma-separated path
else
TokenizeString(s,';',arrAdditionalIncludeDirectories); // or parse semi-colon-separated path
for (i=0; i<arrAdditionalIncludeDirectories.GetSize(); i++)
{
CString szDirectory = arrAdditionalIncludeDirectories.GetAt(i);
if ( !szDirectory.CompareNoCase("$(NOINHERIT)") )
szAdditionalIncludeDirectories += "/I \"" + szDirectory + "\" ";
}
CString szDebugInformationFormat;
s = VCCLCompilerTool.GetValue("DebugInformationFormat");
if (s.CompareNoCase("1"))
szDebugInformationFormat = "/Z7 ";
else if (s.CompareNoCase("2"))
szDebugInformationFormat = "/Zd ";
else if (s.CompareNoCase("3"))
szDebugInformationFormat = "/Zi ";
else if (s.CompareNoCase("4"))
szDebugInformationFormat = "/ZI ";
CString szSuppressStartupBanner = "/nologo "; // default VC7 behaviour is "suppress banner"
if ( VCCLCompilerTool.GetValue("SuppressStartupBanner").CompareNoCase("FALSE") )
szSuppressStartupBanner.Empty();
CString szWarningLevel;
s = VCCLCompilerTool.GetValue("WarningLevel");
if (s.CompareNoCase("0") || s.CompareNoCase("1") || s.CompareNoCase("2") || s.CompareNoCase("3") || s.CompareNoCase("4"))
{
szWarningLevel = "/W" + s + " ";
}
CString szWarnAsError;
if ( VCCLCompilerTool.GetValue("WarnAsError").CompareNoCase("TRUE") )
szWarnAsError += "/WX ";
// -- optimization tab
//
CString szOptimization;
s = VCCLCompilerTool.GetValue("Optimization");
if (s.CompareNoCase("0"))
szOptimization = "/Od "; // disabled
else if (s.CompareNoCase("1"))
szOptimization = "/O1 "; // minimize size
else if (s.CompareNoCase("2"))
szOptimization = "/O2 "; // maximize speed
else if (s.CompareNoCase("3"))
szOptimization = "/Ox "; // combined optim (/Ob1 /Og /Oi /Ot /Oy /Gs)
CString szGlobalOptimizations;
if ( VCCLCompilerTool.GetValue("GlobalOptimizations").CompareNoCase("TRUE") )
szGlobalOptimizations = "/Og ";
CString szInlineFunctionExpansion; // disabled (/Ob0 is useless because
prjconverter源码
![star](https://csdnimg.cn/release/downloadcmsfe/public/img/star.98a08eaa.png)
![avatar](https://profile-avatar.csdnimg.cn/b7aecdd077a641f4b2e5bdda11d2d8d6_radarradar.jpg!1)
RADARRADAR
- 粉丝: 0
- 资源: 10
最新资源
- 基于 python 操作大数据的各种组件
- cifar-10-python和cifar-100-python
- 基于 C#实现神经网络算法和遗传算法作为AI的中国象棋程序
- Windows server 2016.2019 .NET Frameword 3.5安装包
- chilkat 9.5.0.98 系列软件 global unlock code
- 基于 python神经网络实现人类颜值评分
- 使用android实现计算器功能
- 305建筑结构水电欧式6套(14.5x20.2)\施工图1-11卫生间大样031026.dwg
- 305建筑结构水电欧式6套(14.5x20.2)\施工图1-09楼梯大样031026.dwg
- 基于PCL、C++编写的格网边缘点检测程序与代码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
评论1