source: trunk/qmake/generators/win32/msvc_objectmodel.h@ 896

Last change on this file since 896 was 846, checked in by Dmitry A. Kuminov, 14 years ago

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

File size: 32.3 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the qmake application of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#ifndef MSVC_OBJECTMODEL_H
43#define MSVC_OBJECTMODEL_H
44
45#include "project.h"
46#include "xmloutput.h"
47#include <qatomic.h>
48#include <qlist.h>
49#include <qstring.h>
50#include <qstringlist.h>
51#include <qmap.h>
52#include <qdebug.h>
53
54QT_BEGIN_NAMESPACE
55
56enum DotNET {
57 NETUnknown = 0,
58 NET2002 = 0x70,
59 NET2003 = 0x71,
60 NET2005 = 0x80,
61 NET2008 = 0x90,
62 NET2010 = 0xa0
63};
64
65/*
66 This Object model is of course VERY simplyfied,
67 and does not actually follow the original MSVC
68 object model. However, it fulfilles the basic
69 needs for qmake
70*/
71
72/*
73 If a triState value is 'unset' then the
74 corresponding property is not in the output,
75 forcing the tool to utilize default values.
76 False/True values will be in the output...
77*/
78enum customBuildCheck {
79 none,
80 mocSrc,
81 mocHdr,
82 lexyacc
83};
84enum triState {
85 unset = -1,
86 _False = 0,
87 _True = 1
88};
89enum addressAwarenessType {
90 addrAwareDefault,
91 addrAwareNoLarge,
92 addrAwareLarge
93};
94enum asmListingOption {
95 asmListingNone,
96 asmListingAssemblyOnly,
97 asmListingAsmMachineSrc,
98 asmListingAsmMachine,
99 asmListingAsmSrc
100};
101enum basicRuntimeCheckOption {
102 runtimeBasicCheckNone,
103 runtimeCheckStackFrame,
104 runtimeCheckUninitVariables,
105 runtimeBasicCheckAll
106};
107enum browseInfoOption {
108 brInfoNone,
109 brAllInfo,
110 brNoLocalSymbols
111};
112enum callingConventionOption {
113 callConventionDefault = -1,
114 callConventionCDecl,
115 callConventionFastCall,
116 callConventionStdCall
117};
118enum charSet {
119 charSetNotSet,
120 charSetUnicode,
121 charSetMBCS
122};
123enum compileAsManagedOptions {
124 managedDefault = -1, // Was: noAssembly
125 managedAssembly = 1,
126 managedAssemblyPure = 2, // Old was: Assembly
127 managedAssemblySafe = 3,
128 managedAssemblyOldSyntax = 4
129};
130enum CompileAsOptions{
131 compileAsDefault,
132 compileAsC,
133 compileAsCPlusPlus
134};
135enum ConfigurationTypes {
136 typeUnknown = 0,
137 typeApplication = 1,
138 typeDynamicLibrary = 2,
139 typeStaticLibrary = 4,
140 typeGeneric = 10
141};
142enum debugOption {
143 debugUnknown = -1,
144 debugDisabled,
145 debugOldStyleInfo,
146 debugLineInfoOnly,
147 debugEnabled,
148 debugEditAndContinue
149};
150enum eAppProtectionOption {
151 eAppProtectUnchanged,
152 eAppProtectLow,
153 eAppProtectMedium,
154 eAppProtectHigh
155};
156enum enhancedInstructionSetOption {
157 archNotSet = 0,
158 archSSE = 1,
159 archSSE2 = 2
160};
161enum exceptionHandling {
162 ehDefault = -1,
163 ehNone = 0,
164 ehNoSEH = 1,
165 ehSEH = 2
166};
167enum enumResourceLangID {
168 rcUseDefault = 0,
169 rcAfrikaans = 1078,
170 rcAlbanian = 1052,
171 rcArabicAlgeria = 5121,
172 rcArabicBahrain = 15361,
173 rcArabicEgypt = 3073,
174 rcArabicIraq = 2049,
175 rcArabicJordan = 11265,
176 rcArabicKuwait = 13313,
177 rcArabicLebanon = 12289,
178 rcArabicLibya = 4097,
179 rcArabicMorocco = 6145,
180 rcArabicOman = 8193,
181 rcArabicQatar = 16385,
182 rcArabicSaudi = 1025,
183 rcArabicSyria = 10241,
184 rcArabicTunisia = 7169,
185 rcArabicUnitedArabEmirates = 14337,
186 rcArabicYemen = 9217,
187 rcBasque = 1069,
188 rcBulgarian = 1026,
189 rcByelorussian = 1059,
190 rcCatalan = 1027,
191 rcChineseHongKong = 3076,
192 rcChinesePRC = 2052,
193 rcChineseSingapore = 4100,
194 rcChineseTaiwan = 1028,
195 rcCroatian = 1050,
196 rcCzech = 1029,
197 rcDanish = 1030,
198 rcDutchBelgium = 2067,
199 rcDutchStandard = 1043,
200 rcEnglishAustralia = 3081,
201 rcEnglishBritain = 2057,
202 rcEnglishCanada = 4105,
203 RcEnglishCaribbean = 9225,
204 rcEnglishIreland = 6153,
205 rcEnglishJamaica = 8201,
206 rcEnglishNewZealand = 5129,
207 rcEnglishSouthAfrica = 7177,
208 rcEnglishUS = 1033,
209 rcEstonian = 1061,
210 rcFarsi = 1065,
211 rcFinnish = 1035,
212 rcFrenchBelgium = 2060,
213 rcFrenchCanada = 3084,
214 rcFrenchLuxembourg = 5132,
215 rcFrenchStandard = 1036,
216 rcFrenchSwitzerland = 4108,
217 rcGermanAustria = 3079,
218 rcGermanLichtenstein = 5127,
219 rcGermanLuxembourg = 4103,
220 rcGermanStandard = 1031,
221 rcGermanSwitzerland = 2055,
222 rcGreek = 1032,
223 rcHebrew = 1037,
224 rcHungarian = 1038,
225 rcIcelandic = 1039,
226 rcIndonesian = 1057,
227 rcItalianStandard = 1040,
228 rcItalianSwitzerland = 2064,
229 rcJapanese = 1041,
230 rcKorean = 1042,
231 rcKoreanJohab = 2066,
232 rcLatvian = 1062,
233 rcLithuanian = 1063,
234 rcNorwegianBokmal = 1044,
235 rcNorwegianNynorsk = 2068,
236 rcPolish = 1045,
237 rcPortugueseBrazilian = 1046,
238 rcPortugueseStandard = 2070,
239 rcRomanian = 1048,
240 rcRussian = 1049,
241 rcSerbian = 2074,
242 rcSlovak = 1051,
243 rcSpanishArgentina = 11274,
244 rcSpanishBolivia = 16394,
245 rcSpanishChile = 13322,
246 rcSpanishColombia = 9226,
247 rcSpanishCostaRica = 5130,
248 rcSpanishDominicanRepublic = 7178,
249 rcSpanishEcuador = 12298,
250 rcSpanishGuatemala = 4106,
251 rcSpanishMexico = 2058,
252 rcSpanishModern = 3082,
253 rcSpanishPanama = 6154,
254 rcSpanishParaguay = 15370,
255 rcSpanishPeru = 10250,
256 rcSpanishTraditional = 1034,
257 rcSpanishUruguay = 14346,
258 rcSpanishVenezuela = 8202,
259 rcSwedish = 1053,
260 rcThai = 1054,
261 rcTurkish = 1055,
262 rcUkrainian = 1058,
263 rcUrdu = 1056
264};
265enum enumSccEvent {
266 eProjectInScc,
267 ePreDirtyNotification
268};
269enum favorSizeOrSpeedOption {
270 favorNone,
271 favorSpeed,
272 favorSize
273};
274enum floatingPointModel {
275 floatingPointNotSet = -1,
276 floatingPointPrecise,
277 floatingPointStrict,
278 floatingPointFast
279};
280enum genProxyLanguage {
281 genProxyNative,
282 genProxyManaged
283};
284enum inlineExpansionOption {
285 expandDisable,
286 expandOnlyInline,
287 expandAnySuitable,
288 expandDefault // Not useful number, but stops the output
289};
290enum linkIncrementalType {
291 linkIncrementalDefault,
292 linkIncrementalNo,
293 linkIncrementalYes
294};
295enum linkProgressOption {
296 linkProgressNotSet,
297 linkProgressAll,
298 linkProgressLibs
299};
300enum machineTypeOption {
301 machineNotSet,
302 machineX86,
303 machineX64 = 17
304};
305enum midlCharOption {
306 midlCharUnsigned,
307 midlCharSigned,
308 midlCharAscii7
309};
310enum midlErrorCheckOption {
311 midlEnableCustom,
312 midlDisableAll,
313 midlEnableAll
314};
315enum midlStructMemberAlignOption {
316 midlAlignNotSet,
317 midlAlignSingleByte,
318 midlAlignTwoBytes,
319 midlAlignFourBytes,
320 midlAlignEightBytes,
321 midlAlignSixteenBytes
322};
323enum midlTargetEnvironment {
324 midlTargetNotSet,
325 midlTargetWin32,
326 midlTargetWin64
327};
328enum midlWarningLevelOption {
329 midlWarningLevel_0,
330 midlWarningLevel_1,
331 midlWarningLevel_2,
332 midlWarningLevel_3,
333 midlWarningLevel_4
334};
335enum optFoldingType {
336 optFoldingDefault,
337 optNoFolding,
338 optFolding
339};
340enum optimizeOption {
341 optimizeDisabled,
342 optimizeMinSpace,
343 optimizeMaxSpeed,
344 optimizeFull,
345 optimizeCustom,
346 optimizeDefault // Not useful number, but stops the output
347};
348enum optRefType {
349 optReferencesDefault,
350 optNoReferences,
351 optReferences
352};
353enum optWin98Type {
354 optWin98Default,
355 optWin98No,
356 optWin98Yes
357};
358enum optLinkTimeCodeGenType {
359 optLTCGDefault,
360 optLTCGEnabled,
361 optLTCGInstrument,
362 optLTCGOptimize,
363 optLTCGUpdate
364};
365enum pchOption {
366 pchNone,
367 pchCreateUsingSpecific,
368 pchGenerateAuto,
369 pchUseUsingSpecific
370};
371enum preprocessOption {
372 preprocessUnknown = -1,
373 preprocessNo,
374 preprocessYes,
375 preprocessNoLineNumbers
376};
377enum ProcessorOptimizeOption {
378 procOptimizeBlended, //GB
379 procOptimizePentium, //G5
380 procOptimizePentiumProAndAbove, //G6
381 procOptimizePentium4AndAbove //G7
382};
383enum RegisterDeployOption {
384 registerNo = 0,
385 registerYes
386};
387enum RemoteDebuggerType {
388 DbgLocal,
389 DbgRemote,
390 DbgRemoteTCPIP
391};
392enum runtimeLibraryOption {
393 rtUnknown = -1,
394 rtMultiThreaded,
395 rtMultiThreadedDebug,
396 rtMultiThreadedDLL,
397 rtMultiThreadedDebugDLL,
398 rtSingleThreaded,
399 rtSingleThreadedDebug
400};
401enum structMemberAlignOption {
402 alignNotSet,
403 alignSingleByte,
404 alignTwoBytes,
405 alignFourBytes,
406 alignEightBytes,
407 alignSixteenBytes
408};
409enum subSystemOption {
410 subSystemNotSet,
411 subSystemConsole,
412 subSystemWindows
413};
414enum termSvrAwarenessType {
415 termSvrAwareDefault,
416 termSvrAwareNo,
417 termSvrAwareYes
418};
419enum toolSetType {
420 toolSetUtility,
421 toolSetMakefile,
422 toolSetLinker,
423 toolSetLibrarian,
424 toolSetAll
425};
426enum TypeOfDebugger {
427 DbgNativeOnly,
428 DbgManagedOnly,
429 DbgMixed,
430 DbgAuto
431};
432enum useOfATL {
433 useATLNotSet,
434 useATLStatic,
435 useATLDynamic
436};
437enum useOfMfc {
438 useMfcStdWin,
439 useMfcStatic,
440 useMfcDynamic
441};
442enum useOfArchitecture {
443 archUnknown = -1,
444 archArmv4,
445 archArmv5,
446 archArmv4T,
447 archArmv5T,
448 archMips1 = 0,
449 archMips2 = 1,
450 archMips3 = 2,
451 archMips4 = 3,
452 archMips5 = 4,
453 archMips16 = 5,
454 archMips32 = 6,
455 archMips64 = 7
456};
457enum warningLevelOption {
458 warningLevelUnknown = -1,
459 warningLevel_0,
460 warningLevel_1,
461 warningLevel_2,
462 warningLevel_3,
463 warningLevel_4
464};
465
466
467class VCToolBase {
468protected:
469 // Functions
470 VCToolBase(){};
471 virtual ~VCToolBase(){}
472 virtual bool parseOption(const char* option) = 0;
473public:
474 void parseOptions(QStringList& options) {
475 for (QStringList::ConstIterator it=options.begin(); (it!=options.end()); it++)
476 parseOption((*it).toLatin1());
477 }
478 static QStringList fixCommandLine(const QString &input);
479};
480
481class VCConfiguration;
482class VCProject;
483
484class VCCLCompilerTool : public VCToolBase
485{
486public:
487 // Functions
488 VCCLCompilerTool();
489 virtual ~VCCLCompilerTool(){}
490 bool parseOption(const char* option);
491
492 // Variables
493 QStringList AdditionalIncludeDirectories;
494 QStringList AdditionalOptions;
495 QStringList AdditionalUsingDirectories;
496 QString AssemblerListingLocation;
497 asmListingOption AssemblerOutput;
498 basicRuntimeCheckOption BasicRuntimeChecks;
499 browseInfoOption BrowseInformation;
500 QString BrowseInformationFile;
501 triState BufferSecurityCheck;
502 callingConventionOption CallingConvention;
503 CompileAsOptions CompileAs;
504 compileAsManagedOptions CompileAsManaged;
505 triState CompileOnly;
506 debugOption DebugInformationFormat;
507 triState DefaultCharIsUnsigned;
508 triState Detect64BitPortabilityProblems;
509 triState DisableLanguageExtensions;
510 QStringList DisableSpecificWarnings;
511 enhancedInstructionSetOption EnableEnhancedInstructionSet;
512 triState EnableFiberSafeOptimizations;
513 triState EnableFunctionLevelLinking;
514 triState EnableIntrinsicFunctions;
515 exceptionHandling ExceptionHandling;
516 triState ExpandAttributedSource;
517 favorSizeOrSpeedOption FavorSizeOrSpeed;
518 floatingPointModel FloatingPointModel;
519 triState FloatingPointExceptions;
520 triState ForceConformanceInForLoopScope;
521 QStringList ForcedIncludeFiles;
522 QStringList ForcedUsingFiles;
523 preprocessOption GeneratePreprocessedFile;
524 triState GlobalOptimizations;
525 triState IgnoreStandardIncludePath;
526 triState ImproveFloatingPointConsistency;
527 inlineExpansionOption InlineFunctionExpansion;
528 triState KeepComments;
529 triState MinimalRebuild;
530 QString ObjectFile;
531 triState OmitFramePointers;
532 triState OpenMP;
533 optimizeOption Optimization;
534 ProcessorOptimizeOption OptimizeForProcessor;
535 triState OptimizeForWindowsApplication;
536 QString OutputFile;
537 QString PrecompiledHeaderFile;
538 QString PrecompiledHeaderThrough;
539 QStringList PreprocessorDefinitions;
540 QString ProgramDataBaseFileName;
541 runtimeLibraryOption RuntimeLibrary;
542 triState RuntimeTypeInfo;
543 triState ShowIncludes;
544 triState SmallerTypeCheck;
545 triState StringPooling;
546 structMemberAlignOption StructMemberAlignment;
547 triState SuppressStartupBanner;
548 triState TreatWChar_tAsBuiltInType;
549 triState TurnOffAssemblyGeneration;
550 triState UndefineAllPreprocessorDefinitions;
551 QStringList UndefinePreprocessorDefinitions;
552 pchOption UsePrecompiledHeader;
553 triState WarnAsError;
554 warningLevelOption WarningLevel;
555 triState WholeProgramOptimization;
556 useOfArchitecture CompileForArchitecture;
557 triState InterworkCalls;
558 VCConfiguration* config;
559};
560
561class VCLinkerTool : public VCToolBase
562{
563public:
564 // Functions
565 VCLinkerTool();
566 virtual ~VCLinkerTool(){}
567 bool parseOption(const char* option);
568
569 // Variables
570 QStringList AdditionalDependencies;
571 QStringList AdditionalLibraryDirectories;
572 QStringList AdditionalOptions;
573 QStringList AddModuleNamesToAssembly;
574 QString BaseAddress;
575 QStringList DelayLoadDLLs;
576 optFoldingType EnableCOMDATFolding;
577 QString EntryPointSymbol;
578 QStringList ForceSymbolReferences;
579 QString FunctionOrder;
580 triState GenerateDebugInformation;
581 triState GenerateMapFile;
582 qlonglong HeapCommitSize;
583 qlonglong HeapReserveSize;
584 triState IgnoreAllDefaultLibraries;
585 QStringList IgnoreDefaultLibraryNames;
586 triState IgnoreEmbeddedIDL;
587 triState IgnoreImportLibrary;
588 QString ImportLibrary;
589 addressAwarenessType LargeAddressAware;
590 triState LinkDLL;
591 linkIncrementalType LinkIncremental;
592 optLinkTimeCodeGenType LinkTimeCodeGeneration;
593 QString LinkToManagedResourceFile;
594 triState MapExports;
595 QString MapFileName;
596 triState MapLines;
597 QString MergedIDLBaseFileName;
598 QString MergeSections; // Should be list?
599 QString MidlCommandFile;
600 QString ModuleDefinitionFile; // Should be list?
601 optWin98Type OptimizeForWindows98;
602 optRefType OptimizeReferences;
603 QString OutputFile;
604 QString ProgramDatabaseFile;
605 triState RegisterOutput;
606 triState ResourceOnlyDLL;
607 triState SetChecksum;
608 linkProgressOption ShowProgress;
609 qlonglong StackCommitSize;
610 qlonglong StackReserveSize;
611 QString StripPrivateSymbols; // Should be list?
612 subSystemOption SubSystem;
613 triState SupportUnloadOfDelayLoadedDLL;
614 triState SuppressStartupBanner;
615 triState SwapRunFromCD;
616 triState SwapRunFromNet;
617 machineTypeOption TargetMachine;
618 termSvrAwarenessType TerminalServerAware;
619 triState TurnOffAssemblyGeneration;
620 QString TypeLibraryFile;
621 qlonglong TypeLibraryResourceID;
622 QString Version;
623 VCConfiguration* config;
624};
625
626class VCMIDLTool : public VCToolBase
627{
628public:
629 // Functions
630 VCMIDLTool();
631 virtual ~VCMIDLTool(){}
632 bool parseOption(const char* option);
633
634 // Variables
635 QStringList AdditionalIncludeDirectories;
636 QStringList AdditionalOptions;
637 QStringList CPreprocessOptions;
638 midlCharOption DefaultCharType;
639 QString DLLDataFileName; // Should be list?
640 midlErrorCheckOption EnableErrorChecks;
641 triState ErrorCheckAllocations;
642 triState ErrorCheckBounds;
643 triState ErrorCheckEnumRange;
644 triState ErrorCheckRefPointers;
645 triState ErrorCheckStubData;
646 QStringList FullIncludePath;
647 triState GenerateStublessProxies;
648 triState GenerateTypeLibrary;
649 QString HeaderFileName;
650 triState IgnoreStandardIncludePath;
651 QString InterfaceIdentifierFileName;
652 triState MkTypLibCompatible;
653 QString OutputDirectory;
654 QStringList PreprocessorDefinitions;
655 QString ProxyFileName;
656 QString RedirectOutputAndErrors;
657 midlStructMemberAlignOption StructMemberAlignment;
658 triState SuppressStartupBanner;
659 midlTargetEnvironment TargetEnvironment;
660 QString TypeLibraryName;
661 QStringList UndefinePreprocessorDefinitions;
662 triState ValidateParameters;
663 triState WarnAsError;
664 midlWarningLevelOption WarningLevel;
665 VCConfiguration* config;
666};
667
668class VCLibrarianTool : public VCToolBase
669{
670public:
671 // Functions
672 VCLibrarianTool();
673 virtual ~VCLibrarianTool(){}
674 bool parseOption(const char*){ return false; };
675
676 // Variables
677 QStringList AdditionalDependencies;
678 QStringList AdditionalLibraryDirectories;
679 QStringList AdditionalOptions;
680 QStringList ExportNamedFunctions;
681 QStringList ForceSymbolReferences;
682 triState IgnoreAllDefaultLibraries;
683 QStringList IgnoreDefaultLibraryNames;
684 QString ModuleDefinitionFile;
685 QString OutputFile;
686 triState SuppressStartupBanner;
687};
688
689class VCCustomBuildTool : public VCToolBase
690{
691public:
692 // Functions
693 VCCustomBuildTool();
694 virtual ~VCCustomBuildTool(){}
695 bool parseOption(const char*){ return false; };
696
697 // Variables
698 QStringList AdditionalDependencies;
699 QStringList CommandLine;
700 QString Description;
701 QStringList Outputs;
702 QString ToolName;
703 QString ToolPath;
704};
705
706class VCResourceCompilerTool : public VCToolBase
707{
708public:
709 // Functions
710 VCResourceCompilerTool();
711 virtual ~VCResourceCompilerTool(){}
712 bool parseOption(const char*){ return false; };
713
714 // Variables
715 QStringList AdditionalIncludeDirectories;
716 QStringList AdditionalOptions;
717 enumResourceLangID Culture;
718 QStringList FullIncludePath;
719 triState IgnoreStandardIncludePath;
720 QStringList PreprocessorDefinitions;
721 QString ResourceOutputFileName;
722 linkProgressOption ShowProgress;
723 QString ToolPath;
724};
725
726class VCDeploymentTool
727{
728public:
729 // Functions
730 VCDeploymentTool();
731 virtual ~VCDeploymentTool() {}
732
733 // Variables
734 QString DeploymentTag;
735 QString RemoteDirectory;
736 RegisterDeployOption RegisterOutput;
737 QString AdditionalFiles;
738};
739
740class VCEventTool : public VCToolBase
741{
742protected:
743 // Functions
744 VCEventTool() : ExcludedFromBuild(unset){};
745 virtual ~VCEventTool(){}
746 bool parseOption(const char*){ return false; };
747
748public:
749 // Variables
750 QStringList CommandLine;
751 QString Description;
752 triState ExcludedFromBuild;
753 QString ToolName;
754 QString ToolPath;
755};
756
757class VCPostBuildEventTool : public VCEventTool
758{
759public:
760 VCPostBuildEventTool();
761 ~VCPostBuildEventTool(){}
762};
763
764class VCPreBuildEventTool : public VCEventTool
765{
766public:
767 VCPreBuildEventTool();
768 ~VCPreBuildEventTool(){}
769};
770
771class VCPreLinkEventTool : public VCEventTool
772{
773public:
774 VCPreLinkEventTool();
775 ~VCPreLinkEventTool(){}
776};
777
778class VCConfiguration
779{
780public:
781 // Functions
782 VCConfiguration();
783 ~VCConfiguration(){}
784
785 DotNET CompilerVersion;
786
787 // Variables
788 triState ATLMinimizesCRunTimeLibraryUsage;
789 triState BuildBrowserInformation;
790 charSet CharacterSet;
791 ConfigurationTypes ConfigurationType;
792 QString DeleteExtensionsOnClean;
793 QString ImportLibrary;
794 QString IntermediateDirectory;
795 QString Name;
796 QString OutputDirectory;
797 QString PrimaryOutput;
798 QString ProgramDatabase;
799 triState RegisterOutput;
800 useOfATL UseOfATL;
801 useOfMfc UseOfMfc;
802 triState WholeProgramOptimization;
803
804 // XML sub-parts
805 VCCLCompilerTool compiler;
806 VCLinkerTool linker;
807 VCLibrarianTool librarian;
808 VCCustomBuildTool custom;
809 VCMIDLTool idl;
810 VCPostBuildEventTool postBuild;
811 VCPreBuildEventTool preBuild;
812 VCDeploymentTool deployment;
813 VCPreLinkEventTool preLink;
814 VCResourceCompilerTool resource;
815};
816
817struct VCFilterFile
818{
819 VCFilterFile()
820 { excludeFromBuild = false; }
821 VCFilterFile(const QString &filename, bool exclude = false )
822 { file = filename; excludeFromBuild = exclude; }
823 VCFilterFile(const QString &filename, const QString &additional, bool exclude = false )
824 { file = filename; excludeFromBuild = exclude; additionalFile = additional; }
825 bool operator==(const VCFilterFile &other){
826 return file == other.file
827 && additionalFile == other.additionalFile
828 && excludeFromBuild == other.excludeFromBuild;
829 }
830
831 bool excludeFromBuild;
832 QString file;
833 QString additionalFile; // For tools like MOC
834};
835
836#ifndef QT_NO_DEBUG_OUTPUT
837inline QDebug operator<<(QDebug dbg, const VCFilterFile &p)
838{
839 dbg.nospace() << "VCFilterFile(file(" << p.file
840 << ") additionalFile(" << p.additionalFile
841 << ") excludeFromBuild(" << p.excludeFromBuild << "))" << endl;
842 return dbg.space();
843}
844#endif
845
846class VcprojGenerator;
847class VCFilter
848{
849public:
850 // Functions
851 VCFilter();
852 ~VCFilter(){};
853
854 void addFile(const QString& filename);
855 void addFile(const VCFilterFile& fileInfo);
856 void addFiles(const QStringList& fileList);
857 bool addExtraCompiler(const VCFilterFile &info);
858 void modifyPCHstage(QString str);
859 void outputFileConfig(XmlOutput &xml, const QString &filename);
860
861 // Variables
862 QString Name;
863 QString Filter;
864 QString Guid;
865 triState ParseFiles;
866 VcprojGenerator* Project;
867 VCConfiguration* Config;
868 QList<VCFilterFile> Files;
869
870 customBuildCheck CustomBuild;
871
872 bool useCustomBuildTool;
873 VCCustomBuildTool CustomBuildTool;
874
875 bool useCompilerTool;
876 VCCLCompilerTool CompilerTool;
877
878private:
879 friend XmlOutput &operator<<(XmlOutput &xml, VCFilter &tool);
880};
881
882typedef QList<VCFilter> VCFilterList;
883class VCProjectSingleConfig
884{
885public:
886 enum FilterTypes {
887 None,
888 Source,
889 Header,
890 Generated,
891 LexYacc,
892 Translation,
893 Resources,
894 Extras
895 };
896 // Functions
897 VCProjectSingleConfig(){};
898 ~VCProjectSingleConfig(){}
899
900 // Variables
901 QString Name;
902 QString Version;
903 QString ProjectGUID;
904 QString Keyword;
905 QString SccProjectName;
906 QString SccLocalPath;
907 QString PlatformName;
908
909 // XML sub-parts
910 VCConfiguration Configuration;
911 VCFilter RootFiles;
912 VCFilter SourceFiles;
913 VCFilter HeaderFiles;
914 VCFilter GeneratedFiles;
915 VCFilter LexYaccFiles;
916 VCFilter TranslationFiles;
917 VCFilter FormFiles;
918 VCFilter ResourceFiles;
919 VCFilterList ExtraCompilersFiles;
920
921 bool flat_files;
922
923 // Accessor for extracompilers
924 VCFilter &filterForExtraCompiler(const QString &compilerName);
925};
926
927
928
929// Tree & Flat view of files --------------------------------------------------
930class VCFilter;
931class Node
932{
933public:
934 virtual ~Node() { }
935 void addElement(const VCFilterFile &file) {
936 addElement(file.file, file);
937 }
938 virtual void addElement(const QString &filepath, const VCFilterFile &allInfo) = 0;
939 virtual void removeElements()= 0;
940 virtual void generateXML(XmlOutput &xml, const QString &tagName, VCProject &tool, const QString &filter) = 0;
941 virtual bool hasElements() = 0;
942};
943
944class TreeNode : public Node
945{
946 typedef QMap<QString, TreeNode*> ChildrenMap;
947 VCFilterFile info;
948 ChildrenMap children;
949
950public:
951 virtual ~TreeNode() { removeElements(); }
952
953 int pathIndex(const QString &filepath) {
954 int Windex = filepath.indexOf("\\");
955 int Uindex = filepath.indexOf("/");
956 if (Windex != -1 && Uindex != -1)
957 return qMin(Windex, Uindex);
958 else if (Windex != -1)
959 return Windex;
960 return Uindex;
961 }
962
963 void addElement(const QString &filepath, const VCFilterFile &allInfo){
964 QString newNodeName(filepath);
965
966 int index = pathIndex(filepath);
967 if (index != -1)
968 newNodeName = filepath.left(index);
969
970 TreeNode *n = children.value(newNodeName);
971 if (!n) {
972 n = new TreeNode;
973 n->info = allInfo;
974 children.insert(newNodeName, n);
975 }
976 if (index != -1)
977 n->addElement(filepath.mid(index+1), allInfo);
978 }
979
980 void removeElements() {
981 ChildrenMap::ConstIterator it = children.constBegin();
982 ChildrenMap::ConstIterator end = children.constEnd();
983 for( ; it != end; it++) {
984 (*it)->removeElements();
985 delete it.value();
986 }
987 children.clear();
988 }
989
990 void generateXML(XmlOutput &xml, const QString &tagName, VCProject &tool, const QString &filter);
991 bool hasElements() {
992 return children.size() != 0;
993 }
994};
995
996class FlatNode : public Node
997{
998 typedef QMap<QString, VCFilterFile> ChildrenMapFlat;
999 ChildrenMapFlat children;
1000
1001public:
1002 virtual ~FlatNode() { removeElements(); }
1003
1004 int pathIndex(const QString &filepath) {
1005 int Windex = filepath.lastIndexOf("\\");
1006 int Uindex = filepath.lastIndexOf("/");
1007 if (Windex != -1 && Uindex != -1)
1008 return qMax(Windex, Uindex);
1009 else if (Windex != -1)
1010 return Windex;
1011 return Uindex;
1012 }
1013
1014 void addElement(const QString &filepath, const VCFilterFile &allInfo){
1015 QString newKey(filepath);
1016
1017 int index = pathIndex(filepath);
1018 if (index != -1)
1019 newKey = filepath.mid(index+1);
1020
1021 // Key designed to sort files with same
1022 // name in different paths correctly
1023 children.insert(newKey + "\0" + allInfo.file, allInfo);
1024 }
1025
1026 void removeElements() {
1027 children.clear();
1028 }
1029
1030 void generateXML(XmlOutput &xml, const QString &tagName, VCProject &proj, const QString &filter);
1031 bool hasElements() {
1032 return children.size() != 0;
1033 }
1034};
1035// ----------------------------------------------------------------------------
1036
1037class VCProject
1038{
1039public:
1040 // Variables
1041 QString Name;
1042 QString Version;
1043 QString ProjectGUID;
1044 QString Keyword;
1045 QString SccProjectName;
1046 QString SccLocalPath;
1047 QString PlatformName;
1048
1049 // Single projects
1050 QList<VCProjectSingleConfig> SingleProjects;
1051
1052 // List of all extracompilers
1053 QStringList ExtraCompilers;
1054
1055 // Functions
1056 void outputFilter(XmlOutput &xml,
1057// VCProjectSingleConfig::FilterTypes type,
1058 const QString &filtername);
1059
1060 void outputFileConfigs(XmlOutput &xml,
1061// VCProjectSingleConfig::FilterTypes type,
1062 const VCFilterFile &info,
1063 const QString &filtername);
1064};
1065
1066XmlOutput &operator<<(XmlOutput &, const VCCLCompilerTool &);
1067XmlOutput &operator<<(XmlOutput &, const VCLinkerTool &);
1068XmlOutput &operator<<(XmlOutput &, const VCMIDLTool &);
1069XmlOutput &operator<<(XmlOutput &, const VCCustomBuildTool &);
1070XmlOutput &operator<<(XmlOutput &, const VCLibrarianTool &);
1071XmlOutput &operator<<(XmlOutput &, const VCResourceCompilerTool &);
1072XmlOutput &operator<<(XmlOutput &, const VCEventTool &);
1073XmlOutput &operator<<(XmlOutput &, const VCDeploymentTool &);
1074XmlOutput &operator<<(XmlOutput &, const VCConfiguration &);
1075XmlOutput &operator<<(XmlOutput &, VCFilter &);
1076XmlOutput &operator<<(XmlOutput &, const VCProjectSingleConfig &);
1077XmlOutput &operator<<(XmlOutput &, VCProject &);
1078
1079QT_END_NAMESPACE
1080
1081#endif // MSVC_OBJECTMODEL_H
Note: See TracBrowser for help on using the repository browser.