[PATCH] libgloss: restore multilib settings in subdir makefiles

Mike Frysinger <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
Commit 754f8def0dfeeb43afa5a96ad1971fd0ef02c419 ("libgloss: merge stub
arch configure scripts up a level") had an unintended side-effect: the
MULTI* variables in the Makefiles no longer get rewritten at configure
time in the subdirs.  Only the top-level Makefile still is.  This is
because the configure integration of multilib (both the way libgloss
did it manually and the way AM_ENABLE_MULTILIB does it) only rewrites
"Makefile".

We could try propagating the MULTI* variables from libgloss/Makefile
down via FLAGS_TO_PASS, but this runs into a limitation: the multilib
logic uses this variable to switch from libgloss/ to each multilib
libgloss/, and libgloss uses this variable to enter subdirectories.
The latter we want, but the former ends up overridding the Makefile
environment.  We could side-step that with some GNU Make directives,
but it feels like we're getting a bit too deep down the rabbit hole.

Instead, let's call config-ml.in ourselves for each subdir Makefile
that the top-level configure generates.  This restores the previous
behavior and should be less risky in general.

This logic should be unnecessary when/if we switch libgloss over to
a non-recursive Automake build (since all build+install settings are
in the single libgloss/Makefile), but it'll be a while before we can
land that rework, so let's fix this up now.
---
 libgloss/arm/configure    |  2 ++
 libgloss/arm/configure.ac |  4 +++-
 libgloss/configure        | 15 ++++++++++++++-
 libgloss/configure.ac     | 13 +++++++++++++
 4 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/libgloss/arm/configure b/libgloss/arm/configure
index 8e3866b567b4..84878afffae3 100755
--- a/libgloss/arm/configure
+++ b/libgloss/arm/configure
@@ -3926,6 +3926,8 @@ $as_echo X"$file" |
   done
 }
  ;;
+    "cpu-init/Makefile":F)     ac_file=cpu-init/Makefile . ${srcdir}/../../config-ml.in
+   ;;
     "default-1":C)
 # Only add multilib support code if we just rebuilt the top-level
 # Makefile.
diff --git a/libgloss/arm/configure.ac b/libgloss/arm/configure.ac
index 2b98b5453725..3d7ba7da15d6 100644
--- a/libgloss/arm/configure.ac
+++ b/libgloss/arm/configure.ac
@@ -62,7 +62,9 @@ AC_SUBST_FILE(host_makefile_frag)
 # Configure cpu init plug-ins
 if test -d "${srcdir}/cpu-init"; then
   subdirs="${subdirs} cpu-init"
-  AC_CONFIG_FILES([cpu-init/Makefile])
+  AC_CONFIG_FILES([cpu-init/Makefile], [dnl
+    ac_file=cpu-init/Makefile . ${srcdir}/../../config-ml.in
+  ])
   AC_SUBST(subdirs)
 fi
 
diff --git a/libgloss/configure b/libgloss/configure
index 3fc20d6a2ab8..64f08cf166e1 100755
--- a/libgloss/configure
+++ b/libgloss/configure
@@ -4794,6 +4794,9 @@ target_makefile_frag_path=$target_makefile_frag
 
 
 
+ac_config_commands="$ac_config_commands default-1"
+
+
 # Default to --enable-multilib
 # Check whether --enable-multilib was given.
 if test "${enable_multilib+set}" = set; then :
@@ -4829,7 +4832,7 @@ if test $cross_compiling = no && test $multilib = yes \
    cross_compiling=maybe
 fi
 
-ac_config_commands="$ac_config_commands default-1"
+ac_config_commands="$ac_config_commands default-2"
 
 
 ac_config_files="$ac_config_files Makefile"
@@ -5554,6 +5557,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 # INIT-COMMANDS
 #
 AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+subdirs="$subdirs"
 
 srcdir="$srcdir"
 host="$host"
@@ -5618,6 +5622,7 @@ do
     "libnosys/Makefile") CONFIG_FILES="$CONFIG_FILES libnosys/Makefile" ;;
     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+    "default-2") CONFIG_COMMANDS="$CONFIG_COMMANDS default-2" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
 
   *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
@@ -6347,6 +6352,14 @@ $as_echo X"$file" |
 }
  ;;
     "default-1":C)
+for subdir in $subdirs; do
+  case " $CONFIG_FILES " in
+   *" $subdir/Makefile "*)
+     ac_file=$subdir/Makefile . ${multi_basedir}/config-ml.in
+     ;;
+  esac
+done ;;
+    "default-2":C)
 # Only add multilib support code if we just rebuilt the top-level
 # Makefile.
 case " $CONFIG_FILES " in
diff --git a/libgloss/configure.ac b/libgloss/configure.ac
index ac812c69bafb..1fa877729f9b 100644
--- a/libgloss/configure.ac
+++ b/libgloss/configure.ac
@@ -330,6 +330,19 @@ target_makefile_frag_path=$target_makefile_frag
 AC_SUBST(target_makefile_frag_path)
 AC_SUBST_FILE(target_makefile_frag)
 
+dnl AM_ENABLE_MULTILIB only processes the top-level Makefile, but we want the
+dnl multilib settings to propagate to all sub-Makefiles that we recurse into
+dnl too.  This can go away if we ever get rid of sub-Makefiles and only use
+dnl Automake + makefile include fragments.
+AC_OUTPUT_COMMANDS([
+for subdir in $subdirs; do
+  case " $CONFIG_FILES " in
+   *" $subdir/Makefile "*)
+     ac_file=$subdir/Makefile . ${multi_basedir}/config-ml.in
+     ;;
+  esac
+done], [subdirs="$subdirs"])
+
 AM_ENABLE_MULTILIB(, ..)
 
 AC_CONFIG_FILES([Makefile])
-- 
2.34.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.