/**************************************************************************** ** ** Definition of VCProject class. ** ** Copyright (C) 2002-2008 Trolltech ASA. All rights reserved. ** ** This file is part of qmake. ** ** This file may be used under the terms of the GNU General ** Public License versions 2.0 or 3.0 as published by the Free ** Software Foundation and appearing in the files LICENSE.GPL2 ** and LICENSE.GPL3 included in the packaging of this file. ** Alternatively you may (at your option) use any later version ** of the GNU General Public License if such license has been ** publicly approved by Trolltech ASA (or its successors, if any) ** and the KDE Free TQt Foundation. ** ** Please review the following information to ensure GNU General ** Public Licensing requirements will be met: ** http://trolltech.com/products/qt/licenses/licensing/opensource/. ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://trolltech.com/products/qt/licenses/licensing/licensingoverview ** or contact the sales department at sales@trolltech.com. ** ** This file may be used under the terms of the Q Public License as ** defined by Trolltech ASA and appearing in the file LICENSE.TQPL ** included in the packaging of this file. Licensees holding valid TQt ** Commercial licenses may use this file in accordance with the TQt ** Commercial License Agreement provided with the Software. ** ** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, ** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted ** herein. ** **********************************************************************/ #ifndef __MSVC_OBJECTMODEL_H__ #define __MSVC_OBJECTMODEL_H__ #include "project.h" #include #include enum DotNET { NETUnknown = 0, NET2002 = 0x70, NET2003 = 0x71, NET2005 = 0x80 }; /* This Object model is of course VERY simplyfied, and does not actually follow the original MSVC object model. However, it fulfilles the basic needs for qmake */ /* If a triState value is 'unset' then the corresponding property is not in the output, forcing the tool to utilize default values. False/True values will be in the output... */ enum customBuildCheck { none, moc, uic, lexyacc, resource }; enum triState { unset = -1, _False = 0, _True = 1 }; enum addressAwarenessType { addrAwareDefault, addrAwareNoLarge, addrAwareLarge }; enum asmListingOption { asmListingNone, asmListingAssemblyOnly, asmListingAsmMachineSrc, asmListingAsmMachine, asmListingAsmSrc }; enum basicRuntimeCheckOption { runtimeBasicCheckNone, runtimeCheckStackFrame, runtimeCheckUninitVariables, runtimeBasicCheckAll }; enum browseInfoOption { brInfoNone, brAllInfo, brNoLocalSymbols }; enum callingConventionOption { callConventionDefault = -1, callConventionCDecl, callConventionFastCall, callConventionStdCall }; enum charSet { charSetNotSet, charSetUnicode, charSetMBCS }; enum compileAsManagedOptions { managedDefault = -1, managedAssembly = 2 }; enum CompileAsOptions{ compileAsDefault, compileAsC, compileAsCPlusPlus }; enum ConfigurationTypes { typeUnknown = 0, typeApplication = 1, typeDynamicLibrary = 2, typeStaticLibrary = 4, typeGeneric = 10 }; enum debugOption { debugUnknown = -1, debugDisabled, debugOldStyleInfo, debugLineInfoOnly, debugEnabled, debugEditAndContinue }; enum eAppProtectionOption { eAppProtectUnchanged, eAppProtectLow, eAppProtectMedium, eAppProtectHigh }; enum enumResourceLangID { rcUseDefault = 0, rcAfrikaans = 1078, rcAlbanian = 1052, rcArabicAlgeria = 5121, rcArabicBahrain = 15361, rcArabicEgypt = 3073, rcArabicIraq = 2049, rcArabicJordan = 11265, rcArabicKuwait = 13313, rcArabicLebanon = 12289, rcArabicLibya = 4097, rcArabicMorocco = 6145, rcArabicOman = 8193, rcArabicQatar = 16385, rcArabicSaudi = 1025, rcArabicSyria = 10241, rcArabicTunisia = 7169, rcArabicUnitedArabEmirates = 14337, rcArabicYemen = 9217, rcBasque = 1069, rcBulgarian = 1026, rcByelorussian = 1059, rcCatalan = 1027, rcChineseHongKong = 3076, rcChinesePRC = 2052, rcChineseSingapore = 4100, rcChineseTaiwan = 1028, rcCroatian = 1050, rcCzech = 1029, rcDanish = 1030, rcDutchBelgium = 2067, rcDutchStandard = 1043, rcEnglishAustralia = 3081, rcEnglishBritain = 2057, rcEnglishCanada = 4105, RcEnglishCaribbean = 9225, rcEnglishIreland = 6153, rcEnglishJamaica = 8201, rcEnglishNewZealand = 5129, rcEnglishSouthAfrica = 7177, rcEnglishUS = 1033, rcEstonian = 1061, rcFarsi = 1065, rcFinnish = 1035, rcFrenchBelgium = 2060, rcFrenchCanada = 3084, rcFrenchLuxembourg = 5132, rcFrenchStandard = 1036, rcFrenchSwitzerland = 4108, rcGermanAustria = 3079, rcGermanLichtenstein = 5127, rcGermanLuxembourg = 4103, rcGermanStandard = 1031, rcGermanSwitzerland = 2055, rcGreek = 1032, rcHebrew = 1037, rcHungarian = 1038, rcIcelandic = 1039, rcIndonesian = 1057, rcItalianStandard = 1040, rcItalianSwitzerland = 2064, rcJapanese = 1041, rcKorean = 1042, rcKoreanJohab = 2066, rcLatvian = 1062, rcLithuanian = 1063, rcNorwegianBokmal = 1044, rcNorwegianNynorsk = 2068, rcPolish = 1045, rcPortugueseBrazilian = 1046, rcPortugueseStandard = 2070, rcRomanian = 1048, rcRussian = 1049, rcSerbian = 2074, rcSlovak = 1051, rcSpanishArgentina = 11274, rcSpanishBolivia = 16394, rcSpanishChile = 13322, rcSpanishColombia = 9226, rcSpanishCostaRica = 5130, rcSpanishDominicanRepublic = 7178, rcSpanishEcuador = 12298, rcSpanishGuatemala = 4106, rcSpanishMexico = 2058, rcSpanishModern = 3082, rcSpanishPanama = 6154, rcSpanishParaguay = 15370, rcSpanishPeru = 10250, rcSpanishTraditional = 1034, rcSpanishUruguay = 14346, rcSpanishVenezuela = 8202, rcSwedish = 1053, rcThai = 1054, rcTurkish = 1055, rcUkrainian = 1058, rcUrdu = 1056 }; enum enumSccEvent { eProjectInScc, ePreDirtyNotification }; enum favorSizeOrSpeedOption { favorNone, favorSpeed, favorSize }; enum genProxyLanguage { genProxyNative, genProxyManaged }; enum inlineExpansionOption { expandDisable, expandOnlyInline, expandAnySuitable, expandDefault // Not useful number, but stops the output }; enum linkIncrementalType { linkIncrementalDefault, linkIncrementalNo, linkIncrementalYes }; enum linkProgressOption { linkProgressNotSet, linkProgressAll, linkProgressLibs }; enum machineTypeOption { machineNotSet, machineX86 }; enum midlCharOption { midlCharUnsigned, midlCharSigned, midlCharAscii7 }; enum midlErrorCheckOption { midlEnableCustom, midlDisableAll, midlEnableAll }; enum midlStructMemberAlignOption { midlAlignNotSet, midlAlignSingleByte, midlAlignTwoBytes, midlAlignFourBytes, midlAlignEightBytes, midlAlignSixteenBytes }; enum midlTargetEnvironment { midlTargetNotSet, midlTargetWin32, midlTargetWin64 }; enum midlWarningLevelOption { midlWarningLevel_0, midlWarningLevel_1, midlWarningLevel_2, midlWarningLevel_3, midlWarningLevel_4 }; enum optFoldingType { optFoldingDefault, optNoFolding, optFolding }; enum optimizeOption { optimizeDisabled, optimizeMinSpace, optimizeMaxSpeed, optimizeFull, optimizeCustom, optimizeDefault // Not useful number, but stops the output }; enum optRefType { optReferencesDefault, optNoReferences, optReferences }; enum optWin98Type { optWin98Default, optWin98No, optWin98Yes }; enum pchOption { pchNone, pchCreateUsingSpecific, pchGenerateAuto, pchUseUsingSpecific }; enum preprocessOption { preprocessUnknown = -1, preprocessNo, preprocessYes, preprocessNoLineNumbers }; enum ProcessorOptimizeOption { procOptimizeBlended, procOptimizePentium, procOptimizePentiumProAndAbove }; enum RemoteDebuggerType { DbgLocal, DbgRemote, DbgRemoteTCPIP }; enum runtimeLibraryOption { rtUnknown = -1, rtMultiThreaded, rtMultiThreadedDebug, rtMultiThreadedDLL, rtMultiThreadedDebugDLL, rtSingleThreaded, rtSingleThreadedDebug }; enum structMemberAlignOption { alignNotSet, alignSingleByte, alignTwoBytes, alignFourBytes, alignEightBytes, alignSixteenBytes }; enum subSystemOption { subSystemNotSet, subSystemConsole, subSystemWindows }; enum termSvrAwarenessType { termSvrAwareDefault, termSvrAwareNo, termSvrAwareYes }; enum toolSetType { toolSetUtility, toolSetMakefile, toolSetLinker, toolSetLibrarian, toolSetAll }; enum TypeOfDebugger { DbgNativeOnly, DbgManagedOnly, DbgMixed, DbgAuto }; enum useOfATL { useATLNotSet, useATLStatic, useATLDynamic }; enum useOfMfc { useMfcStdWin, useMfcStatic, useMfcDynamic }; enum warningLevelOption { warningLevelUnknown = -1, warningLevel_0, warningLevel_1, warningLevel_2, warningLevel_3, warningLevel_4 }; class VCToolBase { protected: // Functions VCToolBase(){}; virtual ~VCToolBase(){} virtual bool parseOption( const char* option ) = 0; public: void parseOptions( TQStringList& options ) { for ( TQStringList::ConstIterator it=options.begin(); (it!=options.end()); it++ ) parseOption( (*it).latin1() ); } }; class VCConfiguration; class VCProject; class VCCLCompilerTool : public VCToolBase { public: // Functions VCCLCompilerTool(); virtual ~VCCLCompilerTool(){} bool parseOption( const char* option ); // Variables TQStringList AdditionalIncludeDirectories; TQStringList AdditionalOptions; TQStringList AdditionalUsingDirectories; TQString AssemblerListingLocation; asmListingOption AssemblerOutput; basicRuntimeCheckOption BasicRuntimeChecks; browseInfoOption BrowseInformation; TQString BrowseInformationFile; triState BufferSecurityCheck; callingConventionOption CallingConvention; CompileAsOptions CompileAs; compileAsManagedOptions CompileAsManaged; triState CompileOnly; debugOption DebugInformationFormat; triState DefaultCharIsUnsigned; triState Detect64BitPortabilityProblems; triState DisableLanguageExtensions; TQStringList DisableSpecificWarnings; triState EnableFiberSafeOptimizations; triState EnableFunctionLevelLinking; triState EnableIntrinsicFunctions; triState ExceptionHandling; triState ExpandAttributedSource; favorSizeOrSpeedOption FavorSizeOrSpeed; triState ForceConformanceInForLoopScope; TQStringList ForcedIncludeFiles; TQStringList ForcedUsingFiles; preprocessOption GeneratePreprocessedFile; triState GlobalOptimizations; triState IgnoreStandardIncludePath; triState ImproveFloatingPointConsistency; inlineExpansionOption InlineFunctionExpansion; triState KeepComments; triState MinimalRebuild; TQString ObjectFile; triState OmitFramePointers; triState OpenMP; optimizeOption Optimization; ProcessorOptimizeOption OptimizeForProcessor; triState OptimizeForWindowsApplication; TQString OutputFile; TQString PrecompiledHeaderFile; TQString PrecompiledHeaderThrough; TQStringList PreprocessorDefinitions; TQString ProgramDataBaseFileName; runtimeLibraryOption RuntimeLibrary; triState RuntimeTypeInfo; triState ShowIncludes; triState SmallerTypeCheck; triState StringPooling; structMemberAlignOption StructMemberAlignment; triState SuppressStartupBanner; triState TreatWChar_tAsBuiltInType; triState TurnOffAssemblyGeneration; triState UndefineAllPreprocessorDefinitions; TQStringList UndefinePreprocessorDefinitions; pchOption UsePrecompiledHeader; triState WarnAsError; warningLevelOption WarningLevel; triState WholeProgramOptimization; VCConfiguration* config; }; class VCLinkerTool : public VCToolBase { public: // Functions VCLinkerTool(); virtual ~VCLinkerTool(){} bool parseOption( const char* option ); // Variables TQStringList AdditionalDependencies; TQStringList AdditionalLibraryDirectories; TQStringList AdditionalOptions; TQStringList AddModuleNamesToAssembly; TQString BaseAddress; TQStringList DelayLoadDLLs; optFoldingType EnableCOMDATFolding; TQString EntryPointSymbol; TQStringList ForceSymbolReferences; TQString FunctionOrder; triState GenerateDebugInformation; triState GenerateMapFile; long HeapCommitSize; long HeapReserveSize; triState IgnoreAllDefaultLibraries; TQStringList IgnoreDefaultLibraryNames; triState IgnoreEmbeddedIDL; triState IgnoreImportLibrary; TQString ImportLibrary; addressAwarenessType LargeAddressAware; triState LinkDLL; linkIncrementalType LinkIncremental; triState LinkTimeCodeGeneration; TQString LinkToManagedResourceFile; triState MapExports; TQString MapFileName; triState MapLines; TQString MergedIDLBaseFileName; TQString MergeSections; // Should be list? TQString MidlCommandFile; TQString ModuleDefinitionFile; // Should be list? optWin98Type OptimizeForWindows98; optRefType OptimizeReferences; TQString OutputFile; TQString ProgramDatabaseFile; triState RegisterOutput; triState ResourceOnlyDLL; triState SetChecksum; linkProgressOption ShowProgress; long StackCommitSize; long StackReserveSize; TQString StripPrivateSymbols; // Should be list? subSystemOption SubSystem; triState SupportUnloadOfDelayLoadedDLL; triState SuppressStartupBanner; triState SwapRunFromCD; triState SwapRunFromNet; machineTypeOption TargetMachine; termSvrAwarenessType TerminalServerAware; triState TurnOffAssemblyGeneration; TQString TypeLibraryFile; long TypeLibraryResourceID; TQString Version; VCConfiguration* config; }; class VCMIDLTool : public VCToolBase { public: // Functions VCMIDLTool(); virtual ~VCMIDLTool(){} bool parseOption( const char* option ); // Variables TQStringList AdditionalIncludeDirectories; TQStringList AdditionalOptions; TQStringList CPreprocessOptions; midlCharOption DefaultCharType; TQString DLLDataFileName; // Should be list? midlErrorCheckOption EnableErrorChecks; triState ErrorCheckAllocations; triState ErrorCheckBounds; triState ErrorCheckEnumRange; triState ErrorCheckRefPointers; triState ErrorCheckStubData; TQStringList FullIncludePath; triState GenerateStublessProxies; triState GenerateTypeLibrary; TQString HeaderFileName; triState IgnoreStandardIncludePath; TQString InterfaceIdentifierFileName; triState MkTypLibCompatible; TQString OutputDirectory; TQStringList PreprocessorDefinitions; TQString ProxyFileName; TQString RedirectOutputAndErrors; midlStructMemberAlignOption StructMemberAlignment; triState SuppressStartupBanner; midlTargetEnvironment TargetEnvironment; TQString TypeLibraryName; TQStringList UndefinePreprocessorDefinitions; triState ValidateParameters; triState WarnAsError; midlWarningLevelOption WarningLevel; VCConfiguration* config; }; class VCLibrarianTool : public VCToolBase { public: // Functions VCLibrarianTool(); virtual ~VCLibrarianTool(){} bool parseOption( const char* ){ return FALSE; }; // Variables TQStringList AdditionalDependencies; TQStringList AdditionalLibraryDirectories; TQStringList AdditionalOptions; TQStringList ExportNamedFunctions; TQStringList ForceSymbolReferences; triState IgnoreAllDefaultLibraries; TQStringList IgnoreDefaultLibraryNames; TQString ModuleDefinitionFile; TQString OutputFile; triState SuppressStartupBanner; }; class VCCustomBuildTool : public VCToolBase { public: // Functions VCCustomBuildTool(); virtual ~VCCustomBuildTool(){} bool parseOption( const char* ){ return FALSE; }; // Variables TQStringList AdditionalDependencies; TQStringList CommandLine; TQString Description; TQStringList Outputs; TQString ToolName; TQString ToolPath; }; class VCResourceCompilerTool : public VCToolBase { public: // Functions VCResourceCompilerTool(); virtual ~VCResourceCompilerTool(){} bool parseOption( const char* ){ return FALSE; }; // Variables TQStringList AdditionalIncludeDirectories; TQStringList AdditionalOptions; enumResourceLangID Culture; TQStringList FullIncludePath; triState IgnoreStandardIncludePath; TQStringList PreprocessorDefinitions; TQString ResourceOutputFileName; linkProgressOption ShowProgress; TQString ToolPath; }; class VCEventTool : public VCToolBase { protected: // Functions VCEventTool() : ExcludedFromBuild( unset ){}; virtual ~VCEventTool(){} bool parseOption( const char* ){ return FALSE; }; public: // Variables TQString CommandLine; TQString Description; triState ExcludedFromBuild; TQString ToolName; TQString ToolPath; }; class VCPostBuildEventTool : public VCEventTool { public: VCPostBuildEventTool(); ~VCPostBuildEventTool(){} }; class VCPreBuildEventTool : public VCEventTool { public: VCPreBuildEventTool(); ~VCPreBuildEventTool(){} }; class VCPreLinkEventTool : public VCEventTool { public: VCPreLinkEventTool(); ~VCPreLinkEventTool(){} }; class VCConfiguration { public: // Functions VCConfiguration(); VCConfiguration(const VCConfiguration &other); ~VCConfiguration() {} // Variables triState ATLMinimizesCRunTimeLibraryUsage; triState BuildBrowserInformation; charSet CharacterSet; ConfigurationTypes ConfigurationType; TQString DeleteExtensionsOnClean; TQString ImportLibrary; TQString IntermediateDirectory; TQString Name; TQString OutputDirectory; TQString PrimaryOutput; TQString ProgramDatabase; triState RegisterOutput; useOfATL UseOfATL; useOfMfc UseOfMfc; triState WholeProgramOptimization; // XML sub-parts VCCLCompilerTool compiler; VCLinkerTool linker; VCLibrarianTool librarian; VCCustomBuildTool custom; VCMIDLTool idl; VCPostBuildEventTool postBuild; VCPreBuildEventTool preBuild; VCPreLinkEventTool preLink; VCResourceCompilerTool resource; }; class VcprojGenerator; class VCFilter { public: // Functions VCFilter(); ~VCFilter(){} void addMOCstage( TQTextStream &strm, TQString str ); void addUICstage( TQTextStream &strm, TQString str ); bool addIMGstage( TQTextStream &strm, TQString str ); void modifyPCHstage( TQTextStream &strm, TQString str ); bool addLexYaccStage( TQTextStream &strm, TQString str ); // Variables TQString Name; TQString Filter; triState ParseFiles; TQStringList Files; VcprojGenerator* Project; TQValueList *Config; customBuildCheck CustomBuild; bool useCustomBuildTool; VCCustomBuildTool CustomBuildTool; bool useCompilerTool; VCCLCompilerTool CompilerTool; bool flat_files; }; class VCProject { public: // Functions VCProject(); ~VCProject(){} // Variables TQString Name; TQString Version; TQString ProjectGUID; TQString SccProjectName; TQString SccLocalPath; TQString PlatformName; // XML sub-parts TQValueList Configuration; VCFilter SourceFiles; VCFilter HeaderFiles; VCFilter MOCFiles; VCFilter UICFiles; VCFilter FormFiles; VCFilter TranslationFiles; VCFilter LexYaccFiles; VCFilter ResourceFiles; }; TQTextStream &operator<<( TQTextStream &, const VCCLCompilerTool & ); TQTextStream &operator<<( TQTextStream &, const VCLinkerTool & ); TQTextStream &operator<<( TQTextStream &, const VCMIDLTool & ); TQTextStream &operator<<( TQTextStream &, const VCCustomBuildTool & ); TQTextStream &operator<<( TQTextStream &, const VCLibrarianTool & ); TQTextStream &operator<<( TQTextStream &, const VCResourceCompilerTool & ); TQTextStream &operator<<( TQTextStream &, const VCEventTool & ); TQTextStream &operator<<( TQTextStream &, const VCConfiguration & ); TQTextStream &operator<<( TQTextStream &, VCFilter & ); TQTextStream &operator<<( TQTextStream &, const VCProject & ); #endif //__MSVC_OBJECTMODEL_H__