This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PR/17383: fix building in srcdir


This patch fixes PR 17383, the failure to build in srcdir.  This is a
regression from previous versions in 4.0, even though to some extent it
never worked (e.g. if the host has multilibs zlib breaks, even though
it is built without multilibs!).  This is because what actually
--srcdir=. breaks is the multilibbing mechanism.

This fix is relatively simple, and it is a variant of the often-proposed
"build out of srcdir without telling the user" trick.  We configure host
modules into a host-CPU-VENDOR-OS directory, like we do for the
build-CPU-VENDOR-OS directory and for the target's CPU-VENDOR-OS directory.

This means that symlink trees can be not used (DJ was right in that they
caused many bugs -- even if only in weird configurations), and
everything can be built out-of-srcdir.

The patch is mostly confined in the toplevel (which may be a pro or a
con, depending on the point of view...).  However, a couple of fixes are
needed in libjava (to find fastjar and gcjh), libobjc (to find the gcc
directory), and in gcc (which must go one more level higher to find the
build-side libiberty and fixincludes).

I must say that after reviewing the patch myself I feel much less uneasy
about proposing this for 4.0.  Of course my judgement call has limited
relevance.

This patch was bootstrapped out-of-srcdir powerpc-darwin, and built
in-srcdir the same configuration (i.e. classic "./configure && make" --
in the future this will activate toplevel bootstrapping, but it does not
yet).  Tomorrow afternoon I'll also have out-of-srcdir i686-pc-linux-gnu
results.

Paolo

2004-12-30  Paolo Bonzini  <bonzini@gnu.org>

	* 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, always configure
	out-of-srcdir.
	(Build modules, Target modules): Do not create symlink trees,
	always configure out-of-srcdir.
	* configure.in (FLAGS_FOR_TARGET, CC_FOR_TARGET, GCJ_FOR_TARGET,
	GFORTRAN_FOR_TARGET, CXX_FOR_TARGET, RAW_CXX_FOR_TARGET): Use
	$(HOST_SUBDIR).

config:
2004-12-30  Paolo Bonzini  <bonzini@gnu.org>

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

gcc:
2004-12-30  Paolo Bonzini  <bonzini@gnu.org>

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

libjava:
2004-12-30  Paolo Bonzini  <bonzini@gnu.org>

	* configure.ac: Call GCC_TOPLEV_SUBDIRS.
	(COMPPATH): Removed.
	(ZIP, GCJH, built_gcc_dir): Replace it with ..
	* configure: Regenerate.
	* Makefile.in, include/Makefile.in, testsuite/Makefile.in:
	Regenerate.

libobjc:
2004-12-30  Paolo Bonzini  <bonzini@gnu.org>

	* 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.tpl
===================================================================
RCS file: /cvs/gcc/gcc/Makefile.tpl,v
retrieving revision 1.122
diff -u -r1.122 Makefile.tpl
--- Makefile.tpl	28 Dec 2004 17:40:40 -0000	1.122
+++ Makefile.tpl	30 Dec 2004 10:17:42 -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); \
@@ -825,34 +834,8 @@
 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
 	  *) topdir="../../$(srcdir)" ;; \
 	esac; \
-	if [ "$(srcdir)" = "." ] ; 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; \
-	  if [ -d ../include ] ; then \
-	    true; \
-	  else \
-	    mkdir ../include; \
-	    cd ../include; \
-	    $(SHELL) $$s/symlink-tree $${topdir}/include "no-such-file"; \
-	    cd ../[+module+]; \
-	  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} \
@@ -884,24 +867,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="../.." ;; \
+	  *) topdir="../$(srcdir)" ;; \
 	esac; \
+	srcdiroption="--srcdir=$${topdir}/[+module+]"; \
+	libsrcdir="$$s/[+module+]"; \
 	$(SHELL) $${libsrcdir}/configure \
 	  $(HOST_CONFIGARGS) $${srcdiroption} [+extra_configure_flags+] \
 	  || exit 1
@@ -918,8 +897,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+]
@@ -936,8 +915,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+]:
@@ -945,8 +924,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+]
 
