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