diff options
Diffstat (limited to 'src/WixToolset.Core/CompilerCore.cs')
-rw-r--r-- | src/WixToolset.Core/CompilerCore.cs | 150 |
1 files changed, 13 insertions, 137 deletions
diff --git a/src/WixToolset.Core/CompilerCore.cs b/src/WixToolset.Core/CompilerCore.cs index ea235a97..e87ad886 100644 --- a/src/WixToolset.Core/CompilerCore.cs +++ b/src/WixToolset.Core/CompilerCore.cs | |||
@@ -17,7 +17,6 @@ namespace WixToolset.Core | |||
17 | using WixToolset.Extensibility; | 17 | using WixToolset.Extensibility; |
18 | using WixToolset.Extensibility.Data; | 18 | using WixToolset.Extensibility.Data; |
19 | using WixToolset.Extensibility.Services; | 19 | using WixToolset.Extensibility.Services; |
20 | using Wix = WixToolset.Data.Serialize; | ||
21 | 20 | ||
22 | internal enum ValueListKind | 21 | internal enum ValueListKind |
23 | { | 22 | { |
@@ -50,9 +49,7 @@ namespace WixToolset.Core | |||
50 | private const string IllegalLongFilenameCharacters = @"[\\\?|><:/\*""]"; // illegal: \ ? | > < : / * " | 49 | private const string IllegalLongFilenameCharacters = @"[\\\?|><:/\*""]"; // illegal: \ ? | > < : / * " |
51 | private static readonly Regex IllegalLongFilename = new Regex(IllegalLongFilenameCharacters, RegexOptions.Compiled); | 50 | private static readonly Regex IllegalLongFilename = new Regex(IllegalLongFilenameCharacters, RegexOptions.Compiled); |
52 | 51 | ||
53 | public const int DefaultMaximumUncompressedMediaSize = 200; // Default value is 200 MB | 52 | //public const int DefaultMaximumUncompressedMediaSize = 200; // Default value is 200 MB |
54 | public const int MinValueOfMaxCabSizeForLargeFileSplitting = 20; // 20 MB | ||
55 | public const int MaxValueOfMaxCabSizeForLargeFileSplitting = 2 * 1024; // 2048 MB (i.e. 2 GB) | ||
56 | 53 | ||
57 | 54 | ||
58 | // Built-in variables (from burn\engine\variable.cpp, "vrgBuiltInVariables", around line 113) | 55 | // Built-in variables (from burn\engine\variable.cpp, "vrgBuiltInVariables", around line 113) |
@@ -354,43 +351,20 @@ namespace WixToolset.Core | |||
354 | } | 351 | } |
355 | 352 | ||
356 | /// <summary> | 353 | /// <summary> |
357 | /// Creates a row in the active section. | 354 | /// Creates a tuple in the active section. |
358 | /// </summary> | 355 | /// </summary> |
359 | /// <param name="sourceLineNumbers">Source and line number of current row.</param> | 356 | /// <param name="sourceLineNumbers">Source and line number of current row.</param> |
360 | /// <param name="tupleType">Name of table to create row in.</param> | 357 | /// <param name="tupleType">Type of tuple to create.</param> |
361 | /// <returns>New row.</returns> | 358 | /// <param name="identifier">Optional identifier.</param> |
362 | public IntermediateTuple CreateRow(SourceLineNumber sourceLineNumbers, TupleDefinitionType tupleType, Identifier identifier = null) | 359 | /// <returns>New tuple.</returns> |
363 | { | 360 | public IntermediateTuple CreateTuple(SourceLineNumber sourceLineNumbers, TupleDefinitionType tupleType, Identifier identifier = null) |
364 | return this.CreateRow(sourceLineNumbers, tupleType, this.ActiveSection, identifier); | ||
365 | } | ||
366 | |||
367 | /// <summary> | ||
368 | /// Creates a row in the active given <paramref name="section"/>. | ||
369 | /// </summary> | ||
370 | /// <param name="sourceLineNumbers">Source and line number of current row.</param> | ||
371 | /// <param name="tupleType">Name of table to create row in.</param> | ||
372 | /// <param name="section">The section to which the row is added. If null, the row is added to the active section.</param> | ||
373 | /// <returns>New row.</returns> | ||
374 | internal IntermediateTuple CreateRow(SourceLineNumber sourceLineNumbers, TupleDefinitionType tupleType, IntermediateSection section, Identifier identifier = null) | ||
375 | { | 361 | { |
376 | var tupleDefinition = TupleDefinitions.ByType(tupleType); | 362 | var tupleDefinition = TupleDefinitions.ByType(tupleType); |
377 | var row = tupleDefinition.CreateTuple(sourceLineNumbers, identifier); | 363 | var tuple = tupleDefinition.CreateTuple(sourceLineNumbers, identifier); |
378 | 364 | ||
379 | if (null != identifier) | 365 | this.ActiveSection.Tuples.Add(tuple); |
380 | { | ||
381 | if (row.Definition.FieldDefinitions[0].Type == IntermediateFieldType.Number) | ||
382 | { | ||
383 | row.Set(0, Convert.ToInt32(identifier.Id)); | ||
384 | } | ||
385 | else | ||
386 | { | ||
387 | row.Set(0, identifier.Id); | ||
388 | } | ||
389 | } | ||
390 | |||
391 | section.Tuples.Add(row); | ||
392 | 366 | ||
393 | return row; | 367 | return tuple; |
394 | } | 368 | } |
395 | 369 | ||
396 | /// <summary> | 370 | /// <summary> |
@@ -406,20 +380,6 @@ namespace WixToolset.Core | |||
406 | } | 380 | } |
407 | 381 | ||
408 | /// <summary> | 382 | /// <summary> |
409 | /// Creates a patch resource reference to the list of resoures to be filtered when producing a patch. This method should only be used when processing children of a patch family. | ||
410 | /// </summary> | ||
411 | /// <param name="sourceLineNumbers">Source and line number of current row.</param> | ||
412 | /// <param name="tableName">Name of table to create row in.</param> | ||
413 | /// <param name="primaryKeys">Array of keys that make up the primary key of the table.</param> | ||
414 | /// <returns>New row.</returns> | ||
415 | public void CreatePatchFamilyChildReference(SourceLineNumber sourceLineNumbers, string tableName, params string[] primaryKeys) | ||
416 | { | ||
417 | var patchReferenceRow = this.CreateRow(sourceLineNumbers, TupleDefinitionType.WixPatchRef); | ||
418 | patchReferenceRow.Set(0, tableName); | ||
419 | patchReferenceRow.Set(1, String.Join("/", primaryKeys)); | ||
420 | } | ||
421 | |||
422 | /// <summary> | ||
423 | /// Creates a Registry row in the active section. | 383 | /// Creates a Registry row in the active section. |
424 | /// </summary> | 384 | /// </summary> |
425 | /// <param name="sourceLineNumbers">Source and line number of the current row.</param> | 385 | /// <param name="sourceLineNumbers">Source and line number of the current row.</param> |
@@ -430,7 +390,7 @@ namespace WixToolset.Core | |||
430 | /// <param name="componentId">The component which will control installation/uninstallation of the registry entry.</param> | 390 | /// <param name="componentId">The component which will control installation/uninstallation of the registry entry.</param> |
431 | public Identifier CreateRegistryRow(SourceLineNumber sourceLineNumbers, RegistryRootType root, string key, string name, string value, string componentId) | 391 | public Identifier CreateRegistryRow(SourceLineNumber sourceLineNumbers, RegistryRootType root, string key, string name, string value, string componentId) |
432 | { | 392 | { |
433 | return this.parseHelper.CreateRegistryRow(this.ActiveSection, sourceLineNumbers, root, key, name, value, componentId, true); | 393 | return this.parseHelper.CreateRegistryTuple(this.ActiveSection, sourceLineNumbers, root, key, name, value, componentId, true); |
434 | } | 394 | } |
435 | 395 | ||
436 | /// <summary> | 396 | /// <summary> |
@@ -466,7 +426,7 @@ namespace WixToolset.Core | |||
466 | { | 426 | { |
467 | if (!this.EncounteredError) | 427 | if (!this.EncounteredError) |
468 | { | 428 | { |
469 | this.parseHelper.CreateWixGroupRow(this.ActiveSection, sourceLineNumbers, parentType, parentId, childType, childId); | 429 | this.parseHelper.CreateWixGroupTuple(this.ActiveSection, sourceLineNumbers, parentType, parentId, childType, childId); |
470 | } | 430 | } |
471 | } | 431 | } |
472 | 432 | ||
@@ -753,39 +713,6 @@ namespace WixToolset.Core | |||
753 | } | 713 | } |
754 | 714 | ||
755 | /// <summary> | 715 | /// <summary> |
756 | /// Gets a yes/no/always value and displays an error for an illegal value. | ||
757 | /// </summary> | ||
758 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> | ||
759 | /// <param name="attribute">The attribute containing the value to get.</param> | ||
760 | /// <returns>The attribute's YesNoAlwaysType value.</returns> | ||
761 | [SuppressMessage("Microsoft.Design", "CA1059:MembersShouldNotExposeCertainConcreteTypes")] | ||
762 | public YesNoAlwaysType GetAttributeYesNoAlwaysValue(SourceLineNumber sourceLineNumbers, XAttribute attribute) | ||
763 | { | ||
764 | string value = this.GetAttributeValue(sourceLineNumbers, attribute); | ||
765 | |||
766 | if (0 < value.Length) | ||
767 | { | ||
768 | switch (Wix.Enums.ParseYesNoAlwaysType(value)) | ||
769 | { | ||
770 | case Wix.YesNoAlwaysType.@always: | ||
771 | return YesNoAlwaysType.Always; | ||
772 | case Wix.YesNoAlwaysType.no: | ||
773 | return YesNoAlwaysType.No; | ||
774 | case Wix.YesNoAlwaysType.yes: | ||
775 | return YesNoAlwaysType.Yes; | ||
776 | case Wix.YesNoAlwaysType.NotSet: | ||
777 | // Previous code never returned 'NotSet'! | ||
778 | break; | ||
779 | default: | ||
780 | this.Write(ErrorMessages.IllegalYesNoAlwaysValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); | ||
781 | break; | ||
782 | } | ||
783 | } | ||
784 | |||
785 | return YesNoAlwaysType.IllegalValue; | ||
786 | } | ||
787 | |||
788 | /// <summary> | ||
789 | /// Gets a short filename value and displays an error for an illegal short filename value. | 716 | /// Gets a short filename value and displays an error for an illegal short filename value. |
790 | /// </summary> | 717 | /// </summary> |
791 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> | 718 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> |
@@ -855,57 +782,6 @@ namespace WixToolset.Core | |||
855 | } | 782 | } |
856 | 783 | ||
857 | /// <summary> | 784 | /// <summary> |
858 | /// Gets an InstallUninstallType value and displays an error for an illegal value. | ||
859 | /// </summary> | ||
860 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> | ||
861 | /// <param name="attribute">The attribute containing the value to get.</param> | ||
862 | /// <returns>The attribute's InstallUninstallType value.</returns> | ||
863 | [SuppressMessage("Microsoft.Design", "CA1059:MembersShouldNotExposeCertainConcreteTypes")] | ||
864 | public Wix.InstallUninstallType GetAttributeInstallUninstallValue(SourceLineNumber sourceLineNumbers, XAttribute attribute) | ||
865 | { | ||
866 | Wix.InstallUninstallType installUninstall = Wix.InstallUninstallType.NotSet; | ||
867 | string value = this.GetAttributeValue(sourceLineNumbers, attribute); | ||
868 | |||
869 | if (0 < value.Length) | ||
870 | { | ||
871 | installUninstall = Wix.Enums.ParseInstallUninstallType(value); | ||
872 | |||
873 | if (Wix.InstallUninstallType.IllegalValue == installUninstall) | ||
874 | { | ||
875 | // TODO: Find a way to expose the valid values programatically! | ||
876 | this.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value, | ||
877 | "install", "uninstall", "both")); | ||
878 | } | ||
879 | } | ||
880 | |||
881 | return installUninstall; | ||
882 | } | ||
883 | |||
884 | /// <summary> | ||
885 | /// Gets an ExitType value and displays an error for an illegal value. | ||
886 | /// </summary> | ||
887 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> | ||
888 | /// <param name="attribute">The attribute containing the value to get.</param> | ||
889 | /// <returns>The attribute's ExitType value.</returns> | ||
890 | [SuppressMessage("Microsoft.Design", "CA1059:MembersShouldNotExposeCertainConcreteTypes")] | ||
891 | public Wix.ExitType GetAttributeExitValue(SourceLineNumber sourceLineNumbers, XAttribute attribute) | ||
892 | { | ||
893 | string value = this.GetAttributeValue(sourceLineNumbers, attribute); | ||
894 | |||
895 | Wix.ExitType result = Wix.ExitType.NotSet; | ||
896 | if (!Enum.TryParse<Wix.ExitType>(value, out result)) | ||
897 | { | ||
898 | result = Wix.ExitType.IllegalValue; | ||
899 | |||
900 | // TODO: Find a way to expose the valid values programatically! | ||
901 | this.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value, | ||
902 | "success", "cancel", "error", "suspend")); | ||
903 | } | ||
904 | |||
905 | return result; | ||
906 | } | ||
907 | |||
908 | /// <summary> | ||
909 | /// Gets a Bundle variable value and displays an error for an illegal value. | 785 | /// Gets a Bundle variable value and displays an error for an illegal value. |
910 | /// </summary> | 786 | /// </summary> |
911 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> | 787 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> |
@@ -1062,7 +938,7 @@ namespace WixToolset.Core | |||
1062 | internal void VerifyRequiredVersion(SourceLineNumber sourceLineNumbers, string requiredVersion) | 938 | internal void VerifyRequiredVersion(SourceLineNumber sourceLineNumbers, string requiredVersion) |
1063 | { | 939 | { |
1064 | // an null or empty string means any version will work | 940 | // an null or empty string means any version will work |
1065 | if (!string.IsNullOrEmpty(requiredVersion)) | 941 | if (!String.IsNullOrEmpty(requiredVersion)) |
1066 | { | 942 | { |
1067 | Assembly caller = Assembly.GetCallingAssembly(); | 943 | Assembly caller = Assembly.GetCallingAssembly(); |
1068 | AssemblyName name = caller.GetName(); | 944 | AssemblyName name = caller.GetName(); |
@@ -1147,7 +1023,7 @@ namespace WixToolset.Core | |||
1147 | /// <returns>Identifier for the newly created row.</returns> | 1023 | /// <returns>Identifier for the newly created row.</returns> |
1148 | internal Identifier CreateDirectoryRow(SourceLineNumber sourceLineNumbers, Identifier id, string parentId, string name, string shortName = null, string sourceName = null, string shortSourceName = null) | 1024 | internal Identifier CreateDirectoryRow(SourceLineNumber sourceLineNumbers, Identifier id, string parentId, string name, string shortName = null, string sourceName = null, string shortSourceName = null) |
1149 | { | 1025 | { |
1150 | return this.parseHelper.CreateDirectoryRow(this.ActiveSection, sourceLineNumbers, id, parentId, name, this.activeSectionInlinedDirectoryIds, shortName, sourceName, shortSourceName); | 1026 | return this.parseHelper.CreateDirectoryTuple(this.ActiveSection, sourceLineNumbers, id, parentId, name, this.activeSectionInlinedDirectoryIds, shortName, sourceName, shortSourceName); |
1151 | } | 1027 | } |
1152 | 1028 | ||
1153 | /// <summary> | 1029 | /// <summary> |