From d747cac4c29da5180eccb82ac739986955e3bb50 Mon Sep 17 00:00:00 2001 From: David Edelsohn Date: Tue, 14 Nov 1995 09:32:50 +0000 Subject: [PATCH] * Makefile.in (CONFIGURE_TARGET_MODULES): Pass --with-target-subdir. Preserve relative path names in $srcdir. Build symlink tree if configuring cross target dir and srcdir=. (= no VPATH support). (configure-target-libg++): Depend on configure-target-librx. * cfg-ml-com.in, cfg-ml-pos.in: Deleted. * config-ml.in: New file. * symlink-tree: New file. * configure: Ensure srcdir="." if that's what it is. --- .Sanitize | 7 +- ChangeLog | 11 + cfg-ml-com.in | 440 -------------------------------- cfg-ml-pos.in | 111 -------- config-ml.in | 689 ++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 702 insertions(+), 556 deletions(-) delete mode 100644 cfg-ml-com.in delete mode 100644 cfg-ml-pos.in create mode 100644 config-ml.in diff --git a/.Sanitize b/.Sanitize index e8405a23d51..9fca7c62aa3 100644 --- a/.Sanitize +++ b/.Sanitize @@ -123,9 +123,6 @@ done # called. Directories not listed will be removed in their entirety # with rm -rf. -# ??? It is debatable whether cfg-*.in belongs in Things-to-keep or -# keep_these_too. If someone feels strongly about it, please move them. - Things-to-keep: COPYING @@ -134,13 +131,13 @@ ChangeLog Makefile.in README config -cfg-ml-com.in -cfg-ml-pos.in +config-ml.in config.guess config.sub configure configure.in etc +symlink-tree Things-to-lose: diff --git a/ChangeLog b/ChangeLog index 85869d9b2a5..1a130029ac0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +Tue Nov 14 01:25:50 1995 Doug Evans + + * Makefile.in (CONFIGURE_TARGET_MODULES): Pass --with-target-subdir. + Preserve relative path names in $srcdir. Build symlink tree if + configuring cross target dir and srcdir=. (= no VPATH support). + (configure-target-libg++): Depend on configure-target-librx. + * cfg-ml-com.in, cfg-ml-pos.in: Deleted. + * config-ml.in: New file. + * symlink-tree: New file. + * configure: Ensure srcdir="." if that's what it is. + Mon Nov 13 12:34:20 1995 Stan Shebs * mpw-README: Clarify some phrasing, add notes about CodeWarrior diff --git a/cfg-ml-com.in b/cfg-ml-com.in deleted file mode 100644 index 5db5636e609..00000000000 --- a/cfg-ml-com.in +++ /dev/null @@ -1,440 +0,0 @@ -# Configure fragment invoked in the common section for subdirs -# wanting multilib support. -# -# The common section was chosen because xiberty clobbers $srcdir in the -# common section of its configure.in. -# -# The intent is to keep as much of this in one place as possible (and out -# of each subdirectory, eg: newlib, libio, etc.) until the right way to do -# this (ha ha) is decided upon. -# -# This is where a target selects what multilib directories to build. -# It is advisable to support a few --enable/--disable options to let the -# user select which libraries s/he really wants. -# -# Subdirectories wishing to use multilib should put the following lines -# in the initial ("common") section of configure.in: -# -#if [ -n "${with_multilib_top}" ]; then -# . ${with_multilib_top}/../cfg-ml-com.in -#else -# . ${srcdir}/../cfg-ml-com.in -#fi -# -# `with_multilib_top' exists to handle the case of configuring in the source -# tree: ${srcdir} is not constant. -# -# The following should be added to the "post-target" section of configure.in: -# -#if [ -n "${with_multilib_top}" ]; then -# . ${with_multilib_top}/../cfg-ml-pos.in -#else -# . ${srcdir}/../cfg-ml-pos.in -#fi - -# FIXME: Multilib is currently disabled by default for everything other than -# newlib. It is up to each target to turn on multilib support for the other -# libraries as desired. -# -# FIXME: It would be better if we could use the --print-multi-lib switch to -# gcc to get the list of directories to build, but at this point the compiler -# has not been built. - -# Only do this if --enable-multilib. -# And only if at the top level, not a multilib subdirectory. - -if [ "${enable_multilib}" = yes -a -z "${with_multisubdir}" ]; then - -# Doing this in the common section means ${target} isn't set yet, so compute -# a copy here. This is a bit kludgey, but again the current (short term) goal -# is to be as unobtrusive (sp?) to the rest of the sources as possible. - -if result=`${config_shell} ${configsub} ${target_alias}` ; then - true -else - echo "Unrecognized target system name ${target_alias}." 1>&2 - exit 1 -fi -target_cpu=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\1/'` -target_vendor=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'` -target_os=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'` -target=${target_cpu}-${target_vendor}-${target_os} - -# FIXME: Perhaps we can do something like the following instead. -# Fetch from gcc the multilib directories to use if we can. -# if [ -f ${srcdir}/../gcc/genmultilib -a -f ../gcc/Makefile ]; then -# options=`grep "^MULTILIB_OPTIONS" ../gcc/Makefile | sed -e 's/^.*=//'` -# multidirs=`${srcdir}/../gcc/genmultilib "$options" | \ -# sed -e 's/^#define.*//' -e 's/^[.].*//' -e 's/".*//' -e 's/ .*//'` -# else -# multidirs="" -# fi - -case "${target}" in -# start-sanitize-arc -arc-sbp-elf*) - if [ x$enable_biendian = xyes ] - then - multidirs="be host graphics audio be/host be/graphics be/audio" - else - multidirs="host graphics audio" - fi - ;; -arc-*-*) - multidirs="be" - ;; -# end-sanitize-arc -hppa*-*-*) - multidirs="soft-float" - ;; -m68*-*-aout* | m68*-*-coff* | m68*-*-elf* | m68*-*-vxworks*) - multidirs="m68000 m68020 m68881 msoft-float m68000/m68881 m68000/msoft-float m68020/m68881 m68020/msoft-float" - ;; -i960-*-*) - multidirs=float - ;; -sparclite-*-* | sparclitefrw*-*-*) - multidirs="mfpu msoft-float mflat mno-flat mfpu/mflat mfpu/mno-flat msoft-float/mflat msoft-float/mno-flat" - ;; -sparc-*-* | sparcfrw*-*-*) - multidirs="soft v8 soft/v8" - ;; -z8k-*-coff) - multidirs="z8001 std z8001/std" - ;; -h8300-*-*) - multidirs=h8300h - ;; -h8500-*-*) - multidirs="mbig msmall mcompact mmedium" - ;; -# start-sanitize-jaguar -jaguar-*-*) - multidirs="be" - ;; -# end-sanitize-jaguar -sh-*-*) - multidirs="ml m2 ml/m2" -# start-sanitize-sh3e - multidirs="ml m2 ml/m2 m3e ml/m3e" -# end-sanitize-sh3e - ;; -mips*-*-*) - # Note that not all of these will be built for a particular - # target; what is build depends upon the output gcc - # --print-multi-lib. We configure them all, to make our life - # simpler here. If somebody cares about configuration - # efficiency, they will need to switch off on the various - # targets to configure just the directories needed for that - # target. - # - # In the long run, it would be better to configure based on - # the output of gcc --print-multi-lib, but, to do that, we - # would have to build gcc before configuring newlib. - # - # Default to including the single-float directories. - if [ x$enable_single_float = x ]; then - enable_single_float=yes - fi - if [ x$enable_single_float = xyes ]; then - multidirs="soft-float single el eb mips1 mips3 soft-float/el soft-float/eb soft-float/mips1 soft-float/mips3 soft-float/el/mips1 soft-float/el/mips3 soft-float/eb/mips1 soft-float/eb/mips3 single/el single/eb single/mips1 single/mips3 single/el/mips1 single/el/mips3 single/eb/mips1 single/eb/mips3 el/mips1 el/mips3 eb/mips1 eb/mips3" - else - multidirs="soft-float el eb mips1 mips3 soft-float/el soft-float/eb soft-float/mips1 soft-float/mips3 soft-float/el/mips1 soft-float/el/mips3 soft-float/eb/mips1 soft-float/eb/mips3 el/mips1 el/mips3 eb/mips1 eb/mips3" - fi - if [ x$enable_biendian = xno ] - then - old_multidirs="${multidirs}" - multidirs="" - for x in ${old_multidirs}; do - case "$x" in - *endian* ) : ;; - *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; - esac - done - fi - if [ x$enable_softfloat = xno ] - then - old_multidirs="${multidirs}" - multidirs="" - for x in ${old_multidirs}; do - case "$x" in - *soft-float* ) : ;; - *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; - esac - done - fi - if [ x$enable_relocatable = xno ] - then - old_multidirs="${multidirs}" - multidirs="" - for x in ${old_multidirs}; do - case "$x" in - *relocatable* ) : ;; - *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; - esac - done - fi - if [ x$enable_sysv = xno ] - then - old_multidirs="${multidirs}" - multidirs="" - for x in ${old_multidirs}; do - case "$x" in - *sysv* ) : ;; - *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; - esac - done - fi - ;; -powerpc-ibm-aix* | rs6000-ibm-aix*) - multidirs="soft-float common soft-float/common" - if [ x$enable_softfloat = xno ] - then - old_multidirs="${multidirs}" - multidirs="" - for x in ${old_multidirs}; do - case "$x" in - *soft-float* ) : ;; - *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; - esac - done - fi - if [ x$enable_commoncpu = xno ] - then - old_multidirs="${multidirs}" - multidirs="" - for x in ${old_multidirs}; do - case "$x" in - *common* ) : ;; - *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; - esac - done - fi - ;; -powerpc-*-eabiaix*) - multidirs="soft-float relocatable little sysv little/sysv relocatable/little relocatable/sysv relocatable/little/sysv soft-float/relocatable soft-float/little soft-float/sysv soft-float/little/sysv soft-float/relocatable/little soft-float/relocatable/sysv soft-float/relocatable/little/sysv" - if [ x$enable_biendian = xno ] - then - old_multidirs="${multidirs}" - multidirs="" - for x in ${old_multidirs}; do - case "$x" in - *endian* ) : ;; - *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; - esac - done - fi - if [ x$enable_softfloat = xno ] - then - old_multidirs="${multidirs}" - multidirs="" - for x in ${old_multidirs}; do - case "$x" in - *soft-float* ) : ;; - *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; - esac - done - fi - if [ x$enable_relocatable = xno ] - then - old_multidirs="${multidirs}" - multidirs="" - for x in ${old_multidirs}; do - case "$x" in - *relocatable* ) : ;; - *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; - esac - done - fi - if [ x$enable_sysv = xno ] - then - old_multidirs="${multidirs}" - multidirs="" - for x in ${old_multidirs}; do - case "$x" in - *sysv* ) : ;; - *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; - esac - done - fi - ;; -powerpc-*-eabi* | powerpc-*-elf* | powerpc-*-sysv4*) - multidirs="soft-float relocatable little aix little/aix relocatable/little relocatable/aix relocatable/little/aix soft-float/relocatable soft-float/little soft-float/aix soft-float/little/aix soft-float/relocatable/little soft-float/relocatable/aix soft-float/relocatable/little/aix aixdesc soft-float/aixdesc" - if [ x$enable_biendian = xno ] - then - old_multidirs="${multidirs}" - multidirs="" - for x in ${old_multidirs}; do - case "$x" in - *endian* ) : ;; - *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; - esac - done - fi - if [ x$enable_softfloat = xno ] - then - old_multidirs="${multidirs}" - multidirs="" - for x in ${old_multidirs}; do - case "$x" in - *soft-float* ) : ;; - *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; - esac - done - fi - if [ x$enable_relocatable = xno ] - then - old_multidirs="${multidirs}" - multidirs="" - for x in ${old_multidirs}; do - case "$x" in - *relocatable* ) : ;; - *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; - esac - done - fi - if [ x$enable_aix = xno ] - then - old_multidirs="${multidirs}" - multidirs="" - for x in ${old_multidirs}; do - case "$x" in - *aix* ) : ;; - *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; - esac - done - fi - ;; -powerpcle-*-eabi* | powerpcle-*-elf* | powerpcle-*-sysv4*) - multidirs="soft-float relocatable big aix big/aix relocatable/big relocatable/aix relocatable/big/aix soft-float/relocatable soft-float/big soft-float/aix soft-float/big/aix soft-float/relocatable/big soft-float/relocatable/aix soft-float/relocatable/big/aix" - if [ x$enable_biendian = xno ] - then - old_multidirs="${multidirs}" - multidirs="" - for x in ${old_multidirs}; do - case "$x" in - *endian* ) : ;; - *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; - esac - done - fi - if [ x$enable_softfloat = xno ] - then - old_multidirs="${multidirs}" - multidirs="" - for x in ${old_multidirs}; do - case "$x" in - *soft-float* ) : ;; - *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; - esac - done - fi - if [ x$enable_relocatable = xno ] - then - old_multidirs="${multidirs}" - multidirs="" - for x in ${old_multidirs}; do - case "$x" in - *relocatable* ) : ;; - *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; - esac - done - fi - if [ x$enable_aix = xno ] - then - old_multidirs="${multidirs}" - multidirs="" - for x in ${old_multidirs}; do - case "$x" in - *aix* ) : ;; - *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; - esac - done - fi - ;; -*) - multidirs= - ;; -esac - -# We must freshly configure each subdirectory. This bit of code is -# actually partially stolen from the main configure script. FIXME. - -if [ -n "${multidirs}" ] && [ -z "${norecursion}" ]; then - for dir in ${multidirs}; do - - if [ -d ${dir} ]; then true; else mkdir ${dir}; fi - - dotdot=../`echo ${dir} | sed -e 's|[^/]||g' -e 's|/|../|g'` - - case ${srcdir} in - ".") - echo Building symlink tree in `pwd`/${dir} - rm -f tmpconfig - cat >tmpconfig <<\EOF -#!/bin/sh -for f in `ls -a $1`; do - if [ -d $1$f ]; then - found= - for i in $2; do - if [ "$f" = "$i" ]; then - found=yes - fi - done - if [ -z "${found}" ]; then - if [ -d $f ]; then true; else mkdir $f; fi - (cd $f; ../$0 ../$1$f/ "$2") - fi - else - rm -f $f - ln -s $1$f . - fi -done -EOF - chmod +x tmpconfig - (cd ${dir}; - ${dotdot}tmpconfig ${dotdot} ". .. CVS tmpconfig ${multidirs}") - rm -f tmpconfig - srcdiroption= - multilib_top=${dotdot} - ;; - *) - case "${srcdir}" in - /*) # absolute path - newsrcdir=${srcdir}/${configdir} - ;; - *) # otherwise relative - newsrcdir=${dotdot}${srcdir}/${configdir} - ;; - esac - srcdiroption="-srcdir=${newsrcdir}" - multilib_top=${newsrcdir} - ;; - esac - - case "${progname}" in - /*) recprog=${progname} ;; - *) recprog=${dotdot}${progname} ;; - esac - - POPDIR=${PWD=`pwd`} - cd ${dir} - if eval ${config_shell} ${recprog} ${verbose} \ - --with-multisubdir=${dir} --with-multilib-top=${multilib_top} \ - ${buildopt} --host=${host_alias} --target=${target_alias} \ - ${prefixoption} ${tmpdiroption} ${exec_prefixoption} \ - ${srcdiroption} ${program_prefixoption} ${program_suffixoption} \ - ${program_transform_nameoption} ${site_option} ${withoptions} \ - ${withoutoptions} ${enableoptions} ${disableoptions} \ - ${cache_file_option} ${removing} ${other_options} ${redirect} ; then - true - else - exit 1 - fi - - cd ${POPDIR} - - done -fi - -fi # ${enable_multilib = yes -a -z ${with_multisubdir} diff --git a/cfg-ml-pos.in b/cfg-ml-pos.in deleted file mode 100644 index 34030986d42..00000000000 --- a/cfg-ml-pos.in +++ /dev/null @@ -1,111 +0,0 @@ -# Configure fragment invoked in the post-target section for subdirs -# wanting multilib support. -# The intent is to keep as much of this in one place as possible (and out -# of each subdirectory, eg: newlib, libio, etc.) until the right way to do -# this (ha ha) is decided upon. - -# Only do this if --enable-multilib. - -if [ "${enable_multilib}" = yes ]; then - -if [ -z "${with_multisubdir}" ]; then - multisubdir= -else - multisubdir="/${with_multisubdir}" - # The '[^/][^/]*' appears that way to work around a SunOS sed bug. - dotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'` - # TOP is used by newlib and should not be used elsewhere for this purpose. - # MULTITOP is the proper one to use. - # FIXME: newlib needs to be updated to use MULTITOP so we can delete TOP. - # Newlib may wish to continue to use TOP for its own purposes of course. - sed -e "s:^TOP[ ]*=[ ]*\([./]*\)[ ]*$:TOP = ${dotdot}/\1:" \ - -e "s:^MULTITOP[ ]*=.*$:MULTITOP = ${dotdot}:" \ - ${Makefile} > Makefile.tem - rm -f ${Makefile} - mv Makefile.tem ${Makefile} -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 leading '/'. -# 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. -# -# ??? 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). - -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} - -# ??? May wish to add a check to avoid appending this to Makefiles that -# don't need it. It's not necessary, but is cleaner. - -cat > Multi.tem <<\EOF - -# FIXME: There should be an @-sign in front of the `if'. -# Leave out until this is tested a bit more. -multi-do: - if [ -z "$(MULTIDIRS)" ]; then \ - true; \ - else \ - rootpre=`pwd`/; export rootpre; \ - srcrootpre=`cd $(srcdir); pwd`/; export srcrootpre; \ - compiler="$(CC)"; \ - for i in `$${compiler} --print-multi-lib 2>/dev/null`; do \ - dir=`echo $$i | sed -e 's/;.*$$//'`; \ - if [ "$${dir}" = "." ]; then \ - true; \ - else \ - if [ -d $${dir} ]; then \ - flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \ - if (cd $${dir}; $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(CFLAGS) $${flags}" \ - CXXFLAGS="$(CXXFLAGS) $${flags}" \ - LIBCFLAGS="$(LIBCFLAGS) $${flags}" \ - LIBCXXFLAGS="$(LIBCXXFLAGS) $${flags}" \ - $(DO)); then \ - true; \ - else \ - exit 1; \ - fi; \ - else true; \ - fi; \ - fi; \ - done; \ - fi - -# FIXME: There should be an @-sign in front of the `if'. -# Leave out until this is tested a bit more. -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 # "${enable_multilib}" = yes diff --git a/config-ml.in b/config-ml.in new file mode 100644 index 00000000000..0127fe94c02 --- /dev/null +++ b/config-ml.in @@ -0,0 +1,689 @@ +set -x +# Configure fragment invoked in the post-target section for subdirs +# wanting multilib support. +# +# It is advisable to support a few --enable/--disable options to let the +# user select which libraries s/he really wants. +# +# Subdirectories wishing to use multilib should put the following lines +# in the "post-target" section of configure.in. +# +# if [ "${srcdir}" = "." ] ; then +# if [ "${with_target_subdir}" != "." ] ; then +# . ${srcdir}/${with_multisrctop}../../config-ml.in +# else +# . ${srcdir}/${with_multisrctop}../config-ml.in +# fi +# else +# . ${srcdir}/../config-ml.in +# fi +# +# See librx/configure.in in the libg++ distribution for an example of how +# to handle autoconf'd libraries. +# +# Things are complicated because 6 separate cases must be handled: +# 2 (native, cross) x 3 (absolute-path, relative-not-dot, dot) = 6. +# +# srcdir=. is special. It must handle make programs that don't handle VPATH. +# To implement this, a symlink tree is built for each library and for each +# multilib subdir. +# +# The build tree is layed out as +# +# ./ +# libg++ +# newlib +# m68020/ +# libg++ +# newlib +# m68881/ +# libg++ +# newlib +# +# The nice feature about this arrangement is that inter-library references +# in the build tree work without having to care where you are. Note that +# inter-library references also work in the source tree because symlink trees +# are built when srcdir=. +# +# Configure variables: +# ${with_target_subdir} = "." for native, or ${target_alias} for cross. +# Set by top level Makefile. +# ${with_multisrctop} = how many levels of multilibs there are in the source +# tree. It exists to handle the case of configuring in the source tree: +# ${srcdir} is not constant. +# ${with_multisubdir} = name of multilib subdirectory (eg: m68020/m68881). +# +# Makefile variables: +# MULTISRCTOP = number of multilib levels in source tree (+1 if cross) +# MULITBUILDTOP = number of multilib levels in build tree +# MULTIDIRS = list of multilib subdirs (eg: m68000 m68020 ...) +# (only defined in each library's main Makefile). +# MULTISUBDIR = installed subdirectory name with leading '/' (eg: /m68000) +# (only defined in each multilib subdir). + +# FIXME: Multilib is currently disabled by default for everything other than +# newlib. It is up to each target to turn on multilib support for the other +# libraries as desired. + +# We have to handle being invoked by both Cygnus configure and Autoconf. +# We except both to define `srcdir' and `target' (we *could* figure them +# out, but we'd have to do work that they're already done to figure them out). +# We expect Cygnus configure to define `arguments' and Autoconf to define +# `ac_configure_args'. + +if [ -n "${ac_configure_args}" ]; then + Makefile=${ac_file-Makefile} + config_shell=${CONFIG_SHELL-/bin/sh} + arguments="${ac_configure_args}" +else + Makefile=${Makefile-Makefile} + config_shell=${config_shell-/bin/sh} +fi + +# Scan all the arguments and set all the ones we need. + +for option in $arguments +do + case $option in + --*) ;; + -*) option=-$option ;; + esac + + case $option in + --*=*) + optarg=`echo $option | sed -e 's/^[^=]*=//'` + ;; + esac + + case $option in + --disable-*) + enableopt=`echo ${option} | sed 's:^--disable-:enable_:;s:-:_:g'` + eval $enableopt=no + ;; + --enable-*) + case "$option" in + *=*) ;; + *) optarg=yes ;; + esac + enableopt=`echo ${option} | sed 's:^--::;s:=.*$::;s:-:_:g'` + eval $enableopt="$optarg" + ;; + --norecursion | --no*) + norecursion=yes + ;; + --verbose | --v | --verb*) + verbose=--verbose + ;; + --with-*) + case "$option" in + *=*) ;; + *) optarg=yes ;; + esac + withopt=`echo ${option} | sed 's:^--::;s:=.*$::;s:-:_:g'` + eval $withopt="$optarg" + ;; + --without-*) + withopt=`echo ${option} | sed 's:^--::;s:out::;s:-:_:g'` + eval $withopt=no + ;; + esac +done + +# Only do this if --enable-multilib. +if [ "${enable_multilib}" = yes ]; then + +# Compute whether this is the library's top level directory +# (ie: not a multilib subdirectory, and not a subdirectory like libg++/src). +# ${with_multisubdir} tells us we're in the right branch, but we could be +# in a subdir of that. +# ??? The previous version could void this test by separating the process into +# two files: one that only the library's toplevel configure.in ran (to +# configure the multilib subdirs), and another that all configure.in's ran to +# update the Makefile. It seemed reasonable to collapse all multilib support +# into one file, but it does leave us with having to perform this test. +ml_toplevel_p=no +if [ -z "${with_multisubdir}" ]; then + if [ "${srcdir}" = "." ]; then + # ${with_target_subdir} = "." for native, otherwise target alias. + if [ "${with_target_subdir}" = "." ]; then + if [ -f ../config-ml.in ]; then + ml_toplevel_p=yes + fi + else + if [ -f ../../config-ml.in ]; then + ml_toplevel_p=yes + fi + fi + else + if [ -f ${srcdir}/../config-ml.in ]; then + ml_toplevel_p=yes + fi + fi +fi + +# If this is the library's top level directory, set multidirs to the +# multilib subdirs to support. This lives at the top because we need +# `multidirs' set right away, and this section is subject to frequent +# editing (addition of new targets, etc.). + +if [ "${ml_toplevel_p}" = yes ]; then + +case "${target}" in +# start-sanitize-arc +arc-sbp-elf*) + if [ x$enable_biendian = xyes ] + then + multidirs="be host graphics audio be/host be/graphics be/audio" + else + multidirs="host graphics audio" + fi + ;; +arc-*-*) + multidirs="be" + ;; +# end-sanitize-arc +hppa*-*-*) + multidirs="soft-float" + ;; +#m68*-*-aout* | m68*-*-coff* | m68*-*-elf* | m68*-*-vxworks*) +# multidirs="m68000 m68020 m68881 msoft-float m68000/m68881 m68000/msoft-float m68020/m68881 m68020/msoft-float" +# ;; +m68*-*-aout* | m68*-*-coff* | m68*-*-elf* | m68*-*-vxworks*) + multidirs="m68000 m68000/m68881" + ;; +i960-*-*) + multidirs=float + ;; +sparclite-*-* | sparclitefrw*-*-*) + multidirs="mfpu msoft-float mflat mno-flat mfpu/mflat mfpu/mno-flat msoft-float/mflat msoft-float/mno-flat" + ;; +sparc-*-* | sparcfrw*-*-*) + multidirs="soft v8 soft/v8" + ;; +z8k-*-coff) + multidirs="z8001 std z8001/std" + ;; +h8300-*-*) + multidirs=h8300h + ;; +h8500-*-*) + multidirs="mbig msmall mcompact mmedium" + ;; +# start-sanitize-jaguar +jaguar-*-*) + multidirs="be" + ;; +# end-sanitize-jaguar +sh-*-*) + multidirs="ml m2 ml/m2" +# start-sanitize-sh3e + multidirs="ml m2 ml/m2 m3e ml/m3e" +# end-sanitize-sh3e + ;; +mips*-*-*) + # Note that not all of these will be built for a particular + # target; what is build depends upon the output gcc + # --print-multi-lib. We configure them all, to make our life + # simpler here. If somebody cares about configuration + # efficiency, they will need to switch off on the various + # targets to configure just the directories needed for that + # target. + # + # In the long run, it would be better to configure based on + # the output of gcc --print-multi-lib, but, to do that, we + # would have to build gcc before configuring newlib. + # + # Default to including the single-float directories. + if [ x$enable_single_float = x ]; then + enable_single_float=yes + fi + if [ x$enable_single_float = xyes ]; then + multidirs="soft-float single el eb mips1 mips3 soft-float/el soft-float/eb soft-float/mips1 soft-float/mips3 soft-float/el/mips1 soft-float/el/mips3 soft-float/eb/mips1 soft-float/eb/mips3 single/el single/eb single/mips1 single/mips3 single/el/mips1 single/el/mips3 single/eb/mips1 single/eb/mips3 el/mips1 el/mips3 eb/mips1 eb/mips3" + else + multidirs="soft-float el eb mips1 mips3 soft-float/el soft-float/eb soft-float/mips1 soft-float/mips3 soft-float/el/mips1 soft-float/el/mips3 soft-float/eb/mips1 soft-float/eb/mips3 el/mips1 el/mips3 eb/mips1 eb/mips3" + fi + if [ x$enable_biendian = xno ] + then + old_multidirs="${multidirs}" + multidirs="" + for x in ${old_multidirs}; do + case "$x" in + *endian* ) : ;; + *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; + esac + done + fi + if [ x$enable_softfloat = xno ] + then + old_multidirs="${multidirs}" + multidirs="" + for x in ${old_multidirs}; do + case "$x" in + *soft-float* ) : ;; + *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; + esac + done + fi + if [ x$enable_relocatable = xno ] + then + old_multidirs="${multidirs}" + multidirs="" + for x in ${old_multidirs}; do + case "$x" in + *relocatable* ) : ;; + *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; + esac + done + fi + if [ x$enable_sysv = xno ] + then + old_multidirs="${multidirs}" + multidirs="" + for x in ${old_multidirs}; do + case "$x" in + *sysv* ) : ;; + *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; + esac + done + fi + ;; +powerpc-ibm-aix* | rs6000-ibm-aix*) + multidirs="soft-float common soft-float/common" + if [ x$enable_softfloat = xno ] + then + old_multidirs="${multidirs}" + multidirs="" + for x in ${old_multidirs}; do + case "$x" in + *soft-float* ) : ;; + *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; + esac + done + fi + if [ x$enable_commoncpu = xno ] + then + old_multidirs="${multidirs}" + multidirs="" + for x in ${old_multidirs}; do + case "$x" in + *common* ) : ;; + *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; + esac + done + fi + ;; +powerpc-*-eabiaix*) + multidirs="soft-float relocatable little sysv little/sysv relocatable/little relocatable/sysv relocatable/little/sysv soft-float/relocatable soft-float/little soft-float/sysv soft-float/little/sysv soft-float/relocatable/little soft-float/relocatable/sysv soft-float/relocatable/little/sysv" + if [ x$enable_biendian = xno ] + then + old_multidirs="${multidirs}" + multidirs="" + for x in ${old_multidirs}; do + case "$x" in + *endian* ) : ;; + *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; + esac + done + fi + if [ x$enable_softfloat = xno ] + then + old_multidirs="${multidirs}" + multidirs="" + for x in ${old_multidirs}; do + case "$x" in + *soft-float* ) : ;; + *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; + esac + done + fi + if [ x$enable_relocatable = xno ] + then + old_multidirs="${multidirs}" + multidirs="" + for x in ${old_multidirs}; do + case "$x" in + *relocatable* ) : ;; + *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; + esac + done + fi + if [ x$enable_sysv = xno ] + then + old_multidirs="${multidirs}" + multidirs="" + for x in ${old_multidirs}; do + case "$x" in + *sysv* ) : ;; + *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; + esac + done + fi + ;; +powerpc-*-eabi* | powerpc-*-elf* | powerpc-*-sysv4*) + multidirs="soft-float relocatable little aix little/aix relocatable/little relocatable/aix relocatable/little/aix soft-float/relocatable soft-float/little soft-float/aix soft-float/little/aix soft-float/relocatable/little soft-float/relocatable/aix soft-float/relocatable/little/aix aixdesc soft-float/aixdesc" + if [ x$enable_biendian = xno ] + then + old_multidirs="${multidirs}" + multidirs="" + for x in ${old_multidirs}; do + case "$x" in + *endian* ) : ;; + *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; + esac + done + fi + if [ x$enable_softfloat = xno ] + then + old_multidirs="${multidirs}" + multidirs="" + for x in ${old_multidirs}; do + case "$x" in + *soft-float* ) : ;; + *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; + esac + done + fi + if [ x$enable_relocatable = xno ] + then + old_multidirs="${multidirs}" + multidirs="" + for x in ${old_multidirs}; do + case "$x" in + *relocatable* ) : ;; + *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; + esac + done + fi + if [ x$enable_aix = xno ] + then + old_multidirs="${multidirs}" + multidirs="" + for x in ${old_multidirs}; do + case "$x" in + *aix* ) : ;; + *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; + esac + done + fi + ;; +powerpcle-*-eabi* | powerpcle-*-elf* | powerpcle-*-sysv4*) + multidirs="soft-float relocatable big aix big/aix relocatable/big relocatable/aix relocatable/big/aix soft-float/relocatable soft-float/big soft-float/aix soft-float/big/aix soft-float/relocatable/big soft-float/relocatable/aix soft-float/relocatable/big/aix" + if [ x$enable_biendian = xno ] + then + old_multidirs="${multidirs}" + multidirs="" + for x in ${old_multidirs}; do + case "$x" in + *endian* ) : ;; + *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; + esac + done + fi + if [ x$enable_softfloat = xno ] + then + old_multidirs="${multidirs}" + multidirs="" + for x in ${old_multidirs}; do + case "$x" in + *soft-float* ) : ;; + *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; + esac + done + fi + if [ x$enable_relocatable = xno ] + then + old_multidirs="${multidirs}" + multidirs="" + for x in ${old_multidirs}; do + case "$x" in + *relocatable* ) : ;; + *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; + esac + done + fi + if [ x$enable_aix = xno ] + then + old_multidirs="${multidirs}" + multidirs="" + for x in ${old_multidirs}; do + case "$x" in + *aix* ) : ;; + *) if [ x"$multidirs" = x ]; then multidirs="$x"; else multidirs="${multidirs} ${x}"; fi ;; + esac + done + fi + ;; +*) + multidirs= + ;; +esac + +# Add code to library's top level makefile to handle building the multilib +# subdirs. + +cat > Multi.tem <<\EOF + +# FIXME: There should be an @-sign in front of the `if'. +# Leave out until this is tested a bit more. +multi-do: + if [ -z "$(MULTIDIRS)" ]; then \ + true; \ + else \ + rootpre=`pwd`/; export rootpre; \ + srcrootpre=`cd $(srcdir); pwd`/; export srcrootpre; \ + lib=`echo $${rootpre} | sed -e 's,^.*/\([^/][^/]*\)/$$,\1,'`; \ + compiler="$(CC)"; \ + for i in `$${compiler} --print-multi-lib 2>/dev/null`; do \ + dir=`echo $$i | sed -e 's/;.*$$//'`; \ + if [ "$${dir}" = "." ]; then \ + true; \ + else \ + if [ -d ../$${dir}/$${lib} ]; then \ + flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \ + if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS) $${flags}" \ + CXXFLAGS="$(CXXFLAGS) $${flags}" \ + LIBCFLAGS="$(LIBCFLAGS) $${flags}" \ + LIBCXXFLAGS="$(LIBCXXFLAGS) $${flags}" \ + $(DO)); then \ + true; \ + else \ + exit 1; \ + fi; \ + else true; \ + fi; \ + fi; \ + done; \ + fi + +# FIXME: There should be an @-sign in front of the `if'. +# Leave out until this is tested a bit more. +multi-clean: + if [ -z "$(MULTIDIRS)" ]; then \ + true; \ + else \ + lib=`pwd | sed -e 's,^.*/\([^/][^/]*\)/$$,\1,'`; \ + for dir in Makefile $(MULTIDIRS); do \ + if [ -f ../$${dir}/$${lib}/Makefile ]; then \ + if (cd ../$${dir}/$${lib}; $(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 # ${ml_toplevel_p} = yes + +if [ "${verbose}" = --verbose ]; then + echo "Adding multilib support to Makefile in `pwd`" + if [ "${ml_toplevel_p}" = yes ]; then + echo "multidirs=${multidirs}" + fi + echo "with_multisubdir=${with_multisubdir}" +fi + +if [ "${srcdir}" = "." ]; then + if [ "${with_target_subdir}" != "." ]; then + ml_srcdotdot="../" + else + ml_srcdotdot="" + fi +else + ml_srcdotdot="" +fi + +if [ -z "${with_multisubdir}" ]; then + ml_subdir= + ml_builddotdot= + : # ml_srcdotdot= # already set +else + ml_subdir="/${with_multisubdir}" + # The '[^/][^/]*' appears that way to work around a SunOS sed bug. + ml_builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`/ + if [ "$srcdir" = "." ]; then + ml_srcdotdot=${ml_srcdotdot}${ml_builddotdot} + else + : # ml_srcdotdot= # already set + fi +fi + +if [ "${ml_toplevel_p}" = yes ]; then + ml_do='$(MAKE)' + ml_clean='$(MAKE)' +else + ml_do=true + ml_clean=true +fi + +# TOP is used by newlib and should not be used elsewhere for this purpose. +# MULTI{SRC,BUILD}TOP are the proper ones to use. MULTISRCTOP is empty +# when srcdir != builddir. MULTIBUILDTOP is always some number of ../'s. +# FIXME: newlib needs to be updated to use MULTI{SRC,BUILD}TOP so we can +# delete TOP. Newlib may wish to continue to use TOP for its own purposes +# of course. +# 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 leading '/'. +# 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. +# +# ??? 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). + +sed -e "s:^TOP[ ]*=[ ]*\([./]*\)[ ]*$:TOP = ${ml_builddotdot}\1:" \ + -e "s:^MULTISRCTOP[ ]*=.*$:MULTISRCTOP = ${ml_srcdotdot}:" \ + -e "s:^MULTIBUILDTOP[ ]*=.*$:MULTIBUILDTOP = ${ml_builddotdot}:" \ + -e "s:^MULTIDIRS[ ]*=.*$:MULTIDIRS = ${multidirs}:" \ + -e "s:^MULTISUBDIR[ ]*=.*$:MULTISUBDIR = ${ml_subdir}:" \ + -e "s:^MULTIDO[ ]*=.*$:MULTIDO = $ml_do:" \ + -e "s:^MULTICLEAN[ ]*=.*$:MULTICLEAN = $ml_clean:" \ + ${Makefile} > Makefile.tem +rm -f ${Makefile} +mv Makefile.tem ${Makefile} + +# If this is the library's top level, configure each multilib subdir. +# This is done at the end because this is the loop that runs configure +# in each multilib subdir and it seemed reasonable to finish updating the +# Makefile before going on to configure the subdirs. + +if [ "${ml_toplevel_p}" = yes ]; then + +# We must freshly configure each subdirectory. This bit of code is +# actually partially stolen from the main configure script. FIXME. + +if [ -n "${multidirs}" ] && [ -z "${norecursion}" ]; then + + if [ "${verbose}" = --verbose ]; then + echo "Running configure in multilib subdirs ${multidirs}" + echo "pwd: `pwd`" + fi + + ml_origdir=`pwd` + ml_libdir=`echo $ml_origdir | sed -e 's,^.*/,,'` + # cd to top-level-build-dir/${with_target_subdir} + cd .. + + for dir in ${multidirs}; do + + if [ "${verbose}" = --verbose ]; then + echo "Running configure in multilib subdir ${dir}" + echo "pwd: `pwd`" + fi + + if [ -d ${dir} ]; then true; else mkdir ${dir}; fi + if [ -d ${dir}/${ml_libdir} ]; then true; else mkdir ${dir}/${ml_libdir}; fi + + # Eg: if ${dir} = m68000/m68881, dotdot = ../../ + dotdot=../`echo ${dir} | sed -e 's|[^/]||g' -e 's|/|../|g'` + + case ${srcdir} in + ".") + echo Building symlink tree in `pwd`/${dir}/${ml_libdir} + if [ "${with_target_subdir}" != "." ]; then + ml_unsubdir="../" + else + ml_unsubdir="" + fi + (cd ${dir}/${ml_libdir}; + ../${dotdot}${ml_unsubdir}symlink-tree ../${dotdot}${ml_unsubdir}${ml_libdir} "") + newsrcdir="." + srcdiroption= + multisrctop=${dotdot} + ;; + *) + case "${srcdir}" in + /*) # absolute path + newsrcdir=${srcdir} + ;; + *) # otherwise relative + newsrcdir=${dotdot}${srcdir} + ;; + esac + srcdiroption="-srcdir=${newsrcdir}" + multisrctop= + ;; + esac + + case "${progname}" in + /*) recprog=${progname} ;; + *) recprog=${dotdot}${progname} ;; + esac + + # FIXME: POPDIR=${PWD=`pwd`} doesn't work here. + ML_POPDIR=`pwd` + cd ${dir}/${ml_libdir} + + if [ -f ${newsrcdir}/configure ]; then + recprog=${newsrcdir}/configure + fi + if eval ${config_shell} -x ${recprog} \ + --with-multisubdir=${dir} --with-multisrctop=${multisrctop} \ + $arguments ${srcdiroption} ; then + true + else + exit 1 + fi + + cd ${ML_POPDIR} + + done + + cd ${ml_origdir} +fi + +fi # ${ml_toplevel_p} = yes +fi # ${enable_multilib} = yes -- 2.30.2