xref: /openbsd/gnu/usr.bin/binutils/ltcf-cxx.sh (revision 5f210c2a)
1#### This script is meant to be sourced by ltconfig.
2
3# ltcf-cxx.sh - Create a C++ compiler specific configuration
4#
5# Copyright (C) 1996-1999,2000 Free Software Foundation, Inc.
6# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
7#
8# Original C++ support by:Gary V. Vaughan <gvv@techie.com>
9#    Alexandre Oliva <oliva@lsd.ic.unicamp.br>
10#    Ossama Othman <ossama@debian.org>
11#    Thomas Thanner <tanner@gmx.de>
12#
13# This file is free software; you can redistribute it and/or modify it
14# under the terms of the GNU General Public License as published by
15# the Free Software Foundation; either version 2 of the License, or
16# (at your option) any later version.
17#
18# This program is distributed in the hope that it will be useful, but
19# WITHOUT ANY WARRANTY; without even the implied warranty of
20# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21# General Public License for more details.
22#
23# You should have received a copy of the GNU General Public License
24# along with this program; if not, write to the Free Software
25# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26#
27# As a special exception to the GNU General Public License, if you
28# distribute this file as part of a program that contains a
29# configuration script generated by Autoconf, you may include it under
30# the same distribution terms that you use for the rest of that program.
31
32
33# Source file extension for C++ test sources.
34ac_ext=cc
35
36# Object file extension for compiled C++ test sources.
37objext=o
38
39# Code to be used in simple compile tests
40lt_simple_compile_test_code="int some_variable = 0;"
41
42# Code to be used in simple link tests
43lt_simple_link_test_code='int main(int, char *[]) { return (0); }'
44
45# C++ compiler
46CXX=${CXX-c++}
47
48# ltmain only uses $CC for tagged configurations so make sure $CC is set.
49CC=${CC-"$CXX"}
50CFLAGS=${CFLAGS-"$CXXFLAGS"}
51
52# Allow CC to be a program name with arguments.
53set dummy $CC
54compiler=$2
55cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
56
57# Check if we are using GNU gcc  (taken/adapted from configure script)
58# We need to check here since "--with-gcc" is set at configure time,
59# not ltconfig time!
60cat > conftest.$ac_ext <<EOF
61#ifdef __GNUC__
62  yes;
63#endif
64EOF
65if { ac_try='${CC-c++} -E conftest.$ac_ext'; { (eval echo \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
66  with_gcc=yes
67
68  # Set up default GNU C++ configuration
69
70  # Check if GNU C++ uses GNU ld as the underlying linker, since the
71  # archiving commands below assume that GNU ld is being used.
72  if eval "`$CC -print-prog-name=ld` --version 2>&1" | \
73      egrep 'GNU ld' > /dev/null; then
74    with_gnu_ld=yes
75
76    archive_cmds='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
77    archive_expsym_cmds='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
78
79    hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
80    export_dynamic_flag_spec='${wl}--export-dynamic'
81
82    # If archive_cmds runs LD, not CC, wlarc should be empty
83    # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
84    #     investigate it a little bit more. (MM)
85    wlarc='${wl}'
86
87    # ancient GNU ld didn't support --whole-archive et. al.
88    if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
89        egrep 'no-whole-archive' > /dev/null; then
90      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
91    else
92      whole_archive_flag_spec=
93    fi
94  else
95    with_gnu_ld=no
96    wlarc=
97
98    # A generic and very simple default shared library creation
99    # command for GNU C++ for the case where it uses the native
100    # linker, instead of GNU ld.  If possible, this setting should
101    # overridden to take advantage of the native linker features on
102    # the platform it is being used on.
103    archive_cmds='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
104  fi
105
106  # Commands to make compiler produce verbose output that lists
107  # what "hidden" libraries, object files and flags are used when
108  # linking a shared library.
109  output_verbose_link_cmds='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | egrep "\-L"'
110
111else
112  with_gcc=no
113  with_gnu_ld=no
114  wlarc=
115fi
116
117# In general, the C++ compiler should always link C++ objects.
118case $target in
119*aix3* | *aix4*)
120  # AIX just has to be different, doesn't it? :-\
121  LD=makeC++SharedLib_r
122  LDFLAGS="$LDFLAGS -p 0"
123  ;;
124*)
125  LD="$CC"
126  LDFLAGS="$LDFLAGS"
127  ;;
128esac
129
130
131# PORTME: fill in a description of your system's C++ link characteristics
132case "$host_os" in
133  aix3*)
134    # FIXME: insert proper C++ library support
135    ld_shlibs=no
136    ;;
137  aix4*)
138    archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
139    # -bexpall does not export symbols beginning with underscore (_)
140    always_export_symbols=yes
141    # Exported symbols can be pulled into shared objects from archives
142    whole_archive_flag_spec=' '
143    build_libtool_need_lc=yes
144    ;;
145  chorus*)
146    case "$cc_basename" in
147      *)
148        # FIXME: insert proper C++ library support
149        ld_shlibs=no
150        ;;
151    esac
152    ;;
153  dgux*)
154    case "$cc_basename" in
155      ec++)
156        # FIXME: insert proper C++ library support
157        ld_shlibs=no
158        ;;
159      ghcx)
160        # Green Hills C++ Compiler
161        # FIXME: insert proper C++ library support
162        ld_shlibs=no
163        ;;
164      *)
165        # FIXME: insert proper C++ library support
166        ld_shlibs=no
167        ;;
168    esac
169    ;;
170  freebsd*)
171    # FreeBSD uses GNU C++ and GNU ld
172    # FIXME: insert proper C++ library support
173    ld_shlibs=no
174    ;;
175  hpux*)
176    case "$cc_basename" in
177      CC)
178        # FIXME: insert proper C++ library support
179        ld_shlibs=no
180        ;;
181      aCC)
182	case "$host_os" in
183	hpux9*) archive_cmds='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
184	*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;;
185	esac
186	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
187	hardcode_libdir_separator=:
188	hardcode_direct=yes
189	hardcode_minus_L=yes # Not in the search PATH, but as the default
190			     # location of the library.
191	export_dynamic_flag_spec='${wl}-E'
192
193        # Commands to make compiler produce verbose output that lists
194        # what "hidden" libraries, object files and flags are used when
195        # linking a shared library.
196        #
197        # There doesn't appear to be a way to prevent this compiler from
198        # explicitly linking system object files so we need to strip them
199        # from the output so that they don't get included in the library
200        # dependencies.
201        output_verbose_link_cmds='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | egrep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
202        ;;
203      *)
204        # FIXME: insert proper C++ library support
205        ld_shlibs=no
206        ;;
207    esac
208    ;;
209  irix5* | irix6*)
210    case "$cc_basename" in
211      CC)
212        # SGI C++
213        archive_cmds='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
214
215	# Archives containing C++ object files must be created using
216	# "CC -ar", where "CC" is the IRIX C++ compiler.  This is
217	# necessary to make sure instantiated templates are included
218	# in the archive.
219	old_archive_cmds='$CC -ar -WR,-u -o $oldlib $oldobjs'
220	;;
221      *)
222        if test "$with_gcc" = yes; then
223          if test "$with_gnu_ld" = no; then
224            archive_cmds='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
225          else
226            archive_cmds='$LD -shared $predep_objects $libobjs $deplibs $postdep_objects $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -o $lib'
227          fi
228        fi
229        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
230        hardcode_libdir_separator=:
231        link_all_deplibs=yes
232        ;;
233    esac
234    ;;
235  linux*)
236    case "$cc_basename" in
237      KCC)
238        # Kuck and Associates, Inc. (KAI) C++ Compiler
239
240        # KCC will only create a shared library if the output file
241        # ends with ".so" (or ".sl" for HP-UX), so rename the library
242        # to its proper name (with version) after linking.
243        archive_cmds='templib=`echo $lib | sed -e "s/\.so\..*/\.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
244        archive_expsym_cmds='templib=`echo $lib | sed -e "s/\.so\..*/\.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
245
246        # Commands to make compiler produce verbose output that lists
247        # what "hidden" libraries, object files and flags are used when
248        # linking a shared library.
249        #
250        # There doesn't appear to be a way to prevent this compiler from
251        # explicitly linking system object files so we need to strip them
252        # from the output so that they don't get included in the library
253        # dependencies.
254        output_verbose_link_cmds='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest.so 2>&1 | egrep "ld"`; rm -f libconftest.so; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
255
256        hardcode_libdir_flag_spec='${wl}--rpath,$libdir'
257        export_dynamic_flag_spec='${wl}--export-dynamic'
258
259	# Archives containing C++ object files must be created using
260	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
261        old_archive_cmds='$CC -Bstatic -o $oldlib $oldobjs'
262        ;;
263      cxx)
264        # Compaq C++
265        archive_cmds='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
266        archive_expsym_cmds='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
267
268        runpath_var=LD_RUN_PATH
269        hardcode_libdir_flag_spec='-rpath $libdir'
270        hardcode_libdir_separator=:
271
272        # Commands to make compiler produce verbose output that lists
273        # what "hidden" libraries, object files and flags are used when
274        # linking a shared library.
275        #
276        # There doesn't appear to be a way to prevent this compiler from
277        # explicitly linking system object files so we need to strip them
278        # from the output so that they don't get included in the library
279        # dependencies.
280        output_verbose_link_cmds='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | sed "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
281        ;;
282    esac
283    ;;
284  lynxos*)
285    # FIXME: insert proper C++ library support
286    ld_shlibs=no
287    ;;
288  m88k*)
289    # FIXME: insert proper C++ library support
290    ld_shlibs=no
291    ;;
292  mvs*)
293    case "$cc_basename" in
294      cxx)
295        # FIXME: insert proper C++ library support
296        ld_shlibs=no
297        ;;
298      *)
299        # FIXME: insert proper C++ library support
300        ld_shlibs=no
301        ;;
302    esac
303    ;;
304  netbsd*)
305    # NetBSD uses g++ - do we need to do anything?
306    ;;
307  osf3*)
308    if test "$with_gcc" = yes && test "$with_gnu_ld" = no; then
309      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
310      archive_cmds='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
311
312      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
313      hardcode_libdir_separator=:
314
315      # Commands to make compiler produce verbose output that lists
316      # what "hidden" libraries, object files and flags are used when
317      # linking a shared library.
318      output_verbose_link_cmds='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | egrep "\-L"'
319    fi
320
321    case "$cc_basename" in
322      KCC)
323        # Kuck and Associates, Inc. (KAI) C++ Compiler
324
325        # KCC will only create a shared library if the output file
326        # ends with ".so" (or ".sl" for HP-UX), so rename the library
327        # to its proper name (with version) after linking.
328        archive_cmds='templib=`echo $lib | sed -e "s/\.so\..*/\.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
329
330        hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
331        hardcode_libdir_separator=:
332
333	# Archives containing C++ object files must be created using
334	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
335        old_archive_cmds='$CC -Bstatic -o $oldlib $oldobjs'
336
337        ;;
338      RCC)
339        # Rational C++ 2.4.1
340        # FIXME: insert proper C++ library support
341        ld_shlibs=no
342        ;;
343      cxx)
344        allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
345        archive_cmds='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
346
347        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
348        hardcode_libdir_separator=:
349
350        # Commands to make compiler produce verbose output that lists
351        # what "hidden" libraries, object files and flags are used when
352        # linking a shared library.
353        #
354        # There doesn't appear to be a way to prevent this compiler from
355        # explicitly linking system object files so we need to strip them
356        # from the output so that they don't get included in the library
357        # dependencies.
358        output_verbose_link_cmds='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | sed "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
359        ;;
360      *)
361        # FIXME: insert proper C++ library support
362        ld_shlibs=no
363        ;;
364    esac
365    ;;
366  osf4* | osf5*)
367    if test "$with_gcc" = yes && test "$with_gnu_ld" = no; then
368      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
369      archive_cmds='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
370
371      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
372      hardcode_libdir_separator=:
373
374      # Commands to make compiler produce verbose output that lists
375      # what "hidden" libraries, object files and flags are used when
376      # linking a shared library.
377      output_verbose_link_cmds='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | egrep "\-L"'
378    fi
379
380    case "$cc_basename" in
381      KCC)
382        # Kuck and Associates, Inc. (KAI) C++ Compiler
383
384        # KCC will only create a shared library if the output file
385        # ends with ".so" (or ".sl" for HP-UX), so rename the library
386        # to its proper name (with version) after linking.
387        archive_cmds='templib=`echo $lib | sed -e "s/\.so\..*/\.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
388
389        hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
390        hardcode_libdir_separator=:
391
392	# Archives containing C++ object files must be created using
393	# the KAI C++ compiler.
394        old_archive_cmds='$CC -o $oldlib $oldobjs'
395        ;;
396      RCC)
397        # Rational C++ 2.4.1
398        # FIXME: insert proper C++ library support
399        ld_shlibs=no
400        ;;
401      cxx)
402        allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
403        archive_cmds='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
404
405        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
406        hardcode_libdir_separator=:
407
408        # Commands to make compiler produce verbose output that lists
409        # what "hidden" libraries, object files and flags are used when
410        # linking a shared library.
411        #
412        # There doesn't appear to be a way to prevent this compiler from
413        # explicitly linking system object files so we need to strip them
414        # from the output so that they don't get included in the library
415        # dependencies.
416        output_verbose_link_cmds='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | sed "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
417        ;;
418      *)
419        # FIXME: insert proper C++ library support
420        ld_shlibs=no
421        ;;
422    esac
423    ;;
424  psos*)
425    # FIXME: insert proper C++ library support
426    ld_shlibs=no
427    ;;
428  sco*)
429    case "$cc_basename" in
430      CC)
431        # FIXME: insert proper C++ library support
432        ld_shlibs=no
433        ;;
434      *)
435        # FIXME: insert proper C++ library support
436        ld_shlibs=no
437        ;;
438    esac
439    ;;
440  sunos4*)
441    case "$cc_basename" in
442      CC)
443        # Sun C++ 4.x
444        # FIXME: insert proper C++ library support
445        ld_shlibs=no
446        ;;
447      lcc)
448        # Lucid
449        # FIXME: insert proper C++ library support
450        ld_shlibs=no
451        ;;
452      *)
453        # FIXME: insert proper C++ library support
454        ld_shlibs=no
455        ;;
456    esac
457    ;;
458  solaris*)
459    case "$cc_basename" in
460      CC)
461	# Sun C++ 4.2, 5.x and Centerline C++
462        no_undefined_flag=' -ztext'
463        archive_cmds='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
464        archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
465        $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
466
467        hardcode_libdir_flag_spec='-R$libdir'
468        hardcode_shlibpath_var=no
469        case "$host_os" in
470          solaris2.[0-5] | solaris2.[0-5].*) ;;
471          *)
472            # The C++ compiler is used as linker so we must use $wl
473            # flag to pass the commands to the underlying system
474            # linker.
475            # Supported since Solaris 2.6 (maybe 2.5.1?)
476            whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
477            ;;
478        esac
479        link_all_deplibs=yes
480
481        # Commands to make compiler produce verbose output that lists
482        # what "hidden" libraries, object files and flags are used when
483        # linking a shared library.
484        #
485        # There doesn't appear to be a way to prevent this compiler from
486        # explicitly linking system object files so we need to strip them
487        # from the output so that they don't get included in the library
488        # dependencies.
489        output_verbose_link_cmds='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | egrep "\-R|\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
490
491	# Archives containing C++ object files must be created using
492	# "CC -xar", where "CC" is the Sun C++ compiler.  This is
493        # necessary to make sure instantiated templates are included
494        # in the archive.
495        old_archive_cmds='$CC -xar -o $oldlib $oldobjs'
496        ;;
497      gcx)
498        # Green Hills C++ Compiler
499        archive_cmds='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
500
501        # The C++ compiler must be used to create the archive.
502        old_archive_cmds='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
503        ;;
504      *)
505        # GNU C++ compiler with Solaris linker
506        if test "$with_gcc" = yes && test "$with_gnu_ld" = no; then
507          if $CC --version | egrep -v '^2\.7' > /dev/null; then
508            archive_cmds='$LD -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $linker_flags ${wl}-h $wl$soname -o $lib'
509            archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
510		$LD -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags~$rm $lib.exp'
511
512            # Commands to make compiler produce verbose output that lists
513            # what "hidden" libraries, object files and flags are used when
514            # linking a shared library.
515            output_verbose_link_cmds="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | egrep \"\-L\""
516          else
517            # g++ 2.7 appears to require `-G' NOT `-shared' on this
518            # platform.
519            archive_cmds='$LD -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $linker_flags ${wl}-h $wl$soname -o $lib'
520            archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
521		$LD -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags~$rm $lib.exp'
522
523            # Commands to make compiler produce verbose output that lists
524            # what "hidden" libraries, object files and flags are used when
525            # linking a shared library.
526            output_verbose_link_cmds="$CC -G $CFLAGS -v conftest.$objext 2>&1 | egrep \"\-L\""
527          fi
528
529          hardcode_libdir_flag_spec='${wl}-R $wl$libdir'
530        fi
531        ;;
532    esac
533    ;;
534  tandem*)
535    case "$cc_basename" in
536      NCC)
537        # NonStop-UX NCC 3.20
538        # FIXME: insert proper C++ library support
539        ld_shlibs=no
540        ;;
541      *)
542        # FIXME: insert proper C++ library support
543        ld_shlibs=no
544        ;;
545    esac
546    ;;
547  unixware*)
548    # FIXME: insert proper C++ library support
549    ld_shlibs=no
550    ;;
551  vxworks*)
552    # FIXME: insert proper C++ library support
553    ld_shlibs=no
554    ;;
555  *)
556    # FIXME: insert proper C++ library support
557    ld_shlibs=no
558    ;;
559esac
560
561
562## Compiler Characteristics: PIC flags, static flags, etc
563
564# We don't use cached values here since only the C compiler
565# characteristics should be cached.
566ac_cv_prog_cc_pic=
567ac_cv_prog_cc_shlib=
568ac_cv_prog_cc_wl=
569ac_cv_prog_cc_static=
570ac_cv_prog_cc_no_builtin=
571ac_cv_prog_cc_can_build_shared=$can_build_shared
572
573# It is not enough to reset these cached values, they must be unset.
574unset ac_cv_prog_cc_pic_works
575unset ac_cv_prog_cc_static_works
576
577if test "$with_gcc" = yes; then
578  ac_cv_prog_cc_wl='-Wl,'
579  ac_cv_prog_cc_static='-static'
580
581  case "$host_os" in
582  beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
583    # PIC is the default for these OSes.
584    ;;
585  aix*)
586    # Below there is a dirty hack to force normal static linking with -ldl
587    # The problem is because libdl dynamically linked with both libc and
588    # libC (AIX C++ library), which obviously doesn't included in libraries
589    # list by gcc. This cause undefined symbols with -static flags.
590    # This hack allows C programs to be linked with "-static -ldl", but
591    # we not sure about C++ programs.
592    ac_cv_prog_cc_static="$ac_cv_prog_cc_static ${ac_cv_prog_cc_wl}-lC"
593    ;;
594  cygwin* | mingw* | os2*)
595    # This hack is so that the source file can tell whether it is being
596    # built for inclusion in a dll (and should export symbols for example).
597    ac_cv_prog_cc_pic='-DDLL_EXPORT'
598    ;;
599  amigaos*)
600    # FIXME: we need at least 68020 code to build shared libraries, but
601    # adding the `-m68020' flag to GCC prevents building anything better,
602    # like `-m68040'.
603    ac_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
604    ;;
605  sysv4*MP*)
606    if test -d /usr/nec; then
607      ac_cv_prog_cc_pic=-Kconform_pic
608    fi
609    ;;
610  *)
611    ac_cv_prog_cc_pic='-fPIC'
612    ;;
613  esac
614else
615  case "$host_os" in
616    aix4*)
617      # All AIX code is PIC.
618      ;;
619    chorus*)
620      case "$cc_basename" in
621      cxch68)
622        # Green Hills C++ Compiler
623        # ac_cv_prog_cc_static="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
624        ;;
625      esac
626      ;;
627    dgux*)
628      case "$cc_basename" in
629        ec++)
630          ac_cv_prog_cc_pic='-KPIC'
631          ;;
632        ghcx)
633          # Green Hills C++ Compiler
634          ac_cv_prog_cc_pic='-pic'
635          ;;
636        *)
637          ;;
638      esac
639      ;;
640    freebsd*)
641      # FreeBSD uses GNU C++
642      ;;
643    hpux9* | hpux10* | hpux11*)
644      case "$cc_basename" in
645        CC)
646          ac_cv_prog_cc_wl='-Wl,'
647          ac_cv_prog_cc_static="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
648          ac_cv_prog_cc_pic='+Z'
649          ;;
650        aCC)
651          ac_cv_prog_cc_wl='-Wl,'
652          ac_cv_prog_cc_static="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
653          ac_cv_prog_cc_pic='+Z'
654          ;;
655        *)
656          ;;
657      esac
658      ;;
659    irix5* | irix6*)
660      case "$cc_basename" in
661        CC)
662          ac_cv_prog_cc_wl='-Wl,'
663          ac_cv_prog_cc_static='-non_shared'
664          ac_cv_prog_cc_pic='-KPIC'
665          ;;
666        *)
667          ;;
668      esac
669      ;;
670    linux*)
671      case "$cc_basename" in
672        KCC)
673          # KAI C++ Compiler
674          ac_cv_prog_cc_wl='--backend -Wl,'
675          ac_cv_prog_cc_pic='-fPIC'
676          ;;
677        cxx)
678          # Compaq C++
679          # Make sure the PIC flag is empty.  It appears that all Alpha
680          # Linux and Compaq Tru64 Unix objects are PIC.
681          ac_cv_prog_cc_pic=
682          ac_cv_prog_cc_static='-non_shared'
683          ;;
684        *)
685          ;;
686      esac
687      ;;
688    lynxos*)
689      ;;
690    m88k*)
691      ;;
692    mvs*)
693      case "$cc_basename" in
694        cxx)
695          ac_cv_prog_cc_pic='-W c,exportall'
696          ;;
697        *)
698          ;;
699      esac
700      ;;
701    netbsd*)
702      ;;
703    osf3* | osf4* | osf5*)
704      case "$cc_basename" in
705        KCC)
706          ac_cv_prog_cc_wl='--backend -Wl,'
707          ;;
708        RCC)
709          # Rational C++ 2.4.1
710          ac_cv_prog_cc_pic='-pic'
711          ;;
712        cxx)
713          # Digital/Compaq C++
714          ac_cv_prog_cc_wl='-Wl,'
715          # Make sure the PIC flag is empty.  It appears that all Alpha
716          # Linux and Compaq Tru64 Unix objects are PIC.
717          ac_cv_prog_cc_pic=
718          ac_cv_prog_cc_static='-non_shared'
719          ;;
720        *)
721          ;;
722      esac
723      ;;
724    psos*)
725      ;;
726    sco*)
727      case "$cc_basename" in
728        CC)
729          ac_cv_prog_cc_pic='-fPIC'
730          ;;
731        *)
732          ;;
733      esac
734      ;;
735    solaris*)
736      case "$cc_basename" in
737        CC)
738          # Sun C++ 4.2, 5.x and Centerline C++
739          ac_cv_prog_cc_pic='-KPIC'
740          ac_cv_prog_cc_static='-Bstatic'
741          ac_cv_prog_cc_wl='-Qoption ld '
742          ;;
743        gcx)
744          # Green Hills C++ Compiler
745          ac_cv_prog_cc_pic='-PIC'
746          ;;
747        *)
748          ;;
749      esac
750      ;;
751    sunos4*)
752      case "$cc_basename" in
753        CC)
754          # Sun C++ 4.x
755          ac_cv_prog_cc_pic='-pic'
756          ac_cv_prog_cc_static='-Bstatic'
757          ;;
758        lcc)
759          # Lucid
760          ac_cv_prog_cc_pic='-pic'
761          ;;
762        *)
763          ;;
764      esac
765      ;;
766    tandem*)
767      case "$cc_basename" in
768        NCC)
769          # NonStop-UX NCC 3.20
770          ac_cv_prog_cc_pic='-KPIC'
771          ;;
772        *)
773          ;;
774      esac
775      ;;
776    unixware*)
777      ;;
778    vxworks*)
779      ;;
780    *)
781      ac_cv_prog_cc_can_build_shared=no
782      ;;
783  esac
784fi
785ac_cv_prog_cc_pic="$ac_cv_prog_cc_pic -DPIC"
786
787
788# Figure out "hidden" C++ library dependencies from verbose
789# compiler output whening linking a shared library.
790cat > conftest.$ac_ext <<EOF
791class Foo
792{
793public:
794  Foo (void) { a = 0; }
795private:
796  int a;
797};
798EOF
799
800
801if eval $ac_compile 2>&5; then
802  # Parse the compiler output and extract the necessary
803  # objects, libraries and library flags.
804
805  # Sentinel used to keep track of whether or not we are before
806  # the conftest object file.
807  pre_test_object_deps_done=no
808
809  for p in `eval $output_verbose_link_cmds`; do
810
811    case $p in
812
813    -L* | -R* | -l*)
814       # Some compilers place space between "-{L,R}" and the path.
815       # Remove the space.
816       if test $p = "-L" \
817          || test $p = "-R"; then
818         prev=$p
819         continue
820       else
821         prev=
822       fi
823
824       if test "$pre_test_object_deps_done" = no; then
825         case $p in
826	 -L* | -R*)
827	   # Internal compiler library paths should come after those
828	   # provided the user.  The postdeps already come after the
829	   # user supplied libs so there is no need to process them.
830           if test -z "$compiler_lib_search_path"; then
831             compiler_lib_search_path="${prev}${p}"
832           else
833             compiler_lib_search_path="${compiler_lib_search_path} ${prev}${p}"
834           fi
835           ;;
836         # The "-l" case would never come before the object being
837         # linked, so don't bother handling this case.
838         esac
839       else
840         if test -z "$postdeps"; then
841           postdeps="${prev}${p}"
842         else
843           postdeps="${postdeps} ${prev}${p}"
844         fi
845       fi
846       ;;
847
848    *.$objext)
849       # This assumes that the test object file only shows up
850       # once in the compiler output.
851       if test "$p" = "conftest.$objext"; then
852         pre_test_object_deps_done=yes
853         continue
854       fi
855
856       if test "$pre_test_object_deps_done" = no; then
857         if test -z "$predep_objects"; then
858           predep_objects="$p"
859         else
860           predep_objects="$predep_objects $p"
861         fi
862       else
863         if test -z "$postdep_objects"; then
864           postdep_objects="$p"
865         else
866           postdep_objects="$postdep_objects $p"
867         fi
868       fi
869       ;;
870
871    *) ;; # Ignore the rest.
872
873    esac
874  done
875
876  # Clean up.
877  rm -f a.out
878else
879  echo "ltcf-cxx.sh: error: problem compiling test program"
880fi
881
882$rm -f confest.$objext
883
884case " $postdeps " in
885*" -lc "*) need_lc=no ;;
886*) need_lc=yes ;;
887esac
888