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