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
, anddebug
builtins 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
.exe
or.dll
files - Build steps now have a (customizable) friendly description when using the Ninja backend
- Makefiles generated by bfg now have a
clean
target
Breaking changes§
- MSVC builds now automatically set
/EHsc
to 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.platform
has been split intoenv.host_platform
andenv.target_platform
- MinGW now makes DLLs named
<name>.dll
instead 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
ar
are nowcr
instead ofcru
to support versions ofar
that default to deterministic builds - Fix building Java projects with OpenJDK 8+
- Fix loading Boost packages from
C:\Boost
on 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
headers
argument topackage()
to find header files andlibs
to 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
.pc
files - 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_options
tostatic_library()
to specify options to pass to the static linker - Add a
bfg9000 env
command 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
include
argument for compiling object files has been replaced byincludes
- When creating a static library,
link_options
now specifies options that will be forwarded along to the dynamic linker, rather than options for the static linker itself - The
options
argument 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.bfg
files - 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/bar
installs its contents to$includedir
) - Fix generation of dependencies for the
tests
target - 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
@rpath
on OS X - Allow fetching bfg's version from
build.bfg
files 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).compiler
env.linker(lang, mode)
replaced byenv.builder(lang).linker(mode)
env.compiler(lang).flavor
replaced byenv.builder(lang).flavor
Bug fixes§
- Fix fetching
CFLAGS
from the environment (it used to tryCCFLAGS
) - Fix execution context of
build.bfg
files; 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.