Releases: markfinal/BuildAMation
v1.0.0
First official release of BuildAMation
A build system and project generator using C# scripts, running on Windows, OSX and Linux, suitable for building software written in C/C++.
Use the Native command line builds, or generate VisualStudio projects, Xcode projects or MakeFiles.
Highlighted changes since v1.0.0 beta 4
Full changes can be viewed at v1.0.0b4...v1.0.0
14-Dec-2015 Renamed the entry point of package repositories test code, from ConfigureRepository to configure_repository.
09-Dec-2015 Fixes #88. Fixed issue where running 'bam --help --clean' in a package directory would result in an exception when the build root is cleaned.
09-Dec-2015 Fixes #89. Static libraries or header libraries that compile against header libraries now set up module requirements in the graph, so projects actually display those headers. This does not affect the build, as the patches were working previously.
01-Dec-2015 Check first whether a VSProject option already contains a value, before raising an exception if it isn't possible to append.
v1.0.0 beta 4
Highlights since v1.0.0 beta 3
- HTML documentation is now provided in a separate download below. The Core assembly, and some of the packages have been documented.
- VisualStudio and Xcode projects now display source files in a folder hierarchy mirroring that used on disk, relative to each package directory. This makes it far easier to locate files in the IDE.
- Source files with the same basename now compile. Previously this caused all files with the same basename to compile to the same object file.
- Very long compile, archive or link lines with supported toolchains on Windows now use response files to get around the 32,767 character limit on the command line. VisualC toolchains will do this.
- New TokenizedString functions.
- Bug fixes.
Full changelog
30-Nov-2015 Fixes #58. Documented Core assembly, and some of the major packages.
26-Nov-2015 Fixes #85. Added check for mismatching brackets on a TokenizedString function call (pre and post types), e.g. @dir($(0) would previously result in an infinite loop, but will now fail.
26-Nov-2015 Fixes #79. Windows installers default to non-privileged locations (%APPDATA%) for their installation paths.
26-Nov-2015 Fixes #38. VisualStudio and Xcode project files display module source files in a folder hierarchy that mirrors their location beneath their respective package directories.
25-Nov-2015 Fixed #83. Modules with source files with the same basename, but different directories, now compile their object files to unique locations, duplicating the directory structure under their package directory for the full path to their object files. VisualStudio projects use the new object file locations, Xcode builds always built to unique object file locations. MakeFiles share the same directory structure as Native build modes.
24-Nov-2015 Added new TokenizedString post-function, @trimstart(a,b), that removes (multiple) instances of b from the start of a.
24-Nov-2015 Fixes #84. Added Bam.Core.ICommandLineTool.UseResponseFileOption, a string property. This is the option to use on the command line if the tool supports response files in Native build mode. This option is only invoked if the command line length exceeds 32767 characters. Any class implementing this interface will require updating. Bam.Core.PrebuiltTool implements this as a virtual property, with a default of null (response files not supported). VisualC compiler, linker and archiver supports it with the "@" command.
23-Nov-2015 Added new TokenizedString post-function, @escapedquotes(a), which surrounds the argument with \". This is useful to use a string as a preprocessor definition.
23-Nov-2015 Issue #83. Default C.ObjectFile path has changed from using the basename of the source file, to the relative path of the source file to the package directory. This means that object file paths now incorporates the folder hierarchy of the source, allowing source files with duplicate basenames to exist in a package. For example, in the DuplicateSourceFilenameTest test.
23-Nov-2015 Added new TokenizedString post-function, @relativeto(a,b), which calculates the relative path of 'a' to 'b'. If the result is 'a', then an exception is thrown, as returning absolute paths may not be ideal if the function is used to compose a path.
23-Nov-2015 Bam.Core.PlatformFilterAttribute and ConfigurationFilterAttribute no longer expose the EPlatform and EConfiguration as properties. Instead an 'Includes' boolean function that accepts an EPlatform or EConfiguration, returning true if the argument is contained within the flags set on the attribute, false otherwise.
23-Nov-2015 Extended the CommandLineProcessor.Processor utility class, so that arbitrary executables can be invoked, without needing to go through the Bam.Core.ITool interface. For example, if a module simply needed to invoke a system command.
23-Nov-2015 Changed the type of Bam.Core.ICommandLineTool.InheritedEnvironmentVariables from System.Collections.Generic.List to Bam.Core.StringArray. Any module implementing this interface will require an update.
23-Nov-2015 Added test, DuplicateSourceFilenameTest, to exercise compiling source files, with the same basename, but different paths in a module.
23-Nov-2015 Fixes #82. Report a useful exception message of why trying to add a dependency (eventually through Bam.Core.FindReferencedModule) will not work in a patch. Instead, this should be done during the invocation of the module's Init function.
v1.0.0 beta 3
Highlights since v1.0.0 beta 2
- Command line option to view a representation of the dependency graph.
- New test case to illustrate building 32-bit and 64-bit modules, in all build modes.
- More tool options exposed as named properties, covering compiling, linking, and installer generation.
- Many bug fixes
Full changelog
20-Nov-2015 Catch and report exceptions thrown during Settings creation.
20-Nov-2015 Added GccCommon.ICommonCompilerSettings.StrictAliasing and ClangCommon.ICommonCompilerSettings.StrictAliasing, defaulting to false in debug, and true in all configurations with optimizations enabled. See http://dbp-consulting.com/tutorials/StrictAliasing.html for an explanation of aliasing.
20-Nov-2015 Added Publisher.IObjCopyToolSettings.Verbose boolean option to vary the amount of output from the objcopy tool. Defaults to true.
20-Nov-2015 Fixes #75. Mingw binutils 2.25.1 changed behaviour of objcopy, requiring at least the SYSTEMROOT environment variable, or a failure to create a temporary file is reported.
20-Nov-2015 Fixes #74. Only Windows console applications will define the _CONSOLE preprocessor definition.
20-Nov-2015 Fixes #72. C preprocessor definitions that have a value containing a quoted string did not parse correctly in MakeFiles in a bash shell. These values appeared to just require a double quote surrounding them, which also works in Native build modes.
20-Nov-2015 Fixes #76. Added synchronization to VSSolution functions to avoid collections changing in multiple threads concurrently.
19-Nov-2015 Fixes #71. Xcode build settings with multiple values are now serialized as a comma separated list scoped by parentheses. Any escaped characters are enforced in the serialized project files.
19-Nov-2015 Fixes #73. Bam.Core.Settings.Interfaces() now returns all implemented settings interfaces from the Settings instance, ordered by precedence (Bam.Core.SettingsPrecedenceAttribute). This ensures all build modes convert interfaces in a consistent order.
18-Nov-2015 Fixes #70. Added --immediateoutput (-i) command line option the Bam Core. Usually, output is deferred for the Bam.Core.Executor to display (so it is not interleaved during multithreaded builds), but if the process were to stall, then no output would be seen. Using this option displays the output (both stdout and stderr) immediately, useful for diagnosing issues. Default remains deferred output.
18-Nov-2015 Fixes #69. Installer package now exposes a verbosity setting on the DiskImage module, to configure how much output is logged from hdiutil. The options are Default, Quiet, Verbose, Debug, corresponding to the flags (, '-quiet', '-verbose', '-debug'). Default is the default setting.
18-Nov-2015 Fixes #68. Poll every few seconds for process exit in CommandLineProcessor. Some processes, although ended in the OS, did not return from process.WaitForExit.
18-Nov-2015 Fixes #67. Added C.ICommonLinkerSettings.Bits, which is configured automatically, but allows linkers that must pass options specifying the architecture to do so.
18-Nov-2015 Fixes #64. Added test, MultiBitDepthModuleTest, that illustrates how to build a module in both 32-bit and 64-bit.
18-Nov-2015 Fixes #66. Multiple configuration Xcode builds, with modules that are configuration specific, relating to an application bundle to be created, was throwing an exception, as the metadata to identify an application bundle was being set, and then unset, by the modules on different configurations executed at different times (since the application bundle is treated as a single entity in multiple configurations in the Xcode project).
17-Nov-2015 Fixes #65. Added synchronization to XcodeBuilder, to avoid multiple build threads changing lists simultaneously.
16-Nov-2015 Fixes #60. Collation of OSX Frameworks now optionally changes the install name of the dylib, to be in a standard location for an application bundle, from an optional argument to Publisher.Collation.IncludeFramework. The default value of this argument is false, so this is a change of behaviour to earlier versions of the Publisher package. If frameworks are built with install names, that, say, use an rpath, then their install name does not need changing - instead, a suitable RPath search path should be added to the main executable.
16-Nov-2015 Added ClangCommon.ICommonLinkerSettings.RPath property to all Clang-Xcode* linker settings, to add RPaths to the linked binary. Defaults to being an empty list.
16-Nov-2015 Fixes #59. Changed release process to build the solution with 'xbuild' (equivalent to msbuild) on Mono implementations.
16-Nov-2015 Moved all command line option classes into an 'Options' sub-namespace, to scope them, and simplify what is visible using Intellisense.
16-Nov-2015 Fixes #63. Added command line option, '--viewgraph', to display a representation of the dependency graph of modules on the console.
13-Nov-2015 Fixes #62. Invoking 'bam --showdefinition' on a package outside of a formal repository (i.e. not in a packages or tests folder), threw an exception.
13-Nov-2015 Fixes #61. C/C++ compiler warning levels must appear on the command lines before any warning suppressions. The interfaces containing the warning levels now have a high precedence.
v1.0.0 beta 2
Highlights since v1.0 alpha 5 (beta 1 skipped)
- BuildAMation now uses semantic versioning internally, and for modules built.
- Improved Xcode project generation, particularly for pre & post build steps, header projects, and target dependencies in other projects.
- Xcode tools are now run through xcrun, to select the SDK to build against. The deployment target is also now configurable.
- Included support for Xcode 7.
- Clang packages re-versioned to match their Xcode versions, e.g. Clang-Xcode6, Clang-Xcode7. They also look for the SDKs shipped with each Xcode version.
- Publisher package now supports debug symbol extraction, and stripping of debug sections from binaries.
- Packages can now specify the minimum version of Bam required.
- Added support for compiling Windows resource files.
- Preliminary support for VisualStudio 2015.
Full changelog
10-Nov-2015 Fixes #30. Added tar settings for compression. Supporting gzip, bzip and lzma.
10-Nov-2014 Added post-function @removetrailingseparator() to TokenizedString, to trim any trailing slashes from paths.
10-Nov-2015 Fixes #4. Added support for Windows resources to be compiled for linking into binaries. Use CreateWinResourceContainer(), similar to normal source files. Support available in Native, MakeFile and VSSolution build modes.
09-Nov-2015 Fixes #17. Fixes #31. Installers now write to configuration specific directories, using names based on their modules. Also, allowed more than one of each type to be created, which was limiting because of their use of another module to generate scripts.
09-Nov-2015 The macro 'OutputName' is now available on all modules. It defaults to the module's name.
09-Nov-2015 Preliminary support for VisualStudio 2015 (Community Edition); see package VisualC-14.0.
09-Nov-2015 Removed Bam.Core.EConfiguration.Final. Existing configurations are debug (full debugging), optimized (no symbols, full optimizations), profile (debug symbols, full optimizations - useful for generating installers while hiving off debug symbols).
09-Nov-2015 Renamed Publisher.Collation.PublishingRoot PathKey to Publisher.Collation.Key (for consistency with other modules).
09-Nov-2015 Added new test, InstallerTest1, to exercise generating installers for all platforms.
09-Nov-2015 Renamed Bam.Core.FileKey to Bam.Core.PathKey, as it is being used for more than just files now.
09-Nov-2015 Updated Bam schema, so that BamAssemblies can use a major, minor, patch attribute, to specify the minimum version supported.
07-Nov-2015 Fixes #52. Nullable fields in Convert functions of settings interfaces are now tested consistently (with .HasValue & .Value properties). Only C compiler interfaces use nullable types, as only these need to calculate common and delta settings.
07-Nov-2015 Fixes #51. Removed legacy Mono package assembly compilation flags.
06-Nov-2015 Fixes #48. Removed Bam.Core.Module argument from CommandLineProcessor.IConvertToCommandLine.Convert, as its use is not always required, and if needed, can be found from the Bam.Core.Settings object on which this interface is applied.
06-Nov-2015 Fixes #49. Added Bam.Core.ConfigurationFilterAttribute, applied to module classes, to indicate whether a module should be built in the current configurations.
06-Nov-2015 Fixes #50. Moved deleting the build root (if the command line specifies it) before package compilation, so that the cached assembly remains on disk after the build. This was stopping the assembly being reused.
06-Nov-2015 Renamed C.ExternalFramework to C.OSXFramework.
06-Nov-2015 Internal expressions referring to the CModule macro 'PatchVersion' (used in semantic versioning with MajorVersion and MinorVersion), now use the pre-function #valid. This is so that thirdparty builds that only support major.minor version numbers can still use Bam modules, by deleting the PatchVersion macro from their modules.
06-Nov-2015 Added pre-function, #valid, which checks whether its expression is valid, i.e. is it a valid expression with valid macro references in the current context. If it is valid, the function call is replaced by its expression. If it is not valid, the function call is removed.
06-Nov-2015 Added 'pre-function' support to Bam.Core.TokenizedStrings, identified by the syntax #(). The existing function support is for post-evaluation-functions, identified by @(), i.e. only executed once all tokens have been evaluated. Pre-functions are run prior to token evaluation.
06-Nov-2015 Removed optional flags from Bam.Core.TokenizedString.Create. The deferred expansion flag has been removed. In its place is the concept of an 'inline' TokenizedString, created by invoking Bam.Core.TokenizedString.CreateInline. These inline strings are never parsed themselves, but instead are embedded into strings referring to them during parsing. If Module M1 defines a TokenizedString A that refers by name to an inline TokenizedString B in module M2, then B is allowed to refer, by name, to macros in module M1, as long as M1 and M2 are 'aware' of each other. The best case use of this is where M1 is a C module, and M2 is the Tool associated with M1.
05-Nov-2015 Fixes #39. Publisher package now has a new module StrippedBinaryCollation, only supported in the Native build mode. This works with a Collation module, and a DebugSymbolCollation module, as source, and mirrors the directory structure of the former. On Linux, strip is invoked on each binary, and subsequently objcopy links the stripped binary to the debug symbols generated earlier. On Windows, for binaries with PDBs, a clone of the binary is taken, while without PDBs, strip and objcopy is used. On OSX, strip is invoked on each binary. All non-built files/directories/symlinks are cloned as-is.
05-Nov-2015 Ignore any prebuilt modules from debug symbol collation.
05-Nov-2015 Added C.PrebuiltAttribute, so that modules can be marked up as being already built. This is an attribute on a class, so place it on a module definition. This is useful for detecting cases where modules may not have available data, e.g. debug symbols.
05-Nov-2015 Renamed Bam.Core.Module.ModulePreInitDelegate to Bam.Core.Module.PreInitDelegate, and also made it a generic based on the type of module being created. Any lambda expression used for this delegate now accepts an argument of the real type of the new module, rather than the base class Bam.Core.Module. This avoids any need to cast.
04-Nov-2015 Bam.Core.Settings now has a Module property, set in InitializeAllInterfaces, to the module the Settings instance is associated with. This can be useful to access module paths during get/set property calls in settings interfaces.
04-Nov-2015 VisualC sets the PDB path when debug symbols for the linker are enabled, and records the PDB file as a generated path on the module.
04-Nov-2015 Added TokenizedString function, @changeextension(a, b), which will change the file extension of file 'a', with the extension in 'b'.
04-Nov-2015 Publisher package now has a new module DebugSymbolCollation, only supported in the Native build mode. This accepts a Collation module as source, and mirrors its directory structure. On Linux, objcopy is invoked to copy debugsymbols from the original binary. On OSX, dsymutil is invoked to create a dSYM bundle. On Windows, PDB files are copied if generated (intended for VisualStudio), otherwise objcopy is used (intended for Mingw).
04-Nov-2015 Added macro 'encapsulatingmodulename' to all Modules, once completed.
03-Nov-2015 Added package Clang-Xcode7, targeting SDK 10.11. (Note that Xcode 7 does not include SDK 10.10.)
03-Nov-2015 Renamed Clang-Apple600 package to Clang-Xcode6, targeting SDKs 10.9 and 10.10.
03-Nov-2015 Renamed Clang-Apple503 package to Clang-Xcode5, targeting SDKs 10.8 and 10.9.
03-Nov-2015 Renamed Clang-Apple425 package to Clang-Xcode4, targeting SDKs 10.7 and 10.8.
03-Nov-2015 Fixes #43. The Clang package metadata now exposes a MinimumVersionSupported property, to define the oldest version of MacOSX the build can run on. This defaults to the SDK version if not overridden by the user in a class deriving Bam.Core.IPackageMetaDataConfigure<Clang.MetaData>. This value is used both for compilation and linking. Although these are exposed in compiler and linker settings, this is purely for ease of conversion to command lines.
03-Nov-2015 Added generic function Bam.Core.Graph.PackageMetaData(package name) to fetch the meta data instance for the named package, if it exists. This simplifies calling code, and avoids the need for use Linq in that code.
03-Nov-2015 Fixes #44. Clang packages now have metadata with an SDK property (type: string), which is the SDK name to use. The default SDK is used (from 'xcrun --show-sdk-version') if not overridden by the user, using a class deriving Bam.Core.IPackageMetaDataConfigure<Clang.MetaData>. This SDK name is passed to each xcrun command, which is used in turn by each command xcrun executes.
03-Nov-2015 OSX tools from the Xcode developer installation, e.g. clang, install_name_tool, otool, ar, ld, etc, are now executed through the use of 'xcrun'. Currently, the SDK and toolchain used, are as those set by xcode-select. This change allows for future options for using different SDKs and toolchains.
03-Nov-2015 Added property InitialArguments (type: Bam.Core.TokenizedStringArray) to Bam.Core.ICommandLineTool, which is tightly coupled with the Executable property. There are instanced of some tools that are a proxy to others, e.g. on Windows, the cmd executable can take a child executable name to run. When these tools are run, the command line is ' [] '.
03-Nov-2015 Bam.Core.IPackageMetaData is now an abstract class called Bam.Core.PackageMetaData. This is because it now has a protected constructor, which looks for any class derived from Bam.Core.IPackageMetaDataConfigure, and inv...
v1.0 Alpha 5
Highlights since Alpha 4
- Configurable version numbers honoured by .dylibs and .so binaries
- Publish directories, symlinks and OSX framework bundles, understand install_name_tool and chrpath, to create standalone product distributions for use on non-developer machines
- TokenizedStrings support more functions, nested function calls, composition by other TokenizedStrings, use environment variables as macros
- Core optimizations to improve processing speed
- Many bug fixes
Full changelog
15-Oct-2015 Bam.Core.IBuildModeMetaData now requires implementing the property PublishBesideExecutable. This is because some build modes (i.e. those with IDE projects), should publish binary and data dependencies next to the debuggable executable. Whereas other build modes can publish to a standalone directory.
15-Oct-2015 TokenizedStrings can be aliased to other TokenizedStrings, see the Aliased function(). This enables TokenizedStrings to be referenced externally from point of creation (e.g. as a module generated path), and switched later to another TokenizedString.
15-Oct-2015 Renamed C.ILinkerSettingsWin to C.ICommonLinkerSettingsWin for consistency.
15-Oct-2015 Renamed C.ILinkerSettingsOSX to C.ICommonLinkerSettingsOSX for consistency.
15-Oct-2015 Changed C.ILinkerSettingsOSX.Frameworks from Bam.Core.Array<Bam.Core.TokenizedString> to Bam.Core.TokenizedStringArray.
15-Oct-2015 Changed C.ILinkerSettingsOSX.FrameworkSearchDirectories from Bam.Core.Array<Bam.Core.TokenizedString> to Bam.Core.TokenizedStringArray, and renamed to FrameworkSearchPaths.
15-Oct-2015 Changed C.ICommonCompilerSettingsOSX.FrameworkSearchDirectories from Bam.Core.Array<Bam.Core.TokenizedString> to Bam.Core.TokenizedStringArray, and renamed to FrameworkSearchPaths.
15-Oct-2015 Changed C.ICommonCompilerSettings.IncludePaths from Bam.Core.Array<Bam.Core.TokenizedString> to Bam.Core.TokenizedStringArray.
15-Oct-2015 Changed C.ICommonCompilerSettings.SystemIncludePaths from Bam.Core.Array<Bam.Core.TokenizedString> to Bam.Core.TokenizedStringArray.
15-Oct-2015 Changed C.ICommonLinkerSettings.LibraryPaths from Bam.Core.Array<Bam.Core.TokenizedString> to Bam.Core.TokenizedStringArray.
15-Oct-2015 Changed GccCommon.ICommonLinkerSettings.RPath from Bam.Core.StringArray to Bam.Core.TokenizedStringArray.
15-Oct-2015 Added TokenizedStringArray Add and AddUnique functions that take string arguments - these are converted to verbatim TokenizedStrings.
14-Oct-2015 Debuggable project files are now -bam.csproj, to distinguish between those generated for the VSSolution build mode.
14-Oct-2015 Added Publisher.Collation.ChangeRPath utility function, that will alter the RPath for a copied (ELF) file to that path specified. This is so that published files, e.g. plugins, can locate shared objects wherever they may get published to.
14-Oct-2015 Each package representing a build mode (e.g. NativeBuilder) has a class for metadata (named Meta). This must now implement a new interface, Bam.Core.IBuildModeMetaData, which requires a function to return the module output directory TokenizedString used for each module. This allows different build modes to write to different locations under the build root, should their use require it. Most have a module output directory of 'encapsulating module name'/'configuration'.
13-Oct-2015 Added Bam.Core.MacroList.Remove(), with an argument with no token markup. Use this function cautiously, as it can cause TokenizedStrings to fail to parse.
13-Oct-2015 Bam.Core.MacroList.Contains now expects the argument to have no token markup (i.e. no $( prefix and no ) suffix). Note that this is because the macros are internally stored in a format for fast lookups for TokenizedStrings.
13-Oct-2015 Fixes #3. Added macros to C.CModule, MajorVersion (defaults to "1") and MinorVersion (defaults to "0"), but can be overridden in Module's Init functions. Some platforms support writing this data natively into the generated binaries, or including into the filenames.
13-Oct-2015 Bam.Core.TokenizedString.Create now accepts an optional flags parameter. One of these flags is EFlags.DeferredExpansion, which allows macro expansion to be deferred for one level. For example, if a Tool uses a Macro, which is defined in the Module using the tool, this now expands properly.
10-Oct-2015 Added short version of option --createdebugproject, -p.
10-Oct-2015 Renamed FileKey from Publisher.Collation.PackageRoot to Publisher.Collation.PublishingRoot.
09-Oct-2015 Fixes #1. Added function to publish OSX frameworks, IncludeFramework. This requires that the module to be published derives from C.ExternalFramework, and implements the properties indicating which files, directories and symbolic links need to be published from that framework.
09-Oct-2015 Fixes #28. Added support for publishing symbolic links.
08-Oct-2015 Added Bam.Core.MacroList.AddVerbatim.
08-Oct-2015 Fixes #26. Added command line option, --stats, which displays memory, object count, and timing information at the end of a build.
07-Oct-2015 Removed verbatim optional argument to Bam.Core.TokenizedString.Create. Use CreateVerbatim instead.
07-Oct-2015 Added Bam.Core.TokenizedString.CreateVerbatim utility function, for strings that require no parsing.
07-Oct-2015 Fixes #25. Nested function calls in TokenizedStrings are now supported.
07-Oct-2015 Bam.Core.TokenizedString now understands the @normalize() function, returning the full normalized path of the argument.
06-Oct-2015 Fixes #24. Added function to publish whole directories, IncludeDirectory() on the Collation object.
06-Oct-2015 Fixes #23. Fixed the regular expression tokenizing a string for functions, when multiple functions are present.
06-Oct-2015 Bam.Core.TokenizedString.Create will return null if the format string passed in is null. To create an empty tokenized string, use string.Empty, or Bam.Core.Module.MakePlaceholderPath.
06-Oct-2015 Bam.Core.TokenizedString now understands the @dir() function, returning the parent directory of the argument.
06-Oct-2015 C.ObjectFile no longer defines an inputpath macro, for interaction with the corresponding source file. Instead, the source file's TokenizedString path is referenced directly, via positional tokens.
06-Oct-2015 Bam.Core.Module now has a utility function to create TokenizedStrings that reference macros in that module, CreateTokenizedString. Also, a new function, MakePlaceholderPath(), which is a TokenizedString on the module intended for replacement at a later time (e.g. create a module empty, then set the source path). This is so that other modules can reference this placeholder before the path is set.
06-Oct-2015 Fixes #22. TokenizedString creation now accepts an optional list of TokenizedStrings. This is to allow references to strings other than those in macro lists, e.g. source/output paths of modules. These are referred to as positional tokens, and may be referenced by a zero-based numeric index as a token (usual token notation), e.g. "$(0)" refers to the first string in that list.
03-Oct-2015 Fixes #21. Each file published is now a separate module, which enables both parallelism and that tools can be assigned to each published object.
03-Oct-2015 Running command line tools no longer leaves the standard input stream open. This avoids tools that request user input from indefinitely pausing the build - instead they will fail because there will never be any input.
03-Oct-2015 Fixes #20. Exceptions thrown during a threaded build are now displayed with full details and stack trace to the user.
03-Oct-2015 Fixes #19. Bam executed with -d/--debug did not use debug symbols in Mono.
02-Oct-2015 Added VisualCCommon.IRuntimeLibraryPathMeta interface, implemented by VisualC.MetaData class, to return the paths for the C and C++ runtime libraries for the version of VisualC. 32 or 64-bit versions are requested by the argument to the interface functions, MSVCR (C runtime) and MSVCP (C++ runtime).
02-Oct-2015 Fixes #18. Added Publisher.Collation.IncludeFile function(s), so that files not associated with modules can be published.
02-Oct-2015 Added Bam.Core.TokenizedString.ParseAndQuoteIfNecessary. If the parsed string contains a space, the returned string from this function is wrapped in (double) quotes. Otherwise, the parsed string is returned.
02-Oct-2015 Fixes #15. Environment variables can now be used in TokenizedStrings. For example, a tokenized string can be "$(HOME)" to get the HOME environment variable.
02-Oct-2015 Fixes #16. VisualC builds in Native build mode no longer default to statically linking the CRT, which was different to VSSolution build modes (dynamically linking the CRT). The default is now to dynamically link (to reduce binary size) against the non-debug CRT. This can be changed on the VisualCCommon.ICommonCompilerSettings.RuntimeLibrary property.
v1.0 alpha 4
Changes since alpha 3:
25-Sep-2015 Fixes #12. To compiler, archiver and linker settings, added a new interface C.IAdditionalSettings, which allows a back door to setting arbitrary tool options, in the event of an existing interface not exposing the necessary property. This simply avoids having to modify packages to add a command line switch. VisualStudio and Xcode support provided. But note that Xcode does not expose any visible custom archiver setting.
25-Sep-2015 Fixes #11. C.ConsoleApplication and C.GuiApplication and C.DynamicLibrary allowed the creation of C++ source containers through class methods. These methods have been moved to the equivalent C.Cxx module types.
24-Sep-2015 Fixes #10. Do not assume that gcc, g++, ar, and ld, all reside on the same path. For instance, Gcc-4.8 on CentOS 6 is installed to /opt/rh/devtoolset-2, while ar and ld reside in /usr/bin.
23-Sep-2015 Fixes #9. Each conversion package (CommandLineProcessor, VisualStudioProcessor, XcodeProjectProcessor) now uses Bam.Core.Settings.Interfaces(), and reflection, to invoke each settings interface on a Settings object. Fetching the interfaces through reflection does not guarantee an order, so the precedence of interfaces are queried through Bam.Core.SettingsPrecedenceAttribute. C.ICommonArchiverSettings has a very negative precedence, as some librarians (ar) require the output file to be specified as the last argument before all input files.
23-Sep-2015 Issue #9. Added Bam.Core.SettingsPrecedenceAttribute, applicable to interfaces, that takes an integer value to define an order of evaluation. This is in respect of Settings interfaces (implement Bam.Core.ISettingsBase). By default, precedence is zero. A more negative value indicates that the interface is processed later, while a more positive value indicates that the interface is processed earlier.
23-Sep-2015 Issue #9. Added Bam.Core.Settings.Interfaces() that returns an IEnumerable returning the interfaces on the Settings object.
BuildAMation v1.0 alpha 3
Changes since alpha 2
21-Sep-2015 Fixes #8. PATH is now searched for gcc, and versions checked, rather than assuming installation directories, and naming conventions.
21-Sep-2015 Check whether a C source directory exists before enumerating it for files.
21-Sep-2015 Fixes #6. Wrapped Module creation in a try catch, which will throw a new exception type, Bam.Core.ModuleCreationException, capturing the module type in the inner most module creation call, so that accurate module information can be provided when reporting the error.
21-Sep-2015 First check whether a package repository exists before enumerating it for packages.
21-Sep-2015 Fixes #7. Unhandled exceptions fell through the bam executable. Now catch and report them, for a cleaner exit.
19-Sep-2015 Fixes #2. The Bam test harness can now specify other package repositories to test, as well as the default in Bam. There is a requirement of a bamtests.py in the tests folder of each repository, naming each valid Test, and the build modes in which it can be run.
18-Sep-2015 bam --version now reports the directory containing the Bam core assembly.
18-Sep-2015 Dependent package definition files did not add their package repositories into the search paths, in order to resolve all packages they reference.
BuildAMation 1.0 alpha 2
Changes since a1
18-Sep-2015 C.ConsoleApplication.RequiredToExist now accepts a comma separated list of modules to apply public patches of T to. This is used, for instance, for plugins that do not need to be linked against an application, but do expose a header to compile against.
18-Sep-2015 Public patches on a module are now inherited by all modules that reside within it. For example, a C static library has a public patch to provide an include path; all source containers within that static library automatically use that patch.
v1.0 alpha 1
This is v1.0 alpha 1 release of BuildAMation.
Please see the BuildAMation website for more information.