From afbffe08646f0fce346a2e3525474e498a9051fa Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Thu, 20 Feb 2020 22:09:03 -0300 Subject: [PATCH] Allow CONFIG_SHELL to override build-time shell in mkheaders mkheaders.in uses substitutions of @SHELL@ to run fixinc.sh and mkinstalldirs. Problem is, SHELL comes from CONFIG_SHELL for the build system, and it needs not match whatever is available at an unrelated host system after installation, when mkheaders is supposed to be run. I considered ditching the hardcoding altogether, but decided to retain it, but allowing CONFIG_SHELL and SHELL to override it, if any of them can successfully run mkinstalldirs, and if those and the substituted @SHELL@ fail, fallback to /bin/sh and to plain execution of the script, which appears to enable at least one shell on a system that doesn't typicall have a shell to recognize a script by #!/bin/sh and reinvoke itself to run it. If all of these fail, we fail, but only after telling the user to retry after setting CONFIG_SHELL, that fixincl itself also uses. for fixincludes/ChangeLog * mkheaders.in: Don't require build-time shell on host. --- fixincludes/ChangeLog | 4 ++++ fixincludes/mkheaders.in | 22 ++++++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/fixincludes/ChangeLog b/fixincludes/ChangeLog index 5b3d9ae1055..3f93053e121 100644 --- a/fixincludes/ChangeLog +++ b/fixincludes/ChangeLog @@ -1,3 +1,7 @@ +2020-02-20 Alexandre Oliva + + * mkheaders.in: Don't require build-time shell on host. + 2020-02-13 Matheus Castanho * fixinc.in: Skip machine_name fix on powerpc*-*-linux*. diff --git a/fixincludes/mkheaders.in b/fixincludes/mkheaders.in index a293a57a73b..4109dc633dd 100644 --- a/fixincludes/mkheaders.in +++ b/fixincludes/mkheaders.in @@ -77,11 +77,29 @@ libexecsubdir=${libexecdir}/gcc/${target_noncanonical}/${version} itoolsdir=${libexecsubdir}/install-tools itoolsdatadir=${libsubdir}/install-tools incdir=${libsubdir}/include-fixed -mkinstalldirs="@SHELL@ ${itoolsdir}/mkinstalldirs" +mkinstalldirs="${itoolsdir}/mkinstalldirs" cd ${itoolsdir} rm -rf ${incdir}/* +for shell in $CONFIG_SHELL $SHELL @SHELL@ /bin/sh ""; do + if { test -x $shell || test -x $shell.exe; } \ + && $shell $mkinstalldirs > /dev/null 2>&1; then + mkinstalldirs="$shell $mkinstalldirs" + break + elif test x$shell = x; then + if $mkinstalldirs > /dev/null 2>&1; then + break + elif test ! -f $mkinstalldirs; then + echo mkheaders: could not find $mkinstalldirs >&2 + exit 1 + else + echo mkheaders: please rerun with CONFIG_SHELL set to a working Bourne shell >&2 + exit 1 + fi + fi +done + for ml in `cat ${itoolsdatadir}/fixinc_list`; do sysroot_headers_suffix=`echo ${ml} | sed -e 's/;.*$//'` multi_dir=`echo ${ml} | sed -e 's/^[^;]*;//'` @@ -91,7 +109,7 @@ for ml in `cat ${itoolsdatadir}/fixinc_list`; do if [ x${STMP_FIXINC} != x ] ; then TARGET_MACHINE="${target}" target_canonical="${target}" \ MACRO_LIST="${itoolsdatadir}/macro_list" \ - @SHELL@ ./fixinc.sh ${subincdir} \ + $shell ./fixinc.sh ${subincdir} \ ${isysroot}${SYSTEM_HEADER_DIR} ${OTHER_FIXINCLUDES_DIRS} rm -f ${subincdir}/syslimits.h if [ -f ${subincdir}/limits.h ]; then -- 2.30.2