[gcc/devel/ranger] Allow CONFIG_SHELL to override build-time shell in mkheaders

Aldy Hernandez aldyh@gcc.gnu.org
Wed Jun 17 19:04:34 GMT 2020


https://gcc.gnu.org/g:afbffe08646f0fce346a2e3525474e498a9051fa

commit afbffe08646f0fce346a2e3525474e498a9051fa
Author: Alexandre Oliva <oliva@adacore.com>
Date:   Thu Feb 20 22:09:03 2020 -0300

    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.

Diff:
---
 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 <oliva@adacore.com>
+
+	* mkheaders.in: Don't require build-time shell on host.
+
 2020-02-13  Matheus Castanho  <msc@linux.ibm.com>
 
 	* 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


More information about the Gcc-cvs mailing list