From 2dae1cf81619606b133888675d5ebf1b688d9d7c Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Sun, 26 Feb 2017 20:42:32 -0800 Subject: Require GNU sed After much struggling with macos (BSD) sed and even getting everything work in crosstool-ng itself, I had to abandon that because some components rely on GNU syntax. Specifically, GNU libc uses '/.../{H;g}' (note absense of the separator after 'g'). So, revert the -r/-E detection and check for sed's being of GNU origin. MacOS people, sorry, but you'd have to install GNU sed. Signed-off-by: Alexey Neyman diff --git a/Makefile.in b/Makefile.in index 4e8db5c..f0034cb 100644 --- a/Makefile.in +++ b/Makefile.in @@ -204,41 +204,18 @@ $(PROG_NAME): ct-ng.in Makefile %: %.in Makefile $(call sed_it) +__paths_vars = install bash awk grep make sed libtool \ + libtoolize objcopy objdump readelf patch gperf + # We create a script fragment that is parseable from inside a Makefile, -# and one from inside a shell script +# and one from inside a shell script. paths.mk: FORCE @echo " GEN '$@'" - @(echo 'export install=$(install)'; \ - echo 'export bash=$(bash)'; \ - echo 'export awk=$(awk)'; \ - echo 'export grep=$(grep)'; \ - echo 'export make=$(make)'; \ - echo 'export sed=$(sed)'; \ - echo 'export libtool=$(libtool)'; \ - echo 'export libtoolize=$(libtoolize)'; \ - echo 'export objcopy=$(objcopy)'; \ - echo 'export objdump=$(objdump)'; \ - echo 'export readelf=$(readelf)'; \ - echo 'export patch=$(patch)'; \ - echo 'export gperf=$(gperf)'; \ - ) >$@ + @{ $(foreach w,$(__paths_vars),$(if $($w),echo 'export $w=$(subst ','\'',$($w))';)) :; } >$@ paths.sh: FORCE @echo " GEN '$@'" - @(echo 'export install="$(install)"'; \ - echo 'export bash="$(bash)"'; \ - echo 'export awk="$(awk)"'; \ - echo 'export grep="$(grep)"'; \ - echo 'export make="$(make)"'; \ - echo 'export sed="$(sed)"'; \ - echo 'export libtool="$(libtool)"'; \ - echo 'export libtoolize="$(libtoolize)"'; \ - echo 'export objcopy="$(objcopy)"'; \ - echo 'export objdump="$(objdump)"'; \ - echo 'export readelf="$(readelf)"'; \ - echo 'export patch="$(patch)"'; \ - echo 'export gperf="$(gperf)"'; \ - ) >$@ + @{ $(foreach w,$(__paths_vars),$(if $($w),echo 'export $w="$(subst ','\'',$($w))"';)) :; } >$@ config/configure.in: FORCE @echo " GEN '$@'" diff --git a/configure.ac b/configure.ac index 11c5a8e..986d280 100644 --- a/configure.ac +++ b/configure.ac @@ -162,24 +162,18 @@ AC_ARG_VAR([INSTALL], [Specify the full path to a BSD-compatible install]) AC_PROG_INSTALL ACX_WITH_DEPRECATED([grep], [GREP]) -AC_ARG_VAR([INSTALL], [Specify the full path to GNU grep]) +AC_ARG_VAR([GREP], [Specify the full path to GNU grep]) AC_PROG_GREP AC_PROG_EGREP AS_IF([test "$EGREP" != "$GREP -E"], [AC_MSG_ERROR([egrep is not $GREP -E])]) -ACX_WITH_DEPRECATED([sed], [SED]) -AC_ARG_VAR([INSTALL], [Specify the full path to GNU sed]) -AC_PROG_SED -AC_MSG_CHECKING([whether sed understands -r -i -e]) -echo foo > .ct-ng.sed.test -${SED} -r -i -e 's/f(o)o/b\1ar/' .ct-ng.sed.test >/dev/null 2>&1 -rc=$? -content=`cat .ct-ng.sed.test` -rm -f .ct-ng.sed.test -AS_IF([test "$rc:$content" = "0:boar"], - [AC_MSG_RESULT([yes])], - [AC_MSG_ERROR([sed does not accept -r -i -e])]) +ACX_PROG_VERSION_REQ_STRICT([SED], + [GNU sed >= 4.0], + [sed], + [gsed sed], + ['\(GNU sed\) [4-9]\.']) +AC_ARG_VAR([SED], [Specify the full path to GNU sed]) AC_PROG_LN_S @@ -294,42 +288,42 @@ ACX_PROG_VERSION([LIBTOOL], [GNU libtool >= 2.4], [libtool], [glibtool libtool], - ['^libtool \(GNU libtool\) ([3-9]\.|2.[4-9]|2.[1-3][0-9])'], + ['\(GNU libtool\) ([3-9]\.|2.[4-9]|2.[1-3][0-9])'], [libtool_2_4_or_newer]) ACX_PROG_VERSION([LIBTOOLIZE], [GNU libtoolize >= 2.4], [libtoolize], [glibtoolize libtoolize], - ['^libtoolize \(GNU libtool\) ([3-9]\.|2.[4-9]|2.[1-3][0-9])'], + ['\(GNU libtool\) ([3-9]\.|2.[4-9]|2.[1-3][0-9])'], [libtoolize_2_4_or_newer]) ACX_PROG_VERSION([AUTOCONF], [GNU autoconf >= 2.65], [AUTOCONF], [autoconf], - ['^autoconf \(GNU Autoconf\) ([3-9]\.|2\.[7-9][0-9]|2\.6[5-9])'], + ['\(GNU Autoconf\) ([3-9]\.|2\.[7-9][0-9]|2\.6[5-9])'], [autoconf_2_63_or_newer]) ACX_PROG_VERSION([AUTORECONF], [GNU autoreconf >= 2.63], [autoreconf], [autoreconf], - ['^autoreconf \(GNU Autoconf\) ([3-9]\.|2\.[7-9][0-9]|2\.6[3-9])'], + ['\(GNU Autoconf\) ([3-9]\.|2\.[7-9][0-9]|2\.6[3-9])'], [autoreconf_2_63_or_newer]) ACX_PROG_VERSION([AUTOMAKE], [GNU automake >= 1.15], [automake], [automake], - ['automake \(GNU automake\) ([2-9]\.|1\.[2-9][0-9]|1\.1[5-9])'], + ['\(GNU automake\) ([2-9]\.|1\.[2-9][0-9]|1\.1[5-9])'], [automake_1_15_or_newer]) ACX_PROG_VERSION([M4], [GNU m4 >= 1.4.12], [m4], [gm4 m4], - ['^m4 \(GNU M4\) ([2-9]\.|1\.[5-9]|1\.[1-4][0-9]|1\.4\.[2-9][0-9]|1\.4\.1[2-9])'], + ['\(GNU M4\) ([2-9]\.|1\.[5-9]|1\.[1-4][0-9]|1\.4\.[2-9][0-9]|1\.4\.1[2-9])'], [gnu_m4_1_4_12_or_newer]) #---------------------------------------- diff --git a/scripts/build/companion_libs/110-mpfr.sh b/scripts/build/companion_libs/110-mpfr.sh index a7b7f72..5a89077 100644 --- a/scripts/build/companion_libs/110-mpfr.sh +++ b/scripts/build/companion_libs/110-mpfr.sh @@ -41,28 +41,6 @@ do_mpfr_extract() { fi CT_Popd ;; - 1.*|2.0.*|2.1.*|2.2.*|2.3.*) - CT_Pushd "${CT_SRC_DIR}/mpfr-${CT_MPFR_VERSION}" - if [ ! -f .autotools.ct-ng ]; then - CT_DoLog DEBUG "Re-building autotools files" - CT_DoExecLog ALL autoreconf -fi - # Starting with libtool-1.9f, config.{guess,sub} are no longer - # installed without -i, but starting with libtool-2.2.6, they - # are no longer removed without -i. Sight... Just use -i with - # libtool >=2 - # See: http://sourceware.org/ml/crossgcc/2008-11/msg00046.html - # and: http://sourceware.org/ml/crossgcc/2008-11/msg00048.html - libtoolize_opt= - case "$(libtoolize --version |head -n 1 |awk '{ print $(NF); }')" in - 0.*) ;; - 1.*) ;; - *) libtoolize_opt=-i;; - esac - CT_DoExecLog ALL libtoolize -f ${libtoolize_opt} - touch .autotools.ct-ng - fi - CT_Popd - ;; esac } diff --git a/scripts/crosstool-NG.sh.in b/scripts/crosstool-NG.sh.in index b39dee4..902c15d 100644 --- a/scripts/crosstool-NG.sh.in +++ b/scripts/crosstool-NG.sh.in @@ -148,7 +148,7 @@ CT_DoLog INFO "Building environment variables" CT_TestAndAbort "'CT_PREFIX_DIR' is not set: where should I install?" -z "${CT_PREFIX_DIR}" # Avoid multiple '/' in the prefix dir, it breaks relocatability -CT_PREFIX_DIR="$( "${sed}" -r -e 's:/+:/:g; s:/*$::;' <<<"${CT_PREFIX_DIR}" )" +CT_PREFIX_DIR="$( ${sed} -r -e 's:/+:/:g; s:/*$::;' <<<"${CT_PREFIX_DIR}" )" # Second kludge: merge user-supplied target CFLAGS with architecture-provided # target CFLAGS. Do the same for LDFLAGS in case it happens in the future. diff --git a/scripts/functions b/scripts/functions index 84054d5..eaa1a2b 100644 --- a/scripts/functions +++ b/scripts/functions @@ -49,7 +49,7 @@ CT_LoadConfig() { fi # Double eval: first eval substitutes option name, second eval unescapes quotes # and whitespace. - for o in `set | sed -rn 's/^(CT_[A-Za-z0-9_]*_ARRAY)=.*/\1/p'`; do + for o in `set | ${sed} -rn 's/^(CT_[A-Za-z0-9_]*_ARRAY)=.*/\1/p'`; do eval "eval $o=(\"\$$o\")" done } @@ -394,7 +394,7 @@ CT_SanitizeVarDir() { for var in "$@"; do eval "old_dir=\"\${${var}}\"" - new_dir=$( echo "${old_dir}" | awk ' + new_dir=$( echo "${old_dir}" | ${awk} ' { isabs = $1 == "" # Started with a slash trail = $NF == "" # Ending with a slash @@ -491,7 +491,7 @@ CT_Which() { # to the highest entire second # Usage: CT_DoDate CT_DoDate() { - date "$1" |sed -r -e 's/%?N$/000000000/;' + date "$1" |${sed} -r -e 's/%?N$/000000000/;' } CT_STEP_COUNT=1 @@ -514,7 +514,7 @@ CT_DoStep() { CT_EndStep() { local stop=$(CT_DoDate +%s%N) local duration=$(printf "%032d" $((stop-${CT_STEP_START[${CT_STEP_COUNT}]})) \ - |sed -r -e 's/([[:digit:]]{2})[[:digit:]]{7}$/\.\1/; s/^0+//; s/^\./0\./;' + |${sed} -r -e 's/([[:digit:]]{2})[[:digit:]]{7}$/\.\1/; s/^0+//; s/^\./0\./;' ) local elapsed=$(printf "%02d:%02d" $((SECONDS/60)) $((SECONDS%60))) local level="${CT_STEP_LEVEL[${CT_STEP_COUNT}]}" @@ -1002,7 +1002,7 @@ CT_GetGit() { local url="${3}" local _out_cset="${4}" - local ref=$(echo "${cset_or_ref}" | sed -n 's/^ref=\(.*\)/\1/p') + local ref=$(echo "${cset_or_ref}" | ${sed} -n 's/^ref=\(.*\)/\1/p') if [ -n "$ref" ]; then local matches=$(git ls-remote --exit-code "$url" --refs "${ref}") local result=$? @@ -1182,9 +1182,9 @@ CT_ExtractGit() { if [ -z "${ref}" ]; then ref_type=head ref=$(git rev-list -n1 HEAD) - elif git tag |grep -E "^${ref}$" >/dev/null 2>&1; then + elif git tag |{grep} -E "^${ref}$" >/dev/null 2>&1; then ref_type=tag - elif git branch -a --no-color |grep -E "^. ${ref}$" >/dev/null 2>&1; then + elif git branch -a --no-color |${grep} -E "^. ${ref}$" >/dev/null 2>&1; then ref_type=branch elif date -d "${ref}" >/dev/null 2>&1; then ref_type=date @@ -1425,7 +1425,7 @@ CT_DoBuildTargetTuple() { # Sanity checks __sed_alias="" if [ -n "${CT_TARGET_ALIAS_SED_EXPR}" ]; then - __sed_alias=$(echo "${CT_TARGET}" |sed -r -e "${CT_TARGET_ALIAS_SED_EXPR}") + __sed_alias=$(echo "${CT_TARGET}" |${sed} -r -e "${CT_TARGET_ALIAS_SED_EXPR}") fi case ":${CT_TARGET_VENDOR}:${CT_TARGET_ALIAS}:${__sed_alias}:" in :*" "*:*:*:) CT_Abort "Don't use spaces in the vendor string, it breaks things.";; @@ -1498,7 +1498,7 @@ CT_DoTarballIfExists() { CT_DoLog DEBUG " Saving '${dir}'" { tar c -C "${dir}" -v -f - "${extra_tar_opts[@]}" . \ |"${compress[@]}" >"${tarball}.tar${tar_ext}" ; - } 2>&1 |sed -r -e 's/^/ /;' |CT_DoLog STATE + } 2>&1 |${sed} -r -e 's/^/ /;' |CT_DoLog STATE else CT_DoLog STATE " Not saving '${dir}': does not exist" fi @@ -1525,7 +1525,7 @@ CT_DoExtractTarballIfExists() { CT_DoExecLog DEBUG mkdir -p "${dir}" { "${uncompress[@]}" "${tarball}.tar${tar_ext}" \ |tar x -C "${dir}" -v -f - "${extra_tar_opts[@]}" ; - } 2>&1 |sed -r -e 's/^/ /;' |CT_DoLog STATE + } 2>&1 |${sed} -r -e 's/^/ /;' |CT_DoLog STATE else CT_DoLog STATE " Not restoring '${dir}': does not exist" fi @@ -1548,12 +1548,12 @@ CT_DoSaveState() { # We must omit shell functions, and some specific bash variables # that break when restoring the environment, later. We could do # all the processing in the awk script, but a sed is easier... - set |awk ' + set |${awk} ' BEGIN { _p = 1; } $0~/^[^ ]+ \(\)/ { _p = 0; } _p == 1 $0 == "}" { _p = 1; } - ' |sed -r -e '/^BASH_(ARGC|ARGV|LINENO|SOURCE|VERSINFO)=/d; + ' |${sed} -r -e '/^BASH_(ARGC|ARGV|LINENO|SOURCE|VERSINFO)=/d; /^(UID|EUID)=/d; /^(FUNCNAME|GROUPS|PPID|SHELLOPTS)=/d;' >"${state_dir}/env.sh" @@ -1613,10 +1613,10 @@ CT_KconfigSetOption() { local value="$2" local file="$3" - grep -E -q "^${option}=.*" "${file}" && \ - sed -i -r -e "s;^${option}=.*$;${option}=${value};" "${file}" || \ - grep -E -q "^# ${option} is not set$" "${file}" && \ - sed -i -r -e "s;^# ${option} is not set$;${option}=${value};" "${file}" || \ + ${grep} -E -q "^${option}=.*" "${file}" && \ + ${sed} -i -r -e "s;^${option}=.*$;${option}=${value};" "${file}" || \ + ${grep} -E -q "^# ${option} is not set$" "${file}" && \ + ${sed} -i -r -e "s;^# ${option} is not set$;${option}=${value};" "${file}" || \ echo "${option}=${value}" >> "${file}" } @@ -1635,9 +1635,9 @@ CT_KconfigDisableOption() { local option="${1}" local file="${2}" - grep -E -q "^# ${option} is not set$" "${file}" || \ - grep -E -q "^${option}=.*$" "${file}" && \ - sed -i -r -e "s;^${option}=.*$;# ${option} is not set;" "${file}" || \ + ${grep} -E -q "^# ${option} is not set$" "${file}" || \ + ${grep} -E -q "^${option}=.*$" "${file}" && \ + ${sed} -i -r -e "s;^${option}=.*$;# ${option} is not set;" "${file}" || \ echo "# ${option} is not set" >> "${file}" } @@ -1648,10 +1648,10 @@ CT_KconfigDeleteOption() { local option="${1}" local file="${2}" - grep -E -q "^# ${option} is not set$" "${file}" && \ - sed -i -r -e "/^# ${option} is not set$/d" "${file}" || \ - grep -E -q "^${option}=.*$" "${file}" && \ - sed -i -r -e "/^${option}=.*$/d" "${file}" || true + ${grep} -E -q "^# ${option} is not set$" "${file}" && \ + ${sed} -i -r -e "/^# ${option} is not set$/d" "${file}" || \ + ${grep} -E -q "^${option}=.*$" "${file}" && \ + ${sed} -i -r -e "/^${option}=.*$/d" "${file}" || true } # Multilib iterator. The caller should be in a directory where the directories @@ -1720,7 +1720,7 @@ CT_IterateMultilibs() { # We do supply original multi_os_dir for consumers that need to look inside # GCC's directories (e.g. to locate the libraries), under the name of # multi_os_dir_gcc. - multi_flags=$( echo "${multilib#*;}" | sed -r -e 's/@/ -/g;' ) + multi_flags=$( echo "${multilib#*;}" | ${sed} -r -e 's/@/ -/g;' ) multi_dir="${multilib%%;*}" multi_os_dir=$( "${CT_TARGET}-${CT_CC}" -print-multi-os-directory ${multi_flags} ) multi_root=$( "${CT_TARGET}-${CT_CC}" -print-sysroot ${multi_flags} ) @@ -1740,7 +1740,7 @@ CT_IterateMultilibs() { # the architecture-specific functions. multi_index=1 for multilib in "${multilibs[@]}"; do - multi_flags=$( echo "${multilib#*;}" | sed -r -e 's/@/ -/g;' ) + multi_flags=$( echo "${multilib#*;}" | ${sed} -r -e 's/@/ -/g;' ) multi_dir="${multilib%%;*}" multi_os_dir=$( "${CT_TARGET}-${CT_CC}" -print-multi-os-directory ${multi_flags} ) multi_os_dir_gcc="${multi_os_dir}" diff --git a/scripts/patch-renumber.sh b/scripts/patch-renumber.sh index c56473b..c9650ce 100755 --- a/scripts/patch-renumber.sh +++ b/scripts/patch-renumber.sh @@ -59,7 +59,7 @@ for p in "${src}/"*.patch*; do newname="$(printf "%03d-%s" \ "${cpt}" \ "$( basename "${p}" \ - |"${sed}" -r -e 's/^[[:digit:]]+[-_]//' \ + |${sed} -r -e 's/^[[:digit:]]+[-_]//' \ -e "${sed_re}" \ )" \ )" diff --git a/scripts/saveSample.sh.in b/scripts/saveSample.sh.in index 646c189..2e413bd 100644 --- a/scripts/saveSample.sh.in +++ b/scripts/saveSample.sh.in @@ -50,7 +50,7 @@ force_default_opts=( \ ) regexp=${force_default_opts[*]} regexp=${regexp// /|} -grep -v -E '^(# )?CT_('"${regexp}"')' .config > .defconfig +${grep} -v -E '^(# )?CT_('"${regexp}"')' .config > .defconfig # Function to copy a file to the sample directory # Needed in case the file is already there (think of a previously available sample) -- cgit v0.10.2-6-g49f6