--- /dev/null
+Build
+Build.tmp
+++ /dev/null
-#!/usr/bin/env bash
-# -----------------------------------------------------------------------------
-# Build automation script designed to work with autotools.
-# -----------------------------------------------------------------------------
-set -e
-
-# -----------------------------------------------------------------------------
-# Functions used by Build.rc
-#
-declare prefix
-function setPrefix () {
- if (( $# != 1 )); then
- echo "Usage: $0 PREFIX" >&2
- return 1
- fi
- prefix="$1"
-}
-
-function setPath () {
- if (( $# == 0 )); then
- echo "Usage: $0 VAR [PATH, ...]" >&2
- return 1
- fi
-
- local -r var="$1"
- local paths=("${@:2}")
-
- case ${#paths[@]} in
- 0)
- unset $var;;
- 1)
- export $var="$paths";;
- *)
- export $var="${paths[0]}"
- local path
- for path in "${paths[@]:1}"; do
- local val=$(eval echo \$$var)
- export $var="$val:$path"
- done
- esac
-
- # Special case for PATH: we prepend "$prefix/bin" to it.
- if [[ $var = "PATH" ]]; then
- PATH="$prefix/bin:$PATH"
- fi
-}
-
-declare -a configArgs
-function setConfigArgs () {
- configArgs=( \
- --prefix="$prefix" \
- PATH="$PATH" \
- "$@" \
- )
-}
-
-declare buildTarget
-function setBuildTarget () {
- if (( $# != 1 )); then
- echo "Usage: $0 TARGET" >&2
- return 1
- fi
- buildTarget="$1"
-}
-
-declare docDirectory
-function setDocDirectory () {
- if (( $# != 1 )); then
- echo "Usage: $0 DIRECTORY" >&2
- return 1
- fi
- docDirectory="$1"
-}
-
-declare docTarget
-function setDocTarget () {
- if (( $# != 1 )); then
- echo "Usage: $0 TARGET" >&2
- return 1
- fi
- docTarget="$1"
-}
-
-# -----------------------------------------------------------------------------
-# Setting variables
-#
-setPrefix "/usr/local"
-setPath PATH "/usr/bin" "/bin"
-setConfigArgs
-setBuildTarget "all"
-setDocDirectory "."
-setDocTarget "all"
-
-if [ -f "Build.rc" ]; then
- . "Build.rc"
-fi
-
-# -----------------------------------------------------------------------------
-# Main
-#
-function run () {
- if (( $# == 0 )); then
- echo "run: Usage: run CMD [ARG...]" >&2
- return 1
- fi
-
- if [[ -t 1 ]]; then
- # Bold + Green
- echo -ne "\e[1;32m"
- echo "$@"
- echo -ne "\e[0m"
- else
- echo "$@"
- fi
-
- $@
-}
-
-function detectNumCPUs () {
- if sysctl -n "hw.ncpu" 2>/dev/null; then
- # This works for most BSDs.
- :
- elif grep -qF processor /proc/cpuinfo 2>/dev/null; then
- # Linux sucks...
- grep -cF processor /proc/cpuinfo
- else
- echo "WARNING: I don't know how to detect the number of processors on this platform." >&2
- echo 1
- fi
-}
-
-function runMake () {
- run gmake -w -j $(detectNumCPUs) $@
-}
-
-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
- run autoreconf -v -i -f
- fi
-
- if [[ ! -f "_build/Makefile" ]]; then
- run mkdir -p _build
- run pushd _build
- run ../configure "${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 install () {
- build
- runMake -C "_build" install
-}
-
-case "$1" in
- ""|"build") build ;;
- "doc" ) doc ;;
- "check" ) check ;;
- "clean" ) clean ;;
- "dist" ) dist ;;
- "install" ) install;;
- *)
- echo "Usage: $0 [build | doc | check | clean | dist | install]" >&2
- exit 1
-esac
--- /dev/null
+SOURCES = \
+ src/preamble.bash \
+ lib/detectNumCPUs.bash \
+ lib/run.bash \
+ lib/setPath.bash \
+ src/functions.bash \
+ src/resource.bash \
+ src/main.bash \
+ $(NULL)
+
+all: Build
+
+clean:
+ rm -f Build Build.tmp
+
+Build: $(SOURCES)
+ rm -f $@.tmp
+ for i in $(SOURCES); do \
+ cat $$i >> $@.tmp; \
+ echo >> $@.tmp; \
+ done
+ head -q -n -1 $@.tmp > $@
+ rm -f $@.tmp
+
+.PHONY: all clean
\ No newline at end of file
--- /dev/null
+function detectNumCPUs () {
+ if sysctl -n "hw.ncpu" 2>/dev/null; then
+ # This works for most BSDs.
+ :
+ elif grep -qF processor /proc/cpuinfo 2>/dev/null; then
+ # Linux sucks...
+ grep -cF processor /proc/cpuinfo
+ else
+ echo -n "WARNING: $0 doesn't know how to detect the number of" >&2
+ echo -n "processors on this platform. Assuming we have just one..." >&2
+ echo 1
+ fi
+}
--- /dev/null
+function run () {
+ if (( $# == 0 )); then
+ echo "run: Usage: run CMD [ARG...]" >&2
+ return 1
+ fi
+
+ # Is the /dev/stdout opened to a tty?
+ if [[ -t 1 ]]; then
+ # Bold + Green
+ echo -ne "\e[1;32m"
+ echo "$@"
+ echo -ne "\e[0m"
+ else
+ echo "$@"
+ fi
+
+ $@
+}
--- /dev/null
+function setPath () {
+ if (( $# == 0 )); then
+ echo "Usage: $0 VAR [PATH, ...]" >&2
+ return 1
+ fi
+
+ local -r var="$1"
+ local paths=("${@:2}")
+
+ case ${#paths[@]} in
+ 0)
+ unset $var;;
+ 1)
+ export $var="$paths";;
+ *)
+ export $var="${paths[0]}"
+ local path
+ for path in "${paths[@]:1}"; do
+ local val=$(eval echo \$$var)
+ export $var="$val:$path"
+ done
+ esac
+
+ # THINKME: Special case for PATH: we prepend "$prefix/bin" to it.
+ if [[ $var = "PATH" ]]; then
+ PATH="$prefix/bin:$PATH"
+ fi
+}
--- /dev/null
+declare prefix
+function setPrefix () {
+ if (( $# != 1 )); then
+ echo "Usage: $0 PREFIX" >&2
+ return 1
+ fi
+ prefix="$1"
+}
+
+declare -a configArgs
+function setConfigArgs () {
+ configArgs=( \
+ --prefix="$prefix" \
+ PATH="$PATH" \
+ "$@" \
+ )
+}
+
+declare buildTarget
+function setBuildTarget () {
+ if (( $# != 1 )); then
+ echo "Usage: $0 TARGET" >&2
+ return 1
+ fi
+ buildTarget="$1"
+}
+
+declare docDirectory
+function setDocDirectory () {
+ if (( $# != 1 )); then
+ echo "Usage: $0 DIRECTORY" >&2
+ return 1
+ fi
+ docDirectory="$1"
+}
+
+declare docTarget
+function setDocTarget () {
+ if (( $# != 1 )); then
+ echo "Usage: $0 TARGET" >&2
+ return 1
+ fi
+ docTarget="$1"
+}
--- /dev/null
+function runMake () {
+ run gmake -w -j $(detectNumCPUs) $@
+}
+
+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
+ run autoreconf -v -i -f
+ fi
+
+ if [[ ! -f "_build/Makefile" ]]; then
+ run mkdir -p _build
+ run pushd _build
+ run ../configure "${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 install () {
+ build
+ runMake -C "_build" install
+}
+
+case "$1" in
+ ""|"build") build ;;
+ "doc" ) doc ;;
+ "check" ) check ;;
+ "clean" ) clean ;;
+ "dist" ) dist ;;
+ "install" ) install;;
+ *)
+ echo "Usage: $0 [build | doc | check | clean | dist | install]" >&2
+ exit 1
+esac
--- /dev/null
+#!/usr/bin/env bash
+#-----------------------------------------------------------------------------#
+# THIS SCRIPT IS AUTOMATICALLY GENERATED FROM SEVERAL SOURCE FILES. #
+# DO NOT EDIT THIS BY HAND, OR YOU WILL REGRET IT LATER. #
+#-----------------------------------------------------------------------------#
+# #
+# "Build" -- an automation script designed to work with autotools. #
+# #
+# Author / Maintainer: #
+# PHO <pho@cielonegro.org> #
+# #
+# Master repository: #
+# git://git.cielonegro.org/autobuild.git #
+# #
+# License: #
+# Public Domain #
+# #
+# Bug tracker: #
+# Not available currently. #
+# #
+# Please report any bugs, feature requests, and pull requests (the #
+# most preferred!) to the maintainer presented above. #
+# #
+#-----------------------------------------------------------------------------#
+set -e
--- /dev/null
+setPrefix "/usr/local"
+setPath PATH "/usr/bin" "/bin"
+setConfigArgs
+setBuildTarget "all"
+setDocDirectory "."
+setDocTarget "all"
+
+if [ -f "Build.rc" ]; then
+ . "Build.rc"
+fi