From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12645 invoked by alias); 26 Feb 2005 11:48:20 -0000 Mailing-List: contact binutils-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sources.redhat.com Received: (qmail 12107 invoked from network); 26 Feb 2005 11:47:07 -0000 Received: from unknown (HELO campus9.usilu.net) (195.176.178.26) by sourceware.org with SMTP; 26 Feb 2005 11:47:07 -0000 Received: from [151.29.221.103] ([151.29.221.103] unverified) by campus9.usilu.net with Microsoft SMTPSVC(5.0.2195.5329); Sat, 26 Feb 2005 12:45:32 +0100 Message-ID: <422061B2.1080507@lu.unisi.ch> Date: Sun, 27 Feb 2005 04:24:00 -0000 From: Paolo Bonzini User-Agent: Mozilla Thunderbird 0.9 (Macintosh/20041103) MIME-Version: 1.0 To: GCC Patches , binutils@sources.redhat.com, gdb-patches@sources.redhat.com, DJ Delorie Subject: PR/17383: fix gcc in-srcdir build (take 2) Content-Type: multipart/mixed; boundary="------------030300050604040107000200" X-OriginalArrivalTime: 26 Feb 2005 11:45:33.0502 (UTC) FILETIME=[AE0045E0:01C51BF8] X-SW-Source: 2005-02/txt/msg00659.txt.bz2 This is a multi-part message in MIME format. --------------030300050604040107000200 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-length: 403 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 --------------030300050604040107000200 Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0"; name="fix-pr17383-3.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="fix-pr17383-3.patch" Content-length: 27196 2005-05-25 Paolo Bonzini 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 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 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 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 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 --------------030300050604040107000200--