github.com/llvm-mirror/llgo@v0.0.0-20190322182713-bf6f0a60fce1/third_party/gofrontend/config-ml.in (about)

     1  # Configure fragment invoked in the post-target section for subdirs
     2  # wanting multilib support.
     3  #
     4  # Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
     5  # 2005, 2006, 2007, 2008, 2010, 2011, 2014 Free Software Foundation, Inc.
     6  #
     7  # This file is free software; you can redistribute it and/or modify
     8  # it under the terms of the GNU General Public License as published by
     9  # the Free Software Foundation; either version 2 of the License, or
    10  # (at your option) any later version.
    11  #
    12  # This program is distributed in the hope that it will be useful,
    13  # but WITHOUT ANY WARRANTY; without even the implied warranty of
    14  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    15  # GNU General Public License for more details.
    16  #
    17  # You should have received a copy of the GNU General Public License
    18  # along with this program; if not, write to the Free Software
    19  # Foundation, Inc., 51 Franklin Street, Fifth Floor,
    20  # Boston, MA 02110-1301, USA.
    21  #
    22  # As a special exception to the GNU General Public License, if you
    23  # distribute this file as part of a program that contains a
    24  # configuration script generated by Autoconf, you may include it under
    25  # the same distribution terms that you use for the rest of that program.
    26  #
    27  # Please report bugs to <gcc-bugs@gnu.org>
    28  # and send patches to <gcc-patches@gnu.org>.
    29  
    30  # It is advisable to support a few --enable/--disable options to let the
    31  # user select which libraries s/he really wants.
    32  #
    33  # Subdirectories wishing to use multilib should put the following lines
    34  # in the "post-target" section of configure.in.
    35  #
    36  # if [ "${srcdir}" = "." ] ; then
    37  #   if [ "${with_target_subdir}" != "." ] ; then
    38  #     . ${with_multisrctop}../../config-ml.in
    39  #   else
    40  #     . ${with_multisrctop}../config-ml.in
    41  #   fi
    42  # else
    43  #   . ${srcdir}/../config-ml.in
    44  # fi
    45  #
    46  #
    47  # Things are complicated because 6 separate cases must be handled:
    48  # 2 (native, cross) x 3 (absolute-path, relative-not-dot, dot) = 6.
    49  #
    50  # srcdir=. is special.  It must handle make programs that don't handle VPATH.
    51  # To implement this, a symlink tree is built for each library and for each
    52  # multilib subdir.
    53  #
    54  # The build tree is layed out as
    55  #
    56  # ./
    57  #   newlib
    58  #   m68020/
    59  #          newlib
    60  #          m68881/
    61  #                 newlib
    62  #
    63  # The nice feature about this arrangement is that inter-library references
    64  # in the build tree work without having to care where you are.  Note that
    65  # inter-library references also work in the source tree because symlink trees
    66  # are built when srcdir=.
    67  #
    68  # Unfortunately, trying to access the libraries in the build tree requires
    69  # the user to manually choose which library to use as GCC won't be able to
    70  # find the right one.  This is viewed as the lesser of two evils.
    71  #
    72  # Configure variables:
    73  # ${with_target_subdir} = "." for native, or ${target_alias} for cross.
    74  # Set by top level Makefile.
    75  # ${with_multisrctop} = how many levels of multilibs there are in the source
    76  # tree.  It exists to handle the case of configuring in the source tree:
    77  # ${srcdir} is not constant.
    78  # ${with_multisubdir} = name of multilib subdirectory (eg: m68020/m68881).
    79  #
    80  # Makefile variables:
    81  # MULTISRCTOP = number of multilib levels in source tree (+1 if cross)
    82  # (FIXME: note that this is different than ${with_multisrctop}.  Check out.).
    83  # MULTIBUILDTOP = number of multilib levels in build tree
    84  # MULTIDIRS = list of multilib subdirs (eg: m68000 m68020 ...)
    85  # (only defined in each library's main Makefile).
    86  # MULTISUBDIR = installed subdirectory name with leading '/' (eg: /m68000)
    87  # (only defined in each multilib subdir).
    88  
    89  # FIXME: Multilib is currently disabled by default for everything other than
    90  # newlib.  It is up to each target to turn on multilib support for the other
    91  # libraries as desired.
    92  
    93  # Autoconf incoming variables:
    94  # srcdir, host, ac_configure_args
    95  #
    96  # We *could* figure srcdir and host out, but we'd have to do work that
    97  # our caller has already done to figure them out and requiring these two
    98  # seems reasonable.
    99  # Note that `host' in this case is GCC's `target'.  Target libraries are
   100  # configured for a particular host.
   101  
   102  Makefile=${ac_file-Makefile}
   103  ml_config_shell=${CONFIG_SHELL-/bin/sh}
   104  ml_realsrcdir=${srcdir}
   105  
   106  # Scan all the arguments and set all the ones we need.
   107  
   108  scan_arguments ()
   109  {
   110    ml_verbose=--verbose
   111    for option
   112    do
   113      # Strip single quotes surrounding individual options, that is, remove one
   114      # level of shell quoting for these.
   115      case $option in
   116        \'*\') eval option=$option ;;
   117      esac
   118  
   119      case $option in
   120        --*) ;;
   121        -*) option=-$option ;;
   122      esac
   123  
   124      case $option in
   125        --*=*)
   126  	optarg=`echo $option | sed -e 's/^[^=]*=//'`
   127  	;;
   128      esac
   129  
   130      case $option in
   131        --disable-*)
   132  	enableopt=`echo ${option} | sed 's:^--disable-:enable_:;s:-:_:g'`
   133  	eval $enableopt=no
   134  	;;
   135        --enable-*)
   136  	case "$option" in
   137  	*=*)	;;
   138  	*)	optarg=yes ;;
   139  	esac
   140  	enableopt=`echo ${option} | sed 's:^--::;s:=.*$::;s:-:_:g'`
   141  	# enable_shared and enable_static are handled by configure.
   142  	# Don't undo its work.
   143  	case $enableopt in
   144  	enable_shared | enable_static) ;;
   145  	*) eval $enableopt='$optarg' ;;
   146  	esac
   147  	;;
   148        --norecursion | --no-recursion)
   149  	ml_norecursion=yes
   150  	;;
   151        --silent | --sil* | --quiet | --q*)
   152  	ml_verbose=--silent
   153  	;;
   154        --verbose | --v | --verb*)
   155  	ml_verbose=--verbose
   156  	;;
   157        --with-*)
   158  	case "$option" in
   159  	*=*)	;;
   160  	*)	optarg=yes ;;
   161  	esac
   162  	withopt=`echo ${option} | sed 's:^--::;s:=.*$::;s:-:_:g'`
   163  	eval $withopt='$optarg'
   164  	;;
   165        --without-*)
   166  	withopt=`echo ${option} | sed 's:^--::;s:out::;s:-:_:g'`
   167  	eval $withopt=no
   168  	;;
   169      esac
   170    done
   171  }
   172  # Use eval to properly handle configure arguments such as
   173  # --enable-foo='--enable-a=1 --enable-b=2 --enable-c=3'.
   174  eval scan_arguments "${ac_configure_args}"
   175  unset scan_arguments
   176  
   177  # Only do this if --enable-multilib.
   178  if [ "${enable_multilib}" = yes ]; then
   179  
   180  # Compute whether this is the library's top level directory
   181  # (ie: not a multilib subdirectory, and not a subdirectory like newlib/src).
   182  # ${with_multisubdir} tells us we're in the right branch, but we could be
   183  # in a subdir of that.
   184  # ??? The previous version could void this test by separating the process into
   185  # two files: one that only the library's toplevel configure.in ran (to
   186  # configure the multilib subdirs), and another that all configure.in's ran to
   187  # update the Makefile.  It seemed reasonable to collapse all multilib support
   188  # into one file, but it does leave us with having to perform this test.
   189  ml_toplevel_p=no
   190  if [ -z "${with_multisubdir}" ]; then
   191    if [ "${srcdir}" = "." ]; then
   192      # Use ${ml_realsrcdir} instead of ${srcdir} here to account for ${subdir}.
   193      # ${with_target_subdir} = "." for native, otherwise target alias.
   194      if [ "${with_target_subdir}" = "." ]; then
   195        if [ -f ${ml_realsrcdir}/../config-ml.in ]; then
   196  	ml_toplevel_p=yes
   197        fi
   198      else
   199        if [ -f ${ml_realsrcdir}/../../config-ml.in ]; then
   200  	ml_toplevel_p=yes
   201        fi
   202      fi
   203    else
   204      # Use ${ml_realsrcdir} instead of ${srcdir} here to account for ${subdir}.
   205      if [ -f ${ml_realsrcdir}/../config-ml.in ]; then
   206        ml_toplevel_p=yes
   207      fi
   208    fi
   209  fi
   210  
   211  # If this is the library's top level directory, set multidirs to the
   212  # multilib subdirs to support.  This lives at the top because we need
   213  # `multidirs' set right away.
   214  
   215  if [ "${ml_toplevel_p}" = yes ]; then
   216  
   217  multidirs=
   218  for i in `${CC-gcc} --print-multi-lib 2>/dev/null`; do
   219    dir=`echo $i | sed -e 's/;.*$//'`
   220    if [ "${dir}" = "." ]; then
   221      true
   222    else
   223      if [ -z "${multidirs}" ]; then
   224        multidirs="${dir}"
   225      else
   226        multidirs="${multidirs} ${dir}"
   227      fi
   228    fi
   229  done
   230  
   231  # Target libraries are configured for the host they run on, so we check
   232  # $host here, not $target.
   233  
   234  case "${host}" in
   235  arm-*-*)
   236  	if [ x"$enable_fpu" = xno ]
   237  	then
   238  	  old_multidirs=${multidirs}
   239  	  multidirs=""
   240  	  for x in ${old_multidirs}; do
   241  	    case "${x}" in
   242  	      *fpu*) : ;;
   243  	      *) multidirs="${multidirs} ${x}" ;;
   244  	    esac
   245  	  done
   246  	fi
   247  	if [ x"$enable_26bit" = xno ]
   248  	then
   249  	  old_multidirs=${multidirs}
   250  	  multidirs=""
   251  	  for x in ${old_multidirs}; do
   252  	    case "${x}" in
   253  	      *26bit*) : ;;
   254  	      *) multidirs="${multidirs} ${x}" ;;
   255  	    esac
   256  	  done
   257  	fi
   258  	if [ x"$enable_underscore" = xno ]
   259  	then
   260  	  old_multidirs=${multidirs}
   261  	  multidirs=""
   262  	  for x in ${old_multidirs}; do
   263  	    case "${x}" in
   264  	      *under*) : ;;
   265  	      *) multidirs="${multidirs} ${x}" ;;
   266  	    esac
   267  	  done
   268  	fi
   269  	if [ x"$enable_interwork" = xno ]
   270  	then
   271  	  old_multidirs=${multidirs}
   272  	  multidirs=""
   273  	  for x in ${old_multidirs}; do
   274  	    case "${x}" in
   275  	      *interwork*) : ;;
   276  	      *) multidirs="${multidirs} ${x}" ;;
   277  	    esac
   278  	  done
   279  	fi
   280  	if [ x$enable_biendian = xno ]
   281  	then
   282  	  old_multidirs="${multidirs}"
   283  	  multidirs=""
   284  	  for x in ${old_multidirs}; do
   285  	    case "$x" in
   286  	      *le* ) : ;;
   287  	      *be* ) : ;;
   288  	      *) multidirs="${multidirs} ${x}" ;;
   289  	    esac
   290  	  done
   291  	fi
   292  	if [ x"$enable_nofmult" = xno ]
   293  	then
   294  	  old_multidirs="${multidirs}"
   295  	  multidirs=""
   296  	  for x in ${old_multidirs}; do
   297  	    case "$x" in
   298  	      *nofmult* ) : ;;
   299  	      *) multidirs="${multidirs} ${x}" ;;
   300  	    esac
   301  	  done
   302  	fi
   303  	;;
   304  m68*-*-*)
   305  	if [ x$enable_softfloat = xno ]
   306  	then
   307  	  old_multidirs="${multidirs}"
   308  	  multidirs=""
   309  	  for x in ${old_multidirs}; do
   310  	    case "$x" in
   311  	      *soft-float* ) : ;;
   312  	      *) multidirs="${multidirs} ${x}" ;;
   313  	    esac
   314  	  done
   315  	fi
   316  	if [ x$enable_m68881 = xno ]
   317  	then
   318  	  old_multidirs="${multidirs}"
   319  	  multidirs=""
   320  	  for x in ${old_multidirs}; do
   321  	    case "$x" in
   322  	      *m68881* ) : ;;
   323  	      *) multidirs="${multidirs} ${x}" ;;
   324  	    esac
   325  	  done
   326  	fi
   327  	if [ x$enable_m68000 = xno ]
   328  	then
   329  	  old_multidirs="${multidirs}"
   330  	  multidirs=""
   331  	  for x in ${old_multidirs}; do
   332  	    case "$x" in
   333  	      *m68000* ) : ;;
   334  	      *) multidirs="${multidirs} ${x}" ;;
   335  	    esac
   336  	  done
   337  	fi
   338  	if [ x$enable_m68020 = xno ]
   339  	then
   340  	  old_multidirs="${multidirs}"
   341  	  multidirs=""
   342  	  for x in ${old_multidirs}; do
   343  	    case "$x" in
   344  	      *m68020* ) : ;;
   345  	      *) multidirs="${multidirs} ${x}" ;;
   346  	    esac
   347  	  done
   348  	fi
   349  	;;
   350  mips*-*-*)
   351  	if [ x$enable_single_float = xno ]
   352  	then
   353  	  old_multidirs="${multidirs}"
   354  	  multidirs=""
   355  	  for x in ${old_multidirs}; do
   356  	    case "$x" in
   357  	      *single* ) : ;;
   358  	      *) multidirs="${multidirs} ${x}" ;;
   359  	    esac
   360  	  done
   361  	fi
   362  	if [ x$enable_biendian = xno ]
   363  	then
   364  	  old_multidirs="${multidirs}"
   365  	  multidirs=""
   366  	  for x in ${old_multidirs}; do
   367  	    case "$x" in
   368  	      *el* ) : ;;
   369  	      *eb* ) : ;;
   370  	      *) multidirs="${multidirs} ${x}" ;;
   371  	    esac
   372  	  done
   373  	fi
   374  	if [ x$enable_softfloat = xno ]
   375  	then
   376  	  old_multidirs="${multidirs}"
   377  	  multidirs=""
   378  	  for x in ${old_multidirs}; do
   379  	    case "$x" in
   380  	      *soft-float* ) : ;;
   381  	      *) multidirs="${multidirs} ${x}" ;;
   382  	    esac
   383  	  done
   384  	fi
   385  	;;
   386  powerpc*-*-* | rs6000*-*-*)
   387  	if [ x$enable_aix64 = xno ]
   388  	then
   389  	  old_multidirs="${multidirs}"
   390  	  multidirs=""
   391  	  for x in ${old_multidirs}; do
   392  	    case "$x" in
   393  	      *ppc64* ) : ;;
   394  	      *) multidirs="${multidirs} ${x}" ;;
   395  	    esac
   396  	  done
   397  	fi
   398  	if [ x$enable_pthread = xno ]
   399  	then
   400  	  old_multidirs="${multidirs}"
   401  	  multidirs=""
   402  	  for x in ${old_multidirs}; do
   403  	    case "$x" in
   404  	      *pthread* ) : ;;
   405  	      *) multidirs="${multidirs} ${x}" ;;
   406  	    esac
   407  	  done
   408  	fi
   409  	if [ x$enable_softfloat = xno ]
   410  	then
   411  	  old_multidirs="${multidirs}"
   412  	  multidirs=""
   413  	  for x in ${old_multidirs}; do
   414  	    case "$x" in
   415  	      *soft-float* ) : ;;
   416  	      *) multidirs="${multidirs} ${x}" ;;
   417  	    esac
   418  	  done
   419  	fi
   420  	if [ x$enable_powercpu = xno ]
   421  	then
   422  	  old_multidirs="${multidirs}"
   423  	  multidirs=""
   424  	  for x in ${old_multidirs}; do
   425  	    case "$x" in
   426  	      power | */power | */power/* ) : ;;
   427  	      *) multidirs="${multidirs} ${x}" ;;
   428  	    esac
   429  	  done
   430  	fi
   431  	if [ x$enable_powerpccpu = xno ]
   432  	then
   433  	  old_multidirs="${multidirs}"
   434  	  multidirs=""
   435  	  for x in ${old_multidirs}; do
   436  	    case "$x" in
   437  	      *powerpc* ) : ;;
   438  	      *) multidirs="${multidirs} ${x}" ;;
   439  	    esac
   440  	  done
   441  	fi
   442  	if [ x$enable_powerpcos = xno ]
   443  	then
   444  	  old_multidirs="${multidirs}"
   445  	  multidirs=""
   446  	  for x in ${old_multidirs}; do
   447  	    case "$x" in
   448  	      *mcall-linux* | *mcall-solaris* ) : ;;
   449  	      *) multidirs="${multidirs} ${x}" ;;
   450  	    esac
   451  	  done
   452  	fi
   453  	if [ x$enable_biendian = xno ]
   454  	then
   455  	  old_multidirs="${multidirs}"
   456  	  multidirs=""
   457  	  for x in ${old_multidirs}; do
   458  	    case "$x" in
   459  	      *mlittle* | *mbig* ) : ;;
   460  	      *) multidirs="${multidirs} ${x}" ;;
   461  	    esac
   462  	  done
   463  	fi
   464  	if [ x$enable_sysv = xno ]
   465  	then
   466  	  old_multidirs="${multidirs}"
   467  	  multidirs=""
   468  	  for x in ${old_multidirs}; do
   469  	    case "$x" in
   470  	      *mcall-sysv* ) : ;;
   471  	      *) multidirs="${multidirs} ${x}" ;;
   472  	    esac
   473  	  done
   474  	fi
   475  	;;
   476  esac
   477  
   478  # Remove extraneous blanks from multidirs.
   479  # Tests like `if [ -n "$multidirs" ]' require it.
   480  multidirs=`echo "$multidirs" | sed -e 's/^[ ][ ]*//' -e 's/[ ][ ]*$//' -e 's/[ ][ ]*/ /g'`
   481  
   482  # Add code to library's top level makefile to handle building the multilib
   483  # subdirs.
   484  
   485  cat > Multi.tem <<\EOF
   486  
   487  PWD_COMMAND=$${PWDCMD-pwd}
   488  
   489  # FIXME: There should be an @-sign in front of the `if'.
   490  # Leave out until this is tested a bit more.
   491  multi-do:
   492  	if [ -z "$(MULTIDIRS)" ]; then \
   493  	  true; \
   494  	else \
   495  	  rootpre=`${PWD_COMMAND}`/; export rootpre; \
   496  	  srcrootpre=`cd $(srcdir); ${PWD_COMMAND}`/; export srcrootpre; \
   497  	  lib=`echo "$${rootpre}" | sed -e 's,^.*/\([^/][^/]*\)/$$,\1,'`; \
   498  	  compiler="$(CC)"; \
   499  	  for i in `$${compiler} --print-multi-lib 2>/dev/null`; do \
   500  	    dir=`echo $$i | sed -e 's/;.*$$//'`; \
   501  	    if [ "$${dir}" = "." ]; then \
   502  	      true; \
   503  	    else \
   504  	      if [ -d ../$${dir}/$${lib} ]; then \
   505  		flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
   506  		if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) \
   507  				CFLAGS="$(CFLAGS) $${flags}" \
   508  				CCASFLAGS="$(CCASFLAGS) $${flags}" \
   509  				FCFLAGS="$(FCFLAGS) $${flags}" \
   510  				FFLAGS="$(FFLAGS) $${flags}" \
   511  				ADAFLAGS="$(ADAFLAGS) $${flags}" \
   512  				prefix="$(prefix)" \
   513  				exec_prefix="$(exec_prefix)" \
   514  				GCJFLAGS="$(GCJFLAGS) $${flags}" \
   515  				GOCFLAGS="$(GOCFLAGS) $${flags}" \
   516  				CXXFLAGS="$(CXXFLAGS) $${flags}" \
   517  				LIBCFLAGS="$(LIBCFLAGS) $${flags}" \
   518  				LIBCXXFLAGS="$(LIBCXXFLAGS) $${flags}" \
   519  				LDFLAGS="$(LDFLAGS) $${flags}" \
   520  				MULTIFLAGS="$${flags}" \
   521  				DESTDIR="$(DESTDIR)" \
   522  				INSTALL="$(INSTALL)" \
   523  				INSTALL_DATA="$(INSTALL_DATA)" \
   524  				INSTALL_PROGRAM="$(INSTALL_PROGRAM)" \
   525  				INSTALL_SCRIPT="$(INSTALL_SCRIPT)" \
   526  				$(DO)); then \
   527  		  true; \
   528  		else \
   529  		  exit 1; \
   530  		fi; \
   531  	      else true; \
   532  	      fi; \
   533  	    fi; \
   534  	  done; \
   535  	fi
   536  
   537  # FIXME: There should be an @-sign in front of the `if'.
   538  # Leave out until this is tested a bit more.
   539  multi-clean:
   540  	if [ -z "$(MULTIDIRS)" ]; then \
   541  	  true; \
   542  	else \
   543  	  lib=`${PWD_COMMAND} | sed -e 's,^.*/\([^/][^/]*\)$$,\1,'`; \
   544  	  for dir in : $(MULTIDIRS); do \
   545  	    test $$dir != : || continue; \
   546  EOF
   547  cat >>Multi.tem <<EOF
   548  	    if [ -f ../\$\${dir}/\$\${lib}/${Makefile} ]; then \\
   549  EOF
   550  cat >>Multi.tem <<\EOF
   551  	      if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) $(DO)); \
   552  	      then true; \
   553  	      else exit 1; \
   554  	      fi; \
   555  	    else true; \
   556  	    fi; \
   557  	  done; \
   558  	fi
   559  EOF
   560  
   561  cat ${Makefile} Multi.tem > Makefile.tem
   562  rm -f ${Makefile} Multi.tem
   563  mv Makefile.tem ${Makefile}
   564  
   565  fi # ${ml_toplevel_p} = yes
   566  
   567  if [ "${ml_verbose}" = --verbose ]; then
   568    echo "Adding multilib support to ${Makefile} in ${ml_realsrcdir}"
   569    if [ "${ml_toplevel_p}" = yes ]; then
   570      echo "multidirs=${multidirs}"
   571    fi
   572    echo "with_multisubdir=${with_multisubdir}"
   573  fi
   574  
   575  if [ "${srcdir}" = "." ]; then
   576    if [ "${with_target_subdir}" != "." ]; then
   577      ml_srcdotdot="../"
   578    else
   579      ml_srcdotdot=""
   580    fi
   581  else
   582    ml_srcdotdot=""
   583  fi
   584  
   585  if [ -z "${with_multisubdir}" ]; then
   586    ml_subdir=
   587    ml_builddotdot=
   588    : # ml_srcdotdot= # already set
   589  else
   590    ml_subdir="/${with_multisubdir}"
   591    # The '[^/][^/]*' appears that way to work around a SunOS sed bug.
   592    ml_builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`/
   593    if [ "$srcdir" = "." ]; then
   594      ml_srcdotdot=${ml_srcdotdot}${ml_builddotdot}
   595    else
   596      : # ml_srcdotdot= # already set
   597    fi
   598  fi
   599  
   600  if [ "${ml_toplevel_p}" = yes ]; then
   601    ml_do='$(MAKE)'
   602    ml_clean='$(MAKE)'
   603  else
   604    ml_do=true
   605    ml_clean=true
   606  fi
   607  
   608  # TOP is used by newlib and should not be used elsewhere for this purpose.
   609  # MULTI{SRC,BUILD}TOP are the proper ones to use.  MULTISRCTOP is empty
   610  # when srcdir != builddir.  MULTIBUILDTOP is always some number of ../'s.
   611  # FIXME: newlib needs to be updated to use MULTI{SRC,BUILD}TOP so we can
   612  # delete TOP.  Newlib may wish to continue to use TOP for its own purposes
   613  # of course.
   614  # MULTIDIRS is non-empty for the cpu top level Makefile (eg: newlib/Makefile)
   615  # and lists the subdirectories to recurse into.
   616  # MULTISUBDIR is non-empty in each cpu subdirectory's Makefile
   617  # (eg: newlib/h8300h/Makefile) and is the installed subdirectory name with
   618  # a leading '/'.
   619  # MULTIDO is used for targets like all, install, and check where
   620  # $(FLAGS_TO_PASS) augmented with the subdir's compiler option is needed.
   621  # MULTICLEAN is used for the *clean targets.
   622  #
   623  # ??? It is possible to merge MULTIDO and MULTICLEAN into one.  They are
   624  # currently kept separate because we don't want the *clean targets to require
   625  # the existence of the compiler (which MULTIDO currently requires) and
   626  # therefore we'd have to record the directory options as well as names
   627  # (currently we just record the names and use --print-multi-lib to get the
   628  # options).
   629  
   630  sed -e "s:^TOP[ 	]*=[ 	]*\([./]*\)[ 	]*$:TOP = ${ml_builddotdot}\1:" \
   631      -e "s:^MULTISRCTOP[ 	]*=.*$:MULTISRCTOP = ${ml_srcdotdot}:" \
   632      -e "s:^MULTIBUILDTOP[ 	]*=.*$:MULTIBUILDTOP = ${ml_builddotdot}:" \
   633      -e "s:^MULTIDIRS[ 	]*=.*$:MULTIDIRS = ${multidirs}:" \
   634      -e "s:^MULTISUBDIR[ 	]*=.*$:MULTISUBDIR = ${ml_subdir}:" \
   635      -e "s:^MULTIDO[ 	]*=.*$:MULTIDO = $ml_do:" \
   636      -e "s:^MULTICLEAN[ 	]*=.*$:MULTICLEAN = $ml_clean:" \
   637  	${Makefile} > Makefile.tem
   638  rm -f ${Makefile}
   639  mv Makefile.tem ${Makefile}
   640  
   641  # If this is the library's top level, configure each multilib subdir.
   642  # This is done at the end because this is the loop that runs configure
   643  # in each multilib subdir and it seemed reasonable to finish updating the
   644  # Makefile before going on to configure the subdirs.
   645  
   646  if [ "${ml_toplevel_p}" = yes ]; then
   647  
   648  # We must freshly configure each subdirectory.  This bit of code is
   649  # actually partially stolen from the main configure script.  FIXME.
   650  
   651  if [ -n "${multidirs}" ] && [ -z "${ml_norecursion}" ]; then
   652  
   653    if [ "${ml_verbose}" = --verbose ]; then
   654      echo "Running configure in multilib subdirs ${multidirs}"
   655      echo "pwd: `${PWDCMD-pwd}`"
   656    fi
   657  
   658    ml_origdir=`${PWDCMD-pwd}`
   659    ml_libdir=`echo "$ml_origdir" | sed -e 's,^.*/,,'`
   660    # cd to top-level-build-dir/${with_target_subdir}
   661    cd ..
   662  
   663    for ml_dir in ${multidirs}; do
   664  
   665      if [ "${ml_verbose}" = --verbose ]; then
   666        echo "Running configure in multilib subdir ${ml_dir}"
   667        echo "pwd: `${PWDCMD-pwd}`"
   668      fi
   669  
   670      if [ -d ${ml_dir} ]; then true; else
   671        # ``mkdir -p ${ml_dir}'' See also mkinstalldirs.
   672        pathcomp=""
   673        for d in `echo ":${ml_dir}" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`; do
   674          pathcomp="$pathcomp$d"
   675          case "$pathcomp" in
   676            -* ) pathcomp=./$pathcomp ;;
   677          esac
   678          if test ! -d "$pathcomp"; then
   679             echo "mkdir $pathcomp" 1>&2
   680             mkdir "$pathcomp" > /dev/null 2>&1 || lasterr=$?
   681          fi
   682          if test ! -d "$pathcomp"; then
   683  	   exit $lasterr
   684          fi
   685          pathcomp="$pathcomp/"
   686        done
   687      fi
   688      if [ -d ${ml_dir}/${ml_libdir} ]; then true; else mkdir ${ml_dir}/${ml_libdir}; fi
   689  
   690      # Eg: if ${ml_dir} = m68000/m68881, dotdot = ../../
   691      dotdot=../`echo ${ml_dir} | sed -e 's|[^/]||g' -e 's|/|../|g'`
   692  
   693      case ${srcdir} in
   694      ".")
   695        echo "Building symlink tree in `${PWDCMD-pwd}`/${ml_dir}/${ml_libdir}"
   696        if [ "${with_target_subdir}" != "." ]; then
   697  	ml_unsubdir="../"
   698        else
   699  	ml_unsubdir=""
   700        fi
   701        (cd ${ml_dir}/${ml_libdir};
   702         ../${dotdot}${ml_unsubdir}symlink-tree ../${dotdot}${ml_unsubdir}${ml_libdir} "")
   703        if [ -f ${ml_dir}/${ml_libdir}/${Makefile} ]; then
   704  	if [ x"${MAKE}" = x ]; then
   705  	  (cd ${ml_dir}/${ml_libdir}; make distclean)
   706  	else
   707  	  (cd ${ml_dir}/${ml_libdir}; ${MAKE} distclean)
   708  	fi
   709        fi
   710        ml_newsrcdir="."
   711        ml_srcdiroption=
   712        multisrctop=${dotdot}
   713        ;;
   714      *)
   715        case "${srcdir}" in
   716        /* | [A-Za-z]:[\\/]* ) # absolute path
   717          ml_newsrcdir=${srcdir}
   718          ;;
   719        *) # otherwise relative
   720          ml_newsrcdir=${dotdot}${srcdir}
   721          ;;
   722        esac
   723        ml_srcdiroption="-srcdir=${ml_newsrcdir}"
   724        multisrctop=
   725        ;;
   726      esac
   727  
   728      case "${progname}" in
   729      /* | [A-Za-z]:[\\/]* )     ml_recprog=${progname} ;;
   730      *)      ml_recprog=${dotdot}${progname} ;;
   731      esac
   732  
   733      # FIXME: POPDIR=${PWD=`pwd`} doesn't work here.
   734      ML_POPDIR=`${PWDCMD-pwd}`
   735      cd ${ml_dir}/${ml_libdir}
   736  
   737      if [ -f ${ml_newsrcdir}/configure ]; then
   738        ml_recprog="${ml_newsrcdir}/configure"
   739      fi
   740  
   741      # find compiler flag corresponding to ${ml_dir}
   742      for i in `${CC-gcc} --print-multi-lib 2>/dev/null`; do
   743        dir=`echo $i | sed -e 's/;.*$//'`
   744        if [ "${dir}" = "${ml_dir}" ]; then
   745          flags=`echo $i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`
   746          break
   747        fi
   748      done
   749      ml_config_env='CC="${CC_}$flags" CXX="${CXX_}$flags" F77="${F77_}$flags" GCJ="${GCJ_}$flags" GFORTRAN="${GFORTRAN_}$flags" GOC="${GOC_}$flags"'
   750  
   751      if [ "${with_target_subdir}" = "." ]; then
   752  	CC_=$CC' '
   753  	CXX_=$CXX' '
   754  	F77_=$F77' '
   755  	GCJ_=$GCJ' '
   756  	GFORTRAN_=$GFORTRAN' '
   757  	GOC_=$GOC' '
   758      else
   759  	# Create a regular expression that matches any string as long
   760  	# as ML_POPDIR.
   761  	popdir_rx=`echo "${ML_POPDIR}" | sed 's,.,.,g'`
   762  	CC_=
   763  	for arg in ${CC}; do
   764  	  case $arg in
   765  	  -[BIL]"${ML_POPDIR}"/*)
   766  	    CC_="${CC_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\1/p"`' ' ;;
   767  	  "${ML_POPDIR}"/*)
   768  	    CC_="${CC_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
   769  	  *)
   770  	    CC_="${CC_}${arg} " ;;
   771  	  esac
   772  	done
   773  
   774  	CXX_=
   775  	for arg in ${CXX}; do
   776  	  case $arg in
   777  	  -[BIL]"${ML_POPDIR}"/*)
   778  	    CXX_="${CXX_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
   779  	  "${ML_POPDIR}"/*)
   780  	    CXX_="${CXX_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
   781  	  *)
   782  	    CXX_="${CXX_}${arg} " ;;
   783  	  esac
   784  	done
   785  
   786  	F77_=
   787  	for arg in ${F77}; do
   788  	  case $arg in
   789  	  -[BIL]"${ML_POPDIR}"/*)
   790  	    F77_="${F77_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
   791  	  "${ML_POPDIR}"/*)
   792  	    F77_="${F77_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
   793  	  *)
   794  	    F77_="${F77_}${arg} " ;;
   795  	  esac
   796  	done
   797  
   798  	GCJ_=
   799  	for arg in ${GCJ}; do
   800  	  case $arg in
   801  	  -[BIL]"${ML_POPDIR}"/*)
   802  	    GCJ_="${GCJ_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
   803  	  "${ML_POPDIR}"/*)
   804  	    GCJ_="${GCJ_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
   805  	  *)
   806  	    GCJ_="${GCJ_}${arg} " ;;
   807  	  esac
   808  	done
   809  
   810  	GFORTRAN_=
   811  	for arg in ${GFORTRAN}; do
   812  	  case $arg in
   813  	  -[BIL]"${ML_POPDIR}"/*)
   814  	    GFORTRAN_="${GFORTRAN_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
   815  	  "${ML_POPDIR}"/*)
   816  	    GFORTRAN_="${GFORTRAN_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
   817  	  *)
   818  	    GFORTRAN_="${GFORTRAN_}${arg} " ;;
   819  	  esac
   820  	done
   821  
   822  	GOC_=
   823  	for arg in ${GOC}; do
   824  	  case $arg in
   825  	  -[BIL]"${ML_POPDIR}"/*)
   826  	    GOC_="${GOC_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
   827  	  "${ML_POPDIR}"/*)
   828  	    GOC_="${GOC_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
   829  	  *)
   830  	    GOC_="${GOC_}${arg} " ;;
   831  	  esac
   832  	done
   833  
   834  	if test "x${LD_LIBRARY_PATH+set}" = xset; then
   835  	  LD_LIBRARY_PATH_=
   836  	  for arg in `echo "$LD_LIBRARY_PATH" | tr ':' ' '`; do
   837  	    case "$arg" in
   838  	    "${ML_POPDIR}"/*)
   839  	      arg=`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`
   840  	      ;;
   841  	    esac
   842  	    if test "x$LD_LIBRARY_PATH_" != x; then
   843  	      LD_LIBRARY_PATH_=$LD_LIBRARY_PATH_:$arg
   844  	    else
   845  	      LD_LIBRARY_PATH_=$arg
   846  	    fi
   847            done
   848  	  ml_config_env="$ml_config_env LD_LIBRARY_PATH=$LD_LIBRARY_PATH_"
   849  	fi
   850  
   851  	if test "x${SHLIB_PATH+set}" = xset; then
   852  	  SHLIB_PATH_=
   853  	  for arg in `echo "$SHLIB_PATH" | tr ':' ' '`; do
   854  	    case "$arg" in
   855  	    "${ML_POPDIR}"/*)
   856  	      arg=`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`
   857  	      ;;
   858  	    esac
   859  	    if test "x$SHLIB_PATH_" != x; then
   860  	      SHLIB_PATH_=$SHLIB_PATH_:$arg
   861  	    else
   862  	      SHLIB_PATH_=$arg
   863  	    fi
   864            done
   865  	  ml_config_env="$ml_config_env SHLIB_PATH=$SHLIB_PATH_"
   866  	fi
   867      fi
   868  
   869      if eval ${ml_config_env} ${ml_config_shell} ${ml_recprog} \
   870  	--with-multisubdir=${ml_dir} --with-multisrctop=${multisrctop} \
   871  	"${ac_configure_args}" ${ml_config_env} ${ml_srcdiroption} ; then
   872        true
   873      else
   874        exit 1
   875      fi
   876  
   877      cd "${ML_POPDIR}"
   878  
   879    done
   880  
   881    cd "${ml_origdir}"
   882  fi
   883  
   884  fi # ${ml_toplevel_p} = yes
   885  fi # ${enable_multilib} = yes