#! /bin/sh

# ltconfig - Create a system-specific libtool.
# When updating this script, search for LINENUM and fix line number refs.
# Generated automatically from ltconfig.in by configure.
# Copyright (C) 1996, 1997, Free Software Foundation, Inc.
# Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
#
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.

# A lot of this script is taken from autoconf-2.10.

# The name of this program.
progname=`echo "$0" | sed 's%^.*/%%'`

# Constants:
PROGRAM=ltconfig
PACKAGE=libtool
VERSION=1.0
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.c 1>&5'
rm="rm -f"

help="Try \`$progname --help' for more information."

# Global variables:
can_build_shared=yes
enable_shared=yes
# All known linkers require a `.a' archive for static linking.
enable_static=yes
ltmain=
silent=
srcdir=
ac_config_guess=
ac_config_sub=
host=
nonopt=
verify_host=yes
with_gcc=no
with_gnu_ld=no

old_AR="$AR"
old_CC="$CC"
old_CFLAGS="$CFLAGS"
old_CPPFLAGS="$CPPFLAGS"
old_LD="$LD"
old_LN_S="$LN_S"
old_RANLIB="$RANLIB"

test -z "$AR" && AR=ar

# Parse the command line options.
args=
prev=
for option
do
  case "$option" in
  -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
  *) optarg= ;;
  esac

  # If the previous option needs an argument, assign it.
  if test -n "$prev"; then
    eval "$prev=\$option"
    prev=
    continue
  fi

  case "$option" in
  --help) cat <<EOM
Usage: $progname [OPTION]... LTMAIN [HOST]

Generate a system-specific libtool script.

    --disable-shared       do not build shared libraries
    --disable-static       do not build static libraries
    --help                 display this help and exit
    --no-verify            do not verify that HOST is a valid host type
    --quiet                same as \`--silent'
    --silent               don't print informational messages
    --srcdir=DIR           find \`config.guess' in DIR
    --version              output version information and exit
    --with-gcc             assume that the GNU C compiler will be used
    --with-gnu-ld          assume that the C compiler uses the GNU linker

LTMAIN is the \`ltmain.sh' shell script fragment that provides basic libtool
functionality.

HOST is the canonical host system name [default=guessed].
EOM
  exit 0
  ;;

  --disable-shared) enable_shared=no ;;

  --disable-static) enable_static=no ;;

  --quiet | --silent) silent=yes ;;

  --srcdir) prev=srcdir ;;
  --srcdir=*) srcdir="$optarg" ;;

  --no-verify) verify_host=no ;;

  --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION"; exit 0 ;;

  --with-gcc) with_gcc=yes ;;
  --with-gnu-ld) with_gnu_ld=yes ;;

  -*)
    echo "$progname: unrecognized option \`$option'" 1>&2
    echo "$help" 1>&2
    exit 1
    ;;

  *)
    if test -z "$ltmain"; then
      ltmain="$option"
    elif test -z "$host"; then
# FIXME This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1
#      if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then
#        echo "$progname: warning \`$option' is not a valid host type" 1>&2
#      fi
      host="$option"
    else
      echo "$progname: too many arguments" 1>&2
      echo "$help" 1>&2
      exit 1
    fi ;;
  esac
done

if test -z "$ltmain"; then
  echo "$progname: you must specify a LTMAIN file" 1>&2
  echo "$help" 1>&2
  exit 1
fi

if test -f "$ltmain"; then :
else
  echo "$progname: warning: \`$ltmain' does not exist" 1>&2
fi

# Quote any args containing shell metacharacters.
ltconfig_args=
for arg
do
  case "$arg" in
  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
  ltconfig_args="$ltconfig_args '$arg'" ;;
  *) ltconfig_args="$ltconfig_args $arg" ;;
  esac
done

# A relevant subset of AC_INIT.

# File descriptor usage:
# 0 standard input
# 1 file creation
# 2 errors and warnings
# 3 some systems may open it to /dev/tty
# 4 used on the Kubota Titan
# 5 compiler messages saved in config.log
# 6 checking for... messages and results
if test "$silent" = yes; then
  exec 6>/dev/null
else
  exec 6>&1
fi
exec 5>>./config.log

# NLS nuisances.
# Only set LANG and LC_ALL to C if already set.
# These must not be set unconditionally because not all systems understand
# e.g. LANG=C (notably SCO).
if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi

if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
    ac_n= ac_c='
' ac_t='	'
  else
    ac_n=-n ac_c= ac_t=
  fi
else
  ac_n= ac_c='\c' ac_t=
fi

if test -z "$srcdir"; then
  # Assume the source directory is the same one as the path to ltmain.sh.
  srcdir=`echo "$ltmain" | sed 's%/[^/]*$%%'`
  test "$srcdir" = "$ltmain" && srcdir=.
fi

if test "$verify_host" = yes; then
  # Check for config.guess and config.sub.
  ac_aux_dir=
  for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
    if test -f $ac_dir/config.guess; then
      ac_aux_dir=$ac_dir
      break
    fi
  done
  if test -z "$ac_aux_dir"; then
    echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2
    echo "$help" 1>&2
    exit 1
  fi
  ac_config_guess=$ac_aux_dir/config.guess
  ac_config_sub=$ac_aux_dir/config.sub

  # Make sure we can run config.sub.
  if $ac_config_sub sun4 >/dev/null 2>&1; then :
  else
    echo "$progname: cannot run $ac_config_sub" 1>&2
    echo "$help" 1>&2
    exit 1
  fi

  echo $ac_n "checking host system type""... $ac_c" 1>&6

  host_alias=$host
  case "$host_alias" in
  "")
    if host_alias=`$ac_config_guess`; then :
    else
      echo "$progname: cannot guess host type; you must specify one" 1>&2
      echo "$help" 1>&2
      exit 1
    fi ;;
  esac
  host=`$ac_config_sub $host_alias`
  echo "$ac_t""$host" 1>&6

elif test -z "$host"; then
  echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2
  echo "$help" 1>&2
  exit 1
else
  host_alias=$host
fi

# Transform *-*-linux* to *-*-linux-gnu*, to support old configure scripts.
case "$host" in
*-*-linux-gnu*) ;;
*-*-linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
esac

host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`

