config-ml.in revision 98944
1# Configure fragment invoked in the post-target section for subdirs
2# wanting multilib support.
3#
4# It is advisable to support a few --enable/--disable options to let the
5# user select which libraries s/he really wants.
6#
7# Subdirectories wishing to use multilib should put the following lines
8# in the "post-target" section of configure.in.
9#
10# if [ "${srcdir}" = "." ] ; then
11#   if [ "${with_target_subdir}" != "." ] ; then
12#     . ${with_multisrctop}../../config-ml.in
13#   else
14#     . ${with_multisrctop}../config-ml.in
15#   fi
16# else
17#   . ${srcdir}/../config-ml.in
18# fi
19#
20# See librx/configure.in in the libg++ distribution for an example of how
21# to handle autoconf'd libraries.
22#
23# Things are complicated because 6 separate cases must be handled:
24# 2 (native, cross) x 3 (absolute-path, relative-not-dot, dot) = 6.
25#
26# srcdir=. is special.  It must handle make programs that don't handle VPATH.
27# To implement this, a symlink tree is built for each library and for each
28# multilib subdir.
29#
30# The build tree is layed out as
31#
32# ./
33#   libg++
34#   newlib
35#   m68020/
36#          libg++
37#          newlib
38#          m68881/
39#                 libg++
40#                 newlib
41#
42# The nice feature about this arrangement is that inter-library references
43# in the build tree work without having to care where you are.  Note that
44# inter-library references also work in the source tree because symlink trees
45# are built when srcdir=.
46#
47# Unfortunately, trying to access the libraries in the build tree requires
48# the user to manually choose which library to use as GCC won't be able to
49# find the right one.  This is viewed as the lesser of two evils.
50#
51# 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
513# FIXME: There should be an @-sign in front of the `if'.
514# Leave out until this is tested a bit more.
515multi-do:
516	if [ -z "$(MULTIDIRS)" ]; then \
517	  true; \
518	else \
519	  rootpre=`pwd`/; export rootpre; \
520	  srcrootpre=`cd $(srcdir); pwd`/; export srcrootpre; \
521	  lib=`echo $${rootpre} | sed -e 's,^.*/\([^/][^/]*\)/$$,\1,'`; \
522	  compiler="$(CC)"; \
523	  for i in `$${compiler} --print-multi-lib 2>/dev/null`; do \
524	    dir=`echo $$i | sed -e 's/;.*$$//'`; \
525	    if [ "$${dir}" = "." ]; then \
526	      true; \
527	    else \
528	      if [ -d ../$${dir}/$${lib} ]; then \
529		flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
530		if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) \
531				CFLAGS="$(CFLAGS) $${flags}" \
532				prefix="$(prefix)" \
533				exec_prefix="$(exec_prefix)" \
534				CXXFLAGS="$(CXXFLAGS) $${flags}" \
535				LIBCFLAGS="$(LIBCFLAGS) $${flags}" \
536				LIBCXXFLAGS="$(LIBCXXFLAGS) $${flags}" \
537				LDFLAGS="$(LDFLAGS) $${flags}" \
538				$(DO)); then \
539		  true; \
540		else \
541		  exit 1; \
542		fi; \
543	      else true; \
544	      fi; \
545	    fi; \
546	  done; \
547	fi
548
549# FIXME: There should be an @-sign in front of the `if'.
550# Leave out until this is tested a bit more.
551multi-clean:
552	if [ -z "$(MULTIDIRS)" ]; then \
553	  true; \
554	else \
555	  lib=`pwd | sed -e 's,^.*/\([^/][^/]*\)$$,\1,'`; \
556	  for dir in Makefile $(MULTIDIRS); do \
557	    if [ -f ../$${dir}/$${lib}/Makefile ]; then \
558	      if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) $(DO)); \
559	      then true; \
560	      else exit 1; \
561	      fi; \
562	    else true; \
563	    fi; \
564	  done; \
565	fi
566EOF
567
568cat ${Makefile} Multi.tem > Makefile.tem
569rm -f ${Makefile} Multi.tem
570mv Makefile.tem ${Makefile}
571
572fi # ${ml_toplevel_p} = yes
573
574if [ "${ml_verbose}" = --verbose ]; then
575  echo "Adding multilib support to Makefile in ${ml_realsrcdir}"
576  if [ "${ml_toplevel_p}" = yes ]; then
577    echo "multidirs=${multidirs}"
578  fi
579  echo "with_multisubdir=${with_multisubdir}"
580fi
581
582if [ "${srcdir}" = "." ]; then
583  if [ "${with_target_subdir}" != "." ]; then
584    ml_srcdotdot="../"
585  else
586    ml_srcdotdot=""
587  fi
588else
589  ml_srcdotdot=""
590fi
591
592if [ -z "${with_multisubdir}" ]; then
593  ml_subdir=
594  ml_builddotdot=
595  : # ml_srcdotdot= # already set
596else
597  ml_subdir="/${with_multisubdir}"
598  # The '[^/][^/]*' appears that way to work around a SunOS sed bug.
599  ml_builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`/
600  if [ "$srcdir" = "." ]; then
601    ml_srcdotdot=${ml_srcdotdot}${ml_builddotdot}
602  else
603    : # ml_srcdotdot= # already set
604  fi
605fi
606
607if [ "${ml_toplevel_p}" = yes ]; then
608  ml_do='$(MAKE)'
609  ml_clean='$(MAKE)'
610else
611  ml_do=true
612  ml_clean=true
613fi
614
615# TOP is used by newlib and should not be used elsewhere for this purpose.
616# MULTI{SRC,BUILD}TOP are the proper ones to use.  MULTISRCTOP is empty
617# when srcdir != builddir.  MULTIBUILDTOP is always some number of ../'s.
618# FIXME: newlib needs to be updated to use MULTI{SRC,BUILD}TOP so we can
619# delete TOP.  Newlib may wish to continue to use TOP for its own purposes
620# of course.
621# MULTIDIRS is non-empty for the cpu top level Makefile (eg: newlib/Makefile)
622# and lists the subdirectories to recurse into.
623# MULTISUBDIR is non-empty in each cpu subdirectory's Makefile
624# (eg: newlib/h8300h/Makefile) and is the installed subdirectory name with
625# a leading '/'.
626# MULTIDO is used for targets like all, install, and check where
627# $(FLAGS_TO_PASS) augmented with the subdir's compiler option is needed.
628# MULTICLEAN is used for the *clean targets.
629#
630# ??? It is possible to merge MULTIDO and MULTICLEAN into one.  They are
631# currently kept separate because we don't want the *clean targets to require
632# the existence of the compiler (which MULTIDO currently requires) and
633# therefore we'd have to record the directory options as well as names
634# (currently we just record the names and use --print-multi-lib to get the
635# options).
636
637sed -e "s:^TOP[ 	]*=[ 	]*\([./]*\)[ 	]*$:TOP = ${ml_builddotdot}\1:" \
638    -e "s:^MULTISRCTOP[ 	]*=.*$:MULTISRCTOP = ${ml_srcdotdot}:" \
639    -e "s:^MULTIBUILDTOP[ 	]*=.*$:MULTIBUILDTOP = ${ml_builddotdot}:" \
640    -e "s:^MULTIDIRS[ 	]*=.*$:MULTIDIRS = ${multidirs}:" \
641    -e "s:^MULTISUBDIR[ 	]*=.*$:MULTISUBDIR = ${ml_subdir}:" \
642    -e "s:^MULTIDO[ 	]*=.*$:MULTIDO = $ml_do:" \
643    -e "s:^MULTICLEAN[ 	]*=.*$:MULTICLEAN = $ml_clean:" \
644	${Makefile} > Makefile.tem
645rm -f ${Makefile}
646mv Makefile.tem ${Makefile}
647
648# If this is the library's top level, configure each multilib subdir.
649# This is done at the end because this is the loop that runs configure
650# in each multilib subdir and it seemed reasonable to finish updating the
651# Makefile before going on to configure the subdirs.
652
653if [ "${ml_toplevel_p}" = yes ]; then
654
655# We must freshly configure each subdirectory.  This bit of code is
656# actually partially stolen from the main configure script.  FIXME.
657
658if [ -n "${multidirs}" ] && [ -z "${ml_norecursion}" ]; then
659
660  if [ "${ml_verbose}" = --verbose ]; then
661    echo "Running configure in multilib subdirs ${multidirs}"
662    echo "pwd: `pwd`"
663  fi
664
665  ml_origdir=`pwd`
666  ml_libdir=`echo $ml_origdir | sed -e 's,^.*/,,'`
667  # cd to top-level-build-dir/${with_target_subdir}
668  cd ..
669
670  for ml_dir in ${multidirs}; do
671
672    if [ "${ml_verbose}" = --verbose ]; then
673      echo "Running configure in multilib subdir ${ml_dir}"
674      echo "pwd: `pwd`"
675    fi
676
677    if [ -d ${ml_dir} ]; then true; else
678      # ``mkdir -p ${ml_dir}'' See also mkinstalldirs.
679      pathcomp=""
680      for d in `echo ":${ml_dir}" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`; do
681        pathcomp="$pathcomp$d"
682        case "$pathcomp" in
683          -* ) pathcomp=./$pathcomp ;;
684        esac
685        if test ! -d "$pathcomp"; then
686           echo "mkdir $pathcomp" 1>&2
687           mkdir "$pathcomp" > /dev/null 2>&1 || lasterr=$?
688        fi
689        if test ! -d "$pathcomp"; then
690	   exit $lasterr
691        fi
692        pathcomp="$pathcomp/"
693      done
694    fi
695    if [ -d ${ml_dir}/${ml_libdir} ]; then true; else mkdir ${ml_dir}/${ml_libdir}; fi
696
697    # Eg: if ${ml_dir} = m68000/m68881, dotdot = ../../
698    dotdot=../`echo ${ml_dir} | sed -e 's|[^/]||g' -e 's|/|../|g'`
699
700    case ${srcdir} in
701    ".")
702      echo Building symlink tree in `pwd`/${ml_dir}/${ml_libdir}
703      if [ "${with_target_subdir}" != "." ]; then
704	ml_unsubdir="../"
705      else
706	ml_unsubdir=""
707      fi
708      (cd ${ml_dir}/${ml_libdir};
709       ../${dotdot}${ml_unsubdir}symlink-tree ../${dotdot}${ml_unsubdir}${ml_libdir} "")
710      if [ -f ${ml_dir}/${ml_libdir}/Makefile ]; then
711	if [ x"${MAKE}" = x ]; then
712	  (cd ${ml_dir}/${ml_libdir}; make distclean)
713	else
714	  (cd ${ml_dir}/${ml_libdir}; ${MAKE} distclean)
715	fi
716      fi
717      ml_newsrcdir="."
718      ml_srcdiroption=
719      multisrctop=${dotdot}
720      ;;
721    *)
722      case "${srcdir}" in
723      /*) # absolute path
724        ml_newsrcdir=${srcdir}
725        ;;
726      *) # otherwise relative
727        ml_newsrcdir=${dotdot}${srcdir}
728        ;;
729      esac
730      ml_srcdiroption="-srcdir=${ml_newsrcdir}"
731      multisrctop=
732      ;;
733    esac
734
735    case "${progname}" in
736    /*)     ml_recprog=${progname} ;;
737    *)      ml_recprog=${dotdot}${progname} ;;
738    esac
739
740    # FIXME: POPDIR=${PWD=`pwd`} doesn't work here.
741    ML_POPDIR=`pwd`
742    cd ${ml_dir}/${ml_libdir}
743
744    if [ -f ${ml_newsrcdir}/configure ]; then
745      ml_recprog="${ml_newsrcdir}/configure --cache-file=../config.cache"
746    fi
747
748    # find compiler flag corresponding to ${ml_dir}
749    for i in `${CC-gcc} --print-multi-lib 2>/dev/null`; do 
750      dir=`echo $i | sed -e 's/;.*$//'`
751      if [ "${dir}" = "${ml_dir}" ]; then
752        flags=`echo $i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`
753        break
754      fi
755    done
756    ml_config_env='CC="${CC_}$flags" CXX="${CXX_}$flags"'
757
758    if [ "${with_target_subdir}" = "." ]; then
759	CC_=$CC' '
760	CXX_=$CXX' '
761    else
762	# Create a regular expression that matches any string as long
763	# as ML_POPDIR.
764	popdir_rx=`echo ${ML_POPDIR} | sed 's,.,.,g'`
765	CC_=
766	for arg in ${CC}; do
767	  case $arg in
768	  -[BIL]"${ML_POPDIR}"/*)
769	    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"`' ' ;;
770	  "${ML_POPDIR}"/*)
771	    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"`' ' ;;
772	  *)
773	    CC_="${CC_}${arg} " ;;
774	  esac
775	done
776
777	CXX_=
778	for arg in ${CXX}; do
779	  case $arg in
780	  -[BIL]"${ML_POPDIR}"/*)
781	    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"`' ' ;;
782	  "${ML_POPDIR}"/*)
783	    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"`' ' ;;
784	  *)
785	    CXX_="${CXX_}${arg} " ;;
786	  esac
787	done
788
789	if test "x${LD_LIBRARY_PATH+set}" = xset; then
790	  LD_LIBRARY_PATH_=
791	  for arg in `echo "$LD_LIBRARY_PATH" | tr ':' ' '`; do
792	    case "$arg" in
793	    "${ML_POPDIR}"/*)
794	      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"`
795	      ;;
796	    esac
797	    if test "x$LD_LIBRARY_PATH_" != x; then
798	      LD_LIBRARY_PATH_=$LD_LIBRARY_PATH_:$arg
799	    else
800	      LD_LIBRARY_PATH_=$arg
801	    fi
802          done
803	  ml_config_env="$ml_config_env LD_LIBRARY_PATH=$LD_LIBRARY_PATH_"
804	fi
805
806	if test "x${SHLIB_PATH+set}" = xset; then
807	  SHLIB_PATH_=
808	  for arg in `echo "$SHLIB_PATH" | tr ':' ' '`; do
809	    case "$arg" in
810	    "${ML_POPDIR}"/*)
811	      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"`
812	      ;;
813	    esac
814	    if test "x$SHLIB_PATH_" != x; then
815	      SHLIB_PATH_=$SHLIB_PATH_:$arg
816	    else
817	      SHLIB_PATH_=$arg
818	    fi
819          done
820	  ml_config_env="$ml_config_env SHLIB_PATH=$SHLIB_PATH_"
821	fi
822    fi
823
824    if eval ${ml_config_env} ${ml_config_shell} ${ml_recprog} \
825	--with-multisubdir=${ml_dir} --with-multisrctop=${multisrctop} \
826	${ml_arguments} ${ml_srcdiroption} ; then
827      true
828    else
829      exit 1
830    fi
831
832    cd ${ML_POPDIR}
833
834  done
835
836  cd ${ml_origdir}
837fi
838
839fi # ${ml_toplevel_p} = yes
840fi # ${enable_multilib} = yes
841