function runMake () { run gmake -w -j $(detectNumCPUs) "$@" } function autogen () { run autoreconf -v -i -f } function configure () { if [[ ! -f configure.ac && ! -f configure.in ]]; then echo "ERROR: Neither configure.ac nor configure.in exists in the current directory." >&2 return 1 fi if [[ ! -f configure ]]; then autogen fi if [[ ! -f "_build/Makefile" ]]; then run mkdir -p _build run pushd _build run ../configure --prefix="$prefix" "${configArgs[@]}" run popd fi } function build () { configure runMake -C "_build" $buildTarget } function doc () { configure runMake -C "_build/$docDirectory" $docTarget } function check () { build runMake -C "_build" check "$@" } function clean () { run rm -rf "_build" } function dist () { configure runMake -C "_build" dist } function distcheck () { configure runMake -C "_build" distcheck DISTCHECK_CONFIGURE_FLAGS="${configArgs[*]}" } function install () { build runMake -C "_build" install "$@" } function other () { runMake -C "_build" "$@" } function usage () { cat <&2 Usage: $0 [COMMAND] This is an automation script designed to work with autotools. It creates a directory "./_build" and builds any files inside it. Its behaviour is somewhat configurable: See "./Build.rc" for details. If no COMMAND is given, it defaults to "build". Commands: build run "$0 configure" then make(1) check [ARGS] run "$0 build" then "make check [ARGS]" autogen run autoreconf(1) configure run "$0 autogen" and "./configure" if necessary clean run "rm -rf _build" dist run "make dist" distcheck run "$0 configure" then "make distcheck" doc similar to "$0 build" but only build the documentation help print this message install [ARGS] run "$0 build" then "make install [ARGS]" -- [ARGS] run "make [ARGS]" Please report any bugs, feature requests, and pull requests (the most preferred!) to the maintainer presented in the preamble of the "$0" itself. EOF return 1 } function main () { local cmd case "$1" in ""|"build" ) cmd="build" ;; "autogen" ) cmd="autogen" ;; "configure") cmd="configure";; "doc" ) cmd="doc" ;; "check" ) cmd="check" ;; "clean" ) cmd="clean" ;; "dist" ) cmd="dist" ;; "distcheck") cmd="distcheck";; "help" ) cmd="usage" ;; "install" ) cmd="install" ;; "--" ) cmd="other" ;; *) cmd="usage" ;; esac if (( $# > 0 )); then shift fi "$cmd" "$@" } main "$@"