mpd/bs
Eric Wong 8a4dff14ad Add the bs build system from mpd-ke
Dealing with autotools is too painful when having
to deal with multiple build environments and
configurations.

git-svn-id: https://svn.musicpd.org/mpd/trunk@7368 09075e82-0dd4-0310-85a5-a0d7c8717e4f
2008-06-01 22:24:55 +00:00
..
config.mk.default Add the bs build system from mpd-ke 2008-06-01 22:24:55 +00:00
cross-arch.sh Add the bs build system from mpd-ke 2008-06-01 22:24:55 +00:00
deps-audio.mk Add the bs build system from mpd-ke 2008-06-01 22:24:55 +00:00
deps-conflicts.mk Add the bs build system from mpd-ke 2008-06-01 22:24:55 +00:00
deps-input.mk Add the bs build system from mpd-ke 2008-06-01 22:24:55 +00:00
deps-misc.mk Add the bs build system from mpd-ke 2008-06-01 22:24:55 +00:00
mkconfig-header.sh Add the bs build system from mpd-ke 2008-06-01 22:24:55 +00:00
mkconfig.h.mk Add the bs build system from mpd-ke 2008-06-01 22:24:55 +00:00
mkdep.sh Add the bs build system from mpd-ke 2008-06-01 22:24:55 +00:00
mkdir_p.sh Add the bs build system from mpd-ke 2008-06-01 22:24:55 +00:00
mkdist.sh Add the bs build system from mpd-ke 2008-06-01 22:24:55 +00:00
pkginfo-header.sh Add the bs build system from mpd-ke 2008-06-01 22:24:55 +00:00
pkginfo.sh Add the bs build system from mpd-ke 2008-06-01 22:24:55 +00:00
README Add the bs build system from mpd-ke 2008-06-01 22:24:55 +00:00

bs - build system
-----------------

bs is an attempt at a fast and reliable build system that will let
developers build mpd without having to deal with the complexity of
autotools.  It is still a work in progress, but it seems to be
reasonably usable (to developers) and fast.

It is designed from the ground up to work with cross-compilation, as well as
multiple build targets/configurations from the same source tree (using the O
variable).

It is NOT intended to replace autotools for distribution maintainers
or end users who are satisfied with autotools.

SYNOPSIS
--------

# To build mpd in a directory "output"
./build.mk O=output defconfig
$EDITOR output/config.mk
./build.mk O=output


FEATURES
--------

* Designed for cross-compilation from the ground up
* Designed to easily handle multiple build directories from the same source
  tree.  Just set the O variable when invoking make (see synopsis).
* Automatic dependency analysis (if using GCC)
* Highly configurable (no auto-detection of dependencies to get wrong)
* Simple, no archaic M4 macros or unreadable auto-generated shell or makefiles
  just human-maintained GNU Make and POSIX shell.


config.mk
---------

This is the configuration file a user should edit if they wish to
enable/disable features or tune settings.  Once created, this
will NOT be modified by the build system, so user settings will
always be preserved.


VARIABLES
---------

These are conventions, not hard and fast rules (as there's no good way to
enforce them :)
mixed-case or lower-case variables are used by bs internally.
ALL_CAPS variables are designed to be changed by users.


REQUIREMENTS
------------

GNU Make, POSIX shell + common UNIX tools (awk, sed, mv, rm, mkdir).
git (version control system) is only required if you wish to autodownload
external dependencies (flac, tremor, mad, etc...) for static linking.


BUGS
----

Modifications to config.mk will over-rebuild.

Changes to CFLAGS/LDFLAGS from the command-line are not yet checked in
rebuilds.