From: Gary V. Vaughan Date: Mon, 28 Oct 2013 04:38:23 +0000 (+1300) Subject: bootstrap: search for a non-truncating grep binary. X-Git-Tag: v2.4.2.427~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=13d640337a652ce5ba6c92c585c6ae91ad0dbc02;p=thirdparty%2Flibtool.git bootstrap: search for a non-truncating grep binary. On at least Unixware 7.1.4, the first grep binary on PATH is unable to process the extract-trace scripts. * gl/build-aux/funclib.sh (GRUP): Search PATH for a grep binary that doesn't truncate its own output if available, and set GREP accordingly. * Makefile.am (SCRIPT_ENV): Add setting for GREP. * bootstrap: Regenerate. Reported by Tim Rice. Signed-off-by: Gary V. Vaughan --- diff --git a/Makefile.am b/Makefile.am index 01a87cb95..fe269ed90 100644 --- a/Makefile.am +++ b/Makefile.am @@ -54,7 +54,7 @@ rebuild = rebuild=:; revision=`$(lt__cd) $(srcdir) && $(git_version_gen) | sed ' # Bootstrap. # # ---------- # -SCRIPT_ENV = SED='$(SED)' +SCRIPT_ENV = GREP='$(GREP)' SED='$(SED)' build_scripts = $(srcdir)/$(aux_dir)/announce-gen \ $(srcdir)/$(aux_dir)/do-release-commit-and-tag \ diff --git a/bootstrap b/bootstrap index f1376b137..ad8c09c53 100755 --- a/bootstrap +++ b/bootstrap @@ -159,6 +159,7 @@ else bs_echo='sh -c $bs_echo_body bs_echo' fi + # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { @@ -218,6 +219,58 @@ test -z "$SED" && { } +# Unless the user overrides by setting GREP, search the path for either GNU +# grep, or the sed that truncates its output the least. +test -z "$GREP" && { + _G_path_prog_max=0 + _G_path_prog_found=false + _G_save_IFS=$IFS; IFS=$PATH_SEPARATOR + for _G_dir in $PATH:/usr/xpg4/bin; do + IFS=$_G_save_IFS + test -z "$_G_dir" && _G_dir=. + for _G_prog_name in grep ggrep; do + for _exeext in '' .EXE; do + _G_path_prog="$_G_dir/$_G_prog_name$_exeext" + func_executable_p "$_G_path_prog" || continue + case `"$_G_path_prog" --version 2>&1` in + *GNU*) _G_path_GREP=$_G_path_prog _G_path_prog_found=: ;; + *) + _G_count=0 + $bs_echo_n 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + $bs_echo 'GREP' >> conftest.nl + "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test $_G_count -gt $_G_path_prog_max; then + # Best one so far, save it but keep looking for a better one + _G_path_GREP=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test $_G_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + ;; + esac + + $_G_path_prog_found && break 3 + done + done + done + IFS=$_G_save_IFS + test -z "$_G_path_GREP" && { + echo "no acceptable grep could be found in \$PATH" >&2 + exit 1 + } + GREP=$_G_path_GREP +} + + ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## @@ -229,9 +282,8 @@ test -z "$SED" && { : ${CP="cp -f"} : ${ECHO="$bs_echo"} -: ${EGREP="grep -E"} -: ${FGREP="grep -F"} -: ${GREP="grep"} +: ${EGREP="$GREP -E"} +: ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} diff --git a/gl/build-aux/funclib.sh b/gl/build-aux/funclib.sh index d42b27b1e..db5f6c433 100644 --- a/gl/build-aux/funclib.sh +++ b/gl/build-aux/funclib.sh @@ -149,6 +149,7 @@ else bs_echo='sh -c $bs_echo_body bs_echo' fi + # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { @@ -208,6 +209,58 @@ test -z "$SED" && { } +# Unless the user overrides by setting GREP, search the path for either GNU +# grep, or the sed that truncates its output the least. +test -z "$GREP" && { + _G_path_prog_max=0 + _G_path_prog_found=false + _G_save_IFS=$IFS; IFS=$PATH_SEPARATOR + for _G_dir in $PATH:/usr/xpg4/bin; do + IFS=$_G_save_IFS + test -z "$_G_dir" && _G_dir=. + for _G_prog_name in grep ggrep; do + for _exeext in '' .EXE; do + _G_path_prog="$_G_dir/$_G_prog_name$_exeext" + func_executable_p "$_G_path_prog" || continue + case `"$_G_path_prog" --version 2>&1` in + *GNU*) _G_path_GREP=$_G_path_prog _G_path_prog_found=: ;; + *) + _G_count=0 + $bs_echo_n 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + $bs_echo 'GREP' >> conftest.nl + "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test $_G_count -gt $_G_path_prog_max; then + # Best one so far, save it but keep looking for a better one + _G_path_GREP=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test $_G_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + ;; + esac + + $_G_path_prog_found && break 3 + done + done + done + IFS=$_G_save_IFS + test -z "$_G_path_GREP" && { + echo "no acceptable grep could be found in \$PATH" >&2 + exit 1 + } + GREP=$_G_path_GREP +} + + ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## @@ -219,9 +272,8 @@ test -z "$SED" && { : ${CP="cp -f"} : ${ECHO="$bs_echo"} -: ${EGREP="grep -E"} -: ${FGREP="grep -F"} -: ${GREP="grep"} +: ${EGREP="$GREP -E"} +: ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"}