This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: [toplevel patch] Revised autogenification omnibus patch
- 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: Tue, 3 Jun 2003 16:40:18 -0400
- Subject: Re: [toplevel patch] Revised autogenification omnibus patch
Somehow, the version I sent was outdated and had a stupid bug in it.
Again. Aaargh. Here's the correct version of the Makefile.tpl patch,
which I actually tested, and which I'm committing (the other two patches
are the same).
--Nathanael
Index: Makefile.tpl
===================================================================
RCS file: /cvs/gcc/gcc/Makefile.tpl,v
retrieving revision 1.52
diff -c -3 -r1.52 Makefile.tpl
*** Makefile.tpl 3 Jun 2003 16:35:42 -0000 1.52
--- Makefile.tpl 3 Jun 2003 20:37:54 -0000
***************
*** 475,481 ****
# Flags to pass down to most sub-makes, in which we're building with
# the host environment.
- # If any variables are added here, they must be added to do-*, below.
EXTRA_HOST_FLAGS = \
'AR=$(AR)' \
'AS=$(AS)' \
--- 475,480 ----
***************
*** 504,510 ****
# Flags to pass down to makes which are built with the target environment.
# The double $ decreases the length of the command line; the variables
# are set in BASE_FLAGS_TO_PASS, and the sub-make will expand them.
- # If any variables are added here, they must be added to do-*, below.
EXTRA_TARGET_FLAGS = \
'AR=$$(AR_FOR_TARGET)' \
'AS=$$(AS_FOR_TARGET)' \
--- 503,508 ----
***************
*** 526,532 ****
# unfortunately needs the native compiler and the target ar and
# ranlib.
# If any variables are added here, they must be added to do-*, below.
! # The HOST_* variables are a special case, which are used for the gcc
# cross-building scheme.
EXTRA_GCC_FLAGS = \
'AR=$(AR)' \
--- 524,530 ----
# unfortunately needs the native compiler and the target ar and
# ranlib.
# If any variables are added here, they must be added to do-*, below.
! # The BUILD_* variables are a special case, which are used for the gcc
# cross-building scheme.
EXTRA_GCC_FLAGS = \
'AR=$(AR)' \
***************
*** 565,590 ****
maybe-configure-target-[+module+][+
ENDFOR target_modules +]
- # This is a list of the targets for which we can do a clean-{target}.
- CLEAN_MODULES =[+
- FOR host_modules +][+
- IF (not (or (exist? "no_clean") (exist? "with_x"))) +] \
- clean-[+module+][+
- ENDIF no_clean +][+
- ENDFOR host_modules +]
-
- # All of the target modules that can be cleaned
- CLEAN_TARGET_MODULES =[+
- FOR target_modules +][+
- IF (not (exist? "no_clean")) +] \
- clean-target-[+module+][+
- ENDIF no_clean +][+
- ENDFOR target_modules +]
-
- # All of the x11 modules that can be cleaned
- CLEAN_X11_MODULES = [+ FOR host_modules +][+ IF with_x +]\
- clean-[+module+] [+ ENDIF with_x +][+ ENDFOR host_modules +]
-
# The target built for a native build.
.PHONY: all.normal
all.normal: @all_build_modules@ all-host all-target
--- 563,568 ----
***************
*** 604,662 ****
# ``make X'' in all subdirectories (because, in general, there is a
# dependency (below) of X upon do-X, a ``make X'' will also do this,
# but it may do additional work as well).
- # This target ensures that $(BASE_FLAGS_TO_PASS) appears only once,
- # because it is so large that it can easily overflow the command line
- # length limit on some systems.
[+ FOR recursive_targets +]
.PHONY: do-[+make_target+]
! do-[+make_target+]:
! @r=`${PWD}`; export r; \
s=`cd $(srcdir); ${PWD}`; export s; \
$(SET_LIB_PATH) \
! for i in $(SUBDIRS) -dummy-; do \
! if [ -f ./$$i/Makefile ]; then \
! case $$i in \
! gcc) \
! for flag in $(EXTRA_GCC_FLAGS); do \
! eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! done; \
! ;; \
! *) \
! for flag in $(EXTRA_HOST_FLAGS); do \
! eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! done; \
! ;; \
! esac ; \
! (cd ./$$i && \
! $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! "RANLIB=$${RANLIB}" \
! "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! [+make_target+]) \
! || exit 1; \
! else true; fi; \
! done
! # Break into two pieces
r=`${PWD}`; export r; \
s=`cd $(srcdir); ${PWD}`; export s; \
$(SET_LIB_PATH) \
! for i in $(TARGET_CONFIGDIRS) -dummy-; do \
! if [ -f $(TARGET_SUBDIR)/$$i/Makefile ]; then \
! for flag in $(EXTRA_TARGET_FLAGS); do \
! eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! done; \
! (cd $(TARGET_SUBDIR)/$$i && \
! $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! "RANLIB=$${RANLIB}" \
! "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! [+make_target+]) \
! || exit 1; \
! else true; fi; \
! done
[+ ENDFOR recursive_targets +]
-
# Here are the targets which correspond to the do-X targets.
.PHONY: info installcheck dvi install-info
--- 582,687 ----
# ``make X'' in all subdirectories (because, in general, there is a
# dependency (below) of X upon do-X, a ``make X'' will also do this,
# but it may do additional work as well).
[+ FOR recursive_targets +]
.PHONY: do-[+make_target+]
! do-[+make_target+]: [+make_target+]-host [+make_target+]-target
!
! .PHONY: [+make_target+]-host
! [+make_target+]-host: maybe-[+make_target+]-gcc [+
! FOR host_modules +] \
! maybe-[+make_target+]-[+module+][+
! ENDFOR host_modules +]
!
! .PHONY: [+make_target+]-target
! [+make_target+]-target: [+
! FOR target_modules +] \
! maybe-[+make_target+]-target-[+module+][+
! ENDFOR target_modules +]
!
! # GCC, the eternal special case
! .PHONY: maybe-[+make_target+]-gcc [+make_target+]-gcc
! maybe-[+make_target+]-gcc:
! [+make_target+]-gcc: [+
! FOR depend +]\
! [+depend+]-gcc [+
! ENDFOR depend +]
! @[ -f ./gcc/Makefile ] || exit 0; \
! r=`${PWD}`; export r; \
! s=`cd $(srcdir); ${PWD}`; export s; \
! $(SET_LIB_PATH) \
! for flag in $(EXTRA_GCC_FLAGS); do \
! eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! done; \
! echo "Doing [+make_target+] in gcc" ; \
! (cd gcc && \
! $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! "RANLIB=$${RANLIB}" \
! "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! [+make_target+]) \
! || exit 1
!
! # Host modules.
! [+ FOR host_modules +]
! .PHONY: maybe-[+make_target+]-[+module+] [+make_target+]-[+module+]
! maybe-[+make_target+]-[+module+]:
! [+ IF (match-value? = "missing" (get "make_target") ) +]
! # [+module+] doesn't support [+make_target+].
! [+make_target+]-[+module+]:
! [+ ELSE +]
! [+make_target+]-[+module+]: [+
! FOR depend +]\
! [+depend+]-[+module+] [+
! ENDFOR depend +]
! @[ -f ./[+module+]/Makefile ] || exit 0; \
! r=`${PWD}`; export r; \
s=`cd $(srcdir); ${PWD}`; export s; \
$(SET_LIB_PATH) \
! for flag in $(EXTRA_HOST_FLAGS); do \
! eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! done; \
! echo "Doing [+make_target+] in [+module+]" ; \
! (cd [+module+] && \
! $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! "RANLIB=$${RANLIB}" \
! "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! [+make_target+]) \
! || exit 1
! [+ ENDIF +]
! [+ ENDFOR host_modules +]
!
! # Target modules.
! [+ FOR target_modules +]
! .PHONY: maybe-[+make_target+]-target-[+module+] [+make_target+]-target-[+module+]
! maybe-[+make_target+]-target-[+module+]:
! [+ IF (match-value? = "missing" (get "make_target") ) +]
! # [+module+] doesn't support [+make_target+].
! [+make_target+]-[+module+]:
! [+ ELSE +]
! [+make_target+]-target-[+module+]: [+
! FOR depend +]\
! [+depend+]-target-[+module+] [+
! ENDFOR depend +]
! @[ -f $(TARGET_SUBDIR)/[+module+]/Makefile ] || exit 0 ; \
r=`${PWD}`; export r; \
s=`cd $(srcdir); ${PWD}`; export s; \
$(SET_LIB_PATH) \
! echo "Doing [+make_target+] in $(TARGET_SUBDIR)/[+module+]" ; \
! for flag in $(EXTRA_TARGET_FLAGS); do \
! eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! done; \
! (cd $(TARGET_SUBDIR)/[+module+] && \
! $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! "RANLIB=$${RANLIB}" \
! "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
! [+make_target+]) \
! || exit 1
! [+ ENDIF +]
! [+ ENDFOR target_modules +]
[+ ENDFOR recursive_targets +]
# Here are the targets which correspond to the do-X targets.
.PHONY: info installcheck dvi install-info
***************
*** 703,735 ****
maintainer-clean: local-distclean
realclean: maintainer-clean
! # This rule is used to clean specific modules.
! .PHONY: $(CLEAN_MODULES) $(CLEAN_X11_MODULES) clean-gcc
! $(CLEAN_MODULES) $(CLEAN_X11_MODULES) clean-gcc:
! @dir=`echo $@ | sed -e 's/clean-//'`; \
! if [ -f ./$${dir}/Makefile ] ; then \
! r=`${PWD}`; export r; \
! s=`cd $(srcdir); ${PWD}`; export s; \
! $(SET_LIB_PATH) \
! (cd $${dir} && $(MAKE) $(FLAGS_TO_PASS) clean); \
! else \
! true; \
! fi
!
! .PHONY: $(CLEAN_TARGET_MODULES)
! $(CLEAN_TARGET_MODULES):
! @dir=`echo $@ | sed -e 's/clean-target-//'`; \
! rm -f $(TARGET_SUBDIR)/$${dir}/multilib.out $(TARGET_SUBDIR)/$${dir}/tmpmulti.out; \
! if [ -f $(TARGET_SUBDIR)/$${dir}/Makefile ] ; then \
! r=`${PWD}`; export r; \
! s=`cd $(srcdir); ${PWD}`; export s; \
! $(SET_LIB_PATH) \
! (cd $(TARGET_SUBDIR)/$${dir} && $(MAKE) $(TARGET_FLAGS_TO_PASS) clean); \
! else \
! true; \
! fi
!
! clean-target: $(CLEAN_TARGET_MODULES) clean-target-libgcc
clean-target-libgcc:
test ! -d gcc/libgcc || \
(cd gcc/libgcc && find . -type d -print) | \
--- 728,735 ----
maintainer-clean: local-distclean
realclean: maintainer-clean
! # Extra dependency for clean-target, owing to the mixed nature of gcc
! clean-target: clean-target-libgcc
clean-target-libgcc:
test ! -d gcc/libgcc || \
(cd gcc/libgcc && find . -type d -print) | \