diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/genmake | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/scripts/genmake b/scripts/genmake new file mode 100755 index 000000000..79a89175a --- /dev/null +++ b/scripts/genmake @@ -0,0 +1,93 @@ +#!/bin/sh -e + +# ./scripts/deplist system | ./scripts/genmake [0|1] + +## +# This script reads from stdin and generates +# a Makefile in the repository's root. +# +# The first argument to this script is a value {0,1} +# indicating whether to generate real rules or fake +# (simulation) rules. Fake rules might be 'sleep 1' +# or can be user-defined. +# +# NOTE: out-of-tree builds are not supported. +# + +HERE="$(dirname $(readlink -f ${0}))"; +DEST="${HERE}"/../Makefile; +TEMP="$(mktemp)"; + +## +# Build recipes. +# +# FIXME: is $(@D) POSIX or $(%/built=%) required? +# +rule_real=$(cat <<"EOF" + @cd $(@D) && abuild -r +EOF +); +rule_fake=$(cat <<"EOF" + @echo $(@D) + @sleep 1 +EOF +); + +## +# Read deplist from stdin, synthesize Makefile targets. +# +awk '{ $(NF+1)=$1; print $0 }' `# duplicate first column to last` \ + | sed > "${TEMP}" -E `# use extended regex, write to temp file ` \ + -e 's/ /: /' `# append colon to first column` \ + -e '/: /s@( |$)@/built @2g' `# append '/built' to all dependencies` \ + -e 's/ $//g' `# trim trailing spaces` \ + ; + +## +# Internal; convenience only. +# +list=$(grep : "${TEMP}" \ + | cut -d: -f1 \ + | xargs \ +); + +## +# Create (or truncate) the output Makefile. +# +# Default target builds everything. +# +printf "all: %s\n" "${list}" > "${DEST}"; + +## +# Append generic target build recipe. +# +rule=; +case ${1} in + 0) rule="${rule_real}"; ;; + 1) rule="${rule_fake}"; ;; + *) printf "E: Invalid mode '%s'\n" "${1}"; exit 1; ;; +esac +cat >> "${DEST}" <<EOF +%/built: %/APKBUILD +${rule} + @touch \$@ +clean: + @find \$(CURDIR) -type f -name built -print -delete +distclean: + @rm -fv \ + \$(CURDIR)/Makefile \ + \$(CURDIR)/scripts/.index \ + \$(CURDIR)/scripts/sgrep \ + \$(CURDIR)/scripts/tsort \ + ; +EOF + +## +# Append target rules to output Makefile. +# +cat >> "${DEST}" "${TEMP}"; + +## +# Clean up. +# +rm "${TEMP}"; |