This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
(toplevel patch) Fix multilib.out dependencies and related problems.
- From: Nathanael Nerode <neroden at twcny dot rr dot com>
- To: gcc-patches at gcc dot gnu dot org, gdb-patches at sources dot redhat dot com, binutils at sources dot redhat dot com, dj at redhat dot com
- Date: Thu, 19 Dec 2002 19:04:47 -0500
- Subject: (toplevel patch) Fix multilib.out dependencies and related problems.
I think this finally fixes the various problems related to phony depdencies,
real dependencies, and multilib.out. DJ, please review. :-)
Bootstrapped on i686-pc-linux-gnu. Ran 'make'; no reconfigurations.
Removed xgcc and ran 'make'; gcc rebuilt it, and target libs were
reconfigured and built.
Ran 'make'; no reconfigurations.
Configured and built with a preset CC_FOR_TARGET; no errors from missing
dependencies.
So it all works.
Woo hoo.
I know I have some leftover BASE_CC_FOR_TARGET junk, but I'll get that later.
* configure.in: Issue 'maybe_compiler_driver'
(rather than BASE_CC_FOR_TARGET) as the dependence for multilib.out
* Makefile.tpl: Use it; add regen rule for gcc/xgcc.
* Makefile.in: Regenerate.
Index: Makefile.tpl
===================================================================
RCS file: /cvs/gcc/gcc/Makefile.tpl,v
retrieving revision 1.21
diff -u -r1.21 Makefile.tpl
--- Makefile.tpl 19 Dec 2002 20:23:50 -0000 1.21
+++ Makefile.tpl 19 Dec 2002 21:16:18 -0000
@@ -784,7 +784,6 @@
# built are.
TAGS: do-TAGS
-
# --------------------------------------
# Modules which run on the build machine
# --------------------------------------
@@ -970,7 +969,7 @@
# Don't manually override CC_FOR_TARGET at make time; get it set right
# at configure time. Otherwise multilibs may be wrong.
-$(TARGET_SUBDIR)/[+module+]/multilib.out: maybe-all-gcc
+$(TARGET_SUBDIR)/[+module+]/multilib.out: @maybe_compiler_driver@
@[ -d $(TARGET_SUBDIR)/[+module+] ] || mkdir $(TARGET_SUBDIR)/[+module+];\
r=`${PWD}`; export r; \
echo "Configuring multilibs for [+module+]"; \
@@ -1264,6 +1263,14 @@
rm -rf gcc/include; \
mv gcc/tmp-include gcc/include 2>/dev/null; \
else true; fi
+
+# Special multilib.out dependence support.
+# When in-tree gcc is being used as CC_FOR_TARGET, we make
+# multilib.out depend on gcc/xgcc. So we need a rule for what to
+# do if gcc/xgcc is in fact missing. (Normally it would be either
+# up to date or newer than multilib.out, not missing.)
+gcc/xgcc:
+ $(MAKE) all-gcc
# --------------------------------------
# Dependencies between different modules
Index: configure.in
===================================================================
RCS file: /cvs/gcc/gcc/configure.in,v
retrieving revision 1.196
diff -u -r1.196 configure.in
--- configure.in 19 Dec 2002 20:23:50 -0000 1.196
+++ configure.in 19 Dec 2002 21:16:21 -0000
@@ -1698,11 +1698,23 @@
qqCXX_FOR_TARGET=`echo "$qCXX_FOR_TARGET" | sed -e 's,[$][$],$$$$,g'`
qqRAW_CXX_FOR_TARGET=`echo "$qRAW_CXX_FOR_TARGET" | sed -e 's,[$][$],$$$$,g'`
-# BASE_CC_FOR_TARGET is the actual program file of CC_FOR_TARGET,
-# for use in dependencies. Replace $$r with a relative
-# path if it's present.
-set dummy $CC_FOR_TARGET; cc_for_target_first_word=$2
-BASE_CC_FOR_TARGET=`echo "$cc_for_target_first_word" | sed -e 's,[$][$]r,.,'`
+# maybe_compiler_driver is the program file on which multilib.out depends.
+
+# If we're not using the configured GCC, for now we just punt on the
+# dependency. If you change the external compiler you're using, you
+# should know enough to reconfigure from scratch.
+maybe_compiler_driver=
+
+# On the other hand, if you are using the configured GCC...
+case "${configdirs}" in
+ *gcc*) # We're configuring GCC.
+ case "${CC_FOR_TARGET}" in
+ *xgcc*)
+ # And we are (probably) using the configured GCC.
+ maybe_compiler_driver=gcc/xgcc
+ ;;
+ esac ;;
+esac
sedtemp=sed.$$
cat >$sedtemp <<EOF
@@ -1722,7 +1734,7 @@
s%@target_configargs@%${targargs}%
s%@FLAGS_FOR_TARGET@%${FLAGS_FOR_TARGET}%
s%@CC_FOR_TARGET@%\$(STAGE_CC_WRAPPER) ${CC_FOR_TARGET}%
-s%@BASE_CC_FOR_TARGET@%${BASE_CC_FOR_TARGET}%
+s%@maybe_compiler_driver@%${maybe_compiler_driver}%
s%@GCJ_FOR_TARGET@%\$(STAGE_CC_WRAPPER) ${GCJ_FOR_TARGET}%
s%@CXX_FOR_TARGET@%\$(STAGE_CC_WRAPPER) ${qCXX_FOR_TARGET}%
s%@RAW_CXX_FOR_TARGET@%\$(STAGE_CC_WRAPPER) ${qRAW_CXX_FOR_TARGET}%