multisubdir=
else
multisubdir="/${with_multisubdir}"
- # FIXME: following line needs testing in multilevel dir (eg: m68k).
dotdot=`echo ${multisubdir} | sed -e 's:/[^/]*:../:g'`
+ # TOP is used by newlib and should not be used elsewhere for this purpose.
sed -e "s:^TOP[ ]*=[ ]*\([./]*\)[ ]*$:TOP = ${dotdot}\1:" \
-e "s:^MULTITOP[ ]*=[ ]*\([./]*\)[ ]*$:MULTITOP = ${dotdot}\1:" \
${Makefile} > Makefile.tem
fi
# MULTIDIRS is non-empty for the cpu top level Makefile (eg: newlib/Makefile)
-# and lists the subdirectories to recurse into. MULTISUBDIR is non-empty in
-# each cpu subdirectory's Makefile (eg: newlib/h8300h/Makefile) and is the
-# installed subdirectory name with a trailing '/'.
-# XXX_MULTI is a set of helpers for all, install, etc.
-# Makefile.in is free to override them since these are prepended to the top.
-
-cat > Multi.tem <<EOF
-MULTIDIRS = ${multidirs}
-MULTISUBDIR = ${multisubdir}
-EOF
-cat Multi.tem ${Makefile} > Makefile.tem
-rm -f Multi.tem ${Makefile}
-mv Makefile.tem ${Makefile}
-
-# Add default definitions for all, install, clean, etc.
-# if the Makefile uses them.
+# and lists the subdirectories to recurse into.
+# MULTISUBDIR is non-empty in each cpu subdirectory's Makefile
+# (eg: newlib/h8300h/Makefile) and is the installed subdirectory name with
+# a trailing '/'.
+# MULTIDO is used for targets like all, install, and check where
+# $(FLAGS_TO_PASS) augmented with the subdir's compiler option is needed.
+# MULTICLEAN is used for the *clean targets.
#
-# ??? The variables will be undefined when they're not used
-# (eg: native libiberty) and things will work just fine, but some may argue
-# that's not clean. We can always revisit this as necessary (probably by
-# defining all the relevant vars as empty and then instead of prepending
-# corrected values we can modify them in place).
-
-if grep ALL_MULTI ${Makefile} >/dev/null 2>/dev/null
-then
- cat > Multi.tem <<EOF
-ALL_MULTI = all-multi
-INSTALL_MULTI = install-multi
-MOSTLYCLEAN_MULTI = mostlyclean-multi
-CLEAN_MULTI = clean-multi
-DISTCLEAN_MULTI = distclean-multi
-EOF
+# ??? It is possible to merge MULTIDO and MULTICLEAN into one. They are
+# currently kept separate because we don't want the *clean targets to require
+# the existence of the compiler (which MULTIDO currently requires) and
+# therefore we'd have to record the directory options as well as names
+# (currently we just record the names and use --print-multi-lib to get the
+# options).
- cat Multi.tem ${Makefile} > Makefile.tem
- rm -f Multi.tem ${Makefile}
- mv Makefile.tem ${Makefile}
+sed -e "s:^MULTIDIRS[ ]*=.*$:MULTIDIRS = ${multidirs}:" \
+ -e "s:^MULTISUBDIR[ ]*=.*$:MULTISUBDIR = ${multisubdir}:" \
+ -e 's:^MULTIDO[ ]*=.*$:MULTIDO = $(MAKE):' \
+ -e 's:^MULTICLEAN[ ]*=.*$:MULTICLEAN = $(MAKE):' \
+ ${Makefile} > Makefile.tem
+rm -f ${Makefile}
+mv Makefile.tem ${Makefile}
- cat > Multi.tem <<\EOF
+cat > Multi.tem <<\EOF
-# FIXME: We use --print-multi-lib but the others don't. Standardize.
-all-multi:
+multi-do:
if [ -z "$(MULTIDIRS)" ]; then \
true; \
else \
CXXFLAGS="$(CXXFLAGS) $${flags}" \
LIBCFLAGS="$(LIBCFLAGS) $${flags}" \
LIBCXXFLAGS="$(LIBCXXFLAGS) $${flags}" \
- all); then \
+ $(DO)); then \
true; \
else \
exit 1; \
done; \
fi
-install-multi mostlyclean-multi clean-multi distclean-multi realclean-multi:
- if [ -n "$(MULTIDIRS)" ]; then \
- rootpre=`pwd`/; export rootpre; \
- srcrootpre=`cd $(srcdir); pwd`/; export srcrootpre; \
- $(MAKE) DO=`echo $@ | sed -e 's/-multi$$//'` DODIRS="$(MULTIDIRS)" $(FLAGS_TO_PASS) multi_subdir_do; \
- else true; fi
-
-multi_subdir_do:
- for i in $(DODIRS); do \
- if [ -f ./$$i/Makefile ] ; then \
- if (cd ./$$i; $(MAKE) $(FLAGS_TO_PASS) $(DO)) ; \
- then true ; \
- else exit 1 ; \
- fi ; \
- else true; \
- fi ; \
- done
+multi-clean:
+ if [ -z "$(MULTIDIRS)" ]; then \
+ true; \
+ else \
+ for dir in Makefile $(MULTIDIRS); do \
+ if [ -f ./$$dir/Makefile ]; then \
+ if (cd ./$$dir; $(MAKE) $(FLAGS_TO_PASS) $(DO)); \
+ then true; \
+ else exit 1; \
+ fi; \
+ else true; \
+ fi; \
+ done; \
+ fi
EOF
- cat ${Makefile} Multi.tem > Makefile.tem
- rm -f ${Makefile} Multi.tem
- mv Makefile.tem ${Makefile}
-fi
+cat ${Makefile} Multi.tem > Makefile.tem
+rm -f ${Makefile} Multi.tem
+mv Makefile.tem ${Makefile}
fi # "${enable_multilib}" = yes