# Determine commands to create old-style static archives.
old_archive_cmds='$AR cru $oldlib$oldobjs'
old_postinstall_cmds='chmod 644 $oldlib'

# If RANLIB is not set, then run the test.
if test "${RANLIB+set}" != "set"; then
  result=no

  echo $ac_n "checking for ranlib... $ac_c" 1>&6
  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
  for dir in $PATH; do
    test -z "$dir" && dir=.
    if test -f $dir/ranlib; then
      RANLIB="ranlib"
      result="ranlib"
      break
    fi
  done
  IFS="$save_ifs"

  echo $ac_t "$result" 1>&6
fi

if test -n "$RANLIB"; then
  old_archive_cmds="$old_archive_cmds;\$RANLIB \$oldlib"
  old_postinstall_cmds="$old_postinstall_cmds;\$RANLIB \$oldlib"
fi

# Check to see if we are using GCC.
if test "$with_gcc" != yes || test -z "$CC"; then
  # If CC is not set, then try to find GCC or a usable CC.
  if test -z "$CC"; then
    echo $ac_n "checking for gcc... $ac_c" 1>&6
    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
    for dir in $PATH; do
      IFS="$save_ifs"
      test -z "$dir" && dir=.
      if test -f $dir/gcc; then
	CC="gcc"
	break
      fi
    done
    IFS="$save_ifs"

    if test -n "$CC"; then
      echo "$ac_t""$CC" 1>&6
    else
      echo "$ac_t""no" 1>&6
    fi
  fi

  # Not "gcc", so try "cc", rejecting "/usr/ucb/cc".
  if test -z "$CC"; then
    echo $ac_n "checking for cc... $ac_c" 1>&6
    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
    cc_rejected=no
    for dir in $PATH; do
      test -z "$dir" && dir=.
      if test -f $dir/cc; then
	if test "$dir/cc" = "/usr/ucb/cc"; then
	  cc_rejected=yes
	  continue
	fi
	CC="cc"
	break
      fi
    done
    IFS="$save_ifs"
    if test $cc_rejected = yes; then
      # We found a bogon in the path, so make sure we never use it.
      set dummy $CC
      shift
      if test $# -gt 0; then
	# We chose a different compiler from the bogus one.
	# However, it has the same name, so the bogon will be chosen
	# first if we set CC to just the name; use the full file name.
	shift
	set dummy "$dir/cc" "$@"
	shift
	CC="$@"
      fi
    fi

    if test -n "$CC"; then
      echo "$ac_t""$CC" 1>&6
    else
      echo "$ac_t""no" 1>&6
    fi

    if test -z "$CC"; then
      echo "$progname: error: no acceptable cc found in \$PATH" 1>&2
      exit 1
    fi
  fi

  # Now see if the compiler is really GCC.
  with_gcc=no
  echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6

  trap "$rm conftest.c; exit 1" 1 2 15
  $rm conftest.c
  cat > conftest.c <<EOF
