| util-linux build system |
| ======================= |
| |
| - the build system is non-recursive, individual subdirectories use |
| Makemodule.am files. These files are merged together by automake |
| into one global Makefile in the top-level directory |
| |
| - all final build results (binaries, libtool scripts) are stored in top-level |
| source directory |
| |
| - all Makemodule.am files have to be designed as top-level makefiles, it |
| means with full paths (e.g. foo_SOURCES = subdir/foo.c) |
| |
| - always use '+=' operator for global variables (e.g. bin_PROGRAMS += foo) |
| |
| - use libcommon.la (without path!) for lib/ stuff (e.g. foo_LDADD = libcommon.la) |
| |
| - for libblkid, libuuid and libmount use lib<name>.la in _LDADD and |
| -I$(ul_lib<name>_incdir) in _CFLAGS, for example |
| |
| foo_LDADD = libmount.la |
| foo_CFLAGS = -I$(ul_libmount_incdir) |
| |
| - always use suffixes for hooks, for example |
| |
| install-exec-hook-foo: |
| ln -sf foo foooo |
| |
| INSTALL_EXEC_HOOKS += install-exec-hook-foo |
| |
| |
| - all util-linux specific autoconf macros use UL_ prefix |
| |
| - utils in Makefile.am files are enabled/disabled according to BUILD_<NAME> |
| conditions (AM_CONDITIONAL), for example: |
| |
| if BUILD_HWCLOCK |
| ... |
| endif |
| |
| - "if BUILD_<NAME>" blocks are never nested within another "if BUILD_<NAME>", |
| all dependencies have to be resolved in configure.ac (see UL_REQUIRES_BUILD()) |
| |
| - all BUILD_<NAME> in configure.am are always based on build_<name> variables, |
| for example: |
| |
| AM_CONDITIONAL([BUILD_HWCLOCK], test "x$build_hwclock" = xyes) |
| |
| the $build_<name> should be available in whole configure script |
| |
| - AC_ARG_ENABLE() status is always stored in $enable_<name> variable, possible |
| setting: |
| |
| "check" - util/feature is optional, if any subcomponent (function, lib, |
| ...) is missing a warning is printed and the util/feature is |
| disabled |
| |
| "yes" - util/feature is required, if any subcomponent (function, lib, |
| ...) is missing an error is printed and ./configure aborted |
| |
| "no" - the util/feature is unwanted |
| |
| The default status is always defined by UL_DEFAULT_ENABLE() and it might be |
| globally modified by $ul_default_estate (see AC_ARG_ENABLE([all-programs])). |
| |
| - it's possible to disable all programs, but enable just one (or more) |
| explicitly specified, for example: |
| |
| ./configure --disable-all-programs --enable-hwclock |
| |
| - some basic scenarios for the ./configure script are defined in the |
| tools/config-gen.d/ directory. If you want to use these predefined scenarios |
| then call |
| |
| ./tools/config-gen [<scenario> ...] |
| |
| for example |
| |
| ./tools/config-gen all selinux |
| |
| will build all utils with enabled selinux support. You can also define some |
| CFLAGS, for example: |
| |
| CFLAGS=$(rpm --eval '%optflags') ./tools/config-gen all |
| |
| will use the default distro flags. |
| |
| WARNING: config-gen is not designed for end-user or downstream distributions! |
| It's for development purpose only. All end-users and downstream have |
| to use standard ./configure script only. |
| |
| - the tools/config-gen script is also used for build system regression tests, |
| the test is not enabled by default, you have to use |
| |
| tests/run.sh build-sys --force |