PR/17383: fix gcc in-srcdir build (take 2)

Paolo Bonzini
2005-02-26T11:48:19Z

[-- Attachment #1: Type: text/plain, Size: 403 bytes --]

The attached patch creates the host-subdir only if gcc is found in the
tree. It is even a bit simpler than the original because the topdir is
found more easily, replacing with .. every element of the path from the
topdir to the builddirs.

It has passed in-srcdir and out-of-srcdir builds of gcc (all languages,
powerpc-apple-darwin7.8.0) and binutils+gdb (i686-pc-linux-gnu). Ok for
gcc/src?

Paolo

[-- Attachment #2: fix-pr17383-3.patch --]
[-- Type: text/plain, Size: 27196 bytes --]

2005-05-25 Paolo Bonzini <bonzini@gnu.org>

PR bootstrap/17383
* Makefile.def (target_modules): Remove "stage", now unnecessary.
* Makefile.tpl (HOST_SUBDIR): New substitution.
(STAGE_HOST_EXPORTS, EXPECT, HOST_LIB_PATH, USUAL_AR_FOR_TARGET,
USUAL_AS_FOR_TARGET, USUAL_DLLTOOL_FOR_TARGET, USUAL_GCC_FOR_TARGET,
USUAL_LD_FOR_TARGET, USUAL_NM_FOR_TARGET, USUAL_OBJDUMP_FOR_TARGET,
USUAL_RANLIB_FOR_TARGET, USUAL_WINDRES_FOR_TARGET): Use it.
(Host modules, Bootstrapped modules): Use it.
(Build modules, Target modules): Do not create symlink trees,
always configure out-of-srcdir.
(distclean): Try removing $(host_subdir) with rm before using rm -rf.
* configure.in (FLAGS_FOR_TARGET, CC_FOR_TARGET, GCJ_FOR_TARGET,
GFORTRAN_FOR_TARGET, CXX_FOR_TARGET, RAW_CXX_FOR_TARGET): Use
$(HOST_SUBDIR). Create a symlink for host_subdir.

* Makefile.in: Regenerate.
* configure: Regenerate.

config:
2005-05-25 Paolo Bonzini <bonzini@gnu.org>

PR bootstrap/17383
* config/acx.m4 (GCC_TOPLEV_SUBDIRS): Set HOST_SUBDIR if an in-src
gcc build is going.

gcc:
2005-05-25 Paolo Bonzini <bonzini@gnu.org>

PR bootstrap/17383
* gcc/Makefile.in (host_subdir): New.
(build_objdir): New. Replace ../$(build_subdir) with it throughout.
* gcc/configure: Regenerate.

libjava:
2005-05-25 Paolo Bonzini <bonzini@gnu.org>

PR bootstrap/17383
* configure.ac: Call GCC_TOPLEV_SUBDIRS.
(COMPPATH): Removed.
(ZIP, GCJH): Replace it with ../$(host_subdir).
(built_gcc_dir): Add $(host_subdir).
* configure: Regenerate.
* Makefile.in, include/Makefile.in, testsuite/Makefile.in,
external/Makefile.in, external/sax/Makefile.in,
external/w3c_dom/Makefile.in: Regenerate.

libobjc:
2005-05-25 Paolo Bonzini <bonzini@gnu.org>

PR bootstrap/17383
* configure.ac: Call GCC_TOPLEV_SUBDIRS.
(Determine CFLAGS for gthread): Use $host_subdir.
* configure: Regenerate.
* Makefile.in (host_subdir): New.
(INCLUDES): Use it.

Index: Makefile.def
===================================================================
RCS file: /cvs/gcc/gcc/Makefile.def,v
retrieving revision 1.46
diff -u -r1.46 Makefile.def
--- Makefile.def 17 Jan 2005 23:50:25 -0000 1.46
+++ Makefile.def 25 Feb 2005 13:39:29 -0000
@@ -117,7 +117,7 @@
target_modules = { module= newlib; };
target_modules = { module= libgfortran; };
target_modules = { module= libobjc; };
-target_modules = { module= libtermcap; no_check=true; stage=true;
+target_modules = { module= libtermcap; no_check=true;
missing=mostlyclean;
missing=clean;
missing=distclean;
@@ -129,7 +129,7 @@
target_modules = { module= examples; no_check=true; no_install=true; };
target_modules = { module= libffi; };
target_modules = { module= libjava; raw_cxx=true; };
-target_modules = { module= zlib; stage=true; };
+target_modules = { module= zlib; };
target_modules = { module= boehm-gc; };
target_modules = { module= qthreads; };
target_modules = { module= rda; };
Index: Makefile.tpl
===================================================================
RCS file: /cvs/gcc/gcc/Makefile.tpl,v
retrieving revision 1.124
diff -u -r1.124 Makefile.tpl
--- Makefile.tpl 17 Jan 2005 23:50:27 -0000 1.124
+++ Makefile.tpl 26 Feb 2005 09:36:24 -0000
@@ -152,6 +152,9 @@
# This is set by the configure script to the arguments to use when configuring
# directories built for the host system.
HOST_CONFIGARGS = @host_configargs@
+# Host programs are put under this directory, which is . except if building
+# with srcdir=..
+HOST_SUBDIR = @host_subdir@
# This is the list of variables to export in the environment when
# configuring subdirectories for the host system.
HOST_EXPORTS = \
@@ -181,8 +184,12 @@
# Similar, for later GCC stages.
STAGE_HOST_EXPORTS = \
$(HOST_EXPORTS) \
- CC="$(STAGE_CC_WRAPPER) $$r/prev-gcc/xgcc$(exeext) -B$$r/prev-gcc/ -B$(build_tooldir)/bin/"; export CC; \
- CC_FOR_BUILD="$(STAGE_CC_WRAPPER) $$r/prev-gcc/xgcc$(exeext) -B$$r/prev-gcc/ -B$(build_tooldir)/bin/"; export CC_FOR_BUILD;
+ CC="$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/prev-gcc/xgcc$(exeext) \
+ -B$$r/$(HOST_SUBDIR)/prev-gcc/ -B$(build_tooldir)/bin/"; export CC; \
+ CC_FOR_BUILD="$(STAGE_CC_WRAPPER) \
+ $$r/$(HOST_SUBDIR)/prev-gcc/xgcc$(exeext) \
+ -B$$r/$(HOST_SUBDIR)/prev-gcc/ \
+ -B$(build_tooldir)/bin/"; export CC_FOR_BUILD;

# This is set by the configure script to the list of directories which
# should be built using the target tools.
@@ -305,8 +312,9 @@
# (Default to avoid splitting info files by setting the threshold high.)
MAKEINFOFLAGS = --split-size=5000000

-EXPECT = `if [ -f $$r/expect/expect ] ; \
- then echo $$r/expect/expect ; \
+# FIXME: expect may become a build tool?
+EXPECT = `if [ -f $$r/$(HOST_SUBDIR)/expect/expect ] ; \
+ then echo $$r/$(HOST_SUBDIR)/expect/expect ; \
else echo expect ; fi`

RUNTEST = `if [ -f $$s/dejagnu/runtest ] ; \
@@ -319,7 +327,7 @@

# This is the list of directories that may be needed in RPATH_ENVVAR
# so that programs built for the host machine work.
-HOST_LIB_PATH = $$r/bfd:$$r/opcodes
+HOST_LIB_PATH = $$r/$(HOST_SUBDIR)/bfd:$$r/$(HOST_SUBDIR)/opcodes

AS = @AS@

@@ -360,8 +368,8 @@
AR_FOR_TARGET=@AR_FOR_TARGET@
CONFIGURED_AR_FOR_TARGET=@CONFIGURED_AR_FOR_TARGET@
USUAL_AR_FOR_TARGET = ` \
- if [ -f $$r/binutils/ar ] ; then \
- echo $$r/binutils/ar ; \
+ if [ -f $$r/$(HOST_SUBDIR)/binutils/ar ] ; then \
+ echo $$r/$(HOST_SUBDIR)/binutils/ar ; \
else \
if [ '$(host)' = '$(target)' ] ; then \
echo $(AR); \
@@ -373,9 +381,9 @@
AS_FOR_TARGET=@AS_FOR_TARGET@
CONFIGURED_AS_FOR_TARGET=@CONFIGURED_AS_FOR_TARGET@
USUAL_AS_FOR_TARGET = ` \
- if [ -f $$r/gas/as-new ] ; then \
- echo $$r/gas/as-new ; \
- elif [ -f $$r/gcc/xgcc ]; then \
+ if [ -f $$r/$(HOST_SUBDIR)/gas/as-new ] ; then \
+ echo $$r/$(HOST_SUBDIR)/gas/as-new ; \
+ elif [ -f $$r/$(HOST_SUBDIR)/gcc/xgcc ]; then \
$(CC_FOR_TARGET) -print-prog-name=as ; \
else \
if [ '$(host)' = '$(target)' ] ; then \
@@ -396,7 +404,8 @@
# build libgcc2.a. We define it here so that it can itself be
# overridden on the command line.
GCC_FOR_TARGET=@GCC_FOR_TARGET@
-USUAL_GCC_FOR_TARGET = $(STAGE_CC_WRAPPER) $$r/gcc/xgcc -B$$r/gcc/ $(FLAGS_FOR_TARGET)
+USUAL_GCC_FOR_TARGET = $(STAGE_CC_WRAPPER) \
+ $$r/$(HOST_SUBDIR)/gcc/xgcc -B$$r/$(HOST_SUBDIR)/gcc/ $(FLAGS_FOR_TARGET)
LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET)

CXX_FOR_TARGET = @CXX_FOR_TARGET@
@@ -409,8 +418,8 @@
DLLTOOL_FOR_TARGET=@DLLTOOL_FOR_TARGET@
CONFIGURED_DLLTOOL_FOR_TARGET=@CONFIGURED_DLLTOOL_FOR_TARGET@
USUAL_DLLTOOL_FOR_TARGET = ` \
- if [ -f $$r/binutils/dlltool ] ; then \
- echo $$r/binutils/dlltool ; \
+ if [ -f $$r/$(HOST_SUBDIR)/binutils/dlltool ] ; then \
+ echo $$r/$(HOST_SUBDIR)/binutils/dlltool ; \
else \
if [ '$(host)' = '$(target)' ] ; then \
echo $(DLLTOOL); \
@@ -425,9 +434,9 @@
LD_FOR_TARGET=@LD_FOR_TARGET@
CONFIGURED_LD_FOR_TARGET=@CONFIGURED_LD_FOR_TARGET@
USUAL_LD_FOR_TARGET = ` \
- if [ -f $$r/ld/ld-new ] ; then \
- echo $$r/ld/ld-new ; \
- elif [ -f $$r/gcc/xgcc ]; then \
+ if [ -f $$r/$(HOST_SUBDIR)/ld/ld-new ] ; then \
+ echo $$r/$(HOST_SUBDIR)/ld/ld-new ; \
+ elif [ -f $$r/$(HOST_SUBDIR)/gcc/xgcc ]; then \
$(CC_FOR_TARGET) -print-prog-name=ld ; \
else \
if [ '$(host)' = '$(target)' ] ; then \
@@ -442,9 +451,9 @@
NM_FOR_TARGET=@NM_FOR_TARGET@
CONFIGURED_NM_FOR_TARGET=@CONFIGURED_NM_FOR_TARGET@
USUAL_NM_FOR_TARGET = ` \
- if [ -f $$r/binutils/nm-new ] ; then \
- echo $$r/binutils/nm-new ; \
- elif [ -f $$r/gcc/xgcc ]; then \
+ if [ -f $$r/$(HOST_SUBDIR)/binutils/nm-new ] ; then \
+ echo $$r/$(HOST_SUBDIR)/binutils/nm-new ; \
+ elif [ -f $$r/$(HOST_SUBDIR)/gcc/xgcc ]; then \
$(CC_FOR_TARGET) -print-prog-name=nm ; \
else \
if [ '$(host)' = '$(target)' ] ; then \
@@ -457,8 +466,8 @@
RANLIB_FOR_TARGET=@RANLIB_FOR_TARGET@
CONFIGURED_RANLIB_FOR_TARGET=@CONFIGURED_RANLIB_FOR_TARGET@
USUAL_RANLIB_FOR_TARGET = ` \
- if [ -f $$r/binutils/ranlib ] ; then \
- echo $$r/binutils/ranlib ; \
+ if [ -f $$r/$(HOST_SUBDIR)/binutils/ranlib ] ; then \
+ echo $$r/$(HOST_SUBDIR)/binutils/ranlib ; \
else \
if [ '$(host)' = '$(target)' ] ; then \
if [ x'$(RANLIB)' != x ]; then \
@@ -474,8 +483,8 @@
WINDRES_FOR_TARGET=@WINDRES_FOR_TARGET@
CONFIGURED_WINDRES_FOR_TARGET=@CONFIGURED_WINDRES_FOR_TARGET@
USUAL_WINDRES_FOR_TARGET = ` \
- if [ -f $$r/binutils/windres ] ; then \
- echo $$r/binutils/windres ; \
+ if [ -f $$r/$(HOST_SUBDIR)/binutils/windres ] ; then \
+ echo $$r/$(HOST_SUBDIR)/binutils/windres ; \
else \
if [ '$(host)' = '$(target)' ] ; then \
echo $(WINDRES); \
@@ -670,6 +679,9 @@
rm -rf $(TARGET_SUBDIR); \
else true; fi
-rm -rf $(BUILD_SUBDIR)
+ -if [ "$(HOST_SUBDIR)" != "." ]; then \
+ rm -rf $(HOST_SUBDIR); \
+ else true; fi
-rm -f texinfo/po/Makefile texinfo/po/Makefile.in texinfo/info/Makefile
-rm -f texinfo/doc/Makefile texinfo/po/POTFILES
-rmdir texinfo/doc texinfo/info texinfo/intl texinfo/lib 2>/dev/null
@@ -822,38 +834,12 @@
echo Configuring in $(BUILD_SUBDIR)/[+module+]; \
cd "$(BUILD_SUBDIR)/[+module+]" || exit 1; \
case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(BUILD_SUBDIR)" in \
- .) topdir="../$(srcdir)" ;; \
- *) topdir="../../$(srcdir)" ;; \
- esac ;; \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(BUILD_SUBDIR)/[+module+]/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `/$(srcdir) ;; \
esac; \
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(BUILD_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/[+module+] "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
- else \
- srcdiroption="--srcdir=$${topdir}/[+module+]"; \
- libsrcdir="$$s/[+module+]"; \
- fi; \
+ srcdiroption="--srcdir=$${topdir}/[+module+]"; \
+ libsrcdir="$$s/[+module+]"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
$(BUILD_CONFIGARGS) $${srcdiroption} \
@@ -885,24 +871,20 @@
maybe-configure-[+module+]: configure-[+module+]
configure-[+module+]:
@[+ IF bootstrap +]test -f stage_last && exit 0; \
- [+ ENDIF bootstrap +]test ! -f [+module+]/Makefile || exit 0; \
- [ -d [+module+] ] || mkdir [+module+]; \
+ [+ ENDIF bootstrap +]test ! -f $(HOST_SUBDIR)/[+module+]/Makefile || exit 0; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/[+module+] ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
echo Configuring in [+module+]; \
- cd [+module+] || exit 1; \
+ cd $(HOST_SUBDIR)/[+module+] || exit 1; \
case $(srcdir) in \
- \.) \
- srcdiroption="--srcdir=."; \
- libsrcdir=".";; \
- /* | [A-Za-z]:[\\/]*) \
- srcdiroption="--srcdir=$(srcdir)/[+module+]"; \
- libsrcdir="$$s/[+module+]";; \
- *) \
- srcdiroption="--srcdir=../$(srcdir)/[+module+]"; \
- libsrcdir="$$s/[+module+]";; \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(HOST_SUBDIR)/[+module+]/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `/$(srcdir) ;; \
esac; \
+ srcdiroption="--srcdir=$${topdir}/[+module+]"; \
+ libsrcdir="$$s/[+module+]"; \
$(SHELL) $${libsrcdir}/configure \
$(HOST_CONFIGARGS) $${srcdiroption} [+extra_configure_flags+] \
|| exit 1
@@ -919,8 +901,8 @@
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(SET_LIB_PATH) \
$(HOST_EXPORTS) \
- (cd [+module+] && $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] \
- $(TARGET-[+module+]))
+ (cd $(HOST_SUBDIR)/[+module+] && \
+ $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] $(TARGET-[+module+]))
@endif [+module+]

.PHONY: check-[+module+] maybe-check-[+module+]
@@ -937,8 +919,8 @@
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(SET_LIB_PATH) \
$(HOST_EXPORTS) \
- (cd [+module+] && $(MAKE) $(FLAGS_TO_PASS) [+
- extra_make_flags+] check); \
+ (cd $(HOST_SUBDIR)/[+module+] && \
+ $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] check)
fi
[+ ELSE check +]
check-[+module+]:
@@ -946,8 +928,8 @@
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(SET_LIB_PATH) \
$(HOST_EXPORTS) \
- (cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+
- extra_make_flags+] check)
+ (cd $(HOST_SUBDIR)/[+module+] && \
+ $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] check)
[+ ENDIF no_check +]
@endif [+module+]

@@ -963,8 +945,8 @@
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(SET_LIB_PATH) \
$(HOST_EXPORTS) \
- (cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+
- extra_make_flags+] install)
+ (cd $(HOST_SUBDIR)/[+module+] && \
+ $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] check)
[+ ENDIF no_install +]
@endif [+module+]

@@ -991,7 +973,7 @@
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
echo "Doing [+make_target+] in [+module+]" ; \
- (cd [+module+] && \
+ (cd $(HOST_SUBDIR)/[+module+] && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -1032,38 +1014,12 @@
echo Configuring in $(TARGET_SUBDIR)/[+module+]; \
cd "$(TARGET_SUBDIR)/[+module+]" || exit 1; \
case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(TARGET_SUBDIR)" in \
- .) topdir="../$(srcdir)" ;; \
- *) topdir="../../$(srcdir)" ;; \
- esac ;; \
- esac; \[+ IF stage +]
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(TARGET_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/[+module+] "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
- else \[+ ENDIF stage +]
- srcdiroption="--srcdir=$${topdir}/[+module+]"; \
- libsrcdir="$$s/[+module+]"; \[+ IF stage +]
- fi; \[+ ENDIF stage +]
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(TARGET_SUBDIR)/[+module+]/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `/$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/[+module+]"; \
+ libsrcdir="$$s/[+module+]"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
$(TARGET_CONFIGARGS) $${srcdiroption} \
@@ -1378,18 +1334,25 @@
stage[+id+]-start::
@[ -f stage_current ] && $(MAKE) `cat stage_current`-end || : ; \
echo stage[+id+] > stage_current ; \
- echo stage[+id+] > stage_last[+ FOR host_modules +][+ IF bootstrap +]
+ echo stage[+id+] > stage_last; \
+ $(mkinstalldirs) $(HOST_SUBDIR)[+
+ FOR host_modules +][+ IF bootstrap +]
@if [+ module +]
- @[ -d stage[+id+]-[+module+] ] || mkdir stage[+id+]-[+module+]; \
- set stage[+id+]-[+module+] [+module+] ; @CREATE_LINK_TO_DIR@ [+ IF prev +] ; \
- set stage[+prev+]-[+module+] prev-[+module+] ; @CREATE_LINK_TO_DIR@ [+ ENDIF prev +]
+ @cd $(HOST_SUBDIR); [ -d stage[+id+]-[+module+] ] || \
+ mkdir stage[+id+]-[+module+]; \
+ set stage[+id+]-[+module+] [+module+] ; \
+ @CREATE_LINK_TO_DIR@ [+ IF prev +] ; \
+ set stage[+prev+]-[+module+] prev-[+module+] ; \
+ @CREATE_LINK_TO_DIR@ [+ ENDIF prev +]
@endif [+ module +][+ ENDIF bootstrap +][+ ENDFOR host_modules +]

stage[+id+]-end::
@rm -f stage_current[+ FOR host_modules +][+ IF bootstrap +]
@if [+ module +]
- @set [+module+] stage[+id+]-[+module+] ; @UNDO_LINK_TO_DIR@ [+ IF prev +] ; \
- set prev-[+module+] stage[+prev+]-[+module+] ; @UNDO_LINK_TO_DIR@ [+ ENDIF prev +]
+ @cd $(HOST_SUBDIR); set [+module+] stage[+id+]-[+module+] ; \
+ @UNDO_LINK_TO_DIR@ [+ IF prev +] ; \
+ set prev-[+module+] stage[+prev+]-[+module+] ; \
+ @UNDO_LINK_TO_DIR@ [+ ENDIF prev +]
@endif [+ module +][+ ENDIF bootstrap +][+ ENDFOR host_modules +]

# Bubble a bugfix through all the stages up to stage [+id+]. They
@@ -1434,18 +1397,14 @@
$(STAGE_HOST_EXPORTS) [+ ELSE prev +] \
$(HOST_EXPORTS) [+ ENDIF prev +] \
echo Configuring stage [+id+] in [+module+] ; \
- cd [+module+] || exit 1; \
+ cd $(HOST_SUBDIR)/[+module+] || exit 1; \
case $(srcdir) in \
- \.) \
- srcdiroption="--srcdir=."; \
- libsrcdir=".";; \
- /* | [A-Za-z]:[\\/]*) \
- srcdiroption="--srcdir=$(srcdir)/[+module+]"; \
- libsrcdir="$$s/[+module+]";; \
- *) \
- srcdiroption="--srcdir=../$(srcdir)/[+module+]"; \
- libsrcdir="$$s/[+module+]";; \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(HOST_SUBDIR)/[+module+]/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `/$(srcdir) ;; \
esac; \
+ srcdiroption="--srcdir=$${topdir}/[+module+]"; \
+ libsrcdir="$$s/[+module+]"; \
$(SHELL) $${libsrcdir}/configure \
$(HOST_CONFIGARGS) $${srcdiroption} \
[+stage_configure_flags+] [+extra_configure_flags+]
@@ -1457,7 +1416,7 @@
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; [+ IF prev +] \
$(STAGE_HOST_EXPORTS) [+ ELSE prev +] \
$(HOST_EXPORTS) [+ ENDIF prev +] \
- cd [+module+] && \
+ cd $(HOST_SUBDIR)/[+module+] && \
$(MAKE) $(FLAGS_TO_PASS) [+ IF prev +] \
$(POSTSTAGE1_FLAGS_TO_PASS) [+ ENDIF prev +] \
[+stage_make_flags+] [+extra_make_flags+]
@@ -1467,7 +1426,7 @@
@[ -f [+module+]/Makefile ] || [ -f stage[+id+]-[+module+]/Makefile ] \
|| exit 0 ; \
[ -f [+module+]/Makefile ] || $(MAKE) stage[+id+]-start ; \
- cd [+module+] && \
+ cd $(HOST_SUBDIR)/[+module+] && \
$(MAKE) $(FLAGS_TO_PASS) [+ IF prev +] \
$(POSTSTAGE1_FLAGS_TO_PASS) [+ ENDIF prev +] \
[+stage_make_flags+] [+extra_make_flags+] clean
Index: configure.in
===================================================================
RCS file: /cvs/gcc/gcc/configure.in,v
retrieving revision 1.341
diff -u -r1.341 configure.in
--- configure.in 23 Feb 2005 10:12:44 -0000 1.341
+++ configure.in 26 Feb 2005 09:36:48 -0000
@@ -1988,7 +1988,7 @@
# to it. This is right: we don't want to search that directory
# for binaries, but we want the header files in there, so add
# them explicitly.
- FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -isystem $$r/gcc/include'
+ FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -isystem $$r/$(HOST_SUBDIR)/gcc/include'

# Someone might think of using the pre-installed headers on
# Canadian crosses, in case the installed compiler is not fully
@@ -2035,13 +2035,13 @@
if test "x${use_gnu_ld}" = x &&
echo " ${configdirs} " | grep " ld " > /dev/null ; then
# Arrange for us to find uninstalled linker scripts.
- FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/ld'
+ FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/$(HOST_SUBDIR)/ld'
fi

if test "x${CC_FOR_TARGET+set}" = xset; then
:
elif test -d ${srcdir}/gcc; then
- CC_FOR_TARGET='$$r/gcc/xgcc -B$$r/gcc/'
+ CC_FOR_TARGET='$$r/$(HOST_SUBDIR)/gcc/xgcc -B$$r/$(HOST_SUBDIR)/gcc/'
elif test "$host" = "$target"; then
CC_FOR_TARGET='$(CC)'
else
@@ -2052,7 +2052,7 @@
if test "x${GCJ_FOR_TARGET+set}" = xset; then
:
elif test -d ${srcdir}/gcc; then
- GCJ_FOR_TARGET='$$r/gcc/gcj -B$$r/gcc/'
+ GCJ_FOR_TARGET='$$r/$(HOST_SUBDIR)/gcc/gcj -B$$r/$(HOST_SUBDIR)/gcc/'
elif test "$host" = "$target"; then
GCJ_FOR_TARGET='gcj'
else
@@ -2063,7 +2063,7 @@
if test "x${GFORTRAN_FOR_TARGET+set}" = xset; then
:
elif test -d ${srcdir}/gcc; then
- GFORTRAN_FOR_TARGET='$$r/gcc/gfortran -B$$r/gcc/'
+ GFORTRAN_FOR_TARGET='$$r/$(HOST_SUBDIR)/gcc/gfortran -B$$r/$(HOST_SUBDIR)/gcc/'
elif test "$host" = "$target"; then
GFORTRAN_FOR_TARGET='gfortran'
else
@@ -2088,8 +2088,8 @@
# default whereas gcc does not.
# RAW_CXX_FOR_TARGET is for linking C++ or java; CXX_FOR_TARGET is for
# all other cases.
- CXX_FOR_TARGET='$$r/gcc/g++ -B$$r/gcc/ -nostdinc++ '$libstdcxx_flags
- RAW_CXX_FOR_TARGET='$$r/gcc/xgcc -shared-libgcc -B$$r/gcc/ -nostdinc++ '$raw_libstdcxx_flags
+ CXX_FOR_TARGET='$$r/$(HOST_SUBDIR)/gcc/g++ -B$$r/$(HOST_SUBDIR)/gcc/ -nostdinc++ '$libstdcxx_flags
+ RAW_CXX_FOR_TARGET='$$r/$(HOST_SUBDIR)/gcc/xgcc -shared-libgcc -B$$r/$(HOST_SUBDIR)/gcc/ -nostdinc++ '$raw_libstdcxx_flags
elif test "$host" = "$target"; then
CXX_FOR_TARGET='$(CXX)'
RAW_CXX_FOR_TARGET=${CXX_FOR_TARGET}
@@ -2288,7 +2288,7 @@
&& rm -f confdir.s2; then
gcc_cv_prog_ln_s_dir=yes
else
- gcc_cv_prog_ln_s_dir=yes
+ gcc_cv_prog_ln_s_dir=no
fi
rm -rf confdir.s1 confdir.s2])

Index: config/acx.m4
===================================================================
RCS file: /cvs/gcc/gcc/config/acx.m4,v
retrieving revision 1.10
diff -u -r1.10 acx.m4
--- config/acx.m4 13 Aug 2004 22:31:45 -0000 1.10
+++ config/acx.m4 26 Feb 2005 09:36:51 -0000
@@ -76,8 +76,13 @@
AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_BUILD]) []dnl
# Prefix 'build-' so this never conflicts with target_subdir.
build_subdir="build-${build_noncanonical}"
-# Not really a subdirectory, but here for completeness.
-host_subdir=.
+# --srcdir=. covers the toplevel, while "test -d" covers the subdirectories
+if ( test $srcdir = . && test -d gcc ) \
+ || test -d $srcdir/../host-${host_noncanonical}; then
+ host_subdir="host-${host_noncanonical}"
+else
+ host_subdir=.
+fi
# No prefix.
target_subdir=${target_noncanonical}
AC_SUBST([build_subdir]) []dnl
Index: gcc/Makefile.in
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Makefile.in,v
retrieving revision 1.1447
diff -u -r1.1447 Makefile.in
--- gcc/Makefile.in 17 Feb 2005 08:47:19 -0000 1.1447
+++ gcc/Makefile.in 25 Feb 2005 13:39:32 -0000
@@ -83,8 +83,15 @@
# It's normally the absolute path to the current directory.
objdir = @objdir@

+host_subdir=@host_subdir@
build_subdir=@build_subdir@

+ifeq ($(host_subdir),.)
+build_objdir := ../$(build_subdir)
+else
+build_objdir := $(srcdir)/../$(build_subdir)
+endif
+
# --------
# Defined vpaths
# --------
@@ -757,7 +764,7 @@

# Build and host support libraries.
LIBIBERTY = ../libiberty/libiberty.a
-BUILD_LIBIBERTY = ../$(build_subdir)/libiberty/libiberty.a
+BUILD_LIBIBERTY = $(build_objdir)/libiberty/libiberty.a

# Dependencies on the intl and portability libraries.
LIBDEPS= $(CPPLIB) $(LIBIBERTY) $(LIBINTL_DEP) $(LIBICONV_DEP)
@@ -2839,8 +2846,8 @@

# Build fixed copies of system files.
stmp-fixinc: gsyslimits.h macro_list \
- ../$(build_subdir)/fixincludes/fixincl \
- ../$(build_subdir)/fixincludes/fixinc.sh
+ $(build_objdir)/fixincludes/fixincl \
+ $(build_objdir)/fixincludes/fixinc.sh
@if test ! -d ${SYSTEM_HEADER_DIR}; then \
echo The directory that should contain system headers does not exist: >&2 ; \
echo " ${SYSTEM_HEADER_DIR}" >&2 ; \
@@ -2852,7 +2859,7 @@
(TARGET_MACHINE='$(target)'; srcdir=`cd $(srcdir); ${PWD_COMMAND}`; \
SHELL='$(SHELL)'; MACRO_LIST=`${PWD_COMMAND}`/macro_list ; \
export TARGET_MACHINE srcdir SHELL MACRO_LIST && \
- cd ../$(build_subdir)/fixincludes && \
+ cd $(build_objdir)/fixincludes && \
$(SHELL) ./fixinc.sh ../../gcc/include \
$(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS) )
rm -f include/syslimits.h
Index: libjava/configure.ac
===================================================================
RCS file: /cvs/gcc/gcc/libjava/configure.ac,v
retrieving revision 1.19
diff -u -r1.19 configure.ac
--- libjava/configure.ac 23 Feb 2005 01:05:45 -0000 1.19
+++ libjava/configure.ac 25 Feb 2005 13:39:32 -0000
@@ -5,6 +5,8 @@

AC_CONFIG_SRCDIR(java/lang/System.java)

+GCC_TOPLEV_SUBDIRS
+
# We use these options to decide which functions to include.
AC_ARG_WITH(target-subdir,
AS_HELP_STRING([--with-target-subdir=SUBDIR],
@@ -162,13 +164,6 @@
AM_PROG_CC_C_O
AC_CONFIG_SUBDIRS(libltdl)

-if test -z "$with_target_subdir" || test "$with_target_subdir" = "."; then
- COMPPATH=.
-else
- COMPPATH=..
-fi
-AC_SUBST(COMPPATH)
-
# The -no-testsuite modules omit the test subdir.
AM_CONDITIONAL(TESTSUBDIR, test -d $srcdir/testsuite)

@@ -1039,7 +1034,7 @@

# Which gcj do we use?
which_gcj=default
-built_gcc_dir="`cd ${builddotdot}/../../gcc && ${PWDCMD-pwd}`"
+built_gcc_dir="`cd ${builddotdot}/../../${host_subdir}/gcc && ${PWDCMD-pwd}`"
if test -n "${with_cross_host}"; then
# We are being configured with a cross compiler. We can't
# use ac_exeext, because that is for the target platform.
@@ -1078,8 +1073,8 @@
case "${which_gcj}" in
built)
GCJ="$built_gcc_dir/gcj -B`${PWDCMD-pwd}`/ -B$built_gcc_dir/"
- GCJH='$(MULTIBUILDTOP)../$(COMPPATH)/gcc/gcjh'
- ZIP='$(MULTIBUILDTOP)../$(COMPPATH)/fastjar/fastjar'
+ GCJH='$(MULTIBUILDTOP)../../$(host_subdir)/gcc/gcjh'
+ ZIP='$(MULTIBUILDTOP)../../$(host_subdir)/fastjar/fastjar'
;;
cross)
if test "x${with_newlib}" = "xyes"; then
Index: libobjc/configure.ac
===================================================================
RCS file: /cvs/gcc/gcc/libobjc/configure.ac,v
retrieving revision 1.12
diff -u -r1.12 configure.ac
--- libobjc/configure.ac 2 Dec 2004 11:05:06 -0000 1.12
+++ libobjc/configure.ac 25 Feb 2005 13:39:33 -0000
@@ -23,6 +23,7 @@
AC_PREREQ(2.59)
AC_INIT(package-unused, version-unused,, libobjc)
AC_CONFIG_SRCDIR([objc/objc.h])
+GCC_TOPLEV_SUBDIRS

# We need the following definitions because AC_PROG_LIBTOOL relies on them
PACKAGE=libobjc
@@ -218,12 +219,12 @@
# -----------

# Determine CFLAGS for gthread.
-# FIXME: the current implementation is dependent on the 'r' variable
-# passed down from the top level
AC_CACHE_CHECK([for gthread cflags],objc_cv_gthread_flags,
-[if test -f "$r"/gcc/Makefile
+[# we know we are compiled as a target library, so the toplevel build directory
+# is ../..
+if test -f ../../$host_subdir/gcc/Makefile
then
- objc_cv_gthread_flags=`grep \^GTHREAD_FLAGS "$r"/gcc/Makefile | awk -F= '{ print $2 }'`
+ objc_cv_gthread_flags=`grep \^GTHREAD_FLAGS ../../$host_subdir/gcc/Makefile | awk -F= '{ print $2 }'`
else
AC_MSG_ERROR([not found])
fi])
Index: libobjc/Makefile.in
===================================================================
RCS file: /cvs/gcc/gcc/libobjc/Makefile.in,v
retrieving revision 1.44
diff -u -r1.44 Makefile.in
--- libobjc/Makefile.in 20 Oct 2004 01:26:37 -0000 1.44
+++ libobjc/Makefile.in 25 Feb 2005 13:52:22 -0000
@@ -34,6 +34,7 @@
exec_prefix = @exec_prefix@
target_noncanonical = @target_noncanonical@
gcc_version = @gcc_version@
+host_subdir = @host_subdir@
top_srcdir = @top_srcdir@
toplevel_srcdir = @toplevel_srcdir@
toolexecdir = @toolexecdir@
@@ -90,7 +91,8 @@
#LIBTOOL_UNINSTALL = $(LIBTOOL) --mode=uninstall

INCLUDES = -I$(srcdir)/objc -I$(srcdir)/$(MULTISRCTOP)../gcc \
- -I$(srcdir)/$(MULTISRCTOP)../gcc/config -I$(MULTIBUILDTOP)../../gcc \
+ -I$(srcdir)/$(MULTISRCTOP)../gcc/config \
+ -I$(MULTIBUILDTOP)../../$(host_subdir)/gcc \
-I$(srcdir)/$(MULTISRCTOP)../include

OBJC_GCFLAGS=-DOBJC_WITH_GC=1