#ifdef __GNUC__
  yes;
#endif
EOF
  # LINENUM
  if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:378: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
    with_gcc=yes
  fi
  $rm conftest.c
  echo $ac_t "$with_gcc" 1>&6
fi

# Allow CC to be a program name with arguments.
set dummy $CC
compiler="$2"

echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6
pic_flag=
profile_flag_pattern=
special_shlib_compile_flags=
wl=
link_static_flag=

if test "$with_gcc" = yes; then
  pic_flag='-fPIC'
  profile_flag_pattern='-pg?'
  wl='-Wl,'
  link_static_flag='-static'
else
  # PORTME Check for PIC flags for the system compiler.
  case "$host_os" in
  aix3* | aix4*)
    # FIXME All rs/6000 code is PIC, but is there any non-rs/6000 AIX platform?
    pic_flag=
    link_static_flag='-bnso -bI:/lib/syscalls.exp'
    ;;

  hpux9* | hpux10*)
    # FIXME is there a better link_static_flag that works with the bundled CC?
    wl='-Wl,'
    link_static_flag='${wl}-a ${wl}archive'
    pic_flag='+Z'
    ;;

  irix5* | irix6*)
    wl='-Wl,'
    link_static_flag='-non_shared'
    # PIC (with -KPIC) is the default.
    pic_flag=
    ;;

  osf3* | osf4*)
    # FIXME - pic_flag is probably required for hppa*-osf* and i860-osf*
    wl='-Wl,'
    link_static_flag='-non_shared'
    ;;

  sco3.2v5*)
    pic_flag='-Kpic'
    link_static_flag='-dn'
    special_shlib_compile_flags='-belf'
    ;;

  solaris2*)
    pic_flag='-KPIC'
    link_static_flag='-Bstatic'
    wl='-Wl,'
    ;;

  sunos4*)
    pic_flag='-PIC'
    link_static_flag='-Bstatic'
    wl='-Qoption ld '
    ;;

  *)
    can_build_shared=no
    ;;
  esac
fi

case "$host_cpu" in
rs6000 | powerpc | powerpcle)
  # Yippee! All RS/6000 and PowerPC code is position-independent.
  pic_flag=
  ;;
esac

if test -n "$pic_flag"; then
  echo $ac_t "$pic_flag" 1>&6
  pic_flag=" $pic_flag"
else
  echo $ac_t none 1>&6
fi

# Check for any special shared library compilation flags.
if test -n "$special_shlib_compile_flags"; then
  echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2
  if echo "$old_CC $old_CFLAGS " | egrep -e "[ 	]$special_shlib_compile_flags[ 	]" >/dev/null; then :
  else
    echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2
    can_build_shared=no
  fi
fi

# See if we are using a broken GCC collect2 program.
if test "$with_gcc" = yes; then
  echo $ac_n "checking for broken GCC collect2... $ac_c" 1>&6

  # FIXME: Run a test here, instead of relying on the canonical system name.
  case "$host_os" in
  aix3*)
    can_build_shared=no
    echo $ac_t yes 1>&6
    echo "$progname: to build shared libraries, set the CC env variable to \`xlc' and reconfigure" 1>&2
    ;;
  *)
    echo $ac_t no 1>&6
    ;;
  esac
fi

echo $ac_n "checking for $compiler option to statically link programs... $ac_c" 1>&6
if test -n "$link_static_flag"; then
  echo $ac_t "$link_static_flag" 1>&6
else
  echo $ac_t none 1>&6
fi

if test -z "$LN_S"; then
  # Check to see if we can use ln -s, or we need hard links.
  echo $ac_n "checking whether ln -s works... $ac_c" 1>&6
  rm -f conftestdata
  if ln -s X conftestdata 2>/dev/null; then
    rm -f conftestdata
    LN_S="ln -s"
  else
    LN_S=ln
  fi
  if test "$LN_S" = "ln -s"; then
    echo "$ac_t"yes 1>&6
  else
    echo "$ac_t"no 1>&6
  fi
