diff options
author | Martin Smith <msmith@trolltech.com> | 2010-04-27 08:45:30 (GMT) |
---|---|---|
committer | Martin Smith <msmith@trolltech.com> | 2010-04-27 08:45:30 (GMT) |
commit | 9cea45515ef283c9a870c6f515da50d31addafcf (patch) | |
tree | d14fdf2b17a2a52c90ac514c39ad60be200cc7d7 /qmake/generators/win32/msbuild_objectmodel.h | |
parent | 6749edd4c6f647c4963793183a452bb1ae769c1c (diff) | |
parent | 13dff164d2ab13b1258d31693b67acebc8636890 (diff) | |
download | Qt-9cea45515ef283c9a870c6f515da50d31addafcf.zip Qt-9cea45515ef283c9a870c6f515da50d31addafcf.tar.gz Qt-9cea45515ef283c9a870c6f515da50d31addafcf.tar.bz2 |
Merge branch '4.7' of git@scm.dev.nokia.troll.no:qt/oslo-staging-1 into 4.7
Diffstat (limited to 'qmake/generators/win32/msbuild_objectmodel.h')
-rw-r--r-- | qmake/generators/win32/msbuild_objectmodel.h | 708 |
1 files changed, 708 insertions, 0 deletions
diff --git a/qmake/generators/win32/msbuild_objectmodel.h b/qmake/generators/win32/msbuild_objectmodel.h new file mode 100644 index 0000000..567985d --- /dev/null +++ b/qmake/generators/win32/msbuild_objectmodel.h @@ -0,0 +1,708 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the qmake application of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MSBUILD_OBJECTMODEL_H +#define MSBUILD_OBJECTMODEL_H + +#include "project.h" +#include "xmloutput.h" +#include "msvc_objectmodel.h" +#include <qatomic.h> +#include <qlist.h> +#include <qstring.h> +#include <qstringlist.h> +#include <qmap.h> +#include <qdebug.h> + +QT_BEGIN_NAMESPACE + + +class VCXConfiguration; +class VCXProject; + +class VCXCLCompilerTool : public VCToolBase +{ +public: + // Functions + VCXCLCompilerTool(); + virtual ~VCXCLCompilerTool(){} + bool parseOption(const char* option); + + // Variables + QStringList AdditionalIncludeDirectories; + QStringList AdditionalOptions; + QStringList AdditionalUsingDirectories; + QString AlwaysAppend; + QString AssemblerListingLocation; + QString AssemblerOutput; + QString BasicRuntimeChecks; + triState BrowseInformation; + QString BrowseInformationFile; + triState BufferSecurityCheck; + QString CallingConvention; + QString CompileAs; + QString CompileAsManaged; + triState CreateHotpatchableImage; + QString DebugInformationFormat; + triState DisableLanguageExtensions; + QStringList DisableSpecificWarnings; + QString EnableEnhancedInstructionSet; + triState EnableFiberSafeOptimizations; + triState EnablePREfast; + QString ErrorReporting; + QString ExceptionHandling; + triState ExpandAttributedSource; + QString FavorSizeOrSpeed; + triState FloatingPointExceptions; + QString FloatingPointModel; + triState ForceConformanceInForLoopScope; + QStringList ForcedIncludeFiles; + QStringList ForcedUsingFiles; + triState FunctionLevelLinking; + triState GenerateXMLDocumentationFiles; + triState IgnoreStandardIncludePath; + QString InlineFunctionExpansion; + triState IntrinsicFunctions; + triState MinimalRebuild; + triState MultiProcessorCompilation; + QString ObjectFileName; + QStringList ObjectFiles; + triState OmitDefaultLibName; + triState OmitFramePointers; + triState OpenMPSupport; + QString Optimization; + QString PrecompiledHeader; + QString PrecompiledHeaderFile; + QString PrecompiledHeaderOutputFile; + triState PreprocessKeepComments; + QStringList PreprocessorDefinitions; + QString PreprocessOutputPath; + triState PreprocessSuppressLineNumbers; + triState PreprocessToFile; + QString ProgramDataBaseFileName; + QString ProcessorNumber; + QString RuntimeLibrary; + triState RuntimeTypeInfo; + triState ShowIncludes; + triState SmallerTypeCheck; + triState StringPooling; + QString StructMemberAlignment; + triState SuppressStartupBanner; + QString TreatSpecificWarningsAsErrors; + triState TreatWarningAsError; + triState TreatWChar_tAsBuiltInType; + triState UndefineAllPreprocessorDefinitions; + QStringList UndefinePreprocessorDefinitions; + triState UseFullPaths; + triState UseUnicodeForAssemblerListing; + QString WarningLevel; + triState WholeProgramOptimization; + QString XMLDocumentationFileName; + + VCXConfiguration* config; +}; + +class VCXLinkerTool : public VCToolBase +{ +public: + // Functions + VCXLinkerTool(); + virtual ~VCXLinkerTool(){} + bool parseOption(const char* option); + + // Variables + QStringList AdditionalDependencies; + QStringList AdditionalLibraryDirectories; + QStringList AdditionalManifestDependencies; + QStringList AdditionalOptions; + QStringList AddModuleNamesToAssembly; + triState AllowIsolation; + triState AssemblyDebug; + QStringList AssemblyLinkResource; + QString BaseAddress; + QString CLRImageType; + QString CLRSupportLastError; + QString CLRThreadAttribute; + QString CLRUnmanagedCodeCheck; + QString CreateHotPatchableImage; + triState DataExecutionPrevention; + QStringList DelayLoadDLLs; + triState DelaySign; + QString Driver; + QStringList EmbedManagedResourceFile; + triState EnableCOMDATFolding; + triState EnableUAC; + QString EntryPointSymbol; + triState FixedBaseAddress; + QString ForceFileOutput; + QStringList ForceSymbolReferences; + QString FunctionOrder; + triState GenerateDebugInformation; + triState GenerateManifest; + triState GenerateMapFile; + qlonglong HeapCommitSize; + qlonglong HeapReserveSize; + triState IgnoreAllDefaultLibraries; + triState IgnoreEmbeddedIDL; + triState IgnoreImportLibrary; + QStringList IgnoreSpecificDefaultLibraries; + triState ImageHasSafeExceptionHandlers; + QString ImportLibrary; + QString KeyContainer; + QString KeyFile; + triState LargeAddressAware; + triState LinkDLL; + QString LinkErrorReporting; + triState LinkIncremental; + triState LinkStatus; + QString LinkTimeCodeGeneration; + QString ManifestFile; + triState MapExports; + QString MapFileName; + QString MergedIDLBaseFileName; + QString MergeSections; + QString MidlCommandFile; + QString ModuleDefinitionFile; + QString MSDOSStubFileName; + triState NoEntryPoint; + triState OptimizeReferences; + QString OutputFile; + triState PreventDllBinding; + QString Profile; + QString ProfileGuidedDatabase; + QString ProgramDatabaseFile; + triState RandomizedBaseAddress; + triState RegisterOutput; + qlonglong SectionAlignment; + triState SetChecksum; + QString ShowProgress; + QString SpecifySectionAttributes; + QString StackCommitSize; + QString StackReserveSize; + QString StripPrivateSymbols; + QString SubSystem; + triState SupportNobindOfDelayLoadedDLL; + triState SupportUnloadOfDelayLoadedDLL; + triState SuppressStartupBanner; + triState SwapRunFromCD; + triState SwapRunFromNet; + QString TargetMachine; + triState TerminalServerAware; + triState TreatLinkerWarningAsErrors; + triState TurnOffAssemblyGeneration; + QString TypeLibraryFile; + qlonglong TypeLibraryResourceID; + QString UACExecutionLevel; + triState UACUIAccess; + QString Version; + + + VCXConfiguration* config; +}; + +class VCXMIDLTool : public VCToolBase +{ +public: + // Functions + VCXMIDLTool(); + virtual ~VCXMIDLTool(){} + bool parseOption(const char* option); + + // Variables + QStringList AdditionalIncludeDirectories; + QStringList AdditionalOptions; + triState ApplicationConfigurationMode; + QString ClientStubFile; + QString CPreprocessOptions; + QString DefaultCharType; + QString DLLDataFileName; + QString EnableErrorChecks; + triState ErrorCheckAllocations; + triState ErrorCheckBounds; + triState ErrorCheckEnumRange; + triState ErrorCheckRefPointers; + triState ErrorCheckStubData; + QString GenerateClientFiles; + QString GenerateServerFiles; + triState GenerateStublessProxies; + triState GenerateTypeLibrary; + QString HeaderFileName; + triState IgnoreStandardIncludePath; + QString InterfaceIdentifierFileName; + qlonglong LocaleID; + triState MkTypLibCompatible; + QString OutputDirectory; + QStringList PreprocessorDefinitions; + QString ProxyFileName; + QString RedirectOutputAndErrors; + QString ServerStubFile; + QString StructMemberAlignment; + triState SuppressCompilerWarnings; + triState SuppressStartupBanner; + QString TargetEnvironment; + QString TypeLibFormat; + QString TypeLibraryName; + QStringList UndefinePreprocessorDefinitions; + triState ValidateAllParameters; + triState WarnAsError; + QString WarningLevel; + + VCXConfiguration* config; +}; + +class VCXLibrarianTool : public VCToolBase +{ +public: + // Functions + VCXLibrarianTool(); + virtual ~VCXLibrarianTool(){} + bool parseOption(const char*){ return false; }; + + // Variables + QStringList AdditionalDependencies; + QStringList AdditionalLibraryDirectories; + QStringList AdditionalOptions; + QString DisplayLibrary; + QString ErrorReporting; + QStringList ExportNamedFunctions; + QStringList ForceSymbolReferences; + triState IgnoreAllDefaultLibraries; + QStringList IgnoreSpecificDefaultLibraries; + triState LinkTimeCodeGeneration; + QString ModuleDefinitionFile; + QString Name; + QString OutputFile; + QStringList RemoveObjects; + QString SubSystem; + triState SuppressStartupBanner; + QString TargetMachine; + triState TreatLibWarningAsErrors; + triState Verbose; + +}; + +class VCXCustomBuildTool : public VCToolBase +{ +public: + // Functions + VCXCustomBuildTool(); + virtual ~VCXCustomBuildTool(){} + bool parseOption(const char*){ return false; }; + + // Variables + QStringList AdditionalDependencies; + QStringList CommandLine; + QString Description; + QStringList Outputs; + QString ToolName; + QString ToolPath; + QString ConfigName; +}; + +class VCXResourceCompilerTool : public VCToolBase +{ +public: + // Functions + VCXResourceCompilerTool(); + virtual ~VCXResourceCompilerTool(){} + bool parseOption(const char*){ return false; }; + + // Variables + QStringList AdditionalIncludeDirectories; + QString AdditionalOptions; + QString Culture; + triState IgnoreStandardIncludePath; + triState NullTerminateStrings; + QStringList PreprocessorDefinitions; + QString ResourceOutputFileName; + triState ShowProgress; + triState SuppressStartupBanner; + QString TrackerLogDirectory; + QString UndefinePreprocessorDefinitions; +}; + +class VCXDeploymentTool +{ +public: + // Functions + VCXDeploymentTool(); + virtual ~VCXDeploymentTool() {} + + // Variables + QString DeploymentTag; + QString RemoteDirectory; + QString AdditionalFiles; +}; + +class VCXEventTool : public VCToolBase +{ +protected: + // Functions + VCXEventTool() : UseInBuild(unset){}; + virtual ~VCXEventTool(){} + bool parseOption(const char*){ return false; }; + +public: + // Variables + QString CommandLine; + QString Description; + triState UseInBuild; + QString EventName; + QString ToolPath; +}; + +class VCXPostBuildEventTool : public VCXEventTool +{ +public: + VCXPostBuildEventTool(); + ~VCXPostBuildEventTool(){} +}; + +class VCXPreBuildEventTool : public VCXEventTool +{ +public: + VCXPreBuildEventTool(); + ~VCXPreBuildEventTool(){} +}; + +class VCXPreLinkEventTool : public VCXEventTool +{ +public: + VCXPreLinkEventTool(); + ~VCXPreLinkEventTool(){} +}; + +class VCXConfiguration +{ +public: + // Functions + VCXConfiguration(); + ~VCXConfiguration(){} + + // Variables + triState ATLMinimizesCRunTimeLibraryUsage; + triState BuildBrowserInformation; + QString CharacterSet; + QString ConfigurationType; + QString DeleteExtensionsOnClean; + QString ImportLibrary; + QString IntermediateDirectory; + QString Name; + QString ConfigurationName; + QString OutputDirectory; + QString PrimaryOutput; + QString ProgramDatabase; + triState RegisterOutput; + QString TargetName; + QString UseOfATL; + QString UseOfMfc; + triState WholeProgramOptimization; + + // XML sub-parts + VCXCLCompilerTool compiler; + VCXLibrarianTool librarian; + VCXLinkerTool linker; + VCXMIDLTool idl; + VCXResourceCompilerTool resource; + VCXCustomBuildTool custom; + VCXDeploymentTool deployment; // Not likely to be supported: http://msdn.microsoft.com/en-us/library/sa69he4t.aspx + VCXPostBuildEventTool postBuild; + VCXPreBuildEventTool preBuild; + VCXPreLinkEventTool preLink; +}; + +struct VCXFilterFile +{ + VCXFilterFile() + { excludeFromBuild = false; } + VCXFilterFile(const QString &filename, bool exclude = false ) + { file = filename; excludeFromBuild = exclude; } + VCXFilterFile(const QString &filename, const QString &additional, bool exclude = false ) + { file = filename; excludeFromBuild = exclude; additionalFile = additional; } + bool operator==(const VCXFilterFile &other){ + return file == other.file + && additionalFile == other.additionalFile + && excludeFromBuild == other.excludeFromBuild; + } + + bool excludeFromBuild; + QString file; + QString additionalFile; // For tools like MOC +}; + +class VcxprojGenerator; +class VCXFilter +{ +public: + // Functions + VCXFilter(); + ~VCXFilter(){}; + + void addFile(const QString& filename); + void addFile(const VCXFilterFile& fileInfo); + void addFiles(const QStringList& fileList); + bool addExtraCompiler(const VCXFilterFile &info); + void modifyPCHstage(QString str); + bool outputFileConfig(XmlOutput &xml, XmlOutput &xmlFilter, const QString &filename, const QString &filtername, bool fileAllreadyAdded); + + // Variables + QString Name; + QString Filter; + QString Guid; + triState ParseFiles; + VcxprojGenerator* Project; + VCXConfiguration* Config; + QList<VCXFilterFile> Files; + + customBuildCheck CustomBuild; + + bool useCustomBuildTool; + VCXCustomBuildTool CustomBuildTool; + + bool useCompilerTool; + VCXCLCompilerTool CompilerTool; +}; + +typedef QList<VCXFilter> VCXFilterList; +class VCXProjectSingleConfig +{ +public: + enum FilterTypes { + None, + Source, + Header, + Generated, + LexYacc, + Translation, + Resources, + Extras + }; + // Functions + VCXProjectSingleConfig(){}; + ~VCXProjectSingleConfig(){} + + // Variables + QString Name; + QString Version; + QString ProjectGUID; + QString Keyword; + QString SccProjectName; + QString SccLocalPath; + QString PlatformName; + + // XML sub-parts + VCXConfiguration Configuration; + VCXFilter RootFiles; + VCXFilter SourceFiles; + VCXFilter HeaderFiles; + VCXFilter GeneratedFiles; + VCXFilter LexYaccFiles; + VCXFilter TranslationFiles; + VCXFilter FormFiles; + VCXFilter ResourceFiles; + VCXFilterList ExtraCompilersFiles; + + bool flat_files; + + // Accessor for extracompilers + VCXFilter &filterForExtraCompiler(const QString &compilerName); +}; + + + +// Tree & Flat view of files -------------------------------------------------- +class VCXFilter; +class XNode +{ +public: + virtual ~XNode() { } + void addElement(const VCXFilterFile &file) { + addElement(file.file, file); + } + virtual void addElement(const QString &filepath, const VCXFilterFile &allInfo) = 0; + virtual void removeElements()= 0; + virtual void generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &tagName, VCXProject &tool, const QString &filter) = 0; + virtual bool hasElements() = 0; +}; + +class XTreeNode : public XNode +{ + typedef QMap<QString, XTreeNode*> ChildrenMap; + VCXFilterFile info; + ChildrenMap children; + +public: + virtual ~XTreeNode() { removeElements(); } + + int pathIndex(const QString &filepath) { + int Windex = filepath.indexOf("\\"); + int Uindex = filepath.indexOf("/"); + if (Windex != -1 && Uindex != -1) + return qMin(Windex, Uindex); + else if (Windex != -1) + return Windex; + return Uindex; + } + + void addElement(const QString &filepath, const VCXFilterFile &allInfo){ + QString newNodeName(filepath); + + int index = pathIndex(filepath); + if (index != -1) + newNodeName = filepath.left(index); + + XTreeNode *n = children.value(newNodeName); + if (!n) { + n = new XTreeNode; + n->info = allInfo; + children.insert(newNodeName, n); + } + if (index != -1) + n->addElement(filepath.mid(index+1), allInfo); + } + + void removeElements() { + ChildrenMap::ConstIterator it = children.constBegin(); + ChildrenMap::ConstIterator end = children.constEnd(); + for( ; it != end; it++) { + (*it)->removeElements(); + delete it.value(); + } + children.clear(); + } + + void generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &tagName, VCXProject &tool, const QString &filter); + bool hasElements() { + return children.size() != 0; + } +}; + +class XFlatNode : public XNode +{ + typedef QMap<QString, VCXFilterFile> ChildrenMapFlat; + ChildrenMapFlat children; + +public: + virtual ~XFlatNode() { removeElements(); } + + int pathIndex(const QString &filepath) { + int Windex = filepath.lastIndexOf("\\"); + int Uindex = filepath.lastIndexOf("/"); + if (Windex != -1 && Uindex != -1) + return qMax(Windex, Uindex); + else if (Windex != -1) + return Windex; + return Uindex; + } + + void addElement(const QString &filepath, const VCXFilterFile &allInfo){ + QString newKey(filepath); + + int index = pathIndex(filepath); + if (index != -1) + newKey = filepath.mid(index+1); + + // Key designed to sort files with same + // name in different paths correctly + children.insert(newKey + "\0" + allInfo.file, allInfo); + } + + void removeElements() { + children.clear(); + } + + void generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &tagName, VCXProject &proj, const QString &filter); + bool hasElements() { + return children.size() != 0; + } +}; +// ---------------------------------------------------------------------------- + +class VCXProject +{ +public: + // Variables + QString Name; + QString Version; + QString ProjectGUID; + QString Keyword; + QString SccProjectName; + QString SccLocalPath; + QString PlatformName; + + // Single projects + QList<VCXProjectSingleConfig> SingleProjects; + + // List of all extracompilers + QStringList ExtraCompilers; + + // Functions + void outputFilter(XmlOutput &xml, + XmlOutput &xmlFilter, + const QString &filtername); + + void outputFileConfigs(XmlOutput &xml, + XmlOutput &xmlFilter, + const VCXFilterFile &info, + const QString &filtername); + + void addFilters(XmlOutput &xmlFilter, + const QString &filtername); + +}; + + +XmlOutput &operator<<(XmlOutput &, const VCXCLCompilerTool &); +XmlOutput &operator<<(XmlOutput &, const VCXLinkerTool &); +XmlOutput &operator<<(XmlOutput &, const VCXMIDLTool &); +XmlOutput &operator<<(XmlOutput &, const VCXCustomBuildTool &); +XmlOutput &operator<<(XmlOutput &, const VCXLibrarianTool &); +XmlOutput &operator<<(XmlOutput &, const VCXResourceCompilerTool &); +XmlOutput &operator<<(XmlOutput &, const VCXEventTool &); +XmlOutput &operator<<(XmlOutput &, const VCXDeploymentTool &); +XmlOutput &operator<<(XmlOutput &, const VCXConfiguration &); +XmlOutput &operator<<(XmlOutput &, const VCXProjectSingleConfig &); +XmlOutput &operator<<(XmlOutput &, VCXProject &); + + +QT_END_NAMESPACE + +#endif // MSVC_OBJECTMODEL_H |