Changes§
v0.5.1§
2019-12-07
Bug fixes§
- Depfiles generated by compile steps are now properly included into Makefiles
- Include directories passed to via
includeand libraries passed vialibsare now listed before those frompackageswhen building - Fixed linking to shared libraries located in the source directory
v0.5.0§
2019-11-25
New features§
- Add
generated_source()to allow generating source code from domain-specific languages - Add support for
lex,yacc, and Qt build tools (moc,rcc,uic) - Add the ability to use placeholders for
build_step()andcommand() - Add an
auto_file()function that infers the kind of file based on its extension;build_step()now uses this by default for outputs - Add
always_outdatedargument tobuild_step() - Add
copy_file()andcopy_files()functions default()now returns the files passed into itinstall()now returns the installed forms of the files passed into it- Add
safe_str()andsafe_format()to help safely build command string - Expose
Pathobject to bfg scripts - Add
directoryas an option forobject_file(),generated_source(),copy_file(), and their list-variants - Add
langandintermediate_dirsarguments toproject()for modifying project-wide settings - Add
srcdirbuiltin to toolchain files
Breaking changes§
find_files()redesigned and split intofind_files()andfind_paths(); simple cases should still work, but more complex uses will need adjusted- pkg-config
.pcfiles generated by bfg9000 no longer include rpath flags - Explicitly passing
langto a build step now overrides the languages of any input files when determining the builder argsandkwargsno longer supported forbuild_step(); use a lambda instead- Options specified on the command line (e.g. install locations) now override settings in toolchain files
- Implicitly-defined object files (e.g. those generated by
executable()) are placed in an intermediate directory; callproject(intermediate_dirs=False)to disable this
Bug fixes§
- Include
options.bfgin dist tarballs - Fix escaping of
~in Makefiles - Symbolic links (e.g. from versioned shared libraries) are now properly installed as symlinks
- Generated header directories are now included as dependencies of compilation steps
- Default install locations are now based on the target platform instead of the host platform
- Shared libraries with
soversions can now be used withpkg_config()
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.