fi

if test "$with_gnu_ld" != yes || test -z "$LD"; then
  if test -z "$LD"; then
    if test "$with_gnu_ld" = yes; then
      echo $ac_n "checking for GNU ld... $ac_c" 1>&6
    else
      echo $ac_n "checking for non-GNU ld... $ac_c" 1>&6
    fi

    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
    for ac_dir in $PATH; do
      test -z "$ac_dir" && ac_dir=.
      if test -f "$ac_dir/ld"; then
	LD="$ac_dir/ld"
	# Check to see if the program is GNU ld.  I'd rather use --version,
	# but apparently some GNU ld's only accept -v.
	# Break only if it was the GNU/non-GNU ld that we prefer.
	if "$LD" -v 2>&1 < /dev/null | egrep '(GNU ld|with BFD)' > /dev/null; then
	  test "$with_gnu_ld" = yes && break
	else
	  test "$with_gnu_ld" != yes && break
	fi
      fi
    done
    IFS="$ac_save_ifs"

    if test -n "$LD"; then
      echo "$ac_t""$LD" 1>&6
    else
      echo "$ac_t""no" 1>&6
    fi

    if test -z "$LD"; then
      echo "$progname: error: no acceptable ld found in \$PATH" 1>&2
      exit 1
    fi
  fi

  echo $ac_n "checking whether we are using GNU ld... $ac_c" 1>&6
  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
  if $LD -v 2>&1 </dev/null | egrep '(GNU ld|with BFD)' > /dev/null; then
    with_gnu_ld=yes
  fi
  echo $ac_t "$with_gnu_ld" 1>&6
fi

# See if the linker supports building shared libraries.
echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6

allow_undefined_flag=
archive_cmds=
export_dynamic_flag=
hardcode_libdir_flag_spec=
hardcode_libdir_separator=
hardcode_direct=no
hardcode_minus_L=no
hardcode_runpath_var=no
hardcode_shlibpath_var=unsupported
runpath_var=

ld_shlibs=yes
if test "$with_gnu_ld" = yes; then
  # See if GNU ld supports shared libraries.

  case "$host_os" in
  sunos4*)
    ld_shlibs=yes
    hardcode_direct=yes
    hardcode_shlibpath_var=no
    ;;

  *)
    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
      runpath_var=LD_RUN_PATH
      hardcode_runpath_var=yes
      ld_shlibs=yes
    else
      ld_shlibs=no
    fi
    ;;
  esac

  if test "$ld_shlibs" = yes; then
    archive_cmds='$cc -shared ${wl}-soname $wl$soname -o $lib$libobjs$deplibs'
    hardcode_libdir_flag_spec='${wl}-rpath $wl$libdir'
    export_dynamic_flag='${wl}-export-dynamic'
  fi