@@ -962,8 +941,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+]
 
@@ -990,7 +969,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}" \
@@ -1034,34 +1013,8 @@
 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
 	  *) topdir="../../$(srcdir)" ;; \
 	esac; \
-	if [ "$(srcdir)" = "." ] ; 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; \
-	  if [ -d ../include ] ; then \
-	    true; \
-	  else \
-	    mkdir ../include; \
-	    cd ../include; \
-	    $(SHELL) $$s/symlink-tree $${topdir}/include "no-such-file"; \
-	    cd ../[+module+]; \
-	  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 \
 	  $(TARGET_CONFIGARGS) $${srcdiroption} \
@@ -1378,16 +1330,21 @@
 	echo stage[+id+] > stage_current ; \
 	echo stage[+id+] > stage_last[+ 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 +]
+	@[ -d $(HOST_SUBDIR)/stage[+id+]-[+module+] ] || \
+	  mkdir $(HOST_SUBDIR)/stage[+id+]-[+module+]; \
+	set $(HOST_SUBDIR)/stage[+id+]-[+module+] $(HOST_SUBDIR)/[+module+] ; \
+	@CREATE_LINK_TO_DIR@ [+ IF prev +] ; \
+	set $(HOST_SUBDIR)/stage[+prev+]-[+module+] $(HOST_SUBDIR)/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 +]
+	@set $(HOST_SUBDIR)/[+module+] $(HOST_SUBDIR)/stage[+id+]-[+module+] ; \
+	@UNDO_LINK_TO_DIR@ [+ IF prev +] ; \
+	set $(HOST_SUBDIR)/prev-[+module+] $(HOST_SUBDIR)/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
@@ -1432,18 +1389,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="../.." ;; \
+	  *) topdir="../$(srcdir)" ;; \
 	esac; \
+	srcdiroption="--srcdir=$${topdir}/[+module+]"; \
+	libsrcdir="$$s/[+module+]"; \
 	$(SHELL) $${libsrcdir}/configure \
 	  $(HOST_CONFIGARGS) $${srcdiroption} \
 	  [+stage_configure_flags+] [+extra_configure_flags+]
@@ -1455,7 +1408,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+]
@@ -1465,7 +1418,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.332
diff -u -r1.332 configure.in
--- configure.in	12 Nov 2004 19:15:21 -0000	1.332
+++ configure.in	30 Dec 2004 10:17:42 -0000
@@ -2003,7 +2003,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
@@ -2050,13 +2050,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
@@ -2067,7 +2067,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
@@ -2078,7 +2078,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
@@ -2103,8 +2103,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}
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	30 Dec 2004 10:17:42 -0000
@@ -76,8 +76,12 @@
 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 $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.1424
diff -u -r1.1424 Makefile.in
--- gcc/Makefile.in	22 Nov 2004 12:23:39 -0000	1.1424
+++ gcc/Makefile.in	30 Dec 2004 10:17:43 -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 := $(shell cd ../$(build_subdir) && pwd)
+else
+build_objdir := $(shell cd ../../$(build_subdir) && pwd)
+endif
+
 # --------
 # Defined vpaths
 # --------
@@ -755,7 +762,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)
@@ -2803,8 +2810,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 ; \
@@ -2816,7 +2823,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.13
diff -u -r1.13 configure.ac
--- libjava/configure.ac	22 Nov 2004 22:30:14 -0000	1.13
+++ libjava/configure.ac	30 Dec 2004 10:17:59 -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],
@@ -160,13 +162,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)
 
@@ -1034,7 +1029,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.
@@ -1073,8 +1068,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/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	30 Dec 2004 10:18:04 -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
Index: libobjc/configure.ac
===================================================================
RCS file: /cvs/gcc/gcc/libobjc/configure.ac,v
retrieving revision 1.11
diff -u -r1.11 configure.ac
--- libobjc/configure.ac	20 Oct 2004 01:26:37 -0000	1.11
+++ libobjc/configure.ac	30 Dec 2004 10:18:05 -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
@@ -222,12 +223,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 Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]