Changes§
v0.4.1§
2019-07-05
Bug fixes§
- Fix using semantic options in
global_options
v0.4.0§
2019-07-05
New features§
- Compilers and linkers now support semantic options, abstracting away the differences between compiler flavors
- Add support for cross-compilation
- Toolchain files can be used to simplify setting up build configuration options
- Add
info,warn, anddebugbuiltins to let build scripts print messages via bfg's logging system whole_archive()now works with MSVC linkers- Add support for module-definition files when linking
.exeor.dllfiles - Build steps now have a (customizable) friendly description when using the Ninja backend
- Makefiles generated by bfg now have a
cleantarget
Breaking changes§
- MSVC builds now automatically set
/EHscto improve standards-compliance and mimic Visual Studio's default MSBuild configuration - Paths are now parsed in a platform-agnostic manner, which may cause issues for certain esoteric pathnames (e.g. POSIX paths that look like Windows paths)
env.platformhas been split intoenv.host_platformandenv.target_platform- MinGW now makes DLLs named
<name>.dllinstead oflib<name>.dll - Platform names are reworked;
'windows'is now'winnt'and'darwin'is'macos'
Bug fixes§
- Fix support for packaging as a Python Wheel
- Default options for
arare nowcrinstead ofcruto support versions ofarthat default to deterministic builds - Fix building Java projects with OpenJDK 8+
- Fix loading Boost packages from
C:\Booston Windows - Libraries are linked via their absolute paths where possible to help disambiguate libraries with the same name
v0.3.1§
2018-06-01
Bug fixes§
- Fix an issue with creating the build directory during the configuration process
v0.3.0§
2018-06-01
New features§
- Replace
system_package()andpkgconfig_package()with a generic package resolver:package() - Add
headersargument topackage()to find header files andlibsto specify library names if pkg-config lookup fails - Support Java/Scala
- Add support for user-defined arguments
- Add a
library()function that builds shared and/or static libraries per the user's preference - Add support for generating pkg-config
.pcfiles - Allow executing files that require an interpreter or other wrapper via
command()ortest()/test_driver()without explicitly specifying the wrapper; supports all languages buildable by bfg9000, plus Lua, Perl, Python, and Ruby - Add
env.run(),env.execute(), andenv.run_arguments()to simplify executing programs during configuration - Add a
framework()function to specify macOS frameworks to use for a build - Improve detection of compiler flavors by checking version information
- Automatically colorize clang/gcc output under Ninja
- Add support for uninstalling builds
- Add
static_link_optionstostatic_library()to specify options to pass to the static linker - Add a
bfg9000 envcommand to print the environment variables used during configuration - Automatically request sudo elevation when installing builds to a system directory
Breaking changes§
directory()andheader_directory()no longer automatically include all files within them (passinclude='*'for the old behavior)- The
includeargument for compiling object files has been replaced byincludes - When creating a static library,
link_optionsnow specifies options that will be forwarded along to the dynamic linker, rather than options for the static linker itself - The
optionsargument fortest()/test_driver()has been deprecated; add any options to the first argument (cmd) instead test()no longer converts its first argument to ageneric_file()- Splitting POSIX shell strings (used for compile and link options as well as
environment vars on POSIX like
CPPFLAGS) no longer parses escape characters
Bug fixes§
- Improve logging of syntax errors in
build.bfgfiles - Fix usage of nested shared libraries when linking with GNU ld (via
-rpath-link) - Installing directories from the srcdir now correctly installs their contents
to the installation root for that type (e.g. a header directory of
foo/barinstalls its contents to$includedir) - Fix generation of dependencies for the
teststarget - Improve escaping for paths when using Make on Windows (previously users had to escape backslashes themselves)
- Fix an issue with quotation marks being stripped for some commands on Windows with the Ninja backend
v0.2.0§
2016-06-26
New features§
- Support Objective C/C++
- Partially support Fortran (simple projects work, but more complex things probably don't)
- Improved error reporting
- Warn users if necessary build tools can't be found by bfg9000
- Automatically include runtime dependencies when installing a binary
- Support
@rpathon OS X - Allow fetching bfg's version from
build.bfgfiles viabfg9000_version - Support versioning of shared libraries on POSIX systems
- Support resolving packages via pkg-config
- Locally-built static libraries now forward their options to binaries that link to them
whole_archive()now forwards its arguments on tostatic_library()- Use doppel for installing files instead of install(1)
- Support
command()andalias()rules under MSBuild - Add support for building a distribution of the sources (
make dist) - Allow running custom build steps via
build_step()
Breaking changes§
- Configuring a build is now performed by
bfg9000 configure DIRECTORY header()renamed toheader_file()env.compiler(lang)replaced byenv.builder(lang).compilerenv.linker(lang, mode)replaced byenv.builder(lang).linker(mode)env.compiler(lang).flavorreplaced byenv.builder(lang).flavor
Bug fixes§
- Fix fetching
CFLAGSfrom the environment (it used to tryCCFLAGS) - Fix execution context of
build.bfgfiles; this caused strange issues with list/generator comprehensions
v0.1.1§
2016-01-21
- Fix an issue with installing the package from PyPI
v0.1.0§
2016-01-20
- Initial release
- Support for C and C++ builds on Linux, Mac, and Windows (MinGW included) via Make, Ninja, and MSBuild.