else
  # PORTME fill in a description of your system's linker (not GNU ld)
  case "$host_os" in
  aix3*)
    allow_undefined_flag=unsupported
    archive_cmds='/usr/ucb/nm$libobjs | egrep \" [BD] \" | sed \"s/^.* //\" > $lib.exp;$LD -o $objdir/$soname$libobjs -bE:$lib.exp -T512 -H512 -bM:SRE -lc$deplibs;$AR cru $lib $objdir/$soname'
    # Note: this linker hardcodes the directories in LIBPATH if there
    # are no directories specified by -L.
    hardcode_minus_L=yes
    ;;

  aix4*)
    allow_undefined_flag=unsupported
    archive_cmds='/bin/nm -B$libobjs | egrep \" [BD] \" | sed \"s/^.* //\" > $lib.exp;$cc -o $objdir/$soname$libobjs ${wl}-bE:$lib.exp ${wl}-bM:SRE ${wl}-bnoentry$deplibs;$AR cru $lib $objdir/$soname'
    hardcode_direct=yes
    hardcode_minus_L=yes
    ;;

  # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
  # support.  Future versions do this automatically, but an explicit c++rt0.o
  # doesn't break anything, and helps significantly (at the cost of a little
  # extra space).
  freebsd2.2*)
    archive_cmds='$LD -Bshareable -o $lib$libobjs$deplibs /usr/lib/c++rt0.o'
    hardcode_direct=yes
    hardcode_minus_L=yes
    hardcode_shlibpath_var=no
    ;;

  # Unfortunately, older versions of FreeBSD 2 don't have this feature.
  freebsd2*)
    archive_cmds='$LD -Bshareable -o $lib$libobjs$deplibs'
    hardcode_direct=yes
    hardcode_minus_L=yes
    hardcode_shlibpath_var=no
    ;;

  # FreeBSD 3, at last, uses gcc -shared to do shared libraries.
  freebsd3*)
    archive_cmds='$CC -shared -o $lib$libobjs$deplibs'
    hardcode_direct=yes
    hardcode_minusL=yes
    hardcode_shlibpath_var=no
    ;;

  hpux9*)
    archive_cmds='$rm $objdir/$soname;$LD -b +s +b $install_libdir -o $objdir/$soname$libobjs$deplibs;mv $objdir/$soname $lib'
    hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
    hardcode_direct=yes
    hardcode_minus_L=yes
    ;;

  hpux10*)
    archive_cmds='$LD -b +h $soname +s +b $install_libdir -o $lib$libobjs$deplibs'
    hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
    hardcode_direct=yes
    hardcode_minus_L=yes
    ;;

  irix5* | irix6*)
    archive_cmds='$LD -shared -o $lib -soname $soname -set_version $verstring$libobjs -lc$deplibs'
    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
    ;;

  netbsd* | openbsd*)
    # Tested with NetBSD 1.2 ld
    archive_cmds='$LD -Bshareable -o $lib$libobjs$deplibs'
    hardcode_libdir_flag_spec='-R$libdir'
    hardcode_direct=yes
    hardcode_shlibpath_var=no
    ;;

  osf3* | osf4*)
    allow_undefined_flag=' -expect_unresolved'
    archive_cmds='$LD -shared${allow_undefined_flag} -o $lib -soname $soname -set_version $verstring$libobjs -lc$deplibs'
    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
    hardcode_libdir_separator=:
    ;;

  sco3.2v5*)
    archive_cmds='$LD -G -o $lib$libobjs$deplibs'
    hardcode_direct=yes
    ;;

  solaris2*)
    archive_cmds='$LD -G -z text -h $soname -o $lib$libobjs$deplibs'
    hardcode_libdir_flag_spec='-R$libdir'
    hardcode_shlibpath_var=no
    ;;

  sunos4*)
    archive_cmds='$LD -assert pure-text -Bstatic -o $lib$libobjs'
    hardcode_libdir_flag_spec='-L$libdir'
    hardcode_direct=yes
    hardcode_minus_L=yes
    hardcode_shlibpath_var=no
    ;;

  *)
    ld_shlibs=no
    can_build_shared=no
    ;;
  esac
fi
echo $ac_t "$ld_shlibs" 1>&6

# Check hardcoding attributes.
echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6
hardcode_action=
if test -n "$hardcode_libdir_flag_spec" || \
   test "$hardcode_runpath_var" = yes; then

  # We can hardcode non-existant directories.
  if test "$hardcode_direct" != no && \
     test "$hardcode_minus_L" != no && \
     test "$hardcode_shlibpath_var" != no; then

    # Linking always hardcodes the temporary library directory.
    hardcode_action=relink
  else
    # We can link without hardcoding, and we can hardcode nonexisting dirs.
    hardcode_action=immediate
  fi
elif test "$hardcode_direct" != yes && \
     test "$hardcode_minus_L" != yes && \
     test "$hardcode_shlibpath_var" != yes; then
  # We can't hardcode anything.
  hardcode_action=unsupported
else
  # We can only hardcode existing directories.
  hardcode_action=relink
fi
echo $ac_t "$hardcode_action" 1>&6
test "$hardcode_action" = unsupported && can_build_shared=no


reload_flag=
reload_cmds='$LD$reload_flag -o $output$reload_objs'
echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6
# PORTME Some linker may need a different reload flag.
reload_flag='-r'
echo $ac_t "$reload_flag"
test -n "$reload_flag" && reload_flag=" $reload_flag"

# PORTME Fill in your ld.so characteristics
library_names_spec=
soname_spec=
postinstall_cmds=
finish_cmds=
shlibpath_var=
version_type=none
dynamic_linker="$host_os ld.so"

echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6
case "$host_os" in
aix3* | aix4*)
  version_type=linux
  library_names_spec='$libname.so.$versuffix $libname.a'
  shlibpath_var=LIBPATH

  # AIX has no versioning support, so we append a major version to the name.
  soname_spec='$libname.so.$major'
  ;;

freebsd2* | freebsd3*)
  version_type=sunos
  library_names_spec='$libname.so.$versuffix $libname.so'
  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
  shlibpath_var=LD_LIBRARY_PATH
  ;;

gnu*)
  version_type=sunos
  library_names_spec='$libname.so.$versuffix'
  shlibpath_var=LD_LIBRARY_PATH
  ;;

hpux9* | hpux10*)
  # Give a soname corresponding to the major version so that dld.sl refuses to
  # link against other versions.
  dynamic_linker="$host_os dld.sl"
  version_type=sunos
  shlibpath_var=SHLIB_PATH
  library_names_spec='$libname.sl.$versuffix $libname.sl.$major $libname.sl'
  soname_spec='$libname.sl.$major'
  # HP-UX runs *really* slowly unless shared libraries are mode 555.
  postinstall_cmds='chmod 555 $lib'
  ;;

irix5* | irix6*)
  version_type=osf
  soname_spec='$libname.so'
  library_names_spec='$libname.so.$versuffix $libname.so'
  shlibpath_var=LD_LIBRARY_PATH
  ;;

# No shared lib support for Linux oldld, aout, or coff.
linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
  dynamic_linker=no
  ;;

# This must be Linux ELF.
linux-gnu*)
  version_type=linux
  library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
  soname_spec='$libname.so.$major'
  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
  shlibpath_var=LD_LIBRARY_PATH

  if test -f /lib/ld.so.1; then
    dynamic_linker='GNU ld.so'
  else
    # Only the GNU ld.so supports shared libraries on MkLinux.
    case "$host_cpu" in
    powerpc*) dynamic_linker=no ;;
    *) dynamic_linker='Linux ld.so' ;;
    esac
  fi
  ;;

netbsd* | openbsd*)
  version_type=sunos
  library_names_spec='$libname.so.$versuffix'
  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
  shlibpath_var=LD_LIBRARY_PATH
  ;;

osf3* | osf4*)
  version_type=osf
  soname_spec='$libname.so'
  library_names_spec='$libname.so.$versuffix $libname.so'
  shlibpath_var=LD_LIBRARY_PATH
  ;;

sco3.2v5*)
  version_type=osf
  soname_spec='$libname.so.$major'
  library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
  shlibpath_var=LD_LIBRARY_PATH
  ;;

solaris2*)
  version_type=linux
  library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
  soname_spec='$libname.so.$major'
  shlibpath_var=LD_LIBRARY_PATH
  ;;

sunos4*)
  version_type=sunos
  library_names_spec='$libname.so.$versuffix'
  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
  shlibpath_var=LD_LIBRARY_PATH
  ;;

*)
  dynamic_linker=no
  ;;
esac
echo "$ac_t""$dynamic_linker"
test "$dynamic_linker" = no && can_build_shared=no

# FIXME need to add library stripping features
# strip -x works for most platforms, though not for static libraries on NetBSD
# HP-UX requires "-r" for library stripping
striplib=
old_striplib=

#echo $ac_n "checking for static library strip program... $ac_c" 1>&6
#if test -n "$old_striplib"; then
#  echo $ac_t "$old_striplib" 1>&6
#else
#  echo $ac_t none 1>&6
#fi

#if test "$can_build_shared" = yes; then
#  echo $ac_n "checking for shared library strip program... $ac_c" 1>&6
#
#  if test -n "$striplib"; then
#    echo $ac_t "$striplib" 1>&6
#  else
#    echo $ac_t none 1>&6
#  fi
#fi

# Report the consequences.
echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6

echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6
test "$can_build_shared" = "no" && enable_shared=no

# On AIX, shared libraries and static libraries use the same namespace.
case "$host_os" in
aix*)
  test "$enable_shared" = yes && enable_static=no
  if test -n "$RANLIB"; then
    archive_cmds="$archive_cmds;\$RANLIB \$lib"
    postinstall_cmds='$RANLIB $lib'
  fi
  ;;
esac

echo "$ac_t""$enable_shared" 1>&6

# Make sure either enable_shared or enable_static is yes.
test "$enable_shared" = yes || enable_static=yes

