aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorнаб <[email protected]>2022-04-11 23:41:14 +0200
committerBrian Behlendorf <[email protected]>2022-05-10 10:20:46 -0700
commit779ac93e9600fb50d7901bbddc6e5c6ed970845e (patch)
tree03b89bfc1676e570dd3688d61154dafc26334110
parent612b8dff5bc3d827efb864a199a62bda1a419254 (diff)
autogen.sh: paper over automake <1.14's lack of %reldir% support
Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Ahelenia Ziemiańska <[email protected]> Closes #13316
-rwxr-xr-xautogen.sh62
1 files changed, 61 insertions, 1 deletions
diff --git a/autogen.sh b/autogen.sh
index f56cd68be..c81709018 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -1,2 +1,62 @@
#!/bin/sh
-autoreconf -fiv "$(dirname "$0")" && rm -rf "$(dirname "$0")"/autom4te.cache
+[ "${0%/*}" = "$0" ] || cd "${0%/*}" || exit
+
+# %reldir%/%canon_reldir% (%D%/%C%) only appeared in automake 1.14, but RHEL/CentOS 7 has 1.13.4
+# This is an (overly) simplistic preprocessor that papers around this for the duration of the generation step,
+# and can be removed once support for CentOS 7 is dropped
+automake --version | awk '{print $NF; exit}' | (
+ IFS=. read -r AM_MAJ AM_MIN _
+ [ "$AM_MAJ" -gt 1 ] || [ "$AM_MIN" -ge 14 ]
+) || {
+ process_root() {
+ root="$1"; shift
+
+ grep -q '%[CD]%' "$root/Makefile.am" || return
+ find "$root" -name Makefile.am "$@" | while read -r dir; do
+ dir="${dir%/Makefile.am}"
+ grep -q '%[CD]%' "$dir/Makefile.am" || continue
+
+ reldir="${dir#$root}"
+ reldir="${reldir#/}"
+
+ canon_reldir="$(printf '%s' "$reldir" | tr -C 'a-zA-Z0-9@_' '_')"
+
+ reldir_slash="$reldir/"
+ canon_reldir_slash="${canon_reldir}_"
+ [ -z "$reldir" ] && reldir_slash=
+ [ -z "$reldir" ] && canon_reldir_slash=
+
+ echo "$dir/Makefile.am" >&3
+ sed -i~ -e "s:%D%/:$reldir_slash:g" -e "s:%D%:$reldir:g" \
+ -e "s:%C%_:$canon_reldir_slash:g" -e "s:%C%:$canon_reldir:g" "$dir/Makefile.am"
+ done 3>>"$substituted_files"
+ }
+
+ rollback() {
+ while read -r f; do
+ mv "$f~" "$f"
+ done < "$substituted_files"
+ rm -f "$substituted_files"
+ }
+
+
+ echo "Automake <1.14; papering over missing %reldir%/%canon_reldir% support" >&2
+
+ substituted_files="$(mktemp)"
+ trap rollback EXIT
+
+ roots="$(sed '/Makefile$/!d;/module/d;s:^\s*:./:;s:/Makefile::;/^\.$/d' configure.ac)"
+
+ IFS="
+"
+ for root in $roots; do
+ root="${root#./}"
+ process_root "$root"
+ done
+
+ set -f
+ # shellcheck disable=SC2086,SC2046
+ process_root . $(printf '!\n-path\n%s/*\n' $roots)
+}
+
+autoreconf -fiv && rm -rf autom4te.cache