This repository has been archived by the owner on Aug 11, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 9
/
Changelog.txt
1817 lines (1006 loc) · 185 KB
/
Changelog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
19-Dec-2019 Fixes #675. Implementations of Bam.Core.IOverrideModuleConfiguration in 'tests' namespaces are no longer considered when not in test mode.
17-Nov-2019 Fixes #669. Bam.Core.TokenizedString 'trimstart' function no longer replaces ALL occurrences of the string. Only those that start at the front of the string.
18-Sep-2019 Fixes #663. The command line option for whether the 'tests' namespace in the master package is queried for top-level modules was executed far too often (in the Module constructor!). This is now cached at Bam startup in Bam.Core.Graph.UseTestsNamespace (boolean). It is also exposed in the generated main.cs for debug projects.
15-Sep-2019 Fixes #660. C.ObjectFileBase no longer implements Bam.Core.IInputPath (the C.SourceFile it's associated with via C.IRequiresSourceModule does that).
C.CCompilableModuleCollection now requires a child module type that implements C.IRequiresSourceModule rather than Bam.Core.IInputPath. Some methods associated with making source modules and extending source have moved from C.CModuleCollection to C.CCompilableModuleCollection.
C.CModuleCollection no longer assumes the child module type implements Bam.Core.IInputPath. This makes it a better fit as a base class for both modules that do implement IInputPath (e.g. HeaderFile) and those that implement IRequiresSourceModule (e.g. ObjectFileBase).
C.ConsoleApplication.ExtendSource methods now operate on C.CCompilableModuleCollection modules.
Added new C.IInputPathFileCollection as a sub-class of C.CModuleCollection but specific to types implementing Bam.Core.IInputPath.
C.PreprocessedFile also no longer implements Bam.Core.IInputPath, for the same reason as C.ObjectFileBase.
This should not be a breaking change, unless specialist packages have modules deriving from any of the *Collection classes that have changed.
14-Sep-2019 Fixes #659. Removed temporary array allocation and CopyTo use, replaced with a local function as an iterator, in:
* C.ConsoleApplication.CompileAgainst
* C.ConsoleApplication.CompileAndLinkAgainst
* C.CxxDynamicLibrary.CompileAgainstPublicly
* C.DynamicLibrary.CompileAgainstPublicly
* C.StaticLibrary.CompileAgainst
14-Sep-2019 Bumping to version v2.0.1
09-Sep-2019 ======== Version 2.0.0 Release ========
06-Sep-2019 ======== Version 2.0.0 beta 3 Release ========
04-Sep-2019 Fixes #656. Generated .vcxprojs were missing filters for source files.
04-Sep-2019 Fixes #654. Cannot use macros in 'ClCompile Include="path"' style .vcxproj elements, as it's not guaranteed to work. See https://docs.microsoft.com/en-us/cpp/build/reference/vcxproj-file-structure?view=vs-2015.
04-Sep-2019 Fixes #655. Fixed regression that specifying a package version on the command line that did not match any package versions in the definition file was silently ignored. If there are no packages of that name in the definition file, this is only a warning, otherwise, it is an error.
01-Sep-2019 Fixes #650. Updated the following Nugets:
* Microsoft.Extensions.Configuration.EnvironmentVariables to 2.2.4
* SharpCompress to 0.24.0
* vswhere to 2.7.1
* Microsoft.NET.Test.Sdk to 16.2.0
* NUnit to 3.12.0
* NUnit3TestAdapter to 3.15.1
01-Sep-2019 Fixes #651. Updated continuous integration from Xcode 10.2 to 10.3 (Travis-CI)
31-Aug-2019 Fixes #652. Added --dry-run/-n option to Python test harness, to stop after the BAM step. This is only really useful for project generation modes, to validate master package assembly generation, and running the build. Native build mode will always compile the code.
31-Aug-2019 Fixes #612. BREAKING CHANGE. Removed public access modifier from classes in the standard packages folder. Since package scripts get accumulated into a single assembly at build time, the default access modifier (internal) suffices. This does mean that end-user packages should no longer use public access modifiers on Module derivations, and just leave the default.
29-Aug-2019 Fixes #589. Sealed classes that are not expected to be derived from.
29-Aug-2019 Fixes #641. BREAKING CHANGE. Replaced ReadOnlyCollections with generic IEnumerable where possible (avoids allocating a new object). The following public APIs have changed:
- Bam.Core.Graph.EncapsulatingModules
- Bam.Core.Module.Dependents
- Bam.Core.Module.Dependees
- Bam.Core.Module.Requirements
- Bam.Core.Module.Requirees
- Bam.Core.Module.Children
- C.CModule.FlattenHierarchicalFileList (protected)
- C.CModule.OrderLibrariesWithDecreasingDependencies (protected)
- C.CModuleContainer.Children
- C.IForwardedLibraries.ForwardedLibraries
- C.DynamicLibrary.Source
- XcodeBuilder.Project.GetTargetList function repurposed as TargetList property.
29-Aug-2019 Fixes #649. Reduced overhead of checking the Bam.Core.MacroList through the Dict property (no allocations now).
29-Aug-2019 Fixes #597. BREAKING CHANGE. Deprecated classes and functions that generate a *Container in favour of *Collection. This seems to be the more C# way.
Classes renamed:
* C.CCompilableModuleContainer -> C.CCompilableModuleCollection
* C.CModuleContainer -> C.CModuleCollection
Functions renamed:
* C.CModule.InternalCreateContainer -> C.CModule.InternalCreateCollection
* C.CModule.CreateHeaderContainer -> C.CModule.CreateHeaderCollection
* C.ConsoleApplication.CreateAssemblerSourceContainer -> C.ConsoleApplication.CreateAssemblerSourceCollection
* C.ConsoleApplication.CreateCSourceContainer -> C.ConsoleApplication.CreateCSourceCollection
* C.ConsoleApplication.CreateObjectiveCSourceContainer -> C.ConsoleApplication.CreateObjectiveCSourceCollection
* C.ConsoleApplication.CreateWinResourceContainer -> C.Configuration.CreateWinResourceCollection
* C.CxxConsoleApplication.CreateCxxSourceContainer -> C.CxxConsoleApplication.CreateCxxSourceCollection
* C.CxxConsoleApplication.CreateObjectiveCxxSourceContainer -> C.CxxConsoleApplication.CreateObjectiveCxxSourceCollection
* C.CxxDynamicLibrary.CreateCSourceContainer -> C.CxxDynamicLibrary.CreateCSourceCollection
* C.CxxDynamicLibrary.CreateCxxSourceContainer -> C.CxxDynamicLibrary.CreateCxxSourceCollection
* C.CxxGUIApplication.CreateCSourceContainer -> C.CxxGUIApplication.CreateCSourceCollection
* C.CxxGUIApplication.CreateCxxSourceContainer -> C.CxxGUIApplication.CreateCxxSourceCollection
* C.DynamicLibrary.CreateCSourceContainer -> C.DynamicLibrary.CreateCSourceCollection
* C.DynamicLibrary.CreateAssemblerSourceContainer -> C.DynamicLibrary.CreateAssemblerSourceCollection
* C.GUIApplication.CreateCSourceContainer -> C.GUIApplication.CreateCSourceCollection
* C.StaticLibrary.CreateAssemblerSourceContainer -> C.StaticLibrary.CreateAssemblerSourceCollection
* C.StaticLibrary.CreateCSourceContainer -> C.StaticLibrary.CreateCSourceCollection
* C.StaticLibrary.CreateCxxSourceContainer -> C.StaticLibrary.CreateCxxSourceCollection
* C.StaticLibrary.CreateObjectiveCSourceContainer -> C.StaticLibrary.CreateObjectiveCSourceCollection
* C.StaticLibrary.CreateObjectiveCxxSourceContainer -> C.StaticLibrary.CreateObjectiveCxxSourceContainer
28-Aug-2019 Fixes #378. Fixed regression in being able to generate Xcode projects on non-macOS platforms.
27-Aug-2019 Fixes #623. Publisher.InstallNameModule now implements a common ExecuteInternal override, rather than it being duplicated in each derived Module. Also, fixed the MakeFile implementation to actually call install_name_tool.
27-Aug-2019 Fixes #605. VisualStudio projects are associated by module type, while VS project configurations are associated to a module. Reinforced this by changing VSSolution.EnsureProjectExists to take the module type (and build environment, needed for additional data) instead of the module itself. Assigning the VSProject to a Module's MetaData property is now the responsibility of VSProject.GetConfiguration.
As an aside, different working directories per configuration (i.e. per module) can now be used.
25-Aug-2019 Fixes #611. VisualStudioProcessor attributes that were ambiguous have been renamed or removed.
25-Aug-2019 Fixes #608. Removed isPath optional argument to VSSettingsGroup.AddSetting overload for paths, as all uses were referring to paths (rather than just generic strings).
25-Aug-2019 Fixes #607. Changed the default value of the separator argument to VSSetting from null to the empty string, to avoid some logic in the code.
25-Aug-2019 Fixes #609. Renamed VSSolutionBuilder.VSSolutionFolder.appendNestedEntity to AppendNestedEntity for consistency.
25-Aug-2019 Fixes #606. Removed an unused VSProjectConfiguration argument from the following functions:
* VisualStudioBuilder.VSProject.AddHeader
* VisualStudioBuilder.VSProject.AddSource
* VisualStudioBuilder.VSProject.AddOtherFile
* VisualStudioBuilder.VSProject.AddResourceFile
* VisualStudioBuilder.VSProject.AddAssembyFile
* VisualStudioBuilder.VSProjectFilter.AddFile
25-Aug-2019 Fixes #604. VisualStudioBuilder.VSProject.GetUniqueSettingsGroup and VisualStudioBuilder.VSProjectConfiguration.GetSettingsGroup refactor. No longer accept optional arguments. 'include' argument renamed to 'path' to be less ambiguous, since it is a setting related to a path in the project file (e.g. settings specific to a source file). A null path means a setting shared across all files. The 'uniqueToProject' argument to GetSettingsGroup is removed, since the path being non-null implies a unique settings group.
25-Aug-2019 Fixes #598. Split C.WinResourceCollection into a separate source file.
25-Aug-2019 Fixes #596. Moved initialisers in C.ExternalSourceGenerator's default constructor into automatic property initialisers.
25-Aug-2019 Fixes #595. C.DefaultToolchain private fields are now readonly.
25-Aug-2019 Fixes #593. Made C.CModule's default constructor protected, and added documentation to explain why a Module constructor is needed in this case.
25-Aug-2019 Fixes #592. C.IToolchainDiscovery.discover renamed to Discover for consistency.
25-Aug-2019 Fixes #586. WindowsSDK.WinResourceCompilerBase.configure renamed to Configure for consistency.
25-Aug-2019 Fixes #583. XcodeBuilder.ConfigurationValue.Merge no longer accepts a key argument. This was only used for failure logging, which is now moved to the call point.
25-Aug-2019 Fixes #578. Clarified use of the second key-value pair for XcodeProjectProcessor.UniqueEnumAttribute.
24-Aug-2019 Fixes #646. Removed unnecessary use of Attribute at the end of some XYZAttribute markup.
24-Aug-2019 Fixes #576. XcodeProjectProcessor.XcodeConversion.Convert no longer has a required real_settings_type argument. Instead, there is an optional settingsTypeOverride. This is because the use case for a different Settings type is the exception rather than the rule.
24-Aug-2019 Fixes #584. BREAKING CHANGE. Removed the Bam.Core.Module argument from the extension method Defaults for each settings interface. If the Module is needed, then the Module property on the Settings itself can be queried.
23-Aug-2019 Fixes #648. Python test harness VSSolution runs now use msbuild at quiet verbosity instead of normal, to reduce build spam.
22-Aug-2019 Fixes #645. BREAKING CHANGE. Initialisation of Settings interface properties simplified. Settings classes only require a default constructor now. Removed InitializeAllInterfaces method. Added SetModuleAndDefaultPropertyValues and AssignModule methods to Base.Core.Settings.
Interfaces that can be delta'd (e.g. compiler interfaces used in project generator build modes) no longer require an Empty extension method. Instead, Defaults and Clone extension methods are responsible for initialising any reference properties before use.
20-Aug-2019 Fixes #585. BREAKING CHANGE. Virtual function Bam.Core.Settings.AssignFileLayout() has been removed. The property FileLayout has been renamed to CommandLayout, and the setter made private. Bam.Core.Settings constructor now requires an ELayout value. This enforces the invariant nature of the layout, and eliminates one (virtual) function call per Settings instance.
20-Aug-2019 Fixes #644. Added missing toolchain versions for Xcode 11 and VisualStudio 2019.
19-Aug-2019 Fixes #625. BREAKING CHANGE. Bam.Core.Module.InputModules renamed to InputModulePaths, and the KeyValuePair argument replaced with a (Bam.Core.Module module, string pathKey) tuple to simplify the API. Added Bam.Core.UnspecifiedInputModulePathException to be thrown when a suitable override for InputModulePaths has not been provided in a derivation of Module.
18-Aug-2019 Fixes #643. Added --keepgoing (default = False) command line option to the Python test harness. This changes the default behaviour to run through all tests and then report a summary. By default, it now aborts when the first error is encountered. This should allow continuous integration to report systemic errors much faster.
16-Aug-2019 Fixes #642. Additional exception messages regarding which Module failed to build are now included by default.
16-Aug-2019 Fixes #633. Removed the deprecated GccCommon.ConfigureUtilities.
15-Aug-2019 Fixes #619. BREAKING CHANGE. Removed Bam.Core.ITool.CreateDefaultSettings<T>(Module) with the getter property Bam.Core.ITool.SettingsType. This simplifies package code, and centralises the Settings object construction.
15-Aug-2019 Fixes #620. Bam.Core.PreBuiltTool has now sealed the EvaluateInternal and ExecuteInternal methods. Subclasses do not need to do anything special here.
15-Aug-2019 Fixes #622. Split PreExisting* classes into separate source files in Publisher.
15-Aug-2019 Fixes #629. Removed unused field from GccCommon.AssemblerBase.
15-Aug-2019 Fixes #627. Split Installer enums into different source files for consistency.
15-Aug-2019 Fixes #639. Added Bam.Core.GraphMacroNames, Bam.Core.ModuleMacroNames, C.ModuleMacroNames static classes with string constants for many of the keys used in the macro lookups.
14-Aug-2019 Fixes #587. BREAKING CHANGE. No longer need to pass a parent Module to Module.Init().
This change affects every Module class. The use of the parent Module is the exception rather than the rule, and there are alternative methods to get the information if it is needed.
Added Bam.Core.Graph.ModuleStack property in order to peek at the hierarchy of parent Modules. This can be done in Init() calls.
Removed Bam.Core.Module.GetEncapsulatingReferencedModule. Access to the encapsulating Module is now through the readonly Module.EncapsulatingModule property.
The encapsulating Module is now calculated after the Module preInitCallback but before Init().
The following Module macros are no longer available:
* parentmodulename
* encapsulatedparentmodulename
* encapsulatingmodulename
* encapsulatingbuilddir
They can be obtained via the actual Modules accessed by the new properties.
12-Aug-2019 Fixes #638. Debugging package project files no longer allows multiple package versions to appear in the internal package list.
12-Aug-2019 ======== Version 2.0.0 beta 2 Release ========
11-Aug-2019 Fixes #635. Moved MetaData indexers and Contains functions for VisualC and WindowsSDK into their respective Common packages.
11-Aug-2019 Fixes #632. Using Doxygen WARN_AS_ERROR to fail documentation builds if incorrect or missing.
11-Aug-2019 Fixes #579. Fixes #580. Fixes #581. Fixes #575. Fixes #582. Fixes #588. Fixes #600. Fixes #601. Fixes #602. Fixes #615. Fixes #616. Fixes #617. Fixes #618. Fixes #599. Fixes #630. Fixes #631. Fixes #634. Fixes #628. Added documentation to the default packages.
10-Aug-2019 Fixes #635. Moved public indexer and Contains function of per VisualC-version MetaData class into the base class in VisualCCommon MetaData. Moved MetaData implementation from WindowsSDK versions to WindowsSDKCommon.
10-Aug-2019 Fixes #636. VisualStudio 2019 vcvarsall.bat can cause a dialog to open to invoke powershell to send telemetry. This can cause non-interactive continuous integration to halt indefinitely, so set VSCMD_SKIP_SENDTELEMETRY while invoking vcvarsall.bat to avoid it.
08-Aug-2019 Fixes #613. Added command line option --includeallversions, which modifies the behaviour of -p/--createdebugproject, to include all package versions. This project will not compile to an assembly, due to duplicate symbols, but is source browseable.
15-Jul-2019 ======== Version 2.0.0 beta 1 Release ========
14-Jul-2019 Fixes #574. The default package repository no longer appears twice if running integration tests.
Added Bam.Core.IOWrapper.PathsAreEqual, which takes into account that Windows APIs may return paths with differing cases on the drive letters.
14-Jul-2019 Fixes #572. Cleaned up the output of --showdefinition, after it was changed in alpha 4.
13-Jul-2019 Fixes #534. Added --setdependentdefaultversion option to bam. Requires the --pkgname and --pkgversion options. This change the default version of the named package in the master package.
Updated tests to use the following default toolchains:
- Clang-Xcode10 (minimum version in Mojave)
- Gcc-7 (assuming default Ubuntu 18.04 LTS compiler; can be installed on CentOS7 with http://blog.stevedoria.net/20180214/how-to-install-gcc-7-on-centos-7)
- VisualC-15.0 (VisualStudio 2017 as a stable version, since 2019 has only recently been released)
12-Jul-2019 Fixes #573. Remove extra test harness logging statement, which made it look like Xcode schemes were built in duplication.
12-Jul-2019 Fixes #571. Added Clang-Xcode11 package. This currently corresponds to the Xcode11 beta 3 package, but will hopefully be compatible with RTM.
11-Jul-2019 Fixes #397. Added CocoaTest2 test package, that exercises putting resource files into a macOS application bundle, and the code then loads them using Cocoa APIs.
09-Jul-2019 Fixes #568. Test harness can now run the same test with multiple options.
This can be useful, if a test package can be applied to different versions of a specific package.
09-Jul-2019 Fixes #437. Fixes #496. Adding test to exercise the 'tests' namespace and Publisher's IncludeAllModulesInNamespace.
- Added new test NonPackageNamespaceTest1
- Extended test harness to be able to pass extra arguments to each package, in the case above, passing '--tests' in order to look into the 'tests' namespace for top-level Modules.
09-Jul-2019 Fixes #567. Added common boilerplate code as extension methods:
- SetVisualCWarningLevel
- SetClangWarningOptions
- SetGccWarningOptions
- SetMingwWarningOptions
- FindSharedObjectsNextToExecutable
- GccExportAllSymbols
- ClangExportAllSymbols
- MingwExportAllSymbols
To use, add 'using <Toolchain>Common.Helpers;' to the top of your BAM script.
06-Jul-2019 Fixes #521. Only specifying a major version in SetSemanticVersion is now supported. Particularly on Linux. A shared object symbolic link is no longer written in these circumstances. SetSemanticVersion must be called before base.Init for this to work correctly, or an exception will be thrown.
06-Jul-2019 Fixes #522. C.PreprocessedFile now performs evaluation similar to an object file, such as a newer source file, and if there are any header includes that are newer.
06-Jul-2019 Fixes #566. Added setting VisualCCommon.ICommonPreprocessorSettings.NoLogo (bool, defaults to true) to the VisualC preprocessor tool.
06-Jul-2019 Fixes #194. A TokenizedString with incorrect token formatting, e.g. $token), $(token, will throw TokenizedString.BadTokenFormatException. Added unit tests. Note that $token does not throw an exception, as this might be an intended string, e.g. $ORIGIN.
06-Jul-2019 Fixes #480. An empty TokenizedString, i.e. $(), will now throw TokenizedString.EmptyTokenException. Added unit test.
05-Jul-2019 Fixes #74. Reopened. _CONSOLE no longer appears in C++ console applications on non-Windows platforms. (It had been fixed for C applications previously.)
05-Jul-2019 Fixes #431. Using System.Environment.SpecialFolder.ProgramFiles instead of fetching environment variables.
05-Jul-2019 ======== Version 2.0.0 alpha 4 Release ========
04-Jul-2019 Fixes #563. BAM assembly compilation now uses 'dotnet build' rather than 'dotnet publish --runtime [portableRID]'.
04-Jul-2019 Fixes #564. BAM schema now uses 'xs:anyURI' for the type of the path attribute for package Source.
03-Jul-2019 Fixes #173. Packages that reside in the same folder are now discoverable without any PackageRepository element in the definition file.
03-Jul-2019 Fixes #350. Addressed various shortcomings of the package repository concept.
- Added Bam.Core.Graph.AddPackageRepository(<path>) and Bam.Core.Graph.PackageRepositories (enumerator of paths).
- Added Bam.Core.Graph.SkipPackageSourceDownloads property (defaults to false) to allow skipping package source downloads. Useful in some modes of operation.
- Added Bam.Core.PackageRepository class. This formalises the repository. Repositories can be structured (has a packages subdirectory and optional tests subdirectory), or just a flat list of packages. A structured repository always has its packages folder searched. The tests folder, if it exists, is only searched if the master package is in it.
- Added Bam.Core.PackageTreeNode. This is used internally to create a hierarchy of package dependencies, which massively simplifies determining package dependencies, and then filtering based on default versions or command line overrides of versions.
- Updated BAM Schema so that PackageRepositories now acccept a child element of type NamedRepo with attribute name. Named repositories are a list of directory names which represent package repositories. These are searched for on a new configuration option, 'Repository:SearchDirs'.
- Changed the meaning of XML schema 'Repo' element. Previously the 'dir' attribute could be relative, but was ambiguous where it was relative from. The dir attribute can now start with $(packagedir), as in TokenizedStrings, to be relative to the package directory. Absolute paths are also accepted. Named repositories are considered more elegant for structured repositories from external sources, while unnamed are for specifying search paths within a directory structure of a source tree.
- Bam.Core.PackageDefinition now has a Repo property and NamedPackageRepositories property.
21-Jun-2019 Fixes #562. NMake does not support order only dependencies, so they must be added as regular dependencies, or targets may be made in the incorrect order. If they are not to be used in rule shell commands, they need filtering out.
16-Jun-2019 Fixes #560. Added VisualC.MetaData.RuntimeLibrary property, used to initialise the compiler setting. This can be overridden with a Bam.Core.IPackageMetaDataConfigure subclass. Also a command line switch, --VisualC.runtime, is also provided, accepting either MD, MDd, MT, MTd, the usual designations for the runtime library.
14-Jun-2019 Fixes #559. Added Version read-only property of C.LinkerTool, C.LibrarianTool and C.AssemblerTool, identical to the C.CompilerTool property.
13-Jun-2019 Fixes #108. Reopened. If a package resides in /private/tmp on macOS, an Xcode project will be generated with paths with /private/tmp, but Xcode treats these as /tmp (a symlink to /private/tmp). This causes problems for excluded source files (paths don't match, by string comparison), and some operations in Xcode 10 such as shell script build phases that have output files, such as generated source files, again as paths not matching. Generated Xcode projects are now post-processed to replace /private/tmp with /tmp.
11-Jun-2019 Fixes #558. Xcode project generation now uses the correct file type for source files. Also, mixed language projects (e.g. C++ and ObjectiveC++) no longer need to specify the target compilation language per source file (since it's encoded in the file type).
09-Jun-2019 Fixes #557. VisualStudio compiler version determination doesn't need native 64-bit support; 32-bit will suffice, and is available for all versions of VS.
09-Jun-2019 Fixes #556. Link time code generation (LTCG) was introduced in VisualStudio 2015, so make sure it's not enabled for older VisualStudio versions.
09-Jun-2019 Fixes #555. Added Gcc-6 package, and included it in tests.
08-Jun-2019 Fixes #554. All versions of vcruntime140*.dll and msvcp140*.dll are now included in redists. There are _1 and _2 suffixed versions which offer additional standard library support features.
08-Jun-2019 Fixes #549. VisualStudio 2017 & 2019 CRT version numbers for redist are now generated from the VCToolsVersion environment variable, e.g. 14.16.27023 -> 141, 14.21.27702 -> 142.
08-Jun-2019 Fixes #553. Added Gcc-9 package, and included it in tests.
08-Jun-2019 Fixes #552. Added Gcc-8 package, and included it in tests.
08-Jun-2019 Fixes #551. msbuild, Make and xcodebuild now use the number of available cores to run in the test harness.
07-Jun-2019 Fixes #550. MakeFile generation was throwing an exception if an input module depenency didn't have correctly generated path keys for its own built files (that are dependents).
05-Jun-2019 Fixes #548. Test harness now has a -T (--excludetest) option for removing a test of the given package name from the test run. This option can be repeated many times.
Test harness internals have been given an overhaul, so that instances of tests are gathered up front, filtered easily, and then each run in turn. Reporting now gives more semantics in the log on each test instance.
03-Jun-2019 Fixes #546. Xcode projects with non-C modules were not adding target dependencies (order only dependencies).
02-Jun-2019 Fixes #544. Format update to the procedurally generated main.cs for debug projects for packages.
02-Jun-2019 Fixes #545. MakeFile variables that map to the same path don't need to create aliases, since any variable replacement in recipes will just use the original variable. This removes an exception that was thrown in these circumstances.
01-Jun-2019 Fixes #543. Xcode 10 projects forcible disable header maps, as they confuse matters in multi-configuration projects. This was already disabled pre-Xcode 10.
01-Jun-2019 Fixes #542. VisualStudio project generation now guards against null reference exceptions when comparing conditions for settings. Mergable VisualStudio settings are now possible, in order to support both system and user include paths in a project.
31-May-2019 Fixes #540. C.ProceduralHeaderFile and C.ProceduralHeaderFileFromToolOutput both have a new virtual Boolean property, UseSystemIncludeSearchPaths, defaulting to false. In Modules deriving from these classes, set this to true in order to override the default behaviour and add directories to system includes search paths.
31-May-2019 Fixes #539. C.SuppressWarningsDelegate now allows specification of a C.EBitDepth parameter to limit suppressions to 32- or 64-bit builds only.
29-May-2019 Fixes #538. Added option --dumpprojects to the Python test harness, to dump generated project files to the log for inspection.
29-May-2019 Fixes #537. Xcode 10 builds did not work when package sources were downloaded, due to the source files residing in a different location to the package directory.
24-May-2019 Fixes #536. Xcode runs of the Python test harness did not work when specifying relative paths to package repositories.
14-Apr-2019 Fixes #78. Added Link Time Code Generation support.
Added VisualCCommon.ICommonCompilerSettings.WholeProgramOptimization (bool, default=false), VisualCCommon.ICommonLinkerSettings.LinkTimeCodeGeneration (type ELinkTimeCodeGeneration, default=Off), and VisualCCommon.ICommonArchiverSettings.LinkTimeCodeGeneration (bool, default=false).
There is no automating enabling of LTCG through BAM configurations.
There is no PGO support yet.
14-Apr-2019 Fixes #343. Added command line option, --toplevelmodule=<name>, which can be used to specify a Module class that wasn't sealed as the top-level Module to build.
14-Apr-2019 Fixes #387. Builds containing multiple Bam.Core.ISitePolicy implementations will choose that policy from the master policy. If it does not exist, then the previous behaviour of throwing an exception is used. This allows individual packages to define their site policies, say, in the tests namespace for particular requirements, and still have dependents also with site policies.
14-Apr-2019 Fixes #453. Added Bam.Core.IValidateCommandLineArgumentValue, and used it to prohibit hyphens appearing in new package names (which would be confused internally with a versioned package).
14-Apr-2019 Fixes #533. The debug project entry point, main.cs, is no longer overwritten if it exists previously. This honours any edits made to it previously. Please remove the file from disk if a fresh version is needed.
14-Apr-2019 Fixes #472. Debug project files for packages now also inherit the command line arguments used to create them. This avoids any ambiguity between running from the command line or debugging in an IDE.
14-Apr-2019 Fixes #477. Added command line option, --mpd=<directory>, to set the master package directory. This overrides the current working directory as BAM's choice of where the master package resides.
13-Apr-2019 Fixes #532. Modules using the Bam.Core.ModulePackageDirectoryRedirect attribute, and inheriting from a Module in a Package that has downloadable source archives, now correctly forward the correct paths to package files from the extracted archives.
13-Apr-2019 Fixes #479. Zip module has been moved from Publisher to Installer package, to be in a consistent location with tar.
11-Apr-2019 Fixes #529. 7Zip, InnoSetup and NSIS, used from the Publisher and Installer packages, respectively, now install via NuGets, rather than assuming the user has installed them.
Bam.Core has two new utilities:
- NuGetInfo, a class wrapping a NuGet local package, to extract meta data from
- NuGetUtilities, a static utility class that offers common patterns for NuGet usage from BAM packages.
07-Apr-2019 ======== Version 2.0.0 alpha 3 Release ========
06-Apr-2019 Fixes #527. Added VisualStudio 2019 support.
- Added package VisualC-16 (note, no .0 suffix now, since it is intended to support all minor releases)
- AppVeyor CI updated to test against the latest VisualStudio 2019 support they provide
- Add new command line option, --VisualC.discoverprereleases, which allows vswhere to inspect prerelease editions too.
- Updated vswhere NuGet to version 2.6.7.
- Updated tests package definitions to include VisualC-16.
- Various fixes to scripts to support VisualStudio 2019.
03-Apr-2019 Fixes #526. Downloading and extracting package source archives now requires that a Module from the Package has been used in the build. This means that there may be packages with source archives that don't get downloaded on some platforms.
09-Mar-2019 Fixes #525. Resolving a package, when there is both an unversioned and (many) versioned candidates no longer fails with a null dereference. I believe this is a rare situation - usually all candidates for a package will be versioned when there is more than one.
09-Mar-2019 Fixes #524. Upgraded NuGet dependencies:
GitInfo from 2.0.15 to 2.0.20
Microsoft.NET.Test.Sdk from 15.8.0 to 16.0.1
NUnit from 3.10.1 to 3.11.0
NUnit3TestAdapter from 3.10.0 to 3.13.0
Microsoft.Extensions.Configuration.EnvironmentVariables from 2.1.1 to 2.2.0
Microsoft.Extensions.Configuration.Ini from 2.1.1 to 2.2.0
SharpCompress from 0.22 to 0.23
With the upgrade to the latest SharpCompress, the handrolled tar symlink support in BAM Core has been deleted. All tar extraction operations now go through SharpCompress.
08-Mar-2019 Fixes #523. Exceptions thrown during package archive download or extraction are now propagated to the calling application.
16-Jan-2019 Updated copyright notices to 2019.
31-Dec-2018 ======== Version 2.0.0 alpha 2 Release ========
29-Dec-2018 Fixes #519. BREAKING CHANGE. Split out preprocessor settings from compiler.
In order to better support standalone preprocessor invocations, the preprocessor has been split out from the compiler into a separate settings interface, C.ICommonPreprocessorSettings. Compilers still implement this, but a new tool C.PreprocessorTool also implements this on each toolchain.
This will break a great number of settings patches, that use the PreprocessorDefinition and IncludePath properties, since the interface will need to change.
Added a new test, PreprocessFile1, in order to exercise the preprocessor.
22-Dec-2018 Fixes #518. Added ClangCommon.ICommonLinkerSettings.ExportedSymbolList to provide a path to a list of symbols to export from a dynamic library.
29-Nov-2018 Added XcodeBuilder.FileReference.EFileType.GLSLShaderSource.
28-Nov-2018 Fixes #516. Added TokenizedString function @extension(path), that returns the extension of the file path, without a leading period.
26-Nov-2018 Fixes #491. Provided a more useful error message when no toolchain packages for the current platform were included in the build, and yet a tool was requested.
24-Nov-2018 Fixes #514. Adding quotes around any string value on the command line that contains an equals sign, and has the long form of the command switch ending with an equals sign. This fixes MakeFile tar transforms that contain 'flags='.
23-Nov-2018 Fixes #515. bam --showdefinition did not show source archive URLs.
22-Nov-2018 ======== Version 2.0.0 alpha 1 Release ========
16-Nov-2018 Fixes #502. WindowsSDK 10.0.17763 and above now have redists in a UCRT versioned folder.
To support this, a new TokenizedString function has been added: @exists(path,fallback). If path exists, use it, otherwise use fallback.
16-Nov-2018 Fixes #488. Fixed regression that prebuilt libraries with headers were no longer appearing in VisualStudio solutions.
16-Nov-2018 Fixes #493. Renamed package Gcc-5.4 to Gcc-5, as it can represent any of the minor versions.
16-Nov-2018 Fixes #494. Detecting a VisualC version that is not installed now gives a sensible exception message.
16-Nov-2018 Fixes #510. Adding 3rdPartyLicenses.md to the distributable, and also mentioned in the bam preamble.
15-Nov-2018 Fixes #512. Added C.Cxx.ELanguageStandard.Cxx17 and C.Cxx.ELanguageStandard.GnuCxx17. Added Cxx17Test1 test case.
15-Nov-2018 Fixes #511. Adding Cxx14Test1 test case.
15-Nov-2018 Fixes #507. Code cleanup using features of newer C# language specifications.
15-Nov-2018 Fixes #159. Added support for packages to specify where to download archives containing their source.
In package definition files, you may now specify one or more Source elements to download. Zip, tar and gzipped tar files are supported over http.
Upon downloading and extracting these, packages have their $(packagedir) token automatically redirected to the download location.
Package sources are downloaded to a central location. This defaults to a .bam.package.sources folder in your home directory, but may be overridden by specifying a
buildamation.ini in your home directory, containing
[Packages]
SourceDir=<path>
or by specifying an environment variable BAMPackages__SourceDir=<path>.
Extracted package source is MD5 hashed after initial extraction and saved beside the archive file. On subsequent build runs, the hash is not recalculated, since it can be expensive.
In order to do a hash comparison, pass --validatesources to the bam command line. This will be slow.
The Nuget SharpCompress is used to perform most of the archive decompression, except for tar files, since there is hand rolled code to cope with symbolic links.
04-Nov-2018 Fixes #506. Added TokenizedString function, @tounix(<path>), that converts Windows style directory separators to Unix.
04-Nov-2018 Fixes #505. Added PreambleComment virtual property to C.ProceduralHeaderFile, in order to control the comment added to the top of generated headers. Set to null to exclude it.
04-Nov-2018 Fixes #504. Added macros to Bam.Core.Graph of the form <name>.packagename, where <name> is a package name. This allows expanding to a named package's directory when outside of that package's modules.
28-Oct-2018 Added TokenizedString function, @isrelative(path,fallback), which uses path if path is a relative path, and fallback if path is absolute. Useful when dealing with relative paths that cross drives on Windows.
27-Oct-2018 Fixes #499. BREAKING CHANGE. Making comparisons against toolchain versions clearer.
C.CompilerTool no longer implements Bam.Core.ISemanticVersion, instead it offsets a property returning a C.ToolchainVersion. This class offers functionality of Match, AtLeast, AtMost, InRange as comparisons, and a customised ToString() override. Toolchains derive from C.ToolchainVersion to provide specific implementations.
C.SuppressWarningsDelegate now requires a range of C.ToolchainVersions as a closed range of [min,max] versions. Either one may be null, to specify an open range.
Replaced ClangCommon.CompilerMajorVersion with ToolchainVersion of type C.ToolchainVersion. Clang queries __clang_major__, __clang_minor__, and __clang_patchlevel__ to query the version. Added named constants in ClangCommon.ToolchainVersion referring to specific releases of Xcode.
Made GccCommon.CompilerMajorVersion and CompilerMinorVersion protected, added ToolchainVersion property made from __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__. Added named constants in GccCommon.ToolchainVersion referring to specific releases of GCC.
Removed VisualCCommon.major_version, CompilerMajorVersion and CompilerMinorVersion and replaced with ToolchainVersion property, made from _MSC_VER. Added named constants in VisualCCommon.ToolchainVersion referring to specific releases of the VisualStudio compiler.
Fixed tests that used ISemanticVersion.IsAtLeast to now use C.ToolchainVersion.
20-Oct-2018 Fixes #497. Added C.SuppressWarningsDelegate abstract class, and C.CCompilableModuleContainer.SuppressWarningsDelegate function, as an aid to delegating responsibility for warning suppressions away from the main build script. Build scripts are then more succinct for the details on the build, rather than bogging down with details of making it build cleanly. The intended use for this is for external code which cannot be fixed.
20-Oct-2018 Fixes #500. Added C.ICommonAssemblerSettingsOSX interface, containing MacOSXMinimumVersionSupported, in order to specify this in mixed assembler-compiled source binaries. There have been instances of errors when this is mismatching.
14-Oct-2018 Fixes #490. Switched Xcode 10 support in the Xcode build mode to use the new build system. https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes/build_system_release_notes_for_xcode_10
12-Oct-2018 Fixes #383. Changed all string comparisons to use Ordinal or OrdinalIgnoreCase. Initially this was thought of as a speed improvement, but it also resolves string comparisons from strings provided on the command line when a non-standard locale is in use.
10-Oct-2018 Fixes #492. Added Gcc 7 support. Tested in Ubuntu 18.04.01 LTS.
29-Sep-2018 Fixes #487. Xcode 9 and 10 now use objectVersion=50 in their pbxproject files.
29-Sep-2018 Fixes #489. Added Bam.Core.Settings.ModifyDefaults(), an empty virtual function, which is called after all settings interfaces defaults are called, but before the LocalPolicy. This allows, for example, specific compiler versions to override defaults since their own specifications have changed from previous versions.
29-Sep-2018 Fixes #486. Added initial support for Xcode 10 using the legacy build system. Use --Clang.version=Xcode10 to use. Reminders from the Apple release notes; building 32-bit applications and using libstdc++ are no longer support.
20-Sep-2018 Fixes #475. BREAKING CHANGE. Introducing an Attribute based mechanism for translating Settings interface properties into what the specified build mode requires. This significantly reduces the amount of boilerplate code required to add new tools with custom settings. As a good example, see any of the 'Common' toolchain packages for the Settings class for each tool defined.
Associated changes
- Bam.Core.PathKey has been removed, and constant strings are used in their place, so that they can be used as arguments to Attributes. Some of the existing keys have changed their names, in case literals had been used elsewhere.
- Bam.Core.Module.GetExecutionPolicy has been removed. All policy interfaces for tools have also been removed.
- Bam.Core.ICommandLineTool.SuccessfulExitCodes is now exposed, for tools that may return a number of 'successful' exit codes.
- Bam.Core.Module.RegisterGeneratedFile() may be called multiple times to replace the TokenizedString registered, unless a previous path has been parsed already, in which case an exception is thrown.
- Bam.Core.Module.InputModules property is now exposed, to iterate over all input modules.
- Bam.Core.Module.MakeSettings() is now the way to create a Settings class for a Module, but the default implementation may now be overridden.
- Bam.Core.Module.WorkingDirectory is now exposed, as a mechanism for different modules of the same type to be run from different directories.
- Bam.Core.Settings.Validate() may now be overridden to ensure a Settings instance is consistent and valid.
- Bam.Core.Settings.ELayout defines the different ways in which a command line translation of a module build can be written.
- Added C.CModule.OrderOnlyDependents to enumerate the non-build dependencies, recursively.
- Added C.ConsoleApplication.HeaderFiles, ObjectFiles, Libraries enumerators.
- Removed C.ConsoleApplication.WorkingDirectory (used in IDE project generation) since it was conflicting with the new Bam.Core.Module.WorkingDirectory property.
- It is possible to build an Xcode project on non-macOS operating systems, although YMMV, and requires --C.discoveralltoolchains and --C.toolchain=Clang command line options.
- C.ICommonCompilerSettingsOSX.MinimumVersionSupported has been replaced with MacOSXMinimumVersionSupported.
- C.ICommonLinkerSettingsOSX now has CurrentVersion and CompatibilityVersion properties.
- Removed C.ECompilerOutput enum. See the new C.ICommonCompilerSettings.PreprocessOnly property.
- Added C.HeaderLibrary.HeaderFiles enumerator.
- C.ISharedObjectSymbolicLinkSettings no longer has an OutputType property. But does have Force and SoftLink properties.
- C.SettingsBase.SharedSettings() is significantly simplified, and no need to emit Convert functions for the interfaces used.
- Toolchain 'common' packages now implement the majority of settings property interfaces now, and individually versioned toolchain packages inherit, and implement specific version interfaces. This reduces a lot of boilerplate code. Additionally, attributes on the settings properties now indicate the translations required, rather than separate convertion functions.
- Added tests:
- ZipTest1
- InstallNameToolIdTest1
- InstallNameToolChangeTest1
- ChrpathTest1
- MakeFile build mode defaults to GNU MakeFiles, but can now generate NMAKE makefiles using the --MakeFile.format=NMAKE command line argument.
- Python test harness can now generate and run NMAKE for the MakeFile build mode.
20-Sep-2018 Fixes #314. BREAKING CHANGE. BuildAMation is now built upon .NET Core 2.1 SDK. The following changes have occurred:
- Bam, Bam.Core and Bam.Core.Test now use new-style .csproj project files.
- VisualStudio 2017 is now required to build BAM on Windows. Latest VS for Mac and Monodevelop are required for MacOSX and Linux, respectively.
- Bam internally generates new-style .csproj project files for both package builds and debug projects.
- The latest minor version of the latest major version of the C# language is now used (at the time of writing, 7.3).
- BAM packages may now specify NuGet packages to import external functionality. These may be specified per-platform in the package definition file.
- Linux progress logging in Bam.Core.dll is disabled due to a performance bug (https://github.com/dotnet/corefx/issues/32174).
- Bam.Core.Win32RegistryUtilities no longer uses Microsoft.Win32.RegistryKey in its public API, since this functionality is now in a NuGet package.
- Bam.Core.OSUtilities.RunExecutable will now throw an exception (RunExecutableException) in failure, or return an instance of RunExecutableResults in success, in order to have full access to stdout, stderr and process exit codes.
- A custom NuGet package repository can longer be project local, so the NuGetPackages directory in the distribution no longer exists.
- Property Bam.Core.BamState.RunningMono has been removed.
- Property Bam.Core.BamState.NuGetDirectory has been removed.
- BAM_FEATURE_MODULE_CONFIGURATION has been incorporated into core functionality. No feature #define is needed now.
- Added Bam.Core.Hash static utility class to handle all persistent hashing, since GetHashCode() is definitely no longer deterministic across application runs in .NET Core.
- Bam.Core.RelativePathUtilities has been written to no longer use System.Uri.
- bam --installdir will now display the installation directory.
- bam --updatebamassemblyversions will update all package definition files read to the current BAM assembly version.
======== End of v1.2 releases ========
27-Jul-2018 ======== Version 1.2.0 Release ========
11-Jul-2018 Fixes #476. -bigobj is no longer unconditionally set in generated .vcxprojs.
30-Jun-2018 Fixes #474. Increase default minimum macOS deployment version from 10.6 to 10.7, to be more useful with modern C++ and using libc++.
28-Jun-2018 ======== Version 1.2.0 alpha 5 Release ========
23-Jun-2018 Fixes #471. Added VisualCCommon.ICommonCompilerSettings.IncreaseObjectFileSectionCount (bool) property (defaults to false) to enable the "big obj" compilation feature.
23-Jun-2018 Fixes #454. Added C.ExternalSourceGenerator, allowing specification of an external tool to run, with arguments, input files, and expected output files. Supported on Native, VSSolution, Xcode, and MakeFile build modes.
Added overload to C.CModuleContainer.AddFile(), accepting a Bam.Core.TokenizedString.
Added overload to VSSolutionBuilder.VSSettingsGroup.AddSetting, accepting an IEnumerable of Bam.Core.TokenizedString (as may be produced by a LINQ operation).
Added new test cases, ExternalSourceGeneratorTest1 and ExternalSourceGeneratorTest2, that exercises C.ExternalSourceGenerator by invoking Python.
23-Jun-2018 Fixes #470. Use of EXCLUDED_SOURCE_FILE_NAMES in generated Xcode projects was not distinct enough to cover a file with identical basename, but in different directories.
22-Jun-2018 Fixes #465. BREAKING CHANGES
- Removed Bam.Core.ExecuteReasoning.DeferredEvaluation enumeration and Bam.Core.ExecuteReasoning.DeferredUntilBuild() function entirely, and all associated code in packages and tests. This removes a lot of repetitive code.
- Bam.Core.Module.Evaluate has been renamed to EvaluateInternal, and made protected. This is a breaking change for almost all derived Module classes.
- Single threaded build mode: evaluation is now performed in lock-step with module execution in the main thread. (New behaviour)
- Multi threaded build mode: evaluation is performed in background tasks, alongside module execution also in background tasks (different schedulers). (Updated old behaviour; previously not all evaluation calls were in a task)
- Added Bam.Core.IModuleExecution.Executed readonly property to query the execution status of a module.
- Added Bam.Core.Module.EvaluateAsync and EvaluateImmediate functions, although these are only of use in the core assembly.
- There is no longer access to a System.Threading.Tasks.TaskFactory on the Bam.Core.Graph instance's MetaData in Native build mode. Previously, individual module Evaluate() functions could thread, whereas the threading now happens as part of the Core assembly. (You may want to review your custom Evaluate functions if you do threading already.)
- C.ObjectFile EvaluateInternal will now wait on the execution task of any un-executed Module dependency that isn't derived from C.SourceFile. This is to synchronise with source code generators.
- When -j=0 is selected on the command line (use maximum threads), it will now select System.Environment.ProcessorCount - 2, for System.Environment.ProcessorCount > 2, to allow resources for the threaded evaluation.
--viewgraph command line option now shows the original output (order in which modules will be built), but also now a module hierarchy.
18-Jun-2018 Fixes #460. Updated provided packages and tests to handle being executed from an installation path including a space.
Added Bam.Core.IOWrapper.EncloseSpaceContainingPathWithDoubleQuotes() and EscapeSpacesInPath(), to either add surrounding double quotes around a path, or escape each space with a backslash.
Your milage may vary on
- Makefiles - GNU Make does not handle spaces well at all
- tar on Linux (but not macOS)
- Mingw's resource compiler (windres) does not handle long path names with spaces, and you cannot generate short path names for files (say the output of the tool) that don't yet exist
16-Jun-2018 Fixes #186. Git tag, differences from tag, and branch are now included in 'bam --version' output.
15-Jun-2018 Fixes #461. Downgraded NuGet for NUnit to 3.6.1, following .NET Standard dependency errors when using newer versions.
14-Jun-2018 Fixes #459. BAM, since v1.2.0 alpha3, has relied upon a NuGet of vswhere to detect VisualStudio installations. This NuGet, however, was not shipped as part of the binary distribution. This has now been included.
13-Jun-2018 Fixes #458. Fixes internal script to build BAM for release on Windows.
13-Jun-2018 Fixes #456. Since BuildAMation has no installer, include a Windows PowerShell script (create_shortcut_to_env.ps1) that will generate a Windows shortcut to env.bat that persists the command prompt once run. The shortcut is called BuildAMation-Environment.lnk.
12-Jun-2018 ======== Version 1.2.0 alpha 4 Release ========
09-Jun-2018 Fixes #452. Adding filters to VisualStudio projects no longer throws a null dereference exception when the root of a drive is encountered, through repeated use of System.IO.Path.GetDirectoryName.
09-Jun-2018 Fixes #442. WindowsSDK configuration is now taken from the vcvarsall setup from the VisualC package. WindowsSDK packages are tied to specific VisualC versions (this is not new). By default, vcvarsall.bat will try to find the most recent version in the registry of that WindowsSDK. However, with VisualC 14.0 and 15.0 (defaulting to WindowsSDK-10.0), you can now override this by specifying WindowsSDK-8.1 in the package definition file, or BAM command line.
If you don't want to use the latest WindowsSDK-10, and have older versions installed, you can override the behaviour of vcvarsall.bat by specifying --WindowsSDK10Version.override=10.0.xyz.w on the BAM command line.
Note that using VisualC-14.0 (VS2015) will specify a WindowsSDK10 override of 8.1 by default. This is to maximise compatibility with WindowsSDKs installed with VisualStudio 2017 on the same machine.
With the older VisualC-10.0 (VS2010), the default WindowsSDK is 7.0A (with the compiler) that offers 32-bit support with the Express edition. You may also specify the WindowsSDK-7.1, and BAM will be able to use that when 64-bit compilers are requested.
Generated .vcxprojs will have the WindowsTargetPlatformVersion property set to the version of the WindowsSDK in use.
WindowsSDK.WindowsSDK module has been deleted, as its patches are no longer required. All tests have been updated to reflect this.
WindowsSDK.MetaData is mostly now just used for detection, although WindowsSDK-7.1 does override the use of vcvarsall.bat with its own command script.
WindowsSDK.WinResourceCompiler has been renamed to WinResourceCompilerBase and reclassified as an abstract class. Instead, two new sealed classes WinResourceCompiler32 and WinResourceCompiler64 have been introduced, corresponding to the architecture bit-depth in use.
Disambiguation of which toolchain to use is now performed just before the very first C module requiring a compiler, linker, archiver, is required. Exceptions are only thrown when a specific tool is requested, but cannot be delivered. Reflection to identify tool module types now only occurs on the first instantiation; the module is then reused for future instances, without needing to query reflection. Logging of details of the toolchain in use occurs here.
08-Jun-2018 Fixes #448. Added BAM command line option, --injectdefaultpackage=<value>, in order to temporarily add a package, and make it the default, into any build. Particularly useful for testing (it's exposed in the Python test harness too) to override a dependent.
05-Jun-2018 Fixes #447. Strings created by Bam.Core.TokenizedString.CreateVerbatim will no longer have their forward slashes on Windows changed to back slashes. That would be fine for paths, but as a verbatim string, they should not be modified. This allows strings such as command switches (/SOMEFEATURE) to be stored.
02-Jun-2018 Fixes #444. A package that has multiple Installer.InnoSetupInstaller modules intermittently saw I/O error 183 coming from InnoSetup (means duplicate error on network, or directory exists), when BAM was in multithreaded mode. Process Monitor suggested that this was because all .iss files referred to the same OutputDir, so multiple ISCC.exe processes had a race condition creating the directory. BAM now creates the OutputDir when creating the .iss files, so there should be no race with ISCC.exe.
01-Jun-2018 Fixes #445. Classes of PackageMetaData can now be dependent on each other. The dependent meta data instance will be created on-demand.
23-May-2018 Fixes #441. Fixed Xcode project generation for linking against prebuilt static libraries.
17-May-2018 Fixed #440. Fixed regression introduced in Xcode project generation in the fix for #436 in v1.2.0a3, that would not correctly generate order-only dependencies.
13-May-2018 ======== Version 1.2.0 alpha 3 Release ========
07-May-2018 Fixes #438. C.CModule now has a protected overloaded function SetSemanticVersion, that deals with setting the module's Macros for MajorVersion, MinorVersion, PatchVersion. Integer argument overrides available, as well as a pure string argument version, and one that accepts Bam.Core.ISemanticVersion. Bam.Core.BamState (accessible via Bam.Core.Graph.Instance.ProcessState) also now implements ISemanticVersion.
29-Apr-2018 Fixes #391. VisualC packages now use their respective vcvarsall.bat to initialise the environments used for running their tools.
Bam.Core.OSUtilities.GetInstallLocation has been extended with optional arguments: searchDirectory, a string path for a directory to search immediately (Windows only); uniqueName, a string key to reference a cached executable path (useful if the same executable filename may reside in multiple locations, e.g. 32-bit/64-bit compilers); throwOnFailure, a Boolean (defaults to true) indicating whether a failure to find an executable results in an exception, or just returning null.
Bam.Core.OSUtilities.GetInstallLocation now returns a Bam.Core.StringArray, returning all matches for the executable on the search paths. The calling code is expected to determine which discovered path should be used.
27-Apr-2018 Fixes #339. The vswhere NuGet package is now installed when building BAM. The VisualC packages use this to determine install locations.
22-Apr-2018 Fixes #429. Bam.Core.OSUtilities.GetInstallLocation on Windows will now search in the 64-bit (if applicable) and 32-bit Program Files folders, recursively, for the specified file. This can be slow, but will be performed just once if the file is found.
Added Publisher.ZipModule to ZIP archive a directory. Uses the zip command line tool on Linux and macOS, and 7zip on Windows (will locate the latter using the above extension to GetInstallLocation, if installed in the default location).
13-Apr-2018 Fixes #436. Any order-only dependents into a project generating link step, now recurses into each dependent to add its own order-only dependents. For example, if A is runtime dependent on B and C, and D is runtime dependent on A, then you'd expect D to require A, B, C.
12-Apr-2018 Fixes #435. Bam.Core.IOverrideModuleConfiguration.execute() now also passes the Module's build Environment, in order to make build config dependent choices on how the Module's large scale configuration is set.
12-Apr-2018 Fixes #434. Added overload Bam.Core.Graph.FindReferencedModule<T>(env) function, that accepts a non-null Bam.Core.Environment argument. This is a read-only function that returns the instance of the referenced Module of type T from the specified Environment. Unlike it's no-argument overload, this new function will not attempt to create an instance if it is missing, so can be invoked outside of Module's Init() functions.
11-Apr-2018 Fixes #433. Bam.Core.OSUtilities.GetInstallLocation will no longer output stderr messages.
11-Apr-2018 Fixes #432. The existing Bam.Core.PackageDirectoryRedirectAttribute allows all modules in a package to reassign their $(packagedir) macro to the specified path. In the case of a single module in a package of many needing to redirect its $(packagedir), something else is needed. Bam.Core.ModulePackageDirectoryRedirectAttribute achieves this. It is a class level attribute, taking one parameter, the type of the Module whos package directory it wants to redirect to. An example use case for this would be subclassing, from package P1, an existing module M (that builds code) in package P2, and simply adding a new dependency in the subclass' Init function. Without the redirected $(packagedir), the subclass' build would try to find M's source files in package P2, instead of P1. Uses of ModulePackageDirectoryRedirectAttribute override uses of PackageDirectoryRedirectAttribute.
11-Apr-2018 Fixes #430. Debuggable projects generated from BAM have (by default) preferred 32-bit, even though the configuration is Any CPU. Disable this, so that environment variables are picked up for 64-bit (especially on Windows).
30-Mar-2018 Fixes #428. If the system temporary folder exceeds 65k files, System.IO.Path.GetTempFileName will throw an exception. Added a wrapper function, Bam.Core.IOWrapper.CreateTemporaryFile() that throws a sensible error with instructions on how to fix the issue. Also, all dangling temporary files are now deleted.
27-Mar-2018 Fixes #427. Windows .rc files for executable/dll versioning are now only written to disk if the don't exist, or their contents from the previous write has changed. This avoids unexpected relinks when VisualStudio projects are regenerated, but the code for the linked executables hasn't changed.
27-Mar-2018 Fixes #426. Repeated calls to Bam.Core.OSUtilities.GetInstallLocation no longer invokes an external process except for the first. The result is cached.
23-Mar-2018 Fixes #388. Cleaned up compiler optimization flags.
C.EOptimization no longer has a 'full' option (this is VisualC specific). C.EOptimization.Custom now expands to nothing.
However, there are now compiler specific optimization settings to allow compiler extensions, when C.EOptimization.Custom is selected.
VisualC exposes Full.
Gcc exposes O3 and Ofast.
Clang exposes O1, O3 and Ofast.
C.ICommonCompilerSettings.OmitFramePointer is now evaluated after C.ICommonCompilerSettings.Optimization, in case the choice of the former differs from that in the optimization.
Clang mappings changes
C.EOptimization.Speed was -O1, now -O2.
Gcc mappings changes
C.EOptimization.Speed was -O1, now -O2.
C.EOptimization.Size was -Os, now -O1.
Mingw mappings changes
C.EOptimization.Speed was -O1, now -O2.
C.EOptimization.Size was -Os, now -O1.
VisualC mappings changes
C.EOptimization.Speed was -O1, now -O2.
C.EOptimization.Size was -Os, now -O1.
23-Jan-2018 ======== Version 1.2.0 alpha 2 Release ========
20-Jan-2018 Fixes #422. Added synchronization between Bam.Core.TokenizedString.IsParsed and Bam.Core.TokenizedString.Parse().
20-Jan-2018 Fixes #421. Publisher.Collation.IncludeAllModulesInNamespace now only includes modules that generate the specified pathkey.
20-Jan-2018 Fixes #420. Container source modules which are passed into C[.Cxx].ConsoleApplication.ExtendSource() should not standalone compile, as there is no guarantee that they have sufficient dependencies in order to compile. The applications consuming them may provide those dependencies.
20-Jan-2018 Fixes #419. Publisher.Collation.IncludeAllModulesInNamespace now includes an optional regular expression filter. By default, the function will match all Bam.Core.Module based classes. Using the filter will then reduce this list down to only those Modules whose name matches the filter.
19-Jan-2018 Fixes #417. Stripped collation must always copy from the original collation. This ensures that the stripped version is always made from a source that is guaranteed to run.
19-Jan-2018 Fixes #418. Publisher copy tools (cp,xcopy,rsync) now handle their particular needs for source and destination paths, rather than this being coded into each module type.
16-Jan-2018 Fixes #416. Fix Python script (coding/build_bam.py) in order to use nuget.exe on Linux downloaded from https://nuget.org/downloads, as described in https://docs.microsoft.com/en-us/nuget/guides/install-nuget#mac-osx-and-linux.
16-Jan-2018 Fixes #415. Trim all new-line characters from stdout captured from Bam.Core.OSUtilities.RunExecutable. This was causing issues with xcopy.exe in VisualStudio post-build steps, leaving newline characters in.
14-Jan-2018 Fixes #414. Speculative fix for TravisCI not supporting cursor positioning for logging.
14-Jan-2018 Fixes #413. Any module derived from Bam.Core.PrebuiltTool now has the path provided by the Executable property checked for existence in it's Init() function. If the path does not exist, a Bam.Core.UnableToBuildModuleException exception is thrown. If this is not caught and handled, then the module creating the tool instance will fail to build. The 'Test' script has been updated to handle a missing Mingw installation for one of its modules.
13-Jan-2018 Fixes #412. Ignored CollatedObjects also need to be ignored in the StrippedBinaryCollation and DebugSymbolCollation modules.
12-Jan-2018 Fixes #411. Publisher.Collation HeaderDir macro and class property is now defined for all application types, not just library.
12-Jan-2018 Fixes #410. Publisher.Collation now exposes a PublishingType property, which is the value passed in SetDefaultMacrosAndMappings.
09-Jan-2018 Fixes #375. VisualStudio 2010 Express CRTs can now be found.
08-Jan-2018 Fixes #409. MakeFile stripped binary rules now have the required prerequisites.
07-Jan-2018 ======== Version 1.2.0 alpha 1 Release ========
06-Jan-2018 Fixes #360. Publisher package rewrite, and Bam.Core.TokenizedString update.
Publisher:
In an effort to reduce duplication, Publisher now walks the dependency hierarchy declared in the build in order to automatically determine additional files to publish. In short, you now only need to specify the main modules (referred to as anchors), with Include<moduletype>(PathKey) that you wish to publish in your Collation module.
As a side-effect, files may be published to customisable locations under the publishing root. Default layouts are provided, which depend both on platform, but also type of software application (console app, windowed app, library). For example, macOS windowed applications are published as application bundles, while macOS console applications are published as a flat directory structure.
If dependents need to go to non-default locations, then their publishing directories can be set by Find<moduletype>() on the Collation, and invoking SetPublishingDirectory().
If dependents should be not be collated at all (e.g. build-time helper utilities), they can be flagged using Ignore<moduletype>().
DebugSymbolCollation and StrippedBinaryCollation remain unchanged in their API.
TokenizedString:
These changes were to support the more dynamic approach to the Publisher package above.
- Renamed Bam.Core.TokenizedString.CreateInline to Bam.Core.TokenizedString.CreateForceInline.
- Removed Aliased TokenizedStrings. Use Set to change an existing string now.
- TokenizedString.Parse() no longer accepts any arguments.
- Added TokenizedString.UncachedParse() to perform a parse (without storing the result in the TokenizedString) with custom MacroLists. Arrays of MacroLists may now be used, in order to provide multiple sources of macro expansion. MacroLists are used in order in the array; macros that appear in more than one MacroList will only accept their first-encountered expansion.
- Added TokenizedString.Clone() to copy, and re-assign the module on which a string is currently mapped to.
- Added TokenizedString.RefersToMacro() function to query if the string has reference to a particular macro.
- Added TokenizedString.Set() function to replace the string and positional arguments for the TokenizedString. This will only work for unparsed strings. It is recommended to use this method rather than simply assigning a new C# object reference to a variable, as the old object reference may have already been used elsewhere.
Other Additions:
- Added Bam.Core.PeekableStack in order for Bam.Core.Graph.CommonModuleType to be inspected further back that just the top of the stack.
- Added Bam.Core.TokenizedString unit tests.
- Added checks for circular macro references in Bam.Core.MacroList.
- Added Bam.Core.TokenizedStringArray.ToEnumerableWithoutDuplicates, to remove duplicates, post-parsing. (Some strings with the same expansion may exist in the array, due to them being bound to different modules in the same package.)
- MakeFile clean target now works when executed from a CMD prompt in Windows.
Other Changes:
- Bam.Core.TokenizedStringArray.Contains now uses the parsed strings where possible for comparisons.
- C.SharedObjectSymbolicLink modules, to make the symbolic links for SOName and LinkerName for a shared object, are now first class citizens. (Easier to manage for publishing.) C.DynamicLibrary and C.Cxx.DynamicLibrary now implement the IDynamicLibrary interface, which exposes LinkerNameSymbolicLink and SONameSymbolicLink properties to access the respective modules. The shared object symbolic link modules depend on the original dynamic library module.
- Linux LD links now prefer the LinkerName symbolic link of dynamic libraries.
- Linux LD RPath-link paths are only added for dynamic libraries dependent on dynamic libraries when there is no explicit link step.
- C.OSXFramework replaces DirectoriesToPublish, FilesToPublish, DirectoriesToPublish, SymlinksToPublish, with the abstract FrameworkBundleName and FrameworkLibraryPath properties. By default, Frameworks are published as-is (now using rsync), but can be configured on specific Framework instance levels for exclusions.
- MakeFile generation goes to more effort in making unique variable names.
- Access to MakeFile Targets is now through delegates and function calls, in order to make the scripts threadsafe.
Other Removals:
- Removed Bam.Core.Module.MakePlaceholderPath. You can now use TokenizedString.Set to update an existing string, if it has not yet been parsed.
02-Dec-2017 Fixes #389. NUnit is added via NuGet packages. This is supported on VisualStudio, VisualStudio for Mac and MonoDevelop.
Note that VS 2013 is a little backward (tries to modify the .sln), and VS for Mac at least seems to follow the VS 2017 support for NuGet.
Added a Bam.Core.Test assembly, which uses NUnit markup.
NuGet packages added for VS to explore and run NUnit tests.
Also, used NuGet packages in order to run tests from the command line, which are integrated into the release process.
29-Oct-2017 Fixes #380. Eliminating 'lock (this)' expressions and hardening Xcode generation thread safety. THIS IS A BREAKING CHANGE.
'lock (this)' is considered bad for synchronisation, as the caller may also lock the object. Instances of these have been eliminated, either by replacing with a reduced scope lock on private only objects, or using System.Lazy<T> or System.Threading.LazyInitializer for thread-safe object initialization.
Many properties of XcodeBuilder.Project that were public are now private, but with new public accessors containing appropriate synchronisation.
XcodeBuilder.Target.Type is no longer public. The setter for this may have been used by external code, so this may cause compiler errors. There is now a public accessor, XcodeBuilder.Target.SetType() to use instead.
27-Oct-2017 Fixes #373. Tightening up TokenizedString parsing APIs. THIS IS A BREAKING CHANGE.
Parse() and ToString() used to do the same thing, but now they are different.
Parse() no longer returns anything, and if any errors occur during parsing, an error message will be cached internally.
ToString() will only display the parsed string, or throw an exception if it is not parsed, or includes the error message if it failed to parse.
In short, TokenizedStrings only throw exceptions now when ToString() encounters an unparsed or failed to parse string, or when a second Parse() attempt is made.
In addition to making functions have one purpose, this change also allows the possibility of TokenizedStrings to be unparsable (possibly for use as a template, if macros are defined elsewhere), but will only report the error if attempted to be explicitly used.
TokenizedString comparisons now use the hash calculated at construction, so no parsing is required. WARNING: If previously user scripts did TokenizedString.Equals(TokenizedString), this was comparing parsed strings; this is likely to fail now. Change to TokenizedString.ToString().Equals(TokenizedString.ToString())
Ideally, TokenizedStrings should be created during Init() or patching stages. These will be automatically parsed in the parsing stage, and are then available for use in the build stage, with ToString(). Use of Parse() prior to the parsing stage should be frowned upon.
TokenizedString.ParseAndQuoteIfNecessary() has been replaced with ToStringQuoteIfNecessary().
Added TokenizedString.IsParsed property to help with strings created after the parsing stage.
C.PreprocessorDefinitions now internally store TokenizedStrings, not strings, although the API is unchanged.
Test harness has been changed so that Native build mode runs repeat their build command, but without a clean, as incremental builds run down different codepaths internally. This is to give wider test coverage.
As a side-effect of this, macOS DMG installer generation now does the 'hdiutil convert' step to a temporary DMG and subsequently moves it, as it fails if the output DMG exists.
Added ProceduralHeaderTest2, which exercises the C.ProceduralHeaderFileFromToolOutput module type, again increasing test coverage.
Added PublishingSymlinkTest1, which exercises publishing a symlink, to increase test coverage. This is for Linux and macOS.
Added DoNotCompileTest1, which exercises having source files referenced by modules which do not need to be explicit compiled (e.g. they are #included into other source).
Added VersionScrippTest1, which exercises version scripts for exporting symbols from a shared object, increasing test coverage. This is for Linux.
Extended AssemblerTest1, for improved test coverage.
Extended LinkPrebuiltLibrary, for improved test coverage.
All tests now require at least BAM v1.2.0.
Added command line option, --withstacktrace. This signifies a change of behaviour from previous versions of BAM. This is because it was noticed during profiling that calls to System.Environment.StackTrace were significantly slowing down the build, particularly in Mono on macOS. Stack traces were captured at various points during TokenizedString creation and parsing to aid debugging in error messages. By default, stack traces are no longer captured. Please pass the --withstacktrace command line option to bam to re-enable them. A warning is displayed in suitable verbosity modes indicating that enabling those option will slow down your build.
19-Oct-2017 Fixes #379. Debug projects, generated with bam -p, now include the preprocessor define, __MonoCS__, to match what the compiler sets for dynamically compiled package assemblies in a build step.
18-Oct-2017 Fixes #377. Previously, only one Bam.Core.IOverrideModuleConfiguration implementation could be present anywhere in the compiled packaged assembly. However, one could be in a tests namespace, and thus not affect a normal package build. The logic of finding the right override class has been adjusted.
18-Oct-2017 Fixes #376. VisualStudio 2010 incorrect published files to $(OutputPath) in VSSolution build mode, which on that version of VS, is different (and incorrect) for the intended usage, and should be $(OutDir).
11-Sep-2017 Issue #360. PluginTest example now exports a symbol from a plugin, attempts to load it, and use the symbol.
07-Sep-2017 Fixes #355. TokenizedString now uses a hash internally, as opposed to string compares, to look for invariant strings.
06-Jun-2017 Fixes #342. Can now use 'python codingtools/generate_docs.py' to build local documentation for BAM. Assumes Python is invoked from the directory containing BuildAMation.sln, and that the path to the doxygen executable is passed.
05-Jun-2017 Fixes #341. Can now use 'python codingtools/build_bam.py' to build a local copy of BAM. Assumes Python is invoked from the directory containing the BuildAMation.sln.
05-Jun-2017 Fixes #352. The xbuild utility is now redundant in Mono; msbuild is the successor.
04-Jun-2017 Fixes #173. The master package now has it's parent directory added as a repository. This is to cover the case of the master package not residing in a formal repository (with packages and tests directories), in order to locate sibling packages.
04-Jun-2017 Fixes #348. Discovery of package repositories can be slow, due to a full recursive search through candidate directories. This was particularly slow for very deep directory hierarchies, and did not stop when a candidate package was found through such hierarchies. As such, the definition of a package repository has now changed to accomodate a faster search algorithm: A package repository is now a single directory containing packages; any non-package folders will no longer be considered as a nested package repository. IMPORTANT: This can be a breaking change for existing packages, depending on how their definition files were configured for previous versions of BAM.
04-Jun-2017 Fixes #349. Added an ellipsis to all output message that will have some progress following it, to clarify to expect to see something on the console log.
04-Jun-2017 Fixes #345. Added progress report to package repository exploration, which will appear both on builds as well as debug project creation.
02-Jun-2017 Fixes #347. BAM used to report the C# compiler on it's output. Although correct at the time, this was in fact the Common Language Runtime (CLR) major.minor version. This has been corrected, and the targeted .NET framework is also displayed.
======== End of v1.1 releases ========
08-Jun-2018 Fixes #449. Guard against spaces in the path that BuildAMation is installed/cloned in. Also, environment scripts (env.bat/env.sh) can be run from any directory now.
13-May-2018 ======== Version 1.1.7 Release ========
13-May-2018 Fixes #439. VisualC-15.0 is now compatible with the latest VisualStudio 2017 15.7 release.
13-May-2018 Bumping to version v1.1.7.
11-Mar-2018 ======== Version 1.1.6 Release ========
11-Mar-2018 Fixes #425. VisualC-15.0 is now compatible with the latest VisualStudio 2017 15.6 release.
11-Mar-2018 Bumping to version v1.1.6.
07-Dec-2017 ======== Version 1.1.5 Release ========
07-Dec-2017 Bumping version to v1.1.5.
07-Dec-2017 Fixes #392. VisualC-15.0 is now compatible with the latest VisualStudio 2017 15.5 release.
04-Oct-2017 ======== Version 1.1.4 Release ========
25-Sep-2017 ======== Version 1.1.4 beta 1 Release ========
24-Sep-2017 Fixes #369. Added C.ICommonCompilerSettings.NamedHeaders, that is a list of headers to process as if appearing as the first line of each affected source file. Supported on VisualC, Mingw, Gcc and Clang (macOS). Added test case, ProcessNamedHeaderTest, that attempts to include iso646.h (http://www.cplusplus.com/reference/ciso646/).
24-Sep-2017 Fixes #367. Fixed stack overflow while analysing package dependencies.
24-Sep-2017 Fixes #368. Xcode projects were ill-formed if C.IAdditionalSettings were added containing a space, e.g. '-include limits'.
23-Sep-2017 Fixes #366. Added Clang-Xcode9 package for Xcode9 support. Test packages updated to support Xcode9, but Xcode8 remains as the default, so use ./runtests.py --Clang.version=Xcode9 in order to exercise.
31-Aug-2017 ======== Version 1.1.3 Release ========
30-Aug-2017 Fixes #359. Regression was introduced in the fix for #358 in v1.1.2, stopping commands from xcrun, hdiutil and tar from executing on macOS and Linux. The fix introduces Bam.Core.OSUtilities.RunExecutable and Bam.Core.OSUtilities.GetInstallLocation functions. GetInstallLocation uses 'which' on *nix platforms and 'where' on Windows, both making use of the RunExecutable. These are used to find the paths for xcrun, hdiutil and tar, and have been reused in other packages too. GccCommon.ConfigureUtilities are now deprecated in favour of the new functions, and will be removed in a future release.
19-Aug-2017 ======== Version 1.1.2 Release ========
19-Aug-2017 Fixes #357. VisualC-15.0 now tracks published versions in VisualStudio 2017 15.3.1. The VC Tools version has changed to 14.11.25503. The C runtime version has changed to 14.11.25325. A mistake from earlier VS2017 releases corrects the redist version from Microsoft.VC150.CRT to Microsoft.VC141.CRT. This change is not backward compatible with earlier releases of VisualStudio 2017.
19-Aug-2017 Fixes #358. Prebuilt tool executables that do not exist at their specified paths on disk now result in an exception being thrown.
02-Jun-2017 ======== Version 1.1.1 Release ========
31-May-2017 Fixes #346. BAM .csproj files and generated package debug projects could not be built in MonoDevelop 7 due to MSBuild's Microsoft.CSharp.Targets not being found. This is a case error, the file should be Microsoft.CSharp.targets.
30-May-2017 Fixes #336. The VisualStudio 2017 redist paths changed sometime between RTM and the 15.2 update. This broke local application deployment. Now using the C runtime version 14.10.25008 for x86 and x64.
16-May-2017 ======== Version 1.1.1 beta 4 Release ========
16-May-2017 Fixes #334. Following tests are now tested in Linux with additional build modes: ObjectiveCTest1 (Native,MakeFile); ProceduralHeaderTest1 (MakeFile); DeltaSettingsTest1 (MakeFile); EmbedStaticIntoDynamicLibrary (MakeFile); PublishingTest1 (MakeFile) and PublishingTest2 (MakeFile). In OSX, these tests are now tested in Xcode build mode: EmbedStaticIntoDynamicLibrary, ProceduralHeaderTest1, ProxyTest.
15-May-2017 Fixes #335. MakeFileBuilder.MakeFileCommonMetaData.Directories and Environment properties are no longer public. Instead, accessors called AddDirectory has been added (ExtendEnvironmentVariables already existed), and utility functions to export both of these to a StringBuilder have been added to the class (ExportEnvironment and ExportDirectories).
14-May-2017 Fixes #331. Added C.PatchUtilities static utility class, with the helper functions GetCompiler and GetBitDepth. These are useful in static patch functions, that only have the Module property on the settings input to determine compiler versions and the architecture built for. When patch lambdas are inlined into the Init() function of a module, access to module's properties are immediately available, but in static patch functions, these utilities are recommended. Test8 has been updated to illustrate using the PatchUtilities functions.
14-May-2017 Fixes #322. Command line argument values that should be treated as integers now throw a more useful exception if the value does not parse.
13-May-2017 ======== Version 1.1.1 beta 3 Release ========
13-May-2017 Fixes #333. Fix DeltaSettingsTest2 example on Linux.
13-May-2017 Fixes #332. Mingw assembler support now working. AssemblerTest1 example also now builds with Mingw.
11-May-2017 ======== Version 1.1.1 beta 2 Release ========
10-May-2017 Fixes #330. Adding an empty string to a C Container AddFiles() function resulted in a general exception.
10-May-2017 Fixes #329. Assembler settings interfaces now includes the Bits (C.EBit type) to distinguish between 32-bit and 64-bit builds.
09-May-2017 Fixes #328. Modules without Settings will now throw an exception if they only have private patches. Those with public patches are allowed, since these affect other modules that depend on them.
04-May-2017 Fixes #325. Assembler source file support in VisualStudio projects now uses MASM configurations, rather than custom build rules.
03-May-2017 Fixes #327. VisualCCommon.ICommonAssemblerSettings and ICommonLinkerSettings now have a SafeExceptionHandlers boolean option (defaults to true for both). This is only required in 32-bit builds, mostly with assembler code. See MSDN for details.
03-May-2017 Fixes #324. Path for the assembler tool (ml) in VisualC now fixed for VisualStudio 2017. Added new test, AssemblerTest1, to exercise the fix.
01-May-2017 Fixes #326. Xcode projects would not be buildable in the situation with source files with a mixed setting of ClangCommon.ICommonCompilerSettings.Pedantic and a compiler warning suppression, such as -Wno-long-long, that is included in the pedantic warnings. This was due per-file settings being used for pedantic, and this was appearing after the warning suppressions, hence re-enabling them. In these circumstances, projects are now generated with -Wpedantic in the build settings, and per-file -Wno-pedantic where necessary. Added a new test, DeltaSettingsTest2 to exercise this fix.
23-Apr-2017 Fixes #323. C.ICommonWinResourceCompilerSettings now has a property, PreprocessorDefines, to pass definitions to the resource compiler. With Mingw and WindowsSDK implementations for Native and VSSolution build modes.
21-Apr-2017 ======== Version 1.1.1 beta 1 Release ========
17-Apr-2017 Fixes #319. Test harness now includes an executive summary of counts of succeeded, failed and ignored tests.
17-Apr-2017 Fixes #318. Default macOS deployment version is now 10.6 (was the current SDK). Setting this as old as possible for maximum backward compatibility. The default can be overridden by implementing the interface Bam.Core.IPackageMetaDataConfigure<Clang.MetaData>. See the Cxx11Test1 example.
15-Apr-2017 Fixes #317. Added all missing current C++ standards to C.Cxx.ELanguageStandards enumeration. Added are Cxx03, GnuCxx03 (not supported by Clang), GnuCxx11, Cxx14, GnuCxx14.
07-Apr-2017 ======== Version 1.1.0 Release ========
07-Apr-2017 Fixes #315. Switch tests on macOS to use Clang-Xcode8 by default.
30-Mar-2017 Fixes #312. Generated Xcode projects now honour 'false' values for ClangCommon.ICommonCompilerSettings.AllWarnings and ExtraWarnings.
25-Mar-2017 ======== Version 1.1.0 beta 3 Release ========
25-Mar-2017 Fixes #281. Improve the error message when mono is not detected.
21-Mar-2017 Fixes #304. MingwCommon.IArchiverSettings and GccCommon.IArchiverSettings have been renamed, for consistency, to MingwCommon.ICommonArchiverSettings and GccCommon.ICommonArchiverSettings. IMPORTANT: If user packages are referencing those old interface names, this is a breaking change, and requires script updates.
21-Mar-2017 Fixes #307. C source container indexing can now accept a path, using forward slashes to separate directories, to pattern match files in the container. Previously, this did not work on Windows, due to the comparison of forward slashes with back slashes. Using forward slashes is the BAM cross-platform convention.
21-Mar-2017 Fixes #226. Added Bam.Core.ISemanticVersion, and extension methods to compare an ISemanticVersion against a specified version (see ISemanticVersion.IsAtLeast). Changed Bam.Core.IProductDefinition to inherit ISemanticVersion since they shared properties - this may require package scripts to be fixed, if IProductDefinition was explicitly implemented. C.CompilerTool now implements ISemanticVersion, and Clang, Gcc, Mingw and VisualC compilers have been updated with major and minor versions. Changed Test8 which was causing a compiler warning starting with VisualC 2015.
21-Mar-2017 Fixes #311. Added read-only property, C.CCompilableModuleContainer.Compiler, so that source containers can query the compiler in use, rather than needing to drill down to individual object files.
19-Mar-2017 ======== Version 1.1.0 beta 2 Release ========
19-Mar-2017 Fixes #310. Added VisualC 2017 support. Test built in Windows 8.1. IMPORTANT: Note that VisualCCommon.Librarian has been split into VisualCCommon.LibrarianBase, Librarian32 and Librarian64. This is a breaking change for any user packages that reference VisualCCommon.Librarian will need updating.
19-Mar-2017 Fixes #309. Added Clang Xcode8 support. Test built in 10.11.6 (but not run as requires 10.12).
19-Mar-2017 Fixes #172. Added Gcc 5.4 support. Tested in Ubuntu 16.04.2 LTS. Fixed the Python command line option in the test scripts to select the version of Gcc.
15-Mar-2017 ======== Version 1.1.0 beta 1 Release ========
15-Mar-2017 Fixes #107. Removed deprecated 'removetrailingseperator' TokenizedString post-function.
15-Mar-2017 Fixes #303. Added configuration support for named Module types. New Core interfaces: Bam.Core.IHasModuleConfiguration, Bam.Core.IModuleConfiguration, Bam.Core.IOverrideModuleConfiguration. IHasModuleConfiguration is implemented by Modules indicating they have a configuration interface, and requires two properties returning Module specific types. The configuration interface is defined per module, but must implement IModuleConfiguration, and only declare the read-only properties that are exposed for configuring the Module. Additionally, the Module must defined a non-abstract class, implementing its configuration interface, and also defining the default configuration in a constructor, and public setters for the properties. The Modules patches can now access an instance of the interface through the Configuration property on the Module itself, in order to honour the configuration the user requests. Changing a configuration property in a patch will result in ambiguous behaviour. Top-level packages should define a class implementing the IOverrideModuleConfiguration interface; this declares a function to which the Core will pass IModuleConfiguration instances; the user can cast these to the writeable configuration classes in order to set the properties. Arbitrary code can be executed here, e.g. searching for header files, or running an executable. This code is executed just before the Modules Init() function. See the ConfigurationTest1 test case.
======== End of v1.0 releases ========
07-Apr-2017 ======== Version 1.0.5 Release ========
15-Mar-2017 ======== Version 1.0.5 beta 1 Release ========
11-Mar-2017 Fixes #308. Version check for the BAM assembly required (as specified in package definition files) no longer gives 'major', 'minor', and 'patch' the same precedence, i.e. v1.0.2 was incorrectly considered more recent than v1.1.0, as the patch value was greater in the former.
01-Mar-2017 ======== Version 1.0.4 Release ========
17-Feb-2017 Fixes #305. Added Publisher.StrippedBinaryCollation.Include<>(), to allow additionally built files, e.g. documentation, to be added to the final published collation before installers. This could happen, say, if the documentation generation depended on a runnable executable, made by the initial publishing step.
16-Feb-2017 ======== Version 1.0.4 beta 3 Release ========
16-Feb-2017 Fixes #302. The Xcode publishing logic was incorrect when the 'reference' (i.e. executable to publish) was not in the top level package, and other modules in the reference's package needed to be published beside it.
16-Feb-2017 Fixes #301. Corrected error message when a Settings interface did not implement a Clone extension method, but the Settings needed to be cloned (for creating delta settings).
15-Feb-2017 Fixes #300. C.ProceduralHeaderFile and ProceduralHeaderFileFromToolOutput have had their public patches extended to support C.ICommonAssemblySettings.
15-Feb-2017 Fixes #299. Added support for assembler tools in the C package. Assemblers have been provided for VisualC on Windows (ml, ml64), Clang on macOS (clang), Gcc on Linux (gcc), and Mingw on Windows (mingw-gcc). Native, VisualStudio, MakeFile, and Xcode support is provided. Note that the class C.ObjectFile has been split, into C.ObjectFileBase (the base class for different types of ObjectFile), C.ObjectFile derives from ObjectFileBase and continues to be the output from a compilation step, and C.AssembledObjectFile is new and also derives from ObjectFileBase. Custom builder scripts, if previously casting to C.ObjectFile to get access to properties, may now have to cast to C.ObjectFileBase if assembly source files are included in the build.
12-Feb-2017 Fixes #298. When the Target name differed from the executable name in Xcode, a duplicate Scheme was created in order to debug it (same name but with a '2' suffix). This was due to a misconfigured LaunchActions in the Xcode scheme configuration generated by BAM.
11-Feb-2017 Fixes #201. When publishing a module (B) relative to another (A), B is now added as an order-only dependency to A. This ensures that the dependency graph is accurately reflected in IDE builds.
03-Feb-2017 Fixes #297. C/C++ static library archiving and binary linking may now perform additional timestamp checks on source files to ensure they are up-to-date in Native builds. This covers an edge case of failing to archive or link in incremental builds, when all dependent source files had been compiled in a previous build. The repo case for this is an SCM update of a number of source file in static libraries and applications, and compilation of all static library source is completed, but the application source fails to compile, and the static libraries are not re-archived; a subsequent build correcting the compilation error will result in link errors because the static libraries are still out of date.
04-Jan-2017 ======== Version 1.0.4 beta 2 Release ========
03-Jan-2017 Fixes #295. Handle HeaderLibrary modules during MakeFile dependency analysis.
03-Jan-2017 Fixes #294. Rewrote recursive functions to determine all libraries to link, that had significant performance cost during module construction. Calculations are now performed just before the link step, rather than for each module. The rewrite is still recursive, in order to find all dependents (e.g. when a static library depends on another static library, both need to be linked), but occurs on the final list of libraries (rather than incrementally, and thus repeatedly for common dependencies), and only when absolutely needed. This is for single pass linkers, e.g. gcc, but is applied for all toolchains.
23-Nov-2016 Fixes #293. Added GccCommon.ICommonLinkerSettings.VersionScript property, a Bam.Core.TokenizedString, defaulting to null. If set to an existing file path, then this is passed to ld as a version script. Added C.VersionScript abstract class, as a baseclass module helper for creating version scripts. There is no implementation for determining the exported symbols to list in the version script as it will vary between projects; instead a derived class should implement the Contents property to write an appropriate version script. The dynamic library module can then depend on the module derived from C.VersionScript.
07-Nov-2016 Fixes #291. Xcode publishing of OSX frameworks with helper application bundles no longer duplicate the bundle leafname.