echo "checking whether to build static libraries... $enable_static" 1>&6

ofile=libtool
trap "$rm $ofile; exit 1" 1 2 15
echo creating $ofile
rm -fr $ofile
cat <<EOF > $ofile
#! /bin/sh

# libtool - Provide generalized library-building support services.
#
# Generated automatically by $PROGRAM - GNU $PACKAGE $VERSION
# This program was configured as follows,
# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
#
# CC="$old_CC" CFLAGS="$old_CFLAGS" CPPFLAGS="$old_CPPFLAGS" \\
# LD="$old_LD" RANLIB="$old_RANLIB" LN_S="$old_LN_S" \\
#   $0$ltconfig_args
#
# Compiler and other test output produced by $progname, useful for
# debugging $progname, is in ./config.log if it exists.

# The version of $progname that generated this script.
LTCONFIG_VERSION="$VERSION"

# Whether or not to build libtool libraries.
build_libtool_libs=$enable_shared

# Whether or not to build old-style libraries.
build_old_libs=$enable_static

# The host system.
host_alias="$host_alias"
host="$host"

# The archiver.
AR='$AR'

# The linker used to build libraries.
LD='$LD'

# Whether we need hard or soft links.
LN_S='$LN_S'

# How to create reloadable object files.
reload_flag='$reload_flag'
reload_cmds='$reload_cmds'

# How to pass a linker flag through the compiler.
wl='$wl'

# Additional compiler flags for building library objects.
pic_flag='$pic_flag'

# Compiler flag to prevent dynamic linking.
link_static_flag='$link_static_flag'

# Compiler flag to allow reflexive dlopens.
export_dynamic_flag='$export_dynamic_flag'

# Pattern to match compiler flags for creating libNAME_p libraries:
profile_flag_pattern='$profile_flag_pattern'

# Library versioning type.
version_type=$version_type

# List of archive names.  First name is the real one, the rest are links.
# The last name is the one that the linker finds with -lNAME.
library_names_spec='$library_names_spec'

# The coded name of the library, if different from the real name.
soname_spec='$soname_spec'

# Commands used to build and install an old-style archive.
RANLIB='$RANLIB'
old_archive_cmds='$old_archive_cmds'
old_postinstall_cmds='$old_postinstall_cmds'

# Commands used to build and install a shared archive.
archive_cmds='$archive_cmds'
postinstall_cmds='$postinstall_cmds'

# Flag that allows shared libraries with undefined symbols to be built.
allow_undefined_flag='$allow_undefined_flag'

# Commands used to finish a libtool library installation in a directory.
finish_cmds='$finish_cmds'

# How to strip a library file.
striplib='$striplib'
old_striplib='$old_striplib'

# This is the shared library runtime path variable.
runpath_var=$runpath_var

# This is the shared library path variable.
shlibpath_var=$shlibpath_var

# How to hardcode a shared library path into an executable.
hardcode_action=$hardcode_action

# Flag to hardcode \$libdir into a binary during linking.
# This must work even if \$libdir does not exist.
hardcode_libdir_flag_spec='$hardcode_libdir_flag_spec'

# Whether we need a single -rpath flag with a separated argument.
hardcode_libdir_separator='$hardcode_libdir_separator'

# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
# resulting binary.
hardcode_direct=$hardcode_direct

# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
# resulting binary.
hardcode_minus_L=$hardcode_minus_L

# Set to yes if using RUNPATH_VAR=DIR during linking hardcodes DIR into the
# resulting binary.
hardcode_runpath_var=$hardcode_runpath_var

# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
# the resulting binary.
hardcode_shlibpath_var=$hardcode_shlibpath_var

EOF

# Detect if we are using a relative or absolute path to ltmain.sh.
case "$ltmain" in
/*) cat <<EOF2 >> $ofile
# Execute the libtool backend.
. $ltmain
EOF2
  ;;
*) cat <<EOF3 >> $ofile
# Find the path to this script.
thisdir=\`echo "\$0" | sed -e 's%/[^/]*\$%%'\`
test "X\$0" = "X\$thisdir" && thisdir=.

# Execute the libtool backend.
. \$thisdir/$ltmain
EOF3
  ;;
esac

echo 'exit 1' >> $ofile

chmod +x $ofile
exit 0

# Local Variables:
# mode:shell-script
# sh-indentation:2
# End:
