From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10845 invoked by alias); 23 Dec 2002 09:25:32 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 10833 invoked from network); 23 Dec 2002 09:25:30 -0000 Received: from unknown (HELO mailout6-0.nyroc.rr.com) (24.92.226.177) by 209.249.29.67 with SMTP; 23 Dec 2002 09:25:30 -0000 Received: from doctormoo (syr-24-24-16-193.twcny.rr.com [24.24.16.193]) by mailout6-0.nyroc.rr.com (8.11.6/RoadRunner 1.20) with ESMTP id gBN9NXk29533; Mon, 23 Dec 2002 04:23:33 -0500 (EST) Received: from neroden by doctormoo with local (Exim 3.36 #1 (Debian)) id 18QOn2-00041A-00; Mon, 23 Dec 2002 04:22:24 -0500 Date: Mon, 23 Dec 2002 01:35:00 -0000 To: gcc-patches@gcc.gnu.org, binutils@sources.redhat.com, gdb-patches@sources.redhat.com, dj@redhat.com Subject: (toplevel patch) Fix reconfigures & infinite loops Message-ID: <20021223092224.GA21082@doctormoo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i From: Nathanael Nerode X-SW-Source: 2002-12/txt/msg00630.txt.bz2 Tested extensively on i686-pc-linux-gnu. All seems to be well. I'll be taking a bit of a break from this work after this. DJ, I still have one outstanding patch for the toplevel after this (a cleanup of the way CC_FOR_TARGET and friends are handled in configure/configure.in). * Makefile.tpl: Use shared multilib.out. Use move-if-change for it. Convert (cd foo; make) to (cd foo && make). * Makefile.in: Regenerate. * configure.in: Remove unnecessary leftovers. 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 23 Dec 2002 08:43:07 -0000 @@ -589,13 +589,13 @@ done; \ ;; \ esac ; \ - if (cd ./$$i; \ + (cd ./$$i && \ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \ - [+target+]); \ - then true; else exit 1; fi; \ + [+target+]) \ + || exit 1; \ else true; fi; \ done # Break into two pieces @@ -607,13 +607,13 @@ for flag in $(EXTRA_TARGET_FLAGS); do \ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ done; \ - if (cd $(TARGET_SUBDIR)/$$i; \ + (cd $(TARGET_SUBDIR)/$$i && \ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \ - [+target+]); \ - then true; else exit 1; fi; \ + [+target+]) \ + || exit 1; \ else true; fi; \ done [+ ENDFOR recursive_targets +] @@ -671,7 +671,7 @@ r=`${PWD}`; export r; \ s=`cd $(srcdir); ${PWD}`; export s; \ $(SET_LIB_PATH) \ - (cd $${dir}; $(MAKE) $(FLAGS_TO_PASS) clean); \ + (cd $${dir} && $(MAKE) $(FLAGS_TO_PASS) clean); \ else \ true; \ fi @@ -684,7 +684,7 @@ r=`${PWD}`; export r; \ s=`cd $(srcdir); ${PWD}`; export s; \ $(SET_LIB_PATH) \ - (cd $(TARGET_SUBDIR)/$${dir}; $(MAKE) $(TARGET_FLAGS_TO_PASS) clean); \ + (cd $(TARGET_SUBDIR)/$${dir} && $(MAKE) $(TARGET_FLAGS_TO_PASS) clean); \ else \ true; \ fi @@ -742,7 +742,7 @@ @if [ -f ./gcc/Makefile ] ; then \ r=`${PWD}` ; export r ; \ $(SET_LIB_PATH) \ - (cd ./gcc; \ + (cd ./gcc && \ $(MAKE) $(FLAGS_TO_PASS) install-headers) ; \ else \ true ; \ @@ -784,7 +784,6 @@ # built are. TAGS: do-TAGS - # -------------------------------------- # Modules which run on the build machine # -------------------------------------- @@ -909,7 +908,7 @@ @r=`${PWD}`; export r; \ s=`cd $(srcdir); ${PWD}`; export s; \ $(SET_LIB_PATH) \ - (cd [+module+]; $(MAKE) $(FLAGS_TO_PASS)[+ + (cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+ IF with_x +] $(X11_FLAGS_TO_PASS)[+ ENDIF with_x +] all) @@ -925,7 +924,7 @@ r=`${PWD}`; export r; \ s=`cd $(srcdir); ${PWD}`; export s; \ $(SET_LIB_PATH) \ - (cd [+module+]; $(MAKE) $(FLAGS_TO_PASS)[+ + (cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+ IF with_x +] $(X11_FLAGS_TO_PASS)[+ ENDIF with_x +] check); \ @@ -936,7 +935,7 @@ @r=`${PWD}`; export r; \ s=`cd $(srcdir); ${PWD}`; export s; \ $(SET_LIB_PATH) \ - (cd [+module+]; $(MAKE) $(FLAGS_TO_PASS)[+ + (cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+ IF with_x +] $(X11_FLAGS_TO_PASS)[+ ENDIF with_x +] check) @@ -953,7 +952,7 @@ @r=`${PWD}`; export r; \ s=`cd $(srcdir); ${PWD}`; export s; \ $(SET_LIB_PATH) \ - (cd [+module+]; $(MAKE) $(FLAGS_TO_PASS)[+ + (cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+ IF with_x +] $(X11_FLAGS_TO_PASS)[+ ENDIF with_x +] install) @@ -968,13 +967,10 @@ maybe-configure-target-[+module+]: configure-target-[+module+]: $(TARGET_SUBDIR)/[+module+]/Makefile -# 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 +# There's only one multilib.out. Cleverer subdirs shouldn't need it copied. +$(TARGET_SUBDIR)/[+module+]/multilib.out: multilib.out @[ -d $(TARGET_SUBDIR)/[+module+] ] || mkdir $(TARGET_SUBDIR)/[+module+];\ - r=`${PWD}`; export r; \ - echo "Configuring multilibs for [+module+]"; \ - $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/[+module+]/multilib.out 2> /dev/null + cp multilib.out $(TARGET_SUBDIR)/[+module+]/multilib.out $(TARGET_SUBDIR)/[+module+]/Makefile: config.status $(TARGET_SUBDIR)/[+module+]/multilib.out @[ -d $(TARGET_SUBDIR)/[+module+] ] || mkdir $(TARGET_SUBDIR)/[+module+];\ @@ -1046,7 +1042,7 @@ @r=`${PWD}`; export r; \ s=`cd $(srcdir); ${PWD}`; export s; \ $(SET_LIB_PATH) \ - (cd $(TARGET_SUBDIR)/[+module+]; \ + (cd $(TARGET_SUBDIR)/[+module+] && \ $(MAKE) $(TARGET_FLAGS_TO_PASS) [+ IF raw_cxx +] 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' [+ @@ -1062,7 +1058,7 @@ @r=`${PWD}`; export r; \ s=`cd $(srcdir); ${PWD}`; export s; \ $(SET_LIB_PATH) \ - (cd $(TARGET_SUBDIR)/[+module+]; \ + (cd $(TARGET_SUBDIR)/[+module+] && \ $(MAKE) $(TARGET_FLAGS_TO_PASS) [+ IF raw_cxx +] 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' [+ @@ -1081,7 +1077,7 @@ @r=`${PWD}`; export r; \ s=`cd $(srcdir); ${PWD}`; export s; \ $(SET_LIB_PATH) \ - (cd $(TARGET_SUBDIR)/[+module+]; \ + (cd $(TARGET_SUBDIR)/[+module+] && \ $(MAKE) $(TARGET_FLAGS_TO_PASS) install) [+ ENDIF no_install +] [+ ENDFOR target_modules +] @@ -1146,12 +1142,12 @@ r=`${PWD}`; export r; \ s=`cd $(srcdir); ${PWD}`; export s; \ $(SET_LIB_PATH) \ - (cd gcc; $(MAKE) $(GCC_FLAGS_TO_PASS) quickstrap); \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) quickstrap); \ else \ r=`${PWD}`; export r; \ s=`cd $(srcdir); ${PWD}`; export s; \ $(SET_LIB_PATH) \ - (cd gcc; $(MAKE) $(GCC_FLAGS_TO_PASS) all); \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) all); \ fi # Building GCC uses some tools for rebuilding "source" files @@ -1213,7 +1209,7 @@ r=`${PWD}`; export r; \ s=`cd $(srcdir); ${PWD}`; export s; \ $(SET_LIB_PATH) \ - (cd gcc; $(MAKE) $(GCC_FLAGS_TO_PASS) check); \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check); \ else \ true; \ fi @@ -1224,7 +1220,7 @@ r=`${PWD}`; export r; \ s=`cd $(srcdir); ${PWD}`; export s; \ $(SET_LIB_PATH) \ - (cd gcc; $(MAKE) $(GCC_FLAGS_TO_PASS) check-c++); \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-c++); \ else \ true; \ fi @@ -1239,7 +1235,7 @@ r=`${PWD}`; export r; \ s=`cd $(srcdir); ${PWD}`; export s; \ $(SET_LIB_PATH) \ - (cd gcc; $(MAKE) $(GCC_FLAGS_TO_PASS) install); \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) install); \ else \ true; \ fi @@ -1259,7 +1255,7 @@ r=`${PWD}`; export r; \ s=`cd $(srcdir); ${PWD}` ; export s; \ $(SET_LIB_PATH) \ - (cd ./gcc; \ + (cd ./gcc && \ $(MAKE) $(GCC_FLAGS_TO_PASS) install); \ rm -rf gcc/include; \ mv gcc/tmp-include gcc/include 2>/dev/null; \ @@ -1394,6 +1390,23 @@ # -------------------------------- # Regenerating top level configury # -------------------------------- + +# Multilib.out tells target dirs what multilibs they should build. +# There is really only one copy. We use the 'timestamp' method to +# work around various timestamp bugs on some systems. +# We use move-if-change so that it's only considered updated when it +# actually changes, because it has to depend on a phony target. +multilib.out: multilib.ts + @if [ -f multilib.out] ; then : else \ + rm -f multilib.ts; $(MAKE) multilib.ts; \ + fi + +multilib.ts: maybe-all-gcc + @r=`${PWD}`; export r; \ + echo "Checking multilib configuration..."; \ + $(CC_FOR_TARGET) --print-multi-lib > multilib.tmp 2> /dev/null ; \ + $(SHELL) $(srcdir)/move-if-change multilib.tmp multilib.out ; \ + echo timestamp > multilib.ts # Rebuilding Makefile.in, using autogen. $(srcdir)/Makefile.in: # $(srcdir)/Makefile.tpl $(srcdir)/Makefile.def Index: configure.in =================================================================== RCS file: /cvs/gcc/gcc/configure.in,v retrieving revision 1.197 diff -u -r1.197 configure.in --- configure.in 22 Dec 2002 06:46:41 -0000 1.197 +++ configure.in 23 Dec 2002 08:43:09 -0000 @@ -1703,12 +1703,6 @@ 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,.,'` - sedtemp=sed.$$ cat >$sedtemp <