diff options
119 files changed, 22184 insertions, 11592 deletions
@@ -1,30 +1,21 @@ -Makefile -Makefile.in -mkinstalldirs +*~ +*.o  aclocal.m4  autom4te.cache -config.guess  config.h  config.h.in  config.log  config.status  config.status.lineno -config.rpath -config.sub  configure  configure.lineno -depcomp -install-sh -libtool -ltmain.sh -missing -stamp-h1 - -*.o -*~ -root -tags -cscope.out  cscope.in.out +cscope.out  cscope.po.out +libtool +Makefile +Makefile.in  pacman-*.tar.gz +root +stamp-h1 +tags diff --git a/Makefile.am b/Makefile.am index f70192e9..32a08f71 100644 --- a/Makefile.am +++ b/Makefile.am @@ -3,6 +3,8 @@ if WANT_DOC  SUBDIRS += doc  endif +ACLOCAL_AMFLAGS = -I m4 --install +  # Make sure we test and build manpages when doing distcheck  DISTCHECK_CONFIGURE_FLAGS = --enable-doc --disable-git-version diff --git a/PKGBUILD-split.proto b/PKGBUILD-split.proto index d7f1de1b..52aacc54 100644 --- a/PKGBUILD-split.proto +++ b/PKGBUILD-split.proto @@ -8,6 +8,7 @@ pkgname=('pkg1' 'pkg2')  pkgbase=BASE  pkgver=VERSION  pkgrel=1 +epoch=  pkgdesc=""  arch=()  url="" @@ -15,6 +16,7 @@ license=('GPL')  groups=()  depends=()  makedepends=() +checkdepends=()  provides=()  conflicts=()  replaces=() @@ -32,6 +34,11 @@ build() {    make  } +check() { +  cd "$srcdir/$pkgname-$pkgver" +  make -k check +} +  package_pkg1() {    # options and directives that can be overridden    pkgver= diff --git a/PKGBUILD.proto b/PKGBUILD.proto index ebbdf0ae..98172d8d 100644 --- a/PKGBUILD.proto +++ b/PKGBUILD.proto @@ -7,6 +7,7 @@  pkgname=NAME  pkgver=VERSION  pkgrel=1 +epoch=  pkgdesc=""  arch=()  url="" @@ -14,6 +15,7 @@ license=('GPL')  groups=()  depends=()  makedepends=() +checkdepends=()  optdepends=()  provides=()  conflicts=() @@ -28,14 +30,17 @@ md5sums=() #generate with 'makepkg -g'  build() {    cd "$srcdir/$pkgname-$pkgver" -    ./configure --prefix=/usr    make  } -package() { +check() {    cd "$srcdir/$pkgname-$pkgver" +  make -k check +} +package() { +  cd "$srcdir/$pkgname-$pkgver"    make DESTDIR="$pkgdir/" install  } diff --git a/acinclude.m4 b/acinclude.m4 index 1524a3dd..7309d731 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -1,4876 +1,4 @@  dnl acinclude.m4 - configure macros used by pacman and libalpm -dnl The majority of this file is the libtool macros we use, kept here so -dnl we are not dependent on the host-system version of the macros. There -dnl are some pacman/libalpm specific macros at the end of the file as well. - -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- -## Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 -## Free Software Foundation, Inc. -## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 -## -## This file is free software; the Free Software Foundation gives -## unlimited permission to copy and/or distribute it, with or without -## modifications, as long as this notice is preserved. - -# serial 51 AC_PROG_LIBTOOL - - -# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) -# ----------------------------------------------------------- -# If this macro is not defined by Autoconf, define it here. -m4_ifdef([AC_PROVIDE_IFELSE], -         [], -         [m4_define([AC_PROVIDE_IFELSE], -	         [m4_ifdef([AC_PROVIDE_$1], -		           [$2], [$3])])]) - - -# AC_PROG_LIBTOOL -# --------------- -AC_DEFUN([AC_PROG_LIBTOOL], -[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl -])])# AC_PROG_LIBTOOL - - -# _AC_PROG_LIBTOOL -# ---------------- -AC_DEFUN([_AC_PROG_LIBTOOL], -[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -# Prevent multiple expansion -define([AC_PROG_LIBTOOL], []) -])# _AC_PROG_LIBTOOL - - -# AC_LIBTOOL_SETUP -# ---------------- -AC_DEFUN([AC_LIBTOOL_SETUP], -[AC_PREREQ(2.50)dnl -AC_REQUIRE([AC_ENABLE_SHARED])dnl -AC_REQUIRE([AC_ENABLE_STATIC])dnl -AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_LD])dnl -AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl -AC_REQUIRE([AC_PROG_NM])dnl - -AC_REQUIRE([AC_PROG_LN_S])dnl -AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl -# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! -AC_REQUIRE([AC_OBJEXT])dnl -AC_REQUIRE([AC_EXEEXT])dnl -dnl - -AC_LIBTOOL_SYS_MAX_CMD_LEN -AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE -AC_LIBTOOL_OBJDIR - -AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl -_LT_AC_PROG_ECHO_BACKSLASH - -case $host_os in -aix3*) -  # AIX sometimes has problems with the GCC collect2 program.  For some -  # reason, if we set the COLLECT_NAMES environment variable, the problems -  # vanish in a puff of smoke. -  if test "X${COLLECT_NAMES+set}" != Xset; then -    COLLECT_NAMES= -    export COLLECT_NAMES -  fi -  ;; -esac - -# Sed substitution that helps us do robust quoting.  It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e 1s/^X//' -[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] - -# Same as above, but do not quote variable references. -[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Constants: -rm="rm -f" - -# Global variables: -default_ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a -ltmain="$ac_aux_dir/ltmain.sh" -ofile="$default_ofile" -with_gnu_ld="$lt_cv_prog_gnu_ld" - -AC_CHECK_TOOL(AR, ar, false) -AC_CHECK_TOOL(RANLIB, ranlib, :) -AC_CHECK_TOOL(STRIP, strip, :) - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -test -z "$AS" && AS=as -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$DLLTOOL" && DLLTOOL=dlltool -test -z "$LD" && LD=ld -test -z "$LN_S" && LN_S="ln -s" -test -z "$MAGIC_CMD" && MAGIC_CMD=file -test -z "$NM" && NM=nm -test -z "$SED" && SED=sed -test -z "$OBJDUMP" && OBJDUMP=objdump -test -z "$RANLIB" && RANLIB=: -test -z "$STRIP" && STRIP=: -test -z "$ac_objext" && ac_objext=o - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then -  case $host_os in -  openbsd*) -    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" -    ;; -  *) -    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" -    ;; -  esac -  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -case $deplibs_check_method in -file_magic*) -  if test "$file_magic_cmd" = '$MAGIC_CMD'; then -    AC_PATH_MAGIC -  fi -  ;; -esac - -AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) -AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], -enable_win32_dll=yes, enable_win32_dll=no) - -AC_ARG_ENABLE([libtool-lock], -    [AC_HELP_STRING([--disable-libtool-lock], -	[avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -AC_ARG_WITH([pic], -    [AC_HELP_STRING([--with-pic], -	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])], -    [pic_mode="$withval"], -    [pic_mode=default]) -test -z "$pic_mode" && pic_mode=default - -# Use C for the default configuration in the libtool script -tagname= -AC_LIBTOOL_LANG_C_CONFIG -_LT_AC_TAGCONFIG -])# AC_LIBTOOL_SETUP - - -# _LT_AC_SYS_COMPILER -# ------------------- -AC_DEFUN([_LT_AC_SYS_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_AC_SYS_COMPILER - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix. -AC_DEFUN([_LT_CC_BASENAME], -[for cc_temp in $1""; do -  case $cc_temp in -    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; -    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; -    \-*) ;; -    *) break;; -  esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` -]) - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -AC_DEFUN([_LT_COMPILER_BOILERPLATE], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -AC_DEFUN([_LT_LINKER_BOILERPLATE], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* -])# _LT_LINKER_BOILERPLATE - - -# _LT_AC_SYS_LIBPATH_AIX -# ---------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_LINK_IFELSE(AC_LANG_PROGRAM,[ -lt_aix_libpath_sed=' -    /Import File Strings/,/^$/ { -	/^0/ { -	    s/^0  *\(.*\)$/\1/ -	    p -	} -    }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then -  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi],[]) -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi -])# _LT_AC_SYS_LIBPATH_AIX - - -# _LT_AC_SHELL_INIT(ARG) -# ---------------------- -AC_DEFUN([_LT_AC_SHELL_INIT], -[ifdef([AC_DIVERSION_NOTICE], -	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], -	 [AC_DIVERT_PUSH(NOTICE)]) -$1 -AC_DIVERT_POP -])# _LT_AC_SHELL_INIT - - -# _LT_AC_PROG_ECHO_BACKSLASH -# -------------------------- -# Add some code to the start of the generated configure script which -# will find an echo command which doesn't interpret backslashes. -AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], -[_LT_AC_SHELL_INIT([ -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$ECHO in -X*--fallback-echo) -  # Remove one level of quotation (which was required for Make). -  ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` -  ;; -esac - -echo=${ECHO-echo} -if test "X[$]1" = X--no-reexec; then -  # Discard the --no-reexec flag, and continue. -  shift -elif test "X[$]1" = X--fallback-echo; then -  # Avoid inline document here, it may be left over -  : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then -  # Yippee, $echo works! -  : -else -  # Restart under the correct shell. -  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} -fi - -if test "X[$]1" = X--fallback-echo; then -  # used as fallback echo -  shift -  cat <<EOF -[$]* -EOF -  exit 0 -fi - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test -z "$ECHO"; then -if test "X${echo_test_string+set}" != Xset; then -# find a string as large as possible, as long as the shell can cope with it -  for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do -    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... -    if (echo_test_string=`eval $cmd`) 2>/dev/null && -       echo_test_string=`eval $cmd` && -       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null -    then -      break -    fi -  done -fi - -if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && -   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && -   test "X$echo_testing_string" = "X$echo_test_string"; then -  : -else -  # The Solaris, AIX, and Digital Unix default echo programs unquote -  # backslashes.  This makes it impossible to quote backslashes using -  #   echo "$something" | sed 's/\\/\\\\/g' -  # -  # So, first we look for a working echo in the user's PATH. - -  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -  for dir in $PATH /usr/ucb; do -    IFS="$lt_save_ifs" -    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && -       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && -       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && -       test "X$echo_testing_string" = "X$echo_test_string"; then -      echo="$dir/echo" -      break -    fi -  done -  IFS="$lt_save_ifs" - -  if test "X$echo" = Xecho; then -    # We didn't find a better echo, so look for alternatives. -    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && -       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && -       test "X$echo_testing_string" = "X$echo_test_string"; then -      # This shell has a builtin print -r that does the trick. -      echo='print -r' -    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && -	 test "X$CONFIG_SHELL" != X/bin/ksh; then -      # If we have ksh, try running configure again with it. -      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} -      export ORIGINAL_CONFIG_SHELL -      CONFIG_SHELL=/bin/ksh -      export CONFIG_SHELL -      exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} -    else -      # Try using printf. -      echo='printf %s\n' -      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && -	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && -	 test "X$echo_testing_string" = "X$echo_test_string"; then -	# Cool, printf works -	: -      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && -	   test "X$echo_testing_string" = 'X\t' && -	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && -	   test "X$echo_testing_string" = "X$echo_test_string"; then -	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL -	export CONFIG_SHELL -	SHELL="$CONFIG_SHELL" -	export SHELL -	echo="$CONFIG_SHELL [$]0 --fallback-echo" -      elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && -	   test "X$echo_testing_string" = 'X\t' && -	   echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && -	   test "X$echo_testing_string" = "X$echo_test_string"; then -	echo="$CONFIG_SHELL [$]0 --fallback-echo" -      else -	# maybe with a smaller string... -	prev=: - -	for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do -	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null -	  then -	    break -	  fi -	  prev="$cmd" -	done - -	if test "$prev" != 'sed 50q "[$]0"'; then -	  echo_test_string=`eval $prev` -	  export echo_test_string -	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} -	else -	  # Oops.  We lost completely, so just stick with echo. -	  echo=echo -	fi -      fi -    fi -  fi -fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -ECHO=$echo -if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then -   ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" -fi - -AC_SUBST(ECHO) -])])# _LT_AC_PROG_ECHO_BACKSLASH - - -# _LT_AC_LOCK -# ----------- -AC_DEFUN([_LT_AC_LOCK], -[AC_ARG_ENABLE([libtool-lock], -    [AC_HELP_STRING([--disable-libtool-lock], -	[avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) -  # Find out which ABI we are using. -  echo 'int i;' > conftest.$ac_ext -  if AC_TRY_EVAL(ac_compile); then -    case `/usr/bin/file conftest.$ac_objext` in -    *ELF-32*) -      HPUX_IA64_MODE="32" -      ;; -    *ELF-64*) -      HPUX_IA64_MODE="64" -      ;; -    esac -  fi -  rm -rf conftest* -  ;; -*-*-irix6*) -  # Find out which ABI we are using. -  echo '[#]line __oline__ "configure"' > conftest.$ac_ext -  if AC_TRY_EVAL(ac_compile); then -   if test "$lt_cv_prog_gnu_ld" = yes; then -    case `/usr/bin/file conftest.$ac_objext` in -    *32-bit*) -      LD="${LD-ld} -melf32bsmip" -      ;; -    *N32*) -      LD="${LD-ld} -melf32bmipn32" -      ;; -    *64-bit*) -      LD="${LD-ld} -melf64bmip" -      ;; -    esac -   else -    case `/usr/bin/file conftest.$ac_objext` in -    *32-bit*) -      LD="${LD-ld} -32" -      ;; -    *N32*) -      LD="${LD-ld} -n32" -      ;; -    *64-bit*) -      LD="${LD-ld} -64" -      ;; -    esac -   fi -  fi -  rm -rf conftest* -  ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|sparc*-*linux*) -  # Find out which ABI we are using. -  echo 'int i;' > conftest.$ac_ext -  if AC_TRY_EVAL(ac_compile); then -    case `/usr/bin/file conftest.o` in -    *32-bit*) -      case $host in -        x86_64-*kfreebsd*-gnu) -          LD="${LD-ld} -m elf_i386_fbsd" -          ;; -        x86_64-*linux*) -          LD="${LD-ld} -m elf_i386" -          ;; -        ppc64-*linux*|powerpc64-*linux*) -          LD="${LD-ld} -m elf32ppclinux" -          ;; -        s390x-*linux*) -          LD="${LD-ld} -m elf_s390" -          ;; -        sparc64-*linux*) -          LD="${LD-ld} -m elf32_sparc" -          ;; -      esac -      ;; -    *64-bit*) -      case $host in -        x86_64-*kfreebsd*-gnu) -          LD="${LD-ld} -m elf_x86_64_fbsd" -          ;; -        x86_64-*linux*) -          LD="${LD-ld} -m elf_x86_64" -          ;; -        ppc*-*linux*|powerpc*-*linux*) -          LD="${LD-ld} -m elf64ppc" -          ;; -        s390*-*linux*) -          LD="${LD-ld} -m elf64_s390" -          ;; -        sparc*-*linux*) -          LD="${LD-ld} -m elf64_sparc" -          ;; -      esac -      ;; -    esac -  fi -  rm -rf conftest* -  ;; - -*-*-sco3.2v5*) -  # On SCO OpenServer 5, we need -belf to get full-featured binaries. -  SAVE_CFLAGS="$CFLAGS" -  CFLAGS="$CFLAGS -belf" -  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, -    [AC_LANG_PUSH(C) -     AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) -     AC_LANG_POP]) -  if test x"$lt_cv_cc_needs_belf" != x"yes"; then -    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf -    CFLAGS="$SAVE_CFLAGS" -  fi -  ;; -sparc*-*solaris*) -  # Find out which ABI we are using. -  echo 'int i;' > conftest.$ac_ext -  if AC_TRY_EVAL(ac_compile); then -    case `/usr/bin/file conftest.o` in -    *64-bit*) -      case $lt_cv_prog_gnu_ld in -      yes*) LD="${LD-ld} -m elf64_sparc" ;; -      *)    LD="${LD-ld} -64" ;; -      esac -      ;; -    esac -  fi -  rm -rf conftest* -  ;; - -AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], -[*-*-cygwin* | *-*-mingw* | *-*-pw32*) -  AC_CHECK_TOOL(DLLTOOL, dlltool, false) -  AC_CHECK_TOOL(AS, as, false) -  AC_CHECK_TOOL(OBJDUMP, objdump, false) -  ;; -  ]) -esac - -need_locks="$enable_libtool_lock" - -])# _LT_AC_LOCK - - -# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], -[AC_REQUIRE([LT_AC_PROG_SED]) -AC_CACHE_CHECK([$1], [$2], -  [$2=no -  ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) -   echo "$lt_simple_compile_test_code" > conftest.$ac_ext -   lt_compiler_flag="$3" -   # Insert the option either (1) after the last *FLAGS variable, or -   # (2) before a word containing "conftest.", or (3) at the end. -   # Note that $ac_compile itself does not contain backslashes and begins -   # with a dollar sign (not a hyphen), so the echo should work correctly. -   # The option is referenced via a variable to avoid confusing sed. -   lt_compile=`echo "$ac_compile" | $SED \ -   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -   -e 's:$: $lt_compiler_flag:'` -   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) -   (eval "$lt_compile" 2>conftest.err) -   ac_status=$? -   cat conftest.err >&AS_MESSAGE_LOG_FD -   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD -   if (exit $ac_status) && test -s "$ac_outfile"; then -     # The compiler can only warn and ignore the option if not recognized -     # So say no if there are warnings other than the usual output. -     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp -     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 -     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then -       $2=yes -     fi -   fi -   $rm conftest* -]) - -if test x"[$]$2" = xyes; then -    ifelse([$5], , :, [$5]) -else -    ifelse([$6], , :, [$6]) -fi -])# AC_LIBTOOL_COMPILER_OPTION - - -# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -#                          [ACTION-SUCCESS], [ACTION-FAILURE]) -# ------------------------------------------------------------ -# Check whether the given compiler option works -AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_CACHE_CHECK([$1], [$2], -  [$2=no -   save_LDFLAGS="$LDFLAGS" -   LDFLAGS="$LDFLAGS $3" -   echo "$lt_simple_link_test_code" > conftest.$ac_ext -   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then -     # The linker can only warn and ignore the option if not recognized -     # So say no if there are warnings -     if test -s conftest.err; then -       # Append any errors to the config.log. -       cat conftest.err 1>&AS_MESSAGE_LOG_FD -       $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp -       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 -       if diff conftest.exp conftest.er2 >/dev/null; then -         $2=yes -       fi -     else -       $2=yes -     fi -   fi -   $rm conftest* -   LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then -    ifelse([$4], , :, [$4]) -else -    ifelse([$5], , :, [$5]) -fi -])# AC_LIBTOOL_LINKER_OPTION - - -# AC_LIBTOOL_SYS_MAX_CMD_LEN -# -------------------------- -AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], -[# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl -  i=0 -  teststring="ABCD" - -  case $build_os in -  msdosdjgpp*) -    # On DJGPP, this test can blow up pretty badly due to problems in libc -    # (any single argument exceeding 2000 bytes causes a buffer overrun -    # during glob expansion).  Even if it were fixed, the result of this -    # check would be larger than it should be. -    lt_cv_sys_max_cmd_len=12288;    # 12K is about right -    ;; - -  gnu*) -    # Under GNU Hurd, this test is not required because there is -    # no limit to the length of command line arguments. -    # Libtool will interpret -1 as no limit whatsoever -    lt_cv_sys_max_cmd_len=-1; -    ;; - -  cygwin* | mingw*) -    # On Win9x/ME, this test blows up -- it succeeds, but takes -    # about 5 minutes as the teststring grows exponentially. -    # Worse, since 9x/ME are not pre-emptively multitasking, -    # you end up with a "frozen" computer, even though with patience -    # the test eventually succeeds (with a max line length of 256k). -    # Instead, let's just punt: use the minimum linelength reported by -    # all of the supported platforms: 8192 (on NT/2K/XP). -    lt_cv_sys_max_cmd_len=8192; -    ;; - -  amigaos*) -    # On AmigaOS with pdksh, this test takes hours, literally. -    # So we just punt and use a minimum line length of 8192. -    lt_cv_sys_max_cmd_len=8192; -    ;; - -  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) -    # This has been around since 386BSD, at least.  Likely further. -    if test -x /sbin/sysctl; then -      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` -    elif test -x /usr/sbin/sysctl; then -      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` -    else -      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs -    fi -    # And add a safety zone -    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` -    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` -    ;; - -  interix*) -    # We know the value 262144 and hardcode it with a safety zone (like BSD) -    lt_cv_sys_max_cmd_len=196608 -    ;; - -  osf*) -    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure -    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not -    # nice to cause kernel panics so lets avoid the loop below. -    # First set a reasonable default. -    lt_cv_sys_max_cmd_len=16384 -    # -    if test -x /sbin/sysconfig; then -      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in -        *1*) lt_cv_sys_max_cmd_len=-1 ;; -      esac -    fi -    ;; -  sco3.2v5*) -    lt_cv_sys_max_cmd_len=102400 -    ;; -  sysv5* | sco5v6* | sysv4.2uw2*) -    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` -    if test -n "$kargmax"; then -      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ 	]]//'` -    else -      lt_cv_sys_max_cmd_len=32768 -    fi -    ;; -  *) -    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` -    if test -n "$lt_cv_sys_max_cmd_len"; then -      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` -      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` -    else -      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} -      while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ -	       = "XX$teststring") >/dev/null 2>&1 && -	      new_result=`expr "X$teststring" : ".*" 2>&1` && -	      lt_cv_sys_max_cmd_len=$new_result && -	      test $i != 17 # 1/2 MB should be enough -      do -        i=`expr $i + 1` -        teststring=$teststring$teststring -      done -      teststring= -      # Add a significant safety factor because C++ compilers can tack on massive -      # amounts of additional arguments before passing them to the linker. -      # It appears as though 1/2 is a usable value. -      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` -    fi -    ;; -  esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then -  AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else -  AC_MSG_RESULT(none) -fi -])# AC_LIBTOOL_SYS_MAX_CMD_LEN - - -# _LT_AC_CHECK_DLFCN -# ------------------ -AC_DEFUN([_LT_AC_CHECK_DLFCN], -[AC_CHECK_HEADERS(dlfcn.h)dnl -])# _LT_AC_CHECK_DLFCN - - -# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -#                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# --------------------------------------------------------------------- -AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], -[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl -if test "$cross_compiling" = yes; then : -  [$4] -else -  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 -  lt_status=$lt_dlunknown -  cat > conftest.$ac_ext <<EOF -[#line __oline__ "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include <dlfcn.h> -#endif - -#include <stdio.h> - -#ifdef RTLD_GLOBAL -#  define LT_DLGLOBAL		RTLD_GLOBAL -#else -#  ifdef DL_GLOBAL -#    define LT_DLGLOBAL		DL_GLOBAL -#  else -#    define LT_DLGLOBAL		0 -#  endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we -   find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -#  ifdef RTLD_LAZY -#    define LT_DLLAZY_OR_NOW		RTLD_LAZY -#  else -#    ifdef DL_LAZY -#      define LT_DLLAZY_OR_NOW		DL_LAZY -#    else -#      ifdef RTLD_NOW -#        define LT_DLLAZY_OR_NOW	RTLD_NOW -#      else -#        ifdef DL_NOW -#          define LT_DLLAZY_OR_NOW	DL_NOW -#        else -#          define LT_DLLAZY_OR_NOW	0 -#        endif -#      endif -#    endif -#  endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ -  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); -  int status = $lt_dlunknown; - -  if (self) -    { -      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore; -      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; -      /* dlclose (self); */ -    } -  else -    puts (dlerror ()); - -    exit (status); -}] -EOF -  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then -    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null -    lt_status=$? -    case x$lt_status in -      x$lt_dlno_uscore) $1 ;; -      x$lt_dlneed_uscore) $2 ;; -      x$lt_dlunknown|x*) $3 ;; -    esac -  else : -    # compilation failed -    $3 -  fi -fi -rm -fr conftest* -])# _LT_AC_TRY_DLOPEN_SELF - - -# AC_LIBTOOL_DLOPEN_SELF -# ---------------------- -AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], -[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then -  enable_dlopen=unknown -  enable_dlopen_self=unknown -  enable_dlopen_self_static=unknown -else -  lt_cv_dlopen=no -  lt_cv_dlopen_libs= - -  case $host_os in -  beos*) -    lt_cv_dlopen="load_add_on" -    lt_cv_dlopen_libs= -    lt_cv_dlopen_self=yes -    ;; - -  mingw* | pw32*) -    lt_cv_dlopen="LoadLibrary" -    lt_cv_dlopen_libs= -   ;; - -  cygwin*) -    lt_cv_dlopen="dlopen" -    lt_cv_dlopen_libs= -   ;; - -  darwin*) -  # if libdl is installed we need to link against it -    AC_CHECK_LIB([dl], [dlopen], -		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ -    lt_cv_dlopen="dyld" -    lt_cv_dlopen_libs= -    lt_cv_dlopen_self=yes -    ]) -   ;; - -  *) -    AC_CHECK_FUNC([shl_load], -	  [lt_cv_dlopen="shl_load"], -      [AC_CHECK_LIB([dld], [shl_load], -	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], -	[AC_CHECK_FUNC([dlopen], -	      [lt_cv_dlopen="dlopen"], -	  [AC_CHECK_LIB([dl], [dlopen], -		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], -	    [AC_CHECK_LIB([svld], [dlopen], -		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], -	      [AC_CHECK_LIB([dld], [dld_link], -		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) -	      ]) -	    ]) -	  ]) -	]) -      ]) -    ;; -  esac - -  if test "x$lt_cv_dlopen" != xno; then -    enable_dlopen=yes -  else -    enable_dlopen=no -  fi - -  case $lt_cv_dlopen in -  dlopen) -    save_CPPFLAGS="$CPPFLAGS" -    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - -    save_LDFLAGS="$LDFLAGS" -    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - -    save_LIBS="$LIBS" -    LIBS="$lt_cv_dlopen_libs $LIBS" - -    AC_CACHE_CHECK([whether a program can dlopen itself], -	  lt_cv_dlopen_self, [dnl -	  _LT_AC_TRY_DLOPEN_SELF( -	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, -	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) -    ]) - -    if test "x$lt_cv_dlopen_self" = xyes; then -      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" -      AC_CACHE_CHECK([whether a statically linked program can dlopen itself], -    	  lt_cv_dlopen_self_static, [dnl -	  _LT_AC_TRY_DLOPEN_SELF( -	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, -	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross) -      ]) -    fi - -    CPPFLAGS="$save_CPPFLAGS" -    LDFLAGS="$save_LDFLAGS" -    LIBS="$save_LIBS" -    ;; -  esac - -  case $lt_cv_dlopen_self in -  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; -  *) enable_dlopen_self=unknown ;; -  esac - -  case $lt_cv_dlopen_self_static in -  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; -  *) enable_dlopen_self_static=unknown ;; -  esac -fi -])# AC_LIBTOOL_DLOPEN_SELF - - -# AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) -# --------------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler -AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], -  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], -  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no -   $rm -r conftest 2>/dev/null -   mkdir conftest -   cd conftest -   mkdir out -   echo "$lt_simple_compile_test_code" > conftest.$ac_ext - -   lt_compiler_flag="-o out/conftest2.$ac_objext" -   # Insert the option either (1) after the last *FLAGS variable, or -   # (2) before a word containing "conftest.", or (3) at the end. -   # Note that $ac_compile itself does not contain backslashes and begins -   # with a dollar sign (not a hyphen), so the echo should work correctly. -   lt_compile=`echo "$ac_compile" | $SED \ -   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -   -e 's:$: $lt_compiler_flag:'` -   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) -   (eval "$lt_compile" 2>out/conftest.err) -   ac_status=$? -   cat out/conftest.err >&AS_MESSAGE_LOG_FD -   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD -   if (exit $ac_status) && test -s out/conftest2.$ac_objext -   then -     # The compiler can only warn and ignore the option if not recognized -     # So say no if there are warnings -     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp -     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 -     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then -       _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes -     fi -   fi -   chmod u+w . 2>&AS_MESSAGE_LOG_FD -   $rm conftest* -   # SGI C++ compiler will create directory out/ii_files/ for -   # template instantiation -   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files -   $rm out/* && rmdir out -   cd .. -   rmdir conftest -   $rm conftest* -]) -])# AC_LIBTOOL_PROG_CC_C_O - - -# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) -# ----------------------------------------- -# Check to see if we can do hard links to lock some files if needed -AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], -[AC_REQUIRE([_LT_AC_LOCK])dnl - -hard_links="nottested" -if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then -  # do not overwrite the value of need_locks provided by the user -  AC_MSG_CHECKING([if we can lock with hard links]) -  hard_links=yes -  $rm conftest* -  ln conftest.a conftest.b 2>/dev/null && hard_links=no -  touch conftest.a -  ln conftest.a conftest.b 2>&5 || hard_links=no -  ln conftest.a conftest.b 2>/dev/null && hard_links=no -  AC_MSG_RESULT([$hard_links]) -  if test "$hard_links" = no; then -    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) -    need_locks=warn -  fi -else -  need_locks=no -fi -])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS - - -# AC_LIBTOOL_OBJDIR -# ----------------- -AC_DEFUN([AC_LIBTOOL_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then -  lt_cv_objdir=.libs -else -  # MS-DOS does not allow filenames that begin with a dot. -  lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -])# AC_LIBTOOL_OBJDIR - - -# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) -# ---------------------------------------------- -# Check hardcoding attributes. -AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_AC_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ -   test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \ -   test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - -  # We can hardcode non-existant directories. -  if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && -     # If the only mechanism to avoid hardcoding is shlibpath_var, we -     # have to relink, otherwise we might link with an installed library -     # when we should be linking with a yet-to-be-installed one -     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && -     test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then -    # Linking always hardcodes the temporary library directory. -    _LT_AC_TAGVAR(hardcode_action, $1)=relink -  else -    # We can link without hardcoding, and we can hardcode nonexisting dirs. -    _LT_AC_TAGVAR(hardcode_action, $1)=immediate -  fi -else -  # We cannot hardcode anything, or else we can only hardcode existing -  # directories. -  _LT_AC_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then -  # Fast installation is not supported -  enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || -     test "$enable_shared" = no; then -  # Fast installation is not necessary -  enable_fast_install=needless -fi -])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH - - -# AC_LIBTOOL_SYS_LIB_STRIP -# ------------------------ -AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], -[striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then -  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" -  test -z "$striplib" && striplib="$STRIP --strip-unneeded" -  AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough -  case $host_os in -   darwin*) -       if test -n "$STRIP" ; then -         striplib="$STRIP -x" -         old_striplib="$STRIP -S" -         AC_MSG_RESULT([yes]) -       else -  AC_MSG_RESULT([no]) -fi -       ;; -   *) -  AC_MSG_RESULT([no]) -    ;; -  esac -fi -])# AC_LIBTOOL_SYS_LIB_STRIP - - -# AC_LIBTOOL_SYS_DYNAMIC_LINKER -# ----------------------------- -# PORTME Fill in your ld.so characteristics -AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -m4_if($1,[],[ -if test "$GCC" = yes; then -  case $host_os in -    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; -    *) lt_awk_arg="/^libraries:/" ;; -  esac -  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` -  if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then -    # if the path contains ";" then we assume it to be the separator -    # otherwise default to the standard path separator (i.e. ":") - it is -    # assumed that no part of a normal pathname contains ";" but that should -    # okay in the real world where ";" in dirpaths is itself problematic. -    lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'` -  else -    lt_search_path_spec=`echo "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"` -  fi -  # Ok, now we have the path, separated by spaces, we can step through it -  # and add multilib dir if necessary. -  lt_tmp_lt_search_path_spec= -  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` -  for lt_sys_path in $lt_search_path_spec; do -    if test -d "$lt_sys_path/$lt_multi_os_dir"; then -      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" -    else -      test -d "$lt_sys_path" && \ -	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" -    fi -  done -  lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { -  lt_foo=""; -  lt_count=0; -  for (lt_i = NF; lt_i > 0; lt_i--) { -    if ($lt_i != "" && $lt_i != ".") { -      if ($lt_i == "..") { -        lt_count++; -      } else { -        if (lt_count == 0) { -          lt_foo="/" $lt_i lt_foo; -        } else { -          lt_count--; -        } -      } -    } -  } -  if (lt_foo != "") { lt_freq[[lt_foo]]++; } -  if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` -  sys_lib_search_path_spec=`echo $lt_search_path_spec` -else -  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) -  version_type=linux -  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' -  shlibpath_var=LIBPATH - -  # AIX 3 has no versioning support, so we append a major version to the name. -  soname_spec='${libname}${release}${shared_ext}$major' -  ;; - -aix4* | aix5*) -  version_type=linux -  need_lib_prefix=no -  need_version=no -  hardcode_into_libs=yes -  if test "$host_cpu" = ia64; then -    # AIX 5 supports IA64 -    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' -    shlibpath_var=LD_LIBRARY_PATH -  else -    # With GCC up to 2.95.x, collect2 would create an import file -    # for dependence libraries.  The import file would start with -    # the line `#! .'.  This would cause the generated library to -    # depend on `.', always an invalid library.  This was fixed in -    # development snapshots of GCC prior to 3.0. -    case $host_os in -      aix4 | aix4.[[01]] | aix4.[[01]].*) -      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' -	   echo ' yes ' -	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then -	: -      else -	can_build_shared=no -      fi -      ;; -    esac -    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct -    # soname into executable. Probably we can add versioning support to -    # collect2, so additional links can be useful in future. -    if test "$aix_use_runtimelinking" = yes; then -      # If using run time linking (on AIX 4.2 or later) use lib<name>.so -      # instead of lib<name>.a to let people know that these are not -      # typical AIX shared libraries. -      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -    else -      # We preserve .a as extension for shared libraries through AIX4.2 -      # and later when we are not doing run time linking. -      library_names_spec='${libname}${release}.a $libname.a' -      soname_spec='${libname}${release}${shared_ext}$major' -    fi -    shlibpath_var=LIBPATH -  fi -  ;; - -amigaos*) -  library_names_spec='$libname.ixlibrary $libname.a' -  # Create ${libname}_ixlibrary.a entries in /sys/libs. -  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' -  ;; - -beos*) -  library_names_spec='${libname}${shared_ext}' -  dynamic_linker="$host_os ld.so" -  shlibpath_var=LIBRARY_PATH -  ;; - -bsdi[[45]]*) -  version_type=linux -  need_version=no -  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -  soname_spec='${libname}${release}${shared_ext}$major' -  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' -  shlibpath_var=LD_LIBRARY_PATH -  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" -  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" -  # the default ld.so.conf also contains /usr/contrib/lib and -  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow -  # libtool to hard-code these into programs -  ;; - -cygwin* | mingw* | pw32*) -  version_type=windows -  shrext_cmds=".dll" -  need_version=no -  need_lib_prefix=no - -  case $GCC,$host_os in -  yes,cygwin* | yes,mingw* | yes,pw32*) -    library_names_spec='$libname.dll.a' -    # DLL is installed to $(libdir)/../bin by postinstall_cmds -    postinstall_cmds='base_file=`basename \${file}`~ -      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ -      dldir=$destdir/`dirname \$dlpath`~ -      test -d \$dldir || mkdir -p \$dldir~ -      $install_prog $dir/$dlname \$dldir/$dlname~ -      chmod a+x \$dldir/$dlname' -    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ -      dlpath=$dir/\$dldll~ -       $rm \$dlpath' -    shlibpath_overrides_runpath=yes - -    case $host_os in -    cygwin*) -      # Cygwin DLLs use 'cyg' prefix rather than 'lib' -      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' -      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" -      ;; -    mingw*) -      # MinGW DLLs use traditional 'lib' prefix -      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' -      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` -      if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then -        # It is most probably a Windows format PATH printed by -        # mingw gcc, but we are running on Cygwin. Gcc prints its search -        # path with ; separators, and with drive letters. We can handle the -        # drive letters (cygwin fileutils understands them), so leave them, -        # especially as we might pass files found there to a mingw objdump, -        # which wouldn't understand a cygwinified path. Ahh. -        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` -      else -        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"` -      fi -      ;; -    pw32*) -      # pw32 DLLs use 'pw' prefix rather than 'lib' -      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' -      ;; -    esac -    ;; - -  *) -    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' -    ;; -  esac -  dynamic_linker='Win32 ld.exe' -  # FIXME: first we should search . and the directory the executable is in -  shlibpath_var=PATH -  ;; - -darwin* | rhapsody*) -  dynamic_linker="$host_os dyld" -  version_type=darwin -  need_lib_prefix=no -  need_version=no -  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' -  soname_spec='${libname}${release}${major}$shared_ext' -  shlibpath_overrides_runpath=yes -  shlibpath_var=DYLD_LIBRARY_PATH -  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' -  m4_if([$1], [],[ -  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])  -  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' -  ;; - -dgux*) -  version_type=linux -  need_lib_prefix=no -  need_version=no -  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' -  soname_spec='${libname}${release}${shared_ext}$major' -  shlibpath_var=LD_LIBRARY_PATH -  ;; - -freebsd1*) -  dynamic_linker=no -  ;; - -freebsd* | dragonfly*) -  # DragonFly does not have aout.  When/if they implement a new -  # versioning mechanism, adjust this. -  if test -x /usr/bin/objformat; then -    objformat=`/usr/bin/objformat` -  else -    case $host_os in -    freebsd[[123]]*) objformat=aout ;; -    *) objformat=elf ;; -    esac -  fi -  version_type=freebsd-$objformat -  case $version_type in -    freebsd-elf*) -      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' -      need_version=no -      need_lib_prefix=no -      ;; -    freebsd-*) -      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' -      need_version=yes -      ;; -  esac -  shlibpath_var=LD_LIBRARY_PATH -  case $host_os in -  freebsd2*) -    shlibpath_overrides_runpath=yes -    ;; -  freebsd3.[[01]]* | freebsdelf3.[[01]]*) -    shlibpath_overrides_runpath=yes -    hardcode_into_libs=yes -    ;; -  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ -  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) -    shlibpath_overrides_runpath=no -    hardcode_into_libs=yes -    ;; -  *) # from 4.6 on, and DragonFly -    shlibpath_overrides_runpath=yes -    hardcode_into_libs=yes -    ;; -  esac -  ;; - -gnu*) -  version_type=linux -  need_lib_prefix=no -  need_version=no -  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' -  soname_spec='${libname}${release}${shared_ext}$major' -  shlibpath_var=LD_LIBRARY_PATH -  hardcode_into_libs=yes -  ;; - -hpux9* | hpux10* | hpux11*) -  # Give a soname corresponding to the major version so that dld.sl refuses to -  # link against other versions. -  version_type=sunos -  need_lib_prefix=no -  need_version=no -  case $host_cpu in -  ia64*) -    shrext_cmds='.so' -    hardcode_into_libs=yes -    dynamic_linker="$host_os dld.so" -    shlibpath_var=LD_LIBRARY_PATH -    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. -    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -    soname_spec='${libname}${release}${shared_ext}$major' -    if test "X$HPUX_IA64_MODE" = X32; then -      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" -    else -      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" -    fi -    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec -    ;; -   hppa*64*) -     shrext_cmds='.sl' -     hardcode_into_libs=yes -     dynamic_linker="$host_os dld.sl" -     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH -     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. -     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -     soname_spec='${libname}${release}${shared_ext}$major' -     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" -     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec -     ;; -   *) -    shrext_cmds='.sl' -    dynamic_linker="$host_os dld.sl" -    shlibpath_var=SHLIB_PATH -    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH -    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -    soname_spec='${libname}${release}${shared_ext}$major' -    ;; -  esac -  # HP-UX runs *really* slowly unless shared libraries are mode 555. -  postinstall_cmds='chmod 555 $lib' -  ;; - -interix[[3-9]]*) -  version_type=linux -  need_lib_prefix=no -  need_version=no -  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' -  soname_spec='${libname}${release}${shared_ext}$major' -  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' -  shlibpath_var=LD_LIBRARY_PATH -  shlibpath_overrides_runpath=no -  hardcode_into_libs=yes -  ;; - -irix5* | irix6* | nonstopux*) -  case $host_os in -    nonstopux*) version_type=nonstopux ;; -    *) -	if test "$lt_cv_prog_gnu_ld" = yes; then -		version_type=linux -	else -		version_type=irix -	fi ;; -  esac -  need_lib_prefix=no -  need_version=no -  soname_spec='${libname}${release}${shared_ext}$major' -  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' -  case $host_os in -  irix5* | nonstopux*) -    libsuff= shlibsuff= -    ;; -  *) -    case $LD in # libtool.m4 will add one of these switches to LD -    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") -      libsuff= shlibsuff= libmagic=32-bit;; -    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") -      libsuff=32 shlibsuff=N32 libmagic=N32;; -    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") -      libsuff=64 shlibsuff=64 libmagic=64-bit;; -    *) libsuff= shlibsuff= libmagic=never-match;; -    esac -    ;; -  esac -  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH -  shlibpath_overrides_runpath=no -  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" -  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" -  hardcode_into_libs=yes -  ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) -  dynamic_linker=no -  ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) -  version_type=linux -  need_lib_prefix=no -  need_version=no -  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -  soname_spec='${libname}${release}${shared_ext}$major' -  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' -  shlibpath_var=LD_LIBRARY_PATH -  shlibpath_overrides_runpath=no -  # This implies no fast_install, which is unacceptable. -  # Some rework will be needed to allow for fast_install -  # before this can be enabled. -  hardcode_into_libs=yes - -  # Append ld.so.conf contents to the search path -  if test -f /etc/ld.so.conf; then -    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ 	]*hwcap[ 	]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` -    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" -  fi - -  # We used to test for /lib/ld.so.1 and disable shared libraries on -  # powerpc, because MkLinux only supported shared libraries with the -  # GNU dynamic linker.  Since this was broken with cross compilers, -  # most powerpc-linux boxes support dynamic linking these days and -  # people can always --disable-shared, the test was removed, and we -  # assume the GNU/Linux dynamic linker is in use. -  dynamic_linker='GNU/Linux ld.so' -  ;; - -netbsd*) -  version_type=sunos -  need_lib_prefix=no -  need_version=no -  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then -    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' -    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' -    dynamic_linker='NetBSD (a.out) ld.so' -  else -    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' -    soname_spec='${libname}${release}${shared_ext}$major' -    dynamic_linker='NetBSD ld.elf_so' -  fi -  shlibpath_var=LD_LIBRARY_PATH -  shlibpath_overrides_runpath=yes -  hardcode_into_libs=yes -  ;; - -newsos6) -  version_type=linux -  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -  shlibpath_var=LD_LIBRARY_PATH -  shlibpath_overrides_runpath=yes -  ;; - -nto-qnx*) -  version_type=linux -  need_lib_prefix=no -  need_version=no -  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -  soname_spec='${libname}${release}${shared_ext}$major' -  shlibpath_var=LD_LIBRARY_PATH -  shlibpath_overrides_runpath=yes -  ;; - -openbsd*) -  version_type=sunos -  sys_lib_dlsearch_path_spec="/usr/lib" -  need_lib_prefix=no -  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. -  case $host_os in -    openbsd3.3 | openbsd3.3.*) need_version=yes ;; -    *)                         need_version=no  ;; -  esac -  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' -  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' -  shlibpath_var=LD_LIBRARY_PATH -  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then -    case $host_os in -      openbsd2.[[89]] | openbsd2.[[89]].*) -	shlibpath_overrides_runpath=no -	;; -      *) -	shlibpath_overrides_runpath=yes -	;; -      esac -  else -    shlibpath_overrides_runpath=yes -  fi -  ;; - -os2*) -  libname_spec='$name' -  shrext_cmds=".dll" -  need_lib_prefix=no -  library_names_spec='$libname${shared_ext} $libname.a' -  dynamic_linker='OS/2 ld.exe' -  shlibpath_var=LIBPATH -  ;; - -osf3* | osf4* | osf5*) -  version_type=osf -  need_lib_prefix=no -  need_version=no -  soname_spec='${libname}${release}${shared_ext}$major' -  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -  shlibpath_var=LD_LIBRARY_PATH -  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" -  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" -  ;; - -rdos*) -  dynamic_linker=no -  ;; - -solaris*) -  version_type=linux -  need_lib_prefix=no -  need_version=no -  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -  soname_spec='${libname}${release}${shared_ext}$major' -  shlibpath_var=LD_LIBRARY_PATH -  shlibpath_overrides_runpath=yes -  hardcode_into_libs=yes -  # ldd complains unless libraries are executable -  postinstall_cmds='chmod +x $lib' -  ;; - -sunos4*) -  version_type=sunos -  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' -  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' -  shlibpath_var=LD_LIBRARY_PATH -  shlibpath_overrides_runpath=yes -  if test "$with_gnu_ld" = yes; then -    need_lib_prefix=no -  fi -  need_version=yes -  ;; - -sysv4 | sysv4.3*) -  version_type=linux -  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -  soname_spec='${libname}${release}${shared_ext}$major' -  shlibpath_var=LD_LIBRARY_PATH -  case $host_vendor in -    sni) -      shlibpath_overrides_runpath=no -      need_lib_prefix=no -      export_dynamic_flag_spec='${wl}-Blargedynsym' -      runpath_var=LD_RUN_PATH -      ;; -    siemens) -      need_lib_prefix=no -      ;; -    motorola) -      need_lib_prefix=no -      need_version=no -      shlibpath_overrides_runpath=no -      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' -      ;; -  esac -  ;; - -sysv4*MP*) -  if test -d /usr/nec ;then -    version_type=linux -    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' -    soname_spec='$libname${shared_ext}.$major' -    shlibpath_var=LD_LIBRARY_PATH -  fi -  ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) -  version_type=freebsd-elf -  need_lib_prefix=no -  need_version=no -  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' -  soname_spec='${libname}${release}${shared_ext}$major' -  shlibpath_var=LD_LIBRARY_PATH -  hardcode_into_libs=yes -  if test "$with_gnu_ld" = yes; then -    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' -    shlibpath_overrides_runpath=no -  else -    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' -    shlibpath_overrides_runpath=yes -    case $host_os in -      sco3.2v5*) -        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" -	;; -    esac -  fi -  sys_lib_dlsearch_path_spec='/usr/lib' -  ;; - -uts4*) -  version_type=linux -  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -  soname_spec='${libname}${release}${shared_ext}$major' -  shlibpath_var=LD_LIBRARY_PATH -  ;; - -*) -  dynamic_linker=no -  ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then -  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi -])# AC_LIBTOOL_SYS_DYNAMIC_LINKER - - -# _LT_AC_TAGCONFIG -# ---------------- -AC_DEFUN([_LT_AC_TAGCONFIG], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_ARG_WITH([tags], -    [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], -        [include additional configurations @<:@automatic@:>@])], -    [tagnames="$withval"]) - -if test -f "$ltmain" && test -n "$tagnames"; then -  if test ! -f "${ofile}"; then -    AC_MSG_WARN([output file `$ofile' does not exist]) -  fi - -  if test -z "$LTCC"; then -    eval "`$SHELL ${ofile} --config | grep '^LTCC='`" -    if test -z "$LTCC"; then -      AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) -    else -      AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) -    fi -  fi -  if test -z "$LTCFLAGS"; then -    eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" -  fi - -  # Extract list of available tagged configurations in $ofile. -  # Note that this assumes the entire list is on one line. -  available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` - -  lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," -  for tagname in $tagnames; do -    IFS="$lt_save_ifs" -    # Check whether tagname contains only valid characters -    case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in -    "") ;; -    *)  AC_MSG_ERROR([invalid tag name: $tagname]) -	;; -    esac - -    if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null -    then -      AC_MSG_ERROR([tag name \"$tagname\" already exists]) -    fi - -    # Update the list of available tags. -    if test -n "$tagname"; then -      echo appending configuration tag \"$tagname\" to $ofile - -      case $tagname in -      RC) -	AC_LIBTOOL_LANG_RC_CONFIG -	;; - -      *) -	AC_MSG_ERROR([Unsupported tag name: $tagname]) -	;; -      esac - -      # Append the new tag name to the list of available tags. -      if test -n "$tagname" ; then -      available_tags="$available_tags $tagname" -    fi -    fi -  done -  IFS="$lt_save_ifs" - -  # Now substitute the updated list of available tags. -  if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then -    mv "${ofile}T" "$ofile" -    chmod +x "$ofile" -  else -    rm -f "${ofile}T" -    AC_MSG_ERROR([unable to update list of available tagged configurations.]) -  fi -fi -])# _LT_AC_TAGCONFIG - - -# AC_LIBTOOL_DLOPEN -# ----------------- -# enable checks for dlopen support -AC_DEFUN([AC_LIBTOOL_DLOPEN], - [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) -])# AC_LIBTOOL_DLOPEN - - -# AC_LIBTOOL_WIN32_DLL -# -------------------- -# declare package support for building win32 DLLs -AC_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) -])# AC_LIBTOOL_WIN32_DLL - - -# AC_ENABLE_SHARED([DEFAULT]) -# --------------------------- -# implement the --enable-shared flag -# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_SHARED], -[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([shared], -    [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], -	[build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], -    [p=${PACKAGE-default} -    case $enableval in -    yes) enable_shared=yes ;; -    no) enable_shared=no ;; -    *) -      enable_shared=no -      # Look at the argument we got.  We use all the common list separators. -      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," -      for pkg in $enableval; do -	IFS="$lt_save_ifs" -	if test "X$pkg" = "X$p"; then -	  enable_shared=yes -	fi -      done -      IFS="$lt_save_ifs" -      ;; -    esac], -    [enable_shared=]AC_ENABLE_SHARED_DEFAULT) -])# AC_ENABLE_SHARED - - -# AC_DISABLE_SHARED -# ----------------- -# set the default shared flag to --disable-shared -AC_DEFUN([AC_DISABLE_SHARED], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_SHARED(no) -])# AC_DISABLE_SHARED - - -# AC_ENABLE_STATIC([DEFAULT]) -# --------------------------- -# implement the --enable-static flag -# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_STATIC], -[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([static], -    [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], -	[build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], -    [p=${PACKAGE-default} -    case $enableval in -    yes) enable_static=yes ;; -    no) enable_static=no ;; -    *) -     enable_static=no -      # Look at the argument we got.  We use all the common list separators. -      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," -      for pkg in $enableval; do -	IFS="$lt_save_ifs" -	if test "X$pkg" = "X$p"; then -	  enable_static=yes -	fi -      done -      IFS="$lt_save_ifs" -      ;; -    esac], -    [enable_static=]AC_ENABLE_STATIC_DEFAULT) -])# AC_ENABLE_STATIC - - -# AC_DISABLE_STATIC -# ----------------- -# set the default static flag to --disable-static -AC_DEFUN([AC_DISABLE_STATIC], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_STATIC(no) -])# AC_DISABLE_STATIC - - -# AC_ENABLE_FAST_INSTALL([DEFAULT]) -# --------------------------------- -# implement the --enable-fast-install flag -# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_FAST_INSTALL], -[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([fast-install], -    [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], -    [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], -    [p=${PACKAGE-default} -    case $enableval in -    yes) enable_fast_install=yes ;; -    no) enable_fast_install=no ;; -    *) -      enable_fast_install=no -      # Look at the argument we got.  We use all the common list separators. -      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," -      for pkg in $enableval; do -	IFS="$lt_save_ifs" -	if test "X$pkg" = "X$p"; then -	  enable_fast_install=yes -	fi -      done -      IFS="$lt_save_ifs" -      ;; -    esac], -    [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) -])# AC_ENABLE_FAST_INSTALL - - -# AC_DISABLE_FAST_INSTALL -# ----------------------- -# set the default to --disable-fast-install -AC_DEFUN([AC_DISABLE_FAST_INSTALL], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_FAST_INSTALL(no) -])# AC_DISABLE_FAST_INSTALL - - -# AC_LIBTOOL_PICMODE([MODE]) -# -------------------------- -# implement the --with-pic flag -# MODE is either `yes' or `no'.  If omitted, it defaults to `both'. -AC_DEFUN([AC_LIBTOOL_PICMODE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -pic_mode=ifelse($#,1,$1,default) -])# AC_LIBTOOL_PICMODE - - -# AC_PROG_EGREP -# ------------- -# This is predefined starting with Autoconf 2.54, so this conditional -# definition can be removed once we require Autoconf 2.54 or later. -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], -[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], -   [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 -    then ac_cv_prog_egrep='grep -E' -    else ac_cv_prog_egrep='egrep' -    fi]) - EGREP=$ac_cv_prog_egrep - AC_SUBST([EGREP]) -])]) - - -# AC_PATH_TOOL_PREFIX -# ------------------- -# find a file program which can recognize shared library -AC_DEFUN([AC_PATH_TOOL_PREFIX], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] |  ?:[\\/]*]) -  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. -  ;; -*) -  lt_save_MAGIC_CMD="$MAGIC_CMD" -  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word.  This closes a longstanding sh security hole. -  ac_dummy="ifelse([$2], , $PATH, [$2])" -  for ac_dir in $ac_dummy; do -    IFS="$lt_save_ifs" -    test -z "$ac_dir" && ac_dir=. -    if test -f $ac_dir/$1; then -      lt_cv_path_MAGIC_CMD="$ac_dir/$1" -      if test -n "$file_magic_test_file"; then -	case $deplibs_check_method in -	"file_magic "*) -	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` -	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | -	    $EGREP "$file_magic_regex" > /dev/null; then -	    : -	  else -	    cat <<EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such.  This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem.  Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -EOF -	  fi ;; -	esac -      fi -      break -    fi -  done -  IFS="$lt_save_ifs" -  MAGIC_CMD="$lt_save_MAGIC_CMD" -  ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then -  AC_MSG_RESULT($MAGIC_CMD) -else -  AC_MSG_RESULT(no) -fi -])# AC_PATH_TOOL_PREFIX - - -# AC_PATH_MAGIC -# ------------- -# find a file program which can recognize a shared library -AC_DEFUN([AC_PATH_MAGIC], -[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then -  if test -n "$ac_tool_prefix"; then -    AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) -  else -    MAGIC_CMD=: -  fi -fi -])# AC_PATH_MAGIC - - -# AC_PROG_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([AC_PROG_LD], -[AC_ARG_WITH([gnu-ld], -    [AC_HELP_STRING([--with-gnu-ld], -	[assume the C compiler uses GNU ld @<:@default=no@:>@])], -    [test "$withval" = no || with_gnu_ld=yes], -    [with_gnu_ld=no]) -AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -ac_prog=ld -if test "$GCC" = yes; then -  # Check if gcc -print-prog-name=ld gives a path. -  AC_MSG_CHECKING([for ld used by $CC]) -  case $host in -  *-*-mingw*) -    # gcc leaves a trailing carriage return which upsets mingw -    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; -  *) -    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; -  esac -  case $ac_prog in -    # Accept absolute paths. -    [[\\/]]* | ?:[[\\/]]*) -      re_direlt='/[[^/]][[^/]]*/\.\./' -      # Canonicalize the pathname of ld -      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` -      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do -	ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` -      done -      test -z "$LD" && LD="$ac_prog" -      ;; -  "") -    # If it fails, then pretend we aren't using GCC. -    ac_prog=ld -    ;; -  *) -    # If it is relative, then search for the first ld in PATH. -    with_gnu_ld=unknown -    ;; -  esac -elif test "$with_gnu_ld" = yes; then -  AC_MSG_CHECKING([for GNU ld]) -else -  AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then -  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -  for ac_dir in $PATH; do -    IFS="$lt_save_ifs" -    test -z "$ac_dir" && ac_dir=. -    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then -      lt_cv_path_LD="$ac_dir/$ac_prog" -      # Check to see if the program is GNU ld.  I'd rather use --version, -      # but apparently some variants of GNU ld only accept -v. -      # Break only if it was the GNU/non-GNU ld that we prefer. -      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in -      *GNU* | *'with BFD'*) -	test "$with_gnu_ld" != no && break -	;; -      *) -	test "$with_gnu_ld" != yes && break -	;; -      esac -    fi -  done -  IFS="$lt_save_ifs" -else -  lt_cv_path_LD="$LD" # Let the user override the test with a path. -fi]) -LD="$lt_cv_path_LD" -if test -n "$LD"; then -  AC_MSG_RESULT($LD) -else -  AC_MSG_RESULT(no) -fi -test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) -AC_PROG_LD_GNU -])# AC_PROG_LD - - -# AC_PROG_LD_GNU -# -------------- -AC_DEFUN([AC_PROG_LD_GNU], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, -[# I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 </dev/null` in -*GNU* | *'with BFD'*) -  lt_cv_prog_gnu_ld=yes -  ;; -*) -  lt_cv_prog_gnu_ld=no -  ;; -esac]) -with_gnu_ld=$lt_cv_prog_gnu_ld -])# AC_PROG_LD_GNU - - -# AC_PROG_LD_RELOAD_FLAG -# ---------------------- -# find reload flag for linker -#   -- PORTME Some linkers may need a different reload flag. -AC_DEFUN([AC_PROG_LD_RELOAD_FLAG], -[AC_CACHE_CHECK([for $LD option to reload object files], -  lt_cv_ld_reload_flag, -  [lt_cv_ld_reload_flag='-r']) -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in -  darwin*) -    if test "$GCC" = yes; then -      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' -    else -      reload_cmds='$LD$reload_flag -o $output$reload_objs' -    fi -    ;; -esac -])# AC_PROG_LD_RELOAD_FLAG - - -# AC_DEPLIBS_CHECK_METHOD -# ----------------------- -# how to check for library dependencies -#  -- PORTME fill in with the dynamic library characteristics -AC_DEFUN([AC_DEPLIBS_CHECK_METHOD], -[AC_CACHE_CHECK([how to recognize dependent libraries], -lt_cv_deplibs_check_method, -[lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix4* | aix5*) -  lt_cv_deplibs_check_method=pass_all -  ;; - -beos*) -  lt_cv_deplibs_check_method=pass_all -  ;; - -bsdi[[45]]*) -  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' -  lt_cv_file_magic_cmd='/usr/bin/file -L' -  lt_cv_file_magic_test_file=/shlib/libc.so -  ;; - -cygwin*) -  # func_win32_libid is a shell function defined in ltmain.sh -  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' -  lt_cv_file_magic_cmd='func_win32_libid' -  ;; - -mingw* | pw32*) -  # Base MSYS/MinGW do not provide the 'file' command needed by -  # func_win32_libid shell function, so use a weaker test based on 'objdump', -  # unless we find 'file', for example because we are cross-compiling. -  if ( file / ) >/dev/null 2>&1; then -    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' -    lt_cv_file_magic_cmd='func_win32_libid' -  else -    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' -    lt_cv_file_magic_cmd='$OBJDUMP -f' -  fi -  ;; - -darwin* | rhapsody*) -  lt_cv_deplibs_check_method=pass_all -  ;; - -freebsd* | dragonfly*) -  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then -    case $host_cpu in -    i*86 ) -      # Not sure whether the presence of OpenBSD here was a mistake. -      # Let's accept both of them until this is cleared up. -      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' -      lt_cv_file_magic_cmd=/usr/bin/file -      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` -      ;; -    esac -  else -    lt_cv_deplibs_check_method=pass_all -  fi -  ;; - -gnu*) -  lt_cv_deplibs_check_method=pass_all -  ;; - -hpux10.20* | hpux11*) -  lt_cv_file_magic_cmd=/usr/bin/file -  case $host_cpu in -  ia64*) -    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' -    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so -    ;; -  hppa*64*) -    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] -    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl -    ;; -  *) -    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' -    lt_cv_file_magic_test_file=/usr/lib/libc.sl -    ;; -  esac -  ;; - -interix[[3-9]]*) -  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here -  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' -  ;; - -irix5* | irix6* | nonstopux*) -  case $LD in -  *-32|*"-32 ") libmagic=32-bit;; -  *-n32|*"-n32 ") libmagic=N32;; -  *-64|*"-64 ") libmagic=64-bit;; -  *) libmagic=never-match;; -  esac -  lt_cv_deplibs_check_method=pass_all -  ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) -  lt_cv_deplibs_check_method=pass_all -  ;; - -netbsd*) -  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then -    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' -  else -    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' -  fi -  ;; - -newos6*) -  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' -  lt_cv_file_magic_cmd=/usr/bin/file -  lt_cv_file_magic_test_file=/usr/lib/libnls.so -  ;; - -nto-qnx*) -  lt_cv_deplibs_check_method=unknown -  ;; - -openbsd*) -  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then -    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' -  else -    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' -  fi -  ;; - -osf3* | osf4* | osf5*) -  lt_cv_deplibs_check_method=pass_all -  ;; - -rdos*) -  lt_cv_deplibs_check_method=pass_all -  ;; - -solaris*) -  lt_cv_deplibs_check_method=pass_all -  ;; - -sysv4 | sysv4.3*) -  case $host_vendor in -  motorola) -    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' -    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` -    ;; -  ncr) -    lt_cv_deplibs_check_method=pass_all -    ;; -  sequent) -    lt_cv_file_magic_cmd='/bin/file' -    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' -    ;; -  sni) -    lt_cv_file_magic_cmd='/bin/file' -    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" -    lt_cv_file_magic_test_file=/lib/libc.so -    ;; -  siemens) -    lt_cv_deplibs_check_method=pass_all -    ;; -  pc) -    lt_cv_deplibs_check_method=pass_all -    ;; -  esac -  ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) -  lt_cv_deplibs_check_method=pass_all -  ;; -esac -]) -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown -])# AC_DEPLIBS_CHECK_METHOD - - -# AC_PROG_NM -# ---------- -# find the pathname to a BSD-compatible name lister -AC_DEFUN([AC_PROG_NM], -[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, -[if test -n "$NM"; then -  # Let the user override the test. -  lt_cv_path_NM="$NM" -else -  lt_nm_to_check="${ac_tool_prefix}nm" -  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then -    lt_nm_to_check="$lt_nm_to_check nm" -  fi -  for lt_tmp_nm in $lt_nm_to_check; do -    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do -      IFS="$lt_save_ifs" -      test -z "$ac_dir" && ac_dir=. -      tmp_nm="$ac_dir/$lt_tmp_nm" -      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then -	# Check to see if the nm accepts a BSD-compat flag. -	# Adding the `sed 1q' prevents false positives on HP-UX, which says: -	#   nm: unknown option "B" ignored -	# Tru64's nm complains that /dev/null is an invalid object file -	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in -	*/dev/null* | *'Invalid file or object type'*) -	  lt_cv_path_NM="$tmp_nm -B" -	  break -	  ;; -	*) -	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in -	  */dev/null*) -	    lt_cv_path_NM="$tmp_nm -p" -	    break -	    ;; -	  *) -	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but -	    continue # so that we can try to find one that supports BSD flags -	    ;; -	  esac -	  ;; -	esac -      fi -    done -    IFS="$lt_save_ifs" -  done -  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm -fi]) -NM="$lt_cv_path_NM" -])# AC_PROG_NM - - -# AC_CHECK_LIBM -# ------------- -# check for math library -AC_DEFUN([AC_CHECK_LIBM], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) -  # These system don't have libm, or don't need it -  ;; -*-ncr-sysv4.3*) -  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") -  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") -  ;; -*) -  AC_CHECK_LIB(m, cos, LIBM="-lm") -  ;; -esac -])# AC_CHECK_LIBM - - -# AC_LIBLTDL_CONVENIENCE([DIRECTORY]) -# ----------------------------------- -# sets LIBLTDL to the link flags for the libltdl convenience library and -# LTDLINCL to the include flags for the libltdl header and adds -# --enable-ltdl-convenience to the configure arguments.  Note that -# AC_CONFIG_SUBDIRS is not called here.  If DIRECTORY is not provided, -# it is assumed to be `libltdl'.  LIBLTDL will be prefixed with -# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/' -# (note the single quotes!).  If your package is not flat and you're not -# using automake, define top_builddir and top_srcdir appropriately in -# the Makefiles. -AC_DEFUN([AC_LIBLTDL_CONVENIENCE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -  case $enable_ltdl_convenience in -  no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; -  "") enable_ltdl_convenience=yes -      ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; -  esac -  LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la -  LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) -  # For backwards non-gettext consistent compatibility... -  INCLTDL="$LTDLINCL" -])# AC_LIBLTDL_CONVENIENCE - - -# AC_LIBLTDL_INSTALLABLE([DIRECTORY]) -# ----------------------------------- -# sets LIBLTDL to the link flags for the libltdl installable library and -# LTDLINCL to the include flags for the libltdl header and adds -# --enable-ltdl-install to the configure arguments.  Note that -# AC_CONFIG_SUBDIRS is not called here.  If DIRECTORY is not provided, -# and an installed libltdl is not found, it is assumed to be `libltdl'. -# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with -# '${top_srcdir}/' (note the single quotes!).  If your package is not -# flat and you're not using automake, define top_builddir and top_srcdir -# appropriately in the Makefiles. -# In the future, this macro may have to be called after AC_PROG_LIBTOOL. -AC_DEFUN([AC_LIBLTDL_INSTALLABLE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -  AC_CHECK_LIB(ltdl, lt_dlinit, -  [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], -  [if test x"$enable_ltdl_install" = xno; then -     AC_MSG_WARN([libltdl not installed, but installation disabled]) -   else -     enable_ltdl_install=yes -   fi -  ]) -  if test x"$enable_ltdl_install" = x"yes"; then -    ac_configure_args="$ac_configure_args --enable-ltdl-install" -    LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la -    LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) -  else -    ac_configure_args="$ac_configure_args --enable-ltdl-install=no" -    LIBLTDL="-lltdl" -    LTDLINCL= -  fi -  # For backwards non-gettext consistent compatibility... -  INCLTDL="$LTDLINCL" -])# AC_LIBLTDL_INSTALLABLE - - -# AC_LIBTOOL_RC -# ------------- -# enable support for Windows resource files -AC_DEFUN([AC_LIBTOOL_RC], -[AC_REQUIRE([LT_AC_PROG_RC]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) -])# AC_LIBTOOL_RC - - -# AC_LIBTOOL_LANG_C_CONFIG -# ------------------------ -# Ensure that the configuration vars for the C compiler are -# suitably defined.  Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) -AC_DEFUN([_LT_AC_LANG_C_CONFIG], -[lt_save_CC="$CC" -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) -AC_LIBTOOL_SYS_LIB_STRIP -AC_LIBTOOL_DLOPEN_SELF - -# Report which library types will actually be built -AC_MSG_CHECKING([if libtool supports shared libraries]) -AC_MSG_RESULT([$can_build_shared]) - -AC_MSG_CHECKING([whether to build shared libraries]) -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) -  test "$enable_shared" = yes && enable_static=no -  if test -n "$RANLIB"; then -    archive_cmds="$archive_cmds~\$RANLIB \$lib" -    postinstall_cmds='$RANLIB $lib' -  fi -  ;; - -aix4* | aix5*) -  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then -    test "$enable_shared" = yes && enable_static=no -  fi -    ;; -esac -AC_MSG_RESULT([$enable_shared]) - -AC_MSG_CHECKING([whether to build static libraries]) -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -AC_MSG_RESULT([$enable_static]) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_POP -CC="$lt_save_CC" -])# AC_LIBTOOL_LANG_C_CONFIG - - -# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) -# ------------------------------------ -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library.  It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -ifelse([$1],[],[cat > conftest.$ac_ext <<EOF -int a; -void foo (void) { a = 0; } -EOF -]) -dnl Parse the compiler output and extract the necessary -dnl objects, libraries and library flags. -if AC_TRY_EVAL(ac_compile); then -  # Parse the compiler output and extract the necessary -  # objects, libraries and library flags. - -  # Sentinel used to keep track of whether or not we are before -  # the conftest object file. -  pre_test_object_deps_done=no - -  # The `*' in the case matches for architectures that use `case' in -  # $output_verbose_cmd can trigger glob expansion during the loop -  # eval without this substitution. -  output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` - -  for p in `eval $output_verbose_link_cmd`; do -    case $p in - -    -L* | -R* | -l*) -       # Some compilers place space between "-{L,R}" and the path. -       # Remove the space. -       if test $p = "-L" \ -	  || test $p = "-R"; then -	 prev=$p -	 continue -       else -	 prev= -       fi - -       if test "$pre_test_object_deps_done" = no; then -	 case $p in -	 -L* | -R*) -	   # Internal compiler library paths should come after those -	   # provided the user.  The postdeps already come after the -	   # user supplied libs so there is no need to process them. -	   if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then -	     _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" -	   else -	     _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" -	   fi -	   ;; -	 # The "-l" case would never come before the object being -	 # linked, so don't bother handling this case. -	 esac -       else -	 if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then -	   _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}" -	 else -	   _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}" -	 fi -       fi -       ;; - -    *.$objext) -       # This assumes that the test object file only shows up -       # once in the compiler output. -       if test "$p" = "conftest.$objext"; then -	 pre_test_object_deps_done=yes -	 continue -       fi - -       if test "$pre_test_object_deps_done" = no; then -	 if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then -	   _LT_AC_TAGVAR(predep_objects, $1)="$p" -	 else -	   _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p" -	 fi -       else -	 if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then -	   _LT_AC_TAGVAR(postdep_objects, $1)="$p" -	 else -	   _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p" -	 fi -       fi -       ;; - -    *) ;; # Ignore the rest. - -    esac -  done - -  # Clean up. -  rm -f a.out a.exe -else -  echo "libtool.m4: error: problem compiling $1 test program" -fi - -$rm -f confest.$objext - -case " $_LT_AC_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac -])# AC_LIBTOOL_POSTDEP_PREDEP - - -# AC_LIBTOOL_LANG_RC_CONFIG -# ------------------------- -# Ensure that the configuration vars for the Windows resource compiler are -# suitably defined.  Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)]) -AC_DEFUN([_LT_AC_LANG_RC_CONFIG], -[AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${RC-"windres"} -compiler=$CC -_LT_AC_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_RESTORE -CC="$lt_save_CC" -])# AC_LIBTOOL_LANG_RC_CONFIG - - -# AC_LIBTOOL_CONFIG([TAGNAME]) -# ---------------------------- -# If TAGNAME is not passed, then create an initial libtool script -# with a default configuration from the untagged config vars.  Otherwise -# add code to config.status for appending the configuration named by -# TAGNAME from the matching tagged config vars. -AC_DEFUN([AC_LIBTOOL_CONFIG], -[# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then -  # See if we are running on zsh, and set the options which allow our commands through -  # without removal of \ escapes. -  if test -n "${ZSH_VERSION+set}" ; then -    setopt NO_GLOB_SUBST -  fi -  # Now quote all the things that may contain metacharacters while being -  # careful not to overquote the AC_SUBSTed values.  We take copies of the -  # variables and quote the copies for generation of the libtool script. -  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ -    SED SHELL STRIP \ -    libname_spec library_names_spec soname_spec extract_expsyms_cmds \ -    old_striplib striplib file_magic_cmd finish_cmds finish_eval \ -    deplibs_check_method reload_flag reload_cmds need_locks \ -    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ -    lt_cv_sys_global_symbol_to_c_name_address \ -    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ -    old_postinstall_cmds old_postuninstall_cmds \ -    _LT_AC_TAGVAR(compiler, $1) \ -    _LT_AC_TAGVAR(CC, $1) \ -    _LT_AC_TAGVAR(LD, $1) \ -    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \ -    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \ -    _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \ -    _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \ -    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \ -    _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \ -    _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \ -    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \ -    _LT_AC_TAGVAR(old_archive_cmds, $1) \ -    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \ -    _LT_AC_TAGVAR(predep_objects, $1) \ -    _LT_AC_TAGVAR(postdep_objects, $1) \ -    _LT_AC_TAGVAR(predeps, $1) \ -    _LT_AC_TAGVAR(postdeps, $1) \ -    _LT_AC_TAGVAR(compiler_lib_search_path, $1) \ -    _LT_AC_TAGVAR(archive_cmds, $1) \ -    _LT_AC_TAGVAR(archive_expsym_cmds, $1) \ -    _LT_AC_TAGVAR(postinstall_cmds, $1) \ -    _LT_AC_TAGVAR(postuninstall_cmds, $1) \ -    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \ -    _LT_AC_TAGVAR(allow_undefined_flag, $1) \ -    _LT_AC_TAGVAR(no_undefined_flag, $1) \ -    _LT_AC_TAGVAR(export_symbols_cmds, $1) \ -    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \ -    _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \ -    _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \ -    _LT_AC_TAGVAR(hardcode_automatic, $1) \ -    _LT_AC_TAGVAR(module_cmds, $1) \ -    _LT_AC_TAGVAR(module_expsym_cmds, $1) \ -    _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \ -    _LT_AC_TAGVAR(fix_srcfile_path, $1) \ -    _LT_AC_TAGVAR(exclude_expsyms, $1) \ -    _LT_AC_TAGVAR(include_expsyms, $1); do - -    case $var in -    _LT_AC_TAGVAR(old_archive_cmds, $1) | \ -    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \ -    _LT_AC_TAGVAR(archive_cmds, $1) | \ -    _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \ -    _LT_AC_TAGVAR(module_cmds, $1) | \ -    _LT_AC_TAGVAR(module_expsym_cmds, $1) | \ -    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \ -    _LT_AC_TAGVAR(export_symbols_cmds, $1) | \ -    extract_expsyms_cmds | reload_cmds | finish_cmds | \ -    postinstall_cmds | postuninstall_cmds | \ -    old_postinstall_cmds | old_postuninstall_cmds | \ -    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) -      # Double-quote double-evaled strings. -      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" -      ;; -    *) -      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" -      ;; -    esac -  done - -  case $lt_echo in -  *'\[$]0 --fallback-echo"') -    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'` -    ;; -  esac - -ifelse([$1], [], -  [cfgfile="${ofile}T" -  trap "$rm \"$cfgfile\"; exit 1" 1 2 15 -  $rm -f "$cfgfile" -  AC_MSG_NOTICE([creating $ofile])], -  [cfgfile="$ofile"]) - -  cat <<__EOF__ >> "$cfgfile" -ifelse([$1], [], -[#! $SHELL - -# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 -# Free Software Foundation, Inc. -# -# This file is part of GNU Libtool: -# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 -# -# This program 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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 sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="$SED -e 1s/^X//" - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# The names of the tagged configurations supported by this script. -available_tags= - -# ### BEGIN LIBTOOL CONFIG], -[# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) - -# Is the compiler the GNU C compiler? -with_gcc=$_LT_AC_TAGVAR(GCC, $1) - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_[]_LT_AC_TAGVAR(LD, $1) - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# 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=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) - -# Commands used to build and install a shared archive. -archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) -archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) -module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) - -# The commands to list exported symbols. -export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) - -# Symbols that must always be exported. -include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) - -ifelse([$1],[], -[# ### END LIBTOOL CONFIG], -[# ### END LIBTOOL TAG CONFIG: $tagname]) - -__EOF__ - -ifelse([$1],[], [ -  case $host_os in -  aix3*) -    cat <<\EOF >> "$cfgfile" - -# AIX sometimes has problems with the GCC collect2 program.  For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then -  COLLECT_NAMES= -  export COLLECT_NAMES -fi -EOF -    ;; -  esac - -  # We use sed instead of cat because bash on DJGPP gets confused if -  # if finds mixed CR/LF and LF-only lines.  Since sed operates in -  # text mode, it properly converts lines to CR/LF.  This bash problem -  # is reportedly fixed, but why not run on old versions too? -  sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) - -  mv -f "$cfgfile" "$ofile" || \ -    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") -  chmod +x "$ofile" -]) -else -  # If there is no Makefile yet, we rely on a make rule to execute -  # `config.status --recheck' to rerun these tests and create the -  # libtool script then. -  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` -  if test -f "$ltmain_in"; then -    test -f Makefile && make "$ltmain" -  fi -fi -])# AC_LIBTOOL_CONFIG - - -# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------------------- -AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], -[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl - -_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then -  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - -  AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], -    lt_cv_prog_compiler_rtti_exceptions, -    [-fno-rtti -fno-exceptions], [], -    [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI - - -# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE -# --------------------------------- -AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], -[AC_REQUIRE([AC_CANONICAL_HOST]) -AC_REQUIRE([LT_AC_PROG_SED]) -AC_REQUIRE([AC_PROG_NM]) -AC_REQUIRE([AC_OBJEXT]) -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix.  What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Transform an extracted symbol line into a proper C declaration -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'" - -# Define system-specific variables. -case $host_os in -aix*) -  symcode='[[BCDT]]' -  ;; -cygwin* | mingw* | pw32*) -  symcode='[[ABCDGISTW]]' -  ;; -hpux*) # Its linker distinguishes data from code symbols -  if test "$host_cpu" = ia64; then -    symcode='[[ABCDEGRST]]' -  fi -  lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" -  lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'" -  ;; -linux* | k*bsd*-gnu) -  if test "$host_cpu" = ia64; then -    symcode='[[ABCDGIRSTW]]' -    lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" -    lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'" -  fi -  ;; -irix* | nonstopux*) -  symcode='[[BCDEGRST]]' -  ;; -osf*) -  symcode='[[BCDEGQRST]]' -  ;; -solaris*) -  symcode='[[BDRT]]' -  ;; -sco3.2v5*) -  symcode='[[DT]]' -  ;; -sysv4.2uw2*) -  symcode='[[DT]]' -  ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) -  symcode='[[ABDT]]' -  ;; -sysv4) -  symcode='[[DFNSTU]]' -  ;; -esac - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) -  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp -  ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) -  symcode='[[ABCDGIRSTW]]' ;; -esac - -# Try without a prefix undercore, then with it. -for ac_symprfx in "" "_"; do - -  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. -  symxfrm="\\1 $ac_symprfx\\2 \\2" - -  # Write the raw and C identifiers. -  lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ 	]]\($symcode$symcode*\)[[ 	]][[ 	]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - -  # Check to see that the pipe works correctly. -  pipe_works=no - -  rm -f conftest* -  cat > conftest.$ac_ext <<EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -EOF - -  if AC_TRY_EVAL(ac_compile); then -    # Now try to grab the symbols. -    nlist=conftest.nm -    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then -      # Try sorting and uniquifying the output. -      if sort "$nlist" | uniq > "$nlist"T; then -	mv -f "$nlist"T "$nlist" -      else -	rm -f "$nlist"T -      fi - -      # Make sure that we snagged all the symbols we need. -      if grep ' nm_test_var$' "$nlist" >/dev/null; then -	if grep ' nm_test_func$' "$nlist" >/dev/null; then -	  cat <<EOF > conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -EOF -	  # Now generate the symbol file. -	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' - -	  cat <<EOF >> conftest.$ac_ext -#if defined (__STDC__) && __STDC__ -# define lt_ptr_t void * -#else -# define lt_ptr_t char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -const struct { -  const char *name; -  lt_ptr_t address; -} -lt_preloaded_symbols[[]] = -{ -EOF -	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext -	  cat <<\EOF >> conftest.$ac_ext -  {0, (lt_ptr_t) 0} -}; - -#ifdef __cplusplus -} -#endif -EOF -	  # Now try linking the two files. -	  mv conftest.$ac_objext conftstm.$ac_objext -	  lt_save_LIBS="$LIBS" -	  lt_save_CFLAGS="$CFLAGS" -	  LIBS="conftstm.$ac_objext" -	  CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" -	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then -	    pipe_works=yes -	  fi -	  LIBS="$lt_save_LIBS" -	  CFLAGS="$lt_save_CFLAGS" -	else -	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD -	fi -      else -	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD -      fi -    else -      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD -    fi -  else -    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD -    cat conftest.$ac_ext >&5 -  fi -  rm -f conftest* conftst* - -  # Do not use the global_symbol_pipe unless it works. -  if test "$pipe_works" = yes; then -    break -  else -    lt_cv_sys_global_symbol_pipe= -  fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then -  lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then -  AC_MSG_RESULT(failed) -else -  AC_MSG_RESULT(ok) -fi -]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE - - -# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) -# --------------------------------------- -AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], -[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_AC_TAGVAR(lt_prog_compiler_static, $1)= - -AC_MSG_CHECKING([for $compiler option to produce PIC]) -  if test "$GCC" = yes; then -    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' -    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - -    case $host_os in -      aix*) -      # All AIX code is PIC. -      if test "$host_cpu" = ia64; then -	# AIX 5 now supports IA64 processor -	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' -      fi -      ;; - -    amigaos*) -      # FIXME: we need at least 68020 code to build shared libraries, but -      # adding the `-m68020' flag to GCC prevents building anything better, -      # like `-m68040'. -      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' -      ;; - -    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) -      # PIC is the default for these OSes. -      ;; - -    mingw* | cygwin* | pw32* | os2*) -      # This hack is so that the source file can tell whether it is being -      # built for inclusion in a dll (and should export symbols for example). -      # Although the cygwin gcc ignores -fPIC, still need this for old-style -      # (--disable-auto-import) libraries -      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' -      ;; - -    darwin* | rhapsody*) -      # PIC is the default on this platform -      # Common symbols not allowed in MH_DYLIB files -      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' -      ;; - -    interix[[3-9]]*) -      # Interix 3.x gcc -fpic/-fPIC options generate broken code. -      # Instead, we relocate shared libraries at runtime. -      ;; - -    msdosdjgpp*) -      # Just because we use GCC doesn't mean we suddenly get shared libraries -      # on systems that don't support them. -      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no -      enable_shared=no -      ;; - -    sysv4*MP*) -      if test -d /usr/nec; then -	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic -      fi -      ;; - -    hpux*) -      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but -      # not for PA HP-UX. -      case $host_cpu in -      hppa*64*|ia64*) -	# +Z the default -	;; -      *) -	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' -	;; -      esac -      ;; - -    *) -      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' -      ;; -    esac -  else -    # PORTME Check for flag to pass linker flags through the system compiler. -    case $host_os in -    aix*) -      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' -      if test "$host_cpu" = ia64; then -	# AIX 5 now supports IA64 processor -	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' -      else -	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' -      fi -      ;; -      darwin*) -        # PIC is the default on this platform -        # Common symbols not allowed in MH_DYLIB files -       case $cc_basename in -         xlc*) -         _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' -         _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' -         ;; -       esac -       ;; - -    mingw* | cygwin* | pw32* | os2*) -      # This hack is so that the source file can tell whether it is being -      # built for inclusion in a dll (and should export symbols for example). -      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' -      ;; - -    hpux9* | hpux10* | hpux11*) -      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' -      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but -      # not for PA HP-UX. -      case $host_cpu in -      hppa*64*|ia64*) -	# +Z the default -	;; -      *) -	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' -	;; -      esac -      # Is there a better lt_prog_compiler_static that works with the bundled CC? -      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' -      ;; - -    irix5* | irix6* | nonstopux*) -      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' -      # PIC (with -KPIC) is the default. -      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' -      ;; - -    newsos6) -      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' -      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' -      ;; - -    linux* | k*bsd*-gnu) -      case $cc_basename in -      icc* | ecc*) -	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' -	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' -	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' -        ;; -      pgcc* | pgf77* | pgf90* | pgf95*) -        # Portland Group compilers (*not* the Pentium gcc compiler, -	# which looks to be a dead project) -	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' -	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' -	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' -        ;; -      ccc*) -        _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' -        # All Alpha code is PIC. -        _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' -        ;; -      *) -        case `$CC -V 2>&1 | sed 5q` in -	*Sun\ C*) -	  # Sun C 5.9 -	  _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' -	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' -	  _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' -	  ;; -	*Sun\ F*) -	  # Sun Fortran 8.3 passes all unrecognized flags to the linker -	  _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' -	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' -	  _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='' -	  ;; -	esac -	;; -      esac -      ;; - -    osf3* | osf4* | osf5*) -      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' -      # All OSF/1 code is PIC. -      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' -      ;; - -    rdos*) -      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' -      ;; - -    solaris*) -      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' -      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' -      case $cc_basename in -      f77* | f90* | f95*) -	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; -      *) -	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; -      esac -      ;; - -    sunos4*) -      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' -      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' -      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' -      ;; - -    sysv4 | sysv4.2uw2* | sysv4.3*) -      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' -      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' -      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' -      ;; - -    sysv4*MP*) -      if test -d /usr/nec ;then -	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' -	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' -      fi -      ;; - -    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) -      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' -      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' -      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' -      ;; - -    unicos*) -      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' -      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no -      ;; - -    uts4*) -      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' -      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' -      ;; - -    *) -      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no -      ;; -    esac -  fi -AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then -  AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], -    _LT_AC_TAGVAR(lt_cv_prog_compiler_pic_works, $1), -    [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC])], [], -    [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in -     "" | " "*) ;; -     *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; -     esac], -    [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= -     _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -case $host_os in -  # For platforms which do not support PIC, -DPIC is meaningless: -  *djgpp*) -    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= -    ;; -  *) -    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC])" -    ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\" -AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], -  _LT_AC_TAGVAR(lt_cv_prog_compiler_static_works, $1), -  $lt_tmp_static_flag, -  [], -  [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) -]) - - -# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) -# ------------------------------------ -# See if the linker supports building shared libraries. -AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -  runpath_var= -  _LT_AC_TAGVAR(allow_undefined_flag, $1)= -  _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no -  _LT_AC_TAGVAR(archive_cmds, $1)= -  _LT_AC_TAGVAR(archive_expsym_cmds, $1)= -  _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= -  _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= -  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= -  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= -  _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= -  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= -  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= -  _LT_AC_TAGVAR(hardcode_direct, $1)=no -  _LT_AC_TAGVAR(hardcode_minus_L, $1)=no -  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -  _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown -  _LT_AC_TAGVAR(hardcode_automatic, $1)=no -  _LT_AC_TAGVAR(module_cmds, $1)= -  _LT_AC_TAGVAR(module_expsym_cmds, $1)= -  _LT_AC_TAGVAR(always_export_symbols, $1)=no -  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' -  # include_expsyms should be a list of space-separated symbols to be *always* -  # included in the symbol list -  _LT_AC_TAGVAR(include_expsyms, $1)= -  # exclude_expsyms can be an extended regexp of symbols to exclude -  # it will be wrapped by ` (' and `)$', so one must not match beginning or -  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', -  # as well as any symbol that contains `d'. -  _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" -  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out -  # platforms (ab)use it in PIC code, but their linkers get confused if -  # the symbol is explicitly referenced.  Since portable code cannot -  # rely on this symbol name, it's probably fine to never include it in -  # preloaded symbol tables. -  extract_expsyms_cmds= -  # Just being paranoid about ensuring that cc_basename is set. -  _LT_CC_BASENAME([$compiler]) -  case $host_os in -  cygwin* | mingw* | pw32*) -    # FIXME: the MSVC++ port hasn't been tested in a loooong time -    # When not using gcc, we currently assume that we are using -    # Microsoft Visual C++. -    if test "$GCC" != yes; then -      with_gnu_ld=no -    fi -    ;; -  interix*) -    # we just hope/assume this is gcc and not c89 (= MSVC++) -    with_gnu_ld=yes -    ;; -  openbsd*) -    with_gnu_ld=no -    ;; -  esac - -  _LT_AC_TAGVAR(ld_shlibs, $1)=yes -  if test "$with_gnu_ld" = yes; then -    # If archive_cmds runs LD, not CC, wlarc should be empty -    wlarc='${wl}' - -    # Set some defaults for GNU ld with shared library support. These -    # are reset later if shared libraries are not supported. Putting them -    # here allows them to be overridden if necessary. -    runpath_var=LD_RUN_PATH -    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' -    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' -    # ancient GNU ld didn't support --whole-archive et. al. -    if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then -	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' -      else -  	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= -    fi -    supports_anon_versioning=no -    case `$LD -v 2>/dev/null` in -      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 -      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... -      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... -      *\ 2.11.*) ;; # other 2.11 versions -      *) supports_anon_versioning=yes ;; -    esac - -    # See if GNU ld supports shared libraries. -    case $host_os in -    aix3* | aix4* | aix5*) -      # On AIX/PPC, the GNU linker is very broken -      if test "$host_cpu" != ia64; then -	_LT_AC_TAGVAR(ld_shlibs, $1)=no -	cat <<EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support.  If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF -      fi -      ;; - -    amigaos*) -      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' -      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' -      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - -      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports -      # that the semantics of dynamic libraries on AmigaOS, at least up -      # to version 4, is to share data among multiple programs linked -      # with the same dynamic library.  Since this doesn't match the -      # behavior of shared libraries on other platforms, we can't use -      # them. -      _LT_AC_TAGVAR(ld_shlibs, $1)=no -      ;; - -    beos*) -      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then -	_LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported -	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc -	# support --undefined.  This deserves some investigation.  FIXME -	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' -      else -	_LT_AC_TAGVAR(ld_shlibs, $1)=no -      fi -      ;; - -    cygwin* | mingw* | pw32*) -      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, -      # as there is no search path for DLLs. -      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' -      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported -      _LT_AC_TAGVAR(always_export_symbols, $1)=no -      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes -      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - -      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then -        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' -	# If the export-symbols file already is a .def file (1st line -	# is EXPORTS), use it as is; otherwise, prepend... -	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then -	  cp $export_symbols $output_objdir/$soname.def; -	else -	  echo EXPORTS > $output_objdir/$soname.def; -	  cat $export_symbols >> $output_objdir/$soname.def; -	fi~ -	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' -      else -	_LT_AC_TAGVAR(ld_shlibs, $1)=no -      fi -      ;; - -    interix[[3-9]]*) -      _LT_AC_TAGVAR(hardcode_direct, $1)=no -      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no -      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' -      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' -      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. -      # Instead, shared libraries are loaded at an image base (0x10000000 by -      # default) and relocated if they conflict, which is a slow very memory -      # consuming and fragmenting process.  To avoid this, we pick a random, -      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link -      # time.  Moving up from 0x10000000 also allows more sbrk(2) space. -      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' -      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' -      ;; - -    gnu* | linux* | k*bsd*-gnu) -      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then -	tmp_addflag= -	case $cc_basename,$host_cpu in -	pgcc*)				# Portland Group C compiler -	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' -	  tmp_addflag=' $pic_flag' -	  ;; -	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers -	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' -	  tmp_addflag=' $pic_flag -Mnomain' ;; -	ecc*,ia64* | icc*,ia64*)		# Intel C compiler on ia64 -	  tmp_addflag=' -i_dynamic' ;; -	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64 -	  tmp_addflag=' -i_dynamic -nofor_main' ;; -	ifc* | ifort*)			# Intel Fortran compiler -	  tmp_addflag=' -nofor_main' ;; -	esac -	case `$CC -V 2>&1 | sed 5q` in -	*Sun\ C*)			# Sun C 5.9 -	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' -	  tmp_sharedflag='-G' ;; -	*Sun\ F*)			# Sun Fortran 8.3 -	  tmp_sharedflag='-G' ;; -	*) -	  tmp_sharedflag='-shared' ;; -	esac -	_LT_AC_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - -	if test $supports_anon_versioning = yes; then -	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ -  cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ -  $echo "local: *; };" >> $output_objdir/$libname.ver~ -	  $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' -	fi -      else -	_LT_AC_TAGVAR(ld_shlibs, $1)=no -      fi -      ;; - -    netbsd*) -      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then -	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' -	wlarc= -      else -	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' -	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' -      fi -      ;; - -    solaris*) -      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then -	_LT_AC_TAGVAR(ld_shlibs, $1)=no -	cat <<EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems.  Therefore, libtool -*** is disabling shared libraries support.  We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer.  Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF -      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then -	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' -	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' -      else -	_LT_AC_TAGVAR(ld_shlibs, $1)=no -      fi -      ;; - -    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) -      case `$LD -v 2>&1` in -        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) -	_LT_AC_TAGVAR(ld_shlibs, $1)=no -	cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems.  Therefore, libtool -*** is disabling shared libraries support.  We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF -	;; -	*) -	  if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then -	    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' -	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' -	    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' -	  else -	    _LT_AC_TAGVAR(ld_shlibs, $1)=no -	  fi -	;; -      esac -      ;; - -    sunos4*) -      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' -      wlarc= -      _LT_AC_TAGVAR(hardcode_direct, $1)=yes -      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no -      ;; - -    *) -      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then -	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' -	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' -      else -	_LT_AC_TAGVAR(ld_shlibs, $1)=no -      fi -      ;; -    esac - -    if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then -      runpath_var= -      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= -      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= -      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= -    fi -  else -    # PORTME fill in a description of your system's linker (not GNU ld) -    case $host_os in -    aix3*) -      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported -      _LT_AC_TAGVAR(always_export_symbols, $1)=yes -      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' -      # Note: this linker hardcodes the directories in LIBPATH if there -      # are no directories specified by -L. -      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes -      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then -	# Neither direct hardcoding nor static linking is supported with a -	# broken collect2. -	_LT_AC_TAGVAR(hardcode_direct, $1)=unsupported -      fi -      ;; - -    aix4* | aix5*) -      if test "$host_cpu" = ia64; then -	# On IA64, the linker does run time linking by default, so we don't -	# have to do anything special. -	aix_use_runtimelinking=no -	exp_sym_flag='-Bexport' -	no_entry_flag="" -      else -	# If we're using GNU nm, then we don't want the "-C" option. -	# -C means demangle to AIX nm, but means don't demangle with GNU nm -	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then -	  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' -	else -	  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' -	fi -	aix_use_runtimelinking=no - -	# Test if we are trying to use run time linking or normal -	# AIX style linking. If -brtl is somewhere in LDFLAGS, we -	# need to do runtime linking. -	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) -	  for ld_flag in $LDFLAGS; do -  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then -  	    aix_use_runtimelinking=yes -  	    break -  	  fi -	  done -	  ;; -	esac - -	exp_sym_flag='-bexport' -	no_entry_flag='-bnoentry' -      fi - -      # When large executables or shared objects are built, AIX ld can -      # have problems creating the table of contents.  If linking a library -      # or program results in "error TOC overflow" add -mminimal-toc to -      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not -      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - -      _LT_AC_TAGVAR(archive_cmds, $1)='' -      _LT_AC_TAGVAR(hardcode_direct, $1)=yes -      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' -      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - -      if test "$GCC" = yes; then -	case $host_os in aix4.[[012]]|aix4.[[012]].*) -	# We only want to do this on AIX 4.2 and lower, the check -	# below for broken collect2 doesn't work under 4.3+ -	  collect2name=`${CC} -print-prog-name=collect2` -	  if test -f "$collect2name" && \ -  	   strings "$collect2name" | grep resolve_lib_name >/dev/null -	  then -  	  # We have reworked collect2 -  	  : -	  else -  	  # We have old collect2 -  	  _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported -  	  # It fails to find uninstalled libraries when the uninstalled -  	  # path is not listed in the libpath.  Setting hardcode_minus_L -  	  # to unsupported forces relinking -  	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes -  	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' -  	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= -	  fi -	  ;; -	esac -	shared_flag='-shared' -	if test "$aix_use_runtimelinking" = yes; then -	  shared_flag="$shared_flag "'${wl}-G' -	fi -      else -	# not using gcc -	if test "$host_cpu" = ia64; then -  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release -  	# chokes on -Wl,-G. The following line is correct: -	  shared_flag='-G' -	else -	  if test "$aix_use_runtimelinking" = yes; then -	    shared_flag='${wl}-G' -	  else -	    shared_flag='${wl}-bM:SRE' -	  fi -	fi -      fi - -      # It seems that -bexpall does not export symbols beginning with -      # underscore (_), so it is better to generate a list of symbols to export. -      _LT_AC_TAGVAR(always_export_symbols, $1)=yes -      if test "$aix_use_runtimelinking" = yes; then -	# Warning - without using the other runtime loading flags (-brtl), -	# -berok will link without error, but may produce a broken library. -	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' -       # Determine the default libpath from the value encoded in an empty executable. -       _LT_AC_SYS_LIBPATH_AIX -       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" -	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" -       else -	if test "$host_cpu" = ia64; then -	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' -	  _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" -	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" -	else -	 # Determine the default libpath from the value encoded in an empty executable. -	 _LT_AC_SYS_LIBPATH_AIX -	 _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" -	  # Warning - without using the other run time loading flags, -	  # -berok will link without error, but may produce a broken library. -	  _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' -	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' -	  # Exported symbols can be pulled into shared objects from archives -	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' -	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes -	  # This is similar to how AIX traditionally builds its shared libraries. -	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' -	fi -      fi -      ;; - -    amigaos*) -      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' -      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' -      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes -      # see comment about different semantics on the GNU ld section -      _LT_AC_TAGVAR(ld_shlibs, $1)=no -      ;; - -    bsdi[[45]]*) -      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic -      ;; - -    cygwin* | mingw* | pw32*) -      # When not using gcc, we currently assume that we are using -      # Microsoft Visual C++. -      # hardcode_libdir_flag_spec is actually meaningless, as there is -      # no search path for DLLs. -      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' -      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported -      # Tell ltmain to make .lib files, not .a files. -      libext=lib -      # Tell ltmain to make .dll files, not .so files. -      shrext_cmds=".dll" -      # FIXME: Setting linknames here is a bad hack. -      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' -      # The linker will automatically build a .lib file if we build a DLL. -      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' -      # FIXME: Should let the user specify the lib program. -      _LT_AC_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' -      _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' -      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes -      ;; - -    darwin* | rhapsody*) -      case $host_os in -        rhapsody* | darwin1.[[012]]) -         _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' -         ;; -       *) # Darwin 1.3 on -         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then -           _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' -         else -           case ${MACOSX_DEPLOYMENT_TARGET} in -             10.[[012]]) -               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' -               ;; -             10.*) -               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' -               ;; -           esac -         fi -         ;; -      esac -      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no -      _LT_AC_TAGVAR(hardcode_direct, $1)=no -      _LT_AC_TAGVAR(hardcode_automatic, $1)=yes -      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' -      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes -    if test "$GCC" = yes ; then -    	output_verbose_link_cmd='echo' -        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' -      _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' -      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds -      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' -      _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' -    else -      case $cc_basename in -        xlc*) -         output_verbose_link_cmd='echo' -         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' -         _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' -          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds -         _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' -          _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' -          ;; -       *) -         _LT_AC_TAGVAR(ld_shlibs, $1)=no -          ;; -      esac -    fi -      ;; - -    dgux*) -      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' -      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' -      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no -      ;; - -    freebsd1*) -      _LT_AC_TAGVAR(ld_shlibs, $1)=no -      ;; - -    # 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 -    # does not break anything, and helps significantly (at the cost of a little -    # extra space). -    freebsd2.2*) -      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' -      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' -      _LT_AC_TAGVAR(hardcode_direct, $1)=yes -      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no -      ;; - -    # Unfortunately, older versions of FreeBSD 2 do not have this feature. -    freebsd2*) -      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' -      _LT_AC_TAGVAR(hardcode_direct, $1)=yes -      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes -      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no -      ;; - -    # FreeBSD 3 and greater uses gcc -shared to do shared libraries. -    freebsd* | dragonfly*) -      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' -      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' -      _LT_AC_TAGVAR(hardcode_direct, $1)=yes -      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no -      ;; - -    hpux9*) -      if test "$GCC" = yes; then -	_LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' -      else -	_LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' -      fi -      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' -      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: -      _LT_AC_TAGVAR(hardcode_direct, $1)=yes - -      # hardcode_minus_L: Not really in the search PATH, -      # but as the default location of the library. -      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes -      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' -      ;; - -    hpux10*) -      if test "$GCC" = yes -a "$with_gnu_ld" = no; then -	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' -      else -	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' -      fi -      if test "$with_gnu_ld" = no; then -	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' -	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - -	_LT_AC_TAGVAR(hardcode_direct, $1)=yes -	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - -	# hardcode_minus_L: Not really in the search PATH, -	# but as the default location of the library. -	_LT_AC_TAGVAR(hardcode_minus_L, $1)=yes -      fi -      ;; - -    hpux11*) -      if test "$GCC" = yes -a "$with_gnu_ld" = no; then -	case $host_cpu in -	hppa*64*) -	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' -	  ;; -	ia64*) -	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' -	  ;; -	*) -	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' -	  ;; -	esac -      else -	case $host_cpu in -	hppa*64*) -	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' -	  ;; -	ia64*) -	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' -	  ;; -	*) -	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' -	  ;; -	esac -      fi -      if test "$with_gnu_ld" = no; then -	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' -	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - -	case $host_cpu in -	hppa*64*|ia64*) -	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' -	  _LT_AC_TAGVAR(hardcode_direct, $1)=no -	  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no -	  ;; -	*) -	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes -	  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - -	  # hardcode_minus_L: Not really in the search PATH, -	  # but as the default location of the library. -	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes -	  ;; -	esac -      fi -      ;; - -    irix5* | irix6* | nonstopux*) -      if test "$GCC" = yes; then -	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' -      else -	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' -	_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' -      fi -      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' -      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: -      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes -      ;; - -    netbsd*) -      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then -	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out -      else -	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF -      fi -      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' -      _LT_AC_TAGVAR(hardcode_direct, $1)=yes -      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no -      ;; - -    newsos6) -      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' -      _LT_AC_TAGVAR(hardcode_direct, $1)=yes -      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' -      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: -      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no -      ;; - -    openbsd*) -      if test -f /usr/libexec/ld.so; then -	_LT_AC_TAGVAR(hardcode_direct, $1)=yes -	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no -	if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then -	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' -	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' -	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' -	  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' -	else -	  case $host_os in -	   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) -	     _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' -	     _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' -	     ;; -	   *) -	     _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' -	     _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' -	     ;; -	  esac -        fi -      else -	_LT_AC_TAGVAR(ld_shlibs, $1)=no -      fi -      ;; - -    os2*) -      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' -      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes -      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported -      _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' -      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' -      ;; - -    osf3*) -      if test "$GCC" = yes; then -	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' -	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' -      else -	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' -	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' -      fi -      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' -      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: -      ;; - -    osf4* | osf5*)	# as osf3* with the addition of -msym flag -      if test "$GCC" = yes; then -	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' -	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' -	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' -      else -	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' -	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' -	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ -	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - -	# Both c and cxx compiler support -rpath directly -	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' -      fi -      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: -      ;; - -    solaris*) -      _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' -      if test "$GCC" = yes; then -	wlarc='${wl}' -	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' -	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ -	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' -      else -	wlarc='' -	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' -	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ -  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' -      fi -      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' -      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no -      case $host_os in -      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; -      *) -	# The compiler driver will combine and reorder linker options, -	# but understands `-z linker_flag'.  GCC discards it without `$wl', -	# but is careful enough not to reorder. - 	# Supported since Solaris 2.6 (maybe 2.5.1?) -	if test "$GCC" = yes; then -	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' -	else -	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' -	fi -	;; -      esac -      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes -      ;; - -    sunos4*) -      if test "x$host_vendor" = xsequent; then -	# Use $CC to link under sequent, because it throws in some extra .o -	# files that make .init and .fini sections work. -	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' -      else -	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' -      fi -      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' -      _LT_AC_TAGVAR(hardcode_direct, $1)=yes -      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes -      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no -      ;; - -    sysv4) -      case $host_vendor in -	sni) -	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' -	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? -	;; -	siemens) -	  ## LD is ld it makes a PLAMLIB -	  ## CC just makes a GrossModule. -	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' -	  _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' -	  _LT_AC_TAGVAR(hardcode_direct, $1)=no -        ;; -	motorola) -	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' -	  _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie -	;; -      esac -      runpath_var='LD_RUN_PATH' -      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no -      ;; - -    sysv4.3*) -      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' -      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no -      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' -      ;; - -    sysv4*MP*) -      if test -d /usr/nec; then -	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' -	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no -	runpath_var=LD_RUN_PATH -	hardcode_runpath_var=yes -	_LT_AC_TAGVAR(ld_shlibs, $1)=yes -      fi -      ;; - -    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) -      _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' -      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no -      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no -      runpath_var='LD_RUN_PATH' - -      if test "$GCC" = yes; then -	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' -	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' -      else -	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' -	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' -      fi -      ;; - -    sysv5* | sco3.2v5* | sco5v6*) -      # Note: We can NOT use -z defs as we might desire, because we do not -      # link with -lc, and that would cause any symbols used from libc to -      # always be unresolved, which means just about no library would -      # ever link correctly.  If we're not using GNU ld we use -z text -      # though, which does catch some bad symbols but isn't as heavy-handed -      # as -z defs. -      _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' -      _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' -      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no -      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no -      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' -      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' -      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes -      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' -      runpath_var='LD_RUN_PATH' - -      if test "$GCC" = yes; then -	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' -	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' -      else -	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' -	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' -      fi -      ;; - -    uts4*) -      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' -      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' -      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no -      ;; - -    *) -      _LT_AC_TAGVAR(ld_shlibs, $1)=no -      ;; -    esac -  fi -AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) -test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) -  # Assume -lc should be added -  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - -  if test "$enable_shared" = yes && test "$GCC" = yes; then -    case $_LT_AC_TAGVAR(archive_cmds, $1) in -    *'~'*) -      # FIXME: we may have to deal with multi-command sequences. -      ;; -    '$CC '*) -      # Test whether the compiler implicitly links with -lc since on some -      # systems, -lgcc has to come before -lc. If gcc already passes -lc -      # to ld, don't add -lc before -lgcc. -      AC_MSG_CHECKING([whether -lc should be explicitly linked in]) -      $rm conftest* -      echo "$lt_simple_compile_test_code" > conftest.$ac_ext - -      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then -        soname=conftest -        lib=conftest -        libobjs=conftest.$ac_objext -        deplibs= -        wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) -	pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) -        compiler_flags=-v -        linker_flags=-v -        verstring= -        output_objdir=. -        libname=conftest -        lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) -        _LT_AC_TAGVAR(allow_undefined_flag, $1)= -        if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) -        then -	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no -        else -	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes -        fi -        _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag -      else -        cat conftest.err 1>&5 -      fi -      $rm conftest* -      AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) -      ;; -    esac -  fi -  ;; -esac -])# AC_LIBTOOL_PROG_LD_SHLIBS - - -# _LT_AC_FILE_LTDLL_C -# ------------------- -# Be careful that the start marker always follows a newline. -AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ -# /* ltdll.c starts here */ -# #define WIN32_LEAN_AND_MEAN -# #include <windows.h> -# #undef WIN32_LEAN_AND_MEAN -# #include <stdio.h> -# -# #ifndef __CYGWIN__ -# #  ifdef __CYGWIN32__ -# #    define __CYGWIN__ __CYGWIN32__ -# #  endif -# #endif -# -# #ifdef __cplusplus -# extern "C" { -# #endif -# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); -# #ifdef __cplusplus -# } -# #endif -# -# #ifdef __CYGWIN__ -# #include <cygwin/cygwin_dll.h> -# DECLARE_CYGWIN_DLL( DllMain ); -# #endif -# HINSTANCE __hDllInstance_base; -# -# BOOL APIENTRY -# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) -# { -#   __hDllInstance_base = hInst; -#   return TRUE; -# } -# /* ltdll.c ends here */ -])# _LT_AC_FILE_LTDLL_C - - -# _LT_AC_TAGVAR(VARNAME, [TAGNAME]) -# --------------------------------- -AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) - - -# old names -AC_DEFUN([AM_PROG_LIBTOOL],   [AC_PROG_LIBTOOL]) -AC_DEFUN([AM_ENABLE_SHARED],  [AC_ENABLE_SHARED($@)]) -AC_DEFUN([AM_ENABLE_STATIC],  [AC_ENABLE_STATIC($@)]) -AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) -AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) -AC_DEFUN([AM_PROG_LD],        [AC_PROG_LD]) -AC_DEFUN([AM_PROG_NM],        [AC_PROG_NM]) - -# This is just to silence aclocal about the macro not being used -ifelse([AC_DISABLE_FAST_INSTALL]) - -AC_DEFUN([LT_AC_PROG_RC], -[AC_CHECK_TOOL(RC, windres, no) -]) - - -# Cheap backport of AS_EXECUTABLE_P and required macros -# from Autoconf 2.59; we should not use $as_executable_p directly. - -# _AS_TEST_PREPARE -# ---------------- -m4_ifndef([_AS_TEST_PREPARE], -[m4_defun([_AS_TEST_PREPARE], -[if test -x / >/dev/null 2>&1; then -  as_executable_p='test -x' -else -  as_executable_p='test -f' -fi -])])# _AS_TEST_PREPARE - -# AS_EXECUTABLE_P -# --------------- -# Check whether a file is executable. -m4_ifndef([AS_EXECUTABLE_P], -[m4_defun([AS_EXECUTABLE_P], -[AS_REQUIRE([_AS_TEST_PREPARE])dnl -$as_executable_p $1[]dnl -])])# AS_EXECUTABLE_P - -############################################################ -# NOTE: This macro has been submitted for inclusion into   # -#  GNU Autoconf as AC_PROG_SED.  When it is available in   # -#  a released version of Autoconf we should remove this    # -#  macro and use it instead.                               # -############################################################ -# LT_AC_PROG_SED -# -------------- -# Check for a fully-functional sed program, that truncates -# as few characters as possible.  Prefer GNU sed if found. -AC_DEFUN([LT_AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do -  IFS=$as_save_IFS -  test -z "$as_dir" && as_dir=. -  for lt_ac_prog in sed gsed; do -    for ac_exec_ext in '' $ac_executable_extensions; do -      if AS_EXECUTABLE_P(["$as_dir/$lt_ac_prog$ac_exec_ext"]); then -        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" -      fi -    done -  done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do -  test ! -f $lt_ac_sed && continue -  cat /dev/null > conftest.in -  lt_ac_count=0 -  echo $ECHO_N "0123456789$ECHO_C" >conftest.in -  # Check for GNU sed and select it if it is found. -  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then -    lt_cv_path_SED=$lt_ac_sed -    break -  fi -  while true; do -    cat conftest.in conftest.in >conftest.tmp -    mv conftest.tmp conftest.in -    cp conftest.in conftest.nl -    echo >>conftest.nl -    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break -    cmp -s conftest.out conftest.nl || break -    # 10000 chars as input seems more than enough -    test $lt_ac_count -gt 10 && break -    lt_ac_count=`expr $lt_ac_count + 1` -    if test $lt_ac_count -gt $lt_ac_max; then -      lt_ac_max=$lt_ac_count -      lt_cv_path_SED=$lt_ac_sed -    fi -  done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -]) - -  dnl Add some custom macros for pacman and libalpm  dnl GCC_STACK_PROTECT_LIB @@ -4910,6 +38,29 @@ AC_DEFUN([GCC_STACK_PROTECT_CC],[    fi  ]) +dnl GCC_FORTIFY_SOURCE_CC +dnl checks -D_FORTIFY_SOURCE with the C compiler, if it exists then updates +dnl CFLAGS +AC_DEFUN([GCC_FORTIFY_SOURCE_CC],[ +  AC_LANG_ASSERT(C) +  if test "X$CC" != "X"; then +    AC_MSG_CHECKING(for FORTIFY_SOURCE support) +    AC_TRY_COMPILE([#include <features.h>], [ +      int main() { +      #if !(__GNUC_PREREQ (4, 1) ) +      #error No FORTIFY_SOURCE support +      #endif +        return 0; +      } +    ], [ +      AC_MSG_RESULT(yes) +      CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2" +    ], [ +      AC_MSG_RESULT(no) +  ]) +  fi +]) +  dnl GCC_VISIBILITY_CC  dnl checks -fvisibility=internal with the C compiler, if it exists then  dnl defines ENABLE_VISIBILITY_CC in both configure script and Makefiles @@ -4926,7 +77,7 @@ AC_DEFUN([GCC_VISIBILITY_CC],[      if test $visibility_cv_cc = yes; then        AC_DEFINE([ENABLE_VISIBILITY_CC], 1, [Define if symbol visibility C support is enabled.])      fi -	AM_CONDITIONAL([ENABLE_VISIBILITY_CC], test "x$visibility_cv_cc" = "xyes") +    AM_CONDITIONAL([ENABLE_VISIBILITY_CC], test "x$visibility_cv_cc" = "xyes")    fi  ]) @@ -4946,7 +97,47 @@ AC_DEFUN([GCC_GNU89_INLINE_CC],[      if test $gnu89_inline_cv_cc = yes; then        AC_DEFINE([ENABLE_GNU89_INLINE_CC], 1, [Define if gnu89 inlining semantics should be used.])      fi -	AM_CONDITIONAL([ENABLE_GNU89_INLINE_CC], test "x$gnu89_inline_cv_cc" = "xyes") +    AM_CONDITIONAL([ENABLE_GNU89_INLINE_CC], test "x$gnu89_inline_cv_cc" = "xyes")    fi  ]) +dnl Checks for getmntinfo and determines whether it uses statfs or statvfs +AC_DEFUN([FS_STATS_TYPE], +  [AC_CACHE_CHECK([filesystem statistics type], fs_stats_cv_type, +    [AC_CHECK_FUNC(getmntinfo, +      [AC_COMPILE_IFELSE( +        [AC_LANG_PROGRAM([[ +# include <sys/param.h> +# include <sys/mount.h> +#if HAVE_SYS_UCRED_H +#include <sys/ucred.h> +#endif +extern int getmntinfo (struct statfs **, int); +]], +          [])], +        [fs_stats_cv_type="struct statfs"], +        [fs_stats_cv_type="struct statvfs"])], +      [AC_CHECK_FUNC(getmntent, +        [fs_stats_cv_type="struct statvfs"])] +    )] +  ) +  AC_DEFINE_UNQUOTED(FSSTATSTYPE, [$fs_stats_cv_type], +    [Defined as the filesystem stats type ('statvfs' or 'statfs')]) +]) + +dnl Checks for PATH_MAX and defines it if not present +AC_DEFUN([PATH_MAX_DEFINED], +  [AC_CACHE_CHECK([PATH_MAX defined], path_max_cv_defined, +    [AC_EGREP_CPP(yes, [[ +#include <limits.h> +#if defined(PATH_MAX) +yes +#endif +]], +      [path_max_cv_defined=yes], +      [path_max_cv_defined=no])] +  ) +  if test $path_max_cv_defined = no; then +    AC_DEFINE([PATH_MAX], 4096, [Define if PATH_MAX is undefined by limits.h.]) +  fi +]) @@ -1,6 +1,6 @@  #!/bin/sh -xu -aclocal +aclocal -I m4 --install  autoheader  automake --foreign  autoconf diff --git a/config.guess b/config.guess index f2a0acfb..28523784 100755 --- a/config.guess +++ b/config.guess @@ -1,10 +1,10 @@  #! /bin/sh  # Attempt to guess a canonical system name.  #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010  #   Free Software Foundation, Inc. -timestamp='2008-01-23' +timestamp='2010-08-21'  # 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 @@ -27,16 +27,16 @@ timestamp='2008-01-23'  # the same distribution terms that you use for the rest of that program. -# Originally written by Per Bothner <per@bothner.com>. -# Please send patches to <config-patches@gnu.org>.  Submit a context -# diff and a properly formatted ChangeLog entry. +# Originally written by Per Bothner.  Please send patches (context +# diff format) to <config-patches@gnu.org> and include a ChangeLog +# entry.  #  # This script attempts to guess a canonical system name similar to  # config.sub.  If it succeeds, it prints the system name on stdout, and  # exits with 0.  Otherwise, it exits with 1.  # -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD  me=`echo "$0" | sed -e 's,.*/,,'` @@ -56,8 +56,9 @@ version="\  GNU config.guess ($timestamp)  Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free +Software Foundation, Inc.  This is free software; see the source for copying conditions.  There is NO  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -91,7 +92,7 @@ if test $# != 0; then    exit 1  fi -trap 'exit 1' 1 2 15 +trap 'exit 1' HUP INT TERM  # CC_FOR_BUILD -- compiler used by this script. Note that the use of a  # compiler to aid in system detection is discouraged as it requires @@ -105,7 +106,7 @@ trap 'exit 1' 1 2 15  set_cc_for_build='  trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" HUP INT PIPE TERM ;  : ${TMPDIR=/tmp} ;   { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||   { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || @@ -170,7 +171,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in  	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)  		eval $set_cc_for_build  		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ -			| grep __ELF__ >/dev/null +			| grep -q __ELF__  		then  		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).  		    # Return netbsd for either.  FIX? @@ -324,14 +325,33 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in  	case `/usr/bin/uname -p` in  	    sparc) echo sparc-icl-nx7; exit ;;  	esac ;; +    s390x:SunOS:*:*) +	echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` +	exit ;;      sun4H:SunOS:5.*:*)  	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`  	exit ;;      sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)  	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`  	exit ;; +    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) +	echo i386-pc-auroraux${UNAME_RELEASE} +	exit ;;      i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) -	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` +	eval $set_cc_for_build +	SUN_ARCH="i386" +	# If there is a compiler, see if it is configured for 64-bit objects. +	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does. +	# This test works for both compilers. +	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then +	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ +		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ +		grep IS_64BIT_ARCH >/dev/null +	    then +		SUN_ARCH="x86_64" +	    fi +	fi +	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`  	exit ;;      sun4*:SunOS:6*:*)  	# According to config.sub, this is the proper way to canonicalize @@ -532,7 +552,7 @@ EOF  		echo rs6000-ibm-aix3.2  	fi  	exit ;; -    *:AIX:*:[456]) +    *:AIX:*:[4567])  	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`  	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then  		IBM_ARCH=rs6000 @@ -640,7 +660,7 @@ EOF  	    # => hppa64-hp-hpux11.23  	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | -		grep __LP64__ >/dev/null +		grep -q __LP64__  	    then  		HP_ARCH="hppa2.0w"  	    else @@ -791,12 +811,12 @@ EOF      i*:PW*:*)  	echo ${UNAME_MACHINE}-pc-pw32  	exit ;; -    *:Interix*:[3456]*) +    *:Interix*:*)      	case ${UNAME_MACHINE} in  	    x86)  		echo i586-pc-interix${UNAME_RELEASE}  		exit ;; -	    EM64T | authenticamd) +	    authenticamd | genuineintel | EM64T)  		echo x86_64-unknown-interix${UNAME_RELEASE}  		exit ;;  	    IA64) @@ -806,6 +826,9 @@ EOF      [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)  	echo i${UNAME_MACHINE}-pc-mks  	exit ;; +    8664:Windows_NT:*) +	echo x86_64-pc-mks +	exit ;;      i*:Windows_NT*:* | Pentium*:Windows_NT*:*)  	# How do we know it's Interix rather than the generic POSIX subsystem?  	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we @@ -835,6 +858,20 @@ EOF      i*86:Minix:*:*)  	echo ${UNAME_MACHINE}-pc-minix  	exit ;; +    alpha:Linux:*:*) +	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in +	  EV5)   UNAME_MACHINE=alphaev5 ;; +	  EV56)  UNAME_MACHINE=alphaev56 ;; +	  PCA56) UNAME_MACHINE=alphapca56 ;; +	  PCA57) UNAME_MACHINE=alphapca56 ;; +	  EV6)   UNAME_MACHINE=alphaev6 ;; +	  EV67)  UNAME_MACHINE=alphaev67 ;; +	  EV68*) UNAME_MACHINE=alphaev68 ;; +        esac +	objdump --private-headers /bin/sh | grep -q ld.so.1 +	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi +	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} +	exit ;;      arm*:Linux:*:*)  	eval $set_cc_for_build  	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ @@ -857,6 +894,17 @@ EOF      frv:Linux:*:*)      	echo frv-unknown-linux-gnu  	exit ;; +    i*86:Linux:*:*) +	LIBC=gnu +	eval $set_cc_for_build +	sed 's/^	//' << EOF >$dummy.c +	#ifdef __dietlibc__ +	LIBC=dietlibc +	#endif +EOF +	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` +	echo "${UNAME_MACHINE}-pc-linux-${LIBC}" +	exit ;;      ia64:Linux:*:*)  	echo ${UNAME_MACHINE}-unknown-linux-gnu  	exit ;; @@ -866,74 +914,33 @@ EOF      m68*:Linux:*:*)  	echo ${UNAME_MACHINE}-unknown-linux-gnu  	exit ;; -    mips:Linux:*:*) -	eval $set_cc_for_build -	sed 's/^	//' << EOF >$dummy.c -	#undef CPU -	#undef mips -	#undef mipsel -	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) -	CPU=mipsel -	#else -	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) -	CPU=mips -	#else -	CPU= -	#endif -	#endif -EOF -	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' -	    /^CPU/{ -		s: ::g -		p -	    }'`" -	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } -	;; -    mips64:Linux:*:*) +    mips:Linux:*:* | mips64:Linux:*:*)  	eval $set_cc_for_build  	sed 's/^	//' << EOF >$dummy.c  	#undef CPU -	#undef mips64 -	#undef mips64el +	#undef ${UNAME_MACHINE} +	#undef ${UNAME_MACHINE}el  	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) -	CPU=mips64el +	CPU=${UNAME_MACHINE}el  	#else  	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) -	CPU=mips64 +	CPU=${UNAME_MACHINE}  	#else  	CPU=  	#endif  	#endif  EOF -	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' -	    /^CPU/{ -		s: ::g -		p -	    }'`" +	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`  	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }  	;;      or32:Linux:*:*)  	echo or32-unknown-linux-gnu  	exit ;; -    ppc:Linux:*:*) -	echo powerpc-unknown-linux-gnu -	exit ;; -    ppc64:Linux:*:*) -	echo powerpc64-unknown-linux-gnu +    padre:Linux:*:*) +	echo sparc-unknown-linux-gnu  	exit ;; -    alpha:Linux:*:*) -	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in -	  EV5)   UNAME_MACHINE=alphaev5 ;; -	  EV56)  UNAME_MACHINE=alphaev56 ;; -	  PCA56) UNAME_MACHINE=alphapca56 ;; -	  PCA57) UNAME_MACHINE=alphapca56 ;; -	  EV6)   UNAME_MACHINE=alphaev6 ;; -	  EV67)  UNAME_MACHINE=alphaev67 ;; -	  EV68*) UNAME_MACHINE=alphaev68 ;; -        esac -	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null -	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi -	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} +    parisc64:Linux:*:* | hppa64:Linux:*:*) +	echo hppa64-unknown-linux-gnu  	exit ;;      parisc:Linux:*:* | hppa:Linux:*:*)  	# Look for CPU level @@ -943,8 +950,11 @@ EOF  	  *)    echo hppa-unknown-linux-gnu ;;  	esac  	exit ;; -    parisc64:Linux:*:* | hppa64:Linux:*:*) -	echo hppa64-unknown-linux-gnu +    ppc64:Linux:*:*) +	echo powerpc64-unknown-linux-gnu +	exit ;; +    ppc:Linux:*:*) +	echo powerpc-unknown-linux-gnu  	exit ;;      s390:Linux:*:* | s390x:Linux:*:*)  	echo ${UNAME_MACHINE}-ibm-linux @@ -958,6 +968,9 @@ EOF      sparc:Linux:*:* | sparc64:Linux:*:*)  	echo ${UNAME_MACHINE}-unknown-linux-gnu  	exit ;; +    tile*:Linux:*:*) +	echo ${UNAME_MACHINE}-tilera-linux-gnu +	exit ;;      vax:Linux:*:*)  	echo ${UNAME_MACHINE}-dec-linux-gnu  	exit ;; @@ -965,71 +978,8 @@ EOF  	echo x86_64-unknown-linux-gnu  	exit ;;      xtensa*:Linux:*:*) -	echo ${UNAME_MACHINE}-unknown-linux-gnu +    	echo ${UNAME_MACHINE}-unknown-linux-gnu  	exit ;; -    i*86:Linux:*:*) -	# The BFD linker knows what the default object file format is, so -	# first see if it will tell us. cd to the root directory to prevent -	# problems with other programs or directories called `ld' in the path. -	# Set LC_ALL=C to ensure ld outputs messages in English. -	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ -			 | sed -ne '/supported targets:/!d -				    s/[ 	][ 	]*/ /g -				    s/.*supported targets: *// -				    s/ .*// -				    p'` -        case "$ld_supported_targets" in -	  elf32-i386) -		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" -		;; -	  a.out-i386-linux) -		echo "${UNAME_MACHINE}-pc-linux-gnuaout" -		exit ;; -	  coff-i386) -		echo "${UNAME_MACHINE}-pc-linux-gnucoff" -		exit ;; -	  "") -		# Either a pre-BFD a.out linker (linux-gnuoldld) or -		# one that does not give us useful --help. -		echo "${UNAME_MACHINE}-pc-linux-gnuoldld" -		exit ;; -	esac -	# Determine whether the default compiler is a.out or elf -	eval $set_cc_for_build -	sed 's/^	//' << EOF >$dummy.c -	#include <features.h> -	#ifdef __ELF__ -	# ifdef __GLIBC__ -	#  if __GLIBC__ >= 2 -	LIBC=gnu -	#  else -	LIBC=gnulibc1 -	#  endif -	# else -	LIBC=gnulibc1 -	# endif -	#else -	#if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) -	LIBC=gnu -	#else -	LIBC=gnuaout -	#endif -	#endif -	#ifdef __dietlibc__ -	LIBC=dietlibc -	#endif -EOF -	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' -	    /^LIBC/{ -		s: ::g -		p -	    }'`" -	test x"${LIBC}" != x && { -		echo "${UNAME_MACHINE}-pc-linux-${LIBC}" -		exit -	} -	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } -	;;      i*86:DYNIX/ptx:4*:*)  	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.  	# earlier versions are messed up and put the nodename in both @@ -1058,7 +1008,7 @@ EOF      i*86:syllable:*:*)  	echo ${UNAME_MACHINE}-pc-syllable  	exit ;; -    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) +    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)  	echo i386-unknown-lynxos${UNAME_RELEASE}  	exit ;;      i*86:*DOS:*:*) @@ -1102,8 +1052,11 @@ EOF      pc:*:*:*)  	# Left here for compatibility:          # uname -m prints for DJGPP always 'pc', but it prints nothing about -        # the processor, so we play safe by assuming i386. -	echo i386-pc-msdosdjgpp +        # the processor, so we play safe by assuming i586. +	# Note: whatever this is, it MUST be the same as what config.sub +	# prints for the "djgpp" host, or else GDB configury will decide that +	# this is a cross-build. +	echo i586-pc-msdosdjgpp          exit ;;      Intel:Mach:3*:*)  	echo i386-pc-mach3 @@ -1141,6 +1094,16 @@ EOF      3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)          /bin/uname -p 2>/dev/null | grep 86 >/dev/null \            && { echo i486-ncr-sysv4; exit; } ;; +    NCR*:*:4.2:* | MPRAS*:*:4.2:*) +	OS_REL='.3' +	test -r /etc/.relid \ +	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` +	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \ +	    && { echo i486-ncr-sysv4.3${OS_REL}; exit; } +	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ +	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } +	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ +	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;      m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)  	echo m68k-unknown-lynxos${UNAME_RELEASE}  	exit ;; @@ -1153,7 +1116,7 @@ EOF      rs6000:LynxOS:2.*:*)  	echo rs6000-unknown-lynxos${UNAME_RELEASE}  	exit ;; -    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) +    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)  	echo powerpc-unknown-lynxos${UNAME_RELEASE}  	exit ;;      SM[BE]S:UNIX_SV:*:*) @@ -1216,6 +1179,9 @@ EOF      BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.  	echo i586-pc-beos  	exit ;; +    BePC:Haiku:*:*)	# Haiku running on Intel PC compatible. +	echo i586-pc-haiku +	exit ;;      SX-4:SUPER-UX:*:*)  	echo sx4-nec-superux${UNAME_RELEASE}  	exit ;; @@ -1243,6 +1209,16 @@ EOF      *:Darwin:*:*)  	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown  	case $UNAME_PROCESSOR in +	    i386) +		eval $set_cc_for_build +		if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then +		  if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ +		      (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ +		      grep IS_64BIT_ARCH >/dev/null +		  then +		      UNAME_PROCESSOR="x86_64" +		  fi +		fi ;;  	    unknown) UNAME_PROCESSOR=powerpc ;;  	esac  	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} @@ -1324,6 +1300,9 @@ EOF      i*86:rdos:*:*)  	echo ${UNAME_MACHINE}-pc-rdos  	exit ;; +    i*86:AROS:*:*) +	echo ${UNAME_MACHINE}-pc-aros +	exit ;;  esac  #echo '(No uname command or uname output not recognized.)' 1>&2 @@ -1,10 +1,10 @@  #! /bin/sh  # Configuration validation subroutine script.  #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010  #   Free Software Foundation, Inc. -timestamp='2008-01-16' +timestamp='2010-09-11'  # This file is (in principle) common to ALL GNU software.  # The presence of a machine in this file suggests that SOME GNU software @@ -32,13 +32,16 @@ timestamp='2008-01-16'  # Please send patches to <config-patches@gnu.org>.  Submit a context -# diff and a properly formatted ChangeLog entry. +# diff and a properly formatted GNU ChangeLog entry.  #  # Configuration subroutine to validate and canonicalize a configuration type.  # Supply the specified configuration type as an argument.  # If it is invalid, we print an error message on stderr and exit with code 1.  # Otherwise, we print the canonical config type on stdout and succeed. +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD +  # This file is supposed to be the same for all GNU packages  # and recognize all the CPU types, system types and aliases  # that are meaningful with *any* GNU software. @@ -72,8 +75,9 @@ Report bugs and patches to <config-patches@gnu.org>."  version="\  GNU config.sub ($timestamp) -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free +Software Foundation, Inc.  This is free software; see the source for copying conditions.  There is NO  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -120,8 +124,10 @@ esac  # Here we must recognize all the valid KERNEL-OS combinations.  maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`  case $maybe_os in -  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ -  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ +  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ +  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ +  knetbsd*-gnu* | netbsd*-gnu* | \ +  kopensolaris*-gnu* | \    storm-chaos* | os2-emx* | rtmk-nova*)      os=-$maybe_os      basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` @@ -148,10 +154,13 @@ case $os in  	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\  	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \  	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -	-apple | -axis | -knuth | -cray) +	-apple | -axis | -knuth | -cray | -microblaze)  		os=  		basic_machine=$1  		;; +        -bluegene*) +	        os=-cnk +		;;  	-sim | -cisco | -oki | -wec | -winbond)  		os=  		basic_machine=$1 @@ -249,13 +258,16 @@ case $basic_machine in  	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \  	| i370 | i860 | i960 | ia64 \  	| ip2k | iq2000 \ +	| lm32 \  	| m32c | m32r | m32rle | m68000 | m68k | m88k \ -	| maxq | mb | microblaze | mcore | mep \ +	| maxq | mb | microblaze | mcore | mep | metag \  	| mips | mipsbe | mipseb | mipsel | mipsle \  	| mips16 \  	| mips64 | mips64el \ -	| mips64vr | mips64vrel \ +	| mips64octeon | mips64octeonel \  	| mips64orion | mips64orionel \ +	| mips64r5900 | mips64r5900el \ +	| mips64vr | mips64vrel \  	| mips64vr4100 | mips64vr4100el \  	| mips64vr4300 | mips64vr4300el \  	| mips64vr5000 | mips64vr5000el \ @@ -268,28 +280,41 @@ case $basic_machine in  	| mipsisa64sr71k | mipsisa64sr71kel \  	| mipstx39 | mipstx39el \  	| mn10200 | mn10300 \ +	| moxie \  	| mt \  	| msp430 \ +	| nds32 | nds32le | nds32be \  	| nios | nios2 \  	| ns16k | ns32k \  	| or32 \  	| pdp10 | pdp11 | pj | pjl \  	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \  	| pyramid \ +	| rx \  	| score \ -	| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ +	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \  	| sh64 | sh64le \  	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \  	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \  	| spu | strongarm \ -	| tahoe | thumb | tic4x | tic80 | tron \ +	| tahoe | thumb | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ +	| ubicom32 \  	| v850 | v850e \  	| we32k \  	| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ -	| z8k) +	| z8k | z80)  		basic_machine=$basic_machine-unknown  		;; -	m6811 | m68hc11 | m6812 | m68hc12) +	c54x) +		basic_machine=tic54x-unknown +		;; +	c55x) +		basic_machine=tic55x-unknown +		;; +	c6x) +		basic_machine=tic6x-unknown +		;; +	m6811 | m68hc11 | m6812 | m68hc12 | picochip)  		# Motorola 68HC11/12.  		basic_machine=$basic_machine-unknown  		os=-none @@ -320,7 +345,7 @@ case $basic_machine in  	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \  	| avr-* | avr32-* \  	| bfin-* | bs2000-* \ -	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ +	| c[123]* | c30-* | [cjt]90-* | c4x-* \  	| clipper-* | craynv-* | cydra-* \  	| d10v-* | d30v-* | dlx-* \  	| elxsi-* \ @@ -329,14 +354,17 @@ case $basic_machine in  	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \  	| i*86-* | i860-* | i960-* | ia64-* \  	| ip2k-* | iq2000-* \ +	| lm32-* \  	| m32c-* | m32r-* | m32rle-* \  	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ -	| m88110-* | m88k-* | maxq-* | mcore-* \ +	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \  	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \  	| mips16-* \  	| mips64-* | mips64el-* \ -	| mips64vr-* | mips64vrel-* \ +	| mips64octeon-* | mips64octeonel-* \  	| mips64orion-* | mips64orionel-* \ +	| mips64r5900-* | mips64r5900el-* \ +	| mips64vr-* | mips64vrel-* \  	| mips64vr4100-* | mips64vr4100el-* \  	| mips64vr4300-* | mips64vr4300el-* \  	| mips64vr5000-* | mips64vr5000el-* \ @@ -351,27 +379,30 @@ case $basic_machine in  	| mmix-* \  	| mt-* \  	| msp430-* \ +	| nds32-* | nds32le-* | nds32be-* \  	| nios-* | nios2-* \  	| none-* | np1-* | ns16k-* | ns32k-* \  	| orion-* \  	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \  	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \  	| pyramid-* \ -	| romp-* | rs6000-* \ -	| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ +	| romp-* | rs6000-* | rx-* \ +	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \  	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \  	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \  	| sparclite-* \  	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \  	| tahoe-* | thumb-* \  	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ +	| tile-* | tilegx-* \  	| tron-* \ +	| ubicom32-* \  	| v850-* | v850e-* | vax-* \  	| we32k-* \  	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \  	| xstormy16-* | xtensa*-* \  	| ymp-* \ -	| z8k-*) +	| z8k-* | z80-*)  		;;  	# Recognize the basic CPU types without company name, with glob match.  	xtensa*) @@ -439,6 +470,10 @@ case $basic_machine in  		basic_machine=m68k-apollo  		os=-bsd  		;; +	aros) +		basic_machine=i386-pc +		os=-aros +		;;  	aux)  		basic_machine=m68k-apple  		os=-aux @@ -455,10 +490,27 @@ case $basic_machine in  		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`  		os=-linux  		;; +	bluegene*) +		basic_machine=powerpc-ibm +		os=-cnk +		;; +	c54x-*) +		basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` +		;; +	c55x-*) +		basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` +		;; +	c6x-*) +		basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` +		;;  	c90)  		basic_machine=c90-cray  		os=-unicos  		;; +        cegcc) +		basic_machine=arm-unknown +		os=-cegcc +		;;  	convex-c1)  		basic_machine=c1-convex  		os=-bsd @@ -526,6 +578,10 @@ case $basic_machine in  		basic_machine=m88k-motorola  		os=-sysv3  		;; +	dicos) +		basic_machine=i686-pc +		os=-dicos +		;;  	djgpp)  		basic_machine=i586-pc  		os=-msdosdjgpp @@ -699,6 +755,9 @@ case $basic_machine in  		basic_machine=ns32k-utek  		os=-sysv  		;; +        microblaze) +		basic_machine=microblaze-xilinx +		;;  	mingw32)  		basic_machine=i386-pc  		os=-mingw32 @@ -803,6 +862,12 @@ case $basic_machine in  	np1)  		basic_machine=np1-gould  		;; +        neo-tandem) +		basic_machine=neo-tandem +		;; +        nse-tandem) +		basic_machine=nse-tandem +		;;  	nsr-tandem)  		basic_machine=nsr-tandem  		;; @@ -1037,17 +1102,10 @@ case $basic_machine in  		basic_machine=t90-cray  		os=-unicos  		;; -	tic54x | c54x*) -		basic_machine=tic54x-unknown -		os=-coff -		;; -	tic55x | c55x*) -		basic_machine=tic55x-unknown -		os=-coff -		;; -	tic6x | c6x*) -		basic_machine=tic6x-unknown -		os=-coff +        # This must be matched before tile*. +        tilegx*) +		basic_machine=tilegx-unknown +		os=-linux-gnu  		;;  	tile*)  		basic_machine=tile-unknown @@ -1128,6 +1186,10 @@ case $basic_machine in  		basic_machine=z8k-unknown  		os=-sim  		;; +	z80-*-coff) +		basic_machine=z80-unknown +		os=-sim +		;;  	none)  		basic_machine=none-none  		os=-none @@ -1166,7 +1228,7 @@ case $basic_machine in  	we32k)  		basic_machine=we32k-att  		;; -	sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) +	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)  		basic_machine=sh-unknown  		;;  	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) @@ -1216,6 +1278,9 @@ case $os in          # First match some system type aliases          # that might get confused with valid system types.  	# -solaris* is a basic system type, with this one exception. +        -auroraux) +	        os=-auroraux +		;;  	-solaris1 | -solaris1.*)  		os=`echo $os | sed -e 's|solaris1|sunos4|'`  		;; @@ -1236,10 +1301,11 @@ case $os in  	# Each alternative MUST END IN A *, to match a version number.  	# -sysv* is not here because it comes later, after sysvr4.  	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ -	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ -	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ +	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ +	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ +	      | -sym* | -kopensolaris* \  	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ -	      | -aos* \ +	      | -aos* | -aros* \  	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \  	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \  	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ @@ -1248,9 +1314,10 @@ case $os in  	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \  	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \  	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ -	      | -chorusos* | -chorusrdb* \ +	      | -chorusos* | -chorusrdb* | -cegcc* \  	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ -	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ +	      | -mingw32* | -linux-gnu* | -linux-android* \ +	      | -linux-newlib* | -linux-uclibc* \  	      | -uxpv* | -beos* | -mpeix* | -udk* \  	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \  	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ @@ -1258,7 +1325,7 @@ case $os in  	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \  	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \  	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ -	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) +	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)  	# Remember, each alternative MUST END IN *, to match a version number.  		;;  	-qnx*) @@ -1388,6 +1455,11 @@ case $os in  	-zvmoe)  		os=-zvmoe  		;; +	-dicos*) +		os=-dicos +		;; +        -nacl*) +	        ;;  	-none)  		;;  	*) @@ -1428,6 +1500,15 @@ case $basic_machine in          c4x-* | tic4x-*)          	os=-coff  		;; +	tic54x-*) +		os=-coff +		;; +	tic55x-*) +		os=-coff +		;; +	tic6x-*) +		os=-coff +		;;  	# This must come before the *-dec entry.  	pdp10-*)  		os=-tops20 @@ -1585,7 +1666,7 @@ case $basic_machine in  			-sunos*)  				vendor=sun  				;; -			-aix*) +			-cnk*|-aix*)  				vendor=ibm  				;;  			-beos*) diff --git a/configure.ac b/configure.ac index da7f7692..5627fb76 100644 --- a/configure.ac +++ b/configure.ac @@ -1,7 +1,7 @@  #                                               -*- Autoconf -*-  # Process this file with autoconf to produce a configure script.  # Minimum version of autoconf required -AC_PREREQ(2.60) +AC_PREREQ(2.62)  # UPDATING VERSION NUMBERS FOR RELEASES  # @@ -70,7 +70,7 @@ AC_DEFINE_UNQUOTED([LIB_VERSION], ["$LIB_VERSION"], [libalpm version number])  # Help line for root directory  AC_ARG_WITH(root-dir, -	AS_HELP_STRING([--with-root-dir=path], [set the location of pacman's root operating directory]), +	AS_HELP_STRING([--with-root-dir=path], [set the location of the root operating directory]),  	[ROOTDIR=$withval], [ROOTDIR=/])  # Help line for package extension @@ -83,20 +83,20 @@ AC_ARG_WITH(src-ext,  	AS_HELP_STRING([--with-src-ext=ext], [set the file extension used by source packages]),  	[SRCEXT=$withval], [SRCEXT=.src.tar.gz]) -# Help line for database extension -AC_ARG_WITH(db-ext, -	AS_HELP_STRING([--with-db-ext=ext], [set the file extension used by the database]), -	[DBEXT=$withval], [DBEXT=.db.tar.gz]) -  # Help line for buildscript filename  AC_ARG_WITH(buildscript,  	AS_HELP_STRING([--with-buildscript=name], [set the build script name used by makepkg]),  	[BUILDSCRIPT=$withval], [BUILDSCRIPT=PKGBUILD]) +# Help line for using OpenSSL +AC_ARG_WITH(openssl, +	AS_HELP_STRING([--with-openssl], [use OpenSSL crypto implementations instead of internal routines]), +	[], [with_openssl=check]) +  # Help line for libfetch -AC_ARG_ENABLE(internal-download, -	AS_HELP_STRING([--disable-internal-download], [do not build with libfetch support]), -	[internaldownload=$enableval], [internaldownload=yes]) +AC_ARG_WITH(fetch, +	AS_HELP_STRING([--with-fetch], [use libfetch as an internal downloader]), +	[], [with_fetch=check])  # Help line for documentation  AC_ARG_ENABLE(doc, @@ -127,35 +127,54 @@ AC_PROG_LN_S  AC_PROG_MAKE_SET  AC_PROG_LIBTOOL  AC_CHECK_PROGS([PYTHON], [python2.7 python2.6 python2.5 python2 python], [false]) +AC_PATH_PROGS([BASH_SHELL], [bash bash4 bash3], [false])  # find installed gettext  AM_GNU_GETTEXT([external])  AM_GNU_GETTEXT_VERSION(0.13.1) +# Check for lm +AC_CHECK_LIB([m], [ceil]) +  # Check for libarchive  AC_CHECK_LIB([archive], [archive_read_data], ,  	AC_MSG_ERROR([libarchive is needed to compile pacman!])) +# Check for OpenSSL +AC_MSG_CHECKING(whether to link with libssl) +AS_IF([test "x$with_openssl" != "xno"], +	[AC_MSG_RESULT(yes) +	AC_CHECK_LIB([ssl], [MD5_Final], , +	[if test "x$with_openssl" != "xcheck"; then +		AC_MSG_FAILURE([--with-openssl was given, but -lssl was not found]) +	fi], +	[-lcrypto])], +	AC_MSG_RESULT(no)) +AM_CONDITIONAL([HAVE_LIBSSL], [test "x$ac_cv_lib_ssl_MD5_Final" = "xyes"]) +  # Enable or disable usage of libfetch  AC_MSG_CHECKING(whether to link with libfetch) -if test "x$internaldownload" = "xyes" ; then -	AC_MSG_RESULT(yes) -	AC_DEFINE([INTERNAL_DOWNLOAD], , [Use internal download library]) -	# Check for a download library if it was actually requested +AS_IF([test "x$with_fetch" != "xno"], +	[AC_MSG_RESULT(yes)  	AC_CHECK_LIB([fetch], [fetchParseURL], , -		AC_MSG_ERROR([libfetch is needed to compile with internal download support]), [-lcrypto -ldl] ) -	# Check if libfetch supports conditional GET -	# (version >=2.21, struct url has member last_modified) -	AC_CHECK_MEMBER(struct url.last_modified, , -		AC_MSG_ERROR([libfetch must be version 2.21 or greater]), -		[#include <fetch.h>] ) -else -	AC_MSG_RESULT(no) -fi -AM_CONDITIONAL(INTERNAL_DOWNLOAD, test "x$internaldownload" = "xyes") +	[if test "x$with_fetch" != "xcheck"; then +		AC_MSG_FAILURE([--with-fetch was given, but -lfetch was not found]) +	fi], +	[-lcrypto -ldl]) +	# Check if libfetch supports connnection caching which we use +	AS_IF([test "x$ac_cv_lib_fetch_fetchParseURL" = "xyes"], +	[AC_CHECK_DECL(fetchConnectionCacheInit, , +		AC_MSG_ERROR([libfetch must be version 2.28 or greater]), +		[#include <fetch.h>]) +	]) +	], +	AC_MSG_RESULT(no)) +AM_CONDITIONAL([HAVE_LIBFETCH], [test "x$ac_cv_lib_fetch_fetchParseURL" = "xyes"])  # Checks for header files. -AC_CHECK_HEADERS([fcntl.h glob.h libintl.h limits.h locale.h string.h strings.h sys/ioctl.h sys/param.h sys/statvfs.h sys/syslimits.h sys/time.h syslog.h wchar.h]) +AC_CHECK_HEADERS([fcntl.h glob.h libintl.h locale.h mntent.h string.h \ +                  sys/ioctl.h sys/mount.h sys/param.h sys/statvfs.h \ +                  sys/time.h sys/types.h sys/ucred.h syslog.h wchar.h])  # Checks for typedefs, structures, and compiler characteristics.  AC_C_INLINE @@ -165,16 +184,19 @@ AC_TYPE_PID_T  AC_TYPE_SIZE_T  AC_STRUCT_TM  AC_TYPE_UID_T +AC_STRUCT_DIRENT_D_TYPE +PATH_MAX_DEFINED  # Checks for library functions.  AC_FUNC_FORK +AC_FUNC_GETMNTENT  AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK  AC_FUNC_MKTIME -AC_TYPE_SIGNAL -AC_CHECK_FUNCS([geteuid realpath regcomp strcasecmp \ +AC_CHECK_FUNCS([geteuid getmntinfo realpath regcomp strcasecmp \                  strndup strrchr strsep swprintf \                  wcwidth uname]) - +# For the diskspace code +FS_STATS_TYPE  # Enable large file support if available  AC_SYS_LARGEFILE @@ -305,6 +327,7 @@ if test "x$debug" = "xyes" ; then  	# Check for -fstack-protector availability  	GCC_STACK_PROTECT_LIB  	GCC_STACK_PROTECT_CC +	GCC_FORTIFY_SOURCE_CC  	CFLAGS="$CFLAGS -g -Wall -Werror"  else  	AC_MSG_RESULT(no) @@ -338,9 +361,6 @@ AC_DEFINE_UNQUOTED([PKGEXT], "$PKGEXT", [The file extension used by pacman packa  # Set source package file extension  AC_SUBST(SRCEXT)  AC_DEFINE_UNQUOTED([SRCEXT], "$SRCEXT", [The file extension used by pacman source packages]) -# Set database file extension -AC_SUBST(DBEXT) -AC_DEFINE_UNQUOTED([DBEXT], "$DBEXT", [The file extension used by pacman databases])  # Set makepkg build script name  AC_SUBST(BUILDSCRIPT)  AC_DEFINE_UNQUOTED([BUILDSCRIPT], "$BUILDSCRIPT", [The build script name used by makepkg]) @@ -393,12 +413,10 @@ ${PACKAGE_NAME}:      root working directory : ${ROOTDIR}      package extension      : ${PKGEXT}      source pkg extension   : ${SRCEXT} -    database extension     : ${DBEXT}      build script name      : ${BUILDSCRIPT}    Compilation options:      Run make in doc/ dir   : ${wantdoc} ${asciidoc} -    Use download library   : ${internaldownload}      Doxygen support        : ${usedoxygen}      debug support          : ${debug}  " diff --git a/contrib/.gitignore b/contrib/.gitignore new file mode 100644 index 00000000..91044765 --- /dev/null +++ b/contrib/.gitignore @@ -0,0 +1,9 @@ +bacman +bash_completion +pacdiff +paclist +pacscripts +pacsearch +pactree +wget-xdelta.sh +zsh_completion diff --git a/contrib/Makefile.am b/contrib/Makefile.am index c6243b16..4adc9491 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -1,15 +1,41 @@ -EXTRA_DIST = \ -	PKGBUILD.vim \ +OURFILES = \  	bacman \  	bash_completion \  	pacdiff \  	paclist \  	pacscripts \  	pacsearch \ -	pactree \ -	vimprojects \  	wget-xdelta.sh \ -	zsh_completion \ +	zsh_completion + +EXTRA_DIST = \ +	PKGBUILD.vim \ +	bacman.in \ +	bash_completion.in \ +	pacdiff.in \ +	paclist.in \ +	pacscripts.in \ +	pacsearch.in \ +	vimprojects \ +	wget-xdelta.sh.in \ +	zsh_completion.in \  	README +# Files that should be removed, but which Automake does not know. +MOSTLYCLEANFILES = $(OURFILES) *.tmp + +edit = sed \ +	-e 's|@sysconfdir[@]|$(sysconfdir)|g' \ +	-e 's|@localstatedir[@]|$(localstatedir)|g' \ +	-e 's|@BASH_SHELL[@]|$(BASH_SHELL)|g' + +$(OURFILES): Makefile +	@echo '    ' GEN $@; +	@rm -f $@ $@.tmp +	@cp -a $@.in $@.tmp +	@$(edit) $@.in >$@.tmp +	@mv $@.tmp $@ + +all-am: $(OURFILES) +  # vim:set ts=2 sw=2 noet: diff --git a/contrib/PKGBUILD.vim b/contrib/PKGBUILD.vim index c35450a0..f627a5e6 100644 --- a/contrib/PKGBUILD.vim +++ b/contrib/PKGBUILD.vim @@ -40,7 +40,7 @@ syn match pbPkgverGroup /^pkgver=.*/ contains=pbIllegalPkgver,pbValidPkgver,pb_k  " pkgrel  syn keyword pb_k_pkgrel pkgrel contained -syn match pbValidPkgrel /[[:digit:]]*/ contained contains=pbIllegalPkgver +syn match pbValidPkgrel /[[:digit:]]*/ contained contains=pbIllegalPkgrel  syn match pbIllegalPkgrel /[^[:digit:]=]\|=.*=/ contained  syn match pbPkgrelGroup /^pkgrel=.*/ contains=pbIllegalPkgrel,pbValidPkgrel,pb_k_pkgrel,shDoubleQuote,shSingleQuote @@ -52,6 +52,12 @@ syn match pbValidPkgdesc /[^='"]\.\{,80}/ contained contains=pbIllegalPkgdesc  syn match pbPkgdescGroup /^pkgdesc=.*/ contains=pbIllegalPkgdesc,pb_k_desc,pbValidPkgdesc,shDoubleQuote,shSingleQuote  syn match pbPkgdescSign /[='"]/ contained +" epoch +syn keyword pb_k_epoch epoch contained +syn match pbValidEpoch /[[:digit:]]*/ contained contains=pbIllegalEpoch +syn match pbIllegalEpoch /[^[:digit:]=]\|=.*=/ contained +syn match pbEpochGroup /^epoch=.*/ contains=pbIllegalEpoch,pbValidEpoch,pb_k_epoch,shDoubleQuote,shSingleQuote +  " url  syn keyword pb_k_url url contained  syn match pbValidUrl /['"]*\(https\|http\|ftp\)\:\/.*\.\+.*/ contained @@ -166,7 +172,7 @@ hi def link pbValidSha1sums  Number  " options  syn keyword pb_k_options options contained -syn match pbOptions /\(no\)\?\(strip\|docs\|libtool\|emptydirs\|zipman\|ccache\|distcc\|makeflags\|force\)/ contained +syn match pbOptions /\(no\)\?\(strip\|docs\|libtool\|emptydirs\|zipman\|ccache\|distcc\|makeflags\|buildflags\)/ contained  syn match   pbOptionsNeg     /\!/ contained  syn match   pbOptionsDeprec  /no/ contained  syn region pbOptionsGroup start=/^options=(/ end=/)/ contains=pb_k_options,pbOptions,pbOptionsNeg,pbOptionsDeprec,pbIllegalOption,shDoubleQuote,shSingleQuote diff --git a/contrib/README b/contrib/README index 96234722..4f591012 100644 --- a/contrib/README +++ b/contrib/README @@ -23,9 +23,6 @@ pacsearch - a colorized search combining both -Ss and -Qs output. Installed  packages are easily identified with a *** and local-only packages are also  listed. -pactree - generate a dependency tree of an installed package in textual or -graphical form (using graphviz). -  bacman - regenerate a pacman package based on installed files and the pacman  database entries. Useful for reuse, or possible config file extension. diff --git a/contrib/bacman b/contrib/bacman.in index 6dd78394..b4e3b4ba 100755 --- a/contrib/bacman +++ b/contrib/bacman.in @@ -1,4 +1,4 @@ -#!/bin/bash +#!@BASH_SHELL@  #  #   bacman: recreate a package from a running system  #   This script rebuilds an already installed package using metadata @@ -67,20 +67,20 @@ fi  #  # Setting environmental variables  # -if [ ! -r /etc/pacman.conf ]; then -    echo "ERROR: unable to read /etc/pacman.conf" +if [ ! -r @sysconfdir@/pacman.conf ]; then +    echo "ERROR: unable to read @sysconfdir@/pacman.conf"      exit 1  fi -eval $(awk '/DBPath/ {print $1$2$3}' /etc/pacman.conf) -pac_db="${DBPath:-/var/lib/pacman/}/local" +eval $(awk '/DBPath/ {print $1$2$3}' @sysconfdir@/pacman.conf) +pac_db="${DBPath:-@localstatedir@/lib/pacman/}/local" -if [ ! -r /etc/makepkg.conf ]; then -    echo "ERROR: unable to read /etc/makepkg.conf" +if [ ! -r @sysconfdir@/makepkg.conf ]; then +    echo "ERROR: unable to read @sysconfdir@/makepkg.conf"      exit 1  fi -source "/etc/makepkg.conf" +source "@sysconfdir@/makepkg.conf"  if [ -r ~/.makepkg.conf ]; then      source ~/.makepkg.conf  fi @@ -220,6 +220,9 @@ while read i; do          %REPLACES%)              echo "replaces = $i"    >> .PKGINFO          ;; +        %EPOCH%) +            echo "epoch = $i" >> .PKGINFO +        ;;          %FORCE%)              echo "force = true" >> .PKGINFO          ;; diff --git a/contrib/bash_completion b/contrib/bash_completion.in index bdc4754a..7f47f4b4 100644 --- a/contrib/bash_completion +++ b/contrib/bash_completion.in @@ -30,8 +30,7 @@ _arch_incomp() {  _makepkg() {    local cur opts prev    COMPREPLY=() -  cur=$(_get_cword) -  prev=${COMP_WORDS[COMP_CWORD-1]} +  _get_comp_words_by_ref cur prev    if [[ $cur = -* && ! $prev =~ ^-(-(cleancache|config|help)$|\w*[Chp]) ]]; then      opts=('allsource asroot clean cleancache config force geninteg help holdver             ignorearch install log nobuild nocolor noconfirm nodeps noextract @@ -55,8 +54,7 @@ _pacman_pkg() {  _pacman() {    local common core cur database prev query remove sync upgrade o    COMPREPLY=() -  cur=$(_get_cword) -  prev=${COMP_WORDS[COMP_CWORD-1]} +  _get_comp_words_by_ref cur prev    database=('asdeps asexplicit')    query=('changelog check deps explicit file foreign groups info list owns            search unrequired upgrades' 'c e g i k l m o p s t u') diff --git a/contrib/pacdiff b/contrib/pacdiff.in index 3f26f381..ac4ce893 100755 --- a/contrib/pacdiff +++ b/contrib/pacdiff.in @@ -1,4 +1,4 @@ -#!/bin/bash +#!@BASH_SHELL@  #   pacdiff : a simple pacnew/pacorig/pacsave updater  #  #   Copyright (c) 2007 Aaron Griffin <aaronmgriffin@gmail.com> diff --git a/contrib/paclist b/contrib/paclist.in index 0379a4c5..0379a4c5 100755 --- a/contrib/paclist +++ b/contrib/paclist.in diff --git a/contrib/pacscripts b/contrib/pacscripts.in index 101fb15f..d3664091 100755 --- a/contrib/pacscripts +++ b/contrib/pacscripts.in @@ -1,4 +1,4 @@ -#!/bin/bash +#!@BASH_SHELL@  #  #   pacscripts : tries to print out the {pre,post}_{install,remove,upgrade}  #   scripts of a given package @@ -27,7 +27,7 @@ set -o errexit  progname=$(basename $0)  progver="0.4" -conf="/etc/pacman.conf" +conf="@sysconfdir@/pacman.conf"  if [ ! -r "$conf" ]; then  	echo "ERROR: unable to read $conf" @@ -36,8 +36,8 @@ fi  eval $(awk '/DBPath/ {print $1$2$3}' "$conf")  eval $(awk '/CacheDir/ {print $1$2$3}' "$conf") -pac_db="${DBPath:-/var/lib/pacman}/local" -pac_cache="${CacheDir:-/var/cache/pacman/pkg}" +pac_db="${DBPath:-@localstatedir@/lib/pacman}/local" +pac_cache="${CacheDir:-@localstatedir@/cache/pacman/pkg}"  error() {  	local mesg=$1; shift diff --git a/contrib/pacsearch b/contrib/pacsearch.in index a20df265..a20df265 100755 --- a/contrib/pacsearch +++ b/contrib/pacsearch.in diff --git a/contrib/pactree b/contrib/pactree deleted file mode 100755 index 73bece3a..00000000 --- a/contrib/pactree +++ /dev/null @@ -1,321 +0,0 @@ -#!/bin/bash -# pactree : a simple dependency tree viewer -# -# Copyright (C) 2008 Carlo "carlocci" Bersani <carlocci@gmail.com> -# -# This program 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, see <http://www.gnu.org/licenses/>. - -# Original http://carlocci.ngi.it/arch/pactree -# Credit to scj for the graphviz idea - -# set the colors -branch1_color="\033[0;33m"    #Brown -branch2_color="\033[0;37m"    #Gray -leaf_color="\033[1;32m"       #Light green -leaf2_color="\033[0;32m"      #Green - -# set the separators -separator="   " -branch_tip1="|--" -branch_tip2="+--" -provides="provides " - -# set the graphviz options -# http://www.graphviz.org/doc/info/output.html for available output formats -# http://www.graphviz.org/doc/info/colors.html for available colors -gformat="png"                 #output format -start_color="red"             #START color -nodes_color="green"           #color of the nodes -arrow1_color="chocolate4"     #color of the normal arrow -arrow2_color="grey"           #color of the "provided by" headless arrow - -readonly prog_name="pactree" -readonly prog_ver="0.3" - -_usage(){ -	echo "This program generates the dependency tree of an installed package" -	echo "Usage:   $prog_name [OPTIONS] <installed packages>" -	echo -	echo " OPTIONS:" -	echo "  -c, --color                Enable color output" -	echo "  -d, --depth INT            Limit the shown dependencies depth" -	echo "  -g, --graph                Use graphviz to make an image of the tree" -	echo "  -l, --linear               Enable linear output" -	echo "  -r, --reversed             Show reversed dependancies" -	echo "  -s, --silent               Shh, let me hear those errors!" -	echo "  -u, --unique               Print the dependency list with no duplicates" -	echo -	echo "  -h, --help                 Print this help message" -	echo "  -v, --version              Print the program name and version" -	echo -	echo "Example: $prog_name -c -d2 readline" -} - -_version(){ -	echo "$prog_name version $prog_ver" -	echo "Copyright (C) 2008 Carlo \"carlocci\" Bersani <carlocci@gmail.com>" -} -# end of the friendliness - - -# grab a field from the database: $1=path/to/file, $2=field to grab -_grabfield(){ -	for line in $(cat "$1" 2>/dev/null ); do -		if [ -z "$line" ]; then -			continue; -		fi; -		if [[ "$line" =~ %[A-Z]*% ]]; then -			current="$line" -			continue; -		fi; -		if [ "$current" = "$2" ]; then -			echo "$line" -		fi; -	done -} - - -# find a dep in the db: $1=dep, $2=field, $3=dbfile, ret=file list -_finddep(){ -	for line in $(awk 'BEGIN{RS=""} -	                   { -	                   if ($1=="'"$2"'"){ -	                     for (i=2 ; i<=NF ; ++i){ -	                       if ($i ~ /^'"$1"'([<>=]+.*|)$/ ){ -	                         print FILENAME} -	                       } -	                     } -	                   }' $(find $pac_db -name $3)); do -		echo "${line%/*}" -	done -} - - -# Recursive function: does all of the work, pays all of the taxes     # -_tree(){ -	pkg_name="$1" -	pkg_dirs="$(echo $pac_db/$pkg_name-[0-9]*)" - -	# Is $pkg_name real or provided? -	[ ! -d "$pkg_dirs" ] && pkg_dirs="$(_finddep $pkg_name %PROVIDES% depends)" - -	for pkg_dir in $pkg_dirs ; do -		spaces="$2" -		unset provided -		branch_tip="$branch_tip1" -		branch_color="$branch1_color" -		pkg_name="$(_grabfield "$pkg_dir/desc" %NAME%)" -		if [ ! "$pkg_name" = "$1" ]; then -			provided="$leaf2_color $provides$leaf_color$1" -			branch_tip="$branch_tip2" -			branch_color="$branch2_color" -			if [ $graphviz -eq 1 ] && [[ ! "${dep_list[@]}" =~ _$1_ ]] && [ $spaces -ne $((max_depth+1)) ]; then -				echo "\"$1\" -> \"$pkg_name\" [arrowhead=none, color=$arrow2_color];" -				dep_list=( "${dep_list[@]}" "_$1_" ) -				_tree "$pkg_name" $((spaces+1)) -				continue -			fi -		fi - -		# Generate the spacer -		spacer="" -		for each in $(seq 1 $spaces); do -			spacer="$spacer$separator" -		done -		spacer="$spacer$branch_tip" - -		[ $silent -ne 1 ] &&	echo -e "$branch_color$spacer$leaf_color$pkg_name$provided" - -		[ ! -d "$pkg_dir" ] && echo "No $pkg_name in the database (inconsistent database?)" >&2 - -		if [[ ! " ${dep_list[@]} " =~ " $pkg_name " ]] && [ $spaces -ne $max_depth ]; then -			dep_list=( "${dep_list[@]}" "$pkg_name" ) -			if [ $reversed_dep -eq 0 ]; then -				deps_pkg="$(_grabfield "$pkg_dir/depends" %DEPENDS%)" -			else -				reqs_pkg_dir="$(_finddep "$pkg_name" %DEPENDS% depends)" -				unset deps_pkg -				for req_pkg_dir in $reqs_pkg_dir; do -					deps_pkg=$(echo "$deps_pkg" "$(_grabfield "$req_pkg_dir/desc" %NAME%)") -				done -			fi -			for dep_pkg in $deps_pkg; do -				spaces=$2		#Bash scoping ;_; -				if [ $graphviz -eq 1 ]; then -					echo "\"$1\" -> \"${dep_pkg%%[<>=]*}\" [color=$arrow1_color];" -				fi -				_tree "${dep_pkg%%[<>=]*}" $((spaces+1)) -			done -		fi -	done -} - - -# Main program: gets all of the money, pays none of the taxes - -# Command line parameters parser -if [ $# -eq 0 ]; then -	_usage -	exit 1 -fi - -options=( "$@" ) -len_options=${#options[@]} -for (( n=0 ; n < $len_options ; n++ )); do -	if [ "${options[$n]}" = "--" ]; then -		unset options[$n] -		break -	fi -	if [ "${options[$n]}" = "-h" -o "${options[$n]}" = "--help" ]; then -		_usage -		exit 0 -	fi - -	if [ "${options[$n]}" = "-v" -o "${options[$n]}" = "--version" ]; then -		_version -		exit 0 -	fi - -	if [ "${options[$n]}" = "-l" -o "${options[$n]}" = "--linear" ]; then -		unset options[$n] -		linear=1 -		continue -	fi - -	if [ "${options[$n]}" = "-s" -o "${options[$n]}" = "--silent" ]; then -		unset options[$n] -		silent=1 -		continue -	fi - -	if [ "${options[$n]}" = "-u" -o "${options[$n]}" = "--unique" ]; then -		unset options[$n] -		silent=1 -		nodup=1 -		continue -	fi - -	if [ "${options[$n]}" = "-g" -o "${options[$n]}" = "--graph" ]; then -		unset options[$n] -		graphviz=1 -		continue -	fi - -	if [ "${options[$n]}" = "-c" -o "${options[$n]}" = "--color" ]; then -		unset options[$n] -		colored=1 -		continue -	fi - -	if [ "${options[$n]}" = "-r" -o "${options[$n]}" = "--reversed" ]; then -		unset options[$n] -		reversed_dep=1 -		continue -	fi - -	if [[ "${options[$n]}" =~ -d[[:digit:]]+ || "${options[$n]}" == "--depth" ]]; then -		if [[ "${options[$n]#-d}" =~ [[:digit:]]+ ]]; then -			max_depth="${options[$n]#-d}" -		elif [[ ${options[$((n+1))]} =~ [[:digit:]]+ ]]; then -			max_depth="${options[$((n+1))]}" -			unset options[$((n+1))] -			((++n)) -		fi -		unset options[$n] -		continue -	fi -done -# End of the dumb command line parser - -# Env -colored=${colored:-0} -max_depth=${max_depth:--10} -linear=${linear:-0} -silent=${silent:-0} -nodup=${nodup:-0} -graphviz=${graphviz:-0} -reversed_dep=${reversed_dep:-0} - -if [ $colored -ne 1 ]; then -	unset branch1_color -	unset leaf_color -	unset leaf2_color -	unset branch2_color -fi - -if [ $linear -eq 1 ]; then -	unset separator -	unset branch_tip1 -	unset branch_tip2 -	unset provides -fi - -if [ $graphviz -eq 1 ]; then -	silent=1 -	nodup=0 -	if [ ! -f /usr/bin/dot ]; then -		echo "ERROR: package graphviz is not installed" -		echo "       Run pacman -S graphviz to install it" -		exit 1 -	fi -fi - -if [ ! -r /etc/pacman.conf ]; then -	echo "ERROR: unable to read /etc/pacman.conf" -	exit 1 -else -	eval $(awk '/DBPath/ {print $1$2$3}' /etc/pacman.conf) -fi - -pac_db="${DBPath:-/var/lib/pacman}/local" - -if [ ! -d "$pac_db" ] ; then -	echo "ERROR: pacman database directory ${pac_db} not found" -	exit 1 -fi -# Env End - - -# Program starts -_main(){ -	for pkg_name in ${options[@]} ; do -		[ $graphviz -eq 1 ] && echo -e "\"START\" -> \"$pkg_name\" ;" -		_tree "$pkg_name" 0 -		if [ $nodup -eq 1 ]; then -			for pkg_tree in ${dep_list[@]} ; do -				echo "$pkg_tree" -			done -		fi -	done -	if [ $silent -eq 0 ]; then -		echo -ne '\033[0m' # return colors to normal? -		echo -ne '\033[?25h' #return cursor to normal? -	fi -} - - -if [ $graphviz -eq 1 ]; then -	root_pkgs="${options[@]}" -	# Uncomment for the "generated by pactree" node in graphviz -	#advert="xyz [height=0.07, fontsize=8.0, label=\"GENERATED WITH PACTREE\",shape=box,color="black",style=filled,fontcolor="white"];\n" -	if [ $reversed_dep -eq 0 ]; then -		file_extension="deps.$gformat" -	else -		file_extension="reqs.$gformat" -	fi -	echo -e "digraph G { START [color=$start_color, style=filled];\n node [style=filled, color=$nodes_color];\n$(_main)\n$advert}" | dot -T$gformat -o "${root_pkgs// /_}.$file_extension" -else _main -fi - -# vim: set ts=2 sw=2 noet: diff --git a/contrib/wget-xdelta.sh b/contrib/wget-xdelta.sh.in index 4656f4dd..f2ac1c87 100755 --- a/contrib/wget-xdelta.sh +++ b/contrib/wget-xdelta.sh.in @@ -1,7 +1,7 @@ -#!/bin/bash +#!@BASH_SHELL@ -if [ -r "/etc/makepkg.conf" ]; then -	source /etc/makepkg.conf +if [ -r "@sysconfdir@/makepkg.conf" ]; then +	source @sysconfdir@/makepkg.conf  else  	echo "wget-xdelta: Unable to find makepkg.conf"  	exit 1 @@ -30,11 +30,11 @@ new_version=$(echo $pkg_data | cut -d ' ' -f 2)  base_url=${file_url%/*}  # Look for the last version -for file in $(ls -r /var/cache/pacman/pkg/${pkgname}-*-*{,-$CARCH}$PKGEXT 2>/dev/null); do +for file in $(ls -r @localstatedir@/cache/pacman/pkg/${pkgname}-*-*{,-$CARCH}$PKGEXT 2>/dev/null); do  	[[ "$file" =~ "$CARCH" ]] && arch="-$CARCH" || arch=""  	check_version=$(echo $file | \  		sed "s|^.*/${pkgname}-\([[:alnum:]_\.]*-[[:alnum:]_\.]*\)${arch}$PKGEXT$|\1|" | \ -		grep -v "^/var/cache/pacman/pkg") +		grep -v "^@localstatedir@/cache/pacman/pkg")  	[ "$check_version" = "" ] && continue diff --git a/contrib/zsh_completion b/contrib/zsh_completion.in index f69fe631..16919134 100644 --- a/contrib/zsh_completion +++ b/contrib/zsh_completion.in @@ -222,20 +222,20 @@ _pacman_completions_all_groups() {  _pacman_completions_all_packages() {  	local -a cmd packages repositories packages_long -	repositories=(${(o)${${${(M)${(f)"$(</etc/pacman.conf)"}:#\[*}/\[/}/\]/}:#options}) +	repositories=(${(o)${${${(M)${(f)"$(<@sysconfdir@/pacman.conf)"}:#\[*}/\[/}/\]/}:#options})  	typeset -U repositories -	packages_long=(/var/lib/pacman/sync/${^repositories}/*(/)) -	packages=(${(o)${${packages_long/\/var\/lib\/pacman\/sync\//}#*/}%-*-*} ) +	packages_long=(@localstatedir@/lib/pacman/sync/${^repositories}/*(/)) +	packages=(${(o)${${packages_long#@localstatedir@/lib/pacman/sync/}#*/}%-*-*} )  	typeset -U packages  	_wanted packages expl "packages" compadd - "${(@)packages}"  	if [[ $PREFIX != */* ]] ; then -		repositories=(${(o)${${${(M)${(f)"$(</etc/pacman.conf)"}:#\[*}/\[/}/\]/}:#options}) +		repositories=(${(o)${${${(M)${(f)"$(<@sysconfdir@/pacman.conf)"}:#\[*}/\[/}/\]/}:#options})  		typeset -U repositories  		_wanted repo_packages expl "repository/package" compadd -S "/" $repositories  	else  		compset -P '*/' -		packages_long=(/var/lib/pacman/sync/$IPREFIX*(/)) -		packages=(${(o)${${packages_long/\/var\/lib\/pacman\/sync\//}#*/}%-*-*} ) +		packages_long=(@localstatedir@/lib/pacman/sync/$IPREFIX*(/)) +		packages=(${(o)${${packages_long#@localstatedir@/lib/pacman/sync/}#*/}%-*-*} )  		typeset -U packages  		_wanted repo_packages expl "repository/package" compadd ${(@)packages}  	fi @@ -253,15 +253,15 @@ _pacman_completions_installed_groups() {  # provides completions for installed packages  _pacman_completions_installed_packages() {  	local -a cmd packages packages_long -	packages_long=(/var/lib/pacman/local/*(/)) -	packages=( ${${packages_long/\/var\/lib\/pacman\/local\//}%-*-*} ) +	packages_long=(@localstatedir@/lib/pacman/local/*(/)) +	packages=( ${${packages_long#@localstatedir@/lib/pacman/local/}%-*-*} )  	compadd "$@" -a packages  }  # provides completions for repository names  _pacman_completions_repositories() {  	local -a cmd repositories -	repositories=(${(o)${${${(M)${(f)"$(</etc/pacman.conf)"}:#\[*}/\[/}/\]/}:#options}) +	repositories=(${(o)${${${(M)${(f)"$(<@sysconfdir@/pacman.conf)"}:#\[*}/\[/}/\]/}:#options})  	# Uniq the array  	typeset -U repositories  	compadd "$@" -a repositories @@ -1,10 +1,10 @@  #! /bin/sh  # depcomp - compile a program generating dependencies as side-effects -scriptversion=2006-10-15.18 +scriptversion=2009-04-28.21; # UTC -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software -# Foundation, Inc. +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free +# Software Foundation, Inc.  # This program is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License as published by @@ -17,9 +17,7 @@ scriptversion=2006-10-15.18  # 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., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. +# along with this program.  If not, see <http://www.gnu.org/licenses/>.  # As a special exception to the GNU General Public License, if you  # distribute this file as part of a program that contains a @@ -87,6 +85,15 @@ if test "$depmode" = dashXmstdout; then     depmode=dashmstdout  fi +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then +   # This is just like msvisualcpp but w/o cygpath translation. +   # Just convert the backslash-escaped backslashes to single forward +   # slashes to satisfy depend.m4 +   cygpath_u="sed s,\\\\\\\\,/,g" +   depmode=msvisualcpp +fi +  case "$depmode" in  gcc3)  ## gcc 3 implements dependency tracking that does exactly what @@ -192,14 +199,14 @@ sgi)  ' < "$tmpdepfile" \      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \      tr ' -' ' ' >> $depfile -    echo >> $depfile +' ' ' >> "$depfile" +    echo >> "$depfile"      # The second pass generates a dummy entry for each header file.      tr ' ' '  ' < "$tmpdepfile" \     | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ -   >> $depfile +   >> "$depfile"    else      # The sourcefile does not contain any dependencies, so just      # store a dummy comment line, to avoid errors with the Makefile @@ -215,34 +222,39 @@ aix)    # current directory.  Also, the AIX compiler puts `$object:' at the    # start of each line; $object doesn't have directory information.    # Version 6 uses the directory in both cases. -  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` -  tmpdepfile="$stripped.u" +  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` +  test "x$dir" = "x$object" && dir= +  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`    if test "$libtool" = yes; then +    tmpdepfile1=$dir$base.u +    tmpdepfile2=$base.u +    tmpdepfile3=$dir.libs/$base.u      "$@" -Wc,-M    else +    tmpdepfile1=$dir$base.u +    tmpdepfile2=$dir$base.u +    tmpdepfile3=$dir$base.u      "$@" -M    fi    stat=$? -  if test -f "$tmpdepfile"; then : -  else -    stripped=`echo "$stripped" | sed 's,^.*/,,'` -    tmpdepfile="$stripped.u" -  fi -    if test $stat -eq 0; then :    else -    rm -f "$tmpdepfile" +    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"      exit $stat    fi +  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" +  do +    test -f "$tmpdepfile" && break +  done    if test -f "$tmpdepfile"; then -    outname="$stripped.o"      # Each line is of the form `foo.o: dependent.h'.      # Do two passes, one to just change these to      # `$object: dependent.h' and one to simply `dependent.h:'. -    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" -    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" +    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" +    # That's a tab and a space in the []. +    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"    else      # The sourcefile does not contain any dependencies, so just      # store a dummy comment line, to avoid errors with the Makefile @@ -323,7 +335,12 @@ hp2)    if test -f "$tmpdepfile"; then      sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"      # Add `dependent.h:' lines. -    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" +    sed -ne '2,${ +	       s/^ *// +	       s/ \\*$// +	       s/$/:/ +	       p +	     }' "$tmpdepfile" >> "$depfile"    else      echo "#dummy" > "$depfile"    fi @@ -399,7 +416,7 @@ dashmstdout)    # Remove the call to Libtool.    if test "$libtool" = yes; then -    while test $1 != '--mode=compile'; do +    while test "X$1" != 'X--mode=compile'; do        shift      done      shift @@ -450,32 +467,39 @@ makedepend)    "$@" || exit $?    # Remove any Libtool call    if test "$libtool" = yes; then -    while test $1 != '--mode=compile'; do +    while test "X$1" != 'X--mode=compile'; do        shift      done      shift    fi    # X makedepend    shift -  cleared=no -  for arg in "$@"; do +  cleared=no eat=no +  for arg +  do      case $cleared in      no)        set ""; shift        cleared=yes ;;      esac +    if test $eat = yes; then +      eat=no +      continue +    fi      case "$arg" in      -D*|-I*)        set fnord "$@" "$arg"; shift ;;      # Strip any option that makedepend may not understand.  Remove      # the object too, otherwise makedepend will parse it as a source file. +    -arch) +      eat=yes ;;      -*|$object)        ;;      *)        set fnord "$@" "$arg"; shift ;;      esac    done -  obj_suffix="`echo $object | sed 's/^.*\././'`" +  obj_suffix=`echo "$object" | sed 's/^.*\././'`    touch "$tmpdepfile"    ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"    rm -f "$depfile" @@ -495,7 +519,7 @@ cpp)    # Remove the call to Libtool.    if test "$libtool" = yes; then -    while test $1 != '--mode=compile'; do +    while test "X$1" != 'X--mode=compile'; do        shift      done      shift @@ -533,13 +557,27 @@ cpp)  msvisualcpp)    # Important note: in order to support this mode, a compiler *must* -  # always write the preprocessed file to stdout, regardless of -o, -  # because we must use -o when running libtool. +  # always write the preprocessed file to stdout.    "$@" || exit $? + +  # Remove the call to Libtool. +  if test "$libtool" = yes; then +    while test "X$1" != 'X--mode=compile'; do +      shift +    done +    shift +  fi +    IFS=" "    for arg    do      case "$arg" in +    -o) +      shift +      ;; +    $object) +      shift +      ;;      "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")  	set fnord "$@"  	shift @@ -552,16 +590,23 @@ msvisualcpp)  	;;      esac    done -  "$@" -E | -  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" +  "$@" -E 2>/dev/null | +  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"    rm -f "$depfile"    echo "$object : \\" > "$depfile" -  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile" +  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"    echo "	" >> "$depfile" -  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" +  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"    rm -f "$tmpdepfile"    ;; +msvcmsys) +  # This case exists only to let depend.m4 do its work.  It works by +  # looking at the text of this script.  This case will never be run, +  # since it is checked for above. +  exit 1 +  ;; +  none)    exec "$@"    ;; @@ -580,5 +625,6 @@ exit 0  # eval: (add-hook 'write-file-hooks 'time-stamp)  # time-stamp-start: "scriptversion="  # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC"  # End: diff --git a/doc/Makefile.am b/doc/Makefile.am index c2391b71..6405cf01 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -96,6 +96,7 @@ ASCIIDOC_OPTS = \  	-a pacman_version="$(REAL_PACKAGE_VERSION)" \  	-a pacman_date="`date +%Y-%m-%d`" \  	-a pkgdatadir=$(pkgdatadir) \ +	-a localstatedir=$(localstatedir) \  	-a sysconfdir=$(sysconfdir)  A2X_OPTS = \ diff --git a/doc/PKGBUILD.5.txt b/doc/PKGBUILD.5.txt index 8bdb3c69..e6c4a1fb 100644 --- a/doc/PKGBUILD.5.txt +++ b/doc/PKGBUILD.5.txt @@ -50,7 +50,7 @@ similar to `$_basekernver`.  *pkgrel*::  	This is the release number specific to the Arch Linux release. This  	allows package maintainers to make updates to the package's configure -	flags, for example. A pkgrel of 1 is typically used for each upstream +	flags, for example. A pkgrel of '1' is typically used for each upstream  	software release and is incremented for intermediate PKGBUILD updates. The  	variable is not allowed to contain hyphens. @@ -58,6 +58,15 @@ similar to `$_basekernver`.  	This should be a brief description of the package and its functionality.  	Try to keep the description to one line of text. +*epoch*:: +	Used to force the package to be seen as newer than any previous versions +	with a lower epoch, even if the version number would normally not trigger +	such an upgrade. This value is required to be a positive integer; the +	default value if left unspecified is '0'. This is useful when the version +	numbering scheme of a package changes (or is alphanumeric), breaking normal +	version comparison logic. See linkman:pacman[8] for more information on +	version comparisons. +  *url*::  	This field contains a URL that is associated with the software being  	packaged. This is typically the project's website. @@ -147,6 +156,12 @@ name. The syntax is: `source=('filename::url')`.  	needed at runtime. Packages in this list follow the same format as  	depends. +*checkdepends (array)*:: +	An array of packages that this package depends on to run its test suite, +	but are not needed at runtime. Packages in this list follow the same +	format as depends. These dependencies are only considered when the +	check() function is present and is to be run by makepkg. +  *optdepends (array)*::  	An array of packages (and accompanying reasons) that are not essential for  	base functionality, but may be necessary to make full use of the contents @@ -186,8 +201,8 @@ name. The syntax is: `source=('filename::url')`.  	in the options array. To reverse the default behavior, place an ``!'' at  	the front of the option. Only specify the options you specifically want  	to override, the rest will be taken from linkman:makepkg.conf[5]. -	*NOTE:* 'force' is a special option only used in a linkman:PKGBUILD[5], -	do not use it unless you know what you are doing. +	*NOTE:* 'force' is a now-removed option in favor of the top level 'epoch' +	variable.  	*strip*;;  		Strip symbols from binaries and libraries. If you frequently @@ -218,19 +233,18 @@ name. The syntax is: `source=('filename::url')`.  		form `!distcc` with select packages that have problems building  		with distcc. +	*buildflags*;; +		Allow the use of user-specific buildflags (CFLAGS, CXXFLAGS, LDFLAGS) +		during build as specified in linkman:makepkg.conf[5]. More useful in +		its negative form `!buildflags` with select packages that have problems +		building with custom buildflags. +  	*makeflags*;;  		Allow the use of user-specific makeflags during build as specified  		in linkman:makepkg.conf[5]. More useful in its negative form  		`!makeflags` with select packages that have problems building with  		custom makeflags such as `-j2` (or higher). -	*force*;; -		Force the package to be upgraded by a pacman system upgrade -		operation, even if the version number would normally not trigger -		such an upgrade. This is useful when the version numbering scheme -		of a package changes (or is alphanumeric). See linkman:pacman[8] for -		more information on version comparisons. -  build() Function  ---------------- @@ -261,10 +275,18 @@ If you create any variables of your own in the build function, it is  recommended to use the bash `local` keyword to scope the variable to inside  the build function. +check() Function +---------------- +An optional check() function can be specified in which a packages test-suite +may be run. This function is run between the build() and package() functions. +The function is run in `bash -e` mode, meaning any command that exits with a +non-zero status will cause the function to exit. Be sure any exotic commands +used are covered by `checkdepends`. +  package() Function  ------------------  An optional package() function can be specified in addition to the build() -function. This function is run immediately after the build() function. The +function. This function is run after the build() and check() functions. The  function is run in `bash -e` mode, meaning any command that exits with a  non-zero status will cause the function to exit. When specified in combination  with the fakeroot BUILDENV option in linkman:makepkg.conf[5], fakeroot usage diff --git a/doc/makepkg.8.txt b/doc/makepkg.8.txt index a2fdb3f3..3b83015e 100644 --- a/doc/makepkg.8.txt +++ b/doc/makepkg.8.txt @@ -53,7 +53,7 @@ Options  	in linkman:makepkg.conf[5].  *--config* <`/path/to/config`>:: -	Use an alternate config file instead of the `/etc/makepkg.conf` default; +	Use an alternate config file instead of the `{sysconfdir}/makepkg.conf` default;  *-d, \--nodeps*::  	Do not perform any dependency checks. This will let you override and @@ -153,6 +153,13 @@ Options  	Only build listed packages from a split package. The use of quotes is  	necessary when specifying multiple packages. e.g. `--pkg "pkg1 pkg3"` +*\--check*:: +	Run the check() function in the PKGBUILD, overriding the setting in +	linkman:makepkg.conf[5]. + +*\--nocheck*:: +	Do not run the check() function in the PKGBUILD or handle the checkdepends. +  *\--noconfirm*::  	(Passed to pacman) Prevent pacman from waiting for user input before  	proceeding with operations. diff --git a/doc/makepkg.conf.5.txt b/doc/makepkg.conf.5.txt index 753b1792..020804cb 100644 --- a/doc/makepkg.conf.5.txt +++ b/doc/makepkg.conf.5.txt @@ -93,6 +93,11 @@ Options  		be disabled for individual packages by placing `!ccache` in the  		PKGBUILD options array. +	*check*;; +		Run the check() function if present in the PKGBUILD. This can be +		enabled or disabled for individual packages through the use of +		makepkg's `--check` and `--nocheck` options respectively. +  **DISTCC_HOSTS=**"host1 ..."::  	If using DistCC, this is used to specify a space-delimited list of hosts  	running in the DistCC cluster. In addition, you will want to modify your @@ -160,13 +165,6 @@ Options  	that are located in opt/, you may need to add the directory to this  	array. *NOTE:* Do not add the leading slash to the directory name. -**STRIP_DIRS=(**bin lib sbin usr/{bin,lib} ...**)**:: -	If `strip` is specified in the OPTIONS array, this variable will -	instruct makepkg where to look to for files to strip. If you build -	packages that are located in opt/, you may need to add the directory -	to this array. *NOTE:* Do not add the leading slash to the directory -	name. -  **PURGE_TARGETS=(**usr/{,share}/info/dir .podlist *.pod...**)**::  	If `purge` is specified in the OPTIONS array, this variable will  	instruct makepkg which files to remove from the package. This is @@ -192,10 +190,11 @@ Options  	This value is used when querying a package to see who was the builder.  	It is recommended you change this to your name and email address. -*PKGEXT*, *SRCEXT*:: +**PKGEXT=**".pkg.tar.gz", **SRCEXT=**".src.tar.gz":: +	Sets the compression used when making compiled or source packages. The +	current valid suffixes are `.tar`, `.tar.gz`, `.tar,bz2` and `.tar.xz`.  	Do not touch these unless you know what you are doing. -  See Also  --------  linkman:makepkg[8], linkman:pacman[8], linkman:PKGBUILD[5] diff --git a/doc/pacman.8.txt b/doc/pacman.8.txt index 3d14a42a..2b47a88c 100644 --- a/doc/pacman.8.txt +++ b/doc/pacman.8.txt @@ -79,6 +79,9 @@ to determine which packages need upgrading. This behavior operates as follows:      1.0a < 1.0alpha < 1.0b < 1.0beta < 1.0p < 1.0pre < 1.0rc < 1.0    Numeric:      1 < 1.0 < 1.1 < 1.1.1 < 1.2 < 2.0 < 3.0.0 ++ +Additionally, packages can have an 'epoch' value defined that will override any +version comparison and force an upgrade.  *-T, \--deptest*::  	Check dependencies; this is useful in scripts such as makepkg to check @@ -104,35 +107,12 @@ to determine which packages need upgrading. This behavior operates as follows:  Options  ------- -*\--asdeps*:: -	Install packages non-explicitly; in other words, fake their install reason -	to be installed as a dependency. This is useful for makepkg and other -	build from source tools that need to install dependencies before building -	the package. - -*\--asexplicit*:: -	Install packages explicitly; in other words, fake their install reason to -	be explicitly installed. This is useful if you want to mark a dependency -	as explicitly installed so it will not be removed by the '\--recursive' -	remove operation. -  *-b, \--dbpath* <'path'>::  	Specify an alternative database location (a typical default is -	``/var/lib/pacman'').  This should not be used unless you know what you are +	``{localstatedir}/lib/pacman'').  This should not be used unless you know what you are  	doing. *NOTE*: if specified, this is an absolute path and the root path is  	not automatically prepended. -*-d, \--nodeps*:: -	Skips all dependency checks. Normally, pacman will always check a -	package's dependency fields to ensure that all dependencies are -	installed and there are no package conflicts in the system. - -*-f, \--force*:: -	Bypass file conflict checks and overwrite conflicting files. If the -	package that is about to be installed contains files that are already -	installed, this option will cause all those files to be overwritten. -	This option should be used with care, ideally not at all. -  *-r, \--root* <'path'>::  	Specify an alternative installation root (default is ``/''). This should  	not be used as a way to install software into ``/usr/local'' instead of @@ -145,19 +125,22 @@ Options  *-v, \--verbose*::  	Output paths such as as the Root, Conf File, DB Path, Cache Dirs, etc. -*\--debug*:: -	Display debug messages. When reporting bugs, this option is recommended -	to be used. +*\--arch* <'arch'>:: +	Specify an alternate architecture.  *\--cachedir* <'dir'>::  	Specify an alternative package cache location (a typical default is -	``/var/cache/pacman/pkg''). Multiple cache directories can be specified, +	``{localstatedir}/cache/pacman/pkg''). Multiple cache directories can be specified,  	and they are tried in the order they are passed to pacman. *NOTE*: this  	is an absolute path, the root path is not automatically prepended.  *\--config* <'file'>::  	Specify an alternate configuration file. +*\--debug*:: +	Display debug messages. When reporting bugs, this option is recommended +	to be used. +  *\--logfile* <'file'>::  	Specify an alternate log file. This is an absolute path, regardless of  	the installation root setting. @@ -166,6 +149,16 @@ Options  	Bypass any and all ``Are you sure?'' messages. It's not a good idea to do  	this unless you want to run pacman from a script. +Transaction Options (apply to '-S', '-R' and '-U') +-------------------------------------------------- +*-d, \--nodeps*:: +	Skips all dependency checks. Normally, pacman will always check a +	package's dependency fields to ensure that all dependencies are +	installed and there are no package conflicts in the system. + +*-k, \--dbonly*:: +	Adds/Removes the database entry only, leaves all files in place. +  *\--noprogressbar*::  	Do not show a progress bar when downloading files. This can be useful  	for scripts that call pacman and capture the output. @@ -174,19 +167,46 @@ Options  	If an install scriptlet exists, do not execute it. Do not use this  	unless you know what you are doing. -*\--arch* <'arch'>:: -	Specify an alternate architecture. -  *-p, \--print*::  	Only print the targets instead of performing the actual operation (sync, -	remove or upgrade).  Use '\--print-format' to specify how targets are -	displayed.  The default format string is "%l", which displays url with '-S', -	filename with '-U' and pkgname-pkgver with '-R'. +	remove or upgrade). Use '\--print-format' to specify how targets are +	displayed. The default format string is "%l", which displays url with +	'-S', filename with '-U' and pkgname-pkgver with '-R'.  *\--print-format* <'format'>::  	Specify a printf-like format to control the output of the '\--print' -	operation.  The possible are attributes are : %n for pkgname, %v for pkgver, %l -	for location, %r for repo and %s for size. +	operation. The possible are attributes are : %n for pkgname, %v for pkgver, +	%l for location, %r for repo and %s for size. + +Upgrade Options (apply to 'S' and 'U')[[UO]] +-------------------------------------------- +*-f, \--force*:: +	Bypass file conflict checks and overwrite conflicting files. If the +	package that is about to be installed contains files that are already +	installed, this option will cause all those files to be overwritten. +	This option should be used with care, ideally not at all. + +*\--asdeps*:: +	Install packages non-explicitly; in other words, fake their install reason +	to be installed as a dependency. This is useful for makepkg and other +	build from source tools that need to install dependencies before building +	the package. + +*\--asexplicit*:: +	Install packages explicitly; in other words, fake their install reason to +	be explicitly installed. This is useful if you want to mark a dependency +	as explicitly installed so it will not be removed by the '\--recursive' +	remove operation. + +*\--ignore* <'package'>:: +	Directs pacman to ignore upgrades of package even if there is one +	available. Multiple packages can be specified by separating them +	with a comma. + +*\--ignoregroup* <'group'>:: +	Directs pacman to ignore upgrades of all packages in 'group' even if +	there is one available. Multiple groups can be specified by +	separating them with a comma.  Query Options[[QO]]  ------------------- @@ -274,9 +294,6 @@ Remove Options[[RO]]  	or more target packages. This operation is recursive, and must be used  	with care since it can remove many potentially needed packages. -*-k, \--dbonly*:: -	Removes the database entry only. Leaves all files in place. -  *-n, \--nosave*::  	Instructs pacman to ignore file backup designations. Normally, when a  	file is removed from the system the database is checked to see if the @@ -365,24 +382,6 @@ linkman:pacman.conf[5].  *\--needed*::  	Don't reinstall the targets that are already up-to-date. -*\--ignore* <'package'>:: -	Directs pacman to ignore upgrades of package even if there is one -	available. Multiple packages can be specified by separating them -	with a comma. - -*\--ignoregroup* <'group'>:: -	Directs pacman to ignore upgrades of all packages in 'group' even if -	there is one available. Multiple groups can be specified by -	separating them with a comma. - - -Upgrade Options[[UO]] --------------------- -*-k, \--dbonly*:: -	Adds the database entries for the specified packages but do not install any -	of the files. On an upgrade operation, the existing package and all files -	will be removed and the database entry for the new package will be added. -  Handling Config Files[[HCF]]  ---------------------------- @@ -415,6 +414,25 @@ original=X, current=Y, new=Z::  	necessary changes into the original file. +Examples +-------- + +pacman -Ss ne.hack:: +	Search for regexp "ne.hack" in package database. + +pacman -S gpm:: +	Download and install gpm including dependencies. + +pacman -U /home/user/ceofhack-0.6-1-x86_64.pkg.tar.gz:: +	Install ceofhack-0.6-1 package from a local file. + +pacman -Syu:: +	Update package list and upgrade all packages afterwards. + +pacman -Syu gpm:: +	Update package list, upgrade all packages, and then install gpm if it +	wasn't already installed. +  Configuration  -------------  See linkman:pacman.conf[5] for more details on configuring pacman using the diff --git a/doc/pacman.conf.5.txt b/doc/pacman.conf.5.txt index 0e8426af..ae4d7484 100644 --- a/doc/pacman.conf.5.txt +++ b/doc/pacman.conf.5.txt @@ -35,7 +35,7 @@ NoUpgrade = etc/passwd etc/group etc/shadow  NoUpgrade = etc/fstab  [core] -Include = /etc/pacman.d/core +Include = {sysconfdir}/pacman.d/core  [custom]  Server = file:///home/pkgs @@ -57,13 +57,13 @@ Options  *DBPath =* path/to/db/dir::  	Overrides the default location of the toplevel database directory.  A -	typical default is ``/var/lib/pacman/''. Most users will not need to set +	typical default is ``{localstatedir}/lib/pacman/''. Most users will not need to set  	this option. *NOTE*: if specified, this is an absolute path and the root  	path is not automatically prepended.  *CacheDir =* path/to/cache/dir::  	Overrides the default location of the package cache directory. A typical -	default is ``/var/cache/pacman/pkg/''. Multiple cache directories can be +	default is ``{localstatedir}/cache/pacman/pkg/''. Multiple cache directories can be  	specified, and they are tried in the order they are listed in the config  	file. If a file is not found in any cache directory, it will be downloaded  	to the first cache directory with write access. *NOTE*: this is an absolute @@ -72,7 +72,7 @@ Options  *LogFile =* '/path/to/file'::  	Overrides the default location of the pacman log file. A typical default -	is ``/var/log/pacman.log''. This is an absolute path and the root directory +	is ``{localstatedir}/log/pacman.log''. This is an absolute path and the root directory  	is not prepended.  *HoldPkg =* package ...:: @@ -147,7 +147,7 @@ Options  *UseSyslog*::  	Log action messages through syslog(). This will insert log entries into -	``/var/log/messages'' or equivalent. +	``{localstatedir}/log/messages'' or equivalent.  *ShowSize*::  	Display the size of individual packages for '\--sync' and '\--query' modes. @@ -162,6 +162,10 @@ Options  	than the percent of each individual download target. The progress  	bar is still based solely on the current file download. +*CheckSpace*:: +	Performs an approximate check for adequate available disk space before +	installing packages. +  Repository Sections  -------------------  Each repository section defines a section name and at least one location where @@ -180,7 +184,7 @@ contain a file that lists the servers for that repository.  # use this repository first  Server = ftp://ftp.archlinux.org/core/os/arch  # next use servers as defined in the mirrorlist below -Include = /etc/pacman.d/mirrorlist +Include = {sysconfdir}/pacman.d/mirrorlist  --------  During parsing, pacman will define the `$repo` variable to the name of the diff --git a/etc/makepkg.conf.in b/etc/makepkg.conf.in index f0d1c449..81a11b1d 100644 --- a/etc/makepkg.conf.in +++ b/etc/makepkg.conf.in @@ -39,15 +39,16 @@ CXXFLAGS="@CARCHFLAGS@-mtune=generic -O2 -pipe"  # BUILD ENVIRONMENT  #########################################################################  # -# Defaults: BUILDENV=(fakeroot !distcc color !ccache) +# Defaults: BUILDENV=(fakeroot !distcc color !ccache check)  #  A negated environment option will do the opposite of the comments below.  #  #-- fakeroot: Allow building packages as a non-root user  #-- distcc:   Use the Distributed C/C++/ObjC compiler  #-- color:    Colorize output messages  #-- ccache:   Use ccache to cache compilation +#-- check:    Run the check() function if present in the PKGBUILD  # -BUILDENV=(fakeroot !distcc color !ccache) +BUILDENV=(fakeroot !distcc color !ccache check)  #  #-- If using DistCC, your MAKEFLAGS will also need modification. In addition,  #-- specify a space-delimited list of hosts running in the DistCC cluster. @@ -61,7 +62,7 @@ BUILDENV=(fakeroot !distcc color !ccache)  # Default: OPTIONS=(strip docs libtool emptydirs zipman purge)  #  A negated option will do the opposite of the comments below.  # -#-- strip:     Strip symbols from binaries/libraries in STRIP_DIRS +#-- strip:     Strip symbols from binaries/libraries  #-- docs:      Save doc directories specified by DOC_DIRS  #-- libtool:   Leave libtool (.la) files in packages  #-- emptydirs: Leave empty directories in packages @@ -82,8 +83,6 @@ STRIP_STATIC="@STRIP_STATIC@"  MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info})  #-- Doc directories to remove (if !docs is specified)  DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc}) -#-- Directories to be searched for the strip option (if strip is specified) -STRIP_DIRS=(bin lib sbin usr/{bin,lib,sbin,local/{bin,lib,sbin}} opt/*/{bin,lib,sbin})  #-- Files to be removed from all packages (if purge is specified)  PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod) diff --git a/etc/pacman.conf.in b/etc/pacman.conf.in index 32071196..d1d596cb 100644 --- a/etc/pacman.conf.in +++ b/etc/pacman.conf.in @@ -33,6 +33,7 @@ Architecture = auto  #ShowSize  #UseDelta  #TotalDownload +#CheckSpace  #  # REPOSITORIES @@ -1,7 +1,7 @@  #!/bin/sh  # install - install a program, script, or datafile -scriptversion=2006-10-14.15 +scriptversion=2010-02-06.18; # UTC  # This originates from X11R5 (mit/util/scripts/install.sh), which was  # later released in X11R6 (xc/config/util/install.sh) with the @@ -48,7 +48,7 @@ IFS=" ""	$nl"  # set DOITPROG to echo to test this script  # Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" +doit=${DOITPROG-}  if test -z "$doit"; then    doit_exec=exec  else @@ -58,34 +58,49 @@ fi  # Put in absolute file names if you don't have them in your path;  # or use environment vars. -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" -mkdirprog="${MKDIRPROG-mkdir}" +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' +  test "$posix_glob" != "?" || { +    if (set -f) 2>/dev/null; then +      posix_glob= +    else +      posix_glob=: +    fi +  } +' -posix_glob=  posix_mkdir=  # Desired mode of installed file.  mode=0755 +chgrpcmd=  chmodcmd=$chmodprog  chowncmd= -chgrpcmd= -stripcmd= +mvcmd=$mvprog  rmcmd="$rmprog -f" -mvcmd="$mvprog" +stripcmd= +  src=  dst=  dir_arg= -dstarg= +dst_arg= + +copy_on_change=false  no_target_directory= -usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE     or: $0 [OPTION]... SRCFILES... DIRECTORY     or: $0 [OPTION]... -t DIRECTORY SRCFILES...     or: $0 [OPTION]... -d DIRECTORIES... @@ -95,65 +110,55 @@ In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.  In the 4th, create DIRECTORIES.  Options: --c         (ignored) --d         create directories instead of installing files. --g GROUP   $chgrpprog installed files to GROUP. --m MODE    $chmodprog installed files to MODE. --o USER    $chownprog installed files to USER. --s         $stripprog installed files. --t DIRECTORY  install into DIRECTORY. --T         report an error if DSTFILE is a directory. ---help     display this help and exit. ---version  display version info and exit. +     --help     display this help and exit. +     --version  display version info and exit. + +  -c            (ignored) +  -C            install only if different (preserve the last data modification time) +  -d            create directories instead of installing files. +  -g GROUP      $chgrpprog installed files to GROUP. +  -m MODE       $chmodprog installed files to MODE. +  -o USER       $chownprog installed files to USER. +  -s            $stripprog installed files. +  -t DIRECTORY  install into DIRECTORY. +  -T            report an error if DSTFILE is a directory.  Environment variables override the default commands: -  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG +  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG +  RMPROG STRIPPROG  "  while test $# -ne 0; do    case $1 in -    -c) shift -        continue;; +    -c) ;; + +    -C) copy_on_change=true;; -    -d) dir_arg=true -        shift -        continue;; +    -d) dir_arg=true;;      -g) chgrpcmd="$chgrpprog $2" -        shift -        shift -        continue;; +	shift;;      --help) echo "$usage"; exit $?;;      -m) mode=$2 -        shift -        shift  	case $mode in  	  *' '* | *'	'* | *'  '*	  | *'*'* | *'?'* | *'['*)  	    echo "$0: invalid mode: $mode" >&2  	    exit 1;;  	esac -        continue;; +	shift;;      -o) chowncmd="$chownprog $2" -        shift -        shift -        continue;; +	shift;; -    -s) stripcmd=$stripprog -        shift -        continue;; +    -s) stripcmd=$stripprog;; -    -t) dstarg=$2 -	shift -	shift -	continue;; +    -t) dst_arg=$2 +	shift;; -    -T) no_target_directory=true -	shift -	continue;; +    -T) no_target_directory=true;;      --version) echo "$0 $scriptversion"; exit $?;; @@ -165,21 +170,22 @@ while test $# -ne 0; do      *)  break;;    esac +  shift  done -if test $# -ne 0 && test -z "$dir_arg$dstarg"; then +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then    # When -d is used, all remaining arguments are directories to create.    # When -t is used, the destination is already specified.    # Otherwise, the last argument is the destination.  Remove it from $@.    for arg    do -    if test -n "$dstarg"; then +    if test -n "$dst_arg"; then        # $@ is not empty: it contains at least $arg. -      set fnord "$@" "$dstarg" +      set fnord "$@" "$dst_arg"        shift # fnord      fi      shift # arg -    dstarg=$arg +    dst_arg=$arg    done  fi @@ -194,7 +200,11 @@ if test $# -eq 0; then  fi  if test -z "$dir_arg"; then -  trap '(exit $?); exit' 1 2 13 15 +  do_exit='(exit $ret); exit $ret' +  trap "ret=129; $do_exit" 1 +  trap "ret=130; $do_exit" 2 +  trap "ret=141; $do_exit" 13 +  trap "ret=143; $do_exit" 15    # Set umask so as not to create temps with too-generous modes.    # However, 'strip' requires both read and write access to temps. @@ -224,7 +234,7 @@ for src  do    # Protect names starting with `-'.    case $src in -    -*) src=./$src ;; +    -*) src=./$src;;    esac    if test -n "$dir_arg"; then @@ -242,22 +252,22 @@ do        exit 1      fi -    if test -z "$dstarg"; then +    if test -z "$dst_arg"; then        echo "$0: no destination specified." >&2        exit 1      fi -    dst=$dstarg +    dst=$dst_arg      # Protect names starting with `-'.      case $dst in -      -*) dst=./$dst ;; +      -*) dst=./$dst;;      esac      # If destination is a directory, append the input filename; won't work      # if double slashes aren't ignored.      if test -d "$dst"; then        if test -n "$no_target_directory"; then -	echo "$0: $dstarg: Is a directory" >&2 +	echo "$0: $dst_arg: Is a directory" >&2  	exit 1        fi        dstdir=$dst @@ -378,26 +388,19 @@ do        # directory the slow way, step by step, checking for races as we go.        case $dstdir in -	/*) prefix=/ ;; -	-*) prefix=./ ;; -	*)  prefix= ;; +	/*) prefix='/';; +	-*) prefix='./';; +	*)  prefix='';;        esac -      case $posix_glob in -        '') -	  if (set -f) 2>/dev/null; then -	    posix_glob=true -	  else -	    posix_glob=false -	  fi ;; -      esac +      eval "$initialize_posix_glob"        oIFS=$IFS        IFS=/ -      $posix_glob && set -f +      $posix_glob set -f        set fnord $dstdir        shift -      $posix_glob && set +f +      $posix_glob set +f        IFS=$oIFS        prefixes= @@ -459,41 +462,54 @@ do      # ignore errors from any of these, just make sure not to ignore      # errors from the above "$doit $cpprog $src $dsttmp" command.      # -    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ -      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ -      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ -      && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - -    # Now rename the file to the real destination. -    { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \ -      || { -	   # The rename failed, perhaps because mv can't rename something else -	   # to itself, or perhaps because mv is so ancient that it does not -	   # support -f. - -	   # Now remove or move aside any old file at destination location. -	   # We try this two ways since rm can't unlink itself on some -	   # systems and the destination file might be busy for other -	   # reasons.  In this case, the final cleanup might fail but the new -	   # file should still install successfully. -	   { -	     if test -f "$dst"; then -	       $doit $rmcmd -f "$dst" 2>/dev/null \ -	       || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \ -		     && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\ -	       || { -		 echo "$0: cannot unlink or rename $dst" >&2 -		 (exit 1); exit 1 -	       } -	     else -	       : -	     fi -	   } && - -	   # Now rename the file to the real destination. -	   $doit $mvcmd "$dsttmp" "$dst" -	 } -    } || exit 1 +    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && +    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && +    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && +    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + +    # If -C, don't bother to copy if it wouldn't change the file. +    if $copy_on_change && +       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` && +       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` && + +       eval "$initialize_posix_glob" && +       $posix_glob set -f && +       set X $old && old=:$2:$4:$5:$6 && +       set X $new && new=:$2:$4:$5:$6 && +       $posix_glob set +f && + +       test "$old" = "$new" && +       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 +    then +      rm -f "$dsttmp" +    else +      # Rename the file to the real destination. +      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + +      # The rename failed, perhaps because mv can't rename something else +      # to itself, or perhaps because mv is so ancient that it does not +      # support -f. +      { +	# Now remove or move aside any old file at destination location. +	# We try this two ways since rm can't unlink itself on some +	# systems and the destination file might be busy for other +	# reasons.  In this case, the final cleanup might fail but the new +	# file should still install successfully. +	{ +	  test ! -f "$dst" || +	  $doit $rmcmd -f "$dst" 2>/dev/null || +	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && +	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } +	  } || +	  { echo "$0: cannot unlink or rename $dst" >&2 +	    (exit 1); exit 1 +	  } +	} && + +	# Now rename the file to the real destination. +	$doit $mvcmd "$dsttmp" "$dst" +      } +    fi || exit 1      trap '' 0    fi @@ -503,5 +519,6 @@ done  # eval: (add-hook 'write-file-hooks 'time-stamp)  # time-stamp-start: "scriptversion="  # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC"  # End: diff --git a/lib/libalpm/Makefile.am b/lib/libalpm/Makefile.am index 3473a73a..da663cb5 100644 --- a/lib/libalpm/Makefile.am +++ b/lib/libalpm/Makefile.am @@ -25,20 +25,20 @@ libalpm_la_SOURCES = \  	alpm.h alpm.c \  	alpm_list.h alpm_list.c \  	backup.h backup.c \ -	be_files.c \ +	be_local.c \  	be_package.c \ -	cache.h cache.c \ +	be_sync.c \  	conflict.h conflict.c \  	db.h db.c \  	delta.h delta.c \  	deps.h deps.c \ +	diskspace.h diskspace.c \  	dload.h dload.c \  	error.c \  	graph.h \  	group.h group.c \  	handle.h handle.c \  	log.h log.c \ -	md5.h md5.c \  	package.h package.c \  	remove.h remove.c \  	sync.h sync.c \ @@ -46,6 +46,11 @@ libalpm_la_SOURCES = \  	util.h util.c \  	version.c +if !HAVE_LIBSSL +libalpm_la_SOURCES += \ +	md5.h md5.c +endif +  libalpm_la_LDFLAGS = -no-undefined -version-info $(LIB_VERSION_INFO)  libalpm_la_LIBADD = $(LTLIBINTL) diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c index f39a0ecf..ed57a079 100644 --- a/lib/libalpm/add.c +++ b/lib/libalpm/add.c @@ -40,7 +40,6 @@  #include "alpm_list.h"  #include "trans.h"  #include "util.h" -#include "cache.h"  #include "log.h"  #include "backup.h"  #include "package.h" @@ -54,7 +53,7 @@   * @param target the name of the file target to add   * @return 0 on success, -1 on error (pm_errno is set accordingly)   */ -int SYMEXPORT alpm_add_target(char *target) +int SYMEXPORT alpm_add_target(const char *target)  {  	pmpkg_t *pkg = NULL;  	const char *pkgname, *pkgver; @@ -110,6 +109,31 @@ error:  	return(-1);  } +static int perform_extraction(struct archive *archive, +		struct archive_entry *entry, const char *filename, const char *origname) +{ +	int ret; +	const int archive_flags = ARCHIVE_EXTRACT_OWNER | +	                          ARCHIVE_EXTRACT_PERM | +	                          ARCHIVE_EXTRACT_TIME; + +	archive_entry_set_pathname(entry, filename); + +	ret = archive_read_extract(archive, entry, archive_flags); +	if(ret == ARCHIVE_WARN && archive_errno(archive) != ENOSPC) { +		/* operation succeeded but a "non-critical" error was encountered */ +		_alpm_log(PM_LOG_WARNING, _("warning given when extracting %s (%s)\n"), +				origname, archive_error_string(archive)); +	} else if(ret != ARCHIVE_OK) { +		_alpm_log(PM_LOG_ERROR, _("could not extract %s (%s)\n"), +				origname, archive_error_string(archive)); +		alpm_logaction("error: could not extract %s (%s)\n", +				origname, archive_error_string(archive)); +		return(1); +	} +	return(0); +} +  static int extract_single_file(struct archive *archive,  		struct archive_entry *entry, pmpkg_t *newpkg, pmpkg_t *oldpkg,  		pmtrans_t *trans, pmdb_t *db) @@ -120,9 +144,6 @@ static int extract_single_file(struct archive *archive,  	int needbackup = 0, notouch = 0;  	char *hash_orig = NULL;  	char *entryname_orig = NULL; -	const int archive_flags = ARCHIVE_EXTRACT_OWNER | -	                          ARCHIVE_EXTRACT_PERM | -	                          ARCHIVE_EXTRACT_TIME;  	int errors = 0;  	entryname = archive_entry_pathname(entry); @@ -277,18 +298,10 @@ static int extract_single_file(struct archive *archive,  		int ret;  		snprintf(checkfile, PATH_MAX, "%s.paccheck", filename); -		archive_entry_set_pathname(entry, checkfile); - -		ret = archive_read_extract(archive, entry, archive_flags); -		if(ret == ARCHIVE_WARN) { -			/* operation succeeded but a non-critical error was encountered */ -			_alpm_log(PM_LOG_DEBUG, "warning extracting %s (%s)\n", -					entryname_orig, archive_error_string(archive)); -		} else if(ret != ARCHIVE_OK) { -			_alpm_log(PM_LOG_ERROR, _("could not extract %s (%s)\n"), -					entryname_orig, archive_error_string(archive)); -			alpm_logaction("error: could not extract %s (%s)\n", -					entryname_orig, archive_error_string(archive)); + +		ret = perform_extraction(archive, entry, checkfile, entryname_orig); +		if(ret == 1) { +			/* error */  			FREE(hash_orig);  			FREE(entryname_orig);  			return(1); @@ -430,18 +443,9 @@ static int extract_single_file(struct archive *archive,  			unlink(filename);  		} -		archive_entry_set_pathname(entry, filename); - -		ret = archive_read_extract(archive, entry, archive_flags); -		if(ret == ARCHIVE_WARN) { -			/* operation succeeded but a non-critical error was encountered */ -			_alpm_log(PM_LOG_DEBUG, "warning extracting %s (%s)\n", -					entryname_orig, archive_error_string(archive)); -		} else if(ret != ARCHIVE_OK) { -			_alpm_log(PM_LOG_ERROR, _("could not extract %s (%s)\n"), -					entryname_orig, archive_error_string(archive)); -			alpm_logaction("error: could not extract %s (%s)\n", -					entryname_orig, archive_error_string(archive)); +		ret = perform_extraction(archive, entry, filename, entryname_orig); +		if(ret == 1) { +			/* error */  			FREE(entryname_orig);  			return(1);  		} @@ -498,7 +502,7 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,  		oldpkg = _alpm_pkg_dup(local);  		/* make sure all infos are loaded because the database entry  		 * will be removed soon */ -		_alpm_db_read(oldpkg->origin_data.db, oldpkg, INFRQ_ALL); +		_alpm_local_db_read(oldpkg->origin_data.db, oldpkg, INFRQ_ALL);  		EVENT(trans, PM_TRANS_EVT_UPGRADE_START, newpkg, oldpkg);  		_alpm_log(PM_LOG_DEBUG, "upgrading package %s-%s\n", @@ -544,7 +548,7 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,  	/* prepare directory for database entries so permission are correct after  	   changelog/install script installation (FS#12263) */ -	if(_alpm_db_prepare(db, newpkg)) { +	if(_alpm_local_db_prepare(db, newpkg)) {  		alpm_logaction("error: could not create database entry %s-%s\n",  				alpm_pkg_get_name(newpkg), alpm_pkg_get_version(newpkg));  		pm_errno = PM_ERR_DB_WRITE; @@ -556,6 +560,7 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,  		struct archive *archive;  		struct archive_entry *entry;  		char cwd[PATH_MAX] = ""; +		int restore_cwd = 0;  		_alpm_log(PM_LOG_DEBUG, "extracting files\n"); @@ -579,11 +584,16 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,  		/* save the cwd so we can restore it later */  		if(getcwd(cwd, PATH_MAX) == NULL) {  			_alpm_log(PM_LOG_ERROR, _("could not get current working directory\n")); -			cwd[0] = 0; +		} else { +			restore_cwd = 1;  		}  		/* libarchive requires this for extracting hard links */ -		chdir(handle->root); +		if(chdir(handle->root) != 0) { +			_alpm_log(PM_LOG_ERROR, _("could not change directory to %s (%s)\n"), handle->root, strerror(errno)); +			ret = -1; +			goto cleanup; +		}  		/* call PROGRESS once with 0 percent, as we sort-of skip that here */  		if(is_upgrade) { @@ -629,9 +639,9 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,  		}  		archive_read_finish(archive); -		/* restore the old cwd is we have it */ -		if(strlen(cwd)) { -			chdir(cwd); +		/* restore the old cwd if we have it */ +		if(restore_cwd && chdir(cwd) != 0) { +			_alpm_log(PM_LOG_ERROR, _("could not change directory to %s (%s)\n"), cwd, strerror(errno));  		}  		if(errors) { @@ -656,7 +666,7 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,  	_alpm_log(PM_LOG_DEBUG, "updating database\n");  	_alpm_log(PM_LOG_DEBUG, "adding database entry '%s'\n", newpkg->name); -	if(_alpm_db_write(db, newpkg, INFRQ_ALL)) { +	if(_alpm_local_db_write(db, newpkg, INFRQ_ALL)) {  		_alpm_log(PM_LOG_ERROR, _("could not update database entry %s-%s\n"),  				alpm_pkg_get_name(newpkg), alpm_pkg_get_version(newpkg));  		alpm_logaction("error: could not update database entry %s-%s\n", @@ -706,6 +716,7 @@ cleanup:  int _alpm_upgrade_packages(pmtrans_t *trans, pmdb_t *db)  {  	int pkg_count, pkg_current; +	int skip_ldconfig = 0, ret = 0;  	alpm_list_t *targ;  	ALPM_LOG_FUNC; @@ -723,18 +734,28 @@ int _alpm_upgrade_packages(pmtrans_t *trans, pmdb_t *db)  	/* loop through our package list adding/upgrading one at a time */  	for(targ = trans->add; targ; targ = targ->next) {  		if(handle->trans->state == STATE_INTERRUPTED) { -			return(0); +			return(ret);  		}  		pmpkg_t *newpkg = (pmpkg_t *)targ->data; -		commit_single_pkg(newpkg, pkg_current, pkg_count, trans, db); +		if(commit_single_pkg(newpkg, pkg_current, pkg_count, trans, db)) { +			/* something screwed up on the commit, abort the trans */ +			trans->state = STATE_INTERRUPTED; +			pm_errno = PM_ERR_TRANS_ABORT; +			/* running ldconfig at this point could possibly screw system */ +			skip_ldconfig = 1; +			ret = -1; +		} +  		pkg_current++;  	} -	/* run ldconfig if it exists */ -	_alpm_ldconfig(handle->root); +	if(!skip_ldconfig) { +		/* run ldconfig if it exists */ +		_alpm_ldconfig(handle->root); +	} -	return(0); +	return(ret);  }  /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/alpm.c b/lib/libalpm/alpm.c index 51b9e25b..3f9cfff3 100644 --- a/lib/libalpm/alpm.c +++ b/lib/libalpm/alpm.c @@ -23,6 +23,11 @@  #include "config.h" +/* connection caching setup */ +#ifdef HAVE_LIBFETCH +#include <fetch.h> +#endif +  /* libalpm */  #include "alpm.h"  #include "alpm_list.h" @@ -54,6 +59,10 @@ int SYMEXPORT alpm_initialize(void)  	bindtextdomain("libalpm", LOCALEDIR);  #endif +#ifdef HAVE_LIBFETCH +	fetchConnectionCacheInit(5, 1); +#endif +  	return(0);  } @@ -73,6 +82,10 @@ int SYMEXPORT alpm_release(void)  	_alpm_handle_free(handle);  	handle = NULL; +#ifdef HAVE_LIBFETCH +	fetchConnectionCacheClose(); +#endif +  	return(0);  } diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h index 33291325..ea4aa14a 100644 --- a/lib/libalpm/alpm.h +++ b/lib/libalpm/alpm.h @@ -97,66 +97,69 @@ typedef int (*alpm_cb_fetch)(const char *url, const char *localpath,   * Options   */ -alpm_cb_log alpm_option_get_logcb(); +alpm_cb_log alpm_option_get_logcb(void);  void alpm_option_set_logcb(alpm_cb_log cb); -alpm_cb_download alpm_option_get_dlcb(); +alpm_cb_download alpm_option_get_dlcb(void);  void alpm_option_set_dlcb(alpm_cb_download cb); -alpm_cb_fetch alpm_option_get_fetchcb(); +alpm_cb_fetch alpm_option_get_fetchcb(void);  void alpm_option_set_fetchcb(alpm_cb_fetch cb); -alpm_cb_totaldl alpm_option_get_totaldlcb(); +alpm_cb_totaldl alpm_option_get_totaldlcb(void);  void alpm_option_set_totaldlcb(alpm_cb_totaldl cb); -const char *alpm_option_get_root(); +const char *alpm_option_get_root(void);  int alpm_option_set_root(const char *root); -const char *alpm_option_get_dbpath(); +const char *alpm_option_get_dbpath(void);  int alpm_option_set_dbpath(const char *dbpath); -alpm_list_t *alpm_option_get_cachedirs(); +alpm_list_t *alpm_option_get_cachedirs(void);  int alpm_option_add_cachedir(const char *cachedir);  void alpm_option_set_cachedirs(alpm_list_t *cachedirs);  int alpm_option_remove_cachedir(const char *cachedir); -const char *alpm_option_get_logfile(); +const char *alpm_option_get_logfile(void);  int alpm_option_set_logfile(const char *logfile); -const char *alpm_option_get_lockfile(); +const char *alpm_option_get_lockfile(void);  /* no set_lockfile, path is determined from dbpath */ -int alpm_option_get_usesyslog(); +int alpm_option_get_usesyslog(void);  void alpm_option_set_usesyslog(int usesyslog); -alpm_list_t *alpm_option_get_noupgrades(); +alpm_list_t *alpm_option_get_noupgrades(void);  void alpm_option_add_noupgrade(const char *pkg);  void alpm_option_set_noupgrades(alpm_list_t *noupgrade);  int alpm_option_remove_noupgrade(const char *pkg); -alpm_list_t *alpm_option_get_noextracts(); +alpm_list_t *alpm_option_get_noextracts(void);  void alpm_option_add_noextract(const char *pkg);  void alpm_option_set_noextracts(alpm_list_t *noextract);  int alpm_option_remove_noextract(const char *pkg); -alpm_list_t *alpm_option_get_ignorepkgs(); +alpm_list_t *alpm_option_get_ignorepkgs(void);  void alpm_option_add_ignorepkg(const char *pkg);  void alpm_option_set_ignorepkgs(alpm_list_t *ignorepkgs);  int alpm_option_remove_ignorepkg(const char *pkg); -alpm_list_t *alpm_option_get_ignoregrps(); +alpm_list_t *alpm_option_get_ignoregrps(void);  void alpm_option_add_ignoregrp(const char *grp);  void alpm_option_set_ignoregrps(alpm_list_t *ignoregrps);  int alpm_option_remove_ignoregrp(const char *grp); -const char *alpm_option_get_arch(); +const char *alpm_option_get_arch(void);  void alpm_option_set_arch(const char *arch); -int alpm_option_get_usedelta(); +int alpm_option_get_usedelta(void);  void alpm_option_set_usedelta(int usedelta); -pmdb_t *alpm_option_get_localdb(); -alpm_list_t *alpm_option_get_syncdbs(); +int alpm_option_get_checkspace(void); +void alpm_option_set_checkspace(int checkspace); + +pmdb_t *alpm_option_get_localdb(void); +alpm_list_t *alpm_option_get_syncdbs(void);  /*   * Install reasons -- ie, why the package was installed @@ -235,7 +238,7 @@ size_t alpm_pkg_changelog_read(void *ptr, size_t size,  /*int alpm_pkg_changelog_feof(const pmpkg_t *pkg, void *fp);*/  int alpm_pkg_changelog_close(const pmpkg_t *pkg, void *fp);  int alpm_pkg_has_scriptlet(pmpkg_t *pkg); -int alpm_pkg_has_force(pmpkg_t *pkg); +int alpm_pkg_get_epoch(pmpkg_t *pkg);  off_t alpm_pkg_download_size(pmpkg_t *newpkg);  alpm_list_t *alpm_pkg_unused_deltas(pmpkg_t *pkg); @@ -368,6 +371,10 @@ typedef enum _pmtransevt_t {  	 * The repository's tree name is passed to the callback.  	 */  	PM_TRANS_EVT_RETRIEVE_START, +	/** Disk space usage will be computed for a package */ +	PM_TRANS_EVT_DISKSPACE_START, +	/** Disk space usage was computed for a package */ +	PM_TRANS_EVT_DISKSPACE_DONE,  } pmtransevt_t;  /*@}*/ @@ -386,7 +393,8 @@ typedef enum _pmtransprog_t {  	PM_TRANS_PROGRESS_ADD_START,  	PM_TRANS_PROGRESS_UPGRADE_START,  	PM_TRANS_PROGRESS_REMOVE_START, -	PM_TRANS_PROGRESS_CONFLICTS_START +	PM_TRANS_PROGRESS_CONFLICTS_START, +	PM_TRANS_PROGRESS_DISKSPACE_START,  } pmtransprog_t;  /* Transaction Event callback */ @@ -399,9 +407,9 @@ typedef void (*alpm_trans_cb_conv)(pmtransconv_t, void *, void *,  /* Transaction Progress callback */  typedef void (*alpm_trans_cb_progress)(pmtransprog_t, const char *, int, int, int); -int alpm_trans_get_flags(); -alpm_list_t * alpm_trans_get_add(); -alpm_list_t * alpm_trans_get_remove(); +int alpm_trans_get_flags(void); +alpm_list_t * alpm_trans_get_add(void); +alpm_list_t * alpm_trans_get_remove(void);  int alpm_trans_init(pmtransflag_t flags,                      alpm_trans_cb_event cb_event, alpm_trans_cb_conv conv,                      alpm_trans_cb_progress cb_progress); @@ -411,10 +419,10 @@ int alpm_trans_interrupt(void);  int alpm_trans_release(void);  int alpm_sync_sysupgrade(int enable_downgrade); -int alpm_sync_target(char *target); -int alpm_sync_dbtarget(char *db, char *target); -int alpm_add_target(char *target); -int alpm_remove_target(char *target); +int alpm_sync_target(const char *target); +int alpm_sync_dbtarget(const char *db, const char *target); +int alpm_add_target(const char *target); +int alpm_remove_target(const char *target);  /*   * Dependencies and conflicts @@ -429,10 +437,9 @@ typedef enum _pmdepmod_t {  	PM_DEP_MOD_LT  } pmdepmod_t; -int alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep);  alpm_list_t *alpm_checkdeps(alpm_list_t *pkglist, int reversedeps,  		alpm_list_t *remove, alpm_list_t *upgrade); -alpm_list_t *alpm_deptest(pmdb_t *db, alpm_list_t *targets); +pmpkg_t *alpm_find_satisfier(alpm_list_t *pkgs, const char *depstring);  const char *alpm_miss_get_target(const pmdepmissing_t *miss);  pmdepend_t *alpm_miss_get_dep(pmdepmissing_t *miss); @@ -480,6 +487,7 @@ enum _pmerrno_t {  	PM_ERR_NOT_A_FILE,  	PM_ERR_NOT_A_DIR,  	PM_ERR_WRONG_ARGS, +	PM_ERR_DISK_SPACE,  	/* Interface */  	PM_ERR_HANDLE_NULL,  	PM_ERR_HANDLE_NOT_NULL, @@ -522,6 +530,7 @@ enum _pmerrno_t {  	PM_ERR_FILE_CONFLICTS,  	/* Misc */  	PM_ERR_RETRIEVE, +	PM_ERR_WRITE,  	PM_ERR_INVALID_REGEX,  	/* External library errors */  	PM_ERR_LIBARCHIVE, diff --git a/lib/libalpm/be_files.c b/lib/libalpm/be_local.c index c0b8b439..b2a50cc8 100644 --- a/lib/libalpm/be_files.c +++ b/lib/libalpm/be_local.c @@ -1,8 +1,8 @@  /* - *  be_files.c + *  be_local.c   * - *  Copyright (c) 2006 by Christian Hamar <krics@linuxforum.hu> - *  Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org> + *  Copyright (c) 2006-2010 Pacman Development Team <pacman-dev@archlinux.org> + *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>   *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by @@ -40,317 +40,344 @@  /* libalpm */  #include "db.h"  #include "alpm_list.h" -#include "cache.h"  #include "log.h"  #include "util.h"  #include "alpm.h"  #include "handle.h"  #include "package.h" -#include "delta.h" +#include "group.h"  #include "deps.h"  #include "dload.h" -static int checkdbdir(pmdb_t *db) -{ -	struct stat buf; -	const char *path = _alpm_db_path(db); +#define LAZY_LOAD(info, errret) \ +	do { \ +		ALPM_LOG_FUNC; \ +		ASSERT(handle != NULL, return(errret)); \ +		ASSERT(pkg != NULL, return(errret)); \ +		if(pkg->origin != PKG_FROM_FILE && !(pkg->infolevel & info)) { \ +			_alpm_local_db_read(pkg->origin_data.db, pkg, info); \ +		} \ +	} while(0) -	if(stat(path, &buf) != 0) { -		_alpm_log(PM_LOG_DEBUG, "database dir '%s' does not exist, creating it\n", -				path); -		if(_alpm_makepath(path) != 0) { -			RET_ERR(PM_ERR_SYSTEM, -1); -		} -	} else if(!S_ISDIR(buf.st_mode)) { -		_alpm_log(PM_LOG_WARNING, _("removing invalid database: %s\n"), path); -		if(unlink(path) != 0 || _alpm_makepath(path) != 0) { -			RET_ERR(PM_ERR_SYSTEM, -1); -		} -	} -	return(0); -} -/* create list of directories in db */ -static int dirlist_from_tar(const char *archive, alpm_list_t **dirlist) +/* Cache-specific accessor functions. These implementations allow for lazy + * loading by the files backend when a data member is actually needed + * rather than loading all pieces of information when the package is first + * initialized. + */ + +static const char *_cache_get_filename(pmpkg_t *pkg)  { -	struct archive *_archive; -	struct archive_entry *entry; +	LAZY_LOAD(INFRQ_DESC, NULL); +	return pkg->filename; +} -	if((_archive = archive_read_new()) == NULL) -		RET_ERR(PM_ERR_LIBARCHIVE, -1); +static const char *_cache_get_name(pmpkg_t *pkg) +{ +	ASSERT(pkg != NULL, return(NULL)); +	return pkg->name; +} -	archive_read_support_compression_all(_archive); -	archive_read_support_format_all(_archive); +static const char *_cache_get_version(pmpkg_t *pkg) +{ +	ASSERT(pkg != NULL, return(NULL)); +	return pkg->version; +} -	if(archive_read_open_filename(_archive, archive, -				ARCHIVE_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) { -		_alpm_log(PM_LOG_ERROR, _("could not open %s: %s\n"), archive, -				archive_error_string(_archive)); -		RET_ERR(PM_ERR_PKG_OPEN, -1); -	} +static const char *_cache_get_desc(pmpkg_t *pkg) +{ +	LAZY_LOAD(INFRQ_DESC, NULL); +	return pkg->desc; +} -	while(archive_read_next_header(_archive, &entry) == ARCHIVE_OK) { -		const struct stat *st; -		const char *entryname; /* the name of the file in the archive */ +static const char *_cache_get_url(pmpkg_t *pkg) +{ +	LAZY_LOAD(INFRQ_DESC, NULL); +	return pkg->url; +} -		st = archive_entry_stat(entry); -		entryname = archive_entry_pathname(entry); +static time_t _cache_get_builddate(pmpkg_t *pkg) +{ +	LAZY_LOAD(INFRQ_DESC, 0); +	return pkg->builddate; +} -		if(S_ISDIR(st->st_mode)) { -			char *name = strdup(entryname); -			*dirlist = alpm_list_add(*dirlist, name); -		} -	} -	archive_read_finish(_archive); +static time_t _cache_get_installdate(pmpkg_t *pkg) +{ +	LAZY_LOAD(INFRQ_DESC, 0); +	return pkg->installdate; +} -	*dirlist = alpm_list_msort(*dirlist, alpm_list_count(*dirlist), _alpm_str_cmp); -	return(0); +static const char *_cache_get_packager(pmpkg_t *pkg) +{ +	LAZY_LOAD(INFRQ_DESC, NULL); +	return pkg->packager;  } -/* create list of directories in db */ -static int dirlist_from_fs(const char *syncdbpath, alpm_list_t **dirlist) +static const char *_cache_get_md5sum(pmpkg_t *pkg)  { -	DIR *dbdir; -	struct dirent *ent = NULL; -	struct stat sbuf; -	char path[PATH_MAX]; +	LAZY_LOAD(INFRQ_DESC, NULL); +	return pkg->md5sum; +} -	dbdir = opendir(syncdbpath); -	if (dbdir != NULL) { -		while((ent = readdir(dbdir)) != NULL) { -			char *name = ent->d_name; -			size_t len; -			char *entry; +static const char *_cache_get_arch(pmpkg_t *pkg) +{ +	LAZY_LOAD(INFRQ_DESC, NULL); +	return pkg->arch; +} -			if(strcmp(name, ".") == 0 || strcmp(name, "..") == 0) { -				continue; -			} +static off_t _cache_get_size(pmpkg_t *pkg) +{ +	LAZY_LOAD(INFRQ_DESC, -1); +	return pkg->size; +} -			/* stat the entry, make sure it's a directory */ -			snprintf(path, PATH_MAX, "%s%s", syncdbpath, name); -			if(stat(path, &sbuf) != 0 || !S_ISDIR(sbuf.st_mode)) { -				continue; -			} +static off_t _cache_get_isize(pmpkg_t *pkg) +{ +	LAZY_LOAD(INFRQ_DESC, -1); +	return pkg->isize; +} -			len = strlen(name); -			MALLOC(entry, len + 2, RET_ERR(PM_ERR_MEMORY, -1)); -			strcpy(entry, name); -			entry[len] = '/'; -			entry[len+1] = '\0'; -			*dirlist = alpm_list_add(*dirlist, entry); -		} -		closedir(dbdir); -	} +static pmpkgreason_t _cache_get_reason(pmpkg_t *pkg) +{ +	LAZY_LOAD(INFRQ_DESC, -1); +	return pkg->reason; +} -	*dirlist = alpm_list_msort(*dirlist, alpm_list_count(*dirlist), _alpm_str_cmp); -	return(0); +static alpm_list_t *_cache_get_licenses(pmpkg_t *pkg) +{ +	LAZY_LOAD(INFRQ_DESC, NULL); +	return pkg->licenses;  } -/* remove old directories from dbdir */ -static int remove_olddir(const char *syncdbpath, alpm_list_t *dirlist) +static alpm_list_t *_cache_get_groups(pmpkg_t *pkg)  { -	alpm_list_t *i; -	for (i = dirlist; i; i = i->next) { -		const char *name = i->data; -		char *dbdir; -		size_t len = strlen(syncdbpath) + strlen(name) + 2; -		MALLOC(dbdir, len, RET_ERR(PM_ERR_MEMORY, -1)); -		snprintf(dbdir, len, "%s%s", syncdbpath, name); -		_alpm_log(PM_LOG_DEBUG, "removing: %s\n", dbdir); -		if(_alpm_rmrf(dbdir) != 0) { -			_alpm_log(PM_LOG_ERROR, _("could not remove database directory %s\n"), dbdir); -			free(dbdir); -			RET_ERR(PM_ERR_DB_REMOVE, -1); -		} -		free(dbdir); -	} -	return(0); +	LAZY_LOAD(INFRQ_DESC, NULL); +	return pkg->groups;  } -/** Update a package database - * - * An update of the package database \a db will be attempted. Unless - * \a force is true, the update will only be performed if the remote - * database was modified since the last update. - * - * A transaction is necessary for this operation, in order to obtain a - * database lock. During this transaction the front-end will be informed - * of the download progress of the database via the download callback. - * - * Example: - * @code - * pmdb_t *db; - * int result; - * db = alpm_list_getdata(alpm_option_get_syncdbs()); - * if(alpm_trans_init(0, NULL, NULL, NULL) == 0) { - *     result = alpm_db_update(0, db); - *     alpm_trans_release(); - * - *     if(result > 0) { - *	       printf("Unable to update database: %s\n", alpm_strerrorlast()); - *     } else if(result < 0) { - *         printf("Database already up to date\n"); - *     } else { - *         printf("Database updated\n"); - *     } - * } - * @endcode - * - * @ingroup alpm_databases - * @note After a successful update, the \link alpm_db_get_pkgcache() - * package cache \endlink will be invalidated - * @param force if true, then forces the update, otherwise update only in case - * the database isn't up to date - * @param db pointer to the package database to update - * @return 0 on success, > 0 on error (pm_errno is set accordingly), < 0 if up - * to date - */ -int SYMEXPORT alpm_db_update(int force, pmdb_t *db) +static int _cache_get_epoch(pmpkg_t *pkg)  { -	char *dbfile, *dbfilepath; -	const char *dbpath, *syncdbpath; -	alpm_list_t *newdirlist = NULL, *olddirlist = NULL; -	alpm_list_t *onlynew = NULL, *onlyold = NULL; -	size_t len; -	int ret; +	LAZY_LOAD(INFRQ_DESC, -1); +	return pkg->epoch; +} +static int _cache_has_scriptlet(pmpkg_t *pkg) +{  	ALPM_LOG_FUNC;  	/* Sanity checks */ -	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); -	ASSERT(db != NULL && db != handle->db_local, RET_ERR(PM_ERR_WRONG_ARGS, -1)); -	/* Verify we are in a transaction.  This is done _mainly_ because we need a DB -	 * lock - if we update without a db lock, we may kludge some other pacman -	 * process that _has_ a lock. -	 */ -	ASSERT(handle->trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); -	ASSERT(handle->trans->state == STATE_INITIALIZED, RET_ERR(PM_ERR_TRANS_NOT_INITIALIZED, -1)); - -	if(!alpm_list_find_ptr(handle->dbs_sync, db)) { -		RET_ERR(PM_ERR_DB_NOT_FOUND, -1); +	ASSERT(handle != NULL, return(-1)); +	ASSERT(pkg != NULL, return(-1)); + +	if(!(pkg->infolevel & INFRQ_SCRIPTLET)) { +		_alpm_local_db_read(pkg->origin_data.db, pkg, INFRQ_SCRIPTLET);  	} +	return pkg->scriptlet; +} + +static alpm_list_t *_cache_get_depends(pmpkg_t *pkg) +{ +	LAZY_LOAD(INFRQ_DESC, NULL); +	return pkg->depends; +} + +static alpm_list_t *_cache_get_optdepends(pmpkg_t *pkg) +{ +	LAZY_LOAD(INFRQ_DESC, NULL); +	return pkg->optdepends; +} -	len = strlen(db->treename) + strlen(DBEXT) + 1; -	MALLOC(dbfile, len, RET_ERR(PM_ERR_MEMORY, -1)); -	sprintf(dbfile, "%s" DBEXT, db->treename); +static alpm_list_t *_cache_get_conflicts(pmpkg_t *pkg) +{ +	LAZY_LOAD(INFRQ_DESC, NULL); +	return pkg->conflicts; +} -	dbpath = alpm_option_get_dbpath(); +static alpm_list_t *_cache_get_provides(pmpkg_t *pkg) +{ +	LAZY_LOAD(INFRQ_DESC, NULL); +	return pkg->provides; +} -	ret = _alpm_download_single_file(dbfile, db->servers, dbpath, force); -	free(dbfile); +static alpm_list_t *_cache_get_replaces(pmpkg_t *pkg) +{ +	LAZY_LOAD(INFRQ_DESC, NULL); +	return pkg->replaces; +} -	if(ret == 1) { -		/* files match, do nothing */ -		pm_errno = 0; -		return(1); -	} else if(ret == -1) { -		/* pm_errno was set by the download code */ -		_alpm_log(PM_LOG_DEBUG, "failed to sync db: %s\n", alpm_strerrorlast()); -		return(-1); -	} +/* local packages can not have deltas */ +static alpm_list_t *_cache_get_deltas(pmpkg_t *pkg) +{ +	return NULL; +} -	syncdbpath = _alpm_db_path(db); - -	/* form the path to the db location */ -	len = strlen(dbpath) + strlen(db->treename) + strlen(DBEXT) + 1; -	MALLOC(dbfilepath, len, RET_ERR(PM_ERR_MEMORY, -1)); -	sprintf(dbfilepath, "%s%s" DBEXT, dbpath, db->treename); - -	if(force) { -		/* if forcing update, remove the old dir and extract the db */ -		if(_alpm_rmrf(syncdbpath) != 0) { -			_alpm_log(PM_LOG_ERROR, _("could not remove database %s\n"), db->treename); -			RET_ERR(PM_ERR_DB_REMOVE, -1); -		} else { -			_alpm_log(PM_LOG_DEBUG, "database dir %s removed\n", _alpm_db_path(db)); -		} -	} else { -		/* if not forcing, only remove and extract what is necessary */ -		ret = dirlist_from_tar(dbfilepath, &newdirlist); -		if(ret) { -			goto cleanup; -		} -		ret = dirlist_from_fs(syncdbpath, &olddirlist); -		if(ret) { -			goto cleanup; -		} +static alpm_list_t *_cache_get_files(pmpkg_t *pkg) +{ +	ALPM_LOG_FUNC; -		alpm_list_diff_sorted(olddirlist, newdirlist, _alpm_str_cmp, &onlyold, &onlynew); +	/* Sanity checks */ +	ASSERT(handle != NULL, return(NULL)); +	ASSERT(pkg != NULL, return(NULL)); -		ret = remove_olddir(syncdbpath, onlyold); -		if(ret) { -			goto cleanup; -		} +	if(pkg->origin == PKG_FROM_LOCALDB +		 && !(pkg->infolevel & INFRQ_FILES)) { +		_alpm_local_db_read(pkg->origin_data.db, pkg, INFRQ_FILES);  	} +	return pkg->files; +} -	/* Cache needs to be rebuilt */ -	_alpm_db_free_pkgcache(db); +static alpm_list_t *_cache_get_backup(pmpkg_t *pkg) +{ +	ALPM_LOG_FUNC; -	checkdbdir(db); -	ret = _alpm_unpack(dbfilepath, syncdbpath, onlynew, 0); +	/* Sanity checks */ +	ASSERT(handle != NULL, return(NULL)); +	ASSERT(pkg != NULL, return(NULL)); -cleanup: -	FREELIST(newdirlist); -	FREELIST(olddirlist); -	alpm_list_free(onlynew); -	alpm_list_free(onlyold); +	if(pkg->origin == PKG_FROM_LOCALDB +		 && !(pkg->infolevel & INFRQ_FILES)) { +		_alpm_local_db_read(pkg->origin_data.db, pkg, INFRQ_FILES); +	} +	return pkg->backup; +} -	free(dbfilepath); +/** + * Open a package changelog for reading. Similar to fopen in functionality, + * except that the returned 'file stream' is from the database. + * @param pkg the package (from db) to read the changelog + * @return a 'file stream' to the package changelog + */ +static void *_cache_changelog_open(pmpkg_t *pkg) +{ +	ALPM_LOG_FUNC; -	if(ret) { -		RET_ERR(PM_ERR_SYSTEM, -1); -	} +	/* Sanity checks */ +	ASSERT(handle != NULL, return(NULL)); +	ASSERT(pkg != NULL, return(NULL)); + +	char clfile[PATH_MAX]; +	snprintf(clfile, PATH_MAX, "%s/%s/%s-%s/changelog", +			alpm_option_get_dbpath(), +			alpm_db_get_name(alpm_pkg_get_db(pkg)), +			alpm_pkg_get_name(pkg), +			alpm_pkg_get_version(pkg)); +	return fopen(clfile, "r"); +} -	return(0); +/** + * Read data from an open changelog 'file stream'. Similar to fread in + * functionality, this function takes a buffer and amount of data to read. + * @param ptr a buffer to fill with raw changelog data + * @param size the size of the buffer + * @param pkg the package that the changelog is being read from + * @param fp a 'file stream' to the package changelog + * @return the number of characters read, or 0 if there is no more data + */ +static size_t _cache_changelog_read(void *ptr, size_t size, +		const pmpkg_t *pkg, const void *fp) +{ +	return ( fread(ptr, 1, size, (FILE*)fp) ); +} + +/* +static int _cache_changelog_feof(const pmpkg_t *pkg, void *fp) +{ +	return( feof((FILE*)fp) ); +} +*/ + +/** + * Close a package changelog for reading. Similar to fclose in functionality, + * except that the 'file stream' is from the database. + * @param pkg the package that the changelog was read from + * @param fp a 'file stream' to the package changelog + * @return whether closing the package changelog stream was successful + */ +static int _cache_changelog_close(const pmpkg_t *pkg, void *fp) +{ +	return( fclose((FILE*)fp) );  } -static int splitname(const char *target, pmpkg_t *pkg) +/** The local database operations struct. Get package fields through + * lazy accessor methods that handle any backend loading and caching + * logic. + */ +static struct pkg_operations local_pkg_ops = { +	.get_filename    = _cache_get_filename, +	.get_name        = _cache_get_name, +	.get_version     = _cache_get_version, +	.get_desc        = _cache_get_desc, +	.get_url         = _cache_get_url, +	.get_builddate   = _cache_get_builddate, +	.get_installdate = _cache_get_installdate, +	.get_packager    = _cache_get_packager, +	.get_md5sum      = _cache_get_md5sum, +	.get_arch        = _cache_get_arch, +	.get_size        = _cache_get_size, +	.get_isize       = _cache_get_isize, +	.get_reason      = _cache_get_reason, +	.get_epoch       = _cache_get_epoch, +	.has_scriptlet   = _cache_has_scriptlet, +	.get_licenses    = _cache_get_licenses, +	.get_groups      = _cache_get_groups, +	.get_depends     = _cache_get_depends, +	.get_optdepends  = _cache_get_optdepends, +	.get_conflicts   = _cache_get_conflicts, +	.get_provides    = _cache_get_provides, +	.get_replaces    = _cache_get_replaces, +	.get_deltas      = _cache_get_deltas, +	.get_files       = _cache_get_files, +	.get_backup      = _cache_get_backup, + +	.changelog_open  = _cache_changelog_open, +	.changelog_read  = _cache_changelog_read, +	.changelog_close = _cache_changelog_close, +}; + +static int checkdbdir(pmdb_t *db)  { -	/* the format of a db entry is as follows: -	 *    package-version-rel/ -	 * package name can contain hyphens, so parse from the back- go back -	 * two hyphens and we have split the version from the name. -	 */ -	char *tmp, *p, *q; +	struct stat buf; +	const char *path = _alpm_db_path(db); -	if(target == NULL || pkg == NULL) { -		return(-1); -	} -	STRDUP(tmp, target, RET_ERR(PM_ERR_MEMORY, -1)); -	p = tmp + strlen(tmp); - -	/* do the magic parsing- find the beginning of the version string -	 * by doing two iterations of same loop to lop off two hyphens */ -	for(q = --p; *q && *q != '-'; q--); -	for(p = --q; *p && *p != '-'; p--); -	if(*p != '-' || p == tmp) { -		return(-1); +	if(stat(path, &buf) != 0) { +		_alpm_log(PM_LOG_DEBUG, "database dir '%s' does not exist, creating it\n", +				path); +		if(_alpm_makepath(path) != 0) { +			RET_ERR(PM_ERR_SYSTEM, -1); +		} +	} else if(!S_ISDIR(buf.st_mode)) { +		_alpm_log(PM_LOG_WARNING, _("removing invalid database: %s\n"), path); +		if(unlink(path) != 0 || _alpm_makepath(path) != 0) { +			RET_ERR(PM_ERR_SYSTEM, -1); +		}  	} +	return(0); +} -	/* copy into fields and return */ -	if(pkg->version) { -		FREE(pkg->version); -	} -	STRDUP(pkg->version, p+1, RET_ERR(PM_ERR_MEMORY, -1)); -	/* insert a terminator at the end of the name (on hyphen)- then copy it */ -	*p = '\0'; -	if(pkg->name) { -		FREE(pkg->name); +static int is_dir(const char *path, struct dirent *entry) +{ +#ifdef HAVE_STRUCT_DIRENT_D_TYPE +	return(entry->d_type == DT_DIR); +#else +	char buffer[PATH_MAX]; +	snprintf(buffer, PATH_MAX, "%s/%s", path, entry->d_name); + +	struct stat sbuf; +	if (!stat(buffer, &sbuf)) { +		return(S_ISDIR(sbuf.st_mode));  	} -	STRDUP(pkg->name, tmp, RET_ERR(PM_ERR_MEMORY, -1)); -	free(tmp);  	return(0); +#endif  } -int _alpm_db_populate(pmdb_t *db) +static int local_db_populate(pmdb_t *db)  {  	int count = 0;  	struct dirent *ent = NULL; -	struct stat sbuf; -	char path[PATH_MAX];  	const char *dbpath;  	DIR *dbdir; @@ -359,20 +386,22 @@ int _alpm_db_populate(pmdb_t *db)  	ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1));  	dbpath = _alpm_db_path(db); +	if(dbpath == NULL) { +		return(-1); +	}  	dbdir = opendir(dbpath);  	if(dbdir == NULL) {  		return(0);  	}  	while((ent = readdir(dbdir)) != NULL) {  		const char *name = ent->d_name; +  		pmpkg_t *pkg;  		if(strcmp(name, ".") == 0 || strcmp(name, "..") == 0) {  			continue;  		} -		/* stat the entry, make sure it's a directory */ -		snprintf(path, PATH_MAX, "%s%s", dbpath, name); -		if(stat(path, &sbuf) != 0 || !S_ISDIR(sbuf.st_mode)) { +		if(!is_dir(dbpath, ent)) {  			continue;  		} @@ -382,7 +411,7 @@ int _alpm_db_populate(pmdb_t *db)  			return(-1);  		}  		/* split the db entry name */ -		if(splitname(name, pkg) != 0) { +		if(_alpm_splitname(name, pkg) != 0) {  			_alpm_log(PM_LOG_ERROR, _("invalid name for database entry '%s'\n"),  					name);  			_alpm_pkg_free(pkg); @@ -397,12 +426,15 @@ int _alpm_db_populate(pmdb_t *db)  		}  		/* explicitly read with only 'BASE' data, accessors will handle the rest */ -		if(_alpm_db_read(db, pkg, INFRQ_BASE) == -1) { +		if(_alpm_local_db_read(db, pkg, INFRQ_BASE) == -1) {  			_alpm_log(PM_LOG_ERROR, _("corrupted database entry '%s'\n"), name);  			_alpm_pkg_free(pkg);  			continue;  		} -		pkg->origin = PKG_FROM_CACHE; + +		pkg->origin = PKG_FROM_LOCALDB; +		pkg->ops = &local_pkg_ops; +  		pkg->origin_data.db = db;  		/* add to the collection */  		_alpm_log(PM_LOG_FUNCTION, "adding '%s' to package cache for db '%s'\n", @@ -430,12 +462,12 @@ static char *get_pkgpath(pmdb_t *db, pmpkg_t *info)  	return(pkgpath);  } -int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq) + +int _alpm_local_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  {  	FILE *fp = NULL;  	char path[PATH_MAX]; -	char line[513]; -	int	sline = sizeof(line)-1; +	char line[1024];  	char *pkgpath = NULL;  	ALPM_LOG_FUNC; @@ -445,7 +477,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  	}  	if(info == NULL || info->name == NULL || info->version == NULL) { -		_alpm_log(PM_LOG_DEBUG, "invalid package entry provided to _alpm_db_read, skipping\n"); +		_alpm_log(PM_LOG_DEBUG, "invalid package entry provided to _alpm_local_db_read, skipping\n");  		return(-1);  	} @@ -467,7 +499,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  			info->name, inforeq);  	/* clear out 'line', to be certain - and to make valgrind happy */ -	memset(line, 0, sline+1); +	memset(line, 0, sizeof(line));  	pkgpath = get_pkgpath(db, info); @@ -486,12 +518,12 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  			goto error;  		}  		while(!feof(fp)) { -			if(fgets(line, 256, fp) == NULL) { +			if(fgets(line, sizeof(line), fp) == NULL) {  				break;  			}  			_alpm_strtrim(line);  			if(strcmp(line, "%NAME%") == 0) { -				if(fgets(line, sline, fp) == NULL) { +				if(fgets(line, sizeof(line), fp) == NULL) {  					goto error;  				}  				if(strcmp(_alpm_strtrim(line), info->name) != 0) { @@ -499,47 +531,42 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  								"mismatch on package %s\n"), db->treename, info->name);  				}  			} else if(strcmp(line, "%VERSION%") == 0) { -				if(fgets(line, sline, fp) == NULL) { +				if(fgets(line, sizeof(line), fp) == NULL) {  					goto error;  				}  				if(strcmp(_alpm_strtrim(line), info->version) != 0) {  					_alpm_log(PM_LOG_ERROR, _("%s database is inconsistent: version "  								"mismatch on package %s\n"), db->treename, info->name);  				} -			} else if(strcmp(line, "%FILENAME%") == 0) { -				if(fgets(line, sline, fp) == NULL) { -					goto error; -				} -				STRDUP(info->filename, _alpm_strtrim(line), goto error);  			} else if(strcmp(line, "%DESC%") == 0) { -				if(fgets(line, sline, fp) == NULL) { +				if(fgets(line, sizeof(line), fp) == NULL) {  					goto error;  				}  				STRDUP(info->desc, _alpm_strtrim(line), goto error);  			} else if(strcmp(line, "%GROUPS%") == 0) { -				while(fgets(line, sline, fp) && strlen(_alpm_strtrim(line))) { +				while(fgets(line, sizeof(line), fp) && strlen(_alpm_strtrim(line))) {  					char *linedup;  					STRDUP(linedup, _alpm_strtrim(line), goto error);  					info->groups = alpm_list_add(info->groups, linedup);  				}  			} else if(strcmp(line, "%URL%") == 0) { -				if(fgets(line, sline, fp) == NULL) { +				if(fgets(line, sizeof(line), fp) == NULL) {  					goto error;  				}  				STRDUP(info->url, _alpm_strtrim(line), goto error);  			} else if(strcmp(line, "%LICENSE%") == 0) { -				while(fgets(line, sline, fp) && strlen(_alpm_strtrim(line))) { +				while(fgets(line, sizeof(line), fp) && strlen(_alpm_strtrim(line))) {  					char *linedup;  					STRDUP(linedup, _alpm_strtrim(line), goto error);  					info->licenses = alpm_list_add(info->licenses, linedup);  				}  			} else if(strcmp(line, "%ARCH%") == 0) { -				if(fgets(line, sline, fp) == NULL) { +				if(fgets(line, sizeof(line), fp) == NULL) {  					goto error;  				}  				STRDUP(info->arch, _alpm_strtrim(line), goto error);  			} else if(strcmp(line, "%BUILDDATE%") == 0) { -				if(fgets(line, sline, fp) == NULL) { +				if(fgets(line, sizeof(line), fp) == NULL) {  					goto error;  				}  				_alpm_strtrim(line); @@ -555,7 +582,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  					info->builddate = atol(line);  				}  			} else if(strcmp(line, "%INSTALLDATE%") == 0) { -				if(fgets(line, sline, fp) == NULL) { +				if(fgets(line, sizeof(line), fp) == NULL) {  					goto error;  				}  				_alpm_strtrim(line); @@ -571,51 +598,67 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  					info->installdate = atol(line);  				}  			} else if(strcmp(line, "%PACKAGER%") == 0) { -				if(fgets(line, sline, fp) == NULL) { +				if(fgets(line, sizeof(line), fp) == NULL) {  					goto error;  				}  				STRDUP(info->packager, _alpm_strtrim(line), goto error);  			} else if(strcmp(line, "%REASON%") == 0) { -				if(fgets(line, sline, fp) == NULL) { +				if(fgets(line, sizeof(line), fp) == NULL) {  					goto error;  				}  				info->reason = (pmpkgreason_t)atol(_alpm_strtrim(line)); -			} else if(strcmp(line, "%SIZE%") == 0 || strcmp(line, "%CSIZE%") == 0) { +			} else if(strcmp(line, "%SIZE%") == 0) {  				/* NOTE: the CSIZE and SIZE fields both share the "size" field  				 *       in the pkginfo_t struct.  This can be done b/c CSIZE  				 *       is currently only used in sync databases, and SIZE is  				 *       only used in local databases.  				 */ -				if(fgets(line, sline, fp) == NULL) { +				if(fgets(line, sizeof(line), fp) == NULL) {  					goto error;  				}  				info->size = atol(_alpm_strtrim(line)); -				/* also store this value to isize if isize is unset */ -				if(info->isize == 0) { -					info->isize = info->size; +				/* also store this value to isize */ +				info->isize = info->size; +			} else if(strcmp(line, "%REPLACES%") == 0) { +				while(fgets(line, sizeof(line), fp) && strlen(_alpm_strtrim(line))) { +					char *linedup; +					STRDUP(linedup, _alpm_strtrim(line), goto error); +					info->replaces = alpm_list_add(info->replaces, linedup);  				} -			} else if(strcmp(line, "%ISIZE%") == 0) { -				/* ISIZE (installed size) tag only appears in sync repositories, -				 * not the local one. */ -				if(fgets(line, sline, fp) == NULL) { +			} else if(strcmp(line, "%EPOCH%") == 0) { +				if(fgets(line, sizeof(line), fp) == NULL) {  					goto error;  				} -				info->isize = atol(_alpm_strtrim(line)); -			} else if(strcmp(line, "%MD5SUM%") == 0) { -				/* MD5SUM tag only appears in sync repositories, -				 * not the local one. */ -				if(fgets(line, sline, fp) == NULL) { -					goto error; +				info->epoch = atoi(_alpm_strtrim(line)); +			} else if(strcmp(line, "%FORCE%") == 0) { +				/* For backward compatibility, treat force as a non-zero epoch +				 * but only if we didn't already have a known epoch value. */ +				if(!info->epoch) { +					info->epoch = 1;  				} -				STRDUP(info->md5sum, _alpm_strtrim(line), goto error); -			} else if(strcmp(line, "%REPLACES%") == 0) { -				while(fgets(line, sline, fp) && strlen(_alpm_strtrim(line))) { +			} else if(strcmp(line, "%DEPENDS%") == 0) { +				while(fgets(line, sizeof(line), fp) && strlen(_alpm_strtrim(line))) { +					pmdepend_t *dep = _alpm_splitdep(_alpm_strtrim(line)); +					info->depends = alpm_list_add(info->depends, dep); +				} +			} else if(strcmp(line, "%OPTDEPENDS%") == 0) { +				while(fgets(line, sizeof(line), fp) && strlen(_alpm_strtrim(line))) {  					char *linedup;  					STRDUP(linedup, _alpm_strtrim(line), goto error); -					info->replaces = alpm_list_add(info->replaces, linedup); +					info->optdepends = alpm_list_add(info->optdepends, linedup); +				} +			} else if(strcmp(line, "%CONFLICTS%") == 0) { +				while(fgets(line, sizeof(line), fp) && strlen(_alpm_strtrim(line))) { +					char *linedup; +					STRDUP(linedup, _alpm_strtrim(line), goto error); +					info->conflicts = alpm_list_add(info->conflicts, linedup); +				} +			} else if(strcmp(line, "%PROVIDES%") == 0) { +				while(fgets(line, sizeof(line), fp) && strlen(_alpm_strtrim(line))) { +					char *linedup; +					STRDUP(linedup, _alpm_strtrim(line), goto error); +					info->provides = alpm_list_add(info->provides, linedup);  				} -			} else if(strcmp(line, "%FORCE%") == 0) { -				info->force = 1;  			}  		}  		fclose(fp); @@ -629,16 +672,16 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  			_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno));  			goto error;  		} -		while(fgets(line, 256, fp)) { +		while(fgets(line, sizeof(line), fp)) {  			_alpm_strtrim(line);  			if(strcmp(line, "%FILES%") == 0) { -				while(fgets(line, sline, fp) && strlen(_alpm_strtrim(line))) { +				while(fgets(line, sizeof(line), fp) && strlen(_alpm_strtrim(line))) {  					char *linedup;  					STRDUP(linedup, _alpm_strtrim(line), goto error);  					info->files = alpm_list_add(info->files, linedup);  				}  			} else if(strcmp(line, "%BACKUP%") == 0) { -				while(fgets(line, sline, fp) && strlen(_alpm_strtrim(line))) { +				while(fgets(line, sizeof(line), fp) && strlen(_alpm_strtrim(line))) {  					char *linedup;  					STRDUP(linedup, _alpm_strtrim(line), goto error);  					info->backup = alpm_list_add(info->backup, linedup); @@ -649,66 +692,6 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  		fp = NULL;  	} -	/* DEPENDS */ -	if(inforeq & INFRQ_DEPENDS) { -		snprintf(path, PATH_MAX, "%sdepends", pkgpath); -		if((fp = fopen(path, "r")) == NULL) { -			_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno)); -			goto error; -		} -		while(!feof(fp)) { -			fgets(line, 255, fp); -			_alpm_strtrim(line); -			if(strcmp(line, "%DEPENDS%") == 0) { -				while(fgets(line, sline, fp) && strlen(_alpm_strtrim(line))) { -					pmdepend_t *dep = _alpm_splitdep(_alpm_strtrim(line)); -					info->depends = alpm_list_add(info->depends, dep); -				} -			} else if(strcmp(line, "%OPTDEPENDS%") == 0) { -				while(fgets(line, sline, fp) && strlen(_alpm_strtrim(line))) { -					char *linedup; -					STRDUP(linedup, _alpm_strtrim(line), goto error); -					info->optdepends = alpm_list_add(info->optdepends, linedup); -				} -			} else if(strcmp(line, "%CONFLICTS%") == 0) { -				while(fgets(line, sline, fp) && strlen(_alpm_strtrim(line))) { -					char *linedup; -					STRDUP(linedup, _alpm_strtrim(line), goto error); -					info->conflicts = alpm_list_add(info->conflicts, linedup); -				} -			} else if(strcmp(line, "%PROVIDES%") == 0) { -				while(fgets(line, sline, fp) && strlen(_alpm_strtrim(line))) { -					char *linedup; -					STRDUP(linedup, _alpm_strtrim(line), goto error); -					info->provides = alpm_list_add(info->provides, linedup); -				} -			} -		} -		fclose(fp); -		fp = NULL; -	} - -	/* DELTAS */ -	if(inforeq & INFRQ_DELTAS) { -		snprintf(path, PATH_MAX, "%sdeltas", pkgpath); -		if((fp = fopen(path, "r"))) { -			while(!feof(fp)) { -				fgets(line, 255, fp); -				_alpm_strtrim(line); -				if(strcmp(line, "%DELTAS%") == 0) { -					while(fgets(line, sline, fp) && strlen(_alpm_strtrim(line))) { -						pmdelta_t *delta = _alpm_delta_parse(line); -						if(delta) { -							info->deltas = alpm_list_add(info->deltas, delta); -						} -					} -				} -			} -			fclose(fp); -			fp = NULL; -		} -	} -  	/* INSTALL */  	if(inforeq & INFRQ_SCRIPTLET) {  		snprintf(path, PATH_MAX, "%sinstall", pkgpath); @@ -731,7 +714,7 @@ error:  	return(-1);  } -int _alpm_db_prepare(pmdb_t *db, pmpkg_t *info) +int _alpm_local_db_prepare(pmdb_t *db, pmpkg_t *info)  {  	mode_t oldmask;  	int retval = 0; @@ -755,14 +738,13 @@ int _alpm_db_prepare(pmdb_t *db, pmpkg_t *info)  	return(retval);  } -int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq) +int _alpm_local_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  {  	FILE *fp = NULL;  	char path[PATH_MAX];  	mode_t oldmask;  	alpm_list_t *lp = NULL;  	int retval = 0; -	int local = 0;  	char *pkgpath = NULL;  	ALPM_LOG_FUNC; @@ -776,8 +758,8 @@ int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  	/* make sure we have a sane umask */  	oldmask = umask(0022); -	if(strcmp(db->treename, "local") == 0) { -		local = 1; +	if(strcmp(db->treename, "local") != 0) { +		return(-1);  	}  	/* DESC */ @@ -810,102 +792,45 @@ int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  			}  			fprintf(fp, "\n");  		} -		if(local) { -			if(info->force) { -				fprintf(fp, "%%EPOCH%%\n" -						"1\n\n"); -			} -			if(info->url) { -				fprintf(fp, "%%URL%%\n" -								"%s\n\n", info->url); -			} -			if(info->licenses) { -				fputs("%LICENSE%\n", fp); -				for(lp = info->licenses; lp; lp = lp->next) { -					fprintf(fp, "%s\n", (char *)lp->data); -				} -				fprintf(fp, "\n"); -			} -			if(info->arch) { -				fprintf(fp, "%%ARCH%%\n" -								"%s\n\n", info->arch); -			} -			if(info->builddate) { -				fprintf(fp, "%%BUILDDATE%%\n" -								"%ld\n\n", info->builddate); -			} -			if(info->installdate) { -				fprintf(fp, "%%INSTALLDATE%%\n" -								"%ld\n\n", info->installdate); -			} -			if(info->packager) { -				fprintf(fp, "%%PACKAGER%%\n" -								"%s\n\n", info->packager); -			} -			if(info->isize) { -				/* only write installed size, csize is irrelevant once installed */ -				fprintf(fp, "%%SIZE%%\n" -								"%jd\n\n", (intmax_t)info->isize); -			} -			if(info->reason) { -				fprintf(fp, "%%REASON%%\n" -								"%u\n\n", info->reason); -			} -		} else { -			if(info->size) { -				fprintf(fp, "%%CSIZE%%\n" -								"%jd\n\n", (intmax_t)info->size); -			} -			if(info->isize) { -				fprintf(fp, "%%ISIZE%%\n" -								"%jd\n\n", (intmax_t)info->isize); -			} -			if(info->md5sum) { -				fprintf(fp, "%%MD5SUM%%\n" -								"%s\n\n", info->md5sum); -			} +		if(info->epoch) { +			fprintf(fp, "%%EPOCH%%\n" +							"%d\n\n", info->epoch);  		} -		fclose(fp); -		fp = NULL; -	} - -	/* FILES */ -	if(local && (inforeq & INFRQ_FILES)) { -		_alpm_log(PM_LOG_DEBUG, "writing %s-%s FILES information back to db\n", -				info->name, info->version); -		snprintf(path, PATH_MAX, "%sfiles", pkgpath); -		if((fp = fopen(path, "w")) == NULL) { -			_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno)); -			retval = -1; -			goto cleanup; +		if(info->url) { +			fprintf(fp, "%%URL%%\n" +							"%s\n\n", info->url);  		} -		if(info->files) { -			fprintf(fp, "%%FILES%%\n"); -			for(lp = info->files; lp; lp = lp->next) { +		if(info->licenses) { +			fputs("%LICENSE%\n", fp); +			for(lp = info->licenses; lp; lp = lp->next) {  				fprintf(fp, "%s\n", (char *)lp->data);  			}  			fprintf(fp, "\n");  		} -		if(info->backup) { -			fprintf(fp, "%%BACKUP%%\n"); -			for(lp = info->backup; lp; lp = lp->next) { -				fprintf(fp, "%s\n", (char *)lp->data); -			} -			fprintf(fp, "\n"); +		if(info->arch) { +			fprintf(fp, "%%ARCH%%\n" +							"%s\n\n", info->arch);  		} -		fclose(fp); -		fp = NULL; -	} - -	/* DEPENDS */ -	if(inforeq & INFRQ_DEPENDS) { -		_alpm_log(PM_LOG_DEBUG, "writing %s-%s DEPENDS information back to db\n", -			info->name, info->version); -		snprintf(path, PATH_MAX, "%sdepends", pkgpath); -		if((fp = fopen(path, "w")) == NULL) { -			_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno)); -			retval = -1; -			goto cleanup; +		if(info->builddate) { +			fprintf(fp, "%%BUILDDATE%%\n" +							"%ld\n\n", info->builddate); +		} +		if(info->installdate) { +			fprintf(fp, "%%INSTALLDATE%%\n" +							"%ld\n\n", info->installdate); +		} +		if(info->packager) { +			fprintf(fp, "%%PACKAGER%%\n" +							"%s\n\n", info->packager); +		} +		if(info->isize) { +			/* only write installed size, csize is irrelevant once installed */ +			fprintf(fp, "%%SIZE%%\n" +							"%jd\n\n", (intmax_t)info->isize); +		} +		if(info->reason) { +			fprintf(fp, "%%REASON%%\n" +							"%u\n\n", info->reason);  		}  		if(info->depends) {  			fputs("%DEPENDS%\n", fp); @@ -937,6 +862,35 @@ int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)  			}  			fprintf(fp, "\n");  		} + +		fclose(fp); +		fp = NULL; +	} + +	/* FILES */ +	if(inforeq & INFRQ_FILES) { +		_alpm_log(PM_LOG_DEBUG, "writing %s-%s FILES information back to db\n", +				info->name, info->version); +		snprintf(path, PATH_MAX, "%sfiles", pkgpath); +		if((fp = fopen(path, "w")) == NULL) { +			_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno)); +			retval = -1; +			goto cleanup; +		} +		if(info->files) { +			fprintf(fp, "%%FILES%%\n"); +			for(lp = info->files; lp; lp = lp->next) { +				fprintf(fp, "%s\n", (char *)lp->data); +			} +			fprintf(fp, "\n"); +		} +		if(info->backup) { +			fprintf(fp, "%%BACKUP%%\n"); +			for(lp = info->backup; lp; lp = lp->next) { +				fprintf(fp, "%s\n", (char *)lp->data); +			} +			fprintf(fp, "\n"); +		}  		fclose(fp);  		fp = NULL;  	} @@ -955,7 +909,7 @@ cleanup:  	return(retval);  } -int _alpm_db_remove(pmdb_t *db, pmpkg_t *info) +int _alpm_local_db_remove(pmdb_t *db, pmpkg_t *info)  {  	int ret = 0;  	char *pkgpath = NULL; @@ -976,4 +930,33 @@ int _alpm_db_remove(pmdb_t *db, pmpkg_t *info)  	return(ret);  } +struct db_operations local_db_ops = { +	.populate         = local_db_populate, +	.unregister       = _alpm_db_unregister, +}; + +pmdb_t *_alpm_db_register_local(void) +{ +	pmdb_t *db; + +	ALPM_LOG_FUNC; + +	if(handle->db_local != NULL) { +		_alpm_log(PM_LOG_WARNING, _("attempt to re-register the 'local' DB\n")); +		RET_ERR(PM_ERR_DB_NOT_NULL, NULL); +	} + +	_alpm_log(PM_LOG_DEBUG, "registering local database\n"); + +	db = _alpm_db_new("local", 1); +	db->ops = &local_db_ops; +	if(db == NULL) { +		RET_ERR(PM_ERR_DB_CREATE, NULL); +	} + +	handle->db_local = db; +	return(db); +} + +  /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/be_package.c b/lib/libalpm/be_package.c index ff266ae8..90fd4124 100644 --- a/lib/libalpm/be_package.c +++ b/lib/libalpm/be_package.c @@ -26,6 +26,7 @@  #include <limits.h>  #include <ctype.h>  #include <locale.h> /* setlocale */ +#include <errno.h>  /* libarchive */  #include <archive.h> @@ -39,6 +40,113 @@  #include "deps.h" /* _alpm_splitdep */  /** + * Open a package changelog for reading. Similar to fopen in functionality, + * except that the returned 'file stream' is from an archive. + * @param pkg the package (file) to read the changelog + * @return a 'file stream' to the package changelog + */ +static void *_package_changelog_open(pmpkg_t *pkg) +{ +	ALPM_LOG_FUNC; + +	ASSERT(pkg != NULL, return(NULL)); + +	struct archive *archive = NULL; +	struct archive_entry *entry; +	const char *pkgfile = pkg->origin_data.file; + +	if((archive = archive_read_new()) == NULL) { +		RET_ERR(PM_ERR_LIBARCHIVE, NULL); +	} + +	archive_read_support_compression_all(archive); +	archive_read_support_format_all(archive); + +	if (archive_read_open_filename(archive, pkgfile, +				ARCHIVE_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) { +		RET_ERR(PM_ERR_PKG_OPEN, NULL); +	} + +	while(archive_read_next_header(archive, &entry) == ARCHIVE_OK) { +		const char *entry_name = archive_entry_pathname(entry); + +		if(strcmp(entry_name, ".CHANGELOG") == 0) { +			return(archive); +		} +	} +	/* we didn't find a changelog */ +	archive_read_finish(archive); +	errno = ENOENT; + +	return(NULL); +} + +/** + * Read data from an open changelog 'file stream'. Similar to fread in + * functionality, this function takes a buffer and amount of data to read. + * @param ptr a buffer to fill with raw changelog data + * @param size the size of the buffer + * @param pkg the package that the changelog is being read from + * @param fp a 'file stream' to the package changelog + * @return the number of characters read, or 0 if there is no more data + */ +static size_t _package_changelog_read(void *ptr, size_t size, +		const pmpkg_t *pkg, const void *fp) +{ +	ssize_t sret = archive_read_data((struct archive*)fp, ptr, size); +	/* Report error (negative values) */ +	if(sret < 0) { +		pm_errno = PM_ERR_LIBARCHIVE; +		return(0); +	} else { +		return((size_t)sret); +	} +} + +/* +static int _package_changelog_feof(const pmpkg_t *pkg, void *fp) +{ +	// note: this doesn't quite work, no feof in libarchive +	return( archive_read_data((struct archive*)fp, NULL, 0) ); +} +*/ + +/** + * Close a package changelog for reading. Similar to fclose in functionality, + * except that the 'file stream' is from an archive. + * @param pkg the package (file) that the changelog was read from + * @param fp a 'file stream' to the package changelog + * @return whether closing the package changelog stream was successful + */ +static int _package_changelog_close(const pmpkg_t *pkg, void *fp) +{ +	return( archive_read_finish((struct archive *)fp) ); +} + + +/** Package file operations struct accessor. We implement this as a method + * rather than a static struct as in be_files because we want to reuse the + * majority of the default_pkg_ops struct and add only a few operations of + * our own on top. The static file_pkg_ops variable inside this function + * lets us only initialize an operations struct once which can always be + * accessed by this method. + */ +static struct pkg_operations *get_file_pkg_ops(void) +{ +	static struct pkg_operations *file_pkg_ops = NULL; +	/* determine whether our static file_pkg_ops struct has been initialized */ +	if(!file_pkg_ops) { +		MALLOC(file_pkg_ops, sizeof(struct pkg_operations), +				RET_ERR(PM_ERR_MEMORY, NULL)); +		memcpy(file_pkg_ops, &default_pkg_ops, sizeof(struct pkg_operations)); +		file_pkg_ops->changelog_open  = _package_changelog_open; +		file_pkg_ops->changelog_read  = _package_changelog_read; +		file_pkg_ops->changelog_close = _package_changelog_close; +	} +	return(file_pkg_ops); +} + +/**   * Parses the package description file for a package into a pmpkg_t struct.   * @param archive the archive to read from, pointed at the .PKGINFO entry   * @param newpkg an empty pmpkg_t struct to fill with package info @@ -47,17 +155,22 @@   */  static int parse_descfile(struct archive *a, pmpkg_t *newpkg)  { -	char line[PATH_MAX];  	char *ptr = NULL;  	char *key = NULL;  	int linenum = 0; +	struct archive_read_buffer buf;  	ALPM_LOG_FUNC; -	/* loop until we reach EOF (where archive_fgets will return NULL) */ -	while(_alpm_archive_fgets(line, PATH_MAX, a) != NULL) { +	memset(&buf, 0, sizeof(buf)); +	/* 512K for a line length seems reasonable */ +	buf.max_line_size = 512 * 1024; + +	/* loop until we reach EOF or other error */ +	while(_alpm_archive_fgets(a, &buf) == ARCHIVE_OK) { +		char *line = _alpm_strtrim(buf.line); +  		linenum++; -		_alpm_strtrim(line);  		if(strlen(line) == 0 || line[0] == '#') {  			continue;  		} @@ -69,21 +182,27 @@ static int parse_descfile(struct archive *a, pmpkg_t *newpkg)  		} else {  			key = _alpm_strtrim(key);  			ptr = _alpm_strtrim(ptr); -			if(!strcmp(key, "pkgname")) { +			if(strcmp(key, "pkgname") == 0) {  				STRDUP(newpkg->name, ptr, RET_ERR(PM_ERR_MEMORY, -1)); -			} else if(!strcmp(key, "pkgver")) { +				newpkg->name_hash = _alpm_hash_sdbm(newpkg->name); +			} else if(strcmp(key, "pkgver") == 0) {  				STRDUP(newpkg->version, ptr, RET_ERR(PM_ERR_MEMORY, -1)); -			} else if(!strcmp(key, "pkgdesc")) { +			} else if(strcmp(key, "pkgdesc") == 0) {  				STRDUP(newpkg->desc, ptr, RET_ERR(PM_ERR_MEMORY, -1)); -			} else if(!strcmp(key, "force")) { -				newpkg->force = 1; -			} else if(!strcmp(key, "group")) { +			} else if(strcmp(key, "force") == 0) { +				/* For backward compatibility, like in sync_db_read */ +				if(!newpkg->epoch) { +					newpkg->epoch = 1; +				} +			} else if(strcmp(key, "epoch") == 0) { +				newpkg->epoch = atoi(ptr); +			} else if(strcmp(key, "group") == 0) {  				newpkg->groups = alpm_list_add(newpkg->groups, strdup(ptr)); -			} else if(!strcmp(key, "url")) { +			} else if(strcmp(key, "url") == 0) {  				STRDUP(newpkg->url, ptr, RET_ERR(PM_ERR_MEMORY, -1)); -			} else if(!strcmp(key, "license")) { +			} else if(strcmp(key, "license") == 0) {  				newpkg->licenses = alpm_list_add(newpkg->licenses, strdup(ptr)); -			} else if(!strcmp(key, "builddate")) { +			} else if(strcmp(key, "builddate") == 0) {  				char first = tolower((unsigned char)ptr[0]);  				if(first > 'a' && first < 'z') {  					struct tm tmp_tm = {0}; /* initialize to null in case of failure */ @@ -94,27 +213,27 @@ static int parse_descfile(struct archive *a, pmpkg_t *newpkg)  				} else {  					newpkg->builddate = atol(ptr);  				} -			} else if(!strcmp(key, "packager")) { +			} else if(strcmp(key, "packager") == 0) {  				STRDUP(newpkg->packager, ptr, RET_ERR(PM_ERR_MEMORY, -1)); -			} else if(!strcmp(key, "arch")) { +			} else if(strcmp(key, "arch") == 0) {  				STRDUP(newpkg->arch, ptr, RET_ERR(PM_ERR_MEMORY, -1)); -			} else if(!strcmp(key, "size")) { +			} else if(strcmp(key, "size") == 0) {  				/* size in the raw package is uncompressed (installed) size */  				newpkg->isize = atol(ptr); -			} else if(!strcmp(key, "depend")) { +			} else if(strcmp(key, "depend") == 0) {  				pmdepend_t *dep = _alpm_splitdep(ptr);  				newpkg->depends = alpm_list_add(newpkg->depends, dep); -			} else if(!strcmp(key, "optdepend")) { +			} else if(strcmp(key, "optdepend") == 0) {  				newpkg->optdepends = alpm_list_add(newpkg->optdepends, strdup(ptr)); -			} else if(!strcmp(key, "conflict")) { +			} else if(strcmp(key, "conflict") == 0) {  				newpkg->conflicts = alpm_list_add(newpkg->conflicts, strdup(ptr)); -			} else if(!strcmp(key, "replaces")) { +			} else if(strcmp(key, "replaces") == 0) {  				newpkg->replaces = alpm_list_add(newpkg->replaces, strdup(ptr)); -			} else if(!strcmp(key, "provides")) { +			} else if(strcmp(key, "provides") == 0) {  				newpkg->provides = alpm_list_add(newpkg->provides, strdup(ptr)); -			} else if(!strcmp(key, "backup")) { +			} else if(strcmp(key, "backup") == 0) {  				newpkg->backup = alpm_list_add(newpkg->backup, strdup(ptr)); -			} else if(!strcmp(key, "makepkgopt")) { +			} else if(strcmp(key, "makepkgopt") == 0) {  				/* not used atm */  			} else {  				_alpm_log(PM_LOG_DEBUG, "%s: syntax error in description file line %d\n", @@ -232,11 +351,13 @@ static pmpkg_t *pkg_load(const char *pkgfile, int full)  		goto pkg_invalid;  	} -  archive_read_finish(archive); +	archive_read_finish(archive);  	/* internal fields for package struct */  	newpkg->origin = PKG_FROM_FILE; +	/* TODO eventually kill/move this? */  	newpkg->origin_data.file = strdup(pkgfile); +	newpkg->ops = get_file_pkg_ops();  	if(full) {  		/* "checking for conflicts" requires a sorted list, ensure that here */ @@ -247,7 +368,7 @@ static pmpkg_t *pkg_load(const char *pkgfile, int full)  	} else {  		/* get rid of any partial filelist we may have collected, it is invalid */  		FREELIST(newpkg->files); -		newpkg->infolevel = INFRQ_BASE | INFRQ_DESC | INFRQ_DEPENDS; +		newpkg->infolevel = INFRQ_BASE | INFRQ_DESC;  	}  	return(newpkg); diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c new file mode 100644 index 00000000..4786864a --- /dev/null +++ b/lib/libalpm/be_sync.c @@ -0,0 +1,418 @@ +/* + *  be_sync.c + * + *  Copyright (c) 2006-2010 Pacman Development Team <pacman-dev@archlinux.org> + *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> + * + *  This program 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, see <http://www.gnu.org/licenses/>. + */ + +#include "config.h" + +#include <errno.h> +#include <ctype.h> +#include <locale.h> +#include <limits.h> + +/* libarchive */ +#include <archive.h> +#include <archive_entry.h> + +/* libalpm */ +#include "util.h" +#include "log.h" +#include "alpm.h" +#include "alpm_list.h" +#include "package.h" +#include "handle.h" +#include "delta.h" +#include "deps.h" +#include "dload.h" + +/** Update a package database + * + * An update of the package database \a db will be attempted. Unless + * \a force is true, the update will only be performed if the remote + * database was modified since the last update. + * + * A transaction is necessary for this operation, in order to obtain a + * database lock. During this transaction the front-end will be informed + * of the download progress of the database via the download callback. + * + * Example: + * @code + * pmdb_t *db; + * int result; + * db = alpm_list_getdata(alpm_option_get_syncdbs()); + * if(alpm_trans_init(0, NULL, NULL, NULL) == 0) { + *     result = alpm_db_update(0, db); + *     alpm_trans_release(); + * + *     if(result > 0) { + *	       printf("Unable to update database: %s\n", alpm_strerrorlast()); + *     } else if(result < 0) { + *         printf("Database already up to date\n"); + *     } else { + *         printf("Database updated\n"); + *     } + * } + * @endcode + * + * @ingroup alpm_databases + * @note After a successful update, the \link alpm_db_get_pkgcache() + * package cache \endlink will be invalidated + * @param force if true, then forces the update, otherwise update only in case + * the database isn't up to date + * @param db pointer to the package database to update + * @return 0 on success, > 0 on error (pm_errno is set accordingly), < 0 if up + * to date + */ +int SYMEXPORT alpm_db_update(int force, pmdb_t *db) +{ +	char *dbfile, *syncpath; +	const char *dbpath; +	struct stat buf; +	size_t len; +	int ret; + +	ALPM_LOG_FUNC; + +	/* Sanity checks */ +	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); +	ASSERT(db != NULL && db != handle->db_local, RET_ERR(PM_ERR_WRONG_ARGS, -1)); + +	if(!alpm_list_find_ptr(handle->dbs_sync, db)) { +		RET_ERR(PM_ERR_DB_NOT_FOUND, -1); +	} + +	len = strlen(db->treename) + 4; +	MALLOC(dbfile, len, RET_ERR(PM_ERR_MEMORY, -1)); +	sprintf(dbfile, "%s.db", db->treename); + +	dbpath = alpm_option_get_dbpath(); +	len = strlen(dbpath) + 6; +	MALLOC(syncpath, len, RET_ERR(PM_ERR_MEMORY, -1)); +	sprintf(syncpath, "%s%s", dbpath, "sync/"); + +	if(stat(syncpath, &buf) != 0) { +		_alpm_log(PM_LOG_DEBUG, "database dir '%s' does not exist, creating it\n", +				syncpath); +		if(_alpm_makepath(syncpath) != 0) { +			free(dbfile); +			free(syncpath); +			RET_ERR(PM_ERR_SYSTEM, -1); +		} +	} else if(!S_ISDIR(buf.st_mode)) { +		_alpm_log(PM_LOG_WARNING, _("removing invalid file: %s\n"), syncpath); +		if(unlink(syncpath) != 0 || _alpm_makepath(syncpath) != 0) { +			free(dbfile); +			free(syncpath); +			RET_ERR(PM_ERR_SYSTEM, -1); +		} +	} + +	ret = _alpm_download_single_file(dbfile, db->servers, syncpath, force); +	free(dbfile); +	free(syncpath); + +	if(ret == 1) { +		/* files match, do nothing */ +		pm_errno = 0; +		return(1); +	} else if(ret == -1) { +		/* pm_errno was set by the download code */ +		_alpm_log(PM_LOG_DEBUG, "failed to sync db: %s\n", alpm_strerrorlast()); +		return(-1); +	} + +	/* Cache needs to be rebuilt */ +	_alpm_db_free_pkgcache(db); + +	return(0); +} + +/* Forward decl so I don't reorganize the whole file right now */ +static int sync_db_read(pmdb_t *db, struct archive *archive, struct archive_entry *entry); + +static int sync_db_populate(pmdb_t *db) +{ +	int count = 0; +	struct archive *archive; +	struct archive_entry *entry; + +	ALPM_LOG_FUNC; + +	ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1)); + +	if((archive = archive_read_new()) == NULL) +		RET_ERR(PM_ERR_LIBARCHIVE, 1); + +	archive_read_support_compression_all(archive); +	archive_read_support_format_all(archive); + +	if(archive_read_open_filename(archive, _alpm_db_path(db), +				ARCHIVE_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) { +		_alpm_log(PM_LOG_ERROR, _("could not open %s: %s\n"), _alpm_db_path(db), +				archive_error_string(archive)); +		RET_ERR(PM_ERR_PKG_OPEN, 1); +	} + +	while(archive_read_next_header(archive, &entry) == ARCHIVE_OK) { +		const struct stat *st; +		const char *name; +		pmpkg_t *pkg; + +		st = archive_entry_stat(entry); + +		if(S_ISDIR(st->st_mode)) { +			pkg = _alpm_pkg_new(); +			if(pkg == NULL) { +				archive_read_finish(archive); +				return(-1); +			} + +			name = archive_entry_pathname(entry); + +			if(_alpm_splitname(name, pkg) != 0) { +				_alpm_log(PM_LOG_ERROR, _("invalid name for database entry '%s'\n"), +						name); +				_alpm_pkg_free(pkg); +				continue; +			} + +			/* duplicated database entries are not allowed */ +			if(_alpm_pkg_find(db->pkgcache, pkg->name)) { +				_alpm_log(PM_LOG_ERROR, _("duplicated database entry '%s'\n"), pkg->name); +				_alpm_pkg_free(pkg); +				continue; +			} + +			pkg->origin = PKG_FROM_SYNCDB; +			pkg->ops = &default_pkg_ops; +			pkg->origin_data.db = db; + +			/* add to the collection */ +			_alpm_log(PM_LOG_FUNCTION, "adding '%s' to package cache for db '%s'\n", +					pkg->name, db->treename); +			db->pkgcache = alpm_list_add(db->pkgcache, pkg); +			count++; +		} else { +			/* we have desc, depends or deltas - parse it */ +			sync_db_read(db, archive, entry); +		} +	} + +	db->pkgcache = alpm_list_msort(db->pkgcache, count, _alpm_pkg_cmp); +	archive_read_finish(archive); + +	return(count); +} + +#define READ_NEXT(s) do { \ +	if(_alpm_archive_fgets(archive, &buf) != ARCHIVE_OK) goto error; \ +	s = _alpm_strtrim(buf.line); \ +} while(0) + +#define READ_AND_STORE(f) do { \ +	READ_NEXT(line); \ +	STRDUP(f, line, goto error); \ +} while(0) + +#define READ_AND_STORE_ALL(f) do { \ +	char *linedup; \ +	READ_NEXT(line); \ +	if(strlen(line) == 0) break; \ +	STRDUP(linedup, line, goto error); \ +	f = alpm_list_add(f, linedup); \ +} while(1) /* note the while(1) and not (0) */ + +static int sync_db_read(pmdb_t *db, struct archive *archive, struct archive_entry *entry) +{ +	const char *entryname = NULL; +	char *filename, *pkgname, *p, *q; +	pmpkg_t *pkg; +	struct archive_read_buffer buf; + +	ALPM_LOG_FUNC; + +	if(db == NULL) { +		RET_ERR(PM_ERR_DB_NULL, -1); +	} + +	if(entry != NULL) { +		entryname = archive_entry_pathname(entry); +	} +	if(entryname == NULL) { +		_alpm_log(PM_LOG_DEBUG, "invalid archive entry provided to _alpm_sync_db_read, skipping\n"); +		return(-1); +	} + +	_alpm_log(PM_LOG_FUNCTION, "loading package data from archive entry %s\n", +			entryname); + +	memset(&buf, 0, sizeof(buf)); +	/* 512K for a line length seems reasonable */ +	buf.max_line_size = 512 * 1024; + +	/* get package and db file names */ +	STRDUP(pkgname, entryname, RET_ERR(PM_ERR_MEMORY, -1)); +	p = pkgname + strlen(pkgname); +	for(q = --p; *q && *q != '/'; q--); +	STRDUP(filename, q+1, RET_ERR(PM_ERR_MEMORY, -1)); +	for(p = --q; *p && *p != '-'; p--); +	for(q = --p; *q && *q != '-'; q--); +	*q = '\0'; + +	/* package is already in db due to parsing of directory name */ +	pkg = _alpm_pkg_find(db->pkgcache, pkgname); +	if(pkg == NULL) { +		_alpm_log(PM_LOG_DEBUG, "package %s not found in %s sync database", +					pkgname, db->treename); +		return(-1); +	} + +	if(strcmp(filename, "desc") == 0 || strcmp(filename, "depends") == 0 +			|| strcmp(filename, "deltas") == 0) { +		while(_alpm_archive_fgets(archive, &buf) == ARCHIVE_OK) { +			char *line = _alpm_strtrim(buf.line); + +			if(strcmp(line, "%NAME%") == 0) { +				READ_NEXT(line); +				if(strcmp(line, pkg->name) != 0) { +					_alpm_log(PM_LOG_ERROR, _("%s database is inconsistent: name " +								"mismatch on package %s\n"), db->treename, pkg->name); +				} +			} else if(strcmp(line, "%VERSION%") == 0) { +				READ_NEXT(line); +				if(strcmp(line, pkg->version) != 0) { +					_alpm_log(PM_LOG_ERROR, _("%s database is inconsistent: version " +								"mismatch on package %s\n"), db->treename, pkg->name); +				} +			} else if(strcmp(line, "%FILENAME%") == 0) { +				READ_AND_STORE(pkg->filename); +			} else if(strcmp(line, "%DESC%") == 0) { +				READ_AND_STORE(pkg->desc); +			} else if(strcmp(line, "%GROUPS%") == 0) { +				READ_AND_STORE_ALL(pkg->groups); +			} else if(strcmp(line, "%URL%") == 0) { +				READ_AND_STORE(pkg->url); +			} else if(strcmp(line, "%LICENSE%") == 0) { +				READ_AND_STORE_ALL(pkg->licenses); +			} else if(strcmp(line, "%ARCH%") == 0) { +				READ_AND_STORE(pkg->arch); +			} else if(strcmp(line, "%BUILDDATE%") == 0) { +				READ_NEXT(line); +				char first = tolower((unsigned char)line[0]); +				if(first > 'a' && first < 'z') { +					/* initialize to null in case of failure */ +					struct tm tmp_tm = {0}; +					setlocale(LC_TIME, "C"); +					strptime(line, "%a %b %e %H:%M:%S %Y", &tmp_tm); +					pkg->builddate = mktime(&tmp_tm); +					setlocale(LC_TIME, ""); +				} else { +					pkg->builddate = atol(line); +				} +			} else if(strcmp(line, "%PACKAGER%") == 0) { +				READ_AND_STORE(pkg->packager); +			} else if(strcmp(line, "%CSIZE%") == 0) { +				/* Note: the CSIZE and SIZE fields both share the "size" field in the +				 * pkginfo_t struct. This can be done b/c CSIZE is currently only used +				 * in sync databases, and SIZE is only used in local databases. +				 */ +				READ_NEXT(line); +				pkg->size = atol(line); +				/* also store this value to isize if isize is unset */ +				if(pkg->isize == 0) { +					pkg->isize = pkg->size; +				} +			} else if(strcmp(line, "%ISIZE%") == 0) { +				READ_NEXT(line); +				pkg->isize = atol(line); +			} else if(strcmp(line, "%MD5SUM%") == 0) { +				READ_AND_STORE(pkg->md5sum); +			} else if(strcmp(line, "%REPLACES%") == 0) { +				READ_AND_STORE_ALL(pkg->replaces); +			} else if(strcmp(line, "%EPOCH%") == 0) { +				READ_NEXT(line); +				pkg->epoch = atoi(line); +			} else if(strcmp(line, "%FORCE%") == 0) { +				/* For backward compatibility, treat force as a non-zero epoch +				 * but only if we didn't already have a known epoch value. */ +				if(!pkg->epoch) { +					pkg->epoch = 1; +				} +			} else if(strcmp(line, "%DEPENDS%") == 0) { +				/* Different than the rest because of the _alpm_splitdep call. */ +				while(1) { +					READ_NEXT(line); +					if(strlen(line) == 0) break; +					pkg->depends = alpm_list_add(pkg->depends, _alpm_splitdep(line)); +				} +			} else if(strcmp(line, "%OPTDEPENDS%") == 0) { +				READ_AND_STORE_ALL(pkg->optdepends); +			} else if(strcmp(line, "%CONFLICTS%") == 0) { +				READ_AND_STORE_ALL(pkg->conflicts); +			} else if(strcmp(line, "%PROVIDES%") == 0) { +				READ_AND_STORE_ALL(pkg->provides); +			} else if(strcmp(line, "%DELTAS%") == 0) { +				READ_AND_STORE_ALL(pkg->deltas); +			} +		} +	} else { +		 /* unknown database file */ +		_alpm_log(PM_LOG_DEBUG, "unknown database file: %s", filename); +	} + +error: +	FREE(pkgname); +	FREE(filename); +	/* TODO: return 0 always? */ +	return(0); +} + +struct db_operations sync_db_ops = { +	.populate         = sync_db_populate, +	.unregister       = _alpm_db_unregister, +}; + +pmdb_t *_alpm_db_register_sync(const char *treename) +{ +	pmdb_t *db; +	alpm_list_t *i; + +	ALPM_LOG_FUNC; + +	for(i = handle->dbs_sync; i; i = i->next) { +		pmdb_t *sdb = i->data; +		if(strcmp(treename, sdb->treename) == 0) { +			_alpm_log(PM_LOG_DEBUG, "attempt to re-register the '%s' database, using existing\n", sdb->treename); +			return sdb; +		} +	} + +	_alpm_log(PM_LOG_DEBUG, "registering sync database '%s'\n", treename); + +	db = _alpm_db_new(treename, 0); +	db->ops = &sync_db_ops; +	if(db == NULL) { +		RET_ERR(PM_ERR_DB_CREATE, NULL); +	} + +	handle->dbs_sync = alpm_list_add(handle->dbs_sync, db); +	return(db); +} + + +/* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/cache.c b/lib/libalpm/cache.c deleted file mode 100644 index a9a7edd9..00000000 --- a/lib/libalpm/cache.c +++ /dev/null @@ -1,291 +0,0 @@ -/* - *  cache.c - * - *  Copyright (c) 2006-2010 Pacman Development Team <pacman-dev@archlinux.org> - *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - * - *  This program 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, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include <stdio.h> -#include <stdlib.h> -#include <errno.h> -#include <string.h> - -/* libalpm */ -#include "cache.h" -#include "alpm_list.h" -#include "log.h" -#include "alpm.h" -#include "util.h" -#include "package.h" -#include "group.h" -#include "db.h" - -/* Returns a new package cache from db. - * It frees the cache if it already exists. - */ -int _alpm_db_load_pkgcache(pmdb_t *db) -{ -	ALPM_LOG_FUNC; - -	if(db == NULL) { -		return(-1); -	} -	_alpm_db_free_pkgcache(db); - -	_alpm_log(PM_LOG_DEBUG, "loading package cache for repository '%s'\n", -			db->treename); -	if(_alpm_db_populate(db) == -1) { -		_alpm_log(PM_LOG_DEBUG, -				"failed to load package cache for repository '%s'\n", db->treename); -		return(-1); -	} - -	db->pkgcache_loaded = 1; -	return(0); -} - -void _alpm_db_free_pkgcache(pmdb_t *db) -{ -	ALPM_LOG_FUNC; - -	if(db == NULL || !db->pkgcache_loaded) { -		return; -	} - -	_alpm_log(PM_LOG_DEBUG, "freeing package cache for repository '%s'\n", -	                        db->treename); - -	alpm_list_free_inner(db->pkgcache, (alpm_list_fn_free)_alpm_pkg_free); -	alpm_list_free(db->pkgcache); -	db->pkgcache = NULL; -	db->pkgcache_loaded = 0; - -	_alpm_db_free_grpcache(db); -} - -alpm_list_t *_alpm_db_get_pkgcache(pmdb_t *db) -{ -	ALPM_LOG_FUNC; - -	if(db == NULL) { -		return(NULL); -	} - -	if(!db->pkgcache_loaded) { -		_alpm_db_load_pkgcache(db); -	} - -	/* hmmm, still NULL ?*/ -	if(!db->pkgcache) { -		_alpm_log(PM_LOG_DEBUG, "warning: pkgcache is NULL for db '%s'\n", db->treename); -	} - -	return(db->pkgcache); -} - -/* "duplicate" pkg with BASE info (to spare some memory) then add it to pkgcache */ -int _alpm_db_add_pkgincache(pmdb_t *db, pmpkg_t *pkg) -{ -	pmpkg_t *newpkg; - -	ALPM_LOG_FUNC; - -	if(db == NULL || !db->pkgcache_loaded || pkg == NULL) { -		return(-1); -	} - -	newpkg = _alpm_pkg_new(); -	if(newpkg == NULL) { -		return(-1); -	} -	newpkg->name = strdup(pkg->name); -	newpkg->version = strdup(pkg->version); -	if(newpkg->name == NULL || newpkg->version == NULL) { -		pm_errno = PM_ERR_MEMORY; -		_alpm_pkg_free(newpkg); -		return(-1); -	} -	newpkg->origin = PKG_FROM_CACHE; -	newpkg->origin_data.db = db; -	newpkg->infolevel = INFRQ_BASE;  - -	_alpm_log(PM_LOG_DEBUG, "adding entry '%s' in '%s' cache\n", -						alpm_pkg_get_name(newpkg), db->treename); -	db->pkgcache = alpm_list_add_sorted(db->pkgcache, newpkg, _alpm_pkg_cmp); - -	_alpm_db_free_grpcache(db); - -	return(0); -} - -int _alpm_db_remove_pkgfromcache(pmdb_t *db, pmpkg_t *pkg) -{ -	void *vdata; -	pmpkg_t *data; - -	ALPM_LOG_FUNC; - -	if(db == NULL || !db->pkgcache_loaded || pkg == NULL) { -		return(-1); -	} - -	_alpm_log(PM_LOG_DEBUG, "removing entry '%s' from '%s' cache\n", -						alpm_pkg_get_name(pkg), db->treename); - -	db->pkgcache = alpm_list_remove(db->pkgcache, pkg, _alpm_pkg_cmp, &vdata); -	data = vdata; -	if(data == NULL) { -		/* package not found */ -		_alpm_log(PM_LOG_DEBUG, "cannot remove entry '%s' from '%s' cache: not found\n", -							alpm_pkg_get_name(pkg), db->treename); -		return(-1); -	} - -	_alpm_pkg_free(data); - -	_alpm_db_free_grpcache(db); - -	return(0); -} - -pmpkg_t *_alpm_db_get_pkgfromcache(pmdb_t *db, const char *target) -{ -	ALPM_LOG_FUNC; - -	if(db == NULL) { -		return(NULL); -	} - -	alpm_list_t *pkgcache = _alpm_db_get_pkgcache(db); -	if(!pkgcache) { -		_alpm_log(PM_LOG_DEBUG, "warning: failed to get '%s' from NULL pkgcache\n", -				target); -		return(NULL); -	} - -	return(_alpm_pkg_find(pkgcache, target)); -} - -/* Returns a new group cache from db. - */ -int _alpm_db_load_grpcache(pmdb_t *db) -{ -	alpm_list_t *lp; - -	ALPM_LOG_FUNC; - -	if(db == NULL) { -		return(-1); -	} - -	_alpm_log(PM_LOG_DEBUG, "loading group cache for repository '%s'\n", -			db->treename); - -	for(lp = _alpm_db_get_pkgcache(db); lp; lp = lp->next) { -		const alpm_list_t *i; -		pmpkg_t *pkg = lp->data; - -		for(i = alpm_pkg_get_groups(pkg); i; i = i->next) { -			const char *grpname = i->data; -			alpm_list_t *j; -			pmgrp_t *grp = NULL; -			int found = 0; - -			/* first look through the group cache for a group with this name */ -			for(j = db->grpcache; j; j = j->next) { -				grp = j->data; - -				if(strcmp(grp->name, grpname) == 0 -						&& !alpm_list_find_ptr(grp->packages, pkg)) { -					grp->packages = alpm_list_add(grp->packages, pkg); -					found = 1; -					break; -				} -			} -			if(found) { -				continue; -			} -			/* we didn't find the group, so create a new one with this name */ -			grp = _alpm_grp_new(grpname); -			grp->packages = alpm_list_add(grp->packages, pkg); -			db->grpcache = alpm_list_add(db->grpcache, grp); -		} -	} - -	db->grpcache_loaded = 1; -	return(0); -} - -void _alpm_db_free_grpcache(pmdb_t *db) -{ -	alpm_list_t *lg; - -	ALPM_LOG_FUNC; - -	if(db == NULL || !db->grpcache_loaded) { -		return; -	} - -	_alpm_log(PM_LOG_DEBUG, "freeing group cache for repository '%s'\n", -	                        db->treename); - -	for(lg = db->grpcache; lg; lg = lg->next) { -		_alpm_grp_free(lg->data); -		lg->data = NULL; -	} -	FREELIST(db->grpcache); -	db->grpcache_loaded = 0; -} - -alpm_list_t *_alpm_db_get_grpcache(pmdb_t *db) -{ -	ALPM_LOG_FUNC; - -	if(db == NULL) { -		return(NULL); -	} - -	if(!db->grpcache_loaded) { -		_alpm_db_load_grpcache(db); -	} - -	return(db->grpcache); -} - -pmgrp_t *_alpm_db_get_grpfromcache(pmdb_t *db, const char *target) -{ -	alpm_list_t *i; - -	ALPM_LOG_FUNC; - -	if(db == NULL || target == NULL || strlen(target) == 0) { -		return(NULL); -	} - -	for(i = _alpm_db_get_grpcache(db); i; i = i->next) { -		pmgrp_t *info = i->data; - -		if(strcmp(info->name, target) == 0) { -			return(info); -		} -	} - -	return(NULL); -} - -/* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/cache.h b/lib/libalpm/cache.h deleted file mode 100644 index 6ddcd186..00000000 --- a/lib/libalpm/cache.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - *  cache.h - * - *  Copyright (c) 2006-2010 Pacman Development Team <pacman-dev@archlinux.org> - *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> - * - *  This program 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, see <http://www.gnu.org/licenses/>. - */ -#ifndef _ALPM_CACHE_H -#define _ALPM_CACHE_H - -#include "db.h" -#include "alpm_list.h" -#include "group.h" -#include "package.h" - -/* packages */ -int _alpm_db_load_pkgcache(pmdb_t *db); -void _alpm_db_free_pkgcache(pmdb_t *db); -int _alpm_db_add_pkgincache(pmdb_t *db, pmpkg_t *pkg); -int _alpm_db_remove_pkgfromcache(pmdb_t *db, pmpkg_t *pkg); -alpm_list_t *_alpm_db_get_pkgcache(pmdb_t *db); -int _alpm_db_ensure_pkgcache(pmdb_t *db, pmdbinfrq_t infolevel); -pmpkg_t *_alpm_db_get_pkgfromcache(pmdb_t *db, const char *target); -/* groups */ -int _alpm_db_load_grpcache(pmdb_t *db); -void _alpm_db_free_grpcache(pmdb_t *db); -alpm_list_t *_alpm_db_get_grpcache(pmdb_t *db); -pmgrp_t *_alpm_db_get_grpfromcache(pmdb_t *db, const char *target); - -#endif /* _ALPM_CACHE_H */ - -/* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/conflict.c b/lib/libalpm/conflict.c index e36844a8..2b0efa5a 100644 --- a/lib/libalpm/conflict.c +++ b/lib/libalpm/conflict.c @@ -38,7 +38,6 @@  #include "trans.h"  #include "util.h"  #include "log.h" -#include "cache.h"  #include "deps.h"  pmconflict_t *_alpm_conflict_new(const char *package1, const char *package2, const char *reason) @@ -88,8 +87,8 @@ int _alpm_conflict_isin(pmconflict_t *needle, alpm_list_t *haystack)  		char *cpkg2 = conflict->package2;  		char *npkg1 = needle->package1;  		char *npkg2 = needle->package2; -		if((!strcmp(cpkg1, npkg1)  && !strcmp(cpkg2, npkg2)) -				|| (!strcmp(cpkg1, npkg2) && !strcmp(cpkg2, npkg1))) { +		if((strcmp(cpkg1, npkg1) == 0  && strcmp(cpkg2, npkg2) == 0) +				|| (strcmp(cpkg1, npkg2) == 0 && strcmp(cpkg2, npkg1) == 0)) {  			return(1);  		}  	} @@ -110,7 +109,7 @@ static int does_conflict(pmpkg_t *pkg1, const char *conflict, pmpkg_t *pkg2)  	pmdepend_t *conf = _alpm_splitdep(conflict);  	int match = 0; -	match = alpm_depcmp(pkg2, conf); +	match = _alpm_depcmp(pkg2, conf);  	if(match) {  		_alpm_log(PM_LOG_DEBUG, "package %s conflicts with %s (by %s)\n",  				pkg1name, pkg2name, conflict); @@ -321,7 +320,7 @@ static alpm_list_t *chk_filedifference(alpm_list_t *filesA, alpm_list_t *filesB)   */  static alpm_list_t *add_fileconflict(alpm_list_t *conflicts,                      pmfileconflicttype_t type, const char *filestr, -										const char* name1, const char* name2) +                    const char* name1, const char* name2)  {  	pmfileconflict_t *conflict;  	MALLOC(conflict, sizeof(pmfileconflict_t), RET_ERR(PM_ERR_MEMORY, NULL)); diff --git a/lib/libalpm/db.c b/lib/libalpm/db.c index c8a91a2b..137f8d04 100644 --- a/lib/libalpm/db.c +++ b/lib/libalpm/db.c @@ -29,7 +29,6 @@  #include <errno.h>  #include <string.h>  #include <sys/stat.h> -#include <dirent.h>  #include <regex.h>  #include <time.h> @@ -39,8 +38,9 @@  #include "log.h"  #include "util.h"  #include "handle.h" -#include "cache.h"  #include "alpm.h" +#include "package.h" +#include "group.h"  /** \addtogroup alpm_databases Database Functions   * @brief Functions to query and manipulate the database of libalpm @@ -80,7 +80,7 @@ pmdb_t SYMEXPORT *alpm_db_register_local(void)  }  /* Helper function for alpm_db_unregister{_all} */ -static void _alpm_db_unregister(pmdb_t *db) +void _alpm_db_unregister(pmdb_t *db)  {  	if(db == NULL) {  		return; @@ -96,6 +96,7 @@ static void _alpm_db_unregister(pmdb_t *db)  int SYMEXPORT alpm_db_unregister_all(void)  {  	alpm_list_t *i; +	pmdb_t *db;  	ALPM_LOG_FUNC; @@ -105,13 +106,16 @@ int SYMEXPORT alpm_db_unregister_all(void)  	ASSERT(handle->trans == NULL, RET_ERR(PM_ERR_TRANS_NOT_NULL, -1));  	/* close local database */ -	_alpm_db_unregister(handle->db_local); -	handle->db_local = NULL; +	db = handle->db_local; +	if(db) { +		db->ops->unregister(db); +		handle->db_local = NULL; +	}  	/* and also sync ones */  	for(i = handle->dbs_sync; i; i = i->next) { -		pmdb_t *db = i->data; -		_alpm_db_unregister(db); +		db = i->data; +		db->ops->unregister(db);  		i->data = NULL;  	}  	FREELIST(handle->dbs_sync); @@ -154,7 +158,7 @@ int SYMEXPORT alpm_db_unregister(pmdb_t *db)  		RET_ERR(PM_ERR_DB_NOT_FOUND, -1);  	} -	_alpm_db_unregister(db); +	db->ops->unregister(db);  	return(0);  } @@ -321,7 +325,7 @@ alpm_list_t SYMEXPORT *alpm_db_search(pmdb_t *db, const alpm_list_t* needles)  	return(_alpm_db_search(db, needles));  } -/* Set install reason for a package in db +/** Set install reason for a package in db   * @param db pointer to the package database   * @param name the name of the package   * @param reason the new install reason @@ -341,18 +345,14 @@ int SYMEXPORT alpm_db_set_pkgreason(pmdb_t *db, const char *name, pmpkgreason_t  	}  	_alpm_log(PM_LOG_DEBUG, "setting install reason %u for %s/%s\n", reason, db->treename, name); -	/* read DESC */ -	if(_alpm_db_read(db, pkg, INFRQ_DESC)) { -		return(-1); -	} -	if(pkg->reason == reason) { +	if(alpm_pkg_get_reason(pkg) == reason) {  		/* we are done */  		return(0);  	}  	/* set reason (in pkgcache) */  	pkg->reason = reason;  	/* write DESC */ -	if(_alpm_db_write(db, pkg, INFRQ_DESC)) { +	if(_alpm_local_db_write(db, pkg, INFRQ_DESC)) {  		return(-1);  	} @@ -361,7 +361,7 @@ int SYMEXPORT alpm_db_set_pkgreason(pmdb_t *db, const char *name, pmpkgreason_t  /** @} */ -static pmdb_t *_alpm_db_new(const char *treename, int is_local) +pmdb_t *_alpm_db_new(const char *treename, int is_local)  {  	pmdb_t *db; @@ -409,10 +409,10 @@ const char *_alpm_db_path(pmdb_t *db)  			CALLOC(db->_path, 1, pathsize, RET_ERR(PM_ERR_MEMORY, NULL));  			sprintf(db->_path, "%s%s/", dbpath, db->treename);  		} else { -			pathsize = strlen(dbpath) + 5 + strlen(db->treename) + 2; +			pathsize = strlen(dbpath) + 5 + strlen(db->treename) + 4;  			CALLOC(db->_path, 1, pathsize, RET_ERR(PM_ERR_MEMORY, NULL));  			/* all sync DBs now reside in the sync/ subdir of the dbpath */ -			sprintf(db->_path, "%ssync/%s/", dbpath, db->treename); +			sprintf(db->_path, "%ssync/%s.db", dbpath, db->treename);  		}  		_alpm_log(PM_LOG_DEBUG, "database path for tree %s set to %s\n",  				db->treename, db->_path); @@ -503,52 +503,246 @@ alpm_list_t *_alpm_db_search(pmdb_t *db, const alpm_list_t *needles)  	return(ret);  } -pmdb_t *_alpm_db_register_local(void) +/* Returns a new package cache from db. + * It frees the cache if it already exists. + */ +int _alpm_db_load_pkgcache(pmdb_t *db)  { -	pmdb_t *db; +	ALPM_LOG_FUNC; + +	if(db == NULL) { +		return(-1); +	} +	_alpm_db_free_pkgcache(db); + +	_alpm_log(PM_LOG_DEBUG, "loading package cache for repository '%s'\n", +			db->treename); +	if(db->ops->populate(db) == -1) { +		_alpm_log(PM_LOG_DEBUG, +				"failed to load package cache for repository '%s'\n", db->treename); +		return(-1); +	} +	db->pkgcache_loaded = 1; +	return(0); +} + +void _alpm_db_free_pkgcache(pmdb_t *db) +{  	ALPM_LOG_FUNC; -	if(handle->db_local != NULL) { -		_alpm_log(PM_LOG_WARNING, _("attempt to re-register the 'local' DB\n")); -		RET_ERR(PM_ERR_DB_NOT_NULL, NULL); +	if(db == NULL || !db->pkgcache_loaded) { +		return;  	} -	_alpm_log(PM_LOG_DEBUG, "registering local database\n"); +	_alpm_log(PM_LOG_DEBUG, "freeing package cache for repository '%s'\n", +	                        db->treename); + +	alpm_list_free_inner(db->pkgcache, (alpm_list_fn_free)_alpm_pkg_free); +	alpm_list_free(db->pkgcache); +	db->pkgcache_loaded = 0; + +	_alpm_db_free_grpcache(db); +} + +alpm_list_t *_alpm_db_get_pkgcache(pmdb_t *db) +{ +	ALPM_LOG_FUNC; -	db = _alpm_db_new("local", 1);  	if(db == NULL) { -		RET_ERR(PM_ERR_DB_CREATE, NULL); +		return(NULL);  	} -	handle->db_local = db; -	return(db); +	if(!db->pkgcache_loaded) { +		_alpm_db_load_pkgcache(db); +	} + +	/* hmmm, still NULL ?*/ +	if(!db->pkgcache) { +		_alpm_log(PM_LOG_DEBUG, "warning: pkgcache is NULL for db '%s'\n", db->treename); +	} + +	return(db->pkgcache);  } -pmdb_t *_alpm_db_register_sync(const char *treename) +/* "duplicate" pkg then add it to pkgcache */ +int _alpm_db_add_pkgincache(pmdb_t *db, pmpkg_t *pkg)  { -	pmdb_t *db; -	alpm_list_t *i; +	pmpkg_t *newpkg;  	ALPM_LOG_FUNC; -	for(i = handle->dbs_sync; i; i = i->next) { -		pmdb_t *sdb = i->data; -		if(strcmp(treename, sdb->treename) == 0) { -			_alpm_log(PM_LOG_DEBUG, "attempt to re-register the '%s' database, using existing\n", sdb->treename); -			return sdb; +	if(db == NULL || !db->pkgcache_loaded || pkg == NULL) { +		return(-1); +	} + +	newpkg = _alpm_pkg_dup(pkg); +	if(newpkg == NULL) { +		return(-1); +	} + +	_alpm_log(PM_LOG_DEBUG, "adding entry '%s' in '%s' cache\n", +						alpm_pkg_get_name(newpkg), db->treename); +	db->pkgcache = alpm_list_add_sorted(db->pkgcache, newpkg, _alpm_pkg_cmp); + +	_alpm_db_free_grpcache(db); + +	return(0); +} + +int _alpm_db_remove_pkgfromcache(pmdb_t *db, pmpkg_t *pkg) +{ +	void *vdata; +	pmpkg_t *data; + +	ALPM_LOG_FUNC; + +	if(db == NULL || !db->pkgcache_loaded || pkg == NULL) { +		return(-1); +	} + +	_alpm_log(PM_LOG_DEBUG, "removing entry '%s' from '%s' cache\n", +						alpm_pkg_get_name(pkg), db->treename); + +	db->pkgcache = alpm_list_remove(db->pkgcache, pkg, _alpm_pkg_cmp, &vdata); +	data = vdata; +	if(data == NULL) { +		/* package not found */ +		_alpm_log(PM_LOG_DEBUG, "cannot remove entry '%s' from '%s' cache: not found\n", +							alpm_pkg_get_name(pkg), db->treename); +		return(-1); +	} + +	_alpm_pkg_free(data); + +	_alpm_db_free_grpcache(db); + +	return(0); +} + +pmpkg_t *_alpm_db_get_pkgfromcache(pmdb_t *db, const char *target) +{ +	ALPM_LOG_FUNC; + +	if(db == NULL) { +		return(NULL); +	} + +	alpm_list_t *pkgcache = _alpm_db_get_pkgcache(db); +	if(!pkgcache) { +		_alpm_log(PM_LOG_DEBUG, "warning: failed to get '%s' from NULL pkgcache\n", +				target); +		return(NULL); +	} + +	return(_alpm_pkg_find(pkgcache, target)); +} + +/* Returns a new group cache from db. + */ +int _alpm_db_load_grpcache(pmdb_t *db) +{ +	alpm_list_t *lp; + +	ALPM_LOG_FUNC; + +	if(db == NULL) { +		return(-1); +	} + +	_alpm_log(PM_LOG_DEBUG, "loading group cache for repository '%s'\n", +			db->treename); + +	for(lp = _alpm_db_get_pkgcache(db); lp; lp = lp->next) { +		const alpm_list_t *i; +		pmpkg_t *pkg = lp->data; + +		for(i = alpm_pkg_get_groups(pkg); i; i = i->next) { +			const char *grpname = i->data; +			alpm_list_t *j; +			pmgrp_t *grp = NULL; +			int found = 0; + +			/* first look through the group cache for a group with this name */ +			for(j = db->grpcache; j; j = j->next) { +				grp = j->data; + +				if(strcmp(grp->name, grpname) == 0 +						&& !alpm_list_find_ptr(grp->packages, pkg)) { +					grp->packages = alpm_list_add(grp->packages, pkg); +					found = 1; +					break; +				} +			} +			if(found) { +				continue; +			} +			/* we didn't find the group, so create a new one with this name */ +			grp = _alpm_grp_new(grpname); +			grp->packages = alpm_list_add(grp->packages, pkg); +			db->grpcache = alpm_list_add(db->grpcache, grp);  		}  	} -	_alpm_log(PM_LOG_DEBUG, "registering sync database '%s'\n", treename); +	db->grpcache_loaded = 1; +	return(0); +} + +void _alpm_db_free_grpcache(pmdb_t *db) +{ +	alpm_list_t *lg; + +	ALPM_LOG_FUNC; + +	if(db == NULL || !db->grpcache_loaded) { +		return; +	} + +	_alpm_log(PM_LOG_DEBUG, "freeing group cache for repository '%s'\n", +	                        db->treename); + +	for(lg = db->grpcache; lg; lg = lg->next) { +		_alpm_grp_free(lg->data); +		lg->data = NULL; +	} +	FREELIST(db->grpcache); +	db->grpcache_loaded = 0; +} + +alpm_list_t *_alpm_db_get_grpcache(pmdb_t *db) +{ +	ALPM_LOG_FUNC; -	db = _alpm_db_new(treename, 0);  	if(db == NULL) { -		RET_ERR(PM_ERR_DB_CREATE, NULL); +		return(NULL);  	} -	handle->dbs_sync = alpm_list_add(handle->dbs_sync, db); -	return(db); +	if(!db->grpcache_loaded) { +		_alpm_db_load_grpcache(db); +	} + +	return(db->grpcache); +} + +pmgrp_t *_alpm_db_get_grpfromcache(pmdb_t *db, const char *target) +{ +	alpm_list_t *i; + +	ALPM_LOG_FUNC; + +	if(db == NULL || target == NULL || strlen(target) == 0) { +		return(NULL); +	} + +	for(i = _alpm_db_get_grpcache(db); i; i = i->next) { +		pmgrp_t *info = i->data; + +		if(strcmp(info->name, target) == 0) { +			return(info); +		} +	} + +	return(NULL);  }  /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/db.h b/lib/libalpm/db.h index 1851b5c9..10aa1644 100644 --- a/lib/libalpm/db.h +++ b/lib/libalpm/db.h @@ -23,22 +23,28 @@  #define _ALPM_DB_H  #include "alpm.h" -#include <limits.h>  #include <time.h> +/* libarchive */ +#include <archive.h> +#include <archive_entry.h> +  /* Database entries */  typedef enum _pmdbinfrq_t {  	INFRQ_BASE = 1,  	INFRQ_DESC = (1 << 1), -	INFRQ_DEPENDS = (1 << 2), -	INFRQ_FILES = (1 << 3), -	INFRQ_SCRIPTLET = (1 << 4), -	INFRQ_DELTAS = (1 << 5), -	INFRQ_DSIZE = (1 << 6), +	INFRQ_FILES = (1 << 2), +	INFRQ_SCRIPTLET = (1 << 3), +	INFRQ_DSIZE = (1 << 4),  	/* ALL should be info stored in the package or database */ -	INFRQ_ALL = 0x3F +	INFRQ_ALL = 0x1F  } pmdbinfrq_t; +struct db_operations { +	int (*populate) (pmdb_t *); +	void (*unregister) (pmdb_t *); +}; +  /* Database */  struct __pmdb_t {  	char *treename; @@ -46,12 +52,16 @@ struct __pmdb_t {  	char *_path;  	int pkgcache_loaded;  	int grpcache_loaded; +	/* also indicates whether we are RO or RW */  	int is_local;  	alpm_list_t *pkgcache;  	alpm_list_t *grpcache;  	alpm_list_t *servers; + +	struct db_operations *ops;  }; +  /* db.c, database general calls */  void _alpm_db_free(pmdb_t *db);  const char *_alpm_db_path(pmdb_t *db); @@ -59,13 +69,29 @@ int _alpm_db_cmp(const void *d1, const void *d2);  alpm_list_t *_alpm_db_search(pmdb_t *db, const alpm_list_t *needles);  pmdb_t *_alpm_db_register_local(void);  pmdb_t *_alpm_db_register_sync(const char *treename); +void _alpm_db_unregister(pmdb_t *db); +pmdb_t *_alpm_db_new(const char *treename, int is_local); + +/* be_*.c, backend specific calls */ +int _alpm_local_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq); +int _alpm_local_db_prepare(pmdb_t *db, pmpkg_t *info); +int _alpm_local_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq); +int _alpm_local_db_remove(pmdb_t *db, pmpkg_t *info); -/* be.c, backend specific calls */ -int _alpm_db_populate(pmdb_t *db); -int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq); -int _alpm_db_prepare(pmdb_t *db, pmpkg_t *info); -int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq); -int _alpm_db_remove(pmdb_t *db, pmpkg_t *info); +/* cache bullshit */ +/* packages */ +int _alpm_db_load_pkgcache(pmdb_t *db); +void _alpm_db_free_pkgcache(pmdb_t *db); +int _alpm_db_add_pkgincache(pmdb_t *db, pmpkg_t *pkg); +int _alpm_db_remove_pkgfromcache(pmdb_t *db, pmpkg_t *pkg); +alpm_list_t *_alpm_db_get_pkgcache(pmdb_t *db); +int _alpm_db_ensure_pkgcache(pmdb_t *db, pmdbinfrq_t infolevel); +pmpkg_t *_alpm_db_get_pkgfromcache(pmdb_t *db, const char *target); +/* groups */ +int _alpm_db_load_grpcache(pmdb_t *db); +void _alpm_db_free_grpcache(pmdb_t *db); +alpm_list_t *_alpm_db_get_grpcache(pmdb_t *db); +pmgrp_t *_alpm_db_get_grpfromcache(pmdb_t *db, const char *target);  #endif /* _ALPM_DB_H */ diff --git a/lib/libalpm/delta.h b/lib/libalpm/delta.h index 76283380..7d8d5b0f 100644 --- a/lib/libalpm/delta.h +++ b/lib/libalpm/delta.h @@ -44,6 +44,9 @@ void _alpm_delta_free(pmdelta_t *delta);  off_t _alpm_shortest_delta_path(alpm_list_t *deltas,  		const char *to, alpm_list_t **path); +/* max percent of package size to download deltas */ +#define MAX_DELTA_RATIO 0.7 +  #endif /* _ALPM_DELTA_H */  /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c index 26f9b16d..2ed9d30a 100644 --- a/lib/libalpm/deps.c +++ b/lib/libalpm/deps.c @@ -34,7 +34,6 @@  #include "graph.h"  #include "package.h"  #include "db.h" -#include "cache.h"  #include "handle.h"  void _alpm_dep_free(pmdepend_t *dep) @@ -196,36 +195,25 @@ pmpkg_t *_alpm_find_dep_satisfier(alpm_list_t *pkgs, pmdepend_t *dep)  	for(i = pkgs; i; i = alpm_list_next(i)) {  		pmpkg_t *pkg = i->data; -		if(alpm_depcmp(pkg, dep)) { +		if(_alpm_depcmp(pkg, dep)) {  			return(pkg);  		}  	}  	return(NULL);  } -/** Checks dependencies and returns missing ones in a list. - * Dependencies can include versions with depmod operators. - * @param db pointer to the local package database - * @param targets an alpm_list_t* of dependencies strings to satisfy - * @return an alpm_list_t* of missing dependencies strings +/** Find a package satisfying a specified dependency. + * The dependency can include versions with depmod operators. + * @param pkgs an alpm_list_t* of pmpkg_t where the satisfier will be searched + * @param depstring package or provision name, versioned or not + * @return a pmpkg_t* satisfying depstring   */ -alpm_list_t SYMEXPORT *alpm_deptest(pmdb_t *db, alpm_list_t *targets) +pmpkg_t SYMEXPORT *alpm_find_satisfier(alpm_list_t *pkgs, const char *depstring)  { -	alpm_list_t *i, *ret = NULL; - -	for(i = targets; i; i = alpm_list_next(i)) { -		pmdepend_t *dep; -		char *target; - -		target = alpm_list_getdata(i); -		dep = _alpm_splitdep(target); - -		if(!_alpm_find_dep_satisfier(_alpm_db_get_pkgcache(db), dep)) { -			ret = alpm_list_add(ret, target); -		} -		_alpm_dep_free(dep); -	} -	return(ret); +	pmdepend_t *dep = _alpm_splitdep(depstring); +	pmpkg_t *pkg = _alpm_find_dep_satisfier(pkgs, dep); +	_alpm_dep_free(dep); +	return(pkg);  }  /** Checks dependencies and returns missing ones in a list. @@ -248,8 +236,8 @@ alpm_list_t SYMEXPORT *alpm_checkdeps(alpm_list_t *pkglist, int reversedeps,  	targets = alpm_list_join(alpm_list_copy(remove), alpm_list_copy(upgrade));  	for(i = pkglist; i; i = i->next) { -		void *pkg = i->data; -		if(alpm_list_find(targets, pkg, _alpm_pkg_cmp)) { +		pmpkg_t *pkg = i->data; +		if(_alpm_pkg_find(targets, pkg->name)) {  			modified = alpm_list_add(modified, pkg);  		} else {  			dblist = alpm_list_add(dblist, pkg); @@ -331,35 +319,44 @@ static int dep_vercmp(const char *version1, pmdepmod_t mod,  	return(equal);  } -int SYMEXPORT alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep) +int _alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep)  {  	alpm_list_t *i; - -	ALPM_LOG_FUNC; - -	const char *pkgname = alpm_pkg_get_name(pkg); -	const char *pkgversion = alpm_pkg_get_version(pkg); +	const char *pkgname = pkg->name; +	const char *pkgversion = pkg->version;  	int satisfy = 0;  	/* check (pkg->name, pkg->version) */ -	satisfy = (strcmp(pkgname, dep->name) == 0 -			&& dep_vercmp(pkgversion, dep->mod, dep->version)); +	if(pkg->name_hash && dep->name_hash +			&& pkg->name_hash != dep->name_hash) { +		/* skip more expensive checks */ +	} else { +		satisfy = (strcmp(pkgname, dep->name) == 0 +				&& dep_vercmp(pkgversion, dep->mod, dep->version)); +		if(satisfy) { +			return(satisfy); +		} +	}  	/* check provisions, format : "name=version" */  	for(i = alpm_pkg_get_provides(pkg); i && !satisfy; i = i->next) { -		char *provname = strdup(i->data); -		char *provver = strchr(provname, '='); +		const char *provision = i->data; +		const char *provver = strchr(provision, '=');  		if(provver == NULL) { /* no provision version */  			satisfy = (dep->mod == PM_DEP_MOD_ANY -					&& strcmp(provname, dep->name) == 0); +					&& strcmp(provision, dep->name) == 0);  		} else { -			*provver = '\0'; +			/* This is a bit tricker than the old code for performance reasons. To +			 * prevent the need to copy and duplicate strings, strncmp only the name +			 * portion if they are the same length, since there is a version and +			 * operator in play here. */ +			size_t namelen = provver - provision;  			provver += 1; -			satisfy = (strcmp(provname, dep->name) == 0 +			satisfy = (strlen(dep->name) == namelen +					&& strncmp(provision, dep->name, namelen) == 0  					&& dep_vercmp(provver, dep->mod, dep->version));  		} -		free(provname);  	}  	return(satisfy); @@ -388,7 +385,8 @@ pmdepend_t *_alpm_splitdep(const char *depstring)  		depend->mod = PM_DEP_MOD_LE;  		*ptr = '\0';  		ptr += 2; -	} else if((ptr = strstr(newstr, "="))) { /* Note: we must do =,<,> checks after <=, >= checks */ +	} else if((ptr = strstr(newstr, "="))) { +		/* Note: we must do =,<,> checks after <=, >= checks */  		depend->mod = PM_DEP_MOD_EQ;  		*ptr = '\0';  		ptr += 1; @@ -404,6 +402,7 @@ pmdepend_t *_alpm_splitdep(const char *depstring)  		/* no version specified - copy the name and return it */  		depend->mod = PM_DEP_MOD_ANY;  		STRDUP(depend->name, newstr, RET_ERR(PM_ERR_MEMORY, NULL)); +		depend->name_hash = _alpm_hash_sdbm(depend->name);  		depend->version = NULL;  		free(newstr);  		return(depend); @@ -412,6 +411,7 @@ pmdepend_t *_alpm_splitdep(const char *depstring)  	/* if we get here, we have a version comparator, copy the right parts  	 * to the right places */  	STRDUP(depend->name, newstr, RET_ERR(PM_ERR_MEMORY, NULL)); +	depend->name_hash = _alpm_hash_sdbm(depend->name);  	STRDUP(depend->version, ptr, RET_ERR(PM_ERR_MEMORY, NULL));  	free(newstr); @@ -424,6 +424,7 @@ pmdepend_t *_alpm_dep_dup(const pmdepend_t *dep)  	CALLOC(newdep, 1, sizeof(pmdepend_t), RET_ERR(PM_ERR_MEMORY, NULL));  	STRDUP(newdep->name, dep->name, RET_ERR(PM_ERR_MEMORY, NULL)); +	newdep->name_hash = dep->name_hash;  	STRDUP(newdep->version, dep->version, RET_ERR(PM_ERR_MEMORY, NULL));  	newdep->mod = dep->mod; @@ -525,7 +526,7 @@ pmpkg_t *_alpm_resolvedep(pmdepend_t *dep, alpm_list_t *dbs,  	/* 1. literals */  	for(i = dbs; i; i = i->next) {  		pmpkg_t *pkg = _alpm_db_get_pkgfromcache(i->data, dep->name); -		if(pkg && alpm_depcmp(pkg, dep) && !_alpm_pkg_find(excluding, pkg->name)) { +		if(pkg && _alpm_depcmp(pkg, dep) && !_alpm_pkg_find(excluding, pkg->name)) {  			if(_alpm_pkg_should_ignore(pkg)) {  				int install = 0;  				if (prompt) { @@ -546,7 +547,7 @@ pmpkg_t *_alpm_resolvedep(pmdepend_t *dep, alpm_list_t *dbs,  	for(i = dbs; i; i = i->next) {  		for(j = _alpm_db_get_pkgcache(i->data); j; j = j->next) {  			pmpkg_t *pkg = j->data; -			if(alpm_depcmp(pkg, dep) && strcmp(pkg->name, dep->name) && +			if(_alpm_depcmp(pkg, dep) && strcmp(pkg->name, dep->name) != 0 &&  			             !_alpm_pkg_find(excluding, pkg->name)) {  				if(_alpm_pkg_should_ignore(pkg)) {  					int install = 0; @@ -672,7 +673,7 @@ int _alpm_dep_edge(pmpkg_t *pkg1, pmpkg_t *pkg2)  {  	alpm_list_t *i;  	for(i = alpm_pkg_get_depends(pkg1); i; i = i->next) { -		if(alpm_depcmp(pkg2, i->data)) { +		if(_alpm_depcmp(pkg2, i->data)) {  			return(1);  		}  	} diff --git a/lib/libalpm/deps.h b/lib/libalpm/deps.h index ffc3aeeb..34e09f62 100644 --- a/lib/libalpm/deps.h +++ b/lib/libalpm/deps.h @@ -29,9 +29,10 @@  /* Dependency */  struct __pmdepend_t { -	pmdepmod_t mod;  	char *name;  	char *version; +	unsigned long name_hash; +	pmdepmod_t mod;  };  /* Missing dependency */ @@ -55,6 +56,7 @@ int _alpm_resolvedeps(alpm_list_t *localpkgs, alpm_list_t *dbs_sync, pmpkg_t *pk  int _alpm_dep_edge(pmpkg_t *pkg1, pmpkg_t *pkg2);  pmdepend_t *_alpm_splitdep(const char *depstring);  pmpkg_t *_alpm_find_dep_satisfier(alpm_list_t *pkgs, pmdepend_t *dep); +int _alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep);  #endif /* _ALPM_DEPS_H */ diff --git a/lib/libalpm/diskspace.c b/lib/libalpm/diskspace.c new file mode 100644 index 00000000..4ac0e496 --- /dev/null +++ b/lib/libalpm/diskspace.c @@ -0,0 +1,325 @@ +/* + *  diskspace.c + * + *  Copyright (c) 2010 Pacman Development Team <pacman-dev@archlinux.org> + * + *  This program 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, see <http://www.gnu.org/licenses/>. + */ + +#include "config.h" + +#if defined(HAVE_MNTENT_H) +#include <mntent.h> +#endif +#if defined(HAVE_SYS_STATVFS_H) +#include <sys/statvfs.h> +#endif +#if defined(HAVE_SYS_PARAM_H) +#include <sys/param.h> +#endif +#if defined(HAVE_SYS_MOUNT_H) +#include <sys/mount.h> +#endif +#if defined(HAVE_SYS_UCRED_H) +#include <sys/ucred.h> +#endif +#if defined(HAVE_SYS_TYPES_H) +#include <sys/types.h> +#endif + +#include <math.h> + +/* libarchive */ +#include <archive.h> +#include <archive_entry.h> + +/* libalpm */ +#include "diskspace.h" +#include "alpm_list.h" +#include "util.h" +#include "log.h" +#include "trans.h" +#include "handle.h" + +static int mount_point_cmp(const void *p1, const void *p2) +{ +	const alpm_mountpoint_t *mp1 = p1; +	const alpm_mountpoint_t *mp2 = p2; +	return(strcmp(mp1->mount_dir, mp2->mount_dir)); +} + +static alpm_list_t *mount_point_list(void) +{ +	alpm_list_t *mount_points = NULL; +	alpm_mountpoint_t *mp; + +#if defined HAVE_GETMNTENT +	struct mntent *mnt; +	FILE *fp; +	FSSTATSTYPE fsp; + +	fp = setmntent(MOUNTED, "r"); + +	if (fp == NULL) { +		return(NULL); +	} + +	while((mnt = getmntent(fp))) { +		if(statvfs(mnt->mnt_dir, &fsp) != 0) { +			_alpm_log(PM_LOG_WARNING, +					_("could not get filesystem information for %s\n"), mnt->mnt_dir); +			continue; +		} + +		MALLOC(mp, sizeof(alpm_mountpoint_t), RET_ERR(PM_ERR_MEMORY, NULL)); +		mp->mount_dir = strdup(mnt->mnt_dir); +		memcpy(&(mp->fsp), &fsp, sizeof(FSSTATSTYPE)); + +		mp->blocks_needed = 0; +		mp->max_blocks_needed = 0; +		mp->used = 0; + +		mount_points = alpm_list_add(mount_points, mp); +	} + +	endmntent(fp); +#elif defined HAVE_GETMNTINFO +	int entries; +	FSSTATSTYPE *fsp; + +	entries = getmntinfo(&fsp, MNT_NOWAIT); + +	if (entries < 0) { +		return NULL; +	} + +	for(; entries-- > 0; fsp++) { +		MALLOC(mp, sizeof(alpm_mountpoint_t), RET_ERR(PM_ERR_MEMORY, NULL)); +		mp->mount_dir = strdup(fsp->f_mntonname); +		memcpy(&(mp->fsp), fsp, sizeof(FSSTATSTYPE)); + +		mp->blocks_needed = 0; +		mp->max_blocks_needed = 0; + +		mount_points = alpm_list_add(mount_points, mp); +	} +#endif + +	mount_points = alpm_list_msort(mount_points, alpm_list_count(mount_points), +			mount_point_cmp); +	return(mount_points); +} + +static alpm_list_t *match_mount_point(const alpm_list_t *mount_points, +		const char *file) +{ +	char real_path[PATH_MAX]; +	snprintf(real_path, PATH_MAX, "%s%s", handle->root, file); + +	alpm_list_t *mp = alpm_list_last(mount_points); +	do { +		alpm_mountpoint_t *data = mp->data; + +		if(strncmp(data->mount_dir, real_path, strlen(data->mount_dir)) == 0) { +			return(mp); +		} + +		mp = mp->prev; +	} while (mp != alpm_list_last(mount_points)); + +	/* should not get here... */ +	return(NULL); +} + +static int calculate_removed_size(const alpm_list_t *mount_points, +		pmpkg_t *pkg) +{ +	alpm_list_t *file; + +	alpm_list_t *files = alpm_pkg_get_files(pkg); +	for(file = files; file; file = file->next) { +		alpm_list_t *mp; +		alpm_mountpoint_t *data; +		struct stat st; +		char path[PATH_MAX]; +		const char *filename = file->data; + +		/* skip directories to be consistent with libarchive that reports them +		 * to be zero size and to prevent multiple counting across packages */ +		if(*(filename + strlen(filename) - 1) == '/') { +			continue; +		} + +		mp = match_mount_point(mount_points, filename); +		if(mp == NULL) { +			_alpm_log(PM_LOG_WARNING, +					_("could not determine mount point for file %s"), filename); +			continue; +		} + +		snprintf(path, PATH_MAX, "%s%s", handle->root, filename); +		_alpm_lstat(path, &st); + +		/* skip symlinks to be consistent with libarchive that reports them to +		 * be zero size */ +		if(S_ISLNK(st.st_mode)) { +			continue; +		} + +		data = mp->data; +		data->blocks_needed -= ceil((double)(st.st_size) / +		                            (double)(data->fsp.f_bsize)); +		data->used = 1; +	} + +	return(0); +} + +static int calculate_installed_size(const alpm_list_t *mount_points, +		pmpkg_t *pkg) +{ +	int ret=0; +	struct archive *archive; +	struct archive_entry *entry; +	const char *file; + +	if ((archive = archive_read_new()) == NULL) { +		pm_errno = PM_ERR_LIBARCHIVE; +		ret = -1; +		goto cleanup; +	} + +	archive_read_support_compression_all(archive); +	archive_read_support_format_all(archive); + +	if(archive_read_open_filename(archive, pkg->origin_data.file, +				ARCHIVE_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) { +		pm_errno = PM_ERR_PKG_OPEN; +		ret = -1; +		goto cleanup; +	} + +	while(archive_read_next_header(archive, &entry) == ARCHIVE_OK) { +		alpm_list_t *mp; +		alpm_mountpoint_t *data; + +		file = archive_entry_pathname(entry); + +		/* approximate space requirements for db entries */ +		if(file[0] == '.') { +			file = alpm_option_get_dbpath(); +		} + +		mp = match_mount_point(mount_points, file); +		if(mp == NULL) { +			_alpm_log(PM_LOG_WARNING, +					_("could not determine mount point for file %s"), file); +			continue; +		} + +		data = mp->data; +		data->blocks_needed += ceil((double)(archive_entry_size(entry)) / +		                            (double)(data->fsp.f_bsize)); +		data->used = 1; +	} + +	archive_read_finish(archive); + +cleanup: +	return(ret); +} + +int _alpm_check_diskspace(pmtrans_t *trans, pmdb_t *db_local) +{ +	alpm_list_t *mount_points, *i; +	int replaces = 0, abort = 0; +	alpm_list_t *targ; +	pmpkg_t *pkg; +	int numtargs = alpm_list_count(trans->add); +	int current = 0; + +	mount_points = mount_point_list(); +	if(mount_points == NULL) { +		_alpm_log(PM_LOG_ERROR, _("could not determine filesystem mount points")); +		return(-1); +	} + +	replaces = alpm_list_count(trans->remove); +	if(replaces) { +		numtargs += replaces; +		for(targ = trans->remove; targ; targ = targ->next, current++) { +			double percent = (double)current / numtargs; +			PROGRESS(trans, PM_TRANS_PROGRESS_DISKSPACE_START, "", (percent * 100), +					numtargs, current); + +			pkg = targ->data; +			calculate_removed_size(mount_points, pkg); +		} +	} + +	for(targ = trans->add; targ; targ = targ->next, current++) { +		double percent = (double)current / numtargs; +		PROGRESS(trans, PM_TRANS_PROGRESS_DISKSPACE_START, "", (percent * 100), +				numtargs, current); + +		pkg = targ->data; +		/* is this package already installed? */ +		if(_alpm_db_get_pkgfromcache(db_local, pkg->name)) { +			calculate_removed_size(mount_points, pkg); +		} +		calculate_installed_size(mount_points, pkg); + +		for(i = mount_points; i; i = alpm_list_next(i)) { +			alpm_mountpoint_t *data = i->data; +			if(data->blocks_needed > data->max_blocks_needed) { +				data->max_blocks_needed = data->blocks_needed; +			} +		} +	} + +	PROGRESS(trans, PM_TRANS_PROGRESS_DISKSPACE_START, "", 100, +			numtargs, current); + +	for(i = mount_points; i; i = alpm_list_next(i)) { +		alpm_mountpoint_t *data = i->data; +		if(data->used == 1) { +			/* cushion is roughly min(5% capacity, 20MiB) */ +			long fivepc = (data->fsp.f_blocks / 20) + 1; +			long twentymb = (20 * 1024 * 1024 / data->fsp.f_bsize) + 1; +			long cushion = fivepc < twentymb ? fivepc : twentymb; + +			_alpm_log(PM_LOG_DEBUG, "partition %s, needed %ld, cushion %ld, free %ld\n", +					data->mount_dir, data->max_blocks_needed, cushion, +					(unsigned long)data->fsp.f_bfree); +			if(data->max_blocks_needed + cushion >= 0 && +			   (unsigned long)(data->max_blocks_needed + cushion) > data->fsp.f_bfree) { +				abort = 1; +			} +		} +	} + +	for(i = mount_points; i; i = alpm_list_next(i)) { +		alpm_mountpoint_t *data = i->data; +		FREE(data->mount_dir); +	} +	FREELIST(mount_points); + +	if(abort) { +		RET_ERR(PM_ERR_DISK_SPACE, -1); +	} + +	return(0); +} + +/* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/diskspace.h b/lib/libalpm/diskspace.h new file mode 100644 index 00000000..e73497ef --- /dev/null +++ b/lib/libalpm/diskspace.h @@ -0,0 +1,46 @@ +/* + *  diskspace.h + * + *  Copyright (c) 2010 Pacman Development Team <pacman-dev@archlinux.org> + * + *  This program 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, see <http://www.gnu.org/licenses/>. + */ + +#ifndef _ALPM_DISKSPACE_H +#define _ALPM_DISKSPACE_H + +#if defined(HAVE_SYS_MOUNT_H) +#include <sys/mount.h> +#endif +#if defined(HAVE_SYS_STATVFS_H) +#include <sys/statvfs.h> +#endif + +#include "alpm.h" + +typedef struct __alpm_mountpoint_t { +	/* mount point information */ +	char *mount_dir; +	/* storage for additional disk usage calculations */ +	long blocks_needed; +	long max_blocks_needed; +	int used; +	FSSTATSTYPE fsp; +} alpm_mountpoint_t; + +int _alpm_check_diskspace(pmtrans_t *trans, pmdb_t *db_local); + +#endif /* _ALPM_DISKSPACE_H */ + +/* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c index c11148d1..09f716f5 100644 --- a/lib/libalpm/dload.c +++ b/lib/libalpm/dload.c @@ -29,16 +29,13 @@  #include <sys/types.h>  #include <sys/stat.h>  #include <signal.h> -#include <limits.h> -/* the following two are needed on BSD for libfetch */ -#if defined(HAVE_SYS_SYSLIMITS_H) -#include <sys/syslimits.h> /* PATH_MAX */ -#endif +/* the following two are needed for FreeBSD's libfetch */ +#include <limits.h> /* PATH_MAX */  #if defined(HAVE_SYS_PARAM_H)  #include <sys/param.h> /* MAXHOSTNAMELEN */  #endif -#if defined(INTERNAL_DOWNLOAD) +#ifdef HAVE_LIBFETCH  #include <fetch.h>  #endif @@ -58,7 +55,7 @@ static char *get_filename(const char *url) {  	return(filename);  } -#if defined(INTERNAL_DOWNLOAD) +#ifdef HAVE_LIBFETCH  static char *get_destfile(const char *path, const char *filename) {  	char *destfile;  	/* len = localpath len + filename len + null */ @@ -89,7 +86,7 @@ static const char *gethost(struct url *fileurl)  }  int dload_interrupted; -static RETSIGTYPE inthandler(int signum) +static void inthandler(int signum)  {  	dload_interrupted = 1;  } @@ -251,7 +248,7 @@ static int download_internal(const char *url, const char *localpath,  		check_stop();  		size_t nwritten = 0;  		nwritten = fwrite(buffer, 1, nread, localf); -		if((nwritten != nread) || ferror(localf)) { +		if((nwritten != (size_t)nread) || ferror(localf)) {  			pm_errno = PM_ERR_RETRIEVE;  			_alpm_log(PM_LOG_ERROR, _("error writing to file '%s': %s\n"),  					tempfile, strerror(errno)); @@ -338,7 +335,7 @@ cleanup:  static int download(const char *url, const char *localpath,  		int force) {  	if(handle->fetchcb == NULL) { -#if defined(INTERNAL_DOWNLOAD) +#ifdef HAVE_LIBFETCH  		return(download_internal(url, localpath, force));  #else  		RET_ERR(PM_ERR_EXTERNAL_DOWNLOAD, -1); diff --git a/lib/libalpm/error.c b/lib/libalpm/error.c index 8d8d0458..3d056265 100644 --- a/lib/libalpm/error.c +++ b/lib/libalpm/error.c @@ -22,16 +22,13 @@  /* TODO: needed for the libfetch stuff, unfortunately- we should kill it */  #include <stdio.h> -#include <limits.h> -/* the following two are needed on BSD for libfetch */ -#if defined(HAVE_SYS_SYSLIMITS_H) -#include <sys/syslimits.h> /* PATH_MAX */ -#endif +/* the following two are needed for FreeBSD's libfetch */ +#include <limits.h> /* PATH_MAX */  #if defined(HAVE_SYS_PARAM_H)  #include <sys/param.h> /* MAXHOSTNAMELEN */  #endif -#if defined(INTERNAL_DOWNLOAD) +#ifdef HAVE_LIBFETCH  #include <fetch.h> /* fetchLastErrString */  #endif @@ -60,6 +57,8 @@ const char SYMEXPORT *alpm_strerror(int err)  			return _("could not find or read directory");  		case PM_ERR_WRONG_ARGS:  			return _("wrong or NULL argument passed"); +		case PM_ERR_DISK_SPACE: +			return _("not enough disk space");  		/* Interface */  		case PM_ERR_HANDLE_NULL:  			return _("library not initialized"); @@ -145,7 +144,7 @@ const char SYMEXPORT *alpm_strerror(int err)  			 * error string instead. */  			return _("libarchive error");  		case PM_ERR_LIBFETCH: -#if defined(INTERNAL_DOWNLOAD) +#ifdef HAVE_LIBFETCH  			return fetchLastErrString;  #else  			/* obviously shouldn't get here... */ diff --git a/lib/libalpm/handle.c b/lib/libalpm/handle.c index aa34cf45..ffa5dd67 100644 --- a/lib/libalpm/handle.c +++ b/lib/libalpm/handle.c @@ -232,6 +232,15 @@ int SYMEXPORT alpm_option_get_usedelta()  	return handle->usedelta;  } +int SYMEXPORT alpm_option_get_checkspace() +{ +	if (handle == NULL) { +		pm_errno = PM_ERR_HANDLE_NULL; +		return -1; +	} +	return handle->checkspace; +} +  pmdb_t SYMEXPORT *alpm_option_get_localdb()  {  	if (handle == NULL) { @@ -550,4 +559,9 @@ void SYMEXPORT alpm_option_set_usedelta(int usedelta)  	handle->usedelta = usedelta;  } +void SYMEXPORT alpm_option_set_checkspace(int checkspace) +{ +	handle->checkspace = checkspace; +} +  /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/handle.h b/lib/libalpm/handle.h index 1834994e..b471ea6c 100644 --- a/lib/libalpm/handle.h +++ b/lib/libalpm/handle.h @@ -60,12 +60,13 @@ typedef struct _pmhandle_t {  	int usesyslog;    /* Use syslog instead of logfile? */ /* TODO move to frontend */  	char *arch;       /* Architecture of packages we should allow */  	int usedelta;     /* Download deltas if possible */ +	int checkspace;   /* Check disk space before installing */  } pmhandle_t;  /* global handle variable */  extern pmhandle_t *handle; -pmhandle_t *_alpm_handle_new(); +pmhandle_t *_alpm_handle_new(void);  void _alpm_handle_free(pmhandle_t *handle);  #endif /* _ALPM_HANDLE_H */ diff --git a/lib/libalpm/md5.c b/lib/libalpm/md5.c index 7d2716f2..90635046 100644 --- a/lib/libalpm/md5.c +++ b/lib/libalpm/md5.c @@ -36,6 +36,8 @@   *        int md5_file( char *path, unsigned char *output )   *      to   *        int md5_file( const char *path, unsigned char *output ) + *  * use a dynamically-allocated buffer in md5_file, and increase the size + *    for performance reasons   *  * various static/inline changes   *   *  NOTE: XySSL has been renamed to PolarSSL, which is available at @@ -44,6 +46,7 @@  #include <string.h>  #include <stdio.h> +#include <stdlib.h>  #include "md5.h" @@ -309,11 +312,16 @@ int md5_file( const char *path, unsigned char output[16] )      FILE *f;      size_t n;      md5_context ctx; -    unsigned char buf[1024]; +    unsigned char *buf; -    if( ( f = fopen( path, "rb" ) ) == NULL ) +    if( ( buf = calloc(8192, sizeof(unsigned char)) ) == NULL )          return( 1 ); +    if( ( f = fopen( path, "rb" ) ) == NULL ) { +        free( buf ); +        return( 1 ); +    } +      md5_starts( &ctx );      while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 ) @@ -322,6 +330,7 @@ int md5_file( const char *path, unsigned char output[16] )      md5_finish( &ctx, output );      memset( &ctx, 0, sizeof( md5_context ) ); +    free( buf );      if( ferror( f ) != 0 )      { diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c index becbc60f..332a082f 100644 --- a/lib/libalpm/package.c +++ b/lib/libalpm/package.c @@ -25,24 +25,18 @@  #include <stdio.h>  #include <stdlib.h> -#include <limits.h>  #include <string.h>  #include <ctype.h>  #include <errno.h>  #include <sys/types.h>  #include <sys/stat.h> -/* libarchive */ -#include <archive.h> -#include <archive_entry.h> -  /* libalpm */  #include "package.h"  #include "alpm_list.h"  #include "log.h"  #include "util.h"  #include "db.h" -#include "cache.h"  #include "delta.h"  #include "handle.h"  #include "deps.h" @@ -63,7 +57,7 @@ int SYMEXPORT alpm_pkg_free(pmpkg_t *pkg)  	ASSERT(pkg != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));  	/* Only free packages loaded in user space */ -	if(pkg->origin != PKG_FROM_CACHE) { +	if(pkg->origin == PKG_FROM_FILE) {  		_alpm_pkg_free(pkg);  	} @@ -83,8 +77,7 @@ int SYMEXPORT alpm_pkg_checkmd5sum(pmpkg_t *pkg)  	ASSERT(pkg != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));  	/* We only inspect packages from sync repositories */ -	ASSERT(pkg->origin == PKG_FROM_CACHE, RET_ERR(PM_ERR_PKG_INVALID, -1)); -	ASSERT(pkg->origin_data.db != handle->db_local, RET_ERR(PM_ERR_PKG_INVALID, -1)); +	ASSERT(pkg->origin == PKG_FROM_SYNCDB, RET_ERR(PM_ERR_PKG_INVALID, -1));  	fpath = _alpm_filecache_find(alpm_pkg_get_filename(pkg)); @@ -100,334 +93,196 @@ int SYMEXPORT alpm_pkg_checkmd5sum(pmpkg_t *pkg)  	return(retval);  } +/* Default package accessor functions. These will get overridden by any + * backend logic that needs lazy access, such as the local database through + * a lazy-load cache. However, the defaults will work just fine for fully- + * populated package structures. */ +static const char *_pkg_get_filename(pmpkg_t *pkg)    { return pkg->filename; } +static const char *_pkg_get_name(pmpkg_t *pkg)        { return pkg->name; } +static const char *_pkg_get_version(pmpkg_t *pkg)     { return pkg->version; } +static const char *_pkg_get_desc(pmpkg_t *pkg)        { return pkg->desc; } +static const char *_pkg_get_url(pmpkg_t *pkg)         { return pkg->url; } +static time_t _pkg_get_builddate(pmpkg_t *pkg)        { return pkg->builddate; } +static time_t _pkg_get_installdate(pmpkg_t *pkg)      { return pkg->installdate; } +static const char *_pkg_get_packager(pmpkg_t *pkg)    { return pkg->packager; } +static const char *_pkg_get_md5sum(pmpkg_t *pkg)      { return pkg->md5sum; } +static const char *_pkg_get_arch(pmpkg_t *pkg)        { return pkg->arch; } +static off_t _pkg_get_size(pmpkg_t *pkg)              { return pkg->size; } +static off_t _pkg_get_isize(pmpkg_t *pkg)             { return pkg->isize; } +static pmpkgreason_t _pkg_get_reason(pmpkg_t *pkg)    { return pkg->reason; } +static int _pkg_get_epoch(pmpkg_t *pkg)               { return pkg->epoch; } +static int _pkg_has_scriptlet(pmpkg_t *pkg)           { return pkg->scriptlet; } + +static alpm_list_t *_pkg_get_licenses(pmpkg_t *pkg)   { return pkg->licenses; } +static alpm_list_t *_pkg_get_groups(pmpkg_t *pkg)     { return pkg->groups; } +static alpm_list_t *_pkg_get_depends(pmpkg_t *pkg)    { return pkg->depends; } +static alpm_list_t *_pkg_get_optdepends(pmpkg_t *pkg) { return pkg->optdepends; } +static alpm_list_t *_pkg_get_conflicts(pmpkg_t *pkg)  { return pkg->conflicts; } +static alpm_list_t *_pkg_get_provides(pmpkg_t *pkg)   { return pkg->provides; } +static alpm_list_t *_pkg_get_replaces(pmpkg_t *pkg)   { return pkg->replaces; } +static alpm_list_t *_pkg_get_deltas(pmpkg_t *pkg)     { return pkg->deltas; } +static alpm_list_t *_pkg_get_files(pmpkg_t *pkg)      { return pkg->files; } +static alpm_list_t *_pkg_get_backup(pmpkg_t *pkg)     { return pkg->backup; } + +/** The standard package operations struct. Get fields directly from the + * struct itself with no abstraction layer or any type of lazy loading. + */ +struct pkg_operations default_pkg_ops = { +	.get_filename    = _pkg_get_filename, +	.get_name        = _pkg_get_name, +	.get_version     = _pkg_get_version, +	.get_desc        = _pkg_get_desc, +	.get_url         = _pkg_get_url, +	.get_builddate   = _pkg_get_builddate, +	.get_installdate = _pkg_get_installdate, +	.get_packager    = _pkg_get_packager, +	.get_md5sum      = _pkg_get_md5sum, +	.get_arch        = _pkg_get_arch, +	.get_size        = _pkg_get_size, +	.get_isize       = _pkg_get_isize, +	.get_reason      = _pkg_get_reason, +	.get_epoch       = _pkg_get_epoch, +	.has_scriptlet   = _pkg_has_scriptlet, +	.get_licenses    = _pkg_get_licenses, +	.get_groups      = _pkg_get_groups, +	.get_depends     = _pkg_get_depends, +	.get_optdepends  = _pkg_get_optdepends, +	.get_conflicts   = _pkg_get_conflicts, +	.get_provides    = _pkg_get_provides, +	.get_replaces    = _pkg_get_replaces, +	.get_deltas      = _pkg_get_deltas, +	.get_files       = _pkg_get_files, +	.get_backup      = _pkg_get_backup, +}; + +/* Public functions for getting package information. These functions + * delegate the hard work to the function callbacks attached to each + * package, which depend on where the package was loaded from. */  const char SYMEXPORT *alpm_pkg_get_filename(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC); -	} - -	return pkg->filename; +	return pkg->ops->get_filename(pkg);  }  const char SYMEXPORT *alpm_pkg_get_name(pmpkg_t *pkg)  { -	ASSERT(pkg != NULL, return(NULL)); -	return pkg->name; +	return pkg->ops->get_name(pkg);  }  const char SYMEXPORT *alpm_pkg_get_version(pmpkg_t *pkg)  { -	ASSERT(pkg != NULL, return(NULL)); -	return pkg->version; +	return pkg->ops->get_version(pkg);  }  const char SYMEXPORT *alpm_pkg_get_desc(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC); -	} -	return pkg->desc; +	return pkg->ops->get_desc(pkg);  }  const char SYMEXPORT *alpm_pkg_get_url(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC); -	} -	return pkg->url; +	return pkg->ops->get_url(pkg);  }  time_t SYMEXPORT alpm_pkg_get_builddate(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(0)); -	ASSERT(pkg != NULL, return(0)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC); -	} -	return pkg->builddate; +	return pkg->ops->get_builddate(pkg);  }  time_t SYMEXPORT alpm_pkg_get_installdate(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(0)); -	ASSERT(pkg != NULL, return(0)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC); -	} -	return pkg->installdate; +	return pkg->ops->get_installdate(pkg);  }  const char SYMEXPORT *alpm_pkg_get_packager(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC); -	} -	return pkg->packager; +	return pkg->ops->get_packager(pkg);  }  const char SYMEXPORT *alpm_pkg_get_md5sum(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC); -	} -	return pkg->md5sum; +	return pkg->ops->get_md5sum(pkg);  }  const char SYMEXPORT *alpm_pkg_get_arch(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC); -	} -	return pkg->arch; +	return pkg->ops->get_arch(pkg);  }  off_t SYMEXPORT alpm_pkg_get_size(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(-1)); -	ASSERT(pkg != NULL, return(-1)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC); -	} -	return pkg->size; +	return pkg->ops->get_size(pkg);  }  off_t SYMEXPORT alpm_pkg_get_isize(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(-1)); -	ASSERT(pkg != NULL, return(-1)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC); -	} -	return pkg->isize; +	return pkg->ops->get_isize(pkg);  }  pmpkgreason_t SYMEXPORT alpm_pkg_get_reason(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(-1)); -	ASSERT(pkg != NULL, return(-1)); +	return pkg->ops->get_reason(pkg); +} -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC); -	} -	return pkg->reason; +int SYMEXPORT alpm_pkg_get_epoch(pmpkg_t *pkg) +{ +	return pkg->ops->get_epoch(pkg);  }  alpm_list_t SYMEXPORT *alpm_pkg_get_licenses(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC); -	} -	return pkg->licenses; +	return pkg->ops->get_licenses(pkg);  }  alpm_list_t SYMEXPORT *alpm_pkg_get_groups(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC); -	} -	return pkg->groups; -} - -int SYMEXPORT alpm_pkg_has_force(pmpkg_t *pkg) -{ -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(-1)); -	ASSERT(pkg != NULL, return(-1)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC); -	} -	return pkg->force; +	return pkg->ops->get_groups(pkg);  }  alpm_list_t SYMEXPORT *alpm_pkg_get_depends(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DEPENDS)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DEPENDS); -	} -	return pkg->depends; +	return pkg->ops->get_depends(pkg);  }  alpm_list_t SYMEXPORT *alpm_pkg_get_optdepends(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DEPENDS)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DEPENDS); -	} -	return pkg->optdepends; +	return pkg->ops->get_optdepends(pkg);  }  alpm_list_t SYMEXPORT *alpm_pkg_get_conflicts(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DEPENDS)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DEPENDS); -	} -	return pkg->conflicts; +	return pkg->ops->get_conflicts(pkg);  }  alpm_list_t SYMEXPORT *alpm_pkg_get_provides(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DEPENDS)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DEPENDS); -	} -	return pkg->provides; +	return pkg->ops->get_provides(pkg);  } -alpm_list_t SYMEXPORT *alpm_pkg_get_deltas(pmpkg_t *pkg) +alpm_list_t SYMEXPORT *alpm_pkg_get_replaces(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DELTAS)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DELTAS); -	} -	return pkg->deltas; +	return pkg->ops->get_replaces(pkg);  } -alpm_list_t SYMEXPORT *alpm_pkg_get_replaces(pmpkg_t *pkg) +alpm_list_t SYMEXPORT *alpm_pkg_get_deltas(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); - -	if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC); -	} -	return pkg->replaces; +	return pkg->ops->get_deltas(pkg);  }  alpm_list_t SYMEXPORT *alpm_pkg_get_files(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); - -	if(pkg->origin == PKG_FROM_CACHE && pkg->origin_data.db == handle->db_local -		 && !(pkg->infolevel & INFRQ_FILES)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_FILES); -	} -	return pkg->files; +	return pkg->ops->get_files(pkg);  }  alpm_list_t SYMEXPORT *alpm_pkg_get_backup(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); - -	if(pkg->origin == PKG_FROM_CACHE && pkg->origin_data.db == handle->db_local -		 && !(pkg->infolevel & INFRQ_FILES)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_FILES); -	} -	return pkg->backup; +	return pkg->ops->get_backup(pkg);  }  pmdb_t SYMEXPORT *alpm_pkg_get_db(pmpkg_t *pkg)  {  	/* Sanity checks */  	ASSERT(pkg != NULL, return(NULL)); -	ASSERT(pkg->origin == PKG_FROM_CACHE, return(NULL)); +	ASSERT(pkg->origin != PKG_FROM_FILE, return(NULL));  	return(pkg->origin_data.db);  } @@ -441,83 +296,31 @@ pmdb_t SYMEXPORT *alpm_pkg_get_db(pmpkg_t *pkg)   */  void SYMEXPORT *alpm_pkg_changelog_open(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(NULL)); -	ASSERT(pkg != NULL, return(NULL)); - -	if(pkg->origin == PKG_FROM_CACHE) { -		char clfile[PATH_MAX]; -		snprintf(clfile, PATH_MAX, "%s/%s/%s-%s/changelog", -				alpm_option_get_dbpath(), -				alpm_db_get_name(handle->db_local), -				alpm_pkg_get_name(pkg), -				alpm_pkg_get_version(pkg)); -		return fopen(clfile, "r"); -	} else if(pkg->origin == PKG_FROM_FILE) { -		struct archive *archive = NULL; -		struct archive_entry *entry; -		const char *pkgfile = pkg->origin_data.file; - -		if((archive = archive_read_new()) == NULL) { -			RET_ERR(PM_ERR_LIBARCHIVE, NULL); -		} - -		archive_read_support_compression_all(archive); -		archive_read_support_format_all(archive); - -		if (archive_read_open_filename(archive, pkgfile, -					ARCHIVE_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) { -			RET_ERR(PM_ERR_PKG_OPEN, NULL); -		} - -		while(archive_read_next_header(archive, &entry) == ARCHIVE_OK) { -			const char *entry_name = archive_entry_pathname(entry); - -			if(strcmp(entry_name, ".CHANGELOG") == 0) { -				return(archive); -			} -		} -		/* we didn't find a changelog */ -		archive_read_finish(archive); -		errno = ENOENT; -	} -	return(NULL); +	return pkg->ops->changelog_open(pkg);  }  /**   * Read data from an open changelog 'file stream'. Similar to fread in - * functionality, this function takes a buffer and amount of data to read. + * functionality, this function takes a buffer and amount of data to read. If an + * error occurs pm_errno will be set. + *   * @param ptr a buffer to fill with raw changelog data   * @param size the size of the buffer   * @param pkg the package that the changelog is being read from   * @param fp a 'file stream' to the package changelog - * @return the number of characters read, or 0 if there is no more data + * @return the number of characters read, or 0 if there is no more data or an + * error occurred.   */  size_t SYMEXPORT alpm_pkg_changelog_read(void *ptr, size_t size,  		const pmpkg_t *pkg, const void *fp)  { -	size_t ret = 0; -	if(pkg->origin == PKG_FROM_CACHE) { -		ret = fread(ptr, 1, size, (FILE*)fp); -	} else if(pkg->origin == PKG_FROM_FILE) { -		ret = archive_read_data((struct archive*)fp, ptr, size); -	} -	return(ret); +	return pkg->ops->changelog_read(ptr, size, pkg, fp);  }  /*  int SYMEXPORT alpm_pkg_changelog_feof(const pmpkg_t *pkg, void *fp)  { -	int ret = 0; -	if(pkg->origin == PKG_FROM_CACHE) { -		ret = feof((FILE*)fp); -	} else if(pkg->origin == PKG_FROM_FILE) { -		// note: this doesn't quite work, no feof in libarchive -		ret = archive_read_data((struct archive*)fp, NULL, 0); -	} -	return(ret); +	return pkg->ops->changelog_feof(pkg, fp);  }  */ @@ -531,28 +334,12 @@ int SYMEXPORT alpm_pkg_changelog_feof(const pmpkg_t *pkg, void *fp)   */  int SYMEXPORT alpm_pkg_changelog_close(const pmpkg_t *pkg, void *fp)  { -	int ret = 0; -	if(pkg->origin == PKG_FROM_CACHE) { -		ret = fclose((FILE*)fp); -	} else if(pkg->origin == PKG_FROM_FILE) { -		ret = archive_read_finish((struct archive *)fp); -	} -	return(ret); +	return pkg->ops->changelog_close(pkg, fp);  }  int SYMEXPORT alpm_pkg_has_scriptlet(pmpkg_t *pkg)  { -	ALPM_LOG_FUNC; - -	/* Sanity checks */ -	ASSERT(handle != NULL, return(-1)); -	ASSERT(pkg != NULL, return(-1)); - -	if(pkg->origin == PKG_FROM_CACHE && pkg->origin_data.db == handle->db_local -		 && !(pkg->infolevel & INFRQ_SCRIPTLET)) { -		_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_SCRIPTLET); -	} -	return pkg->scriptlet; +	return pkg->ops->has_scriptlet(pkg);  }  static void find_requiredby(pmpkg_t *pkg, pmdb_t *db, alpm_list_t **reqs) @@ -626,6 +413,7 @@ pmpkg_t *_alpm_pkg_dup(pmpkg_t *pkg)  	CALLOC(newpkg, 1, sizeof(pmpkg_t), RET_ERR(PM_ERR_MEMORY, NULL)); +	newpkg->name_hash = pkg->name_hash;  	STRDUP(newpkg->filename, pkg->filename, RET_ERR(PM_ERR_MEMORY, newpkg));  	STRDUP(newpkg->name, pkg->name, RET_ERR(PM_ERR_MEMORY, newpkg));  	STRDUP(newpkg->version, pkg->version, RET_ERR(PM_ERR_MEMORY, newpkg)); @@ -639,7 +427,7 @@ pmpkg_t *_alpm_pkg_dup(pmpkg_t *pkg)  	newpkg->size = pkg->size;  	newpkg->isize = pkg->isize;  	newpkg->scriptlet = pkg->scriptlet; -	newpkg->force = pkg->force; +	newpkg->epoch = pkg->epoch;  	newpkg->reason = pkg->reason;  	newpkg->licenses   = alpm_list_strdup(pkg->licenses); @@ -657,6 +445,7 @@ pmpkg_t *_alpm_pkg_dup(pmpkg_t *pkg)  	/* internal */  	newpkg->origin = pkg->origin; +	newpkg->ops = pkg->ops;  	if(newpkg->origin == PKG_FROM_FILE) {  		newpkg->origin_data.file = strdup(pkg->origin_data.file);  	} else { @@ -726,21 +515,25 @@ void _alpm_pkg_free_trans(pmpkg_t *pkg)  	pkg->removes = NULL;  } -/* Is spkg an upgrade for locapkg? */ +/* Is spkg an upgrade for localpkg? */  int _alpm_pkg_compare_versions(pmpkg_t *spkg, pmpkg_t *localpkg)  { -	int cmp = 0; +	int spkg_epoch, localpkg_epoch;  	ALPM_LOG_FUNC; -	cmp = alpm_pkg_vercmp(alpm_pkg_get_version(spkg), -			alpm_pkg_get_version(localpkg)); +	spkg_epoch = alpm_pkg_get_epoch(spkg); +	localpkg_epoch = alpm_pkg_get_epoch(localpkg); -	if(cmp < 0 && alpm_pkg_has_force(spkg)) { -		cmp = 1; +	if(spkg_epoch > localpkg_epoch) { +		return(1); +	} else if(spkg_epoch < localpkg_epoch) { +		return(-1);  	} -	return(cmp); +	/* equal epoch values, move on to version comparison */ +	return alpm_pkg_vercmp(alpm_pkg_get_version(spkg), +			alpm_pkg_get_version(localpkg));  }  /* Helper function for comparing packages @@ -749,7 +542,7 @@ int _alpm_pkg_cmp(const void *p1, const void *p2)  {  	pmpkg_t *pkg1 = (pmpkg_t *)p1;  	pmpkg_t *pkg2 = (pmpkg_t *)p2; -	return(strcmp(pkg1->name, pkg2->name)); +	return(strcoll(pkg1->name, pkg2->name));  }  /* Test for existence of a package in a alpm_list_t* @@ -758,6 +551,7 @@ int _alpm_pkg_cmp(const void *p1, const void *p2)  pmpkg_t *_alpm_pkg_find(alpm_list_t *haystack, const char *needle)  {  	alpm_list_t *lp; +	unsigned long needle_hash;  	ALPM_LOG_FUNC; @@ -765,11 +559,21 @@ pmpkg_t *_alpm_pkg_find(alpm_list_t *haystack, const char *needle)  		return(NULL);  	} +	needle_hash = _alpm_hash_sdbm(needle); +  	for(lp = haystack; lp; lp = lp->next) {  		pmpkg_t *info = lp->data; -		if(info && strcmp(info->name, needle) == 0) { -			return(info); +		if(info) { +			/* a zero hash will cause a fall-through just in case */ +			if(info->name_hash && info->name_hash != needle_hash) { +				continue; +			} + +			/* finally: we had hash match, verify string match */ +			if(strcmp(info->name, needle) == 0) { +				return(info); +			}  		}  	}  	return(NULL); diff --git a/lib/libalpm/package.h b/lib/libalpm/package.h index c8946448..7740d79a 100644 --- a/lib/libalpm/package.h +++ b/lib/libalpm/package.h @@ -31,27 +31,94 @@  #include "db.h"  typedef enum _pmpkgfrom_t { -	PKG_FROM_CACHE = 1, -	PKG_FROM_FILE +	PKG_FROM_FILE = 1, +	PKG_FROM_LOCALDB, +	PKG_FROM_SYNCDB  } pmpkgfrom_t; +/** Package operations struct. This struct contains function pointers to + * all methods used to access data in a package to allow for things such + * as lazy package intialization (such as used by the file backend). Each + * backend is free to define a stuct containing pointers to a specific + * implementation of these methods. Some backends may find using the + * defined default_pkg_ops struct to work just fine for their needs. + */ +struct pkg_operations { +	const char *(*get_filename) (pmpkg_t *); +	const char *(*get_name) (pmpkg_t *); +	const char *(*get_version) (pmpkg_t *); +	const char *(*get_desc) (pmpkg_t *); +	const char *(*get_url) (pmpkg_t *); +	time_t (*get_builddate) (pmpkg_t *); +	time_t (*get_installdate) (pmpkg_t *); +	const char *(*get_packager) (pmpkg_t *); +	const char *(*get_md5sum) (pmpkg_t *); +	const char *(*get_arch) (pmpkg_t *); +	off_t (*get_size) (pmpkg_t *); +	off_t (*get_isize) (pmpkg_t *); +	pmpkgreason_t (*get_reason) (pmpkg_t *); +	int (*get_epoch) (pmpkg_t *); +	int (*has_scriptlet) (pmpkg_t *); + +	alpm_list_t *(*get_licenses) (pmpkg_t *); +	alpm_list_t *(*get_groups) (pmpkg_t *); +	alpm_list_t *(*get_depends) (pmpkg_t *); +	alpm_list_t *(*get_optdepends) (pmpkg_t *); +	alpm_list_t *(*get_conflicts) (pmpkg_t *); +	alpm_list_t *(*get_provides) (pmpkg_t *); +	alpm_list_t *(*get_replaces) (pmpkg_t *); +	alpm_list_t *(*get_deltas) (pmpkg_t *); +	alpm_list_t *(*get_files) (pmpkg_t *); +	alpm_list_t *(*get_backup) (pmpkg_t *); + +	void *(*changelog_open) (pmpkg_t *); +	size_t (*changelog_read) (void *, size_t, const pmpkg_t *, const void *); +	int (*changelog_close) (const pmpkg_t *, void *); + +	/* still to add: +	 * checkmd5sum() ? +	 * compute_requiredby() +	 */ +}; + +/** The standard package operations struct. get fields directly from the + * struct itself with no abstraction layer or any type of lazy loading. + * The actual definition is in package.c so it can have access to the + * default accessor functions which are defined there. + */ +extern struct pkg_operations default_pkg_ops; +  struct __pmpkg_t { +	unsigned long name_hash;  	char *filename;  	char *name;  	char *version;  	char *desc;  	char *url; -	time_t builddate; -	time_t installdate;  	char *packager;  	char *md5sum;  	char *arch; + +	time_t builddate; +	time_t installdate; +  	off_t size;  	off_t isize;  	off_t download_size; +  	int scriptlet; -	int force; +	int epoch; +  	pmpkgreason_t reason; +	pmpkgfrom_t origin; +	/* origin == PKG_FROM_FILE, use pkg->origin_data.file +	 * origin == PKG_FROM_*DB, use pkg->origin_data.db */ +	union { +		pmdb_t *db; +		char *file; +	} origin_data; +	pmdbinfrq_t infolevel; +  	alpm_list_t *licenses;  	alpm_list_t *replaces;  	alpm_list_t *groups; @@ -64,17 +131,8 @@ struct __pmpkg_t {  	alpm_list_t *deltas;  	alpm_list_t *delta_path;  	alpm_list_t *removes; /* in transaction targets only */ -	/* internal */ -	pmpkgfrom_t origin; -	/* Replaced 'void *data' with this union as follows: -  origin == PKG_FROM_CACHE, use pkg->origin_data.db -  origin == PKG_FROM_FILE, use pkg->origin_data.file -	*/ -  union { -		pmdb_t *db; -		char *file; -	} origin_data; -	pmdbinfrq_t infolevel; + +	struct pkg_operations *ops;  };  pmpkg_t* _alpm_pkg_new(void); diff --git a/lib/libalpm/po/Makefile.in.in b/lib/libalpm/po/Makefile.in.in index 6f2e2e94..83d8838a 100644 --- a/lib/libalpm/po/Makefile.in.in +++ b/lib/libalpm/po/Makefile.in.in @@ -1,5 +1,5 @@  # Makefile for PO directory in any package using GNU gettext. -# Copyright (C) 1995-1997, 2000-2003 by Ulrich Drepper <drepper@gnu.ai.mit.edu> +# Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper <drepper@gnu.ai.mit.edu>  #  # This file can be copied and used freely without restrictions.  It can  # be used in projects which are not available under the GNU General Public @@ -8,10 +8,12 @@  # Please note that the actual code of GNU gettext is covered by the GNU  # General Public License and is *not* in the public domain.  # -# Origin: gettext-0.13 +# Origin: gettext-0.18 +GETTEXT_MACRO_VERSION = 0.18  PACKAGE = @PACKAGE@  VERSION = @VERSION@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@  SHELL = /bin/sh  @SET_MAKE@ @@ -22,18 +24,38 @@ VPATH = @srcdir@  prefix = @prefix@  exec_prefix = @exec_prefix@ -datadir = @datadir@  datarootdir = @datarootdir@ -localedir = $(datadir)/locale +datadir = @datadir@ +localedir = @localedir@  gettextsrcdir = $(datadir)/gettext/po  INSTALL = @INSTALL@  INSTALL_DATA = @INSTALL_DATA@ -mkinstalldirs = @INSTALL@ -d -GMSGFMT = @GMSGFMT@ -MSGFMT = @MSGFMT@ -XGETTEXT = @XGETTEXT@ +# We use $(mkdir_p). +# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as +# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, +# @install_sh@ does not start with $(SHELL), so we add it. +# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined +# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake +# versions, $(mkinstalldirs) and $(install_sh) are unused. +mkinstalldirs = $(SHELL) @install_sh@ -d +install_sh = $(SHELL) @install_sh@ +MKDIR_P = @MKDIR_P@ +mkdir_p = @mkdir_p@ + +GMSGFMT_ = @GMSGFMT@ +GMSGFMT_no = @GMSGFMT@ +GMSGFMT_yes = @GMSGFMT_015@ +GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) +MSGFMT_ = @MSGFMT@ +MSGFMT_no = @MSGFMT@ +MSGFMT_yes = @MSGFMT_015@ +MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) +XGETTEXT_ = @XGETTEXT@ +XGETTEXT_no = @XGETTEXT@ +XGETTEXT_yes = @XGETTEXT_015@ +XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))  MSGMERGE = msgmerge  MSGMERGE_UPDATE = @MSGMERGE@ --update  MSGINIT = msginit @@ -46,7 +68,7 @@ UPDATEPOFILES = @UPDATEPOFILES@  DUMMYPOFILES = @DUMMYPOFILES@  DISTFILES.common = Makefile.in.in remove-potcdate.sin \  $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) -DISTFILES = $(DISTFILES.common) Makevars POTFILES.in $(DOMAIN).pot stamp-po \ +DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \  $(POFILES) $(GMOFILES) \  $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) @@ -57,7 +79,7 @@ CATALOGS = @CATALOGS@  # Makevars gets inserted here. (Don't remove this line!)  .SUFFIXES: -.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-update +.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update  .po.mo:  	@echo "$(MSGFMT) -c -o $@ $<"; \ @@ -66,19 +88,32 @@ CATALOGS = @CATALOGS@  .po.gmo:  	@lang=`echo $* | sed -e 's,.*/,,'`; \  	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ -	echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ -	cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo +	echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \ +	cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo  .sin.sed:  	sed -e '/^#/d' $< > t-$@  	mv t-$@ $@ -all: all-@USE_NLS@ +all: check-macro-version all-@USE_NLS@  all-yes: stamp-po  all-no: +# Ensure that the gettext macros and this Makefile.in.in are in sync. +check-macro-version: +	@test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ +	  || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \ +	       exit 1; \ +	     } + +# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no +# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because +# we don't want to bother translators with empty POT files). We assume that +# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. +# In this case, stamp-po is a nop (i.e. a phony target). +  # stamp-po is a timestamp denoting the last time at which the CATALOGS have  # been loosely updated. Its purpose is that when a developer or translator  # checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, @@ -88,10 +123,13 @@ all-no:  # $(POFILES) has been designed to not touch files that don't need to be  # changed.  stamp-po: $(srcdir)/$(DOMAIN).pot -	test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) -	@echo "touch stamp-po" -	@echo timestamp > stamp-poT -	@mv stamp-poT stamp-po +	test ! -f $(srcdir)/$(DOMAIN).pot || \ +	  test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) +	@test ! -f $(srcdir)/$(DOMAIN).pot || { \ +	  echo "touch stamp-po" && \ +	  echo timestamp > stamp-poT && \ +	  mv stamp-poT stamp-po; \ +	}  # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',  # otherwise packages like GCC can not be built if only parts of the source @@ -100,11 +138,34 @@ stamp-po: $(srcdir)/$(DOMAIN).pot  # This target rebuilds $(DOMAIN).pot; it is an expensive operation.  # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.  $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed -	$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ -	  --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ -	  --files-from=$(srcdir)/POTFILES.in \ -	  --copyright-holder='$(COPYRIGHT_HOLDER)' \ -	  --msgid-bugs-address='$(MSGID_BUGS_ADDRESS)' +	if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \ +	  package_gnu='GNU '; \ +	else \ +	  package_gnu=''; \ +	fi; \ +	if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ +	  msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ +	else \ +	  msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ +	fi; \ +	case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ +	  '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ +	    $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ +	      --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ +	      --files-from=$(srcdir)/POTFILES.in \ +	      --copyright-holder='$(COPYRIGHT_HOLDER)' \ +	      --msgid-bugs-address="$$msgid_bugs_address" \ +	    ;; \ +	  *) \ +	    $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ +	      --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ +	      --files-from=$(srcdir)/POTFILES.in \ +	      --copyright-holder='$(COPYRIGHT_HOLDER)' \ +	      --package-name="$${package_gnu}@PACKAGE@" \ +	      --package-version='@VERSION@' \ +	      --msgid-bugs-address="$$msgid_bugs_address" \ +	    ;; \ +	esac  	test ! -f $(DOMAIN).po || { \  	  if test -f $(srcdir)/$(DOMAIN).pot; then \  	    sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ @@ -130,16 +191,27 @@ $(srcdir)/$(DOMAIN).pot:  # Note that a PO file is not touched if it doesn't need to be changed.  $(POFILES): $(srcdir)/$(DOMAIN).pot  	@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ -	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ -	echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ -	cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot +	if test -f "$(srcdir)/$${lang}.po"; then \ +	  test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ +	  echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \ +	  cd $(srcdir) \ +	    && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ +	           '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ +	             $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ +	           *) \ +	             $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \ +	         esac; \ +	       }; \ +	else \ +	  $(MAKE) $${lang}.po-create; \ +	fi  install: install-exec install-data  install-exec:  install-data: install-data-@USE_NLS@  	if test "$(PACKAGE)" = "gettext-tools"; then \ -	  $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ +	  $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \  	  for file in $(DISTFILES.common) Makevars.template; do \  	    $(INSTALL_DATA) $(srcdir)/$$file \  			    $(DESTDIR)$(gettextsrcdir)/$$file; \ @@ -152,13 +224,12 @@ install-data: install-data-@USE_NLS@  	fi  install-data-no: all  install-data-yes: all -	$(mkinstalldirs) $(DESTDIR)$(datadir)  	@catalogs='$(CATALOGS)'; \  	for cat in $$catalogs; do \  	  cat=`basename $$cat`; \  	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \  	  dir=$(localedir)/$$lang/LC_MESSAGES; \ -	  $(mkinstalldirs) $(DESTDIR)$$dir; \ +	  $(mkdir_p) $(DESTDIR)$$dir; \  	  if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \  	  $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \  	  echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ @@ -198,19 +269,18 @@ installdirs: installdirs-exec installdirs-data  installdirs-exec:  installdirs-data: installdirs-data-@USE_NLS@  	if test "$(PACKAGE)" = "gettext-tools"; then \ -	  $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ +	  $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \  	else \  	  : ; \  	fi  installdirs-data-no:  installdirs-data-yes: -	$(mkinstalldirs) $(DESTDIR)$(datadir)  	@catalogs='$(CATALOGS)'; \  	for cat in $$catalogs; do \  	  cat=`basename $$cat`; \  	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \  	  dir=$(localedir)/$$lang/LC_MESSAGES; \ -	  $(mkinstalldirs) $(DESTDIR)$$dir; \ +	  $(mkdir_p) $(DESTDIR)$$dir; \  	  for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \  	    if test -n "$$lc"; then \  	      if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ @@ -285,11 +355,14 @@ dist distdir:  	$(MAKE) update-po  	@$(MAKE) dist2  # This is a separate target because 'update-po' must be executed before. -dist2: $(DISTFILES) +dist2: stamp-po $(DISTFILES)  	dists="$(DISTFILES)"; \  	if test "$(PACKAGE)" = "gettext-tools"; then \  	  dists="$$dists Makevars.template"; \  	fi; \ +	if test -f $(srcdir)/$(DOMAIN).pot; then \ +	  dists="$$dists $(DOMAIN).pot stamp-po"; \ +	fi; \  	if test -f $(srcdir)/ChangeLog; then \  	  dists="$$dists ChangeLog"; \  	fi; \ @@ -301,9 +374,9 @@ dist2: $(DISTFILES)  	if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \  	for file in $$dists; do \  	  if test -f $$file; then \ -	    cp -p $$file $(distdir); \ +	    cp -p $$file $(distdir) || exit 1; \  	  else \ -	    cp -p $(srcdir)/$$file $(distdir); \ +	    cp -p $(srcdir)/$$file $(distdir) || exit 1; \  	  fi; \  	done @@ -312,6 +385,13 @@ update-po: Makefile  	test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)  	$(MAKE) update-gmo +# General rule for creating PO files. + +.nop.po-create: +	@lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ +	echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ +	exit 1 +  # General rule for updating PO files.  .nop.po-update: @@ -320,9 +400,15 @@ update-po: Makefile  	tmpdir=`pwd`; \  	echo "$$lang:"; \  	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ -	echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ +	echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \  	cd $(srcdir); \ -	if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ +	if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ +	       '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ +	         $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ +	       *) \ +	         $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ +	     esac; \ +	   }; then \  	  if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \  	    rm -f $$tmpdir/$$lang.new.po; \  	  else \ @@ -343,10 +429,13 @@ $(DUMMYPOFILES):  update-gmo: Makefile $(GMOFILES)  	@: -Makefile: Makefile.in.in $(top_builddir)/config.status @POMAKEFILEDEPS@ +# Recreate Makefile by invoking config.status. Explicitly invoke the shell, +# because execution permission bits may not work on the current file system. +# Use @SHELL@, which is the shell determined by autoconf for the use by its +# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. +Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@  	cd $(top_builddir) \ -	  && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ -	       $(SHELL) ./config.status +	  && @SHELL@ ./config.status $(subdir)/$@.in po-directories  force: diff --git a/lib/libalpm/po/POTFILES.in b/lib/libalpm/po/POTFILES.in index 475cf4b4..65637977 100644 --- a/lib/libalpm/po/POTFILES.in +++ b/lib/libalpm/po/POTFILES.in @@ -6,8 +6,9 @@ lib/libalpm/add.c  lib/libalpm/alpm.c  #lib/libalpm/alpm_list.c  lib/libalpm/backup.c -lib/libalpm/be_files.c +lib/libalpm/be_local.c  lib/libalpm/be_package.c +lib/libalpm/be_sync.c  lib/libalpm/cache.c  lib/libalpm/conflict.c  lib/libalpm/db.c diff --git a/lib/libalpm/remove.c b/lib/libalpm/remove.c index 153c0426..c06a239b 100644 --- a/lib/libalpm/remove.c +++ b/lib/libalpm/remove.c @@ -42,12 +42,11 @@  #include "backup.h"  #include "package.h"  #include "db.h" -#include "cache.h"  #include "deps.h"  #include "handle.h"  #include "alpm.h" -int SYMEXPORT alpm_remove_target(char *target) +int SYMEXPORT alpm_remove_target(const char *target)  {  	pmpkg_t *info;  	pmtrans_t *trans; @@ -311,6 +310,10 @@ int _alpm_upgraderemove_package(pmpkg_t *oldpkg, pmpkg_t *newpkg, pmtrans_t *tra  	_alpm_log(PM_LOG_DEBUG, "removing old package first (%s-%s)\n",  			oldpkg->name, oldpkg->version); +	if(trans->flags & PM_TRANS_FLAG_DBONLY) { +		goto db; +	} +  	/* copy the remove skiplist over */  	skip_remove =  		alpm_list_join(alpm_list_strdup(trans->skip_remove),alpm_list_strdup(handle->noupgrade)); @@ -345,10 +348,11 @@ int _alpm_upgraderemove_package(pmpkg_t *oldpkg, pmpkg_t *newpkg, pmtrans_t *tra  	alpm_list_free(newfiles);  	FREELIST(skip_remove); +db:  	/* remove the package from the database */  	_alpm_log(PM_LOG_DEBUG, "updating database\n");  	_alpm_log(PM_LOG_DEBUG, "removing database entry '%s'\n", pkgname); -	if(_alpm_db_remove(handle->db_local, oldpkg) == -1) { +	if(_alpm_local_db_remove(handle->db_local, oldpkg) == -1) {  		_alpm_log(PM_LOG_ERROR, _("could not remove database entry %s-%s\n"),  				pkgname, alpm_pkg_get_version(oldpkg));  	} @@ -447,7 +451,7 @@ int _alpm_remove_packages(pmtrans_t *trans, pmdb_t *db)  		/* remove the package from the database */  		_alpm_log(PM_LOG_DEBUG, "updating database\n");  		_alpm_log(PM_LOG_DEBUG, "removing database entry '%s'\n", pkgname); -		if(_alpm_db_remove(db, info) == -1) { +		if(_alpm_local_db_remove(db, info) == -1) {  			_alpm_log(PM_LOG_ERROR, _("could not remove database entry %s-%s\n"),  			          pkgname, alpm_pkg_get_version(info));  		} diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c index 4cbaf0cb..69234cbf 100644 --- a/lib/libalpm/sync.c +++ b/lib/libalpm/sync.c @@ -31,7 +31,7 @@  #include <stdint.h> /* intmax_t */  #include <unistd.h>  #include <time.h> -#include <dirent.h> +#include <limits.h>  /* libalpm */  #include "sync.h" @@ -39,7 +39,6 @@  #include "log.h"  #include "package.h"  #include "db.h" -#include "cache.h"  #include "deps.h"  #include "conflict.h"  #include "trans.h" @@ -50,6 +49,7 @@  #include "dload.h"  #include "delta.h"  #include "remove.h" +#include "diskspace.h"  /** Check for new version of pkg in sync repos   * (only the first occurrence is considered in sync) @@ -329,7 +329,7 @@ static int sync_target(alpm_list_t *dbs_sync, const char *target)   * @param target the name of the sync target to add   * @return 0 on success, -1 on error (pm_errno is set accordingly)   */ -int SYMEXPORT alpm_sync_dbtarget(char *dbname, char *target) +int SYMEXPORT alpm_sync_dbtarget(const char *dbname, const char *target)  {  	alpm_list_t *i;  	alpm_list_t *dbs_sync; @@ -362,7 +362,7 @@ int SYMEXPORT alpm_sync_dbtarget(char *dbname, char *target)   * @param target the name of the sync target to add   * @return 0 on success, -1 on error (pm_errno is set accordingly)   */ -int SYMEXPORT alpm_sync_target(char *target) +int SYMEXPORT alpm_sync_target(const char *target)  {  	alpm_list_t *dbs_sync; @@ -549,10 +549,10 @@ int _alpm_sync_prepare(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync  			/* if sync1 provides sync2, we remove sync2 from the targets, and vice versa */  			pmdepend_t *dep1 = _alpm_splitdep(conflict->package1);  			pmdepend_t *dep2 = _alpm_splitdep(conflict->package2); -			if(alpm_depcmp(sync1, dep2)) { +			if(_alpm_depcmp(sync1, dep2)) {  				rsync = sync2;  				sync = sync1; -			} else if(alpm_depcmp(sync2, dep1)) { +			} else if(_alpm_depcmp(sync2, dep1)) {  				rsync = sync1;  				sync = sync2;  			} else { @@ -854,7 +854,7 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data)  		for(j = trans->add; j; j = j->next) {  			pmpkg_t *spkg = j->data; -			if(spkg->origin == PKG_FROM_CACHE && current == spkg->origin_data.db) { +			if(spkg->origin != PKG_FROM_FILE && current == spkg->origin_data.db) {  				const char *fname = NULL;  				fname = alpm_pkg_get_filename(spkg); @@ -1018,6 +1018,19 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data)  		EVENT(trans, PM_TRANS_EVT_FILECONFLICTS_DONE, NULL, NULL);  	} +	/* check available disk space */ +	if(handle->checkspace) { +		EVENT(trans, PM_TRANS_EVT_DISKSPACE_START, NULL, NULL); + +		_alpm_log(PM_LOG_DEBUG, "checking available disk space\n"); +		if(_alpm_check_diskspace(trans, handle->db_local) == -1) { +			_alpm_log(PM_LOG_ERROR, _("not enough free disk space\n")); +			goto error; +		} + +		EVENT(trans, PM_TRANS_EVT_DISKSPACE_DONE, NULL, NULL); +	} +  	/* remove conflicting and to-be-replaced packages */  	if(replaces) {  		_alpm_log(PM_LOG_DEBUG, "removing conflicting and to-be-replaced packages\n"); diff --git a/lib/libalpm/trans.c b/lib/libalpm/trans.c index 02612ec1..5c132111 100644 --- a/lib/libalpm/trans.c +++ b/lib/libalpm/trans.c @@ -31,6 +31,7 @@  #include <sys/stat.h>  #include <sys/statvfs.h>  #include <errno.h> +#include <limits.h>  /* libalpm */  #include "trans.h" @@ -44,7 +45,6 @@  #include "sync.h"  #include "alpm.h"  #include "deps.h" -#include "cache.h"  /** \addtogroup alpm_trans Transaction Functions   * @brief Functions to manipulate libalpm transactions @@ -323,11 +323,11 @@ static int grep(const char *fn, const char *needle)  	}  	while(!feof(fp)) {  		char line[1024]; -		int sline = sizeof(line)-1; -		fgets(line, sline, fp); -		if(feof(fp)) { +		if(fgets(line, sizeof(line), fp) == NULL) {  			continue;  		} +		/* TODO: this will not work if the search string +		 * ends up being split across line reads */  		if(strstr(line, needle)) {  			fclose(fp);  			return(1); @@ -344,6 +344,7 @@ int _alpm_runscriptlet(const char *root, const char *installfn,  	char scriptfn[PATH_MAX];  	char cmdline[PATH_MAX];  	char tmpdir[PATH_MAX]; +	char *argv[] = { "sh", "-c", cmdline, NULL };  	char *scriptpath;  	int clean_tmpdir = 0;  	int retval = 0; @@ -371,7 +372,7 @@ int _alpm_runscriptlet(const char *root, const char *installfn,  	/* either extract or copy the scriptlet */  	snprintf(scriptfn, PATH_MAX, "%s/.INSTALL", tmpdir); -	if(!strcmp(script, "pre_upgrade") || !strcmp(script, "pre_install")) { +	if(strcmp(script, "pre_upgrade") == 0 || strcmp(script, "pre_install") == 0) {  		if(_alpm_unpack_single(installfn, tmpdir, ".INSTALL")) {  			retval = 1;  		} @@ -401,7 +402,9 @@ int _alpm_runscriptlet(const char *root, const char *installfn,  				scriptpath, script, ver);  	} -	retval = _alpm_run_chroot(root, cmdline); +	_alpm_log(PM_LOG_DEBUG, "executing \"%s\"\n", cmdline); + +	retval = _alpm_run_chroot(root, "/bin/sh", argv);  cleanup:  	if(clean_tmpdir && _alpm_rmrf(tmpdir)) { diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c index 32eaa442..d34eab5e 100644 --- a/lib/libalpm/util.c +++ b/lib/libalpm/util.c @@ -43,13 +43,18 @@  #include <archive.h>  #include <archive_entry.h> +#ifdef HAVE_LIBSSL +#include <openssl/md5.h> +#else +#include "md5.h" +#endif +  /* libalpm */  #include "util.h"  #include "log.h"  #include "package.h"  #include "alpm.h"  #include "alpm_list.h" -#include "md5.h"  #include "handle.h"  #ifndef HAVE_STRSEP @@ -143,7 +148,15 @@ int _alpm_copyfile(const char *src, const char *dest)  	/* do the actual file copy */  	while((len = fread(buf, 1, CPBUFSIZE, in))) { -		fwrite(buf, 1, len, out); +		size_t nwritten = 0; +		nwritten = fwrite(buf, 1, len, out); +		if((nwritten != len) || ferror(out)) { +			pm_errno = PM_ERR_WRITE; +			_alpm_log(PM_LOG_ERROR, _("error writing to file '%s': %s\n"), +					dest, strerror(errno)); +			ret = -1; +			goto cleanup; +		}  	}  	/* chmod dest to permissions of src, as long as it is not a symlink */ @@ -347,7 +360,7 @@ int _alpm_unpack(const char *archive, const char *prefix, alpm_list_t *list, int  		int readret = archive_read_extract(_archive, entry, 0);  		if(readret == ARCHIVE_WARN) {  			/* operation succeeded but a non-critical error was encountered */ -			_alpm_log(PM_LOG_DEBUG, "warning extracting %s (%s)\n", +			_alpm_log(PM_LOG_WARNING, _("warning given while extracting %s (%s)\n"),  					entryname, archive_error_string(_archive));  		} else if(readret != ARCHIVE_OK) {  			_alpm_log(PM_LOG_ERROR, _("could not extract %s (%s)\n"), @@ -364,8 +377,8 @@ int _alpm_unpack(const char *archive, const char *prefix, alpm_list_t *list, int  cleanup:  	umask(oldmask);  	archive_read_finish(_archive); -	if(restore_cwd) { -		chdir(cwd); +	if(restore_cwd && chdir(cwd) != 0) { +		_alpm_log(PM_LOG_ERROR, _("could not change directory to %s (%s)\n"), cwd, strerror(errno));  	}  	return(ret);  } @@ -398,7 +411,7 @@ int _alpm_rmrf(const char *path)  			for(dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) {  				if(dp->d_ino) {  					sprintf(name, "%s/%s", path, dp->d_name); -					if(strcmp(dp->d_name, "..") && strcmp(dp->d_name, ".")) { +					if(strcmp(dp->d_name, "..") != 0 && strcmp(dp->d_name, ".") != 0) {  						errflag += _alpm_rmrf(name);  					}  				} @@ -444,10 +457,11 @@ int _alpm_logaction(int usesyslog, FILE *f, const char *fmt, va_list args)  	return(ret);  } -int _alpm_run_chroot(const char *root, const char *cmd) +int _alpm_run_chroot(const char *root, const char *path, char *const argv[])  {  	char cwd[PATH_MAX];  	pid_t pid; +	int pipefd[2];  	int restore_cwd = 0;  	int retval = 0; @@ -466,11 +480,17 @@ int _alpm_run_chroot(const char *root, const char *cmd)  		goto cleanup;  	} -	_alpm_log(PM_LOG_DEBUG, "executing \"%s\" under chroot \"%s\"\n", cmd, root); +	_alpm_log(PM_LOG_DEBUG, "executing \"%s\" under chroot \"%s\"\n", path, root);  	/* Flush open fds before fork() to avoid cloning buffers */  	fflush(NULL); +	if(pipe(pipefd) == -1) { +		_alpm_log(PM_LOG_ERROR, _("could not create pipe (%s)\n"), strerror(errno)); +		retval = 1; +		goto cleanup; +	} +  	/* fork- parent and child each have seperate code blocks below */  	pid = fork();  	if(pid == -1) { @@ -480,62 +500,74 @@ int _alpm_run_chroot(const char *root, const char *cmd)  	}  	if(pid == 0) { -		FILE *pipe;  		/* this code runs for the child only (the actual chroot/exec) */ -		_alpm_log(PM_LOG_DEBUG, "chrooting in %s\n", root); +		close(1); +		close(2); +		while(dup2(pipefd[1], 1) == -1 && errno == EINTR); +		while(dup2(pipefd[1], 2) == -1 && errno == EINTR); +		close(pipefd[0]); +		close(pipefd[1]); + +		/* use fprintf instead of _alpm_log to send output through the parent */  		if(chroot(root) != 0) { -			_alpm_log(PM_LOG_ERROR, _("could not change the root directory (%s)\n"), -					strerror(errno)); +			fprintf(stderr, _("could not change the root directory (%s)\n"), strerror(errno));  			exit(1);  		}  		if(chdir("/") != 0) { -			_alpm_log(PM_LOG_ERROR, _("could not change directory to / (%s)\n"), -					strerror(errno)); +			fprintf(stderr, _("could not change directory to / (%s)\n"), strerror(errno));  			exit(1);  		}  		umask(0022); -		pipe = popen(cmd, "r"); -		if(!pipe) { -			_alpm_log(PM_LOG_ERROR, _("call to popen failed (%s)\n"), -					strerror(errno)); -			exit(1); -		} -		while(!feof(pipe)) { -			char line[PATH_MAX]; -			if(fgets(line, PATH_MAX, pipe) == NULL) -				break; -			alpm_logaction("%s", line); -			EVENT(handle->trans, PM_TRANS_EVT_SCRIPTLET_INFO, line, NULL); -		} -		retval = pclose(pipe); -		exit(WEXITSTATUS(retval)); +		execv(path, argv); +		fprintf(stderr, _("call to execv failed (%s)\n"), strerror(errno)); +		exit(1);  	} else {  		/* this code runs for the parent only (wait on the child) */ -		pid_t retpid;  		int status; -		do { -			retpid = waitpid(pid, &status, 0); -		} while(retpid == -1 && errno == EINTR); -		if(retpid == -1) { -			_alpm_log(PM_LOG_ERROR, _("call to waitpid failed (%s)\n"), -			          strerror(errno)); +		FILE *pipe; + +		close(pipefd[1]); +		pipe = fdopen(pipefd[0], "r"); +		if(pipe == NULL) { +			close(pipefd[0]);  			retval = 1; -			goto cleanup;  		} else { -			/* check the return status, make sure it is 0 (success) */ -			if(WIFEXITED(status)) { -				_alpm_log(PM_LOG_DEBUG, "call to waitpid succeeded\n"); -				if(WEXITSTATUS(status) != 0) { -					_alpm_log(PM_LOG_ERROR, _("command failed to execute correctly\n")); -					retval = 1; -				} +			while(!feof(pipe)) { +				char line[PATH_MAX]; +				if(fgets(line, PATH_MAX, pipe) == NULL) +					break; +				alpm_logaction("%s", line); +				EVENT(handle->trans, PM_TRANS_EVT_SCRIPTLET_INFO, line, NULL); +			} +			fclose(pipe); +		} + +		while(waitpid(pid, &status, 0) == -1) { +			if(errno != EINTR) { +				_alpm_log(PM_LOG_ERROR, _("call to waitpid failed (%s)\n"), strerror(errno)); +				retval = 1; +				goto cleanup; +			} +		} + +		/* report error from above after the child has exited */ +		if(retval != 0) { +			_alpm_log(PM_LOG_ERROR, _("could not open pipe (%s)\n"), strerror(errno)); +			goto cleanup; +		} +		/* check the return status, make sure it is 0 (success) */ +		if(WIFEXITED(status)) { +			_alpm_log(PM_LOG_DEBUG, "call to waitpid succeeded\n"); +			if(WEXITSTATUS(status) != 0) { +				_alpm_log(PM_LOG_ERROR, _("command failed to execute correctly\n")); +				retval = 1;  			}  		}  	}  cleanup: -	if(restore_cwd) { -		chdir(cwd); +	if(restore_cwd && chdir(cwd) != 0) { +		_alpm_log(PM_LOG_ERROR, _("could not change directory to %s (%s)\n"), cwd, strerror(errno));  	}  	return(retval); @@ -551,7 +583,8 @@ int _alpm_ldconfig(const char *root)  	if(access(line, F_OK) == 0) {  		snprintf(line, PATH_MAX, "%ssbin/ldconfig", root);  		if(access(line, X_OK) == 0) { -			_alpm_run_chroot(root, "/sbin/ldconfig"); +			char *argv[] = { "ldconfig", NULL }; +			_alpm_run_chroot(root, "/sbin/ldconfig", argv);  		}  	} @@ -648,6 +681,42 @@ int _alpm_lstat(const char *path, struct stat *buf)  	return(ret);  } +#ifdef HAVE_LIBSSL +static int md5_file(const char *path, unsigned char output[16]) +{ +    FILE *f; +    size_t n; +    MD5_CTX ctx; +    unsigned char *buf; + +		CALLOC(buf, 8192, sizeof(unsigned char), return(1)); + +    if((f = fopen(path, "rb")) == NULL) { +        free(buf); +        return(1); +    } + +    MD5_Init(&ctx); + +    while((n = fread(buf, 1, sizeof(buf), f)) > 0) { +        MD5_Update(&ctx, buf, n); +		} + +    MD5_Final(output, &ctx); + +    memset(&ctx, 0, sizeof(MD5_CTX)); +    free(buf); + +    if(ferror(f) != 0) { +        fclose(f); +        return(2); +    } + +    fclose(f); +    return(0); +} +#endif +  /** Get the md5 sum of file.   * @param filename name of the file   * @return the checksum on success, NULL on error @@ -665,6 +734,7 @@ char SYMEXPORT *alpm_compute_md5sum(const char *filename)  	/* allocate 32 chars plus 1 for null */  	md5sum = calloc(33, sizeof(char)); +	/* defined above for OpenSSL, otherwise defined in md5.h */  	ret = md5_file(filename, output);  	if (ret > 0) { @@ -701,33 +771,156 @@ int _alpm_test_md5sum(const char *filepath, const char *md5sum)  	return(ret);  } -char *_alpm_archive_fgets(char *line, size_t size, struct archive *a) +/* Note: does NOT handle sparse files on purpose for speed. */ +int _alpm_archive_fgets(struct archive *a, struct archive_read_buffer *b)  { -	/* for now, just read one char at a time until we get to a -	 * '\n' char. we can optimize this later with an internal -	 * buffer. */ -	/* leave room for zero terminator */ -	char *last = line + size - 1; -	char *i; - -	for(i = line; i < last; i++) { -		int ret = archive_read_data(a, i, 1); -		/* special check for first read- if null, return null, -		 * this indicates EOF */ -		if(i == line && (ret <= 0 || *i == '\0')) { -			return(NULL); +	char *i = NULL; +	int64_t offset; +	int done = 0; + +	while(1) { +		/* have we processed this entire block? */ +		if(b->block + b->block_size == b->block_offset) { +			if(b->ret == ARCHIVE_EOF) { +				/* reached end of archive on the last read, now we are out of data */ +				goto cleanup; +			} + +			/* zero-copy - this is the entire next block of data. */ +			b->ret = archive_read_data_block(a, (void*)&b->block, +					&b->block_size, &offset); +			b->block_offset = b->block; + +			/* error or end of archive with no data read, cleanup */ +			if(b->ret < ARCHIVE_OK || +					(b->block_size == 0 && b->ret == ARCHIVE_EOF)) { +				goto cleanup; +			}  		} -		/* check if read value was null or newline */ -		if(ret <= 0 || *i == '\0' || *i == '\n') { -			last = i + 1; -			break; + +		/* loop through the block looking for EOL characters */ +		for(i = b->block_offset; i < (b->block + b->block_size); i++) { +			/* check if read value was null or newline */ +			if(*i == '\0' || *i == '\n') { +				done = 1; +				break; +			}  		} + +		/* allocate our buffer, or ensure our existing one is big enough */ +		if(!b->line) { +			/* set the initial buffer to the read block_size */ +			CALLOC(b->line, b->block_size + 1, sizeof(char), +					RET_ERR(PM_ERR_MEMORY, -1)); +			b->line_size = b->block_size + 1; +			b->line_offset = b->line; +		} else { +			size_t needed = (b->line_offset - b->line) + (i - b->block_offset) + 1; +			if(needed > b->max_line_size) { +				RET_ERR(PM_ERR_MEMORY, -1); +			} +			if(needed > b->line_size) { +				/* need to realloc + copy data to fit total length */ +				char *new; +				CALLOC(new, needed, sizeof(char), RET_ERR(PM_ERR_MEMORY, -1)); +				memcpy(new, b->line, b->line_size); +				b->line_size = needed; +				b->line_offset = new + (b->line_offset - b->line); +				free(b->line); +				b->line = new; +			} +		} + +		if(done) { +			size_t len = i - b->block_offset; +			memcpy(b->line_offset, b->block_offset, len); +			b->line_offset[len] = '\0'; +			b->block_offset = ++i; +			/* this is the main return point; from here you can read b->line */ +			return(ARCHIVE_OK); +		} else { +			/* we've looked through the whole block but no newline, copy it */ +			size_t len = b->block + b->block_size - b->block_offset; +			memcpy(b->line_offset, b->block_offset, len); +			b->line_offset += len; +			b->block_offset = i; +		} +	} + +cleanup: +	{ +		int ret = b->ret; +		FREE(b->line); +		memset(b, 0, sizeof(b)); +		return(ret); +	} +} + +int _alpm_splitname(const char *target, pmpkg_t *pkg) +{ +	/* the format of a db entry is as follows: +	 *    package-version-rel/ +	 * package name can contain hyphens, so parse from the back- go back +	 * two hyphens and we have split the version from the name. +	 */ +	char *tmp, *p, *q; + +	if(target == NULL || pkg == NULL) { +		return(-1); +	} +	STRDUP(tmp, target, RET_ERR(PM_ERR_MEMORY, -1)); +	p = tmp + strlen(tmp); + +	/* remove any trailing '/' */ +	while (*(p - 1) == '/') { +	  --p; +	  *p = '\0';  	} -	/* always null terminate the buffer */ -	*last = '\0'; +	/* do the magic parsing- find the beginning of the version string +	 * by doing two iterations of same loop to lop off two hyphens */ +	for(q = --p; *q && *q != '-'; q--); +	for(p = --q; *p && *p != '-'; p--); +	if(*p != '-' || p == tmp) { +		return(-1); +	} + +	/* copy into fields and return */ +	if(pkg->version) { +		FREE(pkg->version); +	} +	STRDUP(pkg->version, p+1, RET_ERR(PM_ERR_MEMORY, -1)); +	/* insert a terminator at the end of the name (on hyphen)- then copy it */ +	*p = '\0'; +	if(pkg->name) { +		FREE(pkg->name); +	} +	STRDUP(pkg->name, tmp, RET_ERR(PM_ERR_MEMORY, -1)); +	pkg->name_hash = _alpm_hash_sdbm(pkg->name); + +	free(tmp); +	return(0); +} + +/** + * Hash the given string to an unsigned long value. + * This is the standard sdbm hashing algorithm. + * @param str string to hash + * @return the hash value of the given string + */ +unsigned long _alpm_hash_sdbm(const char *str) +{ +	unsigned long hash = 0; +	int c; + +	if(!str) { +		return(hash); +	} +	while((c = *str++)) { +		hash = c + (hash << 6) + (hash << 16) - hash; +	} -	return(line); +	return(hash);  }  /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/util.h b/lib/libalpm/util.h index 8a3154a7..543643b1 100644 --- a/lib/libalpm/util.h +++ b/lib/libalpm/util.h @@ -27,6 +27,7 @@  #include "config.h"  #include "alpm_list.h" +#include "package.h" /* pmpkg_t */  #include <stdio.h>  #include <string.h> @@ -58,24 +59,42 @@  	_alpm_log(PM_LOG_DEBUG, "returning error %d from %s : %s\n", err, __func__, alpm_strerrorlast()); \  	return(ret); } while(0) +/** + * Used as a buffer/state holder for _alpm_archive_fgets(). + */ +struct archive_read_buffer { +	char *line; +	char *line_offset; +	size_t line_size; +	size_t max_line_size; + +	char *block; +	char *block_offset; +	size_t block_size; + +	int ret; +}; +  int _alpm_makepath(const char *path);  int _alpm_makepath_mode(const char *path, mode_t mode);  int _alpm_copyfile(const char *src, const char *dest);  char *_alpm_strtrim(char *str); -int _alpm_lckmk(); -int _alpm_lckrm(); +int _alpm_lckmk(void); +int _alpm_lckrm(void);  int _alpm_unpack_single(const char *archive, const char *prefix, const char *fn);  int _alpm_unpack(const char *archive, const char *prefix, alpm_list_t *list, int breakfirst);  int _alpm_rmrf(const char *path);  int _alpm_logaction(int usesyslog, FILE *f, const char *fmt, va_list args); -int _alpm_run_chroot(const char *root, const char *cmd); +int _alpm_run_chroot(const char *root, const char *path, char *const argv[]);  int _alpm_ldconfig(const char *root);  int _alpm_str_cmp(const void *s1, const void *s2);  char *_alpm_filecache_find(const char *filename);  const char *_alpm_filecache_setup(void);  int _alpm_lstat(const char *path, struct stat *buf);  int _alpm_test_md5sum(const char *filepath, const char *md5sum); -char *_alpm_archive_fgets(char *line, size_t size, struct archive *a); +int _alpm_archive_fgets(struct archive *a, struct archive_read_buffer *b); +int _alpm_splitname(const char *target, pmpkg_t *pkg); +unsigned long _alpm_hash_sdbm(const char *str);  #ifndef HAVE_STRSEP  char *strsep(char **, const char *); @@ -85,9 +104,6 @@ char *strsep(char **, const char *);  #define SYMEXPORT __attribute__((visibility("default")))  #define SYMHIDDEN __attribute__((visibility("internal"))) -/* max percent of package size to download deltas */ -#define MAX_DELTA_RATIO 0.7 -  #endif /* _ALPM_UTIL_H */  /* vim: set ts=2 sw=2 noet: */ diff --git a/ltmain.sh b/ltmain.sh index c4a714df..3061e3c5 100644..100755 --- a/ltmain.sh +++ b/ltmain.sh @@ -1,52 +1,89 @@ -# ltmain.sh - Provide generalized library-building support services. -# NOTE: Changing this file will not affect anything until you rerun configure. -# + +# libtool (GNU libtool) 2.4 +# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 +  # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, -# 2007, 2008  Free Software Foundation, Inc. -# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 -# -# This program is free software; you can redistribute it and/or modify +# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions.  There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool 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 +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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. - -basename="s,^.*/,,g" - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath="$0" +# along with GNU Libtool; see the file COPYING.  If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# The name of this program: -progname=`echo "$progpath" | $SED $basename` -modename="$progname" - -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +#       --config             show all configuration variables +#       --debug              enable verbose shell tracing +#   -n, --dry-run            display commands without modifying any files +#       --features           display basic configuration information and exit +#       --mode=MODE          use operation mode MODE +#       --preserve-dup-deps  don't remove duplicate dependency libraries +#       --quiet, --silent    don't print informational messages +#       --no-quiet, --no-silent +#                            print informational messages (default) +#       --tag=TAG            use configuration variables from tag TAG +#   -v, --verbose            print more informational messages than default +#       --no-verbose         don't print the extra informational messages +#       --version            print version information +#   -h, --help, --help-all   print short, long, or detailed help message +# +# MODE must be one of the following: +# +#         clean              remove files from the build directory +#         compile            compile a source file into a libtool object +#         execute            automatically set library path, then run a program +#         finish             complete the installation of libtool libraries +#         install            install libraries or executables +#         link               create a library or an executable +#         uninstall          remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE.  When passed as first option, +# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +#         host-triplet:	$host +#         shell:		$SHELL +#         compiler:		$LTCC +#         compiler flags:		$LTCFLAGS +#         linker:		$LD (gnu? $with_gnu_ld) +#         $progname:	(GNU libtool) 2.4 +#         automake:	$automake_version +#         autoconf:	$autoconf_version +# +# Report bugs to <bug-libtool@gnu.org>. +# GNU libtool home page: <http://www.gnu.org/software/libtool/>. +# General help using GNU software: <http://www.gnu.org/gethelp/>. -PROGRAM=ltmain.sh +PROGRAM=libtool  PACKAGE=libtool -VERSION=1.5.26 -TIMESTAMP=" (1.1220.2.492 2008/01/30 06:40:56)" +VERSION=2.4 +TIMESTAMP="" +package_revision=1.3293 -# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE). +# Be Bourne compatible  if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then    emulate sh    NULLCMD=: @@ -60,104 +97,462 @@ fi  BIN_SH=xpg4; export BIN_SH # for Tru64  DUALCASE=1; export DUALCASE # for MKS sh -# Check that we have a working $echo. -if test "X$1" = X--no-reexec; then -  # Discard the --no-reexec flag, and continue. -  shift -elif test "X$1" = X--fallback-echo; then -  # Avoid inline document here, it may be left over -  : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then -  # Yippee, $echo works! -  : -else -  # Restart under the correct shell, and then maybe $echo will work. -  exec $SHELL "$progpath" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then -  # used as fallback echo -  shift -  cat <<EOF -$* -EOF -  exit $EXIT_SUCCESS -fi - -default_mode= -help="Try \`$progname --help' for more information." -magic="%%%MAGIC variable%%%" -mkdir="mkdir" -mv="mv -f" -rm="rm -f" - -# Sed substitution that helps us do robust quoting.  It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed="${SED}"' -e 1s/^X//' -sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g' -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system -    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr -  SP2NL='tr \040 \012' -  NL2SP='tr \015\012 \040\040' -  ;; - *) # EBCDIC based system -  SP2NL='tr \100 \n' -  NL2SP='tr \r\n \100\100' -  ;; -esac +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ +  eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} -# 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). -# We save the old values to restore during execute mode. -lt_env= +# NLS nuisances: We save the old values to restore during execute mode. +lt_user_locale= +lt_safe_locale=  for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES  do    eval "if test \"\${$lt_var+set}\" = set; then -	  save_$lt_var=\$$lt_var -	  lt_env=\"$lt_var=\$$lt_var \$lt_env\" -	  $lt_var=C +          save_$lt_var=\$$lt_var +          $lt_var=C  	  export $lt_var +	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" +	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"  	fi"  done +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL -if test -n "$lt_env"; then -  lt_env="env $lt_env" -fi +$lt_unset CDPATH + + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + + + +: ${CP="cp -f"} +test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} +: ${EGREP="grep -E"} +: ${FGREP="grep -F"} +: ${GREP="grep"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SED="sed"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS  # Make sure IFS has a sensible default  lt_nl='  '  IFS=" 	$lt_nl" -if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then -  $echo "$modename: not configured to build any kind of library" 1>&2 -  $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2 -  exit $EXIT_FAILURE -fi +dirname="s,/[^/]*$,," +basename="s,^.*/,," -# Global variables. -mode=$default_mode -nonopt= -prev= -prevopt= -run= -show="$echo" -show_help= -execute_dlfiles= -duplicate_deps=no -preserve_args= -lo2o="s/\\.lo\$/.${objext}/" -o2lo="s/\\.${objext}\$/.lo/" -extracted_archives= -extracted_serial=0 +# func_dirname file append nondir_replacement +# Compute the dirname of FILE.  If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ +    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` +    if test "X$func_dirname_result" = "X${1}"; then +      func_dirname_result="${3}" +    else +      func_dirname_result="$func_dirname_result${2}" +    fi +} # func_dirname may be replaced by extended shell implementation + + +# func_basename file +func_basename () +{ +    func_basename_result=`$ECHO "${1}" | $SED "$basename"` +} # func_basename may be replaced by extended shell implementation + + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +#   dirname:  Compute the dirname of FILE.  If nonempty, +#             add APPEND to the result, otherwise set result +#             to NONDIR_REPLACEMENT. +#             value returned in "$func_dirname_result" +#   basename: Compute filename of FILE. +#             value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ +    # Extract subdirectory from the argument. +    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` +    if test "X$func_dirname_result" = "X${1}"; then +      func_dirname_result="${3}" +    else +      func_dirname_result="$func_dirname_result${2}" +    fi +    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` +} # func_dirname_and_basename may be replaced by extended shell implementation + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ +    case ${2} in +      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; +      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; +    esac +} # func_stripname may be replaced by extended shell implementation + + +# These SED scripts presuppose an absolute path with a trailing slash. +pathcar='s,^/\([^/]*\).*$,\1,' +pathcdr='s,^/[^/]*,,' +removedotparts=':dotsl +		s@/\./@/@g +		t dotsl +		s,/\.$,/,' +collapseslashes='s@/\{1,\}@/@g' +finalslash='s,/*$,/,' + +# func_normal_abspath PATH +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +#             value returned in "$func_normal_abspath_result" +func_normal_abspath () +{ +  # Start from root dir and reassemble the path. +  func_normal_abspath_result= +  func_normal_abspath_tpath=$1 +  func_normal_abspath_altnamespace= +  case $func_normal_abspath_tpath in +    "") +      # Empty path, that just means $cwd. +      func_stripname '' '/' "`pwd`" +      func_normal_abspath_result=$func_stripname_result +      return +    ;; +    # The next three entries are used to spot a run of precisely +    # two leading slashes without using negated character classes; +    # we take advantage of case's first-match behaviour. +    ///*) +      # Unusual form of absolute path, do nothing. +    ;; +    //*) +      # Not necessarily an ordinary path; POSIX reserves leading '//' +      # and for example Cygwin uses it to access remote file shares +      # over CIFS/SMB, so we conserve a leading double slash if found. +      func_normal_abspath_altnamespace=/ +    ;; +    /*) +      # Absolute path, do nothing. +    ;; +    *) +      # Relative path, prepend $cwd. +      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath +    ;; +  esac +  # Cancel out all the simple stuff to save iterations.  We also want +  # the path to end with a slash for ease of parsing, so make sure +  # there is one (and only one) here. +  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ +        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` +  while :; do +    # Processed it all yet? +    if test "$func_normal_abspath_tpath" = / ; then +      # If we ascended to the root using ".." the result may be empty now. +      if test -z "$func_normal_abspath_result" ; then +        func_normal_abspath_result=/ +      fi +      break +    fi +    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ +        -e "$pathcar"` +    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ +        -e "$pathcdr"` +    # Figure out what to do with it +    case $func_normal_abspath_tcomponent in +      "") +        # Trailing empty path component, ignore it. +      ;; +      ..) +        # Parent dir; strip last assembled component from result. +        func_dirname "$func_normal_abspath_result" +        func_normal_abspath_result=$func_dirname_result +      ;; +      *) +        # Actual path component, append it. +        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent +      ;; +    esac +  done +  # Restore leading double-slash if one was found on entry. +  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + +# func_relative_path SRCDIR DSTDIR +# generates a relative path from SRCDIR to DSTDIR, with a trailing +# slash if non-empty, suitable for immediately appending a filename +# without needing to append a separator. +#             value returned in "$func_relative_path_result" +func_relative_path () +{ +  func_relative_path_result= +  func_normal_abspath "$1" +  func_relative_path_tlibdir=$func_normal_abspath_result +  func_normal_abspath "$2" +  func_relative_path_tbindir=$func_normal_abspath_result + +  # Ascend the tree starting from libdir +  while :; do +    # check if we have found a prefix of bindir +    case $func_relative_path_tbindir in +      $func_relative_path_tlibdir) +        # found an exact match +        func_relative_path_tcancelled= +        break +        ;; +      $func_relative_path_tlibdir*) +        # found a matching prefix +        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" +        func_relative_path_tcancelled=$func_stripname_result +        if test -z "$func_relative_path_result"; then +          func_relative_path_result=. +        fi +        break +        ;; +      *) +        func_dirname $func_relative_path_tlibdir +        func_relative_path_tlibdir=${func_dirname_result} +        if test "x$func_relative_path_tlibdir" = x ; then +          # Have to descend all the way to the root! +          func_relative_path_result=../$func_relative_path_result +          func_relative_path_tcancelled=$func_relative_path_tbindir +          break +        fi +        func_relative_path_result=../$func_relative_path_result +        ;; +    esac +  done + +  # Now calculate path; take care to avoid doubling-up slashes. +  func_stripname '' '/' "$func_relative_path_result" +  func_relative_path_result=$func_stripname_result +  func_stripname '/' '/' "$func_relative_path_tcancelled" +  if test "x$func_stripname_result" != x ; then +    func_relative_path_result=${func_relative_path_result}/${func_stripname_result} +  fi + +  # Normalisation. If bindir is libdir, return empty string, +  # else relative path ending with a slash; either way, target +  # file name can be directly appended. +  if test ! -z "$func_relative_path_result"; then +    func_stripname './' '' "$func_relative_path_result/" +    func_relative_path_result=$func_stripname_result +  fi +} + +# The name of this program: +func_dirname_and_basename "$progpath" +progname=$func_basename_result + +# Make sure we have an absolute path for reexecution: +case $progpath in +  [\\/]*|[A-Za-z]:\\*) ;; +  *[\\/]*) +     progdir=$func_dirname_result +     progdir=`cd "$progdir" && pwd` +     progpath="$progdir/$progname" +     ;; +  *) +     save_IFS="$IFS" +     IFS=: +     for progdir in $PATH; do +       IFS="$save_IFS" +       test -x "$progdir/$progname" && break +     done +     IFS="$save_IFS" +     test -n "$progdir" || progdir=`pwd` +     progpath="$progdir/$progname" +     ;; +esac + +# Sed substitution that helps us do robust quoting.  It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' + +# Sed substitution that converts a w32 file name or path +# which contains forward slashes, into one that contains +# (escaped) backslashes.  A very naive implementation. +lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same.  If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'.  `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ +  s/$bs4/&\\ +/g +  s/^$bs2$dollar/$bs&/ +  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g +  s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ +    $ECHO "$progname: ${opt_mode+$opt_mode: }$*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ +    $opt_verbose && func_echo ${1+"$@"} + +    # A bug in bash halts the script if the last line of a function +    # fails when set -e is in force, so we need another command to +    # work around that: +    : +} + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ +    $ECHO "$*" +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ +    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ +    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 + +    # bash bug again: +    : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ +    func_error ${1+"$@"} +    exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ +    func_error ${1+"$@"} +    func_fatal_error "$help" +} +help="Try \`$progname --help' for more information."  ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ +    $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ +    my_directory_path="$1" +    my_dir_list= + +    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + +      # Protect directory names starting with `-' +      case $my_directory_path in +        -*) my_directory_path="./$my_directory_path" ;; +      esac + +      # While some portion of DIR does not yet exist... +      while test ! -d "$my_directory_path"; do +        # ...make a list in topmost first order.  Use a colon delimited +	# list incase some portion of path contains whitespace. +        my_dir_list="$my_directory_path:$my_dir_list" + +        # If the last portion added has no slash in it, the list is done +        case $my_directory_path in */*) ;; *) break ;; esac + +        # ...otherwise throw away the child directory and loop +        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` +      done +      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` + +      save_mkdir_p_IFS="$IFS"; IFS=':' +      for my_dir in $my_dir_list; do +	IFS="$save_mkdir_p_IFS" +        # mkdir can fail with a `File exist' error if two processes +        # try to create one of the directories concurrently.  Don't +        # stop in that case! +        $MKDIR "$my_dir" 2>/dev/null || : +      done +      IFS="$save_mkdir_p_IFS" + +      # Bail out if we (or some other process) failed to create a directory. +      test -d "$my_directory_path" || \ +        func_fatal_error "Failed to create \`$1'" +    fi +} -##################################### -# Shell function definitions: -# This seems to be the best place for them  # func_mktempdir [string]  # Make a temporary directory that won't clash with other running @@ -167,7 +562,7 @@ func_mktempdir ()  {      my_template="${TMPDIR-/tmp}/${1-$progname}" -    if test "$run" = ":"; then +    if test "$opt_dry_run" = ":"; then        # Return a directory name, but don't create it in dry-run mode        my_tmpdir="${my_template}-$$"      else @@ -176,71 +571,799 @@ func_mktempdir ()        my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`        if test ! -d "$my_tmpdir"; then -	# Failing that, at least try and use $RANDOM to avoid a race -	my_tmpdir="${my_template}-${RANDOM-0}$$" +        # Failing that, at least try and use $RANDOM to avoid a race +        my_tmpdir="${my_template}-${RANDOM-0}$$" -	save_mktempdir_umask=`umask` -	umask 0077 -	$mkdir "$my_tmpdir" -	umask $save_mktempdir_umask +        save_mktempdir_umask=`umask` +        umask 0077 +        $MKDIR "$my_tmpdir" +        umask $save_mktempdir_umask        fi        # If we're not in dry-run mode, bomb out on failure -      test -d "$my_tmpdir" || { -        $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 -	exit $EXIT_FAILURE -      } +      test -d "$my_tmpdir" || \ +        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"      fi -    $echo "X$my_tmpdir" | $Xsed +    $ECHO "$my_tmpdir"  } -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -func_win32_libid () +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval ()  { -  win32_libid_type="unknown" -  win32_fileres=`file -L $1 2>/dev/null` -  case $win32_fileres in -  *ar\ archive\ import\ library*) # definitely import -    win32_libid_type="x86 archive import" -    ;; -  *ar\ archive*) # could be an import, or static -    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ -      $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then -      win32_nmres=`eval $NM -f posix -A $1 | \ -	$SED -n -e '1,100{ -		/ I /{ -			s,.*,import, -			p -			q -			} -		}'` -      case $win32_nmres in -      import*)  win32_libid_type="x86 archive import";; -      *)        win32_libid_type="x86 archive static";; -      esac +    case $1 in +      *[\\\`\"\$]*) +	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; +      *) +        func_quote_for_eval_unquoted_result="$1" ;; +    esac + +    case $func_quote_for_eval_unquoted_result in +      # Double-quote args containing shell metacharacters to delay +      # word splitting, command substitution and and variable +      # expansion for a subsequent eval. +      # Many Bourne shells cannot handle close brackets correctly +      # in scan sets, so we specify it separately. +      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"") +        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" +        ;; +      *) +        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" +    esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ +    case $1 in +      *[\\\`\"]*) +	my_arg=`$ECHO "$1" | $SED \ +	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;; +      *) +        my_arg="$1" ;; +    esac + +    case $my_arg in +      # Double-quote args containing shell metacharacters to delay +      # word splitting and command substitution for a subsequent eval. +      # Many Bourne shells cannot handle close brackets correctly +      # in scan sets, so we specify it separately. +      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"") +        my_arg="\"$my_arg\"" +        ;; +    esac + +    func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is +# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ +    my_cmd="$1" +    my_fail_exp="${2-:}" + +    ${opt_silent-false} || { +      func_quote_for_expand "$my_cmd" +      eval "func_echo $func_quote_for_expand_result" +    } + +    if ${opt_dry_run-false}; then :; else +      eval "$my_cmd" +      my_status=$? +      if test "$my_status" -eq 0; then :; else +	eval "(exit $my_status); $my_fail_exp" +      fi      fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is +# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it.  Use the saved locale for evaluation. +func_show_eval_locale () +{ +    my_cmd="$1" +    my_fail_exp="${2-:}" + +    ${opt_silent-false} || { +      func_quote_for_expand "$my_cmd" +      eval "func_echo $func_quote_for_expand_result" +    } + +    if ${opt_dry_run-false}; then :; else +      eval "$lt_user_locale +	    $my_cmd" +      my_status=$? +      eval "$lt_safe_locale" +      if test "$my_status" -eq 0; then :; else +	eval "(exit $my_status); $my_fail_exp" +      fi +    fi +} + +# func_tr_sh +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result.  All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ +  case $1 in +  [0-9]* | *[!a-zA-Z0-9_]*) +    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`      ;; -  *DLL*) -    win32_libid_type="x86 DLL" +  * ) +    func_tr_sh_result=$1      ;; -  *executable*) # but shell scripts are "executable" too... -    case $win32_fileres in -    *MS\ Windows\ PE\ Intel*) -      win32_libid_type="x86 DLL" +  esac +} + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ +    $opt_debug + +    $SED -n '/(C)/!b go +	:more +	/\./!{ +	  N +	  s/\n# / / +	  b more +	} +	:go +	/^# '$PROGRAM' (GNU /,/# warranty; / { +        s/^# // +	s/^# *$// +        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ +        p +     }' < "$progpath" +     exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ +    $opt_debug + +    $SED -n '/^# Usage:/,/^#  *.*--help/ { +        s/^# // +	s/^# *$// +	s/\$progname/'$progname'/ +	p +    }' < "$progpath" +    echo +    $ECHO "run \`$progname --help | more' for full usage" +    exit $? +} + +# func_help [NOEXIT] +# Echo long help message to standard output and exit, +# unless 'noexit' is passed as argument. +func_help () +{ +    $opt_debug + +    $SED -n '/^# Usage:/,/# Report bugs to/ { +	:print +        s/^# // +	s/^# *$// +	s*\$progname*'$progname'* +	s*\$host*'"$host"'* +	s*\$SHELL*'"$SHELL"'* +	s*\$LTCC*'"$LTCC"'* +	s*\$LTCFLAGS*'"$LTCFLAGS"'* +	s*\$LD*'"$LD"'* +	s/\$with_gnu_ld/'"$with_gnu_ld"'/ +	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ +	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ +	p +	d +     } +     /^# .* home page:/b print +     /^# General help using/b print +     ' < "$progpath" +    ret=$? +    if test -z "$1"; then +      exit $ret +    fi +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ +    $opt_debug + +    func_error "missing argument for $1." +    exit_cmd=exit +} + + +# func_split_short_opt shortopt +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +func_split_short_opt () +{ +    my_sed_short_opt='1s/^\(..\).*$/\1/;q' +    my_sed_short_rest='1s/^..\(.*\)$/\1/;q' + +    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` +    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` +} # func_split_short_opt may be replaced by extended shell implementation + + +# func_split_long_opt longopt +# Set func_split_long_opt_name and func_split_long_opt_arg shell +# variables after splitting LONGOPT at the `=' sign. +func_split_long_opt () +{ +    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' +    my_sed_long_arg='1s/^--[^=]*=//' + +    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` +    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` +} # func_split_long_opt may be replaced by extended shell implementation + +exit_cmd=: + + + + + +magic="%%%MAGIC variable%%%" +magic_exe="%%%MAGIC EXE variable%%%" + +# Global variables. +nonopt= +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end.  This prevents here-documents from being +# left over by shells. +exec_cmd= + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ +    eval "${1}=\$${1}\${2}" +} # func_append may be replaced by extended shell implementation + +# func_append_quoted var value +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +func_append_quoted () +{ +    func_quote_for_eval "${2}" +    eval "${1}=\$${1}\\ \$func_quote_for_eval_result" +} # func_append_quoted may be replaced by extended shell implementation + + +# func_arith arithmetic-term... +func_arith () +{ +    func_arith_result=`expr "${@}"` +} # func_arith may be replaced by extended shell implementation + + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ +    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` +} # func_len may be replaced by extended shell implementation + + +# func_lo2o object +func_lo2o () +{ +    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` +} # func_lo2o may be replaced by extended shell implementation + + +# func_xform libobj-or-source +func_xform () +{ +    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` +} # func_xform may be replaced by extended shell implementation + + +# func_fatal_configuration arg... +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ +    func_error ${1+"$@"} +    func_error "See the $PACKAGE documentation for more information." +    func_fatal_error "Fatal configuration error." +} + + +# func_config +# Display the configuration for all the tags in this script. +func_config () +{ +    re_begincf='^# ### BEGIN LIBTOOL' +    re_endcf='^# ### END LIBTOOL' + +    # Default configuration. +    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + +    # Now print the configurations for the tags. +    for tagname in $taglist; do +      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" +    done + +    exit $? +} + +# func_features +# Display the features supported by this script. +func_features () +{ +    echo "host: $host" +    if test "$build_libtool_libs" = yes; then +      echo "enable shared libraries" +    else +      echo "disable shared libraries" +    fi +    if test "$build_old_libs" = yes; then +      echo "enable static libraries" +    else +      echo "disable static libraries" +    fi + +    exit $? +} + +# func_enable_tag tagname +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ +  # Global variable: +  tagname="$1" + +  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" +  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" +  sed_extractcf="/$re_begincf/,/$re_endcf/p" + +  # Validate tagname. +  case $tagname in +    *[!-_A-Za-z0-9,/]*) +      func_fatal_error "invalid tag name: $tagname" +      ;; +  esac + +  # Don't test for the "default" C tag, as we know it's +  # there but not specially marked. +  case $tagname in +    CC) ;; +    *) +      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then +	taglist="$taglist $tagname" + +	# Evaluate the configuration.  Be careful to quote the path +	# and the sed script, to avoid splitting on whitespace, but +	# also don't use non-portable quotes within backquotes within +	# quotes we have to do it in 2 steps: +	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` +	eval "$extractedcf" +      else +	func_error "ignoring unknown tag $tagname" +      fi +      ;; +  esac +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ +  if test "$package_revision" != "$macro_revision"; then +    if test "$VERSION" != "$macro_version"; then +      if test -z "$macro_version"; then +        cat >&2 <<_LT_EOF +$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF +      else +        cat >&2 <<_LT_EOF +$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF +      fi +    else +      cat >&2 <<_LT_EOF +$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF +    fi + +    exit $EXIT_MISMATCH +  fi +} + + +# Shorthand for --mode=foo, only valid as the first argument +case $1 in +clean|clea|cle|cl) +  shift; set dummy --mode clean ${1+"$@"}; shift +  ;; +compile|compil|compi|comp|com|co|c) +  shift; set dummy --mode compile ${1+"$@"}; shift +  ;; +execute|execut|execu|exec|exe|ex|e) +  shift; set dummy --mode execute ${1+"$@"}; shift +  ;; +finish|finis|fini|fin|fi|f) +  shift; set dummy --mode finish ${1+"$@"}; shift +  ;; +install|instal|insta|inst|ins|in|i) +  shift; set dummy --mode install ${1+"$@"}; shift +  ;; +link|lin|li|l) +  shift; set dummy --mode link ${1+"$@"}; shift +  ;; +uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) +  shift; set dummy --mode uninstall ${1+"$@"}; shift +  ;; +esac + + + +# Option defaults: +opt_debug=: +opt_dry_run=false +opt_config=false +opt_preserve_dup_deps=false +opt_features=false +opt_finish=false +opt_help=false +opt_help_all=false +opt_silent=: +opt_verbose=: +opt_silent=false +opt_verbose=false + + +# Parse options once, thoroughly.  This comes as soon as possible in the +# script to make things like `--version' happen as quickly as we can. +{ +  # this just eases exit handling +  while test $# -gt 0; do +    opt="$1" +    shift +    case $opt in +      --debug|-x)	opt_debug='set -x' +			func_echo "enabling shell trace mode" +			$opt_debug +			;; +      --dry-run|--dryrun|-n) +			opt_dry_run=: +			;; +      --config) +			opt_config=: +func_config +			;; +      --dlopen|-dlopen) +			optarg="$1" +			opt_dlopen="${opt_dlopen+$opt_dlopen +}$optarg" +			shift +			;; +      --preserve-dup-deps) +			opt_preserve_dup_deps=: +			;; +      --features) +			opt_features=: +func_features +			;; +      --finish) +			opt_finish=: +set dummy --mode finish ${1+"$@"}; shift +			;; +      --help) +			opt_help=: +			;; +      --help-all) +			opt_help_all=: +opt_help=': help-all' +			;; +      --mode) +			test $# = 0 && func_missing_arg $opt && break +			optarg="$1" +			opt_mode="$optarg" +case $optarg in +  # Valid mode arguments: +  clean|compile|execute|finish|install|link|relink|uninstall) ;; + +  # Catch anything else as an error +  *) func_error "invalid argument for $opt" +     exit_cmd=exit +     break +     ;; +esac +			shift +			;; +      --no-silent|--no-quiet) +			opt_silent=false +func_append preserve_args " $opt" +			;; +      --no-verbose) +			opt_verbose=false +func_append preserve_args " $opt" +			;; +      --silent|--quiet) +			opt_silent=: +func_append preserve_args " $opt" +        opt_verbose=false +			;; +      --verbose|-v) +			opt_verbose=: +func_append preserve_args " $opt" +opt_silent=false +			;; +      --tag) +			test $# = 0 && func_missing_arg $opt && break +			optarg="$1" +			opt_tag="$optarg" +func_append preserve_args " $opt $optarg" +func_enable_tag "$optarg" +			shift +			;; + +      -\?|-h)		func_usage				;; +      --help)		func_help				;; +      --version)	func_version				;; + +      # Separate optargs to long options: +      --*=*) +			func_split_long_opt "$opt" +			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} +			shift +			;; + +      # Separate non-argument short options: +      -\?*|-h*|-n*|-v*) +			func_split_short_opt "$opt" +			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} +			shift +			;; + +      --)		break					;; +      -*)		func_fatal_help "unrecognized option \`$opt'" ;; +      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;; +    esac +  done + +  # Validate options: + +  # save first non-option argument +  if test "$#" -gt 0; then +    nonopt="$opt" +    shift +  fi + +  # preserve --debug +  test "$opt_debug" = : || func_append preserve_args " --debug" + +  case $host in +    *cygwin* | *mingw* | *pw32* | *cegcc*) +      # don't eliminate duplications in $postdeps and $predeps +      opt_duplicate_compiler_generated_deps=:        ;; +    *) +      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps +      ;; +  esac + +  $opt_help || { +    # Sanity checks first: +    func_check_version_match + +    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then +      func_fatal_configuration "not configured to build any kind of library" +    fi + +    # Darwin sucks +    eval std_shrext=\"$shrext_cmds\" + +    # Only execute mode is allowed to have -dlopen flags. +    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then +      func_error "unrecognized option \`-dlopen'" +      $ECHO "$help" 1>&2 +      exit $EXIT_FAILURE +    fi + +    # Change the help message to a mode-specific one. +    generic_help="$help" +    help="Try \`$progname --help --mode=$opt_mode' for more information." +  } + + +  # Bail if the options were screwed +  $exit_cmd $EXIT_FAILURE +} + + + + +## ----------- ## +##    Main.    ## +## ----------- ## + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ +    test -f "$1" && +      $SED -e 4q "$1" 2>/dev/null \ +        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs.  To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway.  Works if `file' does not exist. +func_lalib_unsafe_p () +{ +    lalib_p=no +    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then +	for lalib_p_l in 1 2 3 4 +	do +	    read lalib_p_line +	    case "$lalib_p_line" in +		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; +	    esac +	done +	exec 0<&5 5<&- +    fi +    test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ +    func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ +    func_ltwrapper_exec_suffix= +    case $1 in +    *.exe) ;; +    *) func_ltwrapper_exec_suffix=.exe ;; +    esac +    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ +    func_dirname_and_basename "$1" "" "." +    func_stripname '' '.exe' "$func_basename_result" +    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ +    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ +    $opt_debug +    save_ifs=$IFS; IFS='~' +    for cmd in $1; do +      IFS=$save_ifs +      eval cmd=\"$cmd\" +      func_show_eval "$cmd" "${2-:}" +    done +    IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)!  Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ +    $opt_debug +    case $1 in +    */* | *\\*)	. "$1" ;; +    *)		. "./$1" ;;      esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot.  Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ +  func_resolve_sysroot_result=$1 +  case $func_resolve_sysroot_result in +  =*) +    func_stripname '=' '' "$func_resolve_sysroot_result" +    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result      ;;    esac -  $echo $win32_libid_type  } +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ +  case "$lt_sysroot:$1" in +  ?*:"$lt_sysroot"*) +    func_stripname "$lt_sysroot" '' "$1" +    func_replace_sysroot_result="=$func_stripname_result" +    ;; +  *) +    # Including no sysroot. +    func_replace_sysroot_result=$1 +    ;; +  esac +}  # func_infer_tag arg  # Infer tagged configuration to use if any are available and @@ -250,39 +1373,36 @@ func_win32_libid ()  # arg is usually of the form 'gcc ...'  func_infer_tag ()  { +    $opt_debug      if test -n "$available_tags" && test -z "$tagname"; then        CC_quoted=        for arg in $CC; do -	case $arg in -	  *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"") -	  arg="\"$arg\"" -	  ;; -	esac -	CC_quoted="$CC_quoted $arg" +	func_append_quoted CC_quoted "$arg"        done +      CC_expanded=`func_echo_all $CC` +      CC_quoted_expanded=`func_echo_all $CC_quoted`        case $@ in        # Blanks in the command may have been stripped by the calling shell,        # but not from the CC environment variable when configure was run. -      " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; +      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ +      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;        # Blanks at the start of $base_compile will cause this to fail        # if we don't check for them as well.        *)  	for z in $available_tags; do -	  if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then +	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then  	    # Evaluate the configuration.  	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"  	    CC_quoted=  	    for arg in $CC; do -	    # Double-quote args containing other shell metacharacters. -	    case $arg in -	      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"") -	      arg="\"$arg\"" -	      ;; -	    esac -	    CC_quoted="$CC_quoted $arg" -	  done +	      # Double-quote args containing other shell metacharacters. +	      func_append_quoted CC_quoted "$arg" +	    done +	    CC_expanded=`func_echo_all $CC` +	    CC_quoted_expanded=`func_echo_all $CC_quoted`  	    case "$@ " in -	      " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) +	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ +	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)  	      # The compiler in the base compile command matches  	      # the one in the tagged configuration.  	      # Assume this is the tagged configuration we want. @@ -296,11 +1416,10 @@ func_infer_tag ()  	# was found and let the user know that the "--tag" command  	# line option must be used.  	if test -z "$tagname"; then -	  $echo "$modename: unable to infer tagged configuration" -	  $echo "$modename: specify a tag with \`--tag'" 1>&2 -	  exit $EXIT_FAILURE -#        else -#          $echo "$modename: using $tagname tagged configuration" +	  func_echo "unable to infer tagged configuration" +	  func_fatal_error "specify a tag with \`--tag'" +#	else +#	  func_verbose "using $tagname tagged configuration"  	fi  	;;        esac @@ -308,354 +1427,528 @@ func_infer_tag ()  } -# func_extract_an_archive dir oldlib -func_extract_an_archive () + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object ()  { -    f_ex_an_ar_dir="$1"; shift -    f_ex_an_ar_oldlib="$1" +    write_libobj=${1} +    if test "$build_libtool_libs" = yes; then +      write_lobj=\'${2}\' +    else +      write_lobj=none +    fi -    $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" -    $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? -    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then -     : +    if test "$build_old_libs" = yes; then +      write_oldobj=\'${3}\'      else -      $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 -      exit $EXIT_FAILURE +      write_oldobj=none      fi + +    $opt_dry_run || { +      cat >${write_libobj}T <<EOF +# $write_libobj - a libtool object file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object=$write_lobj + +# Name of the non-PIC object +non_pic_object=$write_oldobj + +EOF +      $MV "${write_libobj}T" "${write_libobj}" +    }  } -# func_extract_archives gentop oldlib ... -func_extract_archives () + +################################################## +# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # +################################################## + +# func_convert_core_file_wine_to_w32 ARG +# Helper function used by file name conversion functions when $build is *nix, +# and $host is mingw, cygwin, or some other w32 environment. Relies on a +# correctly configured wine environment available, with the winepath program +# in $build's $PATH. +# +# ARG is the $build file name to be converted to w32 format. +# Result is available in $func_convert_core_file_wine_to_w32_result, and will +# be empty on error (or when ARG is empty) +func_convert_core_file_wine_to_w32 ()  { -    my_gentop="$1"; shift -    my_oldlibs=${1+"$@"} -    my_oldobjs="" -    my_xlib="" -    my_xabs="" -    my_xdir="" -    my_status="" - -    $show "${rm}r $my_gentop" -    $run ${rm}r "$my_gentop" -    $show "$mkdir $my_gentop" -    $run $mkdir "$my_gentop" -    my_status=$? -    if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then -      exit $my_status +  $opt_debug +  func_convert_core_file_wine_to_w32_result="$1" +  if test -n "$1"; then +    # Unfortunately, winepath does not exit with a non-zero error code, so we +    # are forced to check the contents of stdout. On the other hand, if the +    # command is not found, the shell will set an exit code of 127 and print +    # *an error message* to stdout. So we must check for both error code of +    # zero AND non-empty stdout, which explains the odd construction: +    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` +    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then +      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | +        $SED -e "$lt_sed_naive_backslashify"` +    else +      func_convert_core_file_wine_to_w32_result=      fi +  fi +} +# end: func_convert_core_file_wine_to_w32 -    for my_xlib in $my_oldlibs; do -      # Extract the objects. -      case $my_xlib in -	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; -	*) my_xabs=`pwd`"/$my_xlib" ;; -      esac -      my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` -      my_xlib_u=$my_xlib -      while :; do -        case " $extracted_archives " in -	*" $my_xlib_u "*) -	  extracted_serial=`expr $extracted_serial + 1` -	  my_xlib_u=lt$extracted_serial-$my_xlib ;; -	*) break ;; -	esac -      done -      extracted_archives="$extracted_archives $my_xlib_u" -      my_xdir="$my_gentop/$my_xlib_u" -      $show "${rm}r $my_xdir" -      $run ${rm}r "$my_xdir" -      $show "$mkdir $my_xdir" -      $run $mkdir "$my_xdir" -      exit_status=$? -      if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then -	exit $exit_status +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ +  $opt_debug +  # unfortunately, winepath doesn't convert paths, only file names +  func_convert_core_path_wine_to_w32_result="" +  if test -n "$1"; then +    oldIFS=$IFS +    IFS=: +    for func_convert_core_path_wine_to_w32_f in $1; do +      IFS=$oldIFS +      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" +      if test -n "$func_convert_core_file_wine_to_w32_result" ; then +        if test -z "$func_convert_core_path_wine_to_w32_result"; then +          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" +        else +          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" +        fi        fi -      case $host in -      *-darwin*) -	$show "Extracting $my_xabs" -	# Do not bother doing anything if just a dry run -	if test -z "$run"; then -	  darwin_orig_dir=`pwd` -	  cd $my_xdir || exit $? -	  darwin_archive=$my_xabs -	  darwin_curdir=`pwd` -	  darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` -	  darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` -	  if test -n "$darwin_arches"; then  -	    darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` -	    darwin_arch= -	    $show "$darwin_base_archive has multiple architectures $darwin_arches" -	    for darwin_arch in  $darwin_arches ; do -	      mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}" -	      lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" -	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" -	      func_extract_an_archive "`pwd`" "${darwin_base_archive}" -	      cd "$darwin_curdir" -	      $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" -	    done # $darwin_arches -      ## Okay now we have a bunch of thin objects, gotta fatten them up :) -	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` -	    darwin_file= -	    darwin_files= -	    for darwin_file in $darwin_filelist; do -	      darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` -	      lipo -create -output "$darwin_file" $darwin_files -	    done # $darwin_filelist -	    ${rm}r unfat-$$ -	    cd "$darwin_orig_dir" -	  else -	    cd "$darwin_orig_dir" - 	    func_extract_an_archive "$my_xdir" "$my_xabs" -	  fi # $darwin_arches -	fi # $run -	;; -      *) -        func_extract_an_archive "$my_xdir" "$my_xabs" -        ;; -      esac -      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`      done -    func_extract_archives_result="$my_oldobjs" +    IFS=$oldIFS +  fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ +  $opt_debug +  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then +    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` +    if test "$?" -ne 0; then +      # on failure, ensure result is empty +      func_cygpath_result= +    fi +  else +    func_cygpath_result= +    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" +  fi  } -# End of Shell function definitions -##################################### +#end: func_cygpath -# Darwin sucks -eval std_shrext=\"$shrext_cmds\" -disable_libs=no +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format.  Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ +  $opt_debug +  # awkward: cmd appends spaces to result +  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | +    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 -# Parse our command line options once, thoroughly. -while test "$#" -gt 0 -do -  arg="$1" -  shift -  case $arg in -  -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; -  *) optarg= ;; +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ +  $opt_debug +  if test -z "$2" && test -n "$1" ; then +    func_error "Could not determine host file name corresponding to" +    func_error "  \`$1'" +    func_error "Continuing, but uninstalled executables may not work." +    # Fallback: +    func_to_host_file_result="$1" +  fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ +  $opt_debug +  if test -z "$4" && test -n "$3"; then +    func_error "Could not determine the host path corresponding to" +    func_error "  \`$3'" +    func_error "Continuing, but uninstalled executables may not work." +    # Fallback.  This is a deliberately simplistic "conversion" and +    # should not be "improved".  See libtool.info. +    if test "x$1" != "x$2"; then +      lt_replace_pathsep_chars="s|$1|$2|g" +      func_to_host_path_result=`echo "$3" | +        $SED -e "$lt_replace_pathsep_chars"` +    else +      func_to_host_path_result="$3" +    fi +  fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ +  $opt_debug +  case $4 in +  $1 ) func_to_host_path_result="$3$func_to_host_path_result" +    ;;    esac +  case $4 in +  $2 ) func_append func_to_host_path_result "$3" +    ;; +  esac +} +# end func_convert_path_front_back_pathsep -  # If the previous option needs an argument, assign it. -  if test -n "$prev"; then -    case $prev in -    execute_dlfiles) -      execute_dlfiles="$execute_dlfiles $arg" -      ;; -    tag) -      tagname="$arg" -      preserve_args="${preserve_args}=$arg" - -      # Check whether tagname contains only valid characters -      case $tagname in -      *[!-_A-Za-z0-9,/]*) -	$echo "$progname: invalid tag name: $tagname" 1>&2 -	exit $EXIT_FAILURE -	;; -      esac -      case $tagname in -      CC) -	# Don't test for the "default" C tag, as we know, it's there, but -	# not specially marked. -	;; -      *) -	if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then -	  taglist="$taglist $tagname" -	  # Evaluate the configuration. -	  eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" -	else -	  $echo "$progname: ignoring unknown tag $tagname" 1>&2 -	fi -	;; -      esac +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via `$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ +  $opt_debug +  $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result.  If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ +  $opt_debug +  case ,$2, in +    *,"$to_tool_file_cmd",*) +      func_to_tool_file_result=$1        ;;      *) -      eval "$prev=\$arg" +      $to_tool_file_cmd "$1" +      func_to_tool_file_result=$func_to_host_file_result        ;; -    esac +  esac +} +# end func_to_tool_file -    prev= -    prevopt= -    continue + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ +  func_to_host_file_result="$1" +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper.  Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ +  $opt_debug +  func_to_host_file_result="$1" +  if test -n "$1"; then +    func_convert_core_msys_to_w32 "$1" +    func_to_host_file_result="$func_convert_core_msys_to_w32_result"    fi +  func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 -  # Have we seen a non-optional argument yet? -  case $arg in -  --help) -    show_help=yes -    ;; -  --version) -    echo "\ -$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format.  Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ +  $opt_debug +  func_to_host_file_result="$1" +  if test -n "$1"; then +    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use +    # LT_CYGPATH in this case. +    func_to_host_file_result=`cygpath -m "$1"` +  fi +  func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 -Copyright (C) 2008  Free Software Foundation, Inc. -This is free software; see the source for copying conditions.  There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." -    exit $? -    ;; -  --config) -    ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath -    # Now print the configurations for the tags. -    for tagname in $taglist; do -      ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" -    done -    exit $? -    ;; +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format.  Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ +  $opt_debug +  func_to_host_file_result="$1" +  if test -n "$1"; then +    func_convert_core_file_wine_to_w32 "$1" +    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" +  fi +  func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 -  --debug) -    $echo "$progname: enabling shell trace mode" -    set -x -    preserve_args="$preserve_args $arg" -    ;; -  --dry-run | -n) -    run=: -    ;; +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ +  $opt_debug +  func_to_host_file_result="$1" +  if test -n "$1"; then +    func_convert_core_msys_to_w32 "$1" +    func_cygpath -u "$func_convert_core_msys_to_w32_result" +    func_to_host_file_result="$func_cygpath_result" +  fi +  func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin -  --features) -    $echo "host: $host" -    if test "$build_libtool_libs" = yes; then -      $echo "enable shared libraries" -    else -      $echo "disable shared libraries" -    fi -    if test "$build_old_libs" = yes; then -      $echo "enable static libraries" -    else -      $echo "disable static libraries" -    fi -    exit $? -    ;; -  --finish) mode="finish" ;; +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ +  $opt_debug +  func_to_host_file_result="$1" +  if test -n "$1"; then +    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. +    func_convert_core_file_wine_to_w32 "$1" +    func_cygpath -u "$func_convert_core_file_wine_to_w32_result" +    func_to_host_file_result="$func_cygpath_result" +  fi +  func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin -  --mode) prevopt="--mode" prev=mode ;; -  --mode=*) mode="$optarg" ;; -  --preserve-dup-deps) duplicate_deps="yes" ;; +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via `$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format.  If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +#   file name conversion function    : func_convert_file_X_to_Y () +#   path conversion function         : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same.  If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ +  $opt_debug +  if test -z "$to_host_path_cmd"; then +    func_stripname 'func_convert_file_' '' "$to_host_file_cmd" +    to_host_path_cmd="func_convert_path_${func_stripname_result}" +  fi +} -  --quiet | --silent) -    show=: -    preserve_args="$preserve_args $arg" -    ;; -  --tag) -    prevopt="--tag" -    prev=tag -    preserve_args="$preserve_args --tag" -    ;; -  --tag=*) -    set tag "$optarg" ${1+"$@"} -    shift -    prev=tag -    preserve_args="$preserve_args --tag" -    ;; +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ +  $opt_debug +  func_init_to_host_path_cmd +  $to_host_path_cmd "$1" +} +# end func_to_host_path -  -dlopen) -    prevopt="-dlopen" -    prev=execute_dlfiles -    ;; -  -*) -    $echo "$modename: unrecognized option \`$arg'" 1>&2 -    $echo "$help" 1>&2 -    exit $EXIT_FAILURE -    ;; +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ +  func_to_host_path_result="$1" +} +# end func_convert_path_noop -  *) -    nonopt="$arg" -    break -    ;; -  esac -done -if test -n "$prevopt"; then -  $echo "$modename: option \`$prevopt' requires an argument" 1>&2 -  $echo "$help" 1>&2 -  exit $EXIT_FAILURE -fi +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper.  Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ +  $opt_debug +  func_to_host_path_result="$1" +  if test -n "$1"; then +    # Remove leading and trailing path separator characters from ARG.  MSYS +    # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; +    # and winepath ignores them completely. +    func_stripname : : "$1" +    func_to_host_path_tmp1=$func_stripname_result +    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" +    func_to_host_path_result="$func_convert_core_msys_to_w32_result" +    func_convert_path_check : ";" \ +      "$func_to_host_path_tmp1" "$func_to_host_path_result" +    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" +  fi +} +# end func_convert_path_msys_to_w32 -case $disable_libs in -no)  -  ;; -shared) -  build_libtool_libs=no -  build_old_libs=yes -  ;; -static) -  build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -  ;; -esac -# If this variable is set in any of the actions, the command in it -# will be execed at the end.  This prevents here-documents from being -# left over by shells. -exec_cmd= +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format.  Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ +  $opt_debug +  func_to_host_path_result="$1" +  if test -n "$1"; then +    # See func_convert_path_msys_to_w32: +    func_stripname : : "$1" +    func_to_host_path_tmp1=$func_stripname_result +    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` +    func_convert_path_check : ";" \ +      "$func_to_host_path_tmp1" "$func_to_host_path_result" +    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" +  fi +} +# end func_convert_path_cygwin_to_w32 -if test -z "$show_help"; then -  # Infer the operation mode. -  if test -z "$mode"; then -    $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 -    $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 -    case $nonopt in -    *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) -      mode=link -      for arg -      do -	case $arg in -	-c) -	   mode=compile -	   break -	   ;; -	esac -      done -      ;; -    *db | *dbx | *strace | *truss) -      mode=execute -      ;; -    *install*|cp|mv) -      mode=install -      ;; -    *rm) -      mode=uninstall -      ;; -    *) -      # If we have no mode, but dlfiles were specified, then do execute mode. -      test -n "$execute_dlfiles" && mode=execute +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format.  Requires a wine environment and +# a working winepath.  Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ +  $opt_debug +  func_to_host_path_result="$1" +  if test -n "$1"; then +    # See func_convert_path_msys_to_w32: +    func_stripname : : "$1" +    func_to_host_path_tmp1=$func_stripname_result +    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" +    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" +    func_convert_path_check : ";" \ +      "$func_to_host_path_tmp1" "$func_to_host_path_result" +    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" +  fi +} +# end func_convert_path_nix_to_w32 -      # Just use the default operation mode. -      if test -z "$mode"; then -	if test -n "$nonopt"; then -	  $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 -	else -	  $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 -	fi -      fi -      ;; -    esac + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ +  $opt_debug +  func_to_host_path_result="$1" +  if test -n "$1"; then +    # See func_convert_path_msys_to_w32: +    func_stripname : : "$1" +    func_to_host_path_tmp1=$func_stripname_result +    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" +    func_cygpath -u -p "$func_convert_core_msys_to_w32_result" +    func_to_host_path_result="$func_cygpath_result" +    func_convert_path_check : : \ +      "$func_to_host_path_tmp1" "$func_to_host_path_result" +    func_convert_path_front_back_pathsep ":*" "*:" : "$1"    fi +} +# end func_convert_path_msys_to_cygwin -  # Only execute mode is allowed to have -dlopen flags. -  if test -n "$execute_dlfiles" && test "$mode" != execute; then -    $echo "$modename: unrecognized option \`-dlopen'" 1>&2 -    $echo "$help" 1>&2 -    exit $EXIT_FAILURE + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ +  $opt_debug +  func_to_host_path_result="$1" +  if test -n "$1"; then +    # Remove leading and trailing path separator characters from +    # ARG. msys behavior is inconsistent here, cygpath turns them +    # into '.;' and ';.', and winepath ignores them completely. +    func_stripname : : "$1" +    func_to_host_path_tmp1=$func_stripname_result +    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" +    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" +    func_to_host_path_result="$func_cygpath_result" +    func_convert_path_check : : \ +      "$func_to_host_path_tmp1" "$func_to_host_path_result" +    func_convert_path_front_back_pathsep ":*" "*:" : "$1"    fi +} +# end func_convert_path_nix_to_cygwin -  # Change the help message to a mode-specific one. -  generic_help="$help" -  help="Try \`$modename --help --mode=$mode' for more information." -  # These modes are in order of execution frequency so that they run quickly. -  case $mode in -  # libtool compile mode -  compile) -    modename="$modename: compile" +# func_mode_compile arg... +func_mode_compile () +{ +    $opt_debug      # Get the compilation command and the source file.      base_compile=      srcfile="$nonopt"  #  always keep a non-empty value in "srcfile" @@ -664,6 +1957,7 @@ if test -z "$show_help"; then      arg_mode=normal      libobj=      later= +    pie_flag=      for arg      do @@ -684,16 +1978,19 @@ if test -z "$show_help"; then  	# Accept any command-line options.  	case $arg in  	-o) -	  if test -n "$libobj" ; then -	    $echo "$modename: you cannot specify \`-o' more than once" 1>&2 -	    exit $EXIT_FAILURE -	  fi +	  test -n "$libobj" && \ +	    func_fatal_error "you cannot specify \`-o' more than once"  	  arg_mode=target  	  continue  	  ;; -	-static | -prefer-pic | -prefer-non-pic) -	  later="$later $arg" +	-pie | -fpie | -fPIE) +          func_append pie_flag " $arg" +	  continue +	  ;; + +	-shared | -static | -prefer-pic | -prefer-non-pic) +	  func_append later " $arg"  	  continue  	  ;; @@ -708,31 +2005,24 @@ if test -z "$show_help"; then  	  ;;            #  replaced later.  I would guess that would be a bug.  	-Wc,*) -	  args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` +	  func_stripname '-Wc,' '' "$arg" +	  args=$func_stripname_result  	  lastarg=  	  save_ifs="$IFS"; IFS=',' - 	  for arg in $args; do +	  for arg in $args; do  	    IFS="$save_ifs" - -	    # Double-quote args containing other shell metacharacters. -	    # Many Bourne shells cannot handle close brackets correctly -	    # in scan sets, so we specify it separately. -	    case $arg in -	      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"") -	      arg="\"$arg\"" -	      ;; -	    esac -	    lastarg="$lastarg $arg" +	    func_append_quoted lastarg "$arg"  	  done  	  IFS="$save_ifs" -	  lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` +	  func_stripname ' ' '' "$lastarg" +	  lastarg=$func_stripname_result  	  # Add the arguments to base_compile. -	  base_compile="$base_compile $lastarg" +	  func_append base_compile " $lastarg"  	  continue  	  ;; -	* ) +	*)  	  # Accept the current argument as the source file.  	  # The previous "srcfile" becomes the current argument.  	  # @@ -744,66 +2034,41 @@ if test -z "$show_help"; then        esac    #  case $arg_mode        # Aesthetically quote the previous argument. -      lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` - -      case $lastarg in -      # Double-quote args containing other shell metacharacters. -      # Many Bourne shells cannot handle close brackets correctly -      # in scan sets, and some SunOS ksh mistreat backslash-escaping -      # in scan sets (worked around with variable expansion), -      # and furthermore cannot handle '|' '&' '(' ')' in scan sets  -      # at all, so we specify them separately. -      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"") -	lastarg="\"$lastarg\"" -	;; -      esac - -      base_compile="$base_compile $lastarg" +      func_append_quoted base_compile "$lastarg"      done # for arg      case $arg_mode in      arg) -      $echo "$modename: you must specify an argument for -Xcompile" -      exit $EXIT_FAILURE +      func_fatal_error "you must specify an argument for -Xcompile"        ;;      target) -      $echo "$modename: you must specify a target with \`-o'" 1>&2 -      exit $EXIT_FAILURE +      func_fatal_error "you must specify a target with \`-o'"        ;;      *)        # Get the name of the library object. -      [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` +      test -z "$libobj" && { +	func_basename "$srcfile" +	libobj="$func_basename_result" +      }        ;;      esac      # Recognize several different file suffixes.      # If the user specifies -o file.o, it is replaced with file.lo -    xform='[cCFSifmso]'      case $libobj in -    *.ada) xform=ada ;; -    *.adb) xform=adb ;; -    *.ads) xform=ads ;; -    *.asm) xform=asm ;; -    *.c++) xform=c++ ;; -    *.cc) xform=cc ;; -    *.ii) xform=ii ;; -    *.class) xform=class ;; -    *.cpp) xform=cpp ;; -    *.cxx) xform=cxx ;; -    *.[fF][09]?) xform=[fF][09]. ;; -    *.for) xform=for ;; -    *.java) xform=java ;; -    *.obj) xform=obj ;; -    *.sx) xform=sx ;; +    *.[cCFSifmso] | \ +    *.ada | *.adb | *.ads | *.asm | \ +    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ +    *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup) +      func_xform "$libobj" +      libobj=$func_xform_result +      ;;      esac -    libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` -      case $libobj in -    *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; +    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;      *) -      $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 -      exit $EXIT_FAILURE +      func_fatal_error "cannot determine name of library object from \`$libobj'"        ;;      esac @@ -811,7 +2076,15 @@ if test -z "$show_help"; then      for arg in $later; do        case $arg in +      -shared) +	test "$build_libtool_libs" != yes && \ +	  func_fatal_configuration "can not build a shared library" +	build_old_libs=no +	continue +	;; +        -static) +	build_libtool_libs=no  	build_old_libs=yes  	continue  	;; @@ -828,28 +2101,17 @@ if test -z "$show_help"; then        esac      done -    qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` -    case $qlibobj in -      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"") -	qlibobj="\"$qlibobj\"" ;; -    esac -    test "X$libobj" != "X$qlibobj" \ -	&& $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' 	&()|`$[]' \ -	&& $echo "$modename: libobj name \`$libobj' may not contain shell special characters." -    objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` -    xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` -    if test "X$xdir" = "X$obj"; then -      xdir= -    else -      xdir=$xdir/ -    fi +    func_quote_for_eval "$libobj" +    test "X$libobj" != "X$func_quote_for_eval_result" \ +      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \ +      && func_warning "libobj name \`$libobj' may not contain shell special characters." +    func_dirname_and_basename "$obj" "/" "" +    objname="$func_basename_result" +    xdir="$func_dirname_result"      lobj=${xdir}$objdir/$objname -    if test -z "$base_compile"; then -      $echo "$modename: you must specify a compilation command" 1>&2 -      $echo "$help" 1>&2 -      exit $EXIT_FAILURE -    fi +    test -z "$base_compile" && \ +      func_fatal_help "you must specify a compilation command"      # Delete any leftover library objects.      if test "$build_old_libs" = yes; then @@ -858,12 +2120,9 @@ if test -z "$show_help"; then        removelist="$lobj $libobj ${libobj}T"      fi -    $run $rm $removelist -    trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 -      # On Cygwin there's no "real" PIC flag so we must build both object types      case $host_os in -    cygwin* | mingw* | pw32* | os2*) +    cygwin* | mingw* | pw32* | os2* | cegcc*)        pic_mode=default        ;;      esac @@ -875,10 +2134,8 @@ if test -z "$show_help"; then      # Calculate the filename of the output object if compiler does      # not support -o with -c      if test "$compiler_c_o" = no; then -      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} +      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}        lockfile="$output_obj.lock" -      removelist="$removelist $output_obj $lockfile" -      trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15      else        output_obj=        need_locks=no @@ -888,13 +2145,13 @@ if test -z "$show_help"; then      # Lock this critical section if it is needed      # We use this script file to make the link, it avoids creating a new file      if test "$need_locks" = yes; then -      until $run ln "$progpath" "$lockfile" 2>/dev/null; do -	$show "Waiting for $lockfile to be removed" +      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do +	func_echo "Waiting for $lockfile to be removed"  	sleep 2        done      elif test "$need_locks" = warn; then        if test -f "$lockfile"; then -	$echo "\ +	$ECHO "\  *** ERROR, $lockfile exists and contains:  `cat $lockfile 2>/dev/null` @@ -905,34 +2162,21 @@ repeat this compilation, it may succeed, by chance, but you had better  avoid parallel builds (make -j) in this platform, or get a better  compiler." -	$run $rm $removelist +	$opt_dry_run || $RM $removelist  	exit $EXIT_FAILURE        fi -      $echo "$srcfile" > "$lockfile" -    fi - -    if test -n "$fix_srcfile_path"; then -      eval srcfile=\"$fix_srcfile_path\" +      func_append removelist " $output_obj" +      $ECHO "$srcfile" > "$lockfile"      fi -    qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` -    case $qsrcfile in -      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"") -      qsrcfile="\"$qsrcfile\"" ;; -    esac -    $run $rm "$libobj" "${libobj}T" +    $opt_dry_run || $RM $removelist +    func_append removelist " $lockfile" +    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 -    # Create a libtool object file (analogous to a ".la" file), -    # but don't create it if we're doing a dry run. -    test -z "$run" && cat > ${libobj}T <<EOF -# $libobj - a libtool object file -# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# Name of the PIC object. -EOF +    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 +    srcfile=$func_to_tool_file_result +    func_quote_for_eval "$srcfile" +    qsrcfile=$func_quote_for_eval_result      # Only build a PIC object if we are building libtool libraries.      if test "$build_libtool_libs" = yes; then @@ -946,32 +2190,19 @@ EOF  	command="$base_compile $qsrcfile"        fi -      if test ! -d "${xdir}$objdir"; then -	$show "$mkdir ${xdir}$objdir" -	$run $mkdir ${xdir}$objdir -	exit_status=$? -	if test "$exit_status" -ne 0 && test ! -d "${xdir}$objdir"; then -	  exit $exit_status -	fi -      fi +      func_mkdir_p "$xdir$objdir"        if test -z "$output_obj"; then  	# Place PIC objects in $objdir -	command="$command -o $lobj" +	func_append command " -o $lobj"        fi -      $run $rm "$lobj" "$output_obj" - -      $show "$command" -      if $run eval $lt_env "$command"; then : -      else -	test -n "$output_obj" && $run $rm $removelist -	exit $EXIT_FAILURE -      fi +      func_show_eval_locale "$command"	\ +          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'        if test "$need_locks" = warn &&  	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then -	$echo "\ +	$ECHO "\  *** ERROR, $lockfile contains:  `cat $lockfile 2>/dev/null` @@ -985,65 +2216,42 @@ repeat this compilation, it may succeed, by chance, but you had better  avoid parallel builds (make -j) in this platform, or get a better  compiler." -	$run $rm $removelist +	$opt_dry_run || $RM $removelist  	exit $EXIT_FAILURE        fi        # Just move the object if needed, then go on to compile the next one        if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then -	$show "$mv $output_obj $lobj" -	if $run $mv $output_obj $lobj; then : -	else -	  error=$? -	  $run $rm $removelist -	  exit $error -	fi +	func_show_eval '$MV "$output_obj" "$lobj"' \ +	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'        fi -      # Append the name of the PIC object to the libtool object file. -      test -z "$run" && cat >> ${libobj}T <<EOF -pic_object='$objdir/$objname' - -EOF -        # Allow error messages only from the first compilation.        if test "$suppress_opt" = yes; then -        suppress_output=' >/dev/null 2>&1' +	suppress_output=' >/dev/null 2>&1'        fi -    else -      # No PIC object so indicate it doesn't exist in the libtool -      # object file. -      test -z "$run" && cat >> ${libobj}T <<EOF -pic_object=none - -EOF      fi      # Only build a position-dependent object if we build old libraries.      if test "$build_old_libs" = yes; then        if test "$pic_mode" != yes; then  	# Don't build PIC code -	command="$base_compile $qsrcfile" +	command="$base_compile $qsrcfile$pie_flag"        else  	command="$base_compile $qsrcfile $pic_flag"        fi        if test "$compiler_c_o" = yes; then -	command="$command -o $obj" +	func_append command " -o $obj"        fi        # Suppress compiler output if we already did a PIC compilation. -      command="$command$suppress_output" -      $run $rm "$obj" "$output_obj" -      $show "$command" -      if $run eval $lt_env "$command"; then : -      else -	$run $rm $removelist -	exit $EXIT_FAILURE -      fi +      func_append command "$suppress_output" +      func_show_eval_locale "$command" \ +        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'        if test "$need_locks" = warn &&  	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then -	$echo "\ +	$ECHO "\  *** ERROR, $lockfile contains:  `cat $lockfile 2>/dev/null` @@ -1057,53 +2265,2824 @@ repeat this compilation, it may succeed, by chance, but you had better  avoid parallel builds (make -j) in this platform, or get a better  compiler." -	$run $rm $removelist +	$opt_dry_run || $RM $removelist  	exit $EXIT_FAILURE        fi        # Just move the object if needed        if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then -	$show "$mv $output_obj $obj" -	if $run $mv $output_obj $obj; then : +	func_show_eval '$MV "$output_obj" "$obj"' \ +	  'error=$?; $opt_dry_run || $RM $removelist; exit $error' +      fi +    fi + +    $opt_dry_run || { +      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + +      # Unlock the critical section if it was locked +      if test "$need_locks" != no; then +	removelist=$lockfile +        $RM "$lockfile" +      fi +    } + +    exit $EXIT_SUCCESS +} + +$opt_help || { +  test "$opt_mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ +    # We need to display help for each of the modes. +    case $opt_mode in +      "") +        # Generic help is extracted from the usage comments +        # at the start of this file. +        func_help +        ;; + +      clean) +        $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." +        ;; + +      compile) +      $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + +  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE +  -no-suppress      do not suppress compiler output for multiple passes +  -prefer-pic       try to build PIC objects only +  -prefer-non-pic   try to build non-PIC objects only +  -shared           do not build a \`.o' file suitable for static linking +  -static           only build a \`.o' file suitable for static linking +  -Wc,FLAG          pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." +        ;; + +      execute) +        $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + +  -dlopen FILE      add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." +        ;; + +      finish) +        $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges.  Use +the \`--dry-run' option if you just want to see what would be executed." +        ;; + +      install) +        $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command.  The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + +  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." +        ;; + +      link) +        $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + +  -all-static       do not do any dynamic linking at all +  -avoid-version    do not add a version suffix if possible +  -bindir BINDIR    specify path to binaries directory (for systems where +                    libraries must be found in the PATH setting at runtime) +  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime +  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols +  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3) +  -export-symbols SYMFILE +                    try to export only the symbols listed in SYMFILE +  -export-symbols-regex REGEX +                    try to export only the symbols matching REGEX +  -LLIBDIR          search LIBDIR for required installed libraries +  -lNAME            OUTPUT-FILE requires the installed library libNAME +  -module           build a library that can dlopened +  -no-fast-install  disable the fast-install mode +  -no-install       link a not-installable executable +  -no-undefined     declare that a library does not refer to external symbols +  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects +  -objectlist FILE  Use a list of object files found in FILE to specify objects +  -precious-files-regex REGEX +                    don't remove output files matching REGEX +  -release RELEASE  specify package release information +  -rpath LIBDIR     the created library will eventually be installed in LIBDIR +  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries +  -shared           only do dynamic linking of libtool libraries +  -shrext SUFFIX    override the standard shared library file extension +  -static           do not do any dynamic linking of uninstalled libtool libraries +  -static-libtool-libs +                    do not do any dynamic linking of libtool libraries +  -version-info CURRENT[:REVISION[:AGE]] +                    specify library version info [each variable defaults to 0] +  -weak LIBNAME     declare that the target provides the LIBNAME interface +  -Wc,FLAG +  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler +  -Wl,FLAG +  -Xlinker FLAG     pass linker-specific FLAG directly to the linker +  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename.  Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." +        ;; + +      uninstall) +        $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." +        ;; + +      *) +        func_fatal_help "invalid operation mode \`$opt_mode'" +        ;; +    esac + +    echo +    $ECHO "Try \`$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then +  if test "$opt_help" = :; then +    func_mode_help +  else +    { +      func_help noexit +      for opt_mode in compile link execute install finish uninstall clean; do +	func_mode_help +      done +    } | sed -n '1p; 2,$s/^Usage:/  or: /p' +    { +      func_help noexit +      for opt_mode in compile link execute install finish uninstall clean; do +	echo +	func_mode_help +      done +    } | +    sed '1d +      /^When reporting/,/^Report/{ +	H +	d +      } +      $x +      /information about other modes/d +      /more detailed .*MODE/d +      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' +  fi +  exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ +    $opt_debug +    # The first argument is the command name. +    cmd="$nonopt" +    test -z "$cmd" && \ +      func_fatal_help "you must specify a COMMAND" + +    # Handle -dlopen flags immediately. +    for file in $opt_dlopen; do +      test -f "$file" \ +	|| func_fatal_help "\`$file' is not a file" + +      dir= +      case $file in +      *.la) +	func_resolve_sysroot "$file" +	file=$func_resolve_sysroot_result + +	# Check to see that this really is a libtool archive. +	func_lalib_unsafe_p "$file" \ +	  || func_fatal_help "\`$lib' is not a valid libtool archive" + +	# Read the libtool library. +	dlname= +	library_names= +	func_source "$file" + +	# Skip this library if it cannot be dlopened. +	if test -z "$dlname"; then +	  # Warn if it was a shared library. +	  test -n "$library_names" && \ +	    func_warning "\`$file' was not linked with \`-export-dynamic'" +	  continue +	fi + +	func_dirname "$file" "" "." +	dir="$func_dirname_result" + +	if test -f "$dir/$objdir/$dlname"; then +	  func_append dir "/$objdir" +	else +	  if test ! -f "$dir/$dlname"; then +	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" +	  fi +	fi +	;; + +      *.lo) +	# Just add the directory containing the .lo file. +	func_dirname "$file" "" "." +	dir="$func_dirname_result" +	;; + +      *) +	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" +	continue +	;; +      esac + +      # Get the absolute pathname. +      absdir=`cd "$dir" && pwd` +      test -n "$absdir" && dir="$absdir" + +      # Now add the directory to shlibpath_var. +      if eval "test -z \"\$$shlibpath_var\""; then +	eval "$shlibpath_var=\"\$dir\"" +      else +	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" +      fi +    done + +    # This variable tells wrapper scripts just to set shlibpath_var +    # rather than running their programs. +    libtool_execute_magic="$magic" + +    # Check if any of the arguments is a wrapper script. +    args= +    for file +    do +      case $file in +      -* | *.la | *.lo ) ;; +      *) +	# Do a test to see if this is really a libtool program. +	if func_ltwrapper_script_p "$file"; then +	  func_source "$file" +	  # Transform arg to wrapped name. +	  file="$progdir/$program" +	elif func_ltwrapper_executable_p "$file"; then +	  func_ltwrapper_scriptname "$file" +	  func_source "$func_ltwrapper_scriptname_result" +	  # Transform arg to wrapped name. +	  file="$progdir/$program" +	fi +	;; +      esac +      # Quote arguments (to preserve shell metacharacters). +      func_append_quoted args "$file" +    done + +    if test "X$opt_dry_run" = Xfalse; then +      if test -n "$shlibpath_var"; then +	# Export the shlibpath_var. +	eval "export $shlibpath_var" +      fi + +      # Restore saved environment variables +      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +      do +	eval "if test \"\${save_$lt_var+set}\" = set; then +                $lt_var=\$save_$lt_var; export $lt_var +	      else +		$lt_unset $lt_var +	      fi" +      done + +      # Now prepare to actually exec the command. +      exec_cmd="\$cmd$args" +    else +      # Display what would be done. +      if test -n "$shlibpath_var"; then +	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" +	echo "export $shlibpath_var" +      fi +      $ECHO "$cmd$args" +      exit $EXIT_SUCCESS +    fi +} + +test "$opt_mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ +    $opt_debug +    libs= +    libdirs= +    admincmds= + +    for opt in "$nonopt" ${1+"$@"} +    do +      if test -d "$opt"; then +	func_append libdirs " $opt" + +      elif test -f "$opt"; then +	if func_lalib_unsafe_p "$opt"; then +	  func_append libs " $opt"  	else -	  error=$? -	  $run $rm $removelist -	  exit $error +	  func_warning "\`$opt' is not a valid libtool archive"  	fi + +      else +	func_fatal_error "invalid argument \`$opt'" +      fi +    done + +    if test -n "$libs"; then +      if test -n "$lt_sysroot"; then +        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` +        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" +      else +        sysroot_cmd=        fi -      # Append the name of the non-PIC object the libtool object file. -      # Only append if the libtool object file exists. -      test -z "$run" && cat >> ${libobj}T <<EOF -# Name of the non-PIC object. -non_pic_object='$objname' +      # Remove sysroot references +      if $opt_dry_run; then +        for lib in $libs; do +          echo "removing references to $lt_sysroot and \`=' prefixes from $lib" +        done +      else +        tmpdir=`func_mktempdir` +        for lib in $libs; do +	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ +	    > $tmpdir/tmp-la +	  mv -f $tmpdir/tmp-la $lib +	done +        ${RM}r "$tmpdir" +      fi +    fi -EOF +    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then +      for libdir in $libdirs; do +	if test -n "$finish_cmds"; then +	  # Do each command in the finish commands. +	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' +	fi +	if test -n "$finish_eval"; then +	  # Do the single finish_eval. +	  eval cmds=\"$finish_eval\" +	  $opt_dry_run || eval "$cmds" || func_append admincmds " +       $cmds" +	fi +      done +    fi + +    # Exit here if they wanted silent mode. +    $opt_silent && exit $EXIT_SUCCESS + +    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then +      echo "----------------------------------------------------------------------" +      echo "Libraries have been installed in:" +      for libdir in $libdirs; do +	$ECHO "   $libdir" +      done +      echo +      echo "If you ever happen to want to link against installed libraries" +      echo "in a given directory, LIBDIR, you must either use libtool, and" +      echo "specify the full pathname of the library, or use the \`-LLIBDIR'" +      echo "flag during linking and do at least one of the following:" +      if test -n "$shlibpath_var"; then +	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable" +	echo "     during execution" +      fi +      if test -n "$runpath_var"; then +	echo "   - add LIBDIR to the \`$runpath_var' environment variable" +	echo "     during linking" +      fi +      if test -n "$hardcode_libdir_flag_spec"; then +	libdir=LIBDIR +	eval flag=\"$hardcode_libdir_flag_spec\" + +	$ECHO "   - use the \`$flag' linker flag" +      fi +      if test -n "$admincmds"; then +	$ECHO "   - have your system administrator run these commands:$admincmds" +      fi +      if test -f /etc/ld.so.conf; then +	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" +      fi +      echo + +      echo "See any operating system documentation about shared libraries for" +      case $host in +	solaris2.[6789]|solaris2.1[0-9]) +	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" +	  echo "pages." +	  ;; +	*) +	  echo "more information, such as the ld(1) and ld.so(8) manual pages." +	  ;; +      esac +      echo "----------------------------------------------------------------------" +    fi +    exit $EXIT_SUCCESS +} + +test "$opt_mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ +    $opt_debug +    # There may be an optional sh(1) argument at the beginning of +    # install_prog (especially on Windows NT). +    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || +       # Allow the use of GNU shtool's install command. +       case $nonopt in *shtool*) :;; *) false;; esac; then +      # Aesthetically quote it. +      func_quote_for_eval "$nonopt" +      install_prog="$func_quote_for_eval_result " +      arg=$1 +      shift      else -      # Append the name of the non-PIC object the libtool object file. -      # Only append if the libtool object file exists. -      test -z "$run" && cat >> ${libobj}T <<EOF -# Name of the non-PIC object. -non_pic_object=none +      install_prog= +      arg=$nonopt +    fi -EOF +    # The real first argument should be the name of the installation program. +    # Aesthetically quote it. +    func_quote_for_eval "$arg" +    func_append install_prog "$func_quote_for_eval_result" +    install_shared_prog=$install_prog +    case " $install_prog " in +      *[\\\ /]cp\ *) install_cp=: ;; +      *) install_cp=false ;; +    esac + +    # We need to accept at least all the BSD install flags. +    dest= +    files= +    opts= +    prev= +    install_type= +    isdir=no +    stripme= +    no_mode=: +    for arg +    do +      arg2= +      if test -n "$dest"; then +	func_append files " $dest" +	dest=$arg +	continue +      fi + +      case $arg in +      -d) isdir=yes ;; +      -f) +	if $install_cp; then :; else +	  prev=$arg +	fi +	;; +      -g | -m | -o) +	prev=$arg +	;; +      -s) +	stripme=" -s" +	continue +	;; +      -*) +	;; +      *) +	# If the previous option needed an argument, then skip it. +	if test -n "$prev"; then +	  if test "x$prev" = x-m && test -n "$install_override_mode"; then +	    arg2=$install_override_mode +	    no_mode=false +	  fi +	  prev= +	else +	  dest=$arg +	  continue +	fi +	;; +      esac + +      # Aesthetically quote the argument. +      func_quote_for_eval "$arg" +      func_append install_prog " $func_quote_for_eval_result" +      if test -n "$arg2"; then +	func_quote_for_eval "$arg2" +      fi +      func_append install_shared_prog " $func_quote_for_eval_result" +    done + +    test -z "$install_prog" && \ +      func_fatal_help "you must specify an install program" + +    test -n "$prev" && \ +      func_fatal_help "the \`$prev' option requires an argument" + +    if test -n "$install_override_mode" && $no_mode; then +      if $install_cp; then :; else +	func_quote_for_eval "$install_override_mode" +	func_append install_shared_prog " -m $func_quote_for_eval_result" +      fi +    fi + +    if test -z "$files"; then +      if test -z "$dest"; then +	func_fatal_help "no file or destination specified" +      else +	func_fatal_help "you must specify a destination" +      fi      fi -    $run $mv "${libobj}T" "${libobj}" +    # Strip any trailing slash from the destination. +    func_stripname '' '/' "$dest" +    dest=$func_stripname_result + +    # Check to see that the destination is a directory. +    test -d "$dest" && isdir=yes +    if test "$isdir" = yes; then +      destdir="$dest" +      destname= +    else +      func_dirname_and_basename "$dest" "" "." +      destdir="$func_dirname_result" +      destname="$func_basename_result" -    # Unlock the critical section if it was locked -    if test "$need_locks" != no; then -      $run $rm "$lockfile" +      # Not a directory, so check to see that there is only one file specified. +      set dummy $files; shift +      test "$#" -gt 1 && \ +	func_fatal_help "\`$dest' is not a directory"      fi +    case $destdir in +    [\\/]* | [A-Za-z]:[\\/]*) ;; +    *) +      for file in $files; do +	case $file in +	*.lo) ;; +	*) +	  func_fatal_help "\`$destdir' must be an absolute directory name" +	  ;; +	esac +      done +      ;; +    esac -    exit $EXIT_SUCCESS +    # This variable tells wrapper scripts just to set variables rather +    # than running their programs. +    libtool_install_magic="$magic" + +    staticlibs= +    future_libdirs= +    current_libdirs= +    for file in $files; do + +      # Do each installation. +      case $file in +      *.$libext) +	# Do the static libraries later. +	func_append staticlibs " $file" +	;; + +      *.la) +	func_resolve_sysroot "$file" +	file=$func_resolve_sysroot_result + +	# Check to see that this really is a libtool archive. +	func_lalib_unsafe_p "$file" \ +	  || func_fatal_help "\`$file' is not a valid libtool archive" + +	library_names= +	old_library= +	relink_command= +	func_source "$file" + +	# Add the libdir to current_libdirs if it is the destination. +	if test "X$destdir" = "X$libdir"; then +	  case "$current_libdirs " in +	  *" $libdir "*) ;; +	  *) func_append current_libdirs " $libdir" ;; +	  esac +	else +	  # Note the libdir as a future libdir. +	  case "$future_libdirs " in +	  *" $libdir "*) ;; +	  *) func_append future_libdirs " $libdir" ;; +	  esac +	fi + +	func_dirname "$file" "/" "" +	dir="$func_dirname_result" +	func_append dir "$objdir" + +	if test -n "$relink_command"; then +	  # Determine the prefix the user has applied to our future dir. +	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + +	  # Don't allow the user to place us outside of our expected +	  # location b/c this prevents finding dependent libraries that +	  # are installed to the same prefix. +	  # At present, this check doesn't affect windows .dll's that +	  # are installed into $libdir/../bin (currently, that works fine) +	  # but it's something to keep an eye on. +	  test "$inst_prefix_dir" = "$destdir" && \ +	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + +	  if test -n "$inst_prefix_dir"; then +	    # Stick the inst_prefix_dir data into the link command. +	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` +	  else +	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` +	  fi + +	  func_warning "relinking \`$file'" +	  func_show_eval "$relink_command" \ +	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' +	fi + +	# See the names of the shared library. +	set dummy $library_names; shift +	if test -n "$1"; then +	  realname="$1" +	  shift + +	  srcname="$realname" +	  test -n "$relink_command" && srcname="$realname"T + +	  # Install the shared library and build the symlinks. +	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ +	      'exit $?' +	  tstripme="$stripme" +	  case $host_os in +	  cygwin* | mingw* | pw32* | cegcc*) +	    case $realname in +	    *.dll.a) +	      tstripme="" +	      ;; +	    esac +	    ;; +	  esac +	  if test -n "$tstripme" && test -n "$striplib"; then +	    func_show_eval "$striplib $destdir/$realname" 'exit $?' +	  fi + +	  if test "$#" -gt 0; then +	    # Delete the old symlinks, and create new ones. +	    # Try `ln -sf' first, because the `ln' binary might depend on +	    # the symlink we replace!  Solaris /bin/ln does not understand -f, +	    # so we also need to try rm && ln -s. +	    for linkname +	    do +	      test "$linkname" != "$realname" \ +		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" +	    done +	  fi + +	  # Do each command in the postinstall commands. +	  lib="$destdir/$realname" +	  func_execute_cmds "$postinstall_cmds" 'exit $?' +	fi + +	# Install the pseudo-library for information purposes. +	func_basename "$file" +	name="$func_basename_result" +	instname="$dir/$name"i +	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + +	# Maybe install the static library, too. +	test -n "$old_library" && func_append staticlibs " $dir/$old_library" +	;; + +      *.lo) +	# Install (i.e. copy) a libtool object. + +	# Figure out destination file name, if it wasn't already specified. +	if test -n "$destname"; then +	  destfile="$destdir/$destname" +	else +	  func_basename "$file" +	  destfile="$func_basename_result" +	  destfile="$destdir/$destfile" +	fi + +	# Deduce the name of the destination old-style object file. +	case $destfile in +	*.lo) +	  func_lo2o "$destfile" +	  staticdest=$func_lo2o_result +	  ;; +	*.$objext) +	  staticdest="$destfile" +	  destfile= +	  ;; +	*) +	  func_fatal_help "cannot copy a libtool object to \`$destfile'" +	  ;; +	esac + +	# Install the libtool object if requested. +	test -n "$destfile" && \ +	  func_show_eval "$install_prog $file $destfile" 'exit $?' + +	# Install the old object if enabled. +	if test "$build_old_libs" = yes; then +	  # Deduce the name of the old-style object file. +	  func_lo2o "$file" +	  staticobj=$func_lo2o_result +	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' +	fi +	exit $EXIT_SUCCESS +	;; + +      *) +	# Figure out destination file name, if it wasn't already specified. +	if test -n "$destname"; then +	  destfile="$destdir/$destname" +	else +	  func_basename "$file" +	  destfile="$func_basename_result" +	  destfile="$destdir/$destfile" +	fi + +	# If the file is missing, and there is a .exe on the end, strip it +	# because it is most likely a libtool script we actually want to +	# install +	stripped_ext="" +	case $file in +	  *.exe) +	    if test ! -f "$file"; then +	      func_stripname '' '.exe' "$file" +	      file=$func_stripname_result +	      stripped_ext=".exe" +	    fi +	    ;; +	esac + +	# Do a test to see if this is really a libtool program. +	case $host in +	*cygwin* | *mingw*) +	    if func_ltwrapper_executable_p "$file"; then +	      func_ltwrapper_scriptname "$file" +	      wrapper=$func_ltwrapper_scriptname_result +	    else +	      func_stripname '' '.exe' "$file" +	      wrapper=$func_stripname_result +	    fi +	    ;; +	*) +	    wrapper=$file +	    ;; +	esac +	if func_ltwrapper_script_p "$wrapper"; then +	  notinst_deplibs= +	  relink_command= + +	  func_source "$wrapper" + +	  # Check the variables that should have been set. +	  test -z "$generated_by_libtool_version" && \ +	    func_fatal_error "invalid libtool wrapper script \`$wrapper'" + +	  finalize=yes +	  for lib in $notinst_deplibs; do +	    # Check to see that each library is installed. +	    libdir= +	    if test -f "$lib"; then +	      func_source "$lib" +	    fi +	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test +	    if test -n "$libdir" && test ! -f "$libfile"; then +	      func_warning "\`$lib' has not been installed in \`$libdir'" +	      finalize=no +	    fi +	  done + +	  relink_command= +	  func_source "$wrapper" + +	  outputname= +	  if test "$fast_install" = no && test -n "$relink_command"; then +	    $opt_dry_run || { +	      if test "$finalize" = yes; then +	        tmpdir=`func_mktempdir` +		func_basename "$file$stripped_ext" +		file="$func_basename_result" +	        outputname="$tmpdir/$file" +	        # Replace the output file specification. +	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + +	        $opt_silent || { +	          func_quote_for_expand "$relink_command" +		  eval "func_echo $func_quote_for_expand_result" +	        } +	        if eval "$relink_command"; then : +	          else +		  func_error "error: relink \`$file' with the above command before installing it" +		  $opt_dry_run || ${RM}r "$tmpdir" +		  continue +	        fi +	        file="$outputname" +	      else +	        func_warning "cannot relink \`$file'" +	      fi +	    } +	  else +	    # Install the binary that we compiled earlier. +	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` +	  fi +	fi + +	# remove .exe since cygwin /usr/bin/install will append another +	# one anyway +	case $install_prog,$host in +	*/usr/bin/install*,*cygwin*) +	  case $file:$destfile in +	  *.exe:*.exe) +	    # this is ok +	    ;; +	  *.exe:*) +	    destfile=$destfile.exe +	    ;; +	  *:*.exe) +	    func_stripname '' '.exe' "$destfile" +	    destfile=$func_stripname_result +	    ;; +	  esac +	  ;; +	esac +	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' +	$opt_dry_run || if test -n "$outputname"; then +	  ${RM}r "$tmpdir" +	fi +	;; +      esac +    done + +    for file in $staticlibs; do +      func_basename "$file" +      name="$func_basename_result" + +      # Set up the ranlib parameters. +      oldlib="$destdir/$name" + +      func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + +      if test -n "$stripme" && test -n "$old_striplib"; then +	func_show_eval "$old_striplib $oldlib" 'exit $?' +      fi + +      # Do each command in the postinstall commands. +      func_execute_cmds "$old_postinstall_cmds" 'exit $?' +    done + +    test -n "$future_libdirs" && \ +      func_warning "remember to run \`$progname --finish$future_libdirs'" + +    if test -n "$current_libdirs"; then +      # Maybe just do a dry run. +      $opt_dry_run && current_libdirs=" -n$current_libdirs" +      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' +    else +      exit $EXIT_SUCCESS +    fi +} + +test "$opt_mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ +    $opt_debug +    my_outputname="$1" +    my_originator="$2" +    my_pic_p="${3-no}" +    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` +    my_dlsyms= + +    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then +      if test -n "$NM" && test -n "$global_symbol_pipe"; then +	my_dlsyms="${my_outputname}S.c" +      else +	func_error "not configured to extract global symbols from dlpreopened files" +      fi +    fi + +    if test -n "$my_dlsyms"; then +      case $my_dlsyms in +      "") ;; +      *.c) +	# Discover the nlist of each of the dlfiles. +	nlist="$output_objdir/${my_outputname}.nm" + +	func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + +	# Parse the name list into a source file. +	func_verbose "creating $output_objdir/$my_dlsyms" + +	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime +   relocations are performed -- see ld's documentation on pseudo-relocs.  */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data.  */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +/* External symbol declarations for the compiler. */\ +" + +	if test "$dlself" = yes; then +	  func_verbose "generating symbol list for \`$output'" + +	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + +	  # Add our own program objects to the symbol list. +	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` +	  for progfile in $progfiles; do +	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32 +	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" +	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" +	  done + +	  if test -n "$exclude_expsyms"; then +	    $opt_dry_run || { +	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' +	      eval '$MV "$nlist"T "$nlist"' +	    } +	  fi + +	  if test -n "$export_symbols_regex"; then +	    $opt_dry_run || { +	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' +	      eval '$MV "$nlist"T "$nlist"' +	    } +	  fi + +	  # Prepare the list of exported symbols +	  if test -z "$export_symbols"; then +	    export_symbols="$output_objdir/$outputname.exp" +	    $opt_dry_run || { +	      $RM $export_symbols +	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' +	      case $host in +	      *cygwin* | *mingw* | *cegcc* ) +                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' +                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' +	        ;; +	      esac +	    } +	  else +	    $opt_dry_run || { +	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' +	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' +	      eval '$MV "$nlist"T "$nlist"' +	      case $host in +	        *cygwin* | *mingw* | *cegcc* ) +	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' +	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' +	          ;; +	      esac +	    } +	  fi +	fi + +	for dlprefile in $dlprefiles; do +	  func_verbose "extracting global C symbols from \`$dlprefile'" +	  func_basename "$dlprefile" +	  name="$func_basename_result" +          case $host in +	    *cygwin* | *mingw* | *cegcc* ) +	      # if an import library, we need to obtain dlname +	      if func_win32_import_lib_p "$dlprefile"; then +	        func_tr_sh "$dlprefile" +	        eval "curr_lafile=\$libfile_$func_tr_sh_result" +	        dlprefile_dlbasename="" +	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then +	          # Use subshell, to avoid clobbering current variable values +	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` +	          if test -n "$dlprefile_dlname" ; then +	            func_basename "$dlprefile_dlname" +	            dlprefile_dlbasename="$func_basename_result" +	          else +	            # no lafile. user explicitly requested -dlpreopen <import library>. +	            $sharedlib_from_linklib_cmd "$dlprefile" +	            dlprefile_dlbasename=$sharedlib_from_linklib_result +	          fi +	        fi +	        $opt_dry_run || { +	          if test -n "$dlprefile_dlbasename" ; then +	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' +	          else +	            func_warning "Could not compute DLL name from $name" +	            eval '$ECHO ": $name " >> "$nlist"' +	          fi +	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 +	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | +	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" +	        } +	      else # not an import lib +	        $opt_dry_run || { +	          eval '$ECHO ": $name " >> "$nlist"' +	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 +	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" +	        } +	      fi +	    ;; +	    *) +	      $opt_dry_run || { +	        eval '$ECHO ": $name " >> "$nlist"' +	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 +	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" +	      } +	    ;; +          esac +	done + +	$opt_dry_run || { +	  # Make sure we have at least an empty file. +	  test -f "$nlist" || : > "$nlist" + +	  if test -n "$exclude_expsyms"; then +	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T +	    $MV "$nlist"T "$nlist" +	  fi + +	  # Try sorting and uniquifying the output. +	  if $GREP -v "^: " < "$nlist" | +	      if sort -k 3 </dev/null >/dev/null 2>&1; then +		sort -k 3 +	      else +		sort +2 +	      fi | +	      uniq > "$nlist"S; then +	    : +	  else +	    $GREP -v "^: " < "$nlist" > "$nlist"S +	  fi + +	  if test -f "$nlist"S; then +	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' +	  else +	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms" +	  fi + +	  echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols.  */ +typedef struct { +  const char *name; +  void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ +  { \"$my_originator\", (void *) 0 }," + +	  case $need_lib_prefix in +	  no) +	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" +	    ;; +	  *) +	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" +	    ;; +	  esac +	  echo >> "$output_objdir/$my_dlsyms" "\ +  {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { +  return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" +	} # !$opt_dry_run + +	pic_flag_for_symtable= +	case "$compile_command " in +	*" -static "*) ;; +	*) +	  case $host in +	  # compiling the symbol table file with pic_flag works around +	  # a FreeBSD bug that causes programs to crash when -lm is +	  # linked before any other PIC object.  But we must not use +	  # pic_flag when linking with -static.  The problem exists in +	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. +	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) +	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; +	  *-*-hpux*) +	    pic_flag_for_symtable=" $pic_flag"  ;; +	  *) +	    if test "X$my_pic_p" != Xno; then +	      pic_flag_for_symtable=" $pic_flag" +	    fi +	    ;; +	  esac +	  ;; +	esac +	symtab_cflags= +	for arg in $LTCFLAGS; do +	  case $arg in +	  -pie | -fpie | -fPIE) ;; +	  *) func_append symtab_cflags " $arg" ;; +	  esac +	done + +	# Now compile the dynamic symbol file. +	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + +	# Clean up the generated files. +	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + +	# Transform the symbol file into the correct name. +	symfileobj="$output_objdir/${my_outputname}S.$objext" +	case $host in +	*cygwin* | *mingw* | *cegcc* ) +	  if test -f "$output_objdir/$my_outputname.def"; then +	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` +	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` +	  else +	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` +	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` +	  fi +	  ;; +	*) +	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` +	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` +	  ;; +	esac +	;; +      *) +	func_fatal_error "unknown suffix for \`$my_dlsyms'" +	;; +      esac +    else +      # We keep going just in case the user didn't refer to +      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe +      # really was required. + +      # Nullify the symbol file. +      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` +      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` +    fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ +  $opt_debug +  win32_libid_type="unknown" +  win32_fileres=`file -L $1 2>/dev/null` +  case $win32_fileres in +  *ar\ archive\ import\ library*) # definitely import +    win32_libid_type="x86 archive import" +    ;; +  *ar\ archive*) # could be an import, or static +    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. +    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | +       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then +      func_to_tool_file "$1" func_convert_file_msys_to_w32 +      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | +	$SED -n -e ' +	    1,100{ +		/ I /{ +		    s,.*,import, +		    p +		    q +		} +	    }'` +      case $win32_nmres in +      import*)  win32_libid_type="x86 archive import";; +      *)        win32_libid_type="x86 archive static";; +      esac +    fi +    ;; +  *DLL*) +    win32_libid_type="x86 DLL" +    ;; +  *executable*) # but shell scripts are "executable" too... +    case $win32_fileres in +    *MS\ Windows\ PE\ Intel*) +      win32_libid_type="x86 DLL" +      ;; +    esac +    ;; +  esac +  $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +#    $sharedlib_from_linklib_cmd +# Result is available in the variable +#    $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ +  $opt_debug +  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ +  $opt_debug +  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` +  $OBJDUMP -s --section "$1" "$2" 2>/dev/null | +    $SED '/^Contents of section '"$match_literal"':/{ +      # Place marker at beginning of archive member dllname section +      s/.*/====MARK====/ +      p +      d +    } +    # These lines can sometimes be longer than 43 characters, but +    # are always uninteresting +    /:[	 ]*file format pe[i]\{,1\}-/d +    /^In archive [^:]*:/d +    # Ensure marker is printed +    /^====MARK====/p +    # Remove all lines with less than 43 characters +    /^.\{43\}/!d +    # From remaining lines, remove first 43 characters +    s/^.\{43\}//' | +    $SED -n ' +      # Join marker and all lines until next marker into a single line +      /^====MARK====/ b para +      H +      $ b para +      b +      :para +      x +      s/\n//g +      # Remove the marker +      s/^====MARK====// +      # Remove trailing dots and whitespace +      s/[\. \t]*$// +      # Print +      /./p' | +    # we now have a list, one entry per line, of the stringified +    # contents of the appropriate section of all members of the +    # archive which possess that section. Heuristic: eliminate +    # all those which have a first or second character that is +    # a '.' (that is, objdump's representation of an unprintable +    # character.) This should work for all archives with less than +    # 0x302f exports -- but will fail for DLLs whose name actually +    # begins with a literal '.' or a single character followed by +    # a '.'. +    # +    # Of those that remain, print the first one. +    $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ +  $opt_debug +  func_to_tool_file "$1" func_convert_file_msys_to_w32 +  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` +  test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ +  $opt_debug +  func_to_tool_file "$1" func_convert_file_msys_to_w32 +  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` +  test -n "$func_cygming_ms_implib_tmp" +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +#    $sharedlib_from_linklib_cmd +# Result is available in the variable +#    $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ +  $opt_debug +  if func_cygming_gnu_implib_p "$1" ; then +    # binutils import library +    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` +  elif func_cygming_ms_implib_p "$1" ; then +    # ms-generated import library +    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` +  else +    # unknown +    sharedlib_from_linklib_result="" +  fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ +    $opt_debug +    f_ex_an_ar_dir="$1"; shift +    f_ex_an_ar_oldlib="$1" +    if test "$lock_old_archive_extraction" = yes; then +      lockfile=$f_ex_an_ar_oldlib.lock +      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do +	func_echo "Waiting for $lockfile to be removed" +	sleep 2 +      done +    fi +    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ +		   'stat=$?; rm -f "$lockfile"; exit $stat' +    if test "$lock_old_archive_extraction" = yes; then +      $opt_dry_run || rm -f "$lockfile" +    fi +    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then +     : +    else +      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" +    fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ +    $opt_debug +    my_gentop="$1"; shift +    my_oldlibs=${1+"$@"} +    my_oldobjs="" +    my_xlib="" +    my_xabs="" +    my_xdir="" + +    for my_xlib in $my_oldlibs; do +      # Extract the objects. +      case $my_xlib in +	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; +	*) my_xabs=`pwd`"/$my_xlib" ;; +      esac +      func_basename "$my_xlib" +      my_xlib="$func_basename_result" +      my_xlib_u=$my_xlib +      while :; do +        case " $extracted_archives " in +	*" $my_xlib_u "*) +	  func_arith $extracted_serial + 1 +	  extracted_serial=$func_arith_result +	  my_xlib_u=lt$extracted_serial-$my_xlib ;; +	*) break ;; +	esac +      done +      extracted_archives="$extracted_archives $my_xlib_u" +      my_xdir="$my_gentop/$my_xlib_u" + +      func_mkdir_p "$my_xdir" + +      case $host in +      *-darwin*) +	func_verbose "Extracting $my_xabs" +	# Do not bother doing anything if just a dry run +	$opt_dry_run || { +	  darwin_orig_dir=`pwd` +	  cd $my_xdir || exit $? +	  darwin_archive=$my_xabs +	  darwin_curdir=`pwd` +	  darwin_base_archive=`basename "$darwin_archive"` +	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` +	  if test -n "$darwin_arches"; then +	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` +	    darwin_arch= +	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" +	    for darwin_arch in  $darwin_arches ; do +	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" +	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" +	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" +	      func_extract_an_archive "`pwd`" "${darwin_base_archive}" +	      cd "$darwin_curdir" +	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" +	    done # $darwin_arches +            ## Okay now we've a bunch of thin objects, gotta fatten them up :) +	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` +	    darwin_file= +	    darwin_files= +	    for darwin_file in $darwin_filelist; do +	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` +	      $LIPO -create -output "$darwin_file" $darwin_files +	    done # $darwin_filelist +	    $RM -rf unfat-$$ +	    cd "$darwin_orig_dir" +	  else +	    cd $darwin_orig_dir +	    func_extract_an_archive "$my_xdir" "$my_xabs" +	  fi # $darwin_arches +	} # !$opt_dry_run +	;; +      *) +        func_extract_an_archive "$my_xdir" "$my_xabs" +	;; +      esac +      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` +    done + +    func_extract_archives_result="$my_oldobjs" +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable.  Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take.  If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory.  This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ +	func_emit_wrapper_arg1=${1-no} + +	$ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting.  It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then +  emulate sh +  NULLCMD=: +  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which +  # is contrary to our usage.  Disable this feature. +  alias -g '\${1+\"\$@\"}'='\"\$@\"' +  setopt NO_GLOB_SUBST +else +  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then +  # install mode needs the following variables: +  generated_by_libtool_version='$macro_version' +  notinst_deplibs='$notinst_deplibs' +else +  # When we are sourced in execute mode, \$file and \$ECHO are already set. +  if test \"\$libtool_execute_magic\" != \"$magic\"; then +    file=\"\$0\"" + +    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` +    $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ +  eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} +    ECHO=\"$qECHO\" +  fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ which is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options which match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ +  lt_script_arg0=\$0 +  shift +  for lt_opt +  do +    case \"\$lt_opt\" in +    --lt-debug) lt_option_debug=1 ;; +    --lt-dump-script) +        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` +        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. +        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` +        cat \"\$lt_dump_D/\$lt_dump_F\" +        exit 0 +      ;; +    --lt-*) +        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 +        exit 1 +      ;; +    esac +  done + +  # Print the debug banner immediately: +  if test -n \"\$lt_option_debug\"; then +    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 +  fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ +  lt_dump_args_N=1; +  for lt_arg +  do +    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" +    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` +  done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" +  case $host in +  # Backslashes separate directories on plain windows +  *-*-mingw | *-*-os2* | *-cegcc*) +    $ECHO "\ +      if test -n \"\$lt_option_debug\"; then +        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 +        func_lt_dump_args \${1+\"\$@\"} 1>&2 +      fi +      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +"      ;; -  # libtool link mode -  link | relink) -    modename="$modename: link" +  *) +    $ECHO "\ +      if test -n \"\$lt_option_debug\"; then +        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 +        func_lt_dump_args \${1+\"\$@\"} 1>&2 +      fi +      exec \"\$progdir/\$program\" \${1+\"\$@\"} +" +    ;; +  esac +  $ECHO "\ +      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 +      exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ +  for lt_wr_arg +  do +    case \$lt_wr_arg in +    --lt-*) ;; +    *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; +    esac +    shift +  done +  func_exec_program_core \${1+\"\$@\"} +} + +  # Parse options +  func_parse_lt_options \"\$0\" \${1+\"\$@\"} + +  # Find the directory that this script lives in. +  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` +  test \"x\$thisdir\" = \"x\$file\" && thisdir=. + +  # Follow symbolic links until we get to the real thisdir. +  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` +  while test -n \"\$file\"; do +    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + +    # If there was a directory component, then change thisdir. +    if test \"x\$destdir\" != \"x\$file\"; then +      case \"\$destdir\" in +      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; +      *) thisdir=\"\$thisdir/\$destdir\" ;; +      esac +    fi + +    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` +    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` +  done + +  # Usually 'no', except on cygwin/mingw when embedded into +  # the cwrapper. +  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 +  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then +    # special case for '.' +    if test \"\$thisdir\" = \".\"; then +      thisdir=\`pwd\` +    fi +    # remove .libs from thisdir +    case \"\$thisdir\" in +    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; +    $objdir )   thisdir=. ;; +    esac +  fi + +  # Try to get the absolute directory name. +  absdir=\`cd \"\$thisdir\" && pwd\` +  test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + +	if test "$fast_install" = yes; then +	  $ECHO "\ +  program=lt-'$outputname'$exeext +  progdir=\"\$thisdir/$objdir\" + +  if test ! -f \"\$progdir/\$program\" || +     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ +       test \"X\$file\" != \"X\$progdir/\$program\"; }; then + +    file=\"\$\$-\$program\" + +    if test ! -d \"\$progdir\"; then +      $MKDIR \"\$progdir\" +    else +      $RM \"\$progdir/\$file\" +    fi" + +	  $ECHO "\ + +    # relink executable if necessary +    if test -n \"\$relink_command\"; then +      if relink_command_output=\`eval \$relink_command 2>&1\`; then : +      else +	$ECHO \"\$relink_command_output\" >&2 +	$RM \"\$progdir/\$file\" +	exit 1 +      fi +    fi + +    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || +    { $RM \"\$progdir/\$program\"; +      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } +    $RM \"\$progdir/\$file\" +  fi" +	else +	  $ECHO "\ +  program='$outputname' +  progdir=\"\$thisdir/$objdir\" +" +	fi + +	$ECHO "\ + +  if test -f \"\$progdir/\$program\"; then" + +	# fixup the dll searchpath if we need to. +	# +	# Fix the DLL searchpath if we need to.  Do this before prepending +	# to shlibpath, because on Windows, both are PATH and uninstalled +	# libraries must come first. +	if test -n "$dllsearchpath"; then +	  $ECHO "\ +    # Add the dll search path components to the executable PATH +    PATH=$dllsearchpath:\$PATH +" +	fi + +	# Export our shlibpath_var if we have one. +	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then +	  $ECHO "\ +    # Add our own library path to $shlibpath_var +    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + +    # Some systems cannot cope with colon-terminated $shlibpath_var +    # The second colon is a workaround for a bug in BeOS R4 sed +    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + +    export $shlibpath_var +" +	fi + +	$ECHO "\ +    if test \"\$libtool_execute_magic\" != \"$magic\"; then +      # Run the actual program with our arguments. +      func_exec_program \${1+\"\$@\"} +    fi +  else +    # The program doesn't exist. +    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 +    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 +    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 +    exit 1 +  fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ +	cat <<EOF + +/* $cwrappersource - temporary wrapper executable for $objdir/$outputname +   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION + +   The $output program cannot be directly executed until all the libtool +   libraries that it depends on are installed. + +   This wrapper executable should never be moved out of the build directory. +   If it is, it will not operate correctly. +*/ +EOF +	    cat <<"EOF" +#ifdef _MSC_VER +# define _CRT_SECURE_NO_DEPRECATE 1 +#endif +#include <stdio.h> +#include <stdlib.h> +#ifdef _MSC_VER +# include <direct.h> +# include <process.h> +# include <io.h> +#else +# include <unistd.h> +# include <stdint.h> +# ifdef __CYGWIN__ +#  include <io.h> +# endif +#endif +#include <malloc.h> +#include <stdarg.h> +#include <assert.h> +#include <string.h> +#include <ctype.h> +#include <errno.h> +#include <fcntl.h> +#include <sys/stat.h> + +/* declarations of non-ANSI functions */ +#if defined(__MINGW32__) +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined(__CYGWIN__) +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined (other platforms) ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined(_MSC_VER) +# define setmode _setmode +# define stat    _stat +# define chmod   _chmod +# define getcwd  _getcwd +# define putenv  _putenv +# define S_IXUSR _S_IEXEC +# ifndef _INTPTR_T_DEFINED +#  define _INTPTR_T_DEFINED +#  define intptr_t int +# endif +#elif defined(__MINGW32__) +# define setmode _setmode +# define stat    _stat +# define chmod   _chmod +# define getcwd  _getcwd +# define putenv  _putenv +#elif defined(__CYGWIN__) +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined (other platforms) ... */ +#endif + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ +  defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +#  define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +#  define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ +	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ +  if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#if defined(LT_DEBUGWRAPPER) +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + +	    cat <<EOF +volatile const char * MAGIC_EXE = "$magic_exe"; +const char * LIB_PATH_VARNAME = "$shlibpath_var"; +EOF + +	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then +              func_to_host_path "$temp_rpath" +	      cat <<EOF +const char * LIB_PATH_VALUE   = "$func_to_host_path_result"; +EOF +	    else +	      cat <<"EOF" +const char * LIB_PATH_VALUE   = ""; +EOF +	    fi + +	    if test -n "$dllsearchpath"; then +              func_to_host_path "$dllsearchpath:" +	      cat <<EOF +const char * EXE_PATH_VARNAME = "PATH"; +const char * EXE_PATH_VALUE   = "$func_to_host_path_result"; +EOF +	    else +	      cat <<"EOF" +const char * EXE_PATH_VARNAME = ""; +const char * EXE_PATH_VALUE   = ""; +EOF +	    fi + +	    if test "$fast_install" = yes; then +	      cat <<EOF +const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ +EOF +	    else +	      cat <<EOF +const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ +EOF +	    fi + + +	    cat <<"EOF" + +#define LTWRAPPER_OPTION_PREFIX         "--lt-" + +static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; +static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script"; +static const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug"; + +int +main (int argc, char *argv[]) +{ +  char **newargz; +  int  newargc; +  char *tmp_pathspec; +  char *actual_cwrapper_path; +  char *actual_cwrapper_name; +  char *target_name; +  char *lt_argv_zero; +  intptr_t rval = 127; + +  int i; + +  program_name = (char *) xstrdup (base_name (argv[0])); +  newargz = XMALLOC (char *, argc + 1); + +  /* very simple arg parsing; don't want to rely on getopt +   * also, copy all non cwrapper options to newargz, except +   * argz[0], which is handled differently +   */ +  newargc=0; +  for (i = 1; i < argc; i++) +    { +      if (strcmp (argv[i], dumpscript_opt) == 0) +	{ +EOF +	    case "$host" in +	      *mingw* | *cygwin* ) +		# make stdout use "unix" line endings +		echo "          setmode(1,_O_BINARY);" +		;; +	      esac + +	    cat <<"EOF" +	  lt_dump_script (stdout); +	  return 0; +	} +      if (strcmp (argv[i], debug_opt) == 0) +	{ +          lt_debug = 1; +          continue; +	} +      if (strcmp (argv[i], ltwrapper_option_prefix) == 0) +        { +          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX +             namespace, but it is not one of the ones we know about and +             have already dealt with, above (inluding dump-script), then +             report an error. Otherwise, targets might begin to believe +             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX +             namespace. The first time any user complains about this, we'll +             need to make LTWRAPPER_OPTION_PREFIX a configure-time option +             or a configure.ac-settable value. +           */ +          lt_fatal (__FILE__, __LINE__, +		    "unrecognized %s option: '%s'", +                    ltwrapper_option_prefix, argv[i]); +        } +      /* otherwise ... */ +      newargz[++newargc] = xstrdup (argv[i]); +    } +  newargz[++newargc] = NULL; + +EOF +	    cat <<EOF +  /* The GNU banner must be the first non-error debug message */ +  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); +EOF +	    cat <<"EOF" +  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); +  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); + +  tmp_pathspec = find_executable (argv[0]); +  if (tmp_pathspec == NULL) +    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); +  lt_debugprintf (__FILE__, __LINE__, +                  "(main) found exe (before symlink chase) at: %s\n", +		  tmp_pathspec); + +  actual_cwrapper_path = chase_symlinks (tmp_pathspec); +  lt_debugprintf (__FILE__, __LINE__, +                  "(main) found exe (after symlink chase) at: %s\n", +		  actual_cwrapper_path); +  XFREE (tmp_pathspec); + +  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); +  strendzap (actual_cwrapper_path, actual_cwrapper_name); + +  /* wrapper name transforms */ +  strendzap (actual_cwrapper_name, ".exe"); +  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); +  XFREE (actual_cwrapper_name); +  actual_cwrapper_name = tmp_pathspec; +  tmp_pathspec = 0; + +  /* target_name transforms -- use actual target program name; might have lt- prefix */ +  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); +  strendzap (target_name, ".exe"); +  tmp_pathspec = lt_extend_str (target_name, ".exe", 1); +  XFREE (target_name); +  target_name = tmp_pathspec; +  tmp_pathspec = 0; + +  lt_debugprintf (__FILE__, __LINE__, +		  "(main) libtool target name: %s\n", +		  target_name); +EOF + +	    cat <<EOF +  newargz[0] = +    XMALLOC (char, (strlen (actual_cwrapper_path) + +		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); +  strcpy (newargz[0], actual_cwrapper_path); +  strcat (newargz[0], "$objdir"); +  strcat (newargz[0], "/"); +EOF + +	    cat <<"EOF" +  /* stop here, and copy so we don't have to do this twice */ +  tmp_pathspec = xstrdup (newargz[0]); + +  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ +  strcat (newargz[0], actual_cwrapper_name); + +  /* DO want the lt- prefix here if it exists, so use target_name */ +  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); +  XFREE (tmp_pathspec); +  tmp_pathspec = NULL; +EOF + +	    case $host_os in +	      mingw*) +	    cat <<"EOF" +  { +    char* p; +    while ((p = strchr (newargz[0], '\\')) != NULL) +      { +	*p = '/'; +      } +    while ((p = strchr (lt_argv_zero, '\\')) != NULL) +      { +	*p = '/'; +      } +  } +EOF +	    ;; +	    esac + +	    cat <<"EOF" +  XFREE (target_name); +  XFREE (actual_cwrapper_path); +  XFREE (actual_cwrapper_name); + +  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ +  lt_setenv ("DUALCASE", "1");  /* for MSK sh */ +  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must +     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) +     because on Windows, both *_VARNAMEs are PATH but uninstalled +     libraries must come first. */ +  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); +  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); + +  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", +		  nonnull (lt_argv_zero)); +  for (i = 0; i < newargc; i++) +    { +      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", +		      i, nonnull (newargz[i])); +    } + +EOF + +	    case $host_os in +	      mingw*) +		cat <<"EOF" +  /* execv doesn't actually work on mingw as expected on unix */ +  newargz = prepare_spawn (newargz); +  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); +  if (rval == -1) +    { +      /* failed to start process */ +      lt_debugprintf (__FILE__, __LINE__, +		      "(main) failed to launch target \"%s\": %s\n", +		      lt_argv_zero, nonnull (strerror (errno))); +      return 127; +    } +  return rval; +EOF +		;; +	      *) +		cat <<"EOF" +  execv (lt_argv_zero, newargz); +  return rval; /* =127, but avoids unused variable warning */ +EOF +		;; +	    esac + +	    cat <<"EOF" +} + +void * +xmalloc (size_t num) +{ +  void *p = (void *) malloc (num); +  if (!p) +    lt_fatal (__FILE__, __LINE__, "memory exhausted"); + +  return p; +} + +char * +xstrdup (const char *string) +{ +  return string ? strcpy ((char *) xmalloc (strlen (string) + 1), +			  string) : NULL; +} + +const char * +base_name (const char *name) +{ +  const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) +  /* Skip over the disk name in MSDOS pathnames. */ +  if (isalpha ((unsigned char) name[0]) && name[1] == ':') +    name += 2; +#endif + +  for (base = name; *name; name++) +    if (IS_DIR_SEPARATOR (*name)) +      base = name + 1; +  return base; +} + +int +check_executable (const char *path) +{ +  struct stat st; + +  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", +                  nonempty (path)); +  if ((!path) || (!*path)) +    return 0; + +  if ((stat (path, &st) >= 0) +      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) +    return 1; +  else +    return 0; +} + +int +make_executable (const char *path) +{ +  int rval = 0; +  struct stat st; + +  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", +                  nonempty (path)); +  if ((!path) || (!*path)) +    return 0; + +  if (stat (path, &st) >= 0) +    { +      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); +    } +  return rval; +} + +/* Searches for the full path of the wrapper.  Returns +   newly allocated full path name if found, NULL otherwise +   Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ +  int has_slash = 0; +  const char *p; +  const char *p_next; +  /* static buffer for getcwd */ +  char tmp[LT_PATHMAX + 1]; +  int tmp_len; +  char *concat_name; + +  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", +                  nonempty (wrapper)); + +  if ((wrapper == NULL) || (*wrapper == '\0')) +    return NULL; + +  /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) +  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') +    { +      concat_name = xstrdup (wrapper); +      if (check_executable (concat_name)) +	return concat_name; +      XFREE (concat_name); +    } +  else +    { +#endif +      if (IS_DIR_SEPARATOR (wrapper[0])) +	{ +	  concat_name = xstrdup (wrapper); +	  if (check_executable (concat_name)) +	    return concat_name; +	  XFREE (concat_name); +	} +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) +    } +#endif + +  for (p = wrapper; *p; p++) +    if (*p == '/') +      { +	has_slash = 1; +	break; +      } +  if (!has_slash) +    { +      /* no slashes; search PATH */ +      const char *path = getenv ("PATH"); +      if (path != NULL) +	{ +	  for (p = path; *p; p = p_next) +	    { +	      const char *q; +	      size_t p_len; +	      for (q = p; *q; q++) +		if (IS_PATH_SEPARATOR (*q)) +		  break; +	      p_len = q - p; +	      p_next = (*q == '\0' ? q : q + 1); +	      if (p_len == 0) +		{ +		  /* empty path: current directory */ +		  if (getcwd (tmp, LT_PATHMAX) == NULL) +		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", +                              nonnull (strerror (errno))); +		  tmp_len = strlen (tmp); +		  concat_name = +		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); +		  memcpy (concat_name, tmp, tmp_len); +		  concat_name[tmp_len] = '/'; +		  strcpy (concat_name + tmp_len + 1, wrapper); +		} +	      else +		{ +		  concat_name = +		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); +		  memcpy (concat_name, p, p_len); +		  concat_name[p_len] = '/'; +		  strcpy (concat_name + p_len + 1, wrapper); +		} +	      if (check_executable (concat_name)) +		return concat_name; +	      XFREE (concat_name); +	    } +	} +      /* not found in PATH; assume curdir */ +    } +  /* Relative path | not found in path: prepend cwd */ +  if (getcwd (tmp, LT_PATHMAX) == NULL) +    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", +              nonnull (strerror (errno))); +  tmp_len = strlen (tmp); +  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); +  memcpy (concat_name, tmp, tmp_len); +  concat_name[tmp_len] = '/'; +  strcpy (concat_name + tmp_len + 1, wrapper); + +  if (check_executable (concat_name)) +    return concat_name; +  XFREE (concat_name); +  return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK +  return xstrdup (pathspec); +#else +  char buf[LT_PATHMAX]; +  struct stat s; +  char *tmp_pathspec = xstrdup (pathspec); +  char *p; +  int has_symlinks = 0; +  while (strlen (tmp_pathspec) && !has_symlinks) +    { +      lt_debugprintf (__FILE__, __LINE__, +		      "checking path component for symlinks: %s\n", +		      tmp_pathspec); +      if (lstat (tmp_pathspec, &s) == 0) +	{ +	  if (S_ISLNK (s.st_mode) != 0) +	    { +	      has_symlinks = 1; +	      break; +	    } + +	  /* search backwards for last DIR_SEPARATOR */ +	  p = tmp_pathspec + strlen (tmp_pathspec) - 1; +	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) +	    p--; +	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) +	    { +	      /* no more DIR_SEPARATORS left */ +	      break; +	    } +	  *p = '\0'; +	} +      else +	{ +	  lt_fatal (__FILE__, __LINE__, +		    "error accessing file \"%s\": %s", +		    tmp_pathspec, nonnull (strerror (errno))); +	} +    } +  XFREE (tmp_pathspec); + +  if (!has_symlinks) +    { +      return xstrdup (pathspec); +    } + +  tmp_pathspec = realpath (pathspec, buf); +  if (tmp_pathspec == 0) +    { +      lt_fatal (__FILE__, __LINE__, +		"could not follow symlinks for %s", pathspec); +    } +  return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ +  size_t len, patlen; + +  assert (str != NULL); +  assert (pat != NULL); + +  len = strlen (str); +  patlen = strlen (pat); + +  if (patlen <= len) +    { +      str += len - patlen; +      if (strcmp (str, pat) == 0) +	*str = '\0'; +    } +  return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ +  va_list args; +  if (lt_debug) +    { +      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); +      va_start (args, fmt); +      (void) vfprintf (stderr, fmt, args); +      va_end (args); +    } +} + +static void +lt_error_core (int exit_status, const char *file, +	       int line, const char *mode, +	       const char *message, va_list ap) +{ +  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); +  vfprintf (stderr, message, ap); +  fprintf (stderr, ".\n"); + +  if (exit_status >= 0) +    exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ +  va_list ap; +  va_start (ap, message); +  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); +  va_end (ap); +} + +static const char * +nonnull (const char *s) +{ +  return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ +  return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ +  lt_debugprintf (__FILE__, __LINE__, +		  "(lt_setenv) setting '%s' to '%s'\n", +                  nonnull (name), nonnull (value)); +  { +#ifdef HAVE_SETENV +    /* always make a copy, for consistency with !HAVE_SETENV */ +    char *str = xstrdup (value); +    setenv (name, str, 1); +#else +    int len = strlen (name) + 1 + strlen (value) + 1; +    char *str = XMALLOC (char, len); +    sprintf (str, "%s=%s", name, value); +    if (putenv (str) != EXIT_SUCCESS) +      { +        XFREE (str); +      } +#endif +  } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ +  char *new_value; +  if (orig_value && *orig_value) +    { +      int orig_value_len = strlen (orig_value); +      int add_len = strlen (add); +      new_value = XMALLOC (char, add_len + orig_value_len + 1); +      if (to_end) +        { +          strcpy (new_value, orig_value); +          strcpy (new_value + orig_value_len, add); +        } +      else +        { +          strcpy (new_value, add); +          strcpy (new_value + add_len, orig_value); +        } +    } +  else +    { +      new_value = xstrdup (add); +    } +  return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ +  lt_debugprintf (__FILE__, __LINE__, +		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", +                  nonnull (name), nonnull (value)); + +  if (name && *name && value && *value) +    { +      char *new_value = lt_extend_str (getenv (name), value, 0); +      /* some systems can't cope with a ':'-terminated path #' */ +      int len = strlen (new_value); +      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) +        { +          new_value[len-1] = '\0'; +        } +      lt_setenv (name, new_value); +      XFREE (new_value); +    } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ +  lt_debugprintf (__FILE__, __LINE__, +		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", +                  nonnull (name), nonnull (value)); + +  if (name && *name && value && *value) +    { +      char *new_value = lt_extend_str (getenv (name), value, 0); +      lt_setenv (name, new_value); +      XFREE (new_value); +    } +} + +EOF +	    case $host_os in +	      mingw*) +		cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). +   Note that spawn() does not by itself call the command interpreter +     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : +      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); +         GetVersionEx(&v); +         v.dwPlatformId == VER_PLATFORM_WIN32_NT; +      }) ? "cmd.exe" : "command.com"). +   Instead it simply concatenates the arguments, separated by ' ', and calls +   CreateProcess().  We must quote the arguments since Win32 CreateProcess() +   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a +   special way: +   - Space and tab are interpreted as delimiters. They are not treated as +     delimiters if they are surrounded by double quotes: "...". +   - Unescaped double quotes are removed from the input. Their only effect is +     that within double quotes, space and tab are treated like normal +     characters. +   - Backslashes not followed by double quotes are not special. +   - But 2*n+1 backslashes followed by a double quote become +     n backslashes followed by a double quote (n >= 0): +       \" -> " +       \\\" -> \" +       \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ +  size_t argc; +  char **new_argv; +  size_t i; + +  /* Count number of arguments.  */ +  for (argc = 0; argv[argc] != NULL; argc++) +    ; + +  /* Allocate new argument vector.  */ +  new_argv = XMALLOC (char *, argc + 1); + +  /* Put quoted arguments into the new argument vector.  */ +  for (i = 0; i < argc; i++) +    { +      const char *string = argv[i]; + +      if (string[0] == '\0') +	new_argv[i] = xstrdup ("\"\""); +      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) +	{ +	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); +	  size_t length; +	  unsigned int backslashes; +	  const char *s; +	  char *quoted_string; +	  char *p; + +	  length = 0; +	  backslashes = 0; +	  if (quote_around) +	    length++; +	  for (s = string; *s != '\0'; s++) +	    { +	      char c = *s; +	      if (c == '"') +		length += backslashes + 1; +	      length++; +	      if (c == '\\') +		backslashes++; +	      else +		backslashes = 0; +	    } +	  if (quote_around) +	    length += backslashes + 1; + +	  quoted_string = XMALLOC (char, length + 1); + +	  p = quoted_string; +	  backslashes = 0; +	  if (quote_around) +	    *p++ = '"'; +	  for (s = string; *s != '\0'; s++) +	    { +	      char c = *s; +	      if (c == '"') +		{ +		  unsigned int j; +		  for (j = backslashes + 1; j > 0; j--) +		    *p++ = '\\'; +		} +	      *p++ = c; +	      if (c == '\\') +		backslashes++; +	      else +		backslashes = 0; +	    } +	  if (quote_around) +	    { +	      unsigned int j; +	      for (j = backslashes; j > 0; j--) +		*p++ = '\\'; +	      *p++ = '"'; +	    } +	  *p = '\0'; + +	  new_argv[i] = quoted_string; +	} +      else +	new_argv[i] = (char *) string; +    } +  new_argv[argc] = NULL; + +  return new_argv; +} +EOF +		;; +	    esac + +            cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF +	    func_emit_wrapper yes | +              $SED -e 's/\([\\"]\)/\\\1/g' \ +	           -e 's/^/  fputs ("/' -e 's/$/\\n", f);/' + +            cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ +    $opt_debug +    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in +    *import*) : ;; +    *) false ;; +    esac +} + +# func_mode_link arg... +func_mode_link () +{ +    $opt_debug      case $host in -    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) +    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)        # It is impossible to link a dll without this setting, and        # we shouldn't force the makefile maintainer to figure out        # which system we are compiling for in order to pass an extra @@ -1121,10 +5100,10 @@ EOF        allow_undefined=yes        ;;      esac -    libtool_args="$nonopt" +    libtool_args=$nonopt      base_compile="$nonopt $@" -    compile_command="$nonopt" -    finalize_command="$nonopt" +    compile_command=$nonopt +    finalize_command=$nonopt      compile_rpath=      finalize_rpath= @@ -1139,8 +5118,10 @@ EOF      dllsearchpath=      lib_search_path=`pwd`      inst_prefix_dir= +    new_inherited_linker_flags=      avoid_version=no +    bindir=      dlfiles=      dlprefiles=      dlself=no @@ -1154,7 +5135,6 @@ EOF      no_install=no      objs=      non_pic_objects= -    notinst_path= # paths that contain not-installed libtool libraries      precious_files_regex=      prefer_static_libs=no      preload=no @@ -1168,19 +5148,25 @@ EOF      thread_safe=no      vinfo=      vinfo_number=no +    weak_libs=      single_module="${wl}-single_module" -      func_infer_tag $base_compile      # We need to know -static, to get the right output filenames.      for arg      do        case $arg in +      -shared) +	test "$build_libtool_libs" != yes && \ +	  func_fatal_configuration "can not build a shared library" +	build_old_libs=no +	break +	;;        -all-static | -static | -static-libtool-libs)  	case $arg in  	-all-static)  	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then -	    $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 +	    func_warning "complete static linking is impossible in this configuration"  	  fi  	  if test -n "$link_static_flag"; then  	    dlopen_self=$dlopen_self_static @@ -1214,29 +5200,30 @@ EOF      while test "$#" -gt 0; do        arg="$1"        shift -      case $arg in -      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"") -	qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test -	;; -      *) qarg=$arg ;; -      esac -      libtool_args="$libtool_args $qarg" +      func_quote_for_eval "$arg" +      qarg=$func_quote_for_eval_unquoted_result +      func_append libtool_args " $func_quote_for_eval_result"        # If the previous option needs an argument, assign it.        if test -n "$prev"; then  	case $prev in  	output) -	  compile_command="$compile_command @OUTPUT@" -	  finalize_command="$finalize_command @OUTPUT@" +	  func_append compile_command " @OUTPUT@" +	  func_append finalize_command " @OUTPUT@"  	  ;;  	esac  	case $prev in +	bindir) +	  bindir="$arg" +	  prev= +	  continue +	  ;;  	dlfiles|dlprefiles)  	  if test "$preload" = no; then  	    # Add the symbol object into the linking commands. -	    compile_command="$compile_command @SYMFILE@" -	    finalize_command="$finalize_command @SYMFILE@" +	    func_append compile_command " @SYMFILE@" +	    func_append finalize_command " @SYMFILE@"  	    preload=yes  	  fi  	  case $arg in @@ -1263,9 +5250,9 @@ EOF  	    ;;  	  *)  	    if test "$prev" = dlfiles; then -	      dlfiles="$dlfiles $arg" +	      func_append dlfiles " $arg"  	    else -	      dlprefiles="$dlprefiles $arg" +	      func_append dlprefiles " $arg"  	    fi  	    prev=  	    continue @@ -1274,10 +5261,8 @@ EOF  	  ;;  	expsyms)  	  export_symbols="$arg" -	  if test ! -f "$arg"; then -	    $echo "$modename: symbol file \`$arg' does not exist" -	    exit $EXIT_FAILURE -	  fi +	  test -f "$arg" \ +	    || func_fatal_error "symbol file \`$arg' does not exist"  	  prev=  	  continue  	  ;; @@ -1286,18 +5271,21 @@ EOF  	  prev=  	  continue  	  ;; -	inst_prefix) -	  inst_prefix_dir="$arg" -	  prev= -	  continue -	  ;; -	precious_regex) -	  precious_files_regex="$arg" +	framework) +	  case $host in +	    *-*-darwin*) +	      case "$deplibs " in +		*" $qarg.ltframework "*) ;; +		*) func_append deplibs " $qarg.ltframework" # this is fixed later +		   ;; +	      esac +	      ;; +	  esac  	  prev=  	  continue  	  ;; -	release) -	  release="-$arg" +	inst_prefix) +	  inst_prefix_dir="$arg"  	  prev=  	  continue  	  ;; @@ -1305,39 +5293,30 @@ EOF  	  if test -f "$arg"; then  	    save_arg=$arg  	    moreargs= -	    for fil in `cat $save_arg` +	    for fil in `cat "$save_arg"`  	    do -#	      moreargs="$moreargs $fil" +#	      func_append moreargs " $fil"  	      arg=$fil  	      # A libtool-controlled object.  	      # Check to see that this really is a libtool object. -	      if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then +	      if func_lalib_unsafe_p "$arg"; then  		pic_object=  		non_pic_object=  		# Read the .lo file -		# If there is no directory component, then add one. -		case $arg in -		*/* | *\\*) . $arg ;; -		*) . ./$arg ;; -		esac +		func_source "$arg" -		if test -z "$pic_object" || \ +		if test -z "$pic_object" ||  		   test -z "$non_pic_object" || -		   test "$pic_object" = none && \ +		   test "$pic_object" = none &&  		   test "$non_pic_object" = none; then -		  $echo "$modename: cannot find name of object for \`$arg'" 1>&2 -		  exit $EXIT_FAILURE +		  func_fatal_error "cannot find name of object for \`$arg'"  		fi  		# Extract subdirectory from the argument. -		xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` -		if test "X$xdir" = "X$arg"; then -		  xdir= -		else -		  xdir="$xdir/" -		fi +		func_dirname "$arg" "/" "" +		xdir="$func_dirname_result"  		if test "$pic_object" != none; then  		  # Prepend the subdirectory the object is found in. @@ -1345,7 +5324,7 @@ EOF  		  if test "$prev" = dlfiles; then  		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then -		      dlfiles="$dlfiles $pic_object" +		      func_append dlfiles " $pic_object"  		      prev=  		      continue  		    else @@ -1357,12 +5336,12 @@ EOF  		  # CHECK ME:  I think I busted this.  -Ossama  		  if test "$prev" = dlprefiles; then  		    # Preload the old-style object. -		    dlprefiles="$dlprefiles $pic_object" +		    func_append dlprefiles " $pic_object"  		    prev=  		  fi  		  # A PIC object. -		  libobjs="$libobjs $pic_object" +		  func_append libobjs " $pic_object"  		  arg="$pic_object"  		fi @@ -1372,7 +5351,7 @@ EOF  		  non_pic_object="$xdir$non_pic_object"  		  # A standard non-PIC object -		  non_pic_objects="$non_pic_objects $non_pic_object" +		  func_append non_pic_objects " $non_pic_object"  		  if test -z "$pic_object" || test "$pic_object" = none ; then  		    arg="$non_pic_object"  		  fi @@ -1380,95 +5359,95 @@ EOF  		  # If the PIC object exists, use it instead.  		  # $xdir was prepended to $pic_object above.  		  non_pic_object="$pic_object" -		  non_pic_objects="$non_pic_objects $non_pic_object" +		  func_append non_pic_objects " $non_pic_object"  		fi  	      else  		# Only an error if not doing a dry-run. -		if test -z "$run"; then -		  $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 -		  exit $EXIT_FAILURE -		else -		  # Dry-run case. - +		if $opt_dry_run; then  		  # Extract subdirectory from the argument. -		  xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` -		  if test "X$xdir" = "X$arg"; then -		    xdir= -		  else -		    xdir="$xdir/" -		  fi - -		  pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` -		  non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` -		  libobjs="$libobjs $pic_object" -		  non_pic_objects="$non_pic_objects $non_pic_object" +		  func_dirname "$arg" "/" "" +		  xdir="$func_dirname_result" + +		  func_lo2o "$arg" +		  pic_object=$xdir$objdir/$func_lo2o_result +		  non_pic_object=$xdir$func_lo2o_result +		  func_append libobjs " $pic_object" +		  func_append non_pic_objects " $non_pic_object" +	        else +		  func_fatal_error "\`$arg' is not a valid libtool object"  		fi  	      fi  	    done  	  else -	    $echo "$modename: link input file \`$save_arg' does not exist" -	    exit $EXIT_FAILURE +	    func_fatal_error "link input file \`$arg' does not exist"  	  fi  	  arg=$save_arg  	  prev=  	  continue  	  ;; +	precious_regex) +	  precious_files_regex="$arg" +	  prev= +	  continue +	  ;; +	release) +	  release="-$arg" +	  prev= +	  continue +	  ;;  	rpath | xrpath)  	  # We need an absolute path.  	  case $arg in  	  [\\/]* | [A-Za-z]:[\\/]*) ;;  	  *) -	    $echo "$modename: only absolute run-paths are allowed" 1>&2 -	    exit $EXIT_FAILURE +	    func_fatal_error "only absolute run-paths are allowed"  	    ;;  	  esac  	  if test "$prev" = rpath; then  	    case "$rpath " in  	    *" $arg "*) ;; -	    *) rpath="$rpath $arg" ;; +	    *) func_append rpath " $arg" ;;  	    esac  	  else  	    case "$xrpath " in  	    *" $arg "*) ;; -	    *) xrpath="$xrpath $arg" ;; +	    *) func_append xrpath " $arg" ;;  	    esac  	  fi  	  prev=  	  continue  	  ;; -	xcompiler) -	  compiler_flags="$compiler_flags $qarg" +	shrext) +	  shrext_cmds="$arg"  	  prev= -	  compile_command="$compile_command $qarg" -	  finalize_command="$finalize_command $qarg"  	  continue  	  ;; -	xlinker) -	  linker_flags="$linker_flags $qarg" -	  compiler_flags="$compiler_flags $wl$qarg" +	weak) +	  func_append weak_libs " $arg"  	  prev= -	  compile_command="$compile_command $wl$qarg" -	  finalize_command="$finalize_command $wl$qarg"  	  continue  	  ;;  	xcclinker) -	  linker_flags="$linker_flags $qarg" -	  compiler_flags="$compiler_flags $qarg" +	  func_append linker_flags " $qarg" +	  func_append compiler_flags " $qarg"  	  prev= -	  compile_command="$compile_command $qarg" -	  finalize_command="$finalize_command $qarg" +	  func_append compile_command " $qarg" +	  func_append finalize_command " $qarg"  	  continue  	  ;; -	shrext) -  	  shrext_cmds="$arg" +	xcompiler) +	  func_append compiler_flags " $qarg"  	  prev= +	  func_append compile_command " $qarg" +	  func_append finalize_command " $qarg"  	  continue  	  ;; -	darwin_framework|darwin_framework_skip) -	  test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" -	  compile_command="$compile_command $arg" -	  finalize_command="$finalize_command $arg" +	xlinker) +	  func_append linker_flags " $qarg" +	  func_append compiler_flags " $wl$qarg"  	  prev= +	  func_append compile_command " $wl$qarg" +	  func_append finalize_command " $wl$qarg"  	  continue  	  ;;  	*) @@ -1484,16 +5463,16 @@ EOF        case $arg in        -all-static)  	if test -n "$link_static_flag"; then -	  compile_command="$compile_command $link_static_flag" -	  finalize_command="$finalize_command $link_static_flag" +	  # See comment for -static flag below, for more details. +	  func_append compile_command " $link_static_flag" +	  func_append finalize_command " $link_static_flag"  	fi  	continue  	;;        -allow-undefined)  	# FIXME: remove this flag sometime in the future. -	$echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 -	continue +	func_fatal_error "\`-allow-undefined' must not be used because it is the default"  	;;        -avoid-version) @@ -1501,6 +5480,11 @@ EOF  	continue  	;; +      -bindir) +	prev=bindir +	continue +	;; +        -dlopen)  	prev=dlfiles  	continue @@ -1518,8 +5502,7 @@ EOF        -export-symbols | -export-symbols-regex)  	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then -	  $echo "$modename: more than one -exported-symbols argument is not allowed" -	  exit $EXIT_FAILURE +	  func_fatal_error "more than one -exported-symbols argument is not allowed"  	fi  	if test "X$arg" = "X-export-symbols"; then  	  prev=expsyms @@ -1529,15 +5512,8 @@ EOF  	continue  	;; -      -framework|-arch|-isysroot) -	case " $CC " in -	  *" ${arg} ${1} "* | *" ${arg}	${1} "*)  -		prev=darwin_framework_skip ;; -	  *) compiler_flags="$compiler_flags $arg" -	     prev=darwin_framework ;; -	esac -	compile_command="$compile_command $arg" -	finalize_command="$finalize_command $arg" +      -framework) +	prev=framework  	continue  	;; @@ -1551,45 +5527,59 @@ EOF        -L[A-Z][A-Z]*:*)  	case $with_gcc/$host in  	no/*-*-irix* | /*-*-irix*) -	  compile_command="$compile_command $arg" -	  finalize_command="$finalize_command $arg" +	  func_append compile_command " $arg" +	  func_append finalize_command " $arg"  	  ;;  	esac  	continue  	;;        -L*) -	dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` +	func_stripname "-L" '' "$arg" +	if test -z "$func_stripname_result"; then +	  if test "$#" -gt 0; then +	    func_fatal_error "require no space between \`-L' and \`$1'" +	  else +	    func_fatal_error "need path for \`-L' option" +	  fi +	fi +	func_resolve_sysroot "$func_stripname_result" +	dir=$func_resolve_sysroot_result  	# We need an absolute path.  	case $dir in  	[\\/]* | [A-Za-z]:[\\/]*) ;;  	*)  	  absdir=`cd "$dir" && pwd` -	  if test -z "$absdir"; then -	    $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 -	    absdir="$dir" -	    notinst_path="$notinst_path $dir" -	  fi +	  test -z "$absdir" && \ +	    func_fatal_error "cannot determine absolute directory name of \`$dir'"  	  dir="$absdir"  	  ;;  	esac  	case "$deplibs " in -	*" -L$dir "*) ;; +	*" -L$dir "* | *" $arg "*) +	  # Will only happen for absolute or sysroot arguments +	  ;;  	*) -	  deplibs="$deplibs -L$dir" -	  lib_search_path="$lib_search_path $dir" +	  # Preserve sysroot, but never include relative directories +	  case $dir in +	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; +	    *) func_append deplibs " -L$dir" ;; +	  esac +	  func_append lib_search_path " $dir"  	  ;;  	esac  	case $host in -	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) -	  testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` +	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) +	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`  	  case :$dllsearchpath: in  	  *":$dir:"*) ;; -	  *) dllsearchpath="$dllsearchpath:$dir";; +	  ::) dllsearchpath=$dir;; +	  *) func_append dllsearchpath ":$dir";;  	  esac  	  case :$dllsearchpath: in  	  *":$testbindir:"*) ;; -	  *) dllsearchpath="$dllsearchpath:$testbindir";; +	  ::) dllsearchpath=$testbindir;; +	  *) func_append dllsearchpath ":$testbindir";;  	  esac  	  ;;  	esac @@ -1599,7 +5589,7 @@ EOF        -l*)  	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then  	  case $host in -	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*) +	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)  	    # These systems don't actually have a C or math library (as such)  	    continue  	    ;; @@ -1613,7 +5603,7 @@ EOF  	    ;;  	  *-*-rhapsody* | *-*-darwin1.[012])  	    # Rhapsody C and math libraries are in the System framework -	    deplibs="$deplibs -framework System" +	    func_append deplibs " System.ltframework"  	    continue  	    ;;  	  *-*-sco3.2v5* | *-*-sco5v6*) @@ -1633,24 +5623,34 @@ EOF  	   ;;  	 esac  	fi -	deplibs="$deplibs $arg" +	func_append deplibs " $arg" +	continue +	;; + +      -module) +	module=yes  	continue  	;;        # Tru64 UNIX uses -model [arg] to determine the layout of C++        # classes, name mangling, and exception handling. -      -model) -	compile_command="$compile_command $arg" -	compiler_flags="$compiler_flags $arg" -	finalize_command="$finalize_command $arg" +      # Darwin uses the -arch flag to determine output architecture. +      -model|-arch|-isysroot|--sysroot) +	func_append compiler_flags " $arg" +	func_append compile_command " $arg" +	func_append finalize_command " $arg"  	prev=xcompiler  	continue  	;; -     -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) -	compiler_flags="$compiler_flags $arg" -	compile_command="$compile_command $arg" -	finalize_command="$finalize_command $arg" +      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) +	func_append compiler_flags " $arg" +	func_append compile_command " $arg" +	func_append finalize_command " $arg" +	case "$new_inherited_linker_flags " in +	    *" $arg "*) ;; +	    * ) func_append new_inherited_linker_flags " $arg" ;; +	esac  	continue  	;; @@ -1659,44 +5659,6 @@ EOF  	continue  	;; -      -module) -	module=yes -	continue -	;; - -      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler -      # -r[0-9][0-9]* specifies the processor on the SGI compiler -      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler -      # +DA*, +DD* enable 64-bit mode on the HP compiler -      # -q* pass through compiler args for the IBM compiler -      # -m* pass through architecture-specific compiler args for GCC -      # -m*, -t[45]*, -txscale* pass through architecture-specific -      # compiler args for GCC -      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC -      # -F/path gives path to uninstalled frameworks, gcc on darwin -      # @file GCC response files -      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) - -	# Unknown arguments in both finalize_command and compile_command need -	# to be aesthetically quoted because they are evaled later. -	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` -	case $arg in -	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"") -	  arg="\"$arg\"" -	  ;; -	esac -        compile_command="$compile_command $arg" -        finalize_command="$finalize_command $arg" -        compiler_flags="$compiler_flags $arg" -        continue -        ;; - -      -shrext) -	prev=shrext -	continue -	;; -        -no-fast-install)  	fast_install=no  	continue @@ -1704,11 +5666,11 @@ EOF        -no-install)  	case $host in -	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*) +	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)  	  # The PATH hackery in wrapper scripts is required on Windows  	  # and Darwin in order for the loader to find any dlls it needs. -	  $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 -	  $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 +	  func_warning "\`-no-install' is ignored for $host" +	  func_warning "assuming \`-no-fast-install' instead"  	  fast_install=no  	  ;;  	*) no_install=yes ;; @@ -1749,22 +5711,36 @@ EOF  	;;        -R*) -	dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` +	func_stripname '-R' '' "$arg" +	dir=$func_stripname_result  	# We need an absolute path.  	case $dir in  	[\\/]* | [A-Za-z]:[\\/]*) ;; +	=*) +	  func_stripname '=' '' "$dir" +	  dir=$lt_sysroot$func_stripname_result +	  ;;  	*) -	  $echo "$modename: only absolute run-paths are allowed" 1>&2 -	  exit $EXIT_FAILURE +	  func_fatal_error "only absolute run-paths are allowed"  	  ;;  	esac  	case "$xrpath " in  	*" $dir "*) ;; -	*) xrpath="$xrpath $dir" ;; +	*) func_append xrpath " $dir" ;;  	esac  	continue  	;; +      -shared) +	# The effects of -shared are defined in a previous loop. +	continue +	;; + +      -shrext) +	prev=shrext +	continue +	;; +        -static | -static-libtool-libs)  	# The effects of -static are defined in a previous loop.  	# We used to do the same as -all-static on platforms that @@ -1783,47 +5759,49 @@ EOF  	prev=vinfo  	continue  	;; +        -version-number)  	prev=vinfo  	vinfo_number=yes  	continue  	;; +      -weak) +        prev=weak +	continue +	;; +        -Wc,*) -	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` +	func_stripname '-Wc,' '' "$arg" +	args=$func_stripname_result  	arg=  	save_ifs="$IFS"; IFS=','  	for flag in $args; do  	  IFS="$save_ifs" -	  case $flag in -	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"") -	    flag="\"$flag\"" -	    ;; -	  esac -	  arg="$arg $wl$flag" -	  compiler_flags="$compiler_flags $flag" +          func_quote_for_eval "$flag" +	  func_append arg " $func_quote_for_eval_result" +	  func_append compiler_flags " $func_quote_for_eval_result"  	done  	IFS="$save_ifs" -	arg=`$echo "X$arg" | $Xsed -e "s/^ //"` +	func_stripname ' ' '' "$arg" +	arg=$func_stripname_result  	;;        -Wl,*) -	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` +	func_stripname '-Wl,' '' "$arg" +	args=$func_stripname_result  	arg=  	save_ifs="$IFS"; IFS=','  	for flag in $args; do  	  IFS="$save_ifs" -	  case $flag in -	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"") -	    flag="\"$flag\"" -	    ;; -	  esac -	  arg="$arg $wl$flag" -	  compiler_flags="$compiler_flags $wl$flag" -	  linker_flags="$linker_flags $flag" +          func_quote_for_eval "$flag" +	  func_append arg " $wl$func_quote_for_eval_result" +	  func_append compiler_flags " $wl$func_quote_for_eval_result" +	  func_append linker_flags " $func_quote_for_eval_result"  	done  	IFS="$save_ifs" -	arg=`$echo "X$arg" | $Xsed -e "s/^ //"` +	func_stripname ' ' '' "$arg" +	arg=$func_stripname_result  	;;        -Xcompiler) @@ -1841,53 +5819,68 @@ EOF  	continue  	;; +      # -msg_* for osf cc +      -msg_*) +	func_quote_for_eval "$arg" +	arg="$func_quote_for_eval_result" +	;; + +      # Flags to be passed through unchanged, with rationale: +      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler +      # -r[0-9][0-9]*        specify processor for the SGI compiler +      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler +      # +DA*, +DD*           enable 64-bit mode for the HP compiler +      # -q*                  compiler args for the IBM compiler +      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC +      # -F/path              path to uninstalled frameworks, gcc on darwin +      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC +      # @file                GCC response files +      # -tp=*                Portland pgcc target processor selection +      # --sysroot=*          for sysroot support +      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization +      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ +      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ +      -O*|-flto*|-fwhopr*|-fuse-linker-plugin) +        func_quote_for_eval "$arg" +	arg="$func_quote_for_eval_result" +        func_append compile_command " $arg" +        func_append finalize_command " $arg" +        func_append compiler_flags " $arg" +        continue +        ;; +        # Some other compiler flag.        -* | +*) -	# Unknown arguments in both finalize_command and compile_command need -	# to be aesthetically quoted because they are evaled later. -	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` -	case $arg in -	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"") -	  arg="\"$arg\"" -	  ;; -	esac +        func_quote_for_eval "$arg" +	arg="$func_quote_for_eval_result"  	;;        *.$objext)  	# A standard object. -	objs="$objs $arg" +	func_append objs " $arg"  	;;        *.lo)  	# A libtool-controlled object.  	# Check to see that this really is a libtool object. -	if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then +	if func_lalib_unsafe_p "$arg"; then  	  pic_object=  	  non_pic_object=  	  # Read the .lo file -	  # If there is no directory component, then add one. -	  case $arg in -	  */* | *\\*) . $arg ;; -	  *) . ./$arg ;; -	  esac +	  func_source "$arg" -	  if test -z "$pic_object" || \ +	  if test -z "$pic_object" ||  	     test -z "$non_pic_object" || -	     test "$pic_object" = none && \ +	     test "$pic_object" = none &&  	     test "$non_pic_object" = none; then -	    $echo "$modename: cannot find name of object for \`$arg'" 1>&2 -	    exit $EXIT_FAILURE +	    func_fatal_error "cannot find name of object for \`$arg'"  	  fi  	  # Extract subdirectory from the argument. -	  xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` -	  if test "X$xdir" = "X$arg"; then -	    xdir= - 	  else -	    xdir="$xdir/" -	  fi +	  func_dirname "$arg" "/" "" +	  xdir="$func_dirname_result"  	  if test "$pic_object" != none; then  	    # Prepend the subdirectory the object is found in. @@ -1895,7 +5888,7 @@ EOF  	    if test "$prev" = dlfiles; then  	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then -		dlfiles="$dlfiles $pic_object" +		func_append dlfiles " $pic_object"  		prev=  		continue  	      else @@ -1907,12 +5900,12 @@ EOF  	    # CHECK ME:  I think I busted this.  -Ossama  	    if test "$prev" = dlprefiles; then  	      # Preload the old-style object. -	      dlprefiles="$dlprefiles $pic_object" +	      func_append dlprefiles " $pic_object"  	      prev=  	    fi  	    # A PIC object. -	    libobjs="$libobjs $pic_object" +	    func_append libobjs " $pic_object"  	    arg="$pic_object"  	  fi @@ -1922,7 +5915,7 @@ EOF  	    non_pic_object="$xdir$non_pic_object"  	    # A standard non-PIC object -	    non_pic_objects="$non_pic_objects $non_pic_object" +	    func_append non_pic_objects " $non_pic_object"  	    if test -z "$pic_object" || test "$pic_object" = none ; then  	      arg="$non_pic_object"  	    fi @@ -1930,52 +5923,47 @@ EOF  	    # If the PIC object exists, use it instead.  	    # $xdir was prepended to $pic_object above.  	    non_pic_object="$pic_object" -	    non_pic_objects="$non_pic_objects $non_pic_object" +	    func_append non_pic_objects " $non_pic_object"  	  fi  	else  	  # Only an error if not doing a dry-run. -	  if test -z "$run"; then -	    $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 -	    exit $EXIT_FAILURE -	  else -	    # Dry-run case. - +	  if $opt_dry_run; then  	    # Extract subdirectory from the argument. -	    xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` -	    if test "X$xdir" = "X$arg"; then -	      xdir= -	    else -	      xdir="$xdir/" -	    fi - -	    pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` -	    non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` -	    libobjs="$libobjs $pic_object" -	    non_pic_objects="$non_pic_objects $non_pic_object" +	    func_dirname "$arg" "/" "" +	    xdir="$func_dirname_result" + +	    func_lo2o "$arg" +	    pic_object=$xdir$objdir/$func_lo2o_result +	    non_pic_object=$xdir$func_lo2o_result +	    func_append libobjs " $pic_object" +	    func_append non_pic_objects " $non_pic_object" +	  else +	    func_fatal_error "\`$arg' is not a valid libtool object"  	  fi  	fi  	;;        *.$libext)  	# An archive. -	deplibs="$deplibs $arg" -	old_deplibs="$old_deplibs $arg" +	func_append deplibs " $arg" +	func_append old_deplibs " $arg"  	continue  	;;        *.la)  	# A libtool-controlled library. +	func_resolve_sysroot "$arg"  	if test "$prev" = dlfiles; then  	  # This library was specified with -dlopen. -	  dlfiles="$dlfiles $arg" +	  func_append dlfiles " $func_resolve_sysroot_result"  	  prev=  	elif test "$prev" = dlprefiles; then  	  # The library was specified with -dlpreopen. -	  dlprefiles="$dlprefiles $arg" +	  func_append dlprefiles " $func_resolve_sysroot_result"  	  prev=  	else -	  deplibs="$deplibs $arg" +	  func_append deplibs " $func_resolve_sysroot_result"  	fi  	continue  	;; @@ -1984,70 +5972,53 @@ EOF        *)  	# Unknown arguments in both finalize_command and compile_command need  	# to be aesthetically quoted because they are evaled later. -	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` -	case $arg in -	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"") -	  arg="\"$arg\"" -	  ;; -	esac +	func_quote_for_eval "$arg" +	arg="$func_quote_for_eval_result"  	;;        esac # arg        # Now actually substitute the argument into the commands.        if test -n "$arg"; then -	compile_command="$compile_command $arg" -	finalize_command="$finalize_command $arg" +	func_append compile_command " $arg" +	func_append finalize_command " $arg"        fi      done # argument parsing loop -    if test -n "$prev"; then -      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 -      $echo "$help" 1>&2 -      exit $EXIT_FAILURE -    fi +    test -n "$prev" && \ +      func_fatal_help "the \`$prevarg' option requires an argument"      if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then        eval arg=\"$export_dynamic_flag_spec\" -      compile_command="$compile_command $arg" -      finalize_command="$finalize_command $arg" +      func_append compile_command " $arg" +      func_append finalize_command " $arg"      fi      oldlibs=      # calculate the name of the file, without its directory -    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` +    func_basename "$output" +    outputname="$func_basename_result"      libobjs_save="$libobjs"      if test -n "$shlibpath_var"; then        # get the directories listed in $shlibpath_var -      eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` +      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`      else        shlib_search_path=      fi      eval sys_lib_search_path=\"$sys_lib_search_path_spec\"      eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" -    output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` -    if test "X$output_objdir" = "X$output"; then -      output_objdir="$objdir" -    else -      output_objdir="$output_objdir/$objdir" -    fi +    func_dirname "$output" "/" "" +    output_objdir="$func_dirname_result$objdir" +    func_to_tool_file "$output_objdir/" +    tool_output_objdir=$func_to_tool_file_result      # Create the object directory. -    if test ! -d "$output_objdir"; then -      $show "$mkdir $output_objdir" -      $run $mkdir $output_objdir -      exit_status=$? -      if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then -	exit $exit_status -      fi -    fi +    func_mkdir_p "$output_objdir"      # Determine the type of output      case $output in      "") -      $echo "$modename: you must specify an output file" 1>&2 -      $echo "$help" 1>&2 -      exit $EXIT_FAILURE +      func_fatal_help "you must specify an output file"        ;;      *.$libext) linkmode=oldlib ;;      *.lo | *.$objext) linkmode=obj ;; @@ -2055,27 +6026,18 @@ EOF      *) linkmode=prog ;; # Anything else should be a program.      esac -    case $host in -    *cygwin* | *mingw* | *pw32*) -      # don't eliminate duplications in $postdeps and $predeps -      duplicate_compiler_generated_deps=yes -      ;; -    *) -      duplicate_compiler_generated_deps=$duplicate_deps -      ;; -    esac      specialdeplibs=      libs=      # Find all interdependent deplibs by searching for libraries      # that are linked more than once (e.g. -la -lb -la)      for deplib in $deplibs; do -      if test "X$duplicate_deps" = "Xyes" ; then +      if $opt_preserve_dup_deps ; then  	case "$libs " in -	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; +	*" $deplib "*) func_append specialdeplibs " $deplib" ;;  	esac        fi -      libs="$libs $deplib" +      func_append libs " $deplib"      done      if test "$linkmode" = lib; then @@ -2085,12 +6047,12 @@ EOF        # $postdeps and mark them as special (i.e., whose duplicates are        # not to be eliminated).        pre_post_deps= -      if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then +      if $opt_duplicate_compiler_generated_deps; then  	for pre_post_dep in $predeps $postdeps; do  	  case "$pre_post_deps " in -	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; +	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;  	  esac -	  pre_post_deps="$pre_post_deps $pre_post_dep" +	  func_append pre_post_deps " $pre_post_dep"  	done        fi        pre_post_deps= @@ -2101,15 +6063,16 @@ EOF      newlib_search_path=      need_relink=no # whether we're linking any uninstalled libtool libraries      notinst_deplibs= # not-installed libtool libraries +    notinst_path= # paths that contain not-installed libtool libraries +      case $linkmode in      lib) -	passes="conv link" +	passes="conv dlpreopen link"  	for file in $dlfiles $dlprefiles; do  	  case $file in  	  *.la) ;;  	  *) -	    $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 -	    exit $EXIT_FAILURE +	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"  	    ;;  	  esac  	done @@ -2125,7 +6088,20 @@ EOF      *)  passes="conv"  	;;      esac +      for pass in $passes; do +      # The preopen pass in lib mode reverses $deplibs; put it back here +      # so that -L comes before libs that need it for instance... +      if test "$linkmode,$pass" = "lib,link"; then +	## FIXME: Find the place where the list is rebuilt in the wrong +	##        order, and fix it there properly +        tmp_deplibs= +	for deplib in $deplibs; do +	  tmp_deplibs="$deplib $tmp_deplibs" +	done +	deplibs="$tmp_deplibs" +      fi +        if test "$linkmode,$pass" = "lib,link" ||  	 test "$linkmode,$pass" = "prog,scan"; then  	libs="$deplibs" @@ -2138,11 +6114,35 @@ EOF  	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;  	esac        fi +      if test "$linkmode,$pass" = "lib,dlpreopen"; then +	# Collect and forward deplibs of preopened libtool libs +	for lib in $dlprefiles; do +	  # Ignore non-libtool-libs +	  dependency_libs= +	  func_resolve_sysroot "$lib" +	  case $lib in +	  *.la)	func_source "$func_resolve_sysroot_result" ;; +	  esac + +	  # Collect preopened libtool deplibs, except any this library +	  # has declared as weak libs +	  for deplib in $dependency_libs; do +	    func_basename "$deplib" +            deplib_base=$func_basename_result +	    case " $weak_libs " in +	    *" $deplib_base "*) ;; +	    *) func_append deplibs " $deplib" ;; +	    esac +	  done +	done +	libs="$dlprefiles" +      fi        if test "$pass" = dlopen; then  	# Collect dlpreopened libraries  	save_deplibs="$deplibs"  	deplibs=        fi +        for deplib in $libs; do  	lib=  	found=no @@ -2152,16 +6152,23 @@ EOF  	    compile_deplibs="$deplib $compile_deplibs"  	    finalize_deplibs="$deplib $finalize_deplibs"  	  else -	    compiler_flags="$compiler_flags $deplib" +	    func_append compiler_flags " $deplib" +	    if test "$linkmode" = lib ; then +		case "$new_inherited_linker_flags " in +		    *" $deplib "*) ;; +		    * ) func_append new_inherited_linker_flags " $deplib" ;; +		esac +	    fi  	  fi  	  continue  	  ;;  	-l*)  	  if test "$linkmode" != lib && test "$linkmode" != prog; then -	    $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 +	    func_warning "\`-l' is ignored for archives/objects"  	    continue  	  fi -	  name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` +	  func_stripname '-l' '' "$deplib" +	  name=$func_stripname_result  	  if test "$linkmode" = lib; then  	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"  	  else @@ -2197,21 +6204,17 @@ EOF  	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then  	      case " $predeps $postdeps " in  	      *" $deplib "*) -		if (${SED} -e '2q' $lib | -                    grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then +		if func_lalib_p "$lib"; then  		  library_names=  		  old_library= -		  case $lib in -		  */* | *\\*) . $lib ;; -		  *) . ./$lib ;; -		  esac +		  func_source "$lib"  		  for l in $old_library $library_names; do  		    ll="$l"  		  done  		  if test "X$ll" = "X$old_library" ; then # only static version available  		    found=no -		    ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` -		    test "X$ladir" = "X$lib" && ladir="." +		    func_dirname "$lib" "" "." +		    ladir="$func_dirname_result"  		    lib=$ladir/$old_library  		    if test "$linkmode,$pass" = "prog,link"; then  		      compile_deplibs="$deplib $compile_deplibs" @@ -2223,19 +6226,36 @@ EOF  		    continue  		  fi  		fi -	        ;; +		;;  	      *) ;;  	      esac  	    fi  	  fi  	  ;; # -l +	*.ltframework) +	  if test "$linkmode,$pass" = "prog,link"; then +	    compile_deplibs="$deplib $compile_deplibs" +	    finalize_deplibs="$deplib $finalize_deplibs" +	  else +	    deplibs="$deplib $deplibs" +	    if test "$linkmode" = lib ; then +		case "$new_inherited_linker_flags " in +		    *" $deplib "*) ;; +		    * ) func_append new_inherited_linker_flags " $deplib" ;; +		esac +	    fi +	  fi +	  continue +	  ;;  	-L*)  	  case $linkmode in  	  lib)  	    deplibs="$deplib $deplibs"  	    test "$pass" = conv && continue  	    newdependency_libs="$deplib $newdependency_libs" -	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` +	    func_stripname '-L' '' "$deplib" +	    func_resolve_sysroot "$func_stripname_result" +	    func_append newlib_search_path " $func_resolve_sysroot_result"  	    ;;  	  prog)  	    if test "$pass" = conv; then @@ -2248,27 +6268,34 @@ EOF  	      compile_deplibs="$deplib $compile_deplibs"  	      finalize_deplibs="$deplib $finalize_deplibs"  	    fi -	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` +	    func_stripname '-L' '' "$deplib" +	    func_resolve_sysroot "$func_stripname_result" +	    func_append newlib_search_path " $func_resolve_sysroot_result"  	    ;;  	  *) -	    $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 +	    func_warning "\`-L' is ignored for archives/objects"  	    ;;  	  esac # linkmode  	  continue  	  ;; # -L  	-R*)  	  if test "$pass" = link; then -	    dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` +	    func_stripname '-R' '' "$deplib" +	    func_resolve_sysroot "$func_stripname_result" +	    dir=$func_resolve_sysroot_result  	    # Make sure the xrpath contains only unique directories.  	    case "$xrpath " in  	    *" $dir "*) ;; -	    *) xrpath="$xrpath $dir" ;; +	    *) func_append xrpath " $dir" ;;  	    esac  	  fi  	  deplibs="$deplib $deplibs"  	  continue  	  ;; -	*.la) lib="$deplib" ;; +	*.la) +	  func_resolve_sysroot "$deplib" +	  lib=$func_resolve_sysroot_result +	  ;;  	*.$libext)  	  if test "$pass" = conv; then  	    deplibs="$deplib $deplibs" @@ -2276,35 +6303,41 @@ EOF  	  fi  	  case $linkmode in  	  lib) -	    valid_a_lib=no -	    case $deplibs_check_method in -	      match_pattern*) -		set dummy $deplibs_check_method -	        match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` -		if eval $echo \"$deplib\" 2>/dev/null \ -		    | $SED 10q \ +	    # Linking convenience modules into shared libraries is allowed, +	    # but linking other static libraries is non-portable. +	    case " $dlpreconveniencelibs " in +	    *" $deplib "*) ;; +	    *) +	      valid_a_lib=no +	      case $deplibs_check_method in +		match_pattern*) +		  set dummy $deplibs_check_method; shift +		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` +		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \  		    | $EGREP "$match_pattern_regex" > /dev/null; then -		  valid_a_lib=yes -		fi +		    valid_a_lib=yes +		  fi  		;; -	      pass_all) -		valid_a_lib=yes +		pass_all) +		  valid_a_lib=yes  		;; -            esac -	    if test "$valid_a_lib" != yes; then -	      $echo -	      $echo "*** Warning: Trying to link with static lib archive $deplib." -	      $echo "*** I have the capability to make that library automatically link in when" -	      $echo "*** you link to this library.  But I can only do this if you have a" -	      $echo "*** shared version of the library, which you do not appear to have" -	      $echo "*** because the file extensions .$libext of this argument makes me believe" -	      $echo "*** that it is just a static archive that I should not used here." -	    else -	      $echo -	      $echo "*** Warning: Linking the shared library $output against the" -	      $echo "*** static library $deplib is not portable!" -	      deplibs="$deplib $deplibs" -	    fi +	      esac +	      if test "$valid_a_lib" != yes; then +		echo +		$ECHO "*** Warning: Trying to link with static lib archive $deplib." +		echo "*** I have the capability to make that library automatically link in when" +		echo "*** you link to this library.  But I can only do this if you have a" +		echo "*** shared version of the library, which you do not appear to have" +		echo "*** because the file extensions .$libext of this argument makes me believe" +		echo "*** that it is just a static archive that I should not use here." +	      else +		echo +		$ECHO "*** Warning: Linking the shared library $output against the" +		$ECHO "*** static library $deplib is not portable!" +		deplibs="$deplib $deplibs" +	      fi +	      ;; +	    esac  	    continue  	    ;;  	  prog) @@ -2325,11 +6358,11 @@ EOF  	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then  	      # If there is no dlopen support or we're linking statically,  	      # we need to preload. -	      newdlprefiles="$newdlprefiles $deplib" +	      func_append newdlprefiles " $deplib"  	      compile_deplibs="$deplib $compile_deplibs"  	      finalize_deplibs="$deplib $finalize_deplibs"  	    else -	      newdlfiles="$newdlfiles $deplib" +	      func_append newdlfiles " $deplib"  	    fi  	  fi  	  continue @@ -2339,21 +6372,18 @@ EOF  	  continue  	  ;;  	esac # case $deplib +  	if test "$found" = yes || test -f "$lib"; then :  	else -	  $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 -	  exit $EXIT_FAILURE +	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"  	fi  	# Check to see that this really is a libtool archive. -	if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : -	else -	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 -	  exit $EXIT_FAILURE -	fi +	func_lalib_unsafe_p "$lib" \ +	  || func_fatal_error "\`$lib' is not a valid libtool archive" -	ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` -	test "X$ladir" = "X$lib" && ladir="." +	func_dirname "$lib" "" "." +	ladir="$func_dirname_result"  	dlname=  	dlopen= @@ -2361,6 +6391,7 @@ EOF  	libdir=  	library_names=  	old_library= +	inherited_linker_flags=  	# If the library was installed with an old release of libtool,  	# it will not redefine variables installed, or shouldnotlink  	installed=yes @@ -2369,16 +6400,24 @@ EOF  	# Read the .la file -	case $lib in -	*/* | *\\*) . $lib ;; -	*) . ./$lib ;; -	esac - +	func_source "$lib" + +	# Convert "-framework foo" to "foo.ltframework" +	if test -n "$inherited_linker_flags"; then +	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` +	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do +	    case " $new_inherited_linker_flags " in +	      *" $tmp_inherited_linker_flag "*) ;; +	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; +	    esac +	  done +	fi +	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`  	if test "$linkmode,$pass" = "lib,link" ||  	   test "$linkmode,$pass" = "prog,scan" ||  	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then -	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen" -	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" +	  test -n "$dlopen" && func_append dlfiles " $dlopen" +	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"  	fi  	if test "$pass" = conv; then @@ -2386,45 +6425,47 @@ EOF  	  deplibs="$lib $deplibs"  	  if test -z "$libdir"; then  	    if test -z "$old_library"; then -	      $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 -	      exit $EXIT_FAILURE +	      func_fatal_error "cannot find name of link library for \`$lib'"  	    fi  	    # It is a libtool convenience library, so add in its objects. -	    convenience="$convenience $ladir/$objdir/$old_library" -	    old_convenience="$old_convenience $ladir/$objdir/$old_library" -	    tmp_libs= -	    for deplib in $dependency_libs; do -	      deplibs="$deplib $deplibs" -              if test "X$duplicate_deps" = "Xyes" ; then -	        case "$tmp_libs " in -	        *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; -	        esac -              fi -	      tmp_libs="$tmp_libs $deplib" -	    done +	    func_append convenience " $ladir/$objdir/$old_library" +	    func_append old_convenience " $ladir/$objdir/$old_library"  	  elif test "$linkmode" != prog && test "$linkmode" != lib; then -	    $echo "$modename: \`$lib' is not a convenience library" 1>&2 -	    exit $EXIT_FAILURE +	    func_fatal_error "\`$lib' is not a convenience library"  	  fi +	  tmp_libs= +	  for deplib in $dependency_libs; do +	    deplibs="$deplib $deplibs" +	    if $opt_preserve_dup_deps ; then +	      case "$tmp_libs " in +	      *" $deplib "*) func_append specialdeplibs " $deplib" ;; +	      esac +	    fi +	    func_append tmp_libs " $deplib" +	  done  	  continue  	fi # $pass = conv  	# Get the name of the library we link against.  	linklib= -	for l in $old_library $library_names; do -	  linklib="$l" -	done +	if test -n "$old_library" && +	   { test "$prefer_static_libs" = yes || +	     test "$prefer_static_libs,$installed" = "built,no"; }; then +	  linklib=$old_library +	else +	  for l in $old_library $library_names; do +	    linklib="$l" +	  done +	fi  	if test -z "$linklib"; then -	  $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 -	  exit $EXIT_FAILURE +	  func_fatal_error "cannot find name of link library for \`$lib'"  	fi  	# This library was specified with -dlopen.  	if test "$pass" = dlopen; then  	  if test -z "$libdir"; then -	    $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 -	    exit $EXIT_FAILURE +	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"  	  fi  	  if test -z "$dlname" ||  	     test "$dlopen_support" != yes || @@ -2433,9 +6474,9 @@ EOF  	    # statically, we need to preload.  We also need to preload any  	    # dependent libraries so libltdl's deplib preloader doesn't  	    # bomb out in the load deplibs phase. -	    dlprefiles="$dlprefiles $lib $dependency_libs" +	    func_append dlprefiles " $lib $dependency_libs"  	  else -	    newdlfiles="$newdlfiles $lib" +	    func_append newdlfiles " $lib"  	  fi  	  continue  	fi # $pass = dlopen @@ -2446,24 +6487,25 @@ EOF  	*)  	  abs_ladir=`cd "$ladir" && pwd`  	  if test -z "$abs_ladir"; then -	    $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 -	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 +	    func_warning "cannot determine absolute directory name of \`$ladir'" +	    func_warning "passing it literally to the linker, although it might fail"  	    abs_ladir="$ladir"  	  fi  	  ;;  	esac -	laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` +	func_basename "$lib" +	laname="$func_basename_result"  	# Find the relevant object directory and library name.  	if test "X$installed" = Xyes; then -	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then -	    $echo "$modename: warning: library \`$lib' was moved." 1>&2 +	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then +	    func_warning "library \`$lib' was moved."  	    dir="$ladir"  	    absdir="$abs_ladir"  	    libdir="$abs_ladir"  	  else -	    dir="$libdir" -	    absdir="$libdir" +	    dir="$lt_sysroot$libdir" +	    absdir="$lt_sysroot$libdir"  	  fi  	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes  	else @@ -2471,32 +6513,62 @@ EOF  	    dir="$ladir"  	    absdir="$abs_ladir"  	    # Remove this search path later -	    notinst_path="$notinst_path $abs_ladir" +	    func_append notinst_path " $abs_ladir"  	  else  	    dir="$ladir/$objdir"  	    absdir="$abs_ladir/$objdir"  	    # Remove this search path later -	    notinst_path="$notinst_path $abs_ladir" +	    func_append notinst_path " $abs_ladir"  	  fi  	fi # $installed = yes -	name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` +	func_stripname 'lib' '.la' "$laname" +	name=$func_stripname_result  	# This library was specified with -dlpreopen.  	if test "$pass" = dlpreopen; then -	  if test -z "$libdir"; then -	    $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 -	    exit $EXIT_FAILURE -	  fi -	  # Prefer using a static library (so that no silly _DYNAMIC symbols -	  # are required to link). -	  if test -n "$old_library"; then -	    newdlprefiles="$newdlprefiles $dir/$old_library" -	  # Otherwise, use the dlname, so that lt_dlopen finds it. -	  elif test -n "$dlname"; then -	    newdlprefiles="$newdlprefiles $dir/$dlname" -	  else -	    newdlprefiles="$newdlprefiles $dir/$linklib" +	  if test -z "$libdir" && test "$linkmode" = prog; then +	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"  	  fi +	  case "$host" in +	    # special handling for platforms with PE-DLLs. +	    *cygwin* | *mingw* | *cegcc* ) +	      # Linker will automatically link against shared library if both +	      # static and shared are present.  Therefore, ensure we extract +	      # symbols from the import library if a shared library is present +	      # (otherwise, the dlopen module name will be incorrect).  We do +	      # this by putting the import library name into $newdlprefiles. +	      # We recover the dlopen module name by 'saving' the la file +	      # name in a special purpose variable, and (later) extracting the +	      # dlname from the la file. +	      if test -n "$dlname"; then +	        func_tr_sh "$dir/$linklib" +	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" +	        func_append newdlprefiles " $dir/$linklib" +	      else +	        func_append newdlprefiles " $dir/$old_library" +	        # Keep a list of preopened convenience libraries to check +	        # that they are being used correctly in the link pass. +	        test -z "$libdir" && \ +	          func_append dlpreconveniencelibs " $dir/$old_library" +	      fi +	    ;; +	    * ) +	      # Prefer using a static library (so that no silly _DYNAMIC symbols +	      # are required to link). +	      if test -n "$old_library"; then +	        func_append newdlprefiles " $dir/$old_library" +	        # Keep a list of preopened convenience libraries to check +	        # that they are being used correctly in the link pass. +	        test -z "$libdir" && \ +	          func_append dlpreconveniencelibs " $dir/$old_library" +	      # Otherwise, use the dlname, so that lt_dlopen finds it. +	      elif test -n "$dlname"; then +	        func_append newdlprefiles " $dir/$dlname" +	      else +	        func_append newdlprefiles " $dir/$linklib" +	      fi +	    ;; +	  esac  	fi # $pass = dlpreopen  	if test -z "$libdir"; then @@ -2514,7 +6586,7 @@ EOF  	if test "$linkmode" = prog && test "$pass" != link; then -	  newlib_search_path="$newlib_search_path $ladir" +	  func_append newlib_search_path " $ladir"  	  deplibs="$lib $deplibs"  	  linkalldeplibs=no @@ -2526,7 +6598,10 @@ EOF  	  tmp_libs=  	  for deplib in $dependency_libs; do  	    case $deplib in -	    -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test +	    -L*) func_stripname '-L' '' "$deplib" +	         func_resolve_sysroot "$func_stripname_result" +	         func_append newlib_search_path " $func_resolve_sysroot_result" +		 ;;  	    esac  	    # Need to link against all dependency_libs?  	    if test "$linkalldeplibs" = yes; then @@ -2536,12 +6611,12 @@ EOF  	      # or/and link against static libraries  	      newdependency_libs="$deplib $newdependency_libs"  	    fi -	    if test "X$duplicate_deps" = "Xyes" ; then +	    if $opt_preserve_dup_deps ; then  	      case "$tmp_libs " in -	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; +	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;  	      esac  	    fi -	    tmp_libs="$tmp_libs $deplib" +	    func_append tmp_libs " $deplib"  	  done # for deplib  	  continue  	fi # $linkmode = prog... @@ -2549,15 +6624,14 @@ EOF  	if test "$linkmode,$pass" = "prog,link"; then  	  if test -n "$library_names" &&  	     { { test "$prefer_static_libs" = no || -		 test "$prefer_static_libs,$installed" = "built,yes"; } || +	         test "$prefer_static_libs,$installed" = "built,yes"; } ||  	       test -z "$old_library"; }; then  	    # We need to hardcode the library path  	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then  	      # Make sure the rpath contains only unique directories. -	      case "$temp_rpath " in -	      *" $dir "*) ;; -	      *" $absdir "*) ;; -	      *) temp_rpath="$temp_rpath $absdir" ;; +	      case "$temp_rpath:" in +	      *"$absdir:"*) ;; +	      *) func_append temp_rpath "$absdir:" ;;  	      esac  	    fi @@ -2569,7 +6643,7 @@ EOF  	    *)  	      case "$compile_rpath " in  	      *" $absdir "*) ;; -	      *) compile_rpath="$compile_rpath $absdir" +	      *) func_append compile_rpath " $absdir" ;;  	      esac  	      ;;  	    esac @@ -2578,7 +6652,7 @@ EOF  	    *)  	      case "$finalize_rpath " in  	      *" $libdir "*) ;; -	      *) finalize_rpath="$finalize_rpath $libdir" +	      *) func_append finalize_rpath " $libdir" ;;  	      esac  	      ;;  	    esac @@ -2595,27 +6669,43 @@ EOF  	link_static=no # Whether the deplib will be linked statically  	use_static_libs=$prefer_static_libs -	if test "$use_static_libs" = built && test "$installed" = yes ; then +	if test "$use_static_libs" = built && test "$installed" = yes; then  	  use_static_libs=no  	fi  	if test -n "$library_names" &&  	   { test "$use_static_libs" = no || test -z "$old_library"; }; then -	  if test "$installed" = no; then -	    notinst_deplibs="$notinst_deplibs $lib" -	    need_relink=yes -	  fi +	  case $host in +	  *cygwin* | *mingw* | *cegcc*) +	      # No point in relinking DLLs because paths are not encoded +	      func_append notinst_deplibs " $lib" +	      need_relink=no +	    ;; +	  *) +	    if test "$installed" = no; then +	      func_append notinst_deplibs " $lib" +	      need_relink=yes +	    fi +	    ;; +	  esac  	  # This is a shared library -	  # Warn about portability, can't link against -module's on -	  # some systems (darwin) -	  if test "$shouldnotlink" = yes && test "$pass" = link ; then -	    $echo +	  # Warn about portability, can't link against -module's on some +	  # systems (darwin).  Don't bleat about dlopened modules though! +	  dlopenmodule="" +	  for dlpremoduletest in $dlprefiles; do +	    if test "X$dlpremoduletest" = "X$lib"; then +	      dlopenmodule="$dlpremoduletest" +	      break +	    fi +	  done +	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then +	    echo  	    if test "$linkmode" = prog; then -	      $echo "*** Warning: Linking the executable $output against the loadable module" +	      $ECHO "*** Warning: Linking the executable $output against the loadable module"  	    else -	      $echo "*** Warning: Linking the shared library $output against the loadable module" +	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"  	    fi -	    $echo "*** $linklib is not portable!" +	    $ECHO "*** $linklib is not portable!"  	  fi  	  if test "$linkmode" = lib &&  	     test "$hardcode_into_libs" = yes; then @@ -2627,7 +6717,7 @@ EOF  	    *)  	      case "$compile_rpath " in  	      *" $absdir "*) ;; -	      *) compile_rpath="$compile_rpath $absdir" +	      *) func_append compile_rpath " $absdir" ;;  	      esac  	      ;;  	    esac @@ -2636,7 +6726,7 @@ EOF  	    *)  	      case "$finalize_rpath " in  	      *" $libdir "*) ;; -	      *) finalize_rpath="$finalize_rpath $libdir" +	      *) func_append finalize_rpath " $libdir" ;;  	      esac  	      ;;  	    esac @@ -2645,17 +6735,19 @@ EOF  	  if test -n "$old_archive_from_expsyms_cmds"; then  	    # figure out the soname  	    set dummy $library_names -	    realname="$2" -	    shift; shift -	    libname=`eval \\$echo \"$libname_spec\"` +	    shift +	    realname="$1" +	    shift +	    libname=`eval "\\$ECHO \"$libname_spec\""`  	    # use dlname if we got it. it's perfectly good, no?  	    if test -n "$dlname"; then  	      soname="$dlname"  	    elif test -n "$soname_spec"; then  	      # bleh windows  	      case $host in -	      *cygwin* | mingw*) -		major=`expr $current - $age` +	      *cygwin* | mingw* | *cegcc*) +	        func_arith $current - $age +		major=$func_arith_result  		versuffix="-$major"  		;;  	      esac @@ -2666,43 +6758,29 @@ EOF  	    # Make a new name for the extract_expsyms_cmds to use  	    soroot="$soname" -	    soname=`$echo $soroot | ${SED} -e 's/^.*\///'` -	    newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" +	    func_basename "$soroot" +	    soname="$func_basename_result" +	    func_stripname 'lib' '.dll' "$soname" +	    newlib=libimp-$func_stripname_result.a  	    # If the library has no export list, then create one now  	    if test -f "$output_objdir/$soname-def"; then :  	    else -	      $show "extracting exported symbol list from \`$soname'" -	      save_ifs="$IFS"; IFS='~' -	      cmds=$extract_expsyms_cmds -	      for cmd in $cmds; do -		IFS="$save_ifs" -		eval cmd=\"$cmd\" -		$show "$cmd" -		$run eval "$cmd" || exit $? -	      done -	      IFS="$save_ifs" +	      func_verbose "extracting exported symbol list from \`$soname'" +	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'  	    fi  	    # Create $newlib  	    if test -f "$output_objdir/$newlib"; then :; else -	      $show "generating import library for \`$soname'" -	      save_ifs="$IFS"; IFS='~' -	      cmds=$old_archive_from_expsyms_cmds -	      for cmd in $cmds; do -		IFS="$save_ifs" -		eval cmd=\"$cmd\" -		$show "$cmd" -		$run eval "$cmd" || exit $? -	      done -	      IFS="$save_ifs" +	      func_verbose "generating import library for \`$soname'" +	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'  	    fi  	    # make sure the library variables are pointing to the new library  	    dir=$output_objdir  	    linklib=$newlib  	  fi # test -n "$old_archive_from_expsyms_cmds" -	  if test "$linkmode" = prog || test "$mode" != relink; then +	  if test "$linkmode" = prog || test "$opt_mode" != relink; then  	    add_shlibpath=  	    add_dir=  	    add= @@ -2717,17 +6795,21 @@ EOF  		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \  		    *-*-unixware7*) add_dir="-L$dir" ;;  		  *-*-darwin* ) -		    # if the lib is a module then we can not link against -		    # it, someone is ignoring the new warnings I added +		    # if the lib is a (non-dlopened) module then we can not +		    # link against it, someone is ignoring the earlier warnings  		    if /usr/bin/file -L $add 2> /dev/null | -                      $EGREP ": [^:]* bundle" >/dev/null ; then -		      $echo "** Warning, lib $linklib is a module, not a shared library" -		      if test -z "$old_library" ; then -		        $echo -		        $echo "** And there doesn't seem to be a static archive available" -		        $echo "** The link will probably fail, sorry" -		      else -		        add="$dir/$old_library" +			 $GREP ": [^:]* bundle" >/dev/null ; then +		      if test "X$dlopenmodule" != "X$lib"; then +			$ECHO "*** Warning: lib $linklib is a module, not a shared library" +			if test -z "$old_library" ; then +			  echo +			  echo "*** And there doesn't seem to be a static archive available" +			  echo "*** The link will probably fail, sorry" +			else +			  add="$dir/$old_library" +			fi +		      elif test -n "$old_library"; then +			add="$dir/$old_library"  		      fi  		    fi  		esac @@ -2745,7 +6827,8 @@ EOF  	      fi  	      ;;  	    relink) -	      if test "$hardcode_direct" = yes; then +	      if test "$hardcode_direct" = yes && +	         test "$hardcode_direct_absolute" = no; then  		add="$dir/$linklib"  	      elif test "$hardcode_minus_L" = yes; then  		add_dir="-L$dir" @@ -2753,7 +6836,7 @@ EOF  		if test -n "$inst_prefix_dir"; then  		  case $libdir in  		    [\\/]*) -		      add_dir="$add_dir -L$inst_prefix_dir$libdir" +		      func_append add_dir " -L$inst_prefix_dir$libdir"  		      ;;  		  esac  		fi @@ -2769,14 +6852,13 @@ EOF  	    esac  	    if test "$lib_linked" != yes; then -	      $echo "$modename: configuration error: unsupported hardcode properties" -	      exit $EXIT_FAILURE +	      func_fatal_configuration "unsupported hardcode properties"  	    fi  	    if test -n "$add_shlibpath"; then  	      case :$compile_shlibpath: in  	      *":$add_shlibpath:"*) ;; -	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; +	      *) func_append compile_shlibpath "$add_shlibpath:" ;;  	      esac  	    fi  	    if test "$linkmode" = prog; then @@ -2785,23 +6867,24 @@ EOF  	    else  	      test -n "$add_dir" && deplibs="$add_dir $deplibs"  	      test -n "$add" && deplibs="$add $deplibs" -	      if test "$hardcode_direct" != yes && \ -		 test "$hardcode_minus_L" != yes && \ +	      if test "$hardcode_direct" != yes && +		 test "$hardcode_minus_L" != yes &&  		 test "$hardcode_shlibpath_var" = yes; then  		case :$finalize_shlibpath: in  		*":$libdir:"*) ;; -		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; +		*) func_append finalize_shlibpath "$libdir:" ;;  		esac  	      fi  	    fi  	  fi -	  if test "$linkmode" = prog || test "$mode" = relink; then +	  if test "$linkmode" = prog || test "$opt_mode" = relink; then  	    add_shlibpath=  	    add_dir=  	    add=  	    # Finalize command for both is simple: just hardcode it. -	    if test "$hardcode_direct" = yes; then +	    if test "$hardcode_direct" = yes && +	       test "$hardcode_direct_absolute" = no; then  	      add="$libdir/$linklib"  	    elif test "$hardcode_minus_L" = yes; then  	      add_dir="-L$libdir" @@ -2809,15 +6892,15 @@ EOF  	    elif test "$hardcode_shlibpath_var" = yes; then  	      case :$finalize_shlibpath: in  	      *":$libdir:"*) ;; -	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; +	      *) func_append finalize_shlibpath "$libdir:" ;;  	      esac  	      add="-l$name"  	    elif test "$hardcode_automatic" = yes; then  	      if test -n "$inst_prefix_dir" &&  		 test -f "$inst_prefix_dir$libdir/$linklib" ; then -	        add="$inst_prefix_dir$libdir/$linklib" +		add="$inst_prefix_dir$libdir/$linklib"  	      else -	        add="$libdir/$linklib" +		add="$libdir/$linklib"  	      fi  	    else  	      # We cannot seem to hardcode it, guess we'll fake it. @@ -2826,7 +6909,7 @@ EOF  	      if test -n "$inst_prefix_dir"; then  		case $libdir in  		  [\\/]*) -		    add_dir="$add_dir -L$inst_prefix_dir$libdir" +		    func_append add_dir " -L$inst_prefix_dir$libdir"  		    ;;  		esac  	      fi @@ -2861,21 +6944,21 @@ EOF  	    # Just print a warning and add the library to dependency_libs so  	    # that the program can be linked against the static library. -	    $echo -	    $echo "*** Warning: This system can not link to static lib archive $lib." -	    $echo "*** I have the capability to make that library automatically link in when" -	    $echo "*** you link to this library.  But I can only do this if you have a" -	    $echo "*** shared version of the library, which you do not appear to have." +	    echo +	    $ECHO "*** Warning: This system can not link to static lib archive $lib." +	    echo "*** I have the capability to make that library automatically link in when" +	    echo "*** you link to this library.  But I can only do this if you have a" +	    echo "*** shared version of the library, which you do not appear to have."  	    if test "$module" = yes; then -	      $echo "*** But as you try to build a module library, libtool will still create " -	      $echo "*** a static module, that should work as long as the dlopening application" -	      $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." +	      echo "*** But as you try to build a module library, libtool will still create " +	      echo "*** a static module, that should work as long as the dlopening application" +	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."  	      if test -z "$global_symbol_pipe"; then -		$echo -		$echo "*** However, this would only work if libtool was able to extract symbol" -		$echo "*** lists from a program, using \`nm' or equivalent, but libtool could" -		$echo "*** not find such a program.  So, this module is probably useless." -		$echo "*** \`nm' from GNU binutils and a full rebuild may help." +		echo +		echo "*** However, this would only work if libtool was able to extract symbol" +		echo "*** lists from a program, using \`nm' or equivalent, but libtool could" +		echo "*** not find such a program.  So, this module is probably useless." +		echo "*** \`nm' from GNU binutils and a full rebuild may help."  	      fi  	      if test "$build_old_libs" = no; then  		build_libtool_libs=module @@ -2899,126 +6982,113 @@ EOF  	    temp_deplibs=  	    for libdir in $dependency_libs; do  	      case $libdir in -	      -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` +	      -R*) func_stripname '-R' '' "$libdir" +	           temp_xrpath=$func_stripname_result  		   case " $xrpath " in  		   *" $temp_xrpath "*) ;; -		   *) xrpath="$xrpath $temp_xrpath";; +		   *) func_append xrpath " $temp_xrpath";;  		   esac;; -	      *) temp_deplibs="$temp_deplibs $libdir";; +	      *) func_append temp_deplibs " $libdir";;  	      esac  	    done  	    dependency_libs="$temp_deplibs"  	  fi -	  newlib_search_path="$newlib_search_path $absdir" +	  func_append newlib_search_path " $absdir"  	  # Link against this library  	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"  	  # ... and its dependency_libs  	  tmp_libs=  	  for deplib in $dependency_libs; do  	    newdependency_libs="$deplib $newdependency_libs" -	    if test "X$duplicate_deps" = "Xyes" ; then +	    case $deplib in +              -L*) func_stripname '-L' '' "$deplib" +                   func_resolve_sysroot "$func_stripname_result";; +              *) func_resolve_sysroot "$deplib" ;; +            esac +	    if $opt_preserve_dup_deps ; then  	      case "$tmp_libs " in -	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; +	      *" $func_resolve_sysroot_result "*) +                func_append specialdeplibs " $func_resolve_sysroot_result" ;;  	      esac  	    fi -	    tmp_libs="$tmp_libs $deplib" +	    func_append tmp_libs " $func_resolve_sysroot_result"  	  done  	  if test "$link_all_deplibs" != no; then  	    # Add the search paths of all dependency libraries  	    for deplib in $dependency_libs; do +	      path=  	      case $deplib in  	      -L*) path="$deplib" ;;  	      *.la) -		dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` -		test "X$dir" = "X$deplib" && dir="." +	        func_resolve_sysroot "$deplib" +	        deplib=$func_resolve_sysroot_result +	        func_dirname "$deplib" "" "." +		dir=$func_dirname_result  		# We need an absolute path.  		case $dir in  		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;  		*)  		  absdir=`cd "$dir" && pwd`  		  if test -z "$absdir"; then -		    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 +		    func_warning "cannot determine absolute directory name of \`$dir'"  		    absdir="$dir"  		  fi  		  ;;  		esac -		if grep "^installed=no" $deplib > /dev/null; then -		  path="$absdir/$objdir" -		else -		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` -		  if test -z "$libdir"; then -		    $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 -		    exit $EXIT_FAILURE -		  fi -		  if test "$absdir" != "$libdir"; then -		    $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 -		  fi -		  path="$absdir" -		fi -		depdepl= +		if $GREP "^installed=no" $deplib > /dev/null; then  		case $host in  		*-*-darwin*) -		  # we do not want to link against static libs, -		  # but need to link against shared +		  depdepl=  		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` -		  eval deplibdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`  		  if test -n "$deplibrary_names" ; then  		    for tmp in $deplibrary_names ; do  		      depdepl=$tmp  		    done -		    if test -f "$deplibdir/$depdepl" ; then -		      depdepl="$deplibdir/$depdepl" -		    elif test -f "$path/$depdepl" ; then -		      depdepl="$path/$depdepl" -		    else -		      # Can't find it, oh well... -		      depdepl= +		    if test -f "$absdir/$objdir/$depdepl" ; then +		      depdepl="$absdir/$objdir/$depdepl" +		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` +                      if test -z "$darwin_install_name"; then +                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'` +                      fi +		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" +		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" +		      path=  		    fi -		    # do not add paths which are already there -		    case " $newlib_search_path " in -		    *" $path "*) ;; -		    *) newlib_search_path="$newlib_search_path $path";; -		    esac  		  fi -		  path=""  		  ;;  		*) -		  path="-L$path" +		  path="-L$absdir/$objdir"  		  ;;  		esac +		else +		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` +		  test -z "$libdir" && \ +		    func_fatal_error "\`$deplib' is not a valid libtool archive" +		  test "$absdir" != "$libdir" && \ +		    func_warning "\`$deplib' seems to be moved" + +		  path="-L$absdir" +		fi  		;; -	      -l*) -		case $host in -		*-*-darwin*) -		  # Again, we only want to link against shared libraries -		  eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` -		  for tmp in $newlib_search_path ; do -		    if test -f "$tmp/lib$tmp_libs.dylib" ; then -		      eval depdepl="$tmp/lib$tmp_libs.dylib" -		      break -		    fi -		  done -		  path="" -		  ;; -		*) continue ;; -		esac -		;; -	      *) continue ;;  	      esac  	      case " $deplibs " in  	      *" $path "*) ;;  	      *) deplibs="$path $deplibs" ;;  	      esac -	      case " $deplibs " in -	      *" $depdepl "*) ;; -	      *) deplibs="$depdepl $deplibs" ;; -	      esac  	    done  	  fi # link_all_deplibs != no  	fi # linkmode = lib        done # for deplib in $libs +      if test "$pass" = link; then +	if test "$linkmode" = "prog"; then +	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs" +	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" +	else +	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` +	fi +      fi        dependency_libs="$newdependency_libs"        if test "$pass" = dlpreopen; then  	# Link the dlpreopened libraries before other libraries @@ -3033,7 +7103,7 @@ EOF  	  for dir in $newlib_search_path; do  	    case "$lib_search_path " in  	    *" $dir "*) ;; -	    *) lib_search_path="$lib_search_path $dir" ;; +	    *) func_append lib_search_path " $dir" ;;  	    esac  	  done  	  newlib_search_path= @@ -3091,10 +7161,10 @@ EOF  	    -L*)  	      case " $tmp_libs " in  	      *" $deplib "*) ;; -	      *) tmp_libs="$tmp_libs $deplib" ;; +	      *) func_append tmp_libs " $deplib" ;;  	      esac  	      ;; -	    *) tmp_libs="$tmp_libs $deplib" ;; +	    *) func_append tmp_libs " $deplib" ;;  	    esac  	  done  	  eval $var=\"$tmp_libs\" @@ -3110,99 +7180,96 @@ EOF  	  ;;  	esac  	if test -n "$i" ; then -	  tmp_libs="$tmp_libs $i" +	  func_append tmp_libs " $i"  	fi        done        dependency_libs=$tmp_libs      done # for pass      if test "$linkmode" = prog; then        dlfiles="$newdlfiles" +    fi +    if test "$linkmode" = prog || test "$linkmode" = lib; then        dlprefiles="$newdlprefiles"      fi      case $linkmode in      oldlib) +      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then +	func_warning "\`-dlopen' is ignored for archives" +      fi +        case " $deplibs" in        *\ -l* | *\ -L*) -	$echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 ;; +	func_warning "\`-l' and \`-L' are ignored for archives" ;;        esac -      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then -	$echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 -      fi +      test -n "$rpath" && \ +	func_warning "\`-rpath' is ignored for archives" -      if test -n "$rpath"; then -	$echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 -      fi +      test -n "$xrpath" && \ +	func_warning "\`-R' is ignored for archives" -      if test -n "$xrpath"; then -	$echo "$modename: warning: \`-R' is ignored for archives" 1>&2 -      fi - -      if test -n "$vinfo"; then -	$echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 -      fi +      test -n "$vinfo" && \ +	func_warning "\`-version-info/-version-number' is ignored for archives" -      if test -n "$release"; then -	$echo "$modename: warning: \`-release' is ignored for archives" 1>&2 -      fi +      test -n "$release" && \ +	func_warning "\`-release' is ignored for archives" -      if test -n "$export_symbols" || test -n "$export_symbols_regex"; then -	$echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 -      fi +      test -n "$export_symbols$export_symbols_regex" && \ +	func_warning "\`-export-symbols' is ignored for archives"        # Now set the variables for building old libraries.        build_libtool_libs=no        oldlibs="$output" -      objs="$objs$old_deplibs" +      func_append objs "$old_deplibs"        ;;      lib)        # Make sure we only generate libraries of the form `libNAME.la'.        case $outputname in        lib*) -	name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` +	func_stripname 'lib' '.la' "$outputname" +	name=$func_stripname_result  	eval shared_ext=\"$shrext_cmds\"  	eval libname=\"$libname_spec\"  	;;        *) -	if test "$module" = no; then -	  $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 -	  $echo "$help" 1>&2 -	  exit $EXIT_FAILURE -	fi +	test "$module" = no && \ +	  func_fatal_help "libtool library \`$output' must begin with \`lib'" +  	if test "$need_lib_prefix" != no; then  	  # Add the "lib" prefix for modules if required -	  name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` +	  func_stripname '' '.la' "$outputname" +	  name=$func_stripname_result  	  eval shared_ext=\"$shrext_cmds\"  	  eval libname=\"$libname_spec\"  	else -	  libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` +	  func_stripname '' '.la' "$outputname" +	  libname=$func_stripname_result  	fi  	;;        esac        if test -n "$objs"; then  	if test "$deplibs_check_method" != pass_all; then -	  $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 -	  exit $EXIT_FAILURE +	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"  	else -	  $echo -	  $echo "*** Warning: Linking the shared library $output against the non-libtool" -	  $echo "*** objects $objs is not portable!" -	  libobjs="$libobjs $objs" +	  echo +	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool" +	  $ECHO "*** objects $objs is not portable!" +	  func_append libobjs " $objs"  	fi        fi -      if test "$dlself" != no; then -	$echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 -      fi +      test "$dlself" != no && \ +	func_warning "\`-dlopen self' is ignored for libtool libraries"        set dummy $rpath -      if test "$#" -gt 2; then -	$echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 -      fi -      install_libdir="$2" +      shift +      test "$#" -gt 1 && \ +	func_warning "ignoring multiple \`-rpath's for a libtool library" + +      install_libdir="$1"        oldlibs=        if test -z "$rpath"; then @@ -3216,25 +7283,21 @@ EOF  	  build_old_libs=yes  	fi -	if test -n "$vinfo"; then -	  $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 -	fi +	test -n "$vinfo" && \ +	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries" -	if test -n "$release"; then -	  $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 -	fi +	test -n "$release" && \ +	  func_warning "\`-release' is ignored for convenience libraries"        else  	# Parse the version information argument.  	save_ifs="$IFS"; IFS=':'  	set dummy $vinfo 0 0 0 +	shift  	IFS="$save_ifs" -	if test -n "$8"; then -	  $echo "$modename: too many parameters to \`-version-info'" 1>&2 -	  $echo "$help" 1>&2 -	  exit $EXIT_FAILURE -	fi +	test -n "$7" && \ +	  func_fatal_help "too many parameters to \`-version-info'"  	# convert absolute version numbers to libtool ages  	# this retains compatibility with .la files and attempts @@ -3242,9 +7305,9 @@ EOF  	case $vinfo_number in  	yes) -	  number_major="$2" -	  number_minor="$3" -	  number_revision="$4" +	  number_major="$1" +	  number_minor="$2" +	  number_revision="$3"  	  #  	  # There are really only two kinds -- those that  	  # use the current revision as the major version @@ -3254,17 +7317,19 @@ EOF  	  #  	  case $version_type in  	  darwin|linux|osf|windows|none) -	    current=`expr $number_major + $number_minor` +	    func_arith $number_major + $number_minor +	    current=$func_arith_result  	    age="$number_minor"  	    revision="$number_revision"  	    ;; -	  freebsd-aout|freebsd-elf|sunos) +	  freebsd-aout|freebsd-elf|qnx|sunos)  	    current="$number_major"  	    revision="$number_minor"  	    age="0"  	    ;;  	  irix|nonstopux) -	    current=`expr $number_major + $number_minor` +	    func_arith $number_major + $number_minor +	    current=$func_arith_result  	    age="$number_minor"  	    revision="$number_minor"  	    lt_irix_increment=no @@ -3272,9 +7337,9 @@ EOF  	  esac  	  ;;  	no) -	  current="$2" -	  revision="$3" -	  age="$4" +	  current="$1" +	  revision="$2" +	  age="$3"  	  ;;  	esac @@ -3282,34 +7347,30 @@ EOF  	case $current in  	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;  	*) -	  $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 -	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2 -	  exit $EXIT_FAILURE +	  func_error "CURRENT \`$current' must be a nonnegative integer" +	  func_fatal_error "\`$vinfo' is not valid version information"  	  ;;  	esac  	case $revision in  	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;  	*) -	  $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 -	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2 -	  exit $EXIT_FAILURE +	  func_error "REVISION \`$revision' must be a nonnegative integer" +	  func_fatal_error "\`$vinfo' is not valid version information"  	  ;;  	esac  	case $age in  	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;  	*) -	  $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 -	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2 -	  exit $EXIT_FAILURE +	  func_error "AGE \`$age' must be a nonnegative integer" +	  func_fatal_error "\`$vinfo' is not valid version information"  	  ;;  	esac  	if test "$age" -gt "$current"; then -	  $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 -	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2 -	  exit $EXIT_FAILURE +	  func_error "AGE \`$age' is greater than the current interface number \`$current'" +	  func_fatal_error "\`$vinfo' is not valid version information"  	fi  	# Calculate the version variables. @@ -3322,10 +7383,12 @@ EOF  	darwin)  	  # Like Linux, but with the current version available in  	  # verstring for coding it into the library header -	  major=.`expr $current - $age` +	  func_arith $current - $age +	  major=.$func_arith_result  	  versuffix="$major.$age.$revision"  	  # Darwin ld doesn't like 0 for these options... -	  minor_current=`expr $current + 1` +	  func_arith $current + 1 +	  minor_current=$func_arith_result  	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"  	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"  	  ;; @@ -3337,15 +7400,17 @@ EOF  	freebsd-elf)  	  major=".$current" -	  versuffix=".$current"; +	  versuffix=".$current"  	  ;;  	irix | nonstopux)  	  if test "X$lt_irix_increment" = "Xno"; then -	    major=`expr $current - $age` +	    func_arith $current - $age  	  else -	    major=`expr $current - $age + 1` +	    func_arith $current - $age + 1  	  fi +	  major=$func_arith_result +  	  case $version_type in  	    nonstopux) verstring_prefix=nonstopux ;;  	    *)         verstring_prefix=sgi ;; @@ -3355,8 +7420,10 @@ EOF  	  # Add in all the interfaces that we are compatible with.  	  loop=$revision  	  while test "$loop" -ne 0; do -	    iface=`expr $revision - $loop` -	    loop=`expr $loop - 1` +	    func_arith $revision - $loop +	    iface=$func_arith_result +	    func_arith $loop - 1 +	    loop=$func_arith_result  	    verstring="$verstring_prefix$major.$iface:$verstring"  	  done @@ -3366,25 +7433,34 @@ EOF  	  ;;  	linux) -	  major=.`expr $current - $age` +	  func_arith $current - $age +	  major=.$func_arith_result  	  versuffix="$major.$age.$revision"  	  ;;  	osf) -	  major=.`expr $current - $age` +	  func_arith $current - $age +	  major=.$func_arith_result  	  versuffix=".$current.$age.$revision"  	  verstring="$current.$age.$revision"  	  # Add in all the interfaces that we are compatible with.  	  loop=$age  	  while test "$loop" -ne 0; do -	    iface=`expr $current - $loop` -	    loop=`expr $loop - 1` +	    func_arith $current - $loop +	    iface=$func_arith_result +	    func_arith $loop - 1 +	    loop=$func_arith_result  	    verstring="$verstring:${iface}.0"  	  done  	  # Make executables depend on our current version. -	  verstring="$verstring:${current}.0" +	  func_append verstring ":${current}.0" +	  ;; + +	qnx) +	  major=".$current" +	  versuffix=".$current"  	  ;;  	sunos) @@ -3395,14 +7471,13 @@ EOF  	windows)  	  # Use '-' rather than '.', since we only want one  	  # extension on DOS 8.3 filesystems. -	  major=`expr $current - $age` +	  func_arith $current - $age +	  major=$func_arith_result  	  versuffix="-$major"  	  ;;  	*) -	  $echo "$modename: unknown library version type \`$version_type'" 1>&2 -	  $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2 -	  exit $EXIT_FAILURE +	  func_fatal_configuration "unknown library version type \`$version_type'"  	  ;;  	esac @@ -3436,7 +7511,7 @@ EOF  	# Check to see if the archive will have undefined symbols.  	if test "$allow_undefined" = yes; then  	  if test "$allow_undefined_flag" = unsupported; then -	    $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 +	    func_warning "undefined symbols not allowed in $host shared libraries"  	    build_libtool_libs=no  	    build_old_libs=yes  	  fi @@ -3444,58 +7519,62 @@ EOF  	  # Don't allow undefined symbols.  	  allow_undefined_flag="$no_undefined_flag"  	fi +        fi -      if test "$mode" != relink; then +      func_generate_dlsyms "$libname" "$libname" "yes" +      func_append libobjs " $symfileobj" +      test "X$libobjs" = "X " && libobjs= + +      if test "$opt_mode" != relink; then  	# Remove our outputs, but don't remove object files since they  	# may have been created when compiling PIC objects.  	removelist= -	tempremovelist=`$echo "$output_objdir/*"` +	tempremovelist=`$ECHO "$output_objdir/*"`  	for p in $tempremovelist; do  	  case $p in -	    *.$objext) +	    *.$objext | *.gcno)  	       ;;  	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)  	       if test "X$precious_files_regex" != "X"; then -	         if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 -	         then +		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 +		 then  		   continue  		 fi  	       fi -	       removelist="$removelist $p" +	       func_append removelist " $p"  	       ;;  	    *) ;;  	  esac  	done -	if test -n "$removelist"; then -	  $show "${rm}r $removelist" -	  $run ${rm}r $removelist -	fi +	test -n "$removelist" && \ +	  func_show_eval "${RM}r \$removelist"        fi        # Now set the variables for building old libraries.        if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then -	oldlibs="$oldlibs $output_objdir/$libname.$libext" +	func_append oldlibs " $output_objdir/$libname.$libext"  	# Transform .lo files to .o files. -	oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` +	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`        fi        # Eliminate all temporary directories.        #for path in $notinst_path; do -      #	lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` -      #	deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` -      #	dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` +      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` +      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` +      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`        #done        if test -n "$xrpath"; then  	# If the user specified any rpath flags, then add them.  	temp_xrpath=  	for libdir in $xrpath; do -	  temp_xrpath="$temp_xrpath -R$libdir" +	  func_replace_sysroot "$libdir" +	  func_append temp_xrpath " -R$func_replace_sysroot_result"  	  case "$finalize_rpath " in  	  *" $libdir "*) ;; -	  *) finalize_rpath="$finalize_rpath $libdir" ;; +	  *) func_append finalize_rpath " $libdir" ;;  	  esac  	done  	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then @@ -3509,7 +7588,7 @@ EOF        for lib in $old_dlfiles; do  	case " $dlprefiles $dlfiles " in  	*" $lib "*) ;; -	*) dlfiles="$dlfiles $lib" ;; +	*) func_append dlfiles " $lib" ;;  	esac        done @@ -3519,19 +7598,19 @@ EOF        for lib in $old_dlprefiles; do  	case "$dlprefiles " in  	*" $lib "*) ;; -	*) dlprefiles="$dlprefiles $lib" ;; +	*) func_append dlprefiles " $lib" ;;  	esac        done        if test "$build_libtool_libs" = yes; then  	if test -n "$rpath"; then  	  case $host in -	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) +	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)  	    # these systems don't actually have a c library (as such)!  	    ;;  	  *-*-rhapsody* | *-*-darwin1.[012])  	    # Rhapsody C library is in the System framework -	    deplibs="$deplibs -framework System" +	    func_append deplibs " System.ltframework"  	    ;;  	  *-*-netbsd*)  	    # Don't link with libc until the a.out ld.so is fixed. @@ -3545,10 +7624,10 @@ EOF  	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)  	    # Compiler inserts libc in the correct place for threads to work  	    ;; - 	  *) +	  *)  	    # Add libc to deplibs on all other systems if necessary.  	    if test "$build_libtool_need_lc" = "yes"; then -	      deplibs="$deplibs -lc" +	      func_append deplibs " -lc"  	    fi  	    ;;  	  esac @@ -3582,120 +7661,139 @@ EOF  	  # limits. Maybe even breaks it.  We compile a program, linking it  	  # against the deplibs as a proxy for the library.  Then we can check  	  # whether they linked in statically or dynamically with ldd. -	  $rm conftest.c +	  $opt_dry_run || $RM conftest.c  	  cat > conftest.c <<EOF  	  int main() { return 0; }  EOF -	  $rm conftest +	  $opt_dry_run || $RM conftest  	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then  	    ldd_output=`ldd conftest`  	    for i in $deplibs; do -	      name=`expr $i : '-l\(.*\)'` -	      # If $name is empty we are operating on a -L argument. -              if test "$name" != "" && test "$name" != "0"; then +	      case $i in +	      -l*) +		func_stripname -l '' "$i" +		name=$func_stripname_result  		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then  		  case " $predeps $postdeps " in  		  *" $i "*) -		    newdeplibs="$newdeplibs $i" +		    func_append newdeplibs " $i"  		    i=""  		    ;;  		  esac -	        fi +		fi  		if test -n "$i" ; then -		  libname=`eval \\$echo \"$libname_spec\"` -		  deplib_matches=`eval \\$echo \"$library_names_spec\"` -		  set dummy $deplib_matches -		  deplib_match=$2 +		  libname=`eval "\\$ECHO \"$libname_spec\""` +		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` +		  set dummy $deplib_matches; shift +		  deplib_match=$1  		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then -		    newdeplibs="$newdeplibs $i" +		    func_append newdeplibs " $i"  		  else  		    droppeddeps=yes -		    $echo -		    $echo "*** Warning: dynamic linker does not accept needed library $i." -		    $echo "*** I have the capability to make that library automatically link in when" -		    $echo "*** you link to this library.  But I can only do this if you have a" -		    $echo "*** shared version of the library, which I believe you do not have" -		    $echo "*** because a test_compile did reveal that the linker did not use it for" -		    $echo "*** its dynamic dependency list that programs get resolved with at runtime." +		    echo +		    $ECHO "*** Warning: dynamic linker does not accept needed library $i." +		    echo "*** I have the capability to make that library automatically link in when" +		    echo "*** you link to this library.  But I can only do this if you have a" +		    echo "*** shared version of the library, which I believe you do not have" +		    echo "*** because a test_compile did reveal that the linker did not use it for" +		    echo "*** its dynamic dependency list that programs get resolved with at runtime."  		  fi  		fi -	      else -		newdeplibs="$newdeplibs $i" -	      fi +		;; +	      *) +		func_append newdeplibs " $i" +		;; +	      esac  	    done  	  else  	    # Error occurred in the first compile.  Let's try to salvage  	    # the situation: Compile a separate program for each library.  	    for i in $deplibs; do -	      name=`expr $i : '-l\(.*\)'` -	      # If $name is empty we are operating on a -L argument. -              if test "$name" != "" && test "$name" != "0"; then -		$rm conftest +	      case $i in +	      -l*) +		func_stripname -l '' "$i" +		name=$func_stripname_result +		$opt_dry_run || $RM conftest  		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then  		  ldd_output=`ldd conftest`  		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then  		    case " $predeps $postdeps " in  		    *" $i "*) -		      newdeplibs="$newdeplibs $i" +		      func_append newdeplibs " $i"  		      i=""  		      ;;  		    esac  		  fi  		  if test -n "$i" ; then -		    libname=`eval \\$echo \"$libname_spec\"` -		    deplib_matches=`eval \\$echo \"$library_names_spec\"` -		    set dummy $deplib_matches -		    deplib_match=$2 +		    libname=`eval "\\$ECHO \"$libname_spec\""` +		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` +		    set dummy $deplib_matches; shift +		    deplib_match=$1  		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then -		      newdeplibs="$newdeplibs $i" +		      func_append newdeplibs " $i"  		    else  		      droppeddeps=yes -		      $echo -		      $echo "*** Warning: dynamic linker does not accept needed library $i." -		      $echo "*** I have the capability to make that library automatically link in when" -		      $echo "*** you link to this library.  But I can only do this if you have a" -		      $echo "*** shared version of the library, which you do not appear to have" -		      $echo "*** because a test_compile did reveal that the linker did not use this one" -		      $echo "*** as a dynamic dependency that programs can get resolved with at runtime." +		      echo +		      $ECHO "*** Warning: dynamic linker does not accept needed library $i." +		      echo "*** I have the capability to make that library automatically link in when" +		      echo "*** you link to this library.  But I can only do this if you have a" +		      echo "*** shared version of the library, which you do not appear to have" +		      echo "*** because a test_compile did reveal that the linker did not use this one" +		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."  		    fi  		  fi  		else  		  droppeddeps=yes -		  $echo -		  $echo "*** Warning!  Library $i is needed by this library but I was not able to" -		  $echo "*** make it link in!  You will probably need to install it or some" -		  $echo "*** library that it depends on before this library will be fully" -		  $echo "*** functional.  Installing it before continuing would be even better." +		  echo +		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to" +		  echo "*** make it link in!  You will probably need to install it or some" +		  echo "*** library that it depends on before this library will be fully" +		  echo "*** functional.  Installing it before continuing would be even better."  		fi -	      else -		newdeplibs="$newdeplibs $i" -	      fi +		;; +	      *) +		func_append newdeplibs " $i" +		;; +	      esac  	    done  	  fi  	  ;;  	file_magic*) -	  set dummy $deplibs_check_method -	  file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` +	  set dummy $deplibs_check_method; shift +	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`  	  for a_deplib in $deplibs; do -	    name=`expr $a_deplib : '-l\(.*\)'` -	    # If $name is empty we are operating on a -L argument. -            if test "$name" != "" && test  "$name" != "0"; then +	    case $a_deplib in +	    -l*) +	      func_stripname -l '' "$a_deplib" +	      name=$func_stripname_result  	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then  		case " $predeps $postdeps " in  		*" $a_deplib "*) -		  newdeplibs="$newdeplibs $a_deplib" +		  func_append newdeplibs " $a_deplib"  		  a_deplib=""  		  ;;  		esac  	      fi  	      if test -n "$a_deplib" ; then -		libname=`eval \\$echo \"$libname_spec\"` +		libname=`eval "\\$ECHO \"$libname_spec\""` +		if test -n "$file_magic_glob"; then +		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` +		else +		  libnameglob=$libname +		fi +		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`  		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do -		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null` +		  if test "$want_nocaseglob" = yes; then +		    shopt -s nocaseglob +		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` +		    $nocaseglob +		  else +		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` +		  fi  		  for potent_lib in $potential_libs; do  		      # Follow soft links. -		      if ls -lLd "$potent_lib" 2>/dev/null \ -			 | grep " -> " >/dev/null; then +		      if ls -lLd "$potent_lib" 2>/dev/null | +			 $GREP " -> " >/dev/null; then  			continue  		      fi  		      # The statement above tries to avoid entering an @@ -3708,13 +7806,13 @@ EOF  			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`  			case $potliblink in  			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; -			*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; +			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;  			esac  		      done -		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ -			 | ${SED} 10q \ -			 | $EGREP "$file_magic_regex" > /dev/null; then -			newdeplibs="$newdeplibs $a_deplib" +		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | +			 $SED -e 10q | +			 $EGREP "$file_magic_regex" > /dev/null; then +			func_append newdeplibs " $a_deplib"  			a_deplib=""  			break 2  		      fi @@ -3723,50 +7821,52 @@ EOF  	      fi  	      if test -n "$a_deplib" ; then  		droppeddeps=yes -		$echo -		$echo "*** Warning: linker path does not have real file for library $a_deplib." -		$echo "*** I have the capability to make that library automatically link in when" -		$echo "*** you link to this library.  But I can only do this if you have a" -		$echo "*** shared version of the library, which you do not appear to have" -		$echo "*** because I did check the linker path looking for a file starting" +		echo +		$ECHO "*** Warning: linker path does not have real file for library $a_deplib." +		echo "*** I have the capability to make that library automatically link in when" +		echo "*** you link to this library.  But I can only do this if you have a" +		echo "*** shared version of the library, which you do not appear to have" +		echo "*** because I did check the linker path looking for a file starting"  		if test -z "$potlib" ; then -		  $echo "*** with $libname but no candidates were found. (...for file magic test)" +		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"  		else -		  $echo "*** with $libname and none of the candidates passed a file format test" -		  $echo "*** using a file magic. Last file checked: $potlib" +		  $ECHO "*** with $libname and none of the candidates passed a file format test" +		  $ECHO "*** using a file magic. Last file checked: $potlib"  		fi  	      fi -	    else +	      ;; +	    *)  	      # Add a -L argument. -	      newdeplibs="$newdeplibs $a_deplib" -	    fi +	      func_append newdeplibs " $a_deplib" +	      ;; +	    esac  	  done # Gone through all deplibs.  	  ;;  	match_pattern*) -	  set dummy $deplibs_check_method -	  match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` +	  set dummy $deplibs_check_method; shift +	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`  	  for a_deplib in $deplibs; do -	    name=`expr $a_deplib : '-l\(.*\)'` -	    # If $name is empty we are operating on a -L argument. -	    if test -n "$name" && test "$name" != "0"; then +	    case $a_deplib in +	    -l*) +	      func_stripname -l '' "$a_deplib" +	      name=$func_stripname_result  	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then  		case " $predeps $postdeps " in  		*" $a_deplib "*) -		  newdeplibs="$newdeplibs $a_deplib" +		  func_append newdeplibs " $a_deplib"  		  a_deplib=""  		  ;;  		esac  	      fi  	      if test -n "$a_deplib" ; then -		libname=`eval \\$echo \"$libname_spec\"` +		libname=`eval "\\$ECHO \"$libname_spec\""`  		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do  		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`  		  for potent_lib in $potential_libs; do  		    potlib="$potent_lib" # see symlink-check above in file_magic test -		    if eval $echo \"$potent_lib\" 2>/dev/null \ -		        | ${SED} 10q \ -		        | $EGREP "$match_pattern_regex" > /dev/null; then -		      newdeplibs="$newdeplibs $a_deplib" +		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ +		       $EGREP "$match_pattern_regex" > /dev/null; then +		      func_append newdeplibs " $a_deplib"  		      a_deplib=""  		      break 2  		    fi @@ -3775,46 +7875,48 @@ EOF  	      fi  	      if test -n "$a_deplib" ; then  		droppeddeps=yes -		$echo -		$echo "*** Warning: linker path does not have real file for library $a_deplib." -		$echo "*** I have the capability to make that library automatically link in when" -		$echo "*** you link to this library.  But I can only do this if you have a" -		$echo "*** shared version of the library, which you do not appear to have" -		$echo "*** because I did check the linker path looking for a file starting" +		echo +		$ECHO "*** Warning: linker path does not have real file for library $a_deplib." +		echo "*** I have the capability to make that library automatically link in when" +		echo "*** you link to this library.  But I can only do this if you have a" +		echo "*** shared version of the library, which you do not appear to have" +		echo "*** because I did check the linker path looking for a file starting"  		if test -z "$potlib" ; then -		  $echo "*** with $libname but no candidates were found. (...for regex pattern test)" +		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"  		else -		  $echo "*** with $libname and none of the candidates passed a file format test" -		  $echo "*** using a regex pattern. Last file checked: $potlib" +		  $ECHO "*** with $libname and none of the candidates passed a file format test" +		  $ECHO "*** using a regex pattern. Last file checked: $potlib"  		fi  	      fi -	    else +	      ;; +	    *)  	      # Add a -L argument. -	      newdeplibs="$newdeplibs $a_deplib" -	    fi +	      func_append newdeplibs " $a_deplib" +	      ;; +	    esac  	  done # Gone through all deplibs.  	  ;;  	none | unknown | *)  	  newdeplibs="" -	  tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -	    -e 's/ -[LR][^ ]*//g'` +	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`  	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then  	    for i in $predeps $postdeps ; do  	      # can't use Xsed below, because $i might contain '/' -	      tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` +	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`  	    done  	  fi -	  if $echo "X $tmp_deplibs" | $Xsed -e 's/[ 	]//g' \ -	    | grep . >/dev/null; then -	    $echo +	  case $tmp_deplibs in +	  *[!\	\ ]*) +	    echo  	    if test "X$deplibs_check_method" = "Xnone"; then -	      $echo "*** Warning: inter-library dependencies are not supported in this platform." +	      echo "*** Warning: inter-library dependencies are not supported in this platform."  	    else -	      $echo "*** Warning: inter-library dependencies are not known to be supported." +	      echo "*** Warning: inter-library dependencies are not known to be supported."  	    fi -	    $echo "*** All declared inter-library dependencies are being dropped." +	    echo "*** All declared inter-library dependencies are being dropped."  	    droppeddeps=yes -	  fi +	    ;; +	  esac  	  ;;  	esac  	versuffix=$versuffix_save @@ -3825,24 +7927,24 @@ EOF  	case $host in  	*-*-rhapsody* | *-*-darwin1.[012]) -	  # On Rhapsody replace the C library is the System framework -	  newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` +	  # On Rhapsody replace the C library with the System framework +	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`  	  ;;  	esac  	if test "$droppeddeps" = yes; then  	  if test "$module" = yes; then -	    $echo -	    $echo "*** Warning: libtool could not satisfy all declared inter-library" -	    $echo "*** dependencies of module $libname.  Therefore, libtool will create" -	    $echo "*** a static module, that should work as long as the dlopening" -	    $echo "*** application is linked with the -dlopen flag." +	    echo +	    echo "*** Warning: libtool could not satisfy all declared inter-library" +	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create" +	    echo "*** a static module, that should work as long as the dlopening" +	    echo "*** application is linked with the -dlopen flag."  	    if test -z "$global_symbol_pipe"; then -	      $echo -	      $echo "*** However, this would only work if libtool was able to extract symbol" -	      $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" -	      $echo "*** not find such a program.  So, this module is probably useless." -	      $echo "*** \`nm' from GNU binutils and a full rebuild may help." +	      echo +	      echo "*** However, this would only work if libtool was able to extract symbol" +	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could" +	      echo "*** not find such a program.  So, this module is probably useless." +	      echo "*** \`nm' from GNU binutils and a full rebuild may help."  	    fi  	    if test "$build_old_libs" = no; then  	      oldlibs="$output_objdir/$libname.$libext" @@ -3852,16 +7954,16 @@ EOF  	      build_libtool_libs=no  	    fi  	  else -	    $echo "*** The inter-library dependencies that have been dropped here will be" -	    $echo "*** automatically added whenever a program is linked with this library" -	    $echo "*** or is declared to -dlopen it." +	    echo "*** The inter-library dependencies that have been dropped here will be" +	    echo "*** automatically added whenever a program is linked with this library" +	    echo "*** or is declared to -dlopen it."  	    if test "$allow_undefined" = no; then -	      $echo -	      $echo "*** Since this library must not contain undefined symbols," -	      $echo "*** because either the platform does not support them or" -	      $echo "*** it was explicitly requested with -no-undefined," -	      $echo "*** libtool will only create a static version of it." +	      echo +	      echo "*** Since this library must not contain undefined symbols," +	      echo "*** because either the platform does not support them or" +	      echo "*** it was explicitly requested with -no-undefined," +	      echo "*** libtool will only create a static version of it."  	      if test "$build_old_libs" = no; then  		oldlibs="$output_objdir/$libname.$libext"  		build_libtool_libs=module @@ -3875,7 +7977,14 @@ EOF  	# Done checking deplibs!  	deplibs=$newdeplibs        fi - +      # Time to change all our "foo.ltframework" stuff back to "-framework foo" +      case $host in +	*-*-darwin*) +	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` +	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` +	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` +	  ;; +      esac        # move library search paths that coincide with paths to not yet        # installed libraries to the beginning of the library search list @@ -3886,7 +7995,7 @@ EOF  	*)  	  case " $deplibs " in  	  *" -L$path/$objdir "*) -	    new_libs="$new_libs -L$path/$objdir" ;; +	    func_append new_libs " -L$path/$objdir" ;;  	  esac  	  ;;  	esac @@ -3896,15 +8005,14 @@ EOF  	-L*)  	  case " $new_libs " in  	  *" $deplib "*) ;; -	  *) new_libs="$new_libs $deplib" ;; +	  *) func_append new_libs " $deplib" ;;  	  esac  	  ;; -	*) new_libs="$new_libs $deplib" ;; +	*) func_append new_libs " $deplib" ;;  	esac        done        deplibs="$new_libs" -        # All the library-specific variables (install_libdir is set above).        library_names=        old_library= @@ -3917,10 +8025,12 @@ EOF  	  hardcode_libdirs=  	  dep_rpath=  	  rpath="$finalize_rpath" -	  test "$mode" != relink && rpath="$compile_rpath$rpath" +	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"  	  for libdir in $rpath; do  	    if test -n "$hardcode_libdir_flag_spec"; then  	      if test -n "$hardcode_libdir_separator"; then +		func_replace_sysroot "$libdir" +		libdir=$func_replace_sysroot_result  		if test -z "$hardcode_libdirs"; then  		  hardcode_libdirs="$libdir"  		else @@ -3929,18 +8039,18 @@ EOF  		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)  		    ;;  		  *) -		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" +		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"  		    ;;  		  esac  		fi  	      else  		eval flag=\"$hardcode_libdir_flag_spec\" -		dep_rpath="$dep_rpath $flag" +		func_append dep_rpath " $flag"  	      fi  	    elif test -n "$runpath_var"; then  	      case "$perm_rpath " in  	      *" $libdir "*) ;; -	      *) perm_rpath="$perm_rpath $libdir" ;; +	      *) func_apped perm_rpath " $libdir" ;;  	      esac  	    fi  	  done @@ -3949,10 +8059,7 @@ EOF  	     test -n "$hardcode_libdirs"; then  	    libdir="$hardcode_libdirs"  	    if test -n "$hardcode_libdir_flag_spec_ld"; then -	      case $archive_cmds in -	      *\$LD*) eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" ;; -	      *)      eval dep_rpath=\"$hardcode_libdir_flag_spec\" ;; -	      esac +	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"  	    else  	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"  	    fi @@ -3961,7 +8068,7 @@ EOF  	    # We should set the runpath_var.  	    rpath=  	    for dir in $perm_rpath; do -	      rpath="$rpath$dir:" +	      func_append rpath "$dir:"  	    done  	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"  	  fi @@ -3969,7 +8076,7 @@ EOF  	fi  	shlibpath="$finalize_shlibpath" -	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" +	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"  	if test -n "$shlibpath"; then  	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"  	fi @@ -3978,8 +8085,9 @@ EOF  	eval shared_ext=\"$shrext_cmds\"  	eval library_names=\"$library_names_spec\"  	set dummy $library_names -	realname="$2" -	shift; shift +	shift +	realname="$1" +	shift  	if test -n "$soname_spec"; then  	  eval soname=\"$soname_spec\" @@ -3994,83 +8102,166 @@ EOF  	linknames=  	for link  	do -	  linknames="$linknames $link" +	  func_append linknames " $link"  	done  	# Use standard objects if they are pic -	test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` +	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` +	test "X$libobjs" = "X " && libobjs= + +	delfiles= +	if test -n "$export_symbols" && test -n "$include_expsyms"; then +	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" +	  export_symbols="$output_objdir/$libname.uexp" +	  func_append delfiles " $export_symbols" +	fi + +	orig_export_symbols= +	case $host_os in +	cygwin* | mingw* | cegcc*) +	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then +	    # exporting using user supplied symfile +	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then +	      # and it's NOT already a .def file. Must figure out +	      # which of the given symbols are data symbols and tag +	      # them as such. So, trigger use of export_symbols_cmds. +	      # export_symbols gets reassigned inside the "prepare +	      # the list of exported symbols" if statement, so the +	      # include_expsyms logic still works. +	      orig_export_symbols="$export_symbols" +	      export_symbols= +	      always_export_symbols=yes +	    fi +	  fi +	  ;; +	esac  	# Prepare the list of exported symbols  	if test -z "$export_symbols"; then  	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then -	    $show "generating symbol list for \`$libname.la'" +	    func_verbose "generating symbol list for \`$libname.la'"  	    export_symbols="$output_objdir/$libname.exp" -	    $run $rm $export_symbols +	    $opt_dry_run || $RM $export_symbols  	    cmds=$export_symbols_cmds  	    save_ifs="$IFS"; IFS='~' -	    for cmd in $cmds; do +	    for cmd1 in $cmds; do  	      IFS="$save_ifs" -	      eval cmd=\"$cmd\" -	      if len=`expr "X$cmd" : ".*"` && -	       test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then -	        $show "$cmd" -	        $run eval "$cmd" || exit $? -	        skipped_export=false +	      # Take the normal branch if the nm_file_list_spec branch +	      # doesn't work or if tool conversion is not needed. +	      case $nm_file_list_spec~$to_tool_file_cmd in +		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) +		  try_normal_branch=yes +		  eval cmd=\"$cmd1\" +		  func_len " $cmd" +		  len=$func_len_result +		  ;; +		*) +		  try_normal_branch=no +		  ;; +	      esac +	      if test "$try_normal_branch" = yes \ +		 && { test "$len" -lt "$max_cmd_len" \ +		      || test "$max_cmd_len" -le -1; } +	      then +		func_show_eval "$cmd" 'exit $?' +		skipped_export=false +	      elif test -n "$nm_file_list_spec"; then +		func_basename "$output" +		output_la=$func_basename_result +		save_libobjs=$libobjs +		save_output=$output +		output=${output_objdir}/${output_la}.nm +		func_to_tool_file "$output" +		libobjs=$nm_file_list_spec$func_to_tool_file_result +		func_append delfiles " $output" +		func_verbose "creating $NM input file list: $output" +		for obj in $save_libobjs; do +		  func_to_tool_file "$obj" +		  $ECHO "$func_to_tool_file_result" +		done > "$output" +		eval cmd=\"$cmd1\" +		func_show_eval "$cmd" 'exit $?' +		output=$save_output +		libobjs=$save_libobjs +		skipped_export=false  	      else -	        # The command line is too long to execute in one step. -	        $show "using reloadable object file for export list..." -	        skipped_export=: +		# The command line is too long to execute in one step. +		func_verbose "using reloadable object file for export list..." +		skipped_export=:  		# Break out early, otherwise skipped_export may be  		# set to false by a later but shorter cmd.  		break  	      fi  	    done  	    IFS="$save_ifs" -	    if test -n "$export_symbols_regex"; then -	      $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" -	      $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' -	      $show "$mv \"${export_symbols}T\" \"$export_symbols\"" -	      $run eval '$mv "${export_symbols}T" "$export_symbols"' +	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then +	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' +	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'  	    fi  	  fi  	fi  	if test -n "$export_symbols" && test -n "$include_expsyms"; then -	  $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' +	  tmp_export_symbols="$export_symbols" +	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" +	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' +	fi + +	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then +	  # The given exports_symbols file has to be filtered, so filter it. +	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" +	  # FIXME: $output_objdir/$libname.filter potentially contains lots of +	  # 's' commands which not all seds can handle. GNU sed should be fine +	  # though. Also, the filter scales superlinearly with the number of +	  # global variables. join(1) would be nice here, but unfortunately +	  # isn't a blessed tool. +	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter +	  func_append delfiles " $export_symbols $output_objdir/$libname.filter" +	  export_symbols=$output_objdir/$libname.def +	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols  	fi  	tmp_deplibs=  	for test_deplib in $deplibs; do -		case " $convenience " in -		*" $test_deplib "*) ;; -		*) -			tmp_deplibs="$tmp_deplibs $test_deplib" -			;; -		esac +	  case " $convenience " in +	  *" $test_deplib "*) ;; +	  *) +	    func_append tmp_deplibs " $test_deplib" +	    ;; +	  esac  	done  	deplibs="$tmp_deplibs"  	if test -n "$convenience"; then +	  if test -n "$whole_archive_flag_spec" && +	    test "$compiler_needs_object" = yes && +	    test -z "$libobjs"; then +	    # extract the archives, so we have objects to list. +	    # TODO: could optimize this to just extract one archive. +	    whole_archive_flag_spec= +	  fi  	  if test -n "$whole_archive_flag_spec"; then  	    save_libobjs=$libobjs  	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\" +	    test "X$libobjs" = "X " && libobjs=  	  else  	    gentop="$output_objdir/${outputname}x" -	    generated="$generated $gentop" +	    func_append generated " $gentop"  	    func_extract_archives $gentop $convenience -	    libobjs="$libobjs $func_extract_archives_result" +	    func_append libobjs " $func_extract_archives_result" +	    test "X$libobjs" = "X " && libobjs=  	  fi  	fi -	 +  	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then  	  eval flag=\"$thread_safe_flag_spec\" -	  linker_flags="$linker_flags $flag" +	  func_append linker_flags " $flag"  	fi  	# Make a backup of the uninstalled library when relinking -	if test "$mode" = relink; then -	  $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? +	if test "$opt_mode" = relink; then +	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?  	fi  	# Do each of the archive commands. @@ -4083,22 +8274,24 @@ EOF  	    cmds=$module_cmds  	  fi  	else -	if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then -	  eval test_cmds=\"$archive_expsym_cmds\" -	  cmds=$archive_expsym_cmds -	else -	  eval test_cmds=\"$archive_cmds\" -	  cmds=$archive_cmds +	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then +	    eval test_cmds=\"$archive_expsym_cmds\" +	    cmds=$archive_expsym_cmds +	  else +	    eval test_cmds=\"$archive_cmds\" +	    cmds=$archive_cmds  	  fi  	fi  	if test "X$skipped_export" != "X:" && -	   len=`expr "X$test_cmds" : ".*" 2>/dev/null` && -	   test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then +	   func_len " $test_cmds" && +	   len=$func_len_result && +	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then  	  :  	else -	  # The command line is too long to link in one step, link piecewise. -	  $echo "creating reloadable object files..." +	  # The command line is too long to link in one step, link piecewise +	  # or, if using GNU ld and skipped_export is not :, use a linker +	  # script.  	  # Save the value of $output and $libobjs because we want to  	  # use them later.  If we have whole_archive_flag_spec, we @@ -4112,77 +8305,171 @@ EOF  	    save_libobjs=$libobjs  	  fi  	  save_output=$output -	  output_la=`$echo "X$output" | $Xsed -e "$basename"` +	  func_basename "$output" +	  output_la=$func_basename_result  	  # Clear the reloadable object creation command queue and  	  # initialize k to one.  	  test_cmds=  	  concat_cmds=  	  objlist= -	  delfiles=  	  last_robj=  	  k=1 -	  output=$output_objdir/$output_la-${k}.$objext -	  # Loop over the list of objects to be linked. -	  for obj in $save_libobjs -	  do -	    eval test_cmds=\"$reload_cmds $objlist $last_robj\" -	    if test "X$objlist" = X || -	       { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && -		 test "$len" -le "$max_cmd_len"; }; then -	      objlist="$objlist $obj" + +	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then +	    output=${output_objdir}/${output_la}.lnkscript +	    func_verbose "creating GNU ld script: $output" +	    echo 'INPUT (' > $output +	    for obj in $save_libobjs +	    do +	      func_to_tool_file "$obj" +	      $ECHO "$func_to_tool_file_result" >> $output +	    done +	    echo ')' >> $output +	    func_append delfiles " $output" +	    func_to_tool_file "$output" +	    output=$func_to_tool_file_result +	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then +	    output=${output_objdir}/${output_la}.lnk +	    func_verbose "creating linker input file list: $output" +	    : > $output +	    set x $save_libobjs +	    shift +	    firstobj= +	    if test "$compiler_needs_object" = yes; then +	      firstobj="$1 " +	      shift +	    fi +	    for obj +	    do +	      func_to_tool_file "$obj" +	      $ECHO "$func_to_tool_file_result" >> $output +	    done +	    func_append delfiles " $output" +	    func_to_tool_file "$output" +	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\" +	  else +	    if test -n "$save_libobjs"; then +	      func_verbose "creating reloadable object files..." +	      output=$output_objdir/$output_la-${k}.$objext +	      eval test_cmds=\"$reload_cmds\" +	      func_len " $test_cmds" +	      len0=$func_len_result +	      len=$len0 + +	      # Loop over the list of objects to be linked. +	      for obj in $save_libobjs +	      do +		func_len " $obj" +		func_arith $len + $func_len_result +		len=$func_arith_result +		if test "X$objlist" = X || +		   test "$len" -lt "$max_cmd_len"; then +		  func_append objlist " $obj" +		else +		  # The command $test_cmds is almost too long, add a +		  # command to the queue. +		  if test "$k" -eq 1 ; then +		    # The first file doesn't have a previous command to add. +		    reload_objs=$objlist +		    eval concat_cmds=\"$reload_cmds\" +		  else +		    # All subsequent reloadable object files will link in +		    # the last one created. +		    reload_objs="$objlist $last_robj" +		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" +		  fi +		  last_robj=$output_objdir/$output_la-${k}.$objext +		  func_arith $k + 1 +		  k=$func_arith_result +		  output=$output_objdir/$output_la-${k}.$objext +		  objlist=" $obj" +		  func_len " $last_robj" +		  func_arith $len0 + $func_len_result +		  len=$func_arith_result +		fi +	      done +	      # Handle the remaining objects by creating one last +	      # reloadable object file.  All subsequent reloadable object +	      # files will link in the last one created. +	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~ +	      reload_objs="$objlist $last_robj" +	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\" +	      if test -n "$last_robj"; then +	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" +	      fi +	      func_append delfiles " $output" +  	    else -	      # The command $test_cmds is almost too long, add a -	      # command to the queue. -	      if test "$k" -eq 1 ; then -		# The first file doesn't have a previous command to add. -		eval concat_cmds=\"$reload_cmds $objlist $last_robj\" -	      else -		# All subsequent reloadable object files will link in -		# the last one created. -		eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" +	      output= +	    fi + +	    if ${skipped_export-false}; then +	      func_verbose "generating symbol list for \`$libname.la'" +	      export_symbols="$output_objdir/$libname.exp" +	      $opt_dry_run || $RM $export_symbols +	      libobjs=$output +	      # Append the command to create the export file. +	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~ +	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" +	      if test -n "$last_robj"; then +		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"  	      fi -	      last_robj=$output_objdir/$output_la-${k}.$objext -	      k=`expr $k + 1` -	      output=$output_objdir/$output_la-${k}.$objext -	      objlist=$obj -	      len=1  	    fi -	  done -	  # Handle the remaining objects by creating one last -	  # reloadable object file.  All subsequent reloadable object -	  # files will link in the last one created. -	  test -z "$concat_cmds" || concat_cmds=$concat_cmds~ -	  eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" - -	  if ${skipped_export-false}; then -	    $show "generating symbol list for \`$libname.la'" -	    export_symbols="$output_objdir/$libname.exp" -	    $run $rm $export_symbols -	    libobjs=$output -	    # Append the command to create the export file. -	    eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" -          fi - -	  # Set up a command to remove the reloadable object files -	  # after they are used. -	  i=0 -	  while test "$i" -lt "$k" -	  do -	    i=`expr $i + 1` -	    delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" -	  done -	  $echo "creating a temporary reloadable object file: $output" +	    test -n "$save_libobjs" && +	      func_verbose "creating a temporary reloadable object file: $output" -	  # Loop through the commands generated above and execute them. -	  save_ifs="$IFS"; IFS='~' -	  for cmd in $concat_cmds; do +	    # Loop through the commands generated above and execute them. +	    save_ifs="$IFS"; IFS='~' +	    for cmd in $concat_cmds; do +	      IFS="$save_ifs" +	      $opt_silent || { +		  func_quote_for_expand "$cmd" +		  eval "func_echo $func_quote_for_expand_result" +	      } +	      $opt_dry_run || eval "$cmd" || { +		lt_exit=$? + +		# Restore the uninstalled library and exit +		if test "$opt_mode" = relink; then +		  ( cd "$output_objdir" && \ +		    $RM "${realname}T" && \ +		    $MV "${realname}U" "$realname" ) +		fi + +		exit $lt_exit +	      } +	    done  	    IFS="$save_ifs" -	    $show "$cmd" -	    $run eval "$cmd" || exit $? -	  done -	  IFS="$save_ifs" + +	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then +	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' +	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"' +	    fi +	  fi + +          if ${skipped_export-false}; then +	    if test -n "$export_symbols" && test -n "$include_expsyms"; then +	      tmp_export_symbols="$export_symbols" +	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" +	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' +	    fi + +	    if test -n "$orig_export_symbols"; then +	      # The given exports_symbols file has to be filtered, so filter it. +	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" +	      # FIXME: $output_objdir/$libname.filter potentially contains lots of +	      # 's' commands which not all seds can handle. GNU sed should be fine +	      # though. Also, the filter scales superlinearly with the number of +	      # global variables. join(1) would be nice here, but unfortunately +	      # isn't a blessed tool. +	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter +	      func_append delfiles " $export_symbols $output_objdir/$libname.filter" +	      export_symbols=$output_objdir/$libname.def +	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols +	    fi +	  fi  	  libobjs=$output  	  # Restore the value of output. @@ -4190,6 +8477,7 @@ EOF  	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then  	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\" +	    test "X$libobjs" = "X " && libobjs=  	  fi  	  # Expand the library linking commands again to reset the  	  # value of $libobjs for piecewise linking. @@ -4202,28 +8490,45 @@ EOF  	      cmds=$module_cmds  	    fi  	  else -	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then -	    cmds=$archive_expsym_cmds -	  else -	    cmds=$archive_cmds +	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then +	      cmds=$archive_expsym_cmds +	    else +	      cmds=$archive_cmds  	    fi  	  fi +	fi + +	if test -n "$delfiles"; then +	  # Append the command to remove temporary files to $cmds. +	  eval cmds=\"\$cmds~\$RM $delfiles\" +	fi + +	# Add any objects from preloaded convenience libraries +	if test -n "$dlprefiles"; then +	  gentop="$output_objdir/${outputname}x" +	  func_append generated " $gentop" -	  # Append the command to remove the reloadable object files -	  # to the just-reset $cmds. -	  eval cmds=\"\$cmds~\$rm $delfiles\" +	  func_extract_archives $gentop $dlprefiles +	  func_append libobjs " $func_extract_archives_result" +	  test "X$libobjs" = "X " && libobjs=  	fi +  	save_ifs="$IFS"; IFS='~'  	for cmd in $cmds; do  	  IFS="$save_ifs"  	  eval cmd=\"$cmd\" -	  $show "$cmd" -	  $run eval "$cmd" || { +	  $opt_silent || { +	    func_quote_for_expand "$cmd" +	    eval "func_echo $func_quote_for_expand_result" +	  } +	  $opt_dry_run || eval "$cmd" || {  	    lt_exit=$?  	    # Restore the uninstalled library and exit -	    if test "$mode" = relink; then -	      $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' +	    if test "$opt_mode" = relink; then +	      ( cd "$output_objdir" && \ +	        $RM "${realname}T" && \ +		$MV "${realname}U" "$realname" )  	    fi  	    exit $lt_exit @@ -4232,13 +8537,12 @@ EOF  	IFS="$save_ifs"  	# Restore the uninstalled library and exit -	if test "$mode" = relink; then -	  $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? +	if test "$opt_mode" = relink; then +	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?  	  if test -n "$convenience"; then  	    if test -z "$whole_archive_flag_spec"; then -	      $show "${rm}r $gentop" -	      $run ${rm}r "$gentop" +	      func_show_eval '${RM}r "$gentop"'  	    fi  	  fi @@ -4248,8 +8552,7 @@ EOF  	# Create links to the real library.  	for linkname in $linknames; do  	  if test "$realname" != "$linkname"; then -	    $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" -	    $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? +	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'  	  fi  	done @@ -4262,39 +8565,35 @@ EOF        ;;      obj) +      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then +	func_warning "\`-dlopen' is ignored for objects" +      fi +        case " $deplibs" in        *\ -l* | *\ -L*) -	$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 ;; +	func_warning "\`-l' and \`-L' are ignored for objects" ;;        esac -      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then -	$echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 -      fi - -      if test -n "$rpath"; then -	$echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 -      fi +      test -n "$rpath" && \ +	func_warning "\`-rpath' is ignored for objects" -      if test -n "$xrpath"; then -	$echo "$modename: warning: \`-R' is ignored for objects" 1>&2 -      fi +      test -n "$xrpath" && \ +	func_warning "\`-R' is ignored for objects" -      if test -n "$vinfo"; then -	$echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 -      fi +      test -n "$vinfo" && \ +	func_warning "\`-version-info' is ignored for objects" -      if test -n "$release"; then -	$echo "$modename: warning: \`-release' is ignored for objects" 1>&2 -      fi +      test -n "$release" && \ +	func_warning "\`-release' is ignored for objects"        case $output in        *.lo) -	if test -n "$objs$old_deplibs"; then -	  $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 -	  exit $EXIT_FAILURE -	fi -	libobj="$output" -	obj=`$echo "X$output" | $Xsed -e "$lo2o"` +	test -n "$objs$old_deplibs" && \ +	  func_fatal_error "cannot build library object \`$output' from non-libtool objects" + +	libobj=$output +	func_lo2o "$libobj" +	obj=$func_lo2o_result  	;;        *)  	libobj= @@ -4303,7 +8602,7 @@ EOF        esac        # Delete the old objects. -      $run $rm $obj $libobj +      $opt_dry_run || $RM $obj $libobj        # Objects from convenience libraries.  This assumes        # single-version convenience libraries.  Whenever we create @@ -4319,35 +8618,29 @@ EOF        if test -n "$convenience"; then  	if test -n "$whole_archive_flag_spec"; then  	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" -	  reload_conv_objs=$reload_objs\ `$echo "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` +	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`  	else  	  gentop="$output_objdir/${obj}x" -	  generated="$generated $gentop" +	  func_append generated " $gentop"  	  func_extract_archives $gentop $convenience  	  reload_conv_objs="$reload_objs $func_extract_archives_result"  	fi        fi +      # If we're not building shared, we need to use non_pic_objs +      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" +        # Create the old-style object. -      reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test +      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test        output="$obj" -      cmds=$reload_cmds -      save_ifs="$IFS"; IFS='~' -      for cmd in $cmds; do -	IFS="$save_ifs" -	eval cmd=\"$cmd\" -	$show "$cmd" -	$run eval "$cmd" || exit $? -      done -      IFS="$save_ifs" +      func_execute_cmds "$reload_cmds" 'exit $?'        # Exit if we aren't doing a library object file.        if test -z "$libobj"; then  	if test -n "$gentop"; then -	  $show "${rm}r $gentop" -	  $run ${rm}r $gentop +	  func_show_eval '${RM}r "$gentop"'  	fi  	exit $EXIT_SUCCESS @@ -4355,14 +8648,13 @@ EOF        if test "$build_libtool_libs" != yes; then  	if test -n "$gentop"; then -	  $show "${rm}r $gentop" -	  $run ${rm}r $gentop +	  func_show_eval '${RM}r "$gentop"'  	fi  	# Create an invalid libtool object if no PIC, so that we don't  	# accidentally link it into a program.  	# $show "echo timestamp > $libobj" -	# $run eval "echo timestamp > $libobj" || exit $? +	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?  	exit $EXIT_SUCCESS        fi @@ -4370,20 +8662,11 @@ EOF  	# Only do commands if we really have different PIC objects.  	reload_objs="$libobjs $reload_conv_objs"  	output="$libobj" -	cmds=$reload_cmds -	save_ifs="$IFS"; IFS='~' -	for cmd in $cmds; do -	  IFS="$save_ifs" -	  eval cmd=\"$cmd\" -	  $show "$cmd" -	  $run eval "$cmd" || exit $? -	done -	IFS="$save_ifs" +	func_execute_cmds "$reload_cmds" 'exit $?'        fi        if test -n "$gentop"; then -	$show "${rm}r $gentop" -	$run ${rm}r $gentop +	func_show_eval '${RM}r "$gentop"'        fi        exit $EXIT_SUCCESS @@ -4391,39 +8674,45 @@ EOF      prog)        case $host in -	*cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; +	*cygwin*) func_stripname '' '.exe' "$output" +	          output=$func_stripname_result.exe;;        esac -      if test -n "$vinfo"; then -	$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 -      fi +      test -n "$vinfo" && \ +	func_warning "\`-version-info' is ignored for programs" -      if test -n "$release"; then -	$echo "$modename: warning: \`-release' is ignored for programs" 1>&2 -      fi +      test -n "$release" && \ +	func_warning "\`-release' is ignored for programs" -      if test "$preload" = yes; then -	if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && -	   test "$dlopen_self_static" = unknown; then -	  $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." -	fi -      fi +      test "$preload" = yes \ +        && test "$dlopen_support" = unknown \ +	&& test "$dlopen_self" = unknown \ +	&& test "$dlopen_self_static" = unknown && \ +	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."        case $host in        *-*-rhapsody* | *-*-darwin1.[012])  	# On Rhapsody replace the C library is the System framework -	compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` -	finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` +	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` +	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`  	;;        esac        case $host in -      *darwin*) -        # Don't allow lazy linking, it breaks C++ global constructors -        if test "$tagname" = CXX ; then -        compile_command="$compile_command ${wl}-bind_at_load" -        finalize_command="$finalize_command ${wl}-bind_at_load" -        fi -        ;; +      *-*-darwin*) +	# Don't allow lazy linking, it breaks C++ global constructors +	# But is supposedly fixed on 10.4 or later (yay!). +	if test "$tagname" = CXX ; then +	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in +	    10.[0123]) +	      func_append compile_command " ${wl}-bind_at_load" +	      func_append finalize_command " ${wl}-bind_at_load" +	    ;; +	  esac +	fi +	# Time to change all our "foo.ltframework" stuff back to "-framework foo" +	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` +	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` +	;;        esac @@ -4436,7 +8725,7 @@ EOF  	*)  	  case " $compile_deplibs " in  	  *" -L$path/$objdir "*) -	    new_libs="$new_libs -L$path/$objdir" ;; +	    func_append new_libs " -L$path/$objdir" ;;  	  esac  	  ;;  	esac @@ -4446,17 +8735,17 @@ EOF  	-L*)  	  case " $new_libs " in  	  *" $deplib "*) ;; -	  *) new_libs="$new_libs $deplib" ;; +	  *) func_append new_libs " $deplib" ;;  	  esac  	  ;; -	*) new_libs="$new_libs $deplib" ;; +	*) func_append new_libs " $deplib" ;;  	esac        done        compile_deplibs="$new_libs" -      compile_command="$compile_command $compile_deplibs" -      finalize_command="$finalize_command $finalize_deplibs" +      func_append compile_command " $compile_deplibs" +      func_append finalize_command " $finalize_deplibs"        if test -n "$rpath$xrpath"; then  	# If the user specified any rpath flags, then add them. @@ -4464,7 +8753,7 @@ EOF  	  # This is the magic to use -rpath.  	  case "$finalize_rpath " in  	  *" $libdir "*) ;; -	  *) finalize_rpath="$finalize_rpath $libdir" ;; +	  *) func_append finalize_rpath " $libdir" ;;  	  esac  	done        fi @@ -4483,30 +8772,32 @@ EOF  	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)  		;;  	      *) -		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" +		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"  		;;  	      esac  	    fi  	  else  	    eval flag=\"$hardcode_libdir_flag_spec\" -	    rpath="$rpath $flag" +	    func_append rpath " $flag"  	  fi  	elif test -n "$runpath_var"; then  	  case "$perm_rpath " in  	  *" $libdir "*) ;; -	  *) perm_rpath="$perm_rpath $libdir" ;; +	  *) func_append perm_rpath " $libdir" ;;  	  esac  	fi  	case $host in -	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) -	  testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` +	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) +	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`  	  case :$dllsearchpath: in  	  *":$libdir:"*) ;; -	  *) dllsearchpath="$dllsearchpath:$libdir";; +	  ::) dllsearchpath=$libdir;; +	  *) func_append dllsearchpath ":$libdir";;  	  esac  	  case :$dllsearchpath: in  	  *":$testbindir:"*) ;; -	  *) dllsearchpath="$dllsearchpath:$testbindir";; +	  ::) dllsearchpath=$testbindir;; +	  *) func_append dllsearchpath ":$testbindir";;  	  esac  	  ;;  	esac @@ -4532,18 +8823,18 @@ EOF  	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)  		;;  	      *) -		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" +		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"  		;;  	      esac  	    fi  	  else  	    eval flag=\"$hardcode_libdir_flag_spec\" -	    rpath="$rpath $flag" +	    func_append rpath " $flag"  	  fi  	elif test -n "$runpath_var"; then  	  case "$finalize_perm_rpath " in  	  *" $libdir "*) ;; -	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; +	  *) func_append finalize_perm_rpath " $libdir" ;;  	  esac  	fi        done @@ -4557,281 +8848,57 @@ EOF        if test -n "$libobjs" && test "$build_old_libs" = yes; then  	# Transform all the library objects into standard objects. -	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` -	finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` +	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` +	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`        fi -      dlsyms= -      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then -	if test -n "$NM" && test -n "$global_symbol_pipe"; then -	  dlsyms="${outputname}S.c" -	else -	  $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 -	fi -      fi - -      if test -n "$dlsyms"; then -	case $dlsyms in -	"") ;; -	*.c) -	  # Discover the nlist of each of the dlfiles. -	  nlist="$output_objdir/${outputname}.nm" - -	  $show "$rm $nlist ${nlist}S ${nlist}T" -	  $run $rm "$nlist" "${nlist}S" "${nlist}T" - -	  # Parse the name list into a source file. -	  $show "creating $output_objdir/$dlsyms" - -	  test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ -/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ -/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -/* Prevent the only kind of declaration conflicts we can make. */ -#define lt_preloaded_symbols some_other_symbol - -/* External symbol declarations for the compiler. */\ -" - -	  if test "$dlself" = yes; then -	    $show "generating symbol list for \`$output'" - -	    test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" - -	    # Add our own program objects to the symbol list. -	    progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` -	    for arg in $progfiles; do -	      $show "extracting global C symbols from \`$arg'" -	      $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" -	    done - -	    if test -n "$exclude_expsyms"; then -	      $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' -	      $run eval '$mv "$nlist"T "$nlist"' -	    fi - -	    if test -n "$export_symbols_regex"; then -	      $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' -	      $run eval '$mv "$nlist"T "$nlist"' -	    fi - -	    # Prepare the list of exported symbols -	    if test -z "$export_symbols"; then -	      export_symbols="$output_objdir/$outputname.exp" -	      $run $rm $export_symbols -	      $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' -              case $host in -              *cygwin* | *mingw* ) -	        $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' -		$run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' -                ;; -              esac -	    else -	      $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' -	      $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' -	      $run eval 'mv "$nlist"T "$nlist"' -              case $host in -              *cygwin* | *mingw* ) -	        $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' -		$run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' -                ;; -              esac -	    fi -	  fi - -	  for arg in $dlprefiles; do -	    $show "extracting global C symbols from \`$arg'" -	    name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` -	    $run eval '$echo ": $name " >> "$nlist"' -	    $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" -	  done - -	  if test -z "$run"; then -	    # Make sure we have at least an empty file. -	    test -f "$nlist" || : > "$nlist" - -	    if test -n "$exclude_expsyms"; then -	      $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T -	      $mv "$nlist"T "$nlist" -	    fi - -	    # Try sorting and uniquifying the output. -	    if grep -v "^: " < "$nlist" | -		if sort -k 3 </dev/null >/dev/null 2>&1; then -		  sort -k 3 -		else -		  sort +2 -		fi | -		uniq > "$nlist"S; then -	      : -	    else -	      grep -v "^: " < "$nlist" > "$nlist"S -	    fi - -	    if test -f "$nlist"S; then -	      eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' -	    else -	      $echo '/* NONE */' >> "$output_objdir/$dlsyms" -	    fi - -	    $echo >> "$output_objdir/$dlsyms" "\ - -#undef lt_preloaded_symbols - -#if defined (__STDC__) && __STDC__ -# define lt_ptr void * -#else -# define lt_ptr char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -" - -	    case $host in -	    *cygwin* | *mingw* ) -	  $echo >> "$output_objdir/$dlsyms" "\ -/* DATA imports from DLLs on WIN32 can't be const, because -   runtime relocations are performed -- see ld's documentation -   on pseudo-relocs */ -struct { -" -	      ;; -	    * ) -	  $echo >> "$output_objdir/$dlsyms" "\ -const struct { -" -	      ;; -	    esac - - -	  $echo >> "$output_objdir/$dlsyms" "\ -  const char *name; -  lt_ptr address; -} -lt_preloaded_symbols[] = -{\ -" - -	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" - -	    $echo >> "$output_objdir/$dlsyms" "\ -  {0, (lt_ptr) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { -  return lt_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" -	  fi - -	  pic_flag_for_symtable= -	  case $host in -	  # compiling the symbol table file with pic_flag works around -	  # a FreeBSD bug that causes programs to crash when -lm is -	  # linked before any other PIC object.  But we must not use -	  # pic_flag when linking with -static.  The problem exists in -	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. -	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) -	    case "$compile_command " in -	    *" -static "*) ;; -	    *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; -	    esac;; -	  *-*-hpux*) -	    case "$compile_command " in -	    *" -static "*) ;; -	    *) pic_flag_for_symtable=" $pic_flag";; -	    esac -	  esac - -	  # Now compile the dynamic symbol file. -	  $show "(cd $output_objdir && $LTCC  $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" -	  $run eval '(cd $output_objdir && $LTCC  $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? - -	  # Clean up the generated files. -	  $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" -	  $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" +      func_generate_dlsyms "$outputname" "@PROGRAM@" "no" -	  # Transform the symbol file into the correct name. -          case $host in -          *cygwin* | *mingw* ) -            if test -f "$output_objdir/${outputname}.def" ; then -              compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` -              finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` -            else -              compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` -              finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` -             fi -            ;; -          * ) -            compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` -            finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` -            ;; -          esac -	  ;; -	*) -	  $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 -	  exit $EXIT_FAILURE -	  ;; -	esac -      else -	# We keep going just in case the user didn't refer to -	# lt_preloaded_symbols.  The linker will fail if global_symbol_pipe -	# really was required. - -	# Nullify the symbol file. -	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` -	finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` +      # template prelinking step +      if test -n "$prelink_cmds"; then +	func_execute_cmds "$prelink_cmds" 'exit $?'        fi -      if test "$need_relink" = no || test "$build_libtool_libs" != yes; then +      wrappers_required=yes +      case $host in +      *cegcc* | *mingw32ce*) +        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. +        wrappers_required=no +        ;; +      *cygwin* | *mingw* ) +        if test "$build_libtool_libs" != yes; then +          wrappers_required=no +        fi +        ;; +      *) +        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then +          wrappers_required=no +        fi +        ;; +      esac +      if test "$wrappers_required" = no; then  	# Replace the output file specification. -	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$output"'%g' | $NL2SP` +	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`  	link_command="$compile_command$compile_rpath"  	# We have no uninstalled library dependencies, so finalize right now. -	$show "$link_command" -	$run eval "$link_command" -	exit_status=$? +	exit_status=0 +	func_show_eval "$link_command" 'exit_status=$?' + +	if test -n "$postlink_cmds"; then +	  func_to_tool_file "$output" +	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` +	  func_execute_cmds "$postlink_cmds" 'exit $?' +	fi  	# Delete the generated files. -	if test -n "$dlsyms"; then -	  $show "$rm $output_objdir/${outputname}S.${objext}" -	  $run $rm "$output_objdir/${outputname}S.${objext}" +	if test -f "$output_objdir/${outputname}S.${objext}"; then +	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'  	fi  	exit $exit_status        fi -      if test -n "$shlibpath_var"; then -	# We should set the shlibpath_var -	rpath= -	for dir in $temp_rpath; do -	  case $dir in -	  [\\/]* | [A-Za-z]:[\\/]*) -	    # Absolute path. -	    rpath="$rpath$dir:" -	    ;; -	  *) -	    # Relative path: add a thisdir entry. -	    rpath="$rpath\$thisdir/$dir:" -	    ;; -	  esac -	done -	temp_rpath="$rpath" -      fi -        if test -n "$compile_shlibpath$finalize_shlibpath"; then  	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"        fi @@ -4846,7 +8913,7 @@ static const void *lt_preloaded_setup() {  	  # We should set the runpath_var.  	  rpath=  	  for dir in $perm_rpath; do -	    rpath="$rpath$dir:" +	    func_append rpath "$dir:"  	  done  	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "  	fi @@ -4854,7 +8921,7 @@ static const void *lt_preloaded_setup() {  	  # We should set the runpath_var.  	  rpath=  	  for dir in $finalize_perm_rpath; do -	    rpath="$rpath$dir:" +	    func_append rpath "$dir:"  	  done  	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "  	fi @@ -4864,12 +8931,18 @@ static const void *lt_preloaded_setup() {  	# We don't need to create a wrapper script.  	link_command="$compile_var$compile_command$compile_rpath"  	# Replace the output file specification. -	link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` +	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`  	# Delete the old output file. -	$run $rm $output +	$opt_dry_run || $RM $output  	# Link the executable and exit -	$show "$link_command" -	$run eval "$link_command" || exit $? +	func_show_eval "$link_command" 'exit $?' + +	if test -n "$postlink_cmds"; then +	  func_to_tool_file "$output" +	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` +	  func_execute_cmds "$postlink_cmds" 'exit $?' +	fi +  	exit $EXIT_SUCCESS        fi @@ -4878,13 +8951,13 @@ static const void *lt_preloaded_setup() {  	link_command="$compile_var$compile_command$compile_rpath"  	relink_command="$finalize_var$finalize_command$finalize_rpath" -	$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 -	$echo "$modename: \`$output' will be relinked during installation" 1>&2 +	func_warning "this platform does not like uninstalled shared libraries" +	func_warning "\`$output' will be relinked during installation"        else  	if test "$fast_install" != no; then  	  link_command="$finalize_var$compile_command$finalize_rpath"  	  if test "$fast_install" = yes; then -	    relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $SP2NL | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g' | $NL2SP` +	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`  	  else  	    # fast_install is set to needless  	    relink_command= @@ -4896,608 +8969,98 @@ static const void *lt_preloaded_setup() {        fi        # Replace the output file specification. -      link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` +      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`        # Delete the old output files. -      $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname +      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname -      $show "$link_command" -      $run eval "$link_command" || exit $? +      func_show_eval "$link_command" 'exit $?' + +      if test -n "$postlink_cmds"; then +	func_to_tool_file "$output_objdir/$outputname" +	postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` +	func_execute_cmds "$postlink_cmds" 'exit $?' +      fi        # Now create the wrapper script. -      $show "creating $output" +      func_verbose "creating $output"        # Quote the relink command for shipping.        if test -n "$relink_command"; then  	# Preserve any variables that may affect compiler behavior  	for var in $variables_saved_for_relink; do  	  if eval test -z \"\${$var+set}\"; then -	    relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" +	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"  	  elif eval var_value=\$$var; test -z "$var_value"; then  	    relink_command="$var=; export $var; $relink_command"  	  else -	    var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` -	    relink_command="$var=\"$var_value\"; export $var; $relink_command" +	    func_quote_for_eval "$var_value" +	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"  	  fi  	done  	relink_command="(cd `pwd`; $relink_command)" -	relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` -      fi - -      # Quote $echo for shipping. -      if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then -	case $progpath in -	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; -	*) qecho="$SHELL `pwd`/$progpath --fallback-echo";; -	esac -	qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` -      else -	qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` +	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`        fi -      # Only actually do things if our run command is non-null. -      if test -z "$run"; then +      # Only actually do things if not in dry run mode. +      $opt_dry_run || {  	# win32 will think the script is a binary if it has  	# a .exe suffix, so we strip it off here.  	case $output in -	  *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; +	  *.exe) func_stripname '' '.exe' "$output" +	         output=$func_stripname_result ;;  	esac  	# test for cygwin because mv fails w/o .exe extensions  	case $host in  	  *cygwin*)  	    exeext=.exe -	    outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; +	    func_stripname '' '.exe' "$outputname" +	    outputname=$func_stripname_result ;;  	  *) exeext= ;;  	esac  	case $host in  	  *cygwin* | *mingw* ) -            output_name=`basename $output` -            output_path=`dirname $output` -            cwrappersource="$output_path/$objdir/lt-$output_name.c" -            cwrapper="$output_path/$output_name.exe" -            $rm $cwrappersource $cwrapper -            trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - -	    cat > $cwrappersource <<EOF - -/* $cwrappersource - temporary wrapper executable for $objdir/$outputname -   Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP - -   The $output program cannot be directly executed until all the libtool -   libraries that it depends on are installed. - -   This wrapper executable should never be moved out of the build directory. -   If it is, it will not operate correctly. - -   Currently, it simply execs the wrapper *script* "/bin/sh $output", -   but could eventually absorb all of the scripts functionality and -   exec $objdir/$outputname directly. -*/ -EOF -	    cat >> $cwrappersource<<"EOF" -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <malloc.h> -#include <stdarg.h> -#include <assert.h> -#include <string.h> -#include <ctype.h> -#include <sys/stat.h> - -#if defined(PATH_MAX) -# define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ -  defined (__OS2__) -# define HAVE_DOS_BASED_FILE_SYSTEM -# ifndef DIR_SEPARATOR_2 -#  define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -#  define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ -        (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ -  if (stale) { free ((void *) stale); stale = 0; } \ -} while (0) - -/* -DDEBUG is fairly common in CFLAGS.  */ -#undef DEBUG -#if defined DEBUGWRAPPER -# define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) -#else -# define DEBUG(format, ...) -#endif - -const char *program_name = NULL; - -void * xmalloc (size_t num); -char * xstrdup (const char *string); -const char * base_name (const char *name); -char * find_executable(const char *wrapper); -int    check_executable(const char *path); -char * strendzap(char *str, const char *pat); -void lt_fatal (const char *message, ...); - -int -main (int argc, char *argv[]) -{ -  char **newargz; -  int i; - -  program_name = (char *) xstrdup (base_name (argv[0])); -  DEBUG("(main) argv[0]      : %s\n",argv[0]); -  DEBUG("(main) program_name : %s\n",program_name); -  newargz = XMALLOC(char *, argc+2); -EOF - -            cat >> $cwrappersource <<EOF -  newargz[0] = (char *) xstrdup("$SHELL"); -EOF - -            cat >> $cwrappersource <<"EOF" -  newargz[1] = find_executable(argv[0]); -  if (newargz[1] == NULL) -    lt_fatal("Couldn't find %s", argv[0]); -  DEBUG("(main) found exe at : %s\n",newargz[1]); -  /* we know the script has the same name, without the .exe */ -  /* so make sure newargz[1] doesn't end in .exe */ -  strendzap(newargz[1],".exe"); -  for (i = 1; i < argc; i++) -    newargz[i+1] = xstrdup(argv[i]); -  newargz[argc+1] = NULL; - -  for (i=0; i<argc+1; i++) -  { -    DEBUG("(main) newargz[%d]   : %s\n",i,newargz[i]); -    ; -  } - -EOF - -            case $host_os in -              mingw*) -                cat >> $cwrappersource <<EOF -  execv("$SHELL",(char const **)newargz); -EOF -              ;; -              *) -                cat >> $cwrappersource <<EOF -  execv("$SHELL",newargz); -EOF -              ;; -            esac - -            cat >> $cwrappersource <<"EOF" -  return 127; -} - -void * -xmalloc (size_t num) -{ -  void * p = (void *) malloc (num); -  if (!p) -    lt_fatal ("Memory exhausted"); - -  return p; -} - -char * -xstrdup (const char *string) -{ -  return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL -; -} - -const char * -base_name (const char *name) -{ -  const char *base; - -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) -  /* Skip over the disk name in MSDOS pathnames. */ -  if (isalpha ((unsigned char)name[0]) && name[1] == ':') -    name += 2; -#endif - -  for (base = name; *name; name++) -    if (IS_DIR_SEPARATOR (*name)) -      base = name + 1; -  return base; -} - -int -check_executable(const char * path) -{ -  struct stat st; - -  DEBUG("(check_executable)  : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); -  if ((!path) || (!*path)) -    return 0; - -  if ((stat (path, &st) >= 0) && -      ( -        /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ -#if defined (S_IXOTH) -       ((st.st_mode & S_IXOTH) == S_IXOTH) || -#endif -#if defined (S_IXGRP) -       ((st.st_mode & S_IXGRP) == S_IXGRP) || -#endif -       ((st.st_mode & S_IXUSR) == S_IXUSR)) -      ) -    return 1; -  else -    return 0; -} - -/* Searches for the full path of the wrapper.  Returns -   newly allocated full path name if found, NULL otherwise */ -char * -find_executable (const char* wrapper) -{ -  int has_slash = 0; -  const char* p; -  const char* p_next; -  /* static buffer for getcwd */ -  char tmp[LT_PATHMAX + 1]; -  int tmp_len; -  char* concat_name; - -  DEBUG("(find_executable)  : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); - -  if ((wrapper == NULL) || (*wrapper == '\0')) -    return NULL; - -  /* Absolute path? */ -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) -  if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':') -  { -    concat_name = xstrdup (wrapper); -    if (check_executable(concat_name)) -      return concat_name; -    XFREE(concat_name); -  } -  else -  { -#endif -    if (IS_DIR_SEPARATOR (wrapper[0])) -    { -      concat_name = xstrdup (wrapper); -      if (check_executable(concat_name)) -        return concat_name; -      XFREE(concat_name); -    } -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) -  } -#endif - -  for (p = wrapper; *p; p++) -    if (*p == '/') -    { -      has_slash = 1; -      break; -    } -  if (!has_slash) -  { -    /* no slashes; search PATH */ -    const char* path = getenv ("PATH"); -    if (path != NULL) -    { -      for (p = path; *p; p = p_next) -      { -        const char* q; -        size_t p_len; -        for (q = p; *q; q++) -          if (IS_PATH_SEPARATOR(*q)) -            break; -        p_len = q - p; -        p_next = (*q == '\0' ? q : q + 1); -        if (p_len == 0) -        { -          /* empty path: current directory */ -          if (getcwd (tmp, LT_PATHMAX) == NULL) -            lt_fatal ("getcwd failed"); -          tmp_len = strlen(tmp); -          concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); -          memcpy (concat_name, tmp, tmp_len); -          concat_name[tmp_len] = '/'; -          strcpy (concat_name + tmp_len + 1, wrapper); -        } -        else -        { -          concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1); -          memcpy (concat_name, p, p_len); -          concat_name[p_len] = '/'; -          strcpy (concat_name + p_len + 1, wrapper); -        } -        if (check_executable(concat_name)) -          return concat_name; -        XFREE(concat_name); -      } -    } -    /* not found in PATH; assume curdir */ -  } -  /* Relative path | not found in path: prepend cwd */ -  if (getcwd (tmp, LT_PATHMAX) == NULL) -    lt_fatal ("getcwd failed"); -  tmp_len = strlen(tmp); -  concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); -  memcpy (concat_name, tmp, tmp_len); -  concat_name[tmp_len] = '/'; -  strcpy (concat_name + tmp_len + 1, wrapper); - -  if (check_executable(concat_name)) -    return concat_name; -  XFREE(concat_name); -  return NULL; -} - -char * -strendzap(char *str, const char *pat) -{ -  size_t len, patlen; - -  assert(str != NULL); -  assert(pat != NULL); - -  len = strlen(str); -  patlen = strlen(pat); - -  if (patlen <= len) -  { -    str += len - patlen; -    if (strcmp(str, pat) == 0) -      *str = '\0'; -  } -  return str; -} - -static void -lt_error_core (int exit_status, const char * mode, -          const char * message, va_list ap) -{ -  fprintf (stderr, "%s: %s: ", program_name, mode); -  vfprintf (stderr, message, ap); -  fprintf (stderr, ".\n"); - -  if (exit_status >= 0) -    exit (exit_status); -} - -void -lt_fatal (const char *message, ...) -{ -  va_list ap; -  va_start (ap, message); -  lt_error_core (EXIT_FAILURE, "FATAL", message, ap); -  va_end (ap); -} -EOF -          # we should really use a build-platform specific compiler -          # here, but OTOH, the wrappers (shell script and this C one) -          # are only useful if you want to execute the "real" binary. -          # Since the "real" binary is built for $host, then this -          # wrapper might as well be built for $host, too. -          $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource -          ;; -        esac -        $rm $output -        trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 - -	$echo > $output "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting.  It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='${SED} -e 1s/^X//' -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE). -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then -  emulate sh -  NULLCMD=: -  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which -  # is contrary to our usage.  Disable this feature. -  alias -g '\${1+\"\$@\"}'='\"\$@\"' -  setopt NO_GLOB_SUBST -else -  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then -  # install mode needs the following variable: -  notinst_deplibs='$notinst_deplibs' -else -  # When we are sourced in execute mode, \$file and \$echo are already set. -  if test \"\$libtool_execute_magic\" != \"$magic\"; then -    echo=\"$qecho\" -    file=\"\$0\" -    # Make sure echo works. -    if test \"X\$1\" = X--no-reexec; then -      # Discard the --no-reexec flag, and continue. -      shift -    elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then -      # Yippee, \$echo works! -      : -    else -      # Restart under the correct shell, and then maybe \$echo will work. -      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} -    fi -  fi\ -" -	$echo >> $output "\ - -  # Find the directory that this script lives in. -  thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` -  test \"x\$thisdir\" = \"x\$file\" && thisdir=. - -  # Follow symbolic links until we get to the real thisdir. -  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` -  while test -n \"\$file\"; do -    destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` - -    # If there was a directory component, then change thisdir. -    if test \"x\$destdir\" != \"x\$file\"; then -      case \"\$destdir\" in -      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; -      *) thisdir=\"\$thisdir/\$destdir\" ;; -      esac -    fi - -    file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` -    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` -  done - -  # Try to get the absolute directory name. -  absdir=\`cd \"\$thisdir\" && pwd\` -  test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - -	if test "$fast_install" = yes; then -	  $echo >> $output "\ -  program=lt-'$outputname'$exeext -  progdir=\"\$thisdir/$objdir\" - -  if test ! -f \"\$progdir/\$program\" || \\ -     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ -       test \"X\$file\" != \"X\$progdir/\$program\"; }; then - -    file=\"\$\$-\$program\" - -    if test ! -d \"\$progdir\"; then -      $mkdir \"\$progdir\" -    else -      $rm \"\$progdir/\$file\" -    fi" - -	  $echo >> $output "\ - -    # relink executable if necessary -    if test -n \"\$relink_command\"; then -      if relink_command_output=\`eval \$relink_command 2>&1\`; then : -      else -	$echo \"\$relink_command_output\" >&2 -	$rm \"\$progdir/\$file\" -	exit $EXIT_FAILURE -      fi -    fi - -    $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || -    { $rm \"\$progdir/\$program\"; -      $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } -    $rm \"\$progdir/\$file\" -  fi" -	else -	  $echo >> $output "\ -  program='$outputname' -  progdir=\"\$thisdir/$objdir\" -" -	fi - -	$echo >> $output "\ - -  if test -f \"\$progdir/\$program\"; then" - -	# Export our shlibpath_var if we have one. -	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then -	  $echo >> $output "\ -    # Add our own library path to $shlibpath_var -    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - -    # Some systems cannot cope with colon-terminated $shlibpath_var -    # The second colon is a workaround for a bug in BeOS R4 sed -    $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` - -    export $shlibpath_var -" -	fi - -	# fixup the dll searchpath if we need to. -	if test -n "$dllsearchpath"; then -	  $echo >> $output "\ -    # Add the dll search path components to the executable PATH -    PATH=$dllsearchpath:\$PATH -" -	fi +	    func_dirname_and_basename "$output" "" "." +	    output_name=$func_basename_result +	    output_path=$func_dirname_result +	    cwrappersource="$output_path/$objdir/lt-$output_name.c" +	    cwrapper="$output_path/$output_name.exe" +	    $RM $cwrappersource $cwrapper +	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + +	    func_emit_cwrapperexe_src > $cwrappersource + +	    # The wrapper executable is built using the $host compiler, +	    # because it contains $host paths and files. If cross- +	    # compiling, it, like the target executable, must be +	    # executed on the $host or under an emulation environment. +	    $opt_dry_run || { +	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource +	      $STRIP $cwrapper +	    } -	$echo >> $output "\ -    if test \"\$libtool_execute_magic\" != \"$magic\"; then -      # Run the actual program with our arguments. -" -	case $host in -	# Backslashes separate directories on plain windows -	*-*-mingw | *-*-os2*) -	  $echo >> $output "\ -      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" +	    # Now, create the wrapper script for func_source use: +	    func_ltwrapper_scriptname $cwrapper +	    $RM $func_ltwrapper_scriptname_result +	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 +	    $opt_dry_run || { +	      # note: this script will not be executed, so do not chmod. +	      if test "x$build" = "x$host" ; then +		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result +	      else +		func_emit_wrapper no > $func_ltwrapper_scriptname_result +	      fi +	    }  	  ;; +	  * ) +	    $RM $output +	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 -	*) -	  $echo >> $output "\ -      exec \"\$progdir/\$program\" \${1+\"\$@\"} -" +	    func_emit_wrapper no > $output +	    chmod +x $output  	  ;;  	esac -	$echo >> $output "\ -      \$echo \"\$0: cannot exec \$program \$*\" -      exit $EXIT_FAILURE -    fi -  else -    # The program doesn't exist. -    \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 -    \$echo \"This script is just a wrapper for \$program.\" 1>&2 -    $echo \"See the $PACKAGE documentation for more information.\" 1>&2 -    exit $EXIT_FAILURE -  fi -fi\ -" -	chmod +x $output -      fi +      }        exit $EXIT_SUCCESS        ;;      esac @@ -5506,7 +9069,7 @@ fi\      for oldlib in $oldlibs; do        if test "$build_libtool_libs" = convenience; then -	oldobjs="$libobjs_save" +	oldobjs="$libobjs_save $symfileobj"  	addlibs="$convenience"  	build_libtool_libs=no        else @@ -5515,22 +9078,35 @@ fi\  	  build_libtool_libs=no  	else  	  oldobjs="$old_deplibs $non_pic_objects" +	  if test "$preload" = yes && test -f "$symfileobj"; then +	    func_append oldobjs " $symfileobj" +	  fi  	fi  	addlibs="$old_convenience"        fi        if test -n "$addlibs"; then  	gentop="$output_objdir/${outputname}x" -	generated="$generated $gentop" +	func_append generated " $gentop"  	func_extract_archives $gentop $addlibs -	oldobjs="$oldobjs $func_extract_archives_result" +	func_append oldobjs " $func_extract_archives_result"        fi        # Do each command in the archive commands.        if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then -       cmds=$old_archive_from_new_cmds +	cmds=$old_archive_from_new_cmds        else + +	# Add any objects from preloaded convenience libraries +	if test -n "$dlprefiles"; then +	  gentop="$output_objdir/${outputname}x" +	  func_append generated " $gentop" + +	  func_extract_archives $gentop $dlprefiles +	  func_append oldobjs " $func_extract_archives_result" +	fi +  	# POSIX demands no paths to be encoded in archives.  We have  	# to avoid creating archives with duplicate basenames if we  	# might have to extract them afterwards, e.g., when creating a @@ -5539,32 +9115,22 @@ fi\  	# not supported by libtool).  	if (for obj in $oldobjs  	    do -	      $echo "X$obj" | $Xsed -e 's%^.*/%%' +	      func_basename "$obj" +	      $ECHO "$func_basename_result"  	    done | sort | sort -uc >/dev/null 2>&1); then  	  :  	else -	  $echo "copying selected object files to avoid basename conflicts..." - -	  if test -z "$gentop"; then -	    gentop="$output_objdir/${outputname}x" -	    generated="$generated $gentop" - -	    $show "${rm}r $gentop" -	    $run ${rm}r "$gentop" -	    $show "$mkdir $gentop" -	    $run $mkdir "$gentop" -	    exit_status=$? -	    if test "$exit_status" -ne 0 && test ! -d "$gentop"; then -	      exit $exit_status -	    fi -	  fi - +	  echo "copying selected object files to avoid basename conflicts..." +	  gentop="$output_objdir/${outputname}x" +	  func_append generated " $gentop" +	  func_mkdir_p "$gentop"  	  save_oldobjs=$oldobjs  	  oldobjs=  	  counter=1  	  for obj in $save_oldobjs  	  do -	    objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` +	    func_basename "$obj" +	    objbase="$func_basename_result"  	    case " $oldobjs " in  	    " ") oldobjs=$obj ;;  	    *[\ /]"$objbase "*) @@ -5572,58 +9138,72 @@ fi\  		# Make sure we don't pick an alternate name that also  		# overlaps.  		newobj=lt$counter-$objbase -		counter=`expr $counter + 1` +		func_arith $counter + 1 +		counter=$func_arith_result  		case " $oldobjs " in  		*[\ /]"$newobj "*) ;;  		*) if test ! -f "$gentop/$newobj"; then break; fi ;;  		esac  	      done -	      $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" -	      $run ln "$obj" "$gentop/$newobj" || -	      $run cp "$obj" "$gentop/$newobj" -	      oldobjs="$oldobjs $gentop/$newobj" +	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" +	      func_append oldobjs " $gentop/$newobj"  	      ;; -	    *) oldobjs="$oldobjs $obj" ;; +	    *) func_append oldobjs " $obj" ;;  	    esac  	  done  	fi -  	eval cmds=\"$old_archive_cmds\" -	if len=`expr "X$cmds" : ".*"` && -	     test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then +	func_len " $cmds" +	len=$func_len_result +	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then +	  cmds=$old_archive_cmds +	elif test -n "$archiver_list_spec"; then +	  func_verbose "using command file archive linking..." +	  for obj in $oldobjs +	  do +	    func_to_tool_file "$obj" +	    $ECHO "$func_to_tool_file_result" +	  done > $output_objdir/$libname.libcmd +	  func_to_tool_file "$output_objdir/$libname.libcmd" +	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"  	  cmds=$old_archive_cmds  	else  	  # the command line is too long to link in one step, link in parts -	  $echo "using piecewise archive linking..." +	  func_verbose "using piecewise archive linking..."  	  save_RANLIB=$RANLIB  	  RANLIB=:  	  objlist=  	  concat_cmds=  	  save_oldobjs=$oldobjs - +	  oldobjs=  	  # Is there a better way of finding the last object in the list?  	  for obj in $save_oldobjs  	  do  	    last_oldobj=$obj  	  done +	  eval test_cmds=\"$old_archive_cmds\" +	  func_len " $test_cmds" +	  len0=$func_len_result +	  len=$len0  	  for obj in $save_oldobjs  	  do -	    oldobjs="$objlist $obj" -	    objlist="$objlist $obj" -	    eval test_cmds=\"$old_archive_cmds\" -	    if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && -	       test "$len" -le "$max_cmd_len"; then +	    func_len " $obj" +	    func_arith $len + $func_len_result +	    len=$func_arith_result +	    func_append objlist " $obj" +	    if test "$len" -lt "$max_cmd_len"; then  	      :  	    else  	      # the above command should be used before it gets too long  	      oldobjs=$objlist  	      if test "$obj" = "$last_oldobj" ; then -	        RANLIB=$save_RANLIB +		RANLIB=$save_RANLIB  	      fi  	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~  	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"  	      objlist= +	      len=$len0  	    fi  	  done  	  RANLIB=$save_RANLIB @@ -5635,49 +9215,39 @@ fi\  	  fi  	fi        fi -      save_ifs="$IFS"; IFS='~' -      for cmd in $cmds; do -        eval cmd=\"$cmd\" -	IFS="$save_ifs" -	$show "$cmd" -	$run eval "$cmd" || exit $? -      done -      IFS="$save_ifs" +      func_execute_cmds "$cmds" 'exit $?'      done -    if test -n "$generated"; then -      $show "${rm}r$generated" -      $run ${rm}r$generated -    fi +    test -n "$generated" && \ +      func_show_eval "${RM}r$generated"      # Now create the libtool archive.      case $output in      *.la)        old_library=        test "$build_old_libs" = yes && old_library="$libname.$libext" -      $show "creating $output" +      func_verbose "creating $output"        # Preserve any variables that may affect compiler behavior        for var in $variables_saved_for_relink; do  	if eval test -z \"\${$var+set}\"; then -	  relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" +	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"  	elif eval var_value=\$$var; test -z "$var_value"; then  	  relink_command="$var=; export $var; $relink_command"  	else -	  var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` -	  relink_command="$var=\"$var_value\"; export $var; $relink_command" +	  func_quote_for_eval "$var_value" +	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"  	fi        done        # Quote the link command for shipping.        relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" -      relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` +      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`        if test "$hardcode_automatic" = yes ; then  	relink_command=        fi -        # Only create the output if not a dry run. -      if test -z "$run"; then +      $opt_dry_run || {  	for installed in no yes; do  	  if test "$installed" = yes; then  	    if test -z "$install_libdir"; then @@ -5689,38 +9259,59 @@ fi\  	    for deplib in $dependency_libs; do  	      case $deplib in  	      *.la) -		name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` +		func_basename "$deplib" +		name="$func_basename_result"  		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` -		if test -z "$libdir"; then -		  $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 -		  exit $EXIT_FAILURE -		fi -		newdependency_libs="$newdependency_libs $libdir/$name" +		test -z "$libdir" && \ +		  func_fatal_error "\`$deplib' is not a valid libtool archive" +		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" +		;; +	      -L*) +		func_stripname -L '' "$deplib" +		func_replace_sysroot "$func_stripname_result" +		func_append newdependency_libs " -L$func_replace_sysroot_result" +		;; +	      -R*) +		func_stripname -R '' "$deplib" +		func_replace_sysroot "$func_stripname_result" +		func_append newdependency_libs " -R$func_replace_sysroot_result"  		;; -	      *) newdependency_libs="$newdependency_libs $deplib" ;; +	      *) func_append newdependency_libs " $deplib" ;;  	      esac  	    done  	    dependency_libs="$newdependency_libs"  	    newdlfiles= +  	    for lib in $dlfiles; do -	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` -	      eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` -	      if test -z "$libdir"; then -		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 -		exit $EXIT_FAILURE -	      fi -	      newdlfiles="$newdlfiles $libdir/$name" +	      case $lib in +	      *.la) +	        func_basename "$lib" +		name="$func_basename_result" +		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` +		test -z "$libdir" && \ +		  func_fatal_error "\`$lib' is not a valid libtool archive" +		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" +		;; +	      *) func_append newdlfiles " $lib" ;; +	      esac  	    done  	    dlfiles="$newdlfiles"  	    newdlprefiles=  	    for lib in $dlprefiles; do -	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` -	      eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` -	      if test -z "$libdir"; then -		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 -		exit $EXIT_FAILURE -	      fi -	      newdlprefiles="$newdlprefiles $libdir/$name" +	      case $lib in +	      *.la) +		# Only pass preopened files to the pseudo-archive (for +		# eventual linking with the app. that links it) if we +		# didn't already link the preopened objects directly into +		# the library: +		func_basename "$lib" +		name="$func_basename_result" +		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` +		test -z "$libdir" && \ +		  func_fatal_error "\`$lib' is not a valid libtool archive" +		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" +		;; +	      esac  	    done  	    dlprefiles="$newdlprefiles"  	  else @@ -5730,7 +9321,7 @@ fi\  		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;  		*) abs=`pwd`"/$lib" ;;  	      esac -	      newdlfiles="$newdlfiles $abs" +	      func_append newdlfiles " $abs"  	    done  	    dlfiles="$newdlfiles"  	    newdlprefiles= @@ -5739,19 +9330,37 @@ fi\  		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;  		*) abs=`pwd`"/$lib" ;;  	      esac -	      newdlprefiles="$newdlprefiles $abs" +	      func_append newdlprefiles " $abs"  	    done  	    dlprefiles="$newdlprefiles"  	  fi -	  $rm $output +	  $RM $output  	  # place dlname in correct position for cygwin +	  # In fact, it would be nice if we could use this code for all target +	  # systems that can't hard-code library paths into their executables +	  # and that have no shared library path variable independent of PATH, +	  # but it turns out we can't easily determine that from inspecting +	  # libtool variables, so we have to hard-code the OSs to which it +	  # applies here; at the moment, that means platforms that use the PE +	  # object format with DLL files.  See the long comment at the top of +	  # tests/bindir.at for full details.  	  tdlname=$dlname  	  case $host,$output,$installed,$module,$dlname in -	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; +	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) +	      # If a -bindir argument was supplied, place the dll there. +	      if test "x$bindir" != x ; +	      then +		func_relative_path "$install_libdir" "$bindir" +		tdlname=$func_relative_path_result$dlname +	      else +		# Otherwise fall back on heuristic. +		tdlname=../bin/$dlname +	      fi +	      ;;  	  esac -	  $echo > $output "\ +	  $ECHO > $output "\  # $outputname - a libtool library file -# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION  #  # Please DO NOT delete this file!  # It is necessary for linking the library. @@ -5765,9 +9374,15 @@ library_names='$library_names'  # The name of the static archive.  old_library='$old_library' +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' +  # Libraries that this one depends upon.  dependency_libs='$dependency_libs' +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' +  # Version information for $libname.  current=$current  age=$age @@ -5786,748 +9401,29 @@ dlpreopen='$dlprefiles'  # Directory that this library needs to be installed in:  libdir='$install_libdir'"  	  if test "$installed" = no && test "$need_relink" = yes; then -	    $echo >> $output "\ +	    $ECHO >> $output "\  relink_command=\"$relink_command\""  	  fi  	done -      fi +      }        # Do a symbolic link so that the libtool archive can be found in        # LD_LIBRARY_PATH before the program is installed. -      $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" -      $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? -      ;; -    esac -    exit $EXIT_SUCCESS -    ;; - -  # libtool install mode -  install) -    modename="$modename: install" - -    # There may be an optional sh(1) argument at the beginning of -    # install_prog (especially on Windows NT). -    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || -       # Allow the use of GNU shtool's install command. -       $echo "X$nonopt" | grep shtool > /dev/null; then -      # Aesthetically quote it. -      arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` -      case $arg in -      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"") -	arg="\"$arg\"" -	;; -      esac -      install_prog="$arg " -      arg="$1" -      shift -    else -      install_prog= -      arg=$nonopt -    fi - -    # The real first argument should be the name of the installation program. -    # Aesthetically quote it. -    arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` -    case $arg in -    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"") -      arg="\"$arg\"" -      ;; -    esac -    install_prog="$install_prog$arg" - -    # We need to accept at least all the BSD install flags. -    dest= -    files= -    opts= -    prev= -    install_type= -    isdir=no -    stripme= -    for arg -    do -      if test -n "$dest"; then -	files="$files $dest" -	dest=$arg -	continue -      fi - -      case $arg in -      -d) isdir=yes ;; -      -f)  -      	case " $install_prog " in -	*[\\\ /]cp\ *) ;; -	*) prev=$arg ;; -	esac -	;; -      -g | -m | -o) prev=$arg ;; -      -s) -	stripme=" -s" -	continue -	;; -      -*) -	;; -      *) -	# If the previous option needed an argument, then skip it. -	if test -n "$prev"; then -	  prev= -	else -	  dest=$arg -	  continue -	fi -	;; -      esac - -      # Aesthetically quote the argument. -      arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` -      case $arg in -      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"") -	arg="\"$arg\"" -	;; -      esac -      install_prog="$install_prog $arg" -    done - -    if test -z "$install_prog"; then -      $echo "$modename: you must specify an install program" 1>&2 -      $echo "$help" 1>&2 -      exit $EXIT_FAILURE -    fi - -    if test -n "$prev"; then -      $echo "$modename: the \`$prev' option requires an argument" 1>&2 -      $echo "$help" 1>&2 -      exit $EXIT_FAILURE -    fi - -    if test -z "$files"; then -      if test -z "$dest"; then -	$echo "$modename: no file or destination specified" 1>&2 -      else -	$echo "$modename: you must specify a destination" 1>&2 -      fi -      $echo "$help" 1>&2 -      exit $EXIT_FAILURE -    fi - -    # Strip any trailing slash from the destination. -    dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` - -    # Check to see that the destination is a directory. -    test -d "$dest" && isdir=yes -    if test "$isdir" = yes; then -      destdir="$dest" -      destname= -    else -      destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` -      test "X$destdir" = "X$dest" && destdir=. -      destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` - -      # Not a directory, so check to see that there is only one file specified. -      set dummy $files -      if test "$#" -gt 2; then -	$echo "$modename: \`$dest' is not a directory" 1>&2 -	$echo "$help" 1>&2 -	exit $EXIT_FAILURE -      fi -    fi -    case $destdir in -    [\\/]* | [A-Za-z]:[\\/]*) ;; -    *) -      for file in $files; do -	case $file in -	*.lo) ;; -	*) -	  $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 -	  $echo "$help" 1>&2 -	  exit $EXIT_FAILURE -	  ;; -	esac -      done +      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'        ;;      esac - -    # This variable tells wrapper scripts just to set variables rather -    # than running their programs. -    libtool_install_magic="$magic" - -    staticlibs= -    future_libdirs= -    current_libdirs= -    for file in $files; do - -      # Do each installation. -      case $file in -      *.$libext) -	# Do the static libraries later. -	staticlibs="$staticlibs $file" -	;; - -      *.la) -	# Check to see that this really is a libtool archive. -	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : -	else -	  $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 -	  $echo "$help" 1>&2 -	  exit $EXIT_FAILURE -	fi - -	library_names= -	old_library= -	relink_command= -	# If there is no directory component, then add one. -	case $file in -	*/* | *\\*) . $file ;; -	*) . ./$file ;; -	esac - -	# Add the libdir to current_libdirs if it is the destination. -	if test "X$destdir" = "X$libdir"; then -	  case "$current_libdirs " in -	  *" $libdir "*) ;; -	  *) current_libdirs="$current_libdirs $libdir" ;; -	  esac -	else -	  # Note the libdir as a future libdir. -	  case "$future_libdirs " in -	  *" $libdir "*) ;; -	  *) future_libdirs="$future_libdirs $libdir" ;; -	  esac -	fi - -	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ -	test "X$dir" = "X$file/" && dir= -	dir="$dir$objdir" - -	if test -n "$relink_command"; then -	  # Determine the prefix the user has applied to our future dir. -	  inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` - -	  # Don't allow the user to place us outside of our expected -	  # location b/c this prevents finding dependent libraries that -	  # are installed to the same prefix. -	  # At present, this check doesn't affect windows .dll's that -	  # are installed into $libdir/../bin (currently, that works fine) -	  # but it's something to keep an eye on. -	  if test "$inst_prefix_dir" = "$destdir"; then -	    $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 -	    exit $EXIT_FAILURE -	  fi - -	  if test -n "$inst_prefix_dir"; then -	    # Stick the inst_prefix_dir data into the link command. -	    relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%" | $NL2SP` -	  else -	    relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%%" | $NL2SP` -	  fi - -	  $echo "$modename: warning: relinking \`$file'" 1>&2 -	  $show "$relink_command" -	  if $run eval "$relink_command"; then : -	  else -	    $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 -	    exit $EXIT_FAILURE -	  fi -	fi - -	# See the names of the shared library. -	set dummy $library_names -	if test -n "$2"; then -	  realname="$2" -	  shift -	  shift - -	  srcname="$realname" -	  test -n "$relink_command" && srcname="$realname"T - -	  # Install the shared library and build the symlinks. -	  $show "$install_prog $dir/$srcname $destdir/$realname" -	  $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? -	  if test -n "$stripme" && test -n "$striplib"; then -	    $show "$striplib $destdir/$realname" -	    $run eval "$striplib $destdir/$realname" || exit $? -	  fi - -	  if test "$#" -gt 0; then -	    # Delete the old symlinks, and create new ones. -	    # Try `ln -sf' first, because the `ln' binary might depend on -	    # the symlink we replace!  Solaris /bin/ln does not understand -f, -	    # so we also need to try rm && ln -s. -	    for linkname -	    do -	      if test "$linkname" != "$realname"; then -                $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" -                $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" -	      fi -	    done -	  fi - -	  # Do each command in the postinstall commands. -	  lib="$destdir/$realname" -	  cmds=$postinstall_cmds -	  save_ifs="$IFS"; IFS='~' -	  for cmd in $cmds; do -	    IFS="$save_ifs" -	    eval cmd=\"$cmd\" -	    $show "$cmd" -	    $run eval "$cmd" || { -	      lt_exit=$? - -	      # Restore the uninstalled library and exit -	      if test "$mode" = relink; then -		$run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' -	      fi - -	      exit $lt_exit -	    } -	  done -	  IFS="$save_ifs" -	fi - -	# Install the pseudo-library for information purposes. -	name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` -	instname="$dir/$name"i -	$show "$install_prog $instname $destdir/$name" -	$run eval "$install_prog $instname $destdir/$name" || exit $? - -	# Maybe install the static library, too. -	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" -	;; - -      *.lo) -	# Install (i.e. copy) a libtool object. - -	# Figure out destination file name, if it wasn't already specified. -	if test -n "$destname"; then -	  destfile="$destdir/$destname" -	else -	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` -	  destfile="$destdir/$destfile" -	fi - -	# Deduce the name of the destination old-style object file. -	case $destfile in -	*.lo) -	  staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` -	  ;; -	*.$objext) -	  staticdest="$destfile" -	  destfile= -	  ;; -	*) -	  $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 -	  $echo "$help" 1>&2 -	  exit $EXIT_FAILURE -	  ;; -	esac - -	# Install the libtool object if requested. -	if test -n "$destfile"; then -	  $show "$install_prog $file $destfile" -	  $run eval "$install_prog $file $destfile" || exit $? -	fi - -	# Install the old object if enabled. -	if test "$build_old_libs" = yes; then -	  # Deduce the name of the old-style object file. -	  staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` - -	  $show "$install_prog $staticobj $staticdest" -	  $run eval "$install_prog \$staticobj \$staticdest" || exit $? -	fi -	exit $EXIT_SUCCESS -	;; - -      *) -	# Figure out destination file name, if it wasn't already specified. -	if test -n "$destname"; then -	  destfile="$destdir/$destname" -	else -	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` -	  destfile="$destdir/$destfile" -	fi - -	# If the file is missing, and there is a .exe on the end, strip it -	# because it is most likely a libtool script we actually want to -	# install -	stripped_ext="" -	case $file in -	  *.exe) -	    if test ! -f "$file"; then -	      file=`$echo $file|${SED} 's,.exe$,,'` -	      stripped_ext=".exe" -	    fi -	    ;; -	esac - -	# Do a test to see if this is really a libtool program. -	case $host in -	*cygwin*|*mingw*) -	    wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` -	    ;; -	*) -	    wrapper=$file -	    ;; -	esac -	if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then -	  notinst_deplibs= -	  relink_command= - -	  # Note that it is not necessary on cygwin/mingw to append a dot to -	  # foo even if both foo and FILE.exe exist: automatic-append-.exe -	  # behavior happens only for exec(3), not for open(2)!  Also, sourcing -	  # `FILE.' does not work on cygwin managed mounts. -	  # -	  # If there is no directory component, then add one. -	  case $wrapper in -	  */* | *\\*) . ${wrapper} ;; -	  *) . ./${wrapper} ;; -	  esac - -	  # Check the variables that should have been set. -	  if test -z "$notinst_deplibs"; then -	    $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 -	    exit $EXIT_FAILURE -	  fi - -	  finalize=yes -	  for lib in $notinst_deplibs; do -	    # Check to see that each library is installed. -	    libdir= -	    if test -f "$lib"; then -	      # If there is no directory component, then add one. -	      case $lib in -	      */* | *\\*) . $lib ;; -	      *) . ./$lib ;; -	      esac -	    fi -	    libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test -	    if test -n "$libdir" && test ! -f "$libfile"; then -	      $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 -	      finalize=no -	    fi -	  done - -	  relink_command= -	  # Note that it is not necessary on cygwin/mingw to append a dot to -	  # foo even if both foo and FILE.exe exist: automatic-append-.exe -	  # behavior happens only for exec(3), not for open(2)!  Also, sourcing -	  # `FILE.' does not work on cygwin managed mounts. -	  # -	  # If there is no directory component, then add one. -	  case $wrapper in -	  */* | *\\*) . ${wrapper} ;; -	  *) . ./${wrapper} ;; -	  esac - -	  outputname= -	  if test "$fast_install" = no && test -n "$relink_command"; then -	    if test "$finalize" = yes && test -z "$run"; then -	      tmpdir=`func_mktempdir` -	      file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` -	      outputname="$tmpdir/$file" -	      # Replace the output file specification. -	      relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g' | $NL2SP` - -	      $show "$relink_command" -	      if $run eval "$relink_command"; then : -	      else -		$echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 -		${rm}r "$tmpdir" -		continue -	      fi -	      file="$outputname" -	    else -	      $echo "$modename: warning: cannot relink \`$file'" 1>&2 -	    fi -	  else -	    # Install the binary that we compiled earlier. -	    file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` -	  fi -	fi - -	# remove .exe since cygwin /usr/bin/install will append another -	# one anyway  -	case $install_prog,$host in -	*/usr/bin/install*,*cygwin*) -	  case $file:$destfile in -	  *.exe:*.exe) -	    # this is ok -	    ;; -	  *.exe:*) -	    destfile=$destfile.exe -	    ;; -	  *:*.exe) -	    destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` -	    ;; -	  esac -	  ;; -	esac -	$show "$install_prog$stripme $file $destfile" -	$run eval "$install_prog\$stripme \$file \$destfile" || exit $? -	test -n "$outputname" && ${rm}r "$tmpdir" -	;; -      esac -    done - -    for file in $staticlibs; do -      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - -      # Set up the ranlib parameters. -      oldlib="$destdir/$name" - -      $show "$install_prog $file $oldlib" -      $run eval "$install_prog \$file \$oldlib" || exit $? - -      if test -n "$stripme" && test -n "$old_striplib"; then -	$show "$old_striplib $oldlib" -	$run eval "$old_striplib $oldlib" || exit $? -      fi - -      # Do each command in the postinstall commands. -      cmds=$old_postinstall_cmds -      save_ifs="$IFS"; IFS='~' -      for cmd in $cmds; do -	IFS="$save_ifs" -	eval cmd=\"$cmd\" -	$show "$cmd" -	$run eval "$cmd" || exit $? -      done -      IFS="$save_ifs" -    done - -    if test -n "$future_libdirs"; then -      $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 -    fi - -    if test -n "$current_libdirs"; then -      # Maybe just do a dry run. -      test -n "$run" && current_libdirs=" -n$current_libdirs" -      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' -    else -      exit $EXIT_SUCCESS -    fi -    ;; - -  # libtool finish mode -  finish) -    modename="$modename: finish" -    libdirs="$nonopt" -    admincmds= - -    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then -      for dir -      do -	libdirs="$libdirs $dir" -      done - -      for libdir in $libdirs; do -	if test -n "$finish_cmds"; then -	  # Do each command in the finish commands. -	  cmds=$finish_cmds -	  save_ifs="$IFS"; IFS='~' -	  for cmd in $cmds; do -	    IFS="$save_ifs" -	    eval cmd=\"$cmd\" -	    $show "$cmd" -	    $run eval "$cmd" || admincmds="$admincmds -       $cmd" -	  done -	  IFS="$save_ifs" -	fi -	if test -n "$finish_eval"; then -	  # Do the single finish_eval. -	  eval cmds=\"$finish_eval\" -	  $run eval "$cmds" || admincmds="$admincmds -       $cmds" -	fi -      done -    fi - -    # Exit here if they wanted silent mode. -    test "$show" = : && exit $EXIT_SUCCESS - -    $echo "X----------------------------------------------------------------------" | $Xsed -    $echo "Libraries have been installed in:" -    for libdir in $libdirs; do -      $echo "   $libdir" -    done -    $echo -    $echo "If you ever happen to want to link against installed libraries" -    $echo "in a given directory, LIBDIR, you must either use libtool, and" -    $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" -    $echo "flag during linking and do at least one of the following:" -    if test -n "$shlibpath_var"; then -      $echo "   - add LIBDIR to the \`$shlibpath_var' environment variable" -      $echo "     during execution" -    fi -    if test -n "$runpath_var"; then -      $echo "   - add LIBDIR to the \`$runpath_var' environment variable" -      $echo "     during linking" -    fi -    if test -n "$hardcode_libdir_flag_spec"; then -      libdir=LIBDIR -      eval flag=\"$hardcode_libdir_flag_spec\" - -      $echo "   - use the \`$flag' linker flag" -    fi -    if test -n "$admincmds"; then -      $echo "   - have your system administrator run these commands:$admincmds" -    fi -    if test -f /etc/ld.so.conf; then -      $echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" -    fi -    $echo -    $echo "See any operating system documentation about shared libraries for" -    $echo "more information, such as the ld(1) and ld.so(8) manual pages." -    $echo "X----------------------------------------------------------------------" | $Xsed      exit $EXIT_SUCCESS -    ;; - -  # libtool execute mode -  execute) -    modename="$modename: execute" - -    # The first argument is the command name. -    cmd="$nonopt" -    if test -z "$cmd"; then -      $echo "$modename: you must specify a COMMAND" 1>&2 -      $echo "$help" -      exit $EXIT_FAILURE -    fi - -    # Handle -dlopen flags immediately. -    for file in $execute_dlfiles; do -      if test ! -f "$file"; then -	$echo "$modename: \`$file' is not a file" 1>&2 -	$echo "$help" 1>&2 -	exit $EXIT_FAILURE -      fi - -      dir= -      case $file in -      *.la) -	# Check to see that this really is a libtool archive. -	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : -	else -	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 -	  $echo "$help" 1>&2 -	  exit $EXIT_FAILURE -	fi - -	# Read the libtool library. -	dlname= -	library_names= - -	# If there is no directory component, then add one. -	case $file in -	*/* | *\\*) . $file ;; -	*) . ./$file ;; -	esac - -	# Skip this library if it cannot be dlopened. -	if test -z "$dlname"; then -	  # Warn if it was a shared library. -	  test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" -	  continue -	fi - -	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` -	test "X$dir" = "X$file" && dir=. - -	if test -f "$dir/$objdir/$dlname"; then -	  dir="$dir/$objdir" -	else -	  if test ! -f "$dir/$dlname"; then -	    $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 -	    exit $EXIT_FAILURE -	  fi -	fi -	;; - -      *.lo) -	# Just add the directory containing the .lo file. -	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` -	test "X$dir" = "X$file" && dir=. -	;; - -      *) -	$echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 -	continue -	;; -      esac - -      # Get the absolute pathname. -      absdir=`cd "$dir" && pwd` -      test -n "$absdir" && dir="$absdir" - -      # Now add the directory to shlibpath_var. -      if eval "test -z \"\$$shlibpath_var\""; then -	eval "$shlibpath_var=\"\$dir\"" -      else -	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" -      fi -    done - -    # This variable tells wrapper scripts just to set shlibpath_var -    # rather than running their programs. -    libtool_execute_magic="$magic" - -    # Check if any of the arguments is a wrapper script. -    args= -    for file -    do -      case $file in -      -*) ;; -      *) -	# Do a test to see if this is really a libtool program. -	if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then -	  # If there is no directory component, then add one. -	  case $file in -	  */* | *\\*) . $file ;; -	  *) . ./$file ;; -	  esac - -	  # Transform arg to wrapped name. -	  file="$progdir/$program" -	fi -	;; -      esac -      # Quote arguments (to preserve shell metacharacters). -      file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` -      args="$args \"$file\"" -    done +} -    if test -z "$run"; then -      if test -n "$shlibpath_var"; then -	# Export the shlibpath_var. -	eval "export $shlibpath_var" -      fi +{ test "$opt_mode" = link || test "$opt_mode" = relink; } && +    func_mode_link ${1+"$@"} -      # Restore saved environment variables -      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -      do -	eval "if test \"\${save_$lt_var+set}\" = set; then -		$lt_var=\$save_$lt_var; export $lt_var -	      fi" -      done - -      # Now prepare to actually exec the command. -      exec_cmd="\$cmd$args" -    else -      # Display what would be done. -      if test -n "$shlibpath_var"; then -	eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" -	$echo "export $shlibpath_var" -      fi -      $echo "$cmd$args" -      exit $EXIT_SUCCESS -    fi -    ;; -  # libtool clean and uninstall mode -  clean | uninstall) -    modename="$modename: $mode" -    rm="$nonopt" +# func_mode_uninstall arg... +func_mode_uninstall () +{ +    $opt_debug +    RM="$nonopt"      files=      rmforce=      exit_status=0 @@ -6539,44 +9435,41 @@ relink_command=\"$relink_command\""      for arg      do        case $arg in -      -f) rm="$rm $arg"; rmforce=yes ;; -      -*) rm="$rm $arg" ;; -      *) files="$files $arg" ;; +      -f) func_append RM " $arg"; rmforce=yes ;; +      -*) func_append RM " $arg" ;; +      *) func_append files " $arg" ;;        esac      done -    if test -z "$rm"; then -      $echo "$modename: you must specify an RM program" 1>&2 -      $echo "$help" 1>&2 -      exit $EXIT_FAILURE -    fi +    test -z "$RM" && \ +      func_fatal_help "you must specify an RM program"      rmdirs= -    origobjdir="$objdir"      for file in $files; do -      dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` -      if test "X$dir" = "X$file"; then -	dir=. -	objdir="$origobjdir" +      func_dirname "$file" "" "." +      dir="$func_dirname_result" +      if test "X$dir" = X.; then +	odir="$objdir"        else -	objdir="$dir/$origobjdir" +	odir="$dir/$objdir"        fi -      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` -      test "$mode" = uninstall && objdir="$dir" +      func_basename "$file" +      name="$func_basename_result" +      test "$opt_mode" = uninstall && odir="$dir" -      # Remember objdir for removal later, being careful to avoid duplicates -      if test "$mode" = clean; then +      # Remember odir for removal later, being careful to avoid duplicates +      if test "$opt_mode" = clean; then  	case " $rmdirs " in -	  *" $objdir "*) ;; -	  *) rmdirs="$rmdirs $objdir" ;; +	  *" $odir "*) ;; +	  *) func_append rmdirs " $odir" ;;  	esac        fi        # Don't error if the file doesn't exist and rm -f was used. -      if (test -L "$file") >/dev/null 2>&1 \ -	|| (test -h "$file") >/dev/null 2>&1 \ -	|| test -f "$file"; then +      if { test -L "$file"; } >/dev/null 2>&1 || +	 { test -h "$file"; } >/dev/null 2>&1 || +	 test -f "$file"; then  	:        elif test -d "$file"; then  	exit_status=1 @@ -6590,55 +9483,32 @@ relink_command=\"$relink_command\""        case $name in        *.la)  	# Possibly a libtool archive, so verify it. -	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then -	  . $dir/$name +	if func_lalib_p "$file"; then +	  func_source $dir/$name  	  # Delete the libtool libraries and symlinks.  	  for n in $library_names; do -	    rmfiles="$rmfiles $objdir/$n" +	    func_append rmfiles " $odir/$n"  	  done -	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" +	  test -n "$old_library" && func_append rmfiles " $odir/$old_library" -	  case "$mode" in +	  case "$opt_mode" in  	  clean) -	    case "  $library_names " in -	    # "  " in the beginning catches empty $dlname +	    case " $library_names " in  	    *" $dlname "*) ;; -	    *) rmfiles="$rmfiles $objdir/$dlname" ;; +	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;  	    esac -	     test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" +	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"  	    ;;  	  uninstall)  	    if test -n "$library_names"; then  	      # Do each command in the postuninstall commands. -	      cmds=$postuninstall_cmds -	      save_ifs="$IFS"; IFS='~' -	      for cmd in $cmds; do -		IFS="$save_ifs" -		eval cmd=\"$cmd\" -		$show "$cmd" -		$run eval "$cmd" -		if test "$?" -ne 0 && test "$rmforce" != yes; then -		  exit_status=1 -		fi -	      done -	      IFS="$save_ifs" +	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'  	    fi  	    if test -n "$old_library"; then  	      # Do each command in the old_postuninstall commands. -	      cmds=$old_postuninstall_cmds -	      save_ifs="$IFS"; IFS='~' -	      for cmd in $cmds; do -		IFS="$save_ifs" -		eval cmd=\"$cmd\" -		$show "$cmd" -		$run eval "$cmd" -		if test "$?" -ne 0 && test "$rmforce" != yes; then -		  exit_status=1 -		fi -	      done -	      IFS="$save_ifs" +	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'  	    fi  	    # FIXME: should reinstall the best remaining shared library.  	    ;; @@ -6648,288 +9518,95 @@ relink_command=\"$relink_command\""        *.lo)  	# Possibly a libtool object, so verify it. -	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then +	if func_lalib_p "$file"; then  	  # Read the .lo file -	  . $dir/$name +	  func_source $dir/$name  	  # Add PIC object to the list of files to remove. -	  if test -n "$pic_object" \ -	     && test "$pic_object" != none; then -	    rmfiles="$rmfiles $dir/$pic_object" +	  if test -n "$pic_object" && +	     test "$pic_object" != none; then +	    func_append rmfiles " $dir/$pic_object"  	  fi  	  # Add non-PIC object to the list of files to remove. -	  if test -n "$non_pic_object" \ -	     && test "$non_pic_object" != none; then -	    rmfiles="$rmfiles $dir/$non_pic_object" +	  if test -n "$non_pic_object" && +	     test "$non_pic_object" != none; then +	    func_append rmfiles " $dir/$non_pic_object"  	  fi  	fi  	;;        *) -	if test "$mode" = clean ; then +	if test "$opt_mode" = clean ; then  	  noexename=$name  	  case $file in  	  *.exe) -	    file=`$echo $file|${SED} 's,.exe$,,'` -	    noexename=`$echo $name|${SED} 's,.exe$,,'` +	    func_stripname '' '.exe' "$file" +	    file=$func_stripname_result +	    func_stripname '' '.exe' "$name" +	    noexename=$func_stripname_result  	    # $file with .exe has already been added to rmfiles,  	    # add $file without .exe -	    rmfiles="$rmfiles $file" +	    func_append rmfiles " $file"  	    ;;  	  esac  	  # Do a test to see if this is a libtool program. -	  if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then -	    relink_command= -	    . $dir/$noexename +	  if func_ltwrapper_p "$file"; then +	    if func_ltwrapper_executable_p "$file"; then +	      func_ltwrapper_scriptname "$file" +	      relink_command= +	      func_source $func_ltwrapper_scriptname_result +	      func_append rmfiles " $func_ltwrapper_scriptname_result" +	    else +	      relink_command= +	      func_source $dir/$noexename +	    fi  	    # note $name still contains .exe if it was in $file originally  	    # as does the version of $file that was added into $rmfiles -	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" +	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"  	    if test "$fast_install" = yes && test -n "$relink_command"; then -	      rmfiles="$rmfiles $objdir/lt-$name" +	      func_append rmfiles " $odir/lt-$name"  	    fi  	    if test "X$noexename" != "X$name" ; then -	      rmfiles="$rmfiles $objdir/lt-${noexename}.c" +	      func_append rmfiles " $odir/lt-${noexename}.c"  	    fi  	  fi  	fi  	;;        esac -      $show "$rm $rmfiles" -      $run $rm $rmfiles || exit_status=1 +      func_show_eval "$RM $rmfiles" 'exit_status=1'      done -    objdir="$origobjdir"      # Try to remove the ${objdir}s in the directories where we deleted files      for dir in $rmdirs; do        if test -d "$dir"; then -	$show "rmdir $dir" -	$run rmdir $dir >/dev/null 2>&1 +	func_show_eval "rmdir $dir >/dev/null 2>&1"        fi      done      exit $exit_status -    ;; +} -  "") -    $echo "$modename: you must specify a MODE" 1>&2 -    $echo "$generic_help" 1>&2 -    exit $EXIT_FAILURE -    ;; -  esac +{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && +    func_mode_uninstall ${1+"$@"} -  if test -z "$exec_cmd"; then -    $echo "$modename: invalid operation mode \`$mode'" 1>&2 -    $echo "$generic_help" 1>&2 -    exit $EXIT_FAILURE -  fi -fi # test -z "$show_help" +test -z "$opt_mode" && { +  help="$generic_help" +  func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ +  func_fatal_help "invalid operation mode \`$opt_mode'"  if test -n "$exec_cmd"; then -  eval exec $exec_cmd +  eval exec "$exec_cmd"    exit $EXIT_FAILURE  fi -# We need to display help for each of the modes. -case $mode in -"") $echo \ -"Usage: $modename [OPTION]... [MODE-ARG]... - -Provide generalized library-building support services. - -    --config          show all configuration variables -    --debug           enable verbose shell tracing --n, --dry-run         display commands without modifying any files -    --features        display basic configuration information and exit -    --finish          same as \`--mode=finish' -    --help            display this help message and exit -    --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS] -    --quiet           same as \`--silent' -    --silent          don't print informational messages -    --tag=TAG         use configuration variables from tag TAG -    --version         print version information - -MODE must be one of the following: - -      clean           remove files from the build directory -      compile         compile a source file into a libtool object -      execute         automatically set library path, then run a program -      finish          complete the installation of libtool libraries -      install         install libraries or executables -      link            create a library or an executable -      uninstall       remove libraries from an installed directory - -MODE-ARGS vary depending on the MODE.  Try \`$modename --help --mode=MODE' for -a more detailed description of MODE. - -Report bugs to <bug-libtool@gnu.org>." -  exit $EXIT_SUCCESS -  ;; - -clean) -  $echo \ -"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." -  ;; - -compile) -  $echo \ -"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - -  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE -  -prefer-pic       try to building PIC objects only -  -prefer-non-pic   try to building non-PIC objects only -  -static           always build a \`.o' file suitable for static linking - -COMPILE-COMMAND is a command to be used in creating a \`standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." -  ;; - -execute) -  $echo \ -"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - -  -dlopen FILE      add the directory containing FILE to the library path - -This mode sets the library path environment variable according to \`-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." -  ;; - -finish) -  $echo \ -"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges.  Use -the \`--dry-run' option if you just want to see what would be executed." -  ;; - -install) -  $echo \ -"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command.  The first component should be -either the \`install' or \`cp' program. - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." -  ;; - -link) -  $echo \ -"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - -  -all-static       do not do any dynamic linking at all -  -avoid-version    do not add a version suffix if possible -  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime -  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols -  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -  -export-symbols SYMFILE -                    try to export only the symbols listed in SYMFILE -  -export-symbols-regex REGEX -                    try to export only the symbols matching REGEX -  -LLIBDIR          search LIBDIR for required installed libraries -  -lNAME            OUTPUT-FILE requires the installed library libNAME -  -module           build a library that can dlopened -  -no-fast-install  disable the fast-install mode -  -no-install       link a not-installable executable -  -no-undefined     declare that a library does not refer to external symbols -  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects -  -objectlist FILE  Use a list of object files found in FILE to specify objects -  -precious-files-regex REGEX -                    don't remove output files matching REGEX -  -release RELEASE  specify package release information -  -rpath LIBDIR     the created library will eventually be installed in LIBDIR -  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries -  -static           do not do any dynamic linking of uninstalled libtool libraries -  -static-libtool-libs -                    do not do any dynamic linking of libtool libraries -  -version-info CURRENT[:REVISION[:AGE]] -                    specify library version info [each variable defaults to 0] - -All other options (arguments beginning with \`-') are ignored. +exit $exit_status -Every other argument is treated as a filename.  Files ending in \`.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. - -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file -is created, otherwise an executable program is created." -  ;; - -uninstall) -  $echo \ -"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." -  ;; - -*) -  $echo "$modename: invalid operation mode \`$mode'" 1>&2 -  $echo "$help" 1>&2 -  exit $EXIT_FAILURE -  ;; -esac - -$echo -$echo "Try \`$modename --help' for more information about other modes." - -exit $?  # The TAGs below are defined such that we never get into a situation  # in which we disable both kinds of libraries.  Given conflicting @@ -6943,14 +9620,17 @@ exit $?  # configuration.  But we'll never go from static-only to shared-only.  # ### BEGIN LIBTOOL TAG CONFIG: disable-shared -disable_libs=shared +build_libtool_libs=no +build_old_libs=yes  # ### END LIBTOOL TAG CONFIG: disable-shared  # ### BEGIN LIBTOOL TAG CONFIG: disable-static -disable_libs=static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`  # ### END LIBTOOL TAG CONFIG: disable-static  # Local Variables:  # mode:shell-script  # sh-indentation:2  # End: +# vi:sw=2 + diff --git a/m4/gettext.m4 b/m4/gettext.m4 new file mode 100644 index 00000000..f84e6a5d --- /dev/null +++ b/m4/gettext.m4 @@ -0,0 +1,383 @@ +# gettext.m4 serial 63 (gettext-0.18) +dnl Copyright (C) 1995-2010 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000. +dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010. + +dnl Macro to add for using GNU gettext. + +dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). +dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The +dnl    default (if it is not specified or empty) is 'no-libtool'. +dnl    INTLSYMBOL should be 'external' for packages with no intl directory, +dnl    and 'no-libtool' or 'use-libtool' for packages with an intl directory. +dnl    If INTLSYMBOL is 'use-libtool', then a libtool library +dnl    $(top_builddir)/intl/libintl.la will be created (shared and/or static, +dnl    depending on --{enable,disable}-{shared,static} and on the presence of +dnl    AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library +dnl    $(top_builddir)/intl/libintl.a will be created. +dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext +dnl    implementations (in libc or libintl) without the ngettext() function +dnl    will be ignored.  If NEEDSYMBOL is specified and is +dnl    'need-formatstring-macros', then GNU gettext implementations that don't +dnl    support the ISO C 99 <inttypes.h> formatstring macros will be ignored. +dnl INTLDIR is used to find the intl libraries.  If empty, +dnl    the value `$(top_builddir)/intl/' is used. +dnl +dnl The result of the configuration is one of three cases: +dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled +dnl    and used. +dnl    Catalog format: GNU --> install in $(datadir) +dnl    Catalog extension: .mo after installation, .gmo in source tree +dnl 2) GNU gettext has been found in the system's C library. +dnl    Catalog format: GNU --> install in $(datadir) +dnl    Catalog extension: .mo after installation, .gmo in source tree +dnl 3) No internationalization, always use English msgid. +dnl    Catalog format: none +dnl    Catalog extension: none +dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. +dnl The use of .gmo is historical (it was needed to avoid overwriting the +dnl GNU format catalogs when building on a platform with an X/Open gettext), +dnl but we keep it in order not to force irrelevant filename changes on the +dnl maintainers. +dnl +AC_DEFUN([AM_GNU_GETTEXT], +[ +  dnl Argument checking. +  ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , +    [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT +])])])])]) +  ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], +    [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])]) +  ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , +    [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT +])])])]) +  define([gt_included_intl], +    ifelse([$1], [external], +      ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), +      [yes])) +  define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) +  gt_NEEDS_INIT +  AM_GNU_GETTEXT_NEED([$2]) + +  AC_REQUIRE([AM_PO_SUBDIRS])dnl +  ifelse(gt_included_intl, yes, [ +    AC_REQUIRE([AM_INTL_SUBDIR])dnl +  ]) + +  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. +  AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) +  AC_REQUIRE([AC_LIB_RPATH]) + +  dnl Sometimes libintl requires libiconv, so first search for libiconv. +  dnl Ideally we would do this search only after the +  dnl      if test "$USE_NLS" = "yes"; then +  dnl        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then +  dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT +  dnl the configure script would need to contain the same shell code +  dnl again, outside any 'if'. There are two solutions: +  dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. +  dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. +  dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not +  dnl documented, we avoid it. +  ifelse(gt_included_intl, yes, , [ +    AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) +  ]) + +  dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation. +  gt_INTL_MACOSX + +  dnl Set USE_NLS. +  AC_REQUIRE([AM_NLS]) + +  ifelse(gt_included_intl, yes, [ +    BUILD_INCLUDED_LIBINTL=no +    USE_INCLUDED_LIBINTL=no +  ]) +  LIBINTL= +  LTLIBINTL= +  POSUB= + +  dnl Add a version number to the cache macros. +  case " $gt_needs " in +    *" need-formatstring-macros "*) gt_api_version=3 ;; +    *" need-ngettext "*) gt_api_version=2 ;; +    *) gt_api_version=1 ;; +  esac +  gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" +  gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" + +  dnl If we use NLS figure out what method +  if test "$USE_NLS" = "yes"; then +    gt_use_preinstalled_gnugettext=no +    ifelse(gt_included_intl, yes, [ +      AC_MSG_CHECKING([whether included gettext is requested]) +      AC_ARG_WITH([included-gettext], +        [  --with-included-gettext use the GNU gettext library included here], +        nls_cv_force_use_gnu_gettext=$withval, +        nls_cv_force_use_gnu_gettext=no) +      AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) + +      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" +      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then +    ]) +        dnl User does not insist on using GNU NLS library.  Figure out what +        dnl to use.  If GNU gettext is available we use this.  Else we have +        dnl to fall back to GNU NLS library. + +        if test $gt_api_version -ge 3; then +          gt_revision_test_code=' +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +changequote(,)dnl +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +changequote([,])dnl +' +        else +          gt_revision_test_code= +        fi +        if test $gt_api_version -ge 2; then +          gt_expression_test_code=' + * ngettext ("", "", 0)' +        else +          gt_expression_test_code= +        fi + +        AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], +         [AC_TRY_LINK([#include <libintl.h> +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings;], +            [bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings], +            [eval "$gt_func_gnugettext_libc=yes"], +            [eval "$gt_func_gnugettext_libc=no"])]) + +        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then +          dnl Sometimes libintl requires libiconv, so first search for libiconv. +          ifelse(gt_included_intl, yes, , [ +            AM_ICONV_LINK +          ]) +          dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL +          dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) +          dnl because that would add "-liconv" to LIBINTL and LTLIBINTL +          dnl even if libiconv doesn't exist. +          AC_LIB_LINKFLAGS_BODY([intl]) +          AC_CACHE_CHECK([for GNU gettext in libintl], +            [$gt_func_gnugettext_libintl], +           [gt_save_CPPFLAGS="$CPPFLAGS" +            CPPFLAGS="$CPPFLAGS $INCINTL" +            gt_save_LIBS="$LIBS" +            LIBS="$LIBS $LIBINTL" +            dnl Now see whether libintl exists and does not depend on libiconv. +            AC_TRY_LINK([#include <libintl.h> +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *);], +              [bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], +              [eval "$gt_func_gnugettext_libintl=yes"], +              [eval "$gt_func_gnugettext_libintl=no"]) +            dnl Now see whether libintl exists and depends on libiconv. +            if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then +              LIBS="$LIBS $LIBICONV" +              AC_TRY_LINK([#include <libintl.h> +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *);], +                [bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], +               [LIBINTL="$LIBINTL $LIBICONV" +                LTLIBINTL="$LTLIBINTL $LTLIBICONV" +                eval "$gt_func_gnugettext_libintl=yes" +               ]) +            fi +            CPPFLAGS="$gt_save_CPPFLAGS" +            LIBS="$gt_save_LIBS"]) +        fi + +        dnl If an already present or preinstalled GNU gettext() is found, +        dnl use it.  But if this macro is used in GNU gettext, and GNU +        dnl gettext is already preinstalled in libintl, we update this +        dnl libintl.  (Cf. the install rule in intl/Makefile.in.) +        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ +           || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ +                && test "$PACKAGE" != gettext-runtime \ +                && test "$PACKAGE" != gettext-tools; }; then +          gt_use_preinstalled_gnugettext=yes +        else +          dnl Reset the values set by searching for libintl. +          LIBINTL= +          LTLIBINTL= +          INCINTL= +        fi + +    ifelse(gt_included_intl, yes, [ +        if test "$gt_use_preinstalled_gnugettext" != "yes"; then +          dnl GNU gettext is not found in the C library. +          dnl Fall back on included GNU gettext library. +          nls_cv_use_gnu_gettext=yes +        fi +      fi + +      if test "$nls_cv_use_gnu_gettext" = "yes"; then +        dnl Mark actions used to generate GNU NLS library. +        BUILD_INCLUDED_LIBINTL=yes +        USE_INCLUDED_LIBINTL=yes +        LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" +        LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" +        LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` +      fi + +      CATOBJEXT= +      if test "$gt_use_preinstalled_gnugettext" = "yes" \ +         || test "$nls_cv_use_gnu_gettext" = "yes"; then +        dnl Mark actions to use GNU gettext tools. +        CATOBJEXT=.gmo +      fi +    ]) + +    if test -n "$INTL_MACOSX_LIBS"; then +      if test "$gt_use_preinstalled_gnugettext" = "yes" \ +         || test "$nls_cv_use_gnu_gettext" = "yes"; then +        dnl Some extra flags are needed during linking. +        LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" +        LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" +      fi +    fi + +    if test "$gt_use_preinstalled_gnugettext" = "yes" \ +       || test "$nls_cv_use_gnu_gettext" = "yes"; then +      AC_DEFINE([ENABLE_NLS], [1], +        [Define to 1 if translation of program messages to the user's native language +   is requested.]) +    else +      USE_NLS=no +    fi +  fi + +  AC_MSG_CHECKING([whether to use NLS]) +  AC_MSG_RESULT([$USE_NLS]) +  if test "$USE_NLS" = "yes"; then +    AC_MSG_CHECKING([where the gettext function comes from]) +    if test "$gt_use_preinstalled_gnugettext" = "yes"; then +      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then +        gt_source="external libintl" +      else +        gt_source="libc" +      fi +    else +      gt_source="included intl directory" +    fi +    AC_MSG_RESULT([$gt_source]) +  fi + +  if test "$USE_NLS" = "yes"; then + +    if test "$gt_use_preinstalled_gnugettext" = "yes"; then +      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then +        AC_MSG_CHECKING([how to link with libintl]) +        AC_MSG_RESULT([$LIBINTL]) +        AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) +      fi + +      dnl For backward compatibility. Some packages may be using this. +      AC_DEFINE([HAVE_GETTEXT], [1], +       [Define if the GNU gettext() function is already present or preinstalled.]) +      AC_DEFINE([HAVE_DCGETTEXT], [1], +       [Define if the GNU dcgettext() function is already present or preinstalled.]) +    fi + +    dnl We need to process the po/ directory. +    POSUB=po +  fi + +  ifelse(gt_included_intl, yes, [ +    dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL +    dnl to 'yes' because some of the testsuite requires it. +    if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then +      BUILD_INCLUDED_LIBINTL=yes +    fi + +    dnl Make all variables we use known to autoconf. +    AC_SUBST([BUILD_INCLUDED_LIBINTL]) +    AC_SUBST([USE_INCLUDED_LIBINTL]) +    AC_SUBST([CATOBJEXT]) + +    dnl For backward compatibility. Some configure.ins may be using this. +    nls_cv_header_intl= +    nls_cv_header_libgt= + +    dnl For backward compatibility. Some Makefiles may be using this. +    DATADIRNAME=share +    AC_SUBST([DATADIRNAME]) + +    dnl For backward compatibility. Some Makefiles may be using this. +    INSTOBJEXT=.mo +    AC_SUBST([INSTOBJEXT]) + +    dnl For backward compatibility. Some Makefiles may be using this. +    GENCAT=gencat +    AC_SUBST([GENCAT]) + +    dnl For backward compatibility. Some Makefiles may be using this. +    INTLOBJS= +    if test "$USE_INCLUDED_LIBINTL" = yes; then +      INTLOBJS="\$(GETTOBJS)" +    fi +    AC_SUBST([INTLOBJS]) + +    dnl Enable libtool support if the surrounding package wishes it. +    INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix +    AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) +  ]) + +  dnl For backward compatibility. Some Makefiles may be using this. +  INTLLIBS="$LIBINTL" +  AC_SUBST([INTLLIBS]) + +  dnl Make all documented variables known to autoconf. +  AC_SUBST([LIBINTL]) +  AC_SUBST([LTLIBINTL]) +  AC_SUBST([POSUB]) +]) + + +dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. +m4_define([gt_NEEDS_INIT], +[ +  m4_divert_text([DEFAULTS], [gt_needs=]) +  m4_define([gt_NEEDS_INIT], []) +]) + + +dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) +AC_DEFUN([AM_GNU_GETTEXT_NEED], +[ +  m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) +]) + + +dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) +AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) diff --git a/m4/iconv.m4 b/m4/iconv.m4 new file mode 100644 index 00000000..e2041b9b --- /dev/null +++ b/m4/iconv.m4 @@ -0,0 +1,214 @@ +# iconv.m4 serial 11 (gettext-0.18.1) +dnl Copyright (C) 2000-2002, 2007-2010 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], +[ +  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. +  AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) +  AC_REQUIRE([AC_LIB_RPATH]) + +  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV +  dnl accordingly. +  AC_LIB_LINKFLAGS_BODY([iconv]) +]) + +AC_DEFUN([AM_ICONV_LINK], +[ +  dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and +  dnl those with the standalone portable GNU libiconv installed). +  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + +  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV +  dnl accordingly. +  AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + +  dnl Add $INCICONV to CPPFLAGS before performing the following checks, +  dnl because if the user has installed libiconv and not disabled its use +  dnl via --without-libiconv-prefix, he wants to use it. The first +  dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. +  am_save_CPPFLAGS="$CPPFLAGS" +  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) + +  AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ +    am_cv_func_iconv="no, consider installing GNU libiconv" +    am_cv_lib_iconv=no +    AC_TRY_LINK([#include <stdlib.h> +#include <iconv.h>], +      [iconv_t cd = iconv_open("",""); +       iconv(cd,NULL,NULL,NULL,NULL); +       iconv_close(cd);], +      [am_cv_func_iconv=yes]) +    if test "$am_cv_func_iconv" != yes; then +      am_save_LIBS="$LIBS" +      LIBS="$LIBS $LIBICONV" +      AC_TRY_LINK([#include <stdlib.h> +#include <iconv.h>], +        [iconv_t cd = iconv_open("",""); +         iconv(cd,NULL,NULL,NULL,NULL); +         iconv_close(cd);], +        [am_cv_lib_iconv=yes] +        [am_cv_func_iconv=yes]) +      LIBS="$am_save_LIBS" +    fi +  ]) +  if test "$am_cv_func_iconv" = yes; then +    AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ +      dnl This tests against bugs in AIX 5.1, HP-UX 11.11, Solaris 10. +      am_save_LIBS="$LIBS" +      if test $am_cv_lib_iconv = yes; then +        LIBS="$LIBS $LIBICONV" +      fi +      AC_TRY_RUN([ +#include <iconv.h> +#include <string.h> +int main () +{ +  /* Test against AIX 5.1 bug: Failures are not distinguishable from successful +     returns.  */ +  { +    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); +    if (cd_utf8_to_88591 != (iconv_t)(-1)) +      { +        static const char input[] = "\342\202\254"; /* EURO SIGN */ +        char buf[10]; +        const char *inptr = input; +        size_t inbytesleft = strlen (input); +        char *outptr = buf; +        size_t outbytesleft = sizeof (buf); +        size_t res = iconv (cd_utf8_to_88591, +                            (char **) &inptr, &inbytesleft, +                            &outptr, &outbytesleft); +        if (res == 0) +          return 1; +      } +  } +  /* Test against Solaris 10 bug: Failures are not distinguishable from +     successful returns.  */ +  { +    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); +    if (cd_ascii_to_88591 != (iconv_t)(-1)) +      { +        static const char input[] = "\263"; +        char buf[10]; +        const char *inptr = input; +        size_t inbytesleft = strlen (input); +        char *outptr = buf; +        size_t outbytesleft = sizeof (buf); +        size_t res = iconv (cd_ascii_to_88591, +                            (char **) &inptr, &inbytesleft, +                            &outptr, &outbytesleft); +        if (res == 0) +          return 1; +      } +  } +#if 0 /* This bug could be worked around by the caller.  */ +  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */ +  { +    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); +    if (cd_88591_to_utf8 != (iconv_t)(-1)) +      { +        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; +        char buf[50]; +        const char *inptr = input; +        size_t inbytesleft = strlen (input); +        char *outptr = buf; +        size_t outbytesleft = sizeof (buf); +        size_t res = iconv (cd_88591_to_utf8, +                            (char **) &inptr, &inbytesleft, +                            &outptr, &outbytesleft); +        if ((int)res > 0) +          return 1; +      } +  } +#endif +  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is +     provided.  */ +  if (/* Try standardized names.  */ +      iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) +      /* Try IRIX, OSF/1 names.  */ +      && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) +      /* Try AIX names.  */ +      && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) +      /* Try HP-UX names.  */ +      && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) +    return 1; +  return 0; +}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no], +        [case "$host_os" in +           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; +           *)            am_cv_func_iconv_works="guessing yes" ;; +         esac]) +      LIBS="$am_save_LIBS" +    ]) +    case "$am_cv_func_iconv_works" in +      *no) am_func_iconv=no am_cv_lib_iconv=no ;; +      *)   am_func_iconv=yes ;; +    esac +  else +    am_func_iconv=no am_cv_lib_iconv=no +  fi +  if test "$am_func_iconv" = yes; then +    AC_DEFINE([HAVE_ICONV], [1], +      [Define if you have the iconv() function and it works.]) +  fi +  if test "$am_cv_lib_iconv" = yes; then +    AC_MSG_CHECKING([how to link with libiconv]) +    AC_MSG_RESULT([$LIBICONV]) +  else +    dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV +    dnl either. +    CPPFLAGS="$am_save_CPPFLAGS" +    LIBICONV= +    LTLIBICONV= +  fi +  AC_SUBST([LIBICONV]) +  AC_SUBST([LTLIBICONV]) +]) + +dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to +dnl avoid warnings like +dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". +dnl This is tricky because of the way 'aclocal' is implemented: +dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. +dnl   Otherwise aclocal's initial scan pass would miss the macro definition. +dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. +dnl   Otherwise aclocal would emit many "Use of uninitialized value $1" +dnl   warnings. +m4_define([gl_iconv_AC_DEFUN], +  m4_version_prereq([2.64], +    [[AC_DEFUN_ONCE( +        [$1], [$2])]], +    [[AC_DEFUN( +        [$1], [$2])]])) +gl_iconv_AC_DEFUN([AM_ICONV], +[ +  AM_ICONV_LINK +  if test "$am_cv_func_iconv" = yes; then +    AC_MSG_CHECKING([for iconv declaration]) +    AC_CACHE_VAL([am_cv_proto_iconv], [ +      AC_TRY_COMPILE([ +#include <stdlib.h> +#include <iconv.h> +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif +], [], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"]) +      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) +    am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` +    AC_MSG_RESULT([ +         $am_cv_proto_iconv]) +    AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], +      [Define as const if the declaration of iconv() needs const.]) +  fi +]) diff --git a/m4/intlmacosx.m4 b/m4/intlmacosx.m4 new file mode 100644 index 00000000..dd910259 --- /dev/null +++ b/m4/intlmacosx.m4 @@ -0,0 +1,51 @@ +# intlmacosx.m4 serial 3 (gettext-0.18) +dnl Copyright (C) 2004-2010 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Checks for special options needed on MacOS X. +dnl Defines INTL_MACOSX_LIBS. +AC_DEFUN([gt_INTL_MACOSX], +[ +  dnl Check for API introduced in MacOS X 10.2. +  AC_CACHE_CHECK([for CFPreferencesCopyAppValue], +    [gt_cv_func_CFPreferencesCopyAppValue], +    [gt_save_LIBS="$LIBS" +     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" +     AC_TRY_LINK([#include <CoreFoundation/CFPreferences.h>], +       [CFPreferencesCopyAppValue(NULL, NULL)], +       [gt_cv_func_CFPreferencesCopyAppValue=yes], +       [gt_cv_func_CFPreferencesCopyAppValue=no]) +     LIBS="$gt_save_LIBS"]) +  if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then +    AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], +      [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) +  fi +  dnl Check for API introduced in MacOS X 10.3. +  AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], +    [gt_save_LIBS="$LIBS" +     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" +     AC_TRY_LINK([#include <CoreFoundation/CFLocale.h>], [CFLocaleCopyCurrent();], +       [gt_cv_func_CFLocaleCopyCurrent=yes], +       [gt_cv_func_CFLocaleCopyCurrent=no]) +     LIBS="$gt_save_LIBS"]) +  if test $gt_cv_func_CFLocaleCopyCurrent = yes; then +    AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], +      [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) +  fi +  INTL_MACOSX_LIBS= +  if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then +    INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" +  fi +  AC_SUBST([INTL_MACOSX_LIBS]) +]) diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4 new file mode 100644 index 00000000..ebb30528 --- /dev/null +++ b/m4/lib-ld.m4 @@ -0,0 +1,110 @@ +# lib-ld.m4 serial 4 (gettext-0.18) +dnl Copyright (C) 1996-2003, 2009-2010 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Subroutines of libtool.m4, +dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision +dnl with libtool.m4. + +dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. +AC_DEFUN([AC_LIB_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 </dev/null` in +*GNU* | *'with BFD'*) +  acl_cv_prog_gnu_ld=yes ;; +*) +  acl_cv_prog_gnu_ld=no ;; +esac]) +with_gnu_ld=$acl_cv_prog_gnu_ld +]) + +dnl From libtool-1.4. Sets the variable LD. +AC_DEFUN([AC_LIB_PROG_LD], +[AC_ARG_WITH([gnu-ld], +[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]], +test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then +  echo "#! /bin/sh" >conf$$.sh +  echo  "exit 0"   >>conf$$.sh +  chmod +x conf$$.sh +  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then +    PATH_SEPARATOR=';' +  else +    PATH_SEPARATOR=: +  fi +  rm -f conf$$.sh +fi +ac_prog=ld +if test "$GCC" = yes; then +  # Check if gcc -print-prog-name=ld gives a path. +  AC_MSG_CHECKING([for ld used by GCC]) +  case $host in +  *-*-mingw*) +    # gcc leaves a trailing carriage return which upsets mingw +    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; +  *) +    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; +  esac +  case $ac_prog in +    # Accept absolute paths. +    [[\\/]* | [A-Za-z]:[\\/]*)] +      [re_direlt='/[^/][^/]*/\.\./'] +      # Canonicalize the path of ld +      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` +      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do +        ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` +      done +      test -z "$LD" && LD="$ac_prog" +      ;; +  "") +    # If it fails, then pretend we aren't using GCC. +    ac_prog=ld +    ;; +  *) +    # If it is relative, then search for the first ld in PATH. +    with_gnu_ld=unknown +    ;; +  esac +elif test "$with_gnu_ld" = yes; then +  AC_MSG_CHECKING([for GNU ld]) +else +  AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL([acl_cv_path_LD], +[if test -z "$LD"; then +  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" +  for ac_dir in $PATH; do +    test -z "$ac_dir" && ac_dir=. +    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then +      acl_cv_path_LD="$ac_dir/$ac_prog" +      # 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. +      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in +      *GNU* | *'with BFD'*) +        test "$with_gnu_ld" != no && break ;; +      *) +        test "$with_gnu_ld" != yes && break ;; +      esac +    fi +  done +  IFS="$ac_save_ifs" +else +  acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$acl_cv_path_LD" +if test -n "$LD"; then +  AC_MSG_RESULT([$LD]) +else +  AC_MSG_RESULT([no]) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +AC_LIB_PROG_LD_GNU +]) diff --git a/m4/lib-link.m4 b/m4/lib-link.m4 new file mode 100644 index 00000000..c73bd8e3 --- /dev/null +++ b/m4/lib-link.m4 @@ -0,0 +1,774 @@ +# lib-link.m4 serial 21 (gettext-0.18) +dnl Copyright (C) 2001-2010 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_PREREQ([2.54]) + +dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and +dnl augments the CPPFLAGS variable. +dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname +dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_LINKFLAGS], +[ +  AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) +  AC_REQUIRE([AC_LIB_RPATH]) +  pushdef([Name],[translit([$1],[./-], [___])]) +  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], +                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) +  AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ +    AC_LIB_LINKFLAGS_BODY([$1], [$2]) +    ac_cv_lib[]Name[]_libs="$LIB[]NAME" +    ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" +    ac_cv_lib[]Name[]_cppflags="$INC[]NAME" +    ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" +  ]) +  LIB[]NAME="$ac_cv_lib[]Name[]_libs" +  LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" +  INC[]NAME="$ac_cv_lib[]Name[]_cppflags" +  LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" +  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) +  AC_SUBST([LIB]NAME) +  AC_SUBST([LTLIB]NAME) +  AC_SUBST([LIB]NAME[_PREFIX]) +  dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the +  dnl results of this search when this library appears as a dependency. +  HAVE_LIB[]NAME=yes +  popdef([NAME]) +  popdef([Name]) +]) + +dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) +dnl searches for libname and the libraries corresponding to explicit and +dnl implicit dependencies, together with the specified include files and +dnl the ability to compile and link the specified testcode. The missing-message +dnl defaults to 'no' and may contain additional hints for the user. +dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} +dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and +dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs +dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. +dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname +dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], +[ +  AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) +  AC_REQUIRE([AC_LIB_RPATH]) +  pushdef([Name],[translit([$1],[./-], [___])]) +  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], +                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + +  dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME +  dnl accordingly. +  AC_LIB_LINKFLAGS_BODY([$1], [$2]) + +  dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, +  dnl because if the user has installed lib[]Name and not disabled its use +  dnl via --without-lib[]Name-prefix, he wants to use it. +  ac_save_CPPFLAGS="$CPPFLAGS" +  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + +  AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ +    ac_save_LIBS="$LIBS" +    dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS, +    dnl because these -l options might require -L options that are present in +    dnl LIBS. -l options benefit only from the -L options listed before it. +    dnl Otherwise, add it to the front of LIBS, because it may be a static +    dnl library that depends on another static library that is present in LIBS. +    dnl Static libraries benefit only from the static libraries listed after +    dnl it. +    case " $LIB[]NAME" in +      *" -l"*) LIBS="$LIBS $LIB[]NAME" ;; +      *)       LIBS="$LIB[]NAME $LIBS" ;; +    esac +    AC_TRY_LINK([$3], [$4], +      [ac_cv_lib[]Name=yes], +      [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])']) +    LIBS="$ac_save_LIBS" +  ]) +  if test "$ac_cv_lib[]Name" = yes; then +    HAVE_LIB[]NAME=yes +    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) +    AC_MSG_CHECKING([how to link with lib[]$1]) +    AC_MSG_RESULT([$LIB[]NAME]) +  else +    HAVE_LIB[]NAME=no +    dnl If $LIB[]NAME didn't lead to a usable library, we don't need +    dnl $INC[]NAME either. +    CPPFLAGS="$ac_save_CPPFLAGS" +    LIB[]NAME= +    LTLIB[]NAME= +    LIB[]NAME[]_PREFIX= +  fi +  AC_SUBST([HAVE_LIB]NAME) +  AC_SUBST([LIB]NAME) +  AC_SUBST([LTLIB]NAME) +  AC_SUBST([LIB]NAME[_PREFIX]) +  popdef([NAME]) +  popdef([Name]) +]) + +dnl Determine the platform dependent parameters needed to use rpath: +dnl   acl_libext, +dnl   acl_shlibext, +dnl   acl_hardcode_libdir_flag_spec, +dnl   acl_hardcode_libdir_separator, +dnl   acl_hardcode_direct, +dnl   acl_hardcode_minus_L. +AC_DEFUN([AC_LIB_RPATH], +[ +  dnl Tell automake >= 1.10 to complain if config.rpath is missing. +  m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) +  AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS +  AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld +  AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host +  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir +  AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ +    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ +    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh +    . ./conftest.sh +    rm -f ./conftest.sh +    acl_cv_rpath=done +  ]) +  wl="$acl_cv_wl" +  acl_libext="$acl_cv_libext" +  acl_shlibext="$acl_cv_shlibext" +  acl_libname_spec="$acl_cv_libname_spec" +  acl_library_names_spec="$acl_cv_library_names_spec" +  acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" +  acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" +  acl_hardcode_direct="$acl_cv_hardcode_direct" +  acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" +  dnl Determine whether the user wants rpath handling at all. +  AC_ARG_ENABLE([rpath], +    [  --disable-rpath         do not hardcode runtime library paths], +    :, enable_rpath=yes) +]) + +dnl AC_LIB_FROMPACKAGE(name, package) +dnl declares that libname comes from the given package. The configure file +dnl will then not have a --with-libname-prefix option but a +dnl --with-package-prefix option. Several libraries can come from the same +dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar +dnl macro call that searches for libname. +AC_DEFUN([AC_LIB_FROMPACKAGE], +[ +  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], +                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) +  define([acl_frompackage_]NAME, [$2]) +  popdef([NAME]) +  pushdef([PACK],[$2]) +  pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], +                                  [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) +  define([acl_libsinpackage_]PACKUP, +    m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1]) +  popdef([PACKUP]) +  popdef([PACK]) +]) + +dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. +dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found +dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_LINKFLAGS_BODY], +[ +  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) +  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], +                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) +  pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) +  pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], +                                  [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) +  pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) +  dnl Autoconf >= 2.61 supports dots in --with options. +  pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)]) +  dnl By default, look in $includedir and $libdir. +  use_additional=yes +  AC_LIB_WITH_FINAL_PREFIX([ +    eval additional_includedir=\"$includedir\" +    eval additional_libdir=\"$libdir\" +  ]) +  AC_ARG_WITH(P_A_C_K[-prefix], +[[  --with-]]P_A_C_K[[-prefix[=DIR]  search for ]PACKLIBS[ in DIR/include and DIR/lib +  --without-]]P_A_C_K[[-prefix     don't search for ]PACKLIBS[ in includedir and libdir]], +[ +    if test "X$withval" = "Xno"; then +      use_additional=no +    else +      if test "X$withval" = "X"; then +        AC_LIB_WITH_FINAL_PREFIX([ +          eval additional_includedir=\"$includedir\" +          eval additional_libdir=\"$libdir\" +        ]) +      else +        additional_includedir="$withval/include" +        additional_libdir="$withval/$acl_libdirstem" +        if test "$acl_libdirstem2" != "$acl_libdirstem" \ +           && ! test -d "$withval/$acl_libdirstem"; then +          additional_libdir="$withval/$acl_libdirstem2" +        fi +      fi +    fi +]) +  dnl Search the library and its dependencies in $additional_libdir and +  dnl $LDFLAGS. Using breadth-first-seach. +  LIB[]NAME= +  LTLIB[]NAME= +  INC[]NAME= +  LIB[]NAME[]_PREFIX= +  dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been +  dnl computed. So it has to be reset here. +  HAVE_LIB[]NAME= +  rpathdirs= +  ltrpathdirs= +  names_already_handled= +  names_next_round='$1 $2' +  while test -n "$names_next_round"; do +    names_this_round="$names_next_round" +    names_next_round= +    for name in $names_this_round; do +      already_handled= +      for n in $names_already_handled; do +        if test "$n" = "$name"; then +          already_handled=yes +          break +        fi +      done +      if test -z "$already_handled"; then +        names_already_handled="$names_already_handled $name" +        dnl See if it was already located by an earlier AC_LIB_LINKFLAGS +        dnl or AC_LIB_HAVE_LINKFLAGS call. +        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` +        eval value=\"\$HAVE_LIB$uppername\" +        if test -n "$value"; then +          if test "$value" = yes; then +            eval value=\"\$LIB$uppername\" +            test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" +            eval value=\"\$LTLIB$uppername\" +            test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" +          else +            dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined +            dnl that this library doesn't exist. So just drop it. +            : +          fi +        else +          dnl Search the library lib$name in $additional_libdir and $LDFLAGS +          dnl and the already constructed $LIBNAME/$LTLIBNAME. +          found_dir= +          found_la= +          found_so= +          found_a= +          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name +          if test -n "$acl_shlibext"; then +            shrext=".$acl_shlibext"             # typically: shrext=.so +          else +            shrext= +          fi +          if test $use_additional = yes; then +            dir="$additional_libdir" +            dnl The same code as in the loop below: +            dnl First look for a shared library. +            if test -n "$acl_shlibext"; then +              if test -f "$dir/$libname$shrext"; then +                found_dir="$dir" +                found_so="$dir/$libname$shrext" +              else +                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then +                  ver=`(cd "$dir" && \ +                        for f in "$libname$shrext".*; do echo "$f"; done \ +                        | sed -e "s,^$libname$shrext\\\\.,," \ +                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ +                        | sed 1q ) 2>/dev/null` +                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then +                    found_dir="$dir" +                    found_so="$dir/$libname$shrext.$ver" +                  fi +                else +                  eval library_names=\"$acl_library_names_spec\" +                  for f in $library_names; do +                    if test -f "$dir/$f"; then +                      found_dir="$dir" +                      found_so="$dir/$f" +                      break +                    fi +                  done +                fi +              fi +            fi +            dnl Then look for a static library. +            if test "X$found_dir" = "X"; then +              if test -f "$dir/$libname.$acl_libext"; then +                found_dir="$dir" +                found_a="$dir/$libname.$acl_libext" +              fi +            fi +            if test "X$found_dir" != "X"; then +              if test -f "$dir/$libname.la"; then +                found_la="$dir/$libname.la" +              fi +            fi +          fi +          if test "X$found_dir" = "X"; then +            for x in $LDFLAGS $LTLIB[]NAME; do +              AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) +              case "$x" in +                -L*) +                  dir=`echo "X$x" | sed -e 's/^X-L//'` +                  dnl First look for a shared library. +                  if test -n "$acl_shlibext"; then +                    if test -f "$dir/$libname$shrext"; then +                      found_dir="$dir" +                      found_so="$dir/$libname$shrext" +                    else +                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then +                        ver=`(cd "$dir" && \ +                              for f in "$libname$shrext".*; do echo "$f"; done \ +                              | sed -e "s,^$libname$shrext\\\\.,," \ +                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ +                              | sed 1q ) 2>/dev/null` +                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then +                          found_dir="$dir" +                          found_so="$dir/$libname$shrext.$ver" +                        fi +                      else +                        eval library_names=\"$acl_library_names_spec\" +                        for f in $library_names; do +                          if test -f "$dir/$f"; then +                            found_dir="$dir" +                            found_so="$dir/$f" +                            break +                          fi +                        done +                      fi +                    fi +                  fi +                  dnl Then look for a static library. +                  if test "X$found_dir" = "X"; then +                    if test -f "$dir/$libname.$acl_libext"; then +                      found_dir="$dir" +                      found_a="$dir/$libname.$acl_libext" +                    fi +                  fi +                  if test "X$found_dir" != "X"; then +                    if test -f "$dir/$libname.la"; then +                      found_la="$dir/$libname.la" +                    fi +                  fi +                  ;; +              esac +              if test "X$found_dir" != "X"; then +                break +              fi +            done +          fi +          if test "X$found_dir" != "X"; then +            dnl Found the library. +            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" +            if test "X$found_so" != "X"; then +              dnl Linking with a shared library. We attempt to hardcode its +              dnl directory into the executable's runpath, unless it's the +              dnl standard /usr/lib. +              if test "$enable_rpath" = no \ +                 || test "X$found_dir" = "X/usr/$acl_libdirstem" \ +                 || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then +                dnl No hardcoding is needed. +                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" +              else +                dnl Use an explicit option to hardcode DIR into the resulting +                dnl binary. +                dnl Potentially add DIR to ltrpathdirs. +                dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. +                haveit= +                for x in $ltrpathdirs; do +                  if test "X$x" = "X$found_dir"; then +                    haveit=yes +                    break +                  fi +                done +                if test -z "$haveit"; then +                  ltrpathdirs="$ltrpathdirs $found_dir" +                fi +                dnl The hardcoding into $LIBNAME is system dependent. +                if test "$acl_hardcode_direct" = yes; then +                  dnl Using DIR/libNAME.so during linking hardcodes DIR into the +                  dnl resulting binary. +                  LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" +                else +                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then +                    dnl Use an explicit option to hardcode DIR into the resulting +                    dnl binary. +                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" +                    dnl Potentially add DIR to rpathdirs. +                    dnl The rpathdirs will be appended to $LIBNAME at the end. +                    haveit= +                    for x in $rpathdirs; do +                      if test "X$x" = "X$found_dir"; then +                        haveit=yes +                        break +                      fi +                    done +                    if test -z "$haveit"; then +                      rpathdirs="$rpathdirs $found_dir" +                    fi +                  else +                    dnl Rely on "-L$found_dir". +                    dnl But don't add it if it's already contained in the LDFLAGS +                    dnl or the already constructed $LIBNAME +                    haveit= +                    for x in $LDFLAGS $LIB[]NAME; do +                      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) +                      if test "X$x" = "X-L$found_dir"; then +                        haveit=yes +                        break +                      fi +                    done +                    if test -z "$haveit"; then +                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" +                    fi +                    if test "$acl_hardcode_minus_L" != no; then +                      dnl FIXME: Not sure whether we should use +                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" +                      dnl here. +                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" +                    else +                      dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH +                      dnl here, because this doesn't fit in flags passed to the +                      dnl compiler. So give up. No hardcoding. This affects only +                      dnl very old systems. +                      dnl FIXME: Not sure whether we should use +                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" +                      dnl here. +                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" +                    fi +                  fi +                fi +              fi +            else +              if test "X$found_a" != "X"; then +                dnl Linking with a static library. +                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" +              else +                dnl We shouldn't come here, but anyway it's good to have a +                dnl fallback. +                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" +              fi +            fi +            dnl Assume the include files are nearby. +            additional_includedir= +            case "$found_dir" in +              */$acl_libdirstem | */$acl_libdirstem/) +                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` +                if test "$name" = '$1'; then +                  LIB[]NAME[]_PREFIX="$basedir" +                fi +                additional_includedir="$basedir/include" +                ;; +              */$acl_libdirstem2 | */$acl_libdirstem2/) +                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` +                if test "$name" = '$1'; then +                  LIB[]NAME[]_PREFIX="$basedir" +                fi +                additional_includedir="$basedir/include" +                ;; +            esac +            if test "X$additional_includedir" != "X"; then +              dnl Potentially add $additional_includedir to $INCNAME. +              dnl But don't add it +              dnl   1. if it's the standard /usr/include, +              dnl   2. if it's /usr/local/include and we are using GCC on Linux, +              dnl   3. if it's already present in $CPPFLAGS or the already +              dnl      constructed $INCNAME, +              dnl   4. if it doesn't exist as a directory. +              if test "X$additional_includedir" != "X/usr/include"; then +                haveit= +                if test "X$additional_includedir" = "X/usr/local/include"; then +                  if test -n "$GCC"; then +                    case $host_os in +                      linux* | gnu* | k*bsd*-gnu) haveit=yes;; +                    esac +                  fi +                fi +                if test -z "$haveit"; then +                  for x in $CPPFLAGS $INC[]NAME; do +                    AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) +                    if test "X$x" = "X-I$additional_includedir"; then +                      haveit=yes +                      break +                    fi +                  done +                  if test -z "$haveit"; then +                    if test -d "$additional_includedir"; then +                      dnl Really add $additional_includedir to $INCNAME. +                      INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" +                    fi +                  fi +                fi +              fi +            fi +            dnl Look for dependencies. +            if test -n "$found_la"; then +              dnl Read the .la file. It defines the variables +              dnl dlname, library_names, old_library, dependency_libs, current, +              dnl age, revision, installed, dlopen, dlpreopen, libdir. +              save_libdir="$libdir" +              case "$found_la" in +                */* | *\\*) . "$found_la" ;; +                *) . "./$found_la" ;; +              esac +              libdir="$save_libdir" +              dnl We use only dependency_libs. +              for dep in $dependency_libs; do +                case "$dep" in +                  -L*) +                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` +                    dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. +                    dnl But don't add it +                    dnl   1. if it's the standard /usr/lib, +                    dnl   2. if it's /usr/local/lib and we are using GCC on Linux, +                    dnl   3. if it's already present in $LDFLAGS or the already +                    dnl      constructed $LIBNAME, +                    dnl   4. if it doesn't exist as a directory. +                    if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ +                       && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then +                      haveit= +                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ +                         || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then +                        if test -n "$GCC"; then +                          case $host_os in +                            linux* | gnu* | k*bsd*-gnu) haveit=yes;; +                          esac +                        fi +                      fi +                      if test -z "$haveit"; then +                        haveit= +                        for x in $LDFLAGS $LIB[]NAME; do +                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) +                          if test "X$x" = "X-L$additional_libdir"; then +                            haveit=yes +                            break +                          fi +                        done +                        if test -z "$haveit"; then +                          if test -d "$additional_libdir"; then +                            dnl Really add $additional_libdir to $LIBNAME. +                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" +                          fi +                        fi +                        haveit= +                        for x in $LDFLAGS $LTLIB[]NAME; do +                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) +                          if test "X$x" = "X-L$additional_libdir"; then +                            haveit=yes +                            break +                          fi +                        done +                        if test -z "$haveit"; then +                          if test -d "$additional_libdir"; then +                            dnl Really add $additional_libdir to $LTLIBNAME. +                            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" +                          fi +                        fi +                      fi +                    fi +                    ;; +                  -R*) +                    dir=`echo "X$dep" | sed -e 's/^X-R//'` +                    if test "$enable_rpath" != no; then +                      dnl Potentially add DIR to rpathdirs. +                      dnl The rpathdirs will be appended to $LIBNAME at the end. +                      haveit= +                      for x in $rpathdirs; do +                        if test "X$x" = "X$dir"; then +                          haveit=yes +                          break +                        fi +                      done +                      if test -z "$haveit"; then +                        rpathdirs="$rpathdirs $dir" +                      fi +                      dnl Potentially add DIR to ltrpathdirs. +                      dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. +                      haveit= +                      for x in $ltrpathdirs; do +                        if test "X$x" = "X$dir"; then +                          haveit=yes +                          break +                        fi +                      done +                      if test -z "$haveit"; then +                        ltrpathdirs="$ltrpathdirs $dir" +                      fi +                    fi +                    ;; +                  -l*) +                    dnl Handle this in the next round. +                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` +                    ;; +                  *.la) +                    dnl Handle this in the next round. Throw away the .la's +                    dnl directory; it is already contained in a preceding -L +                    dnl option. +                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` +                    ;; +                  *) +                    dnl Most likely an immediate library name. +                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" +                    LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" +                    ;; +                esac +              done +            fi +          else +            dnl Didn't find the library; assume it is in the system directories +            dnl known to the linker and runtime loader. (All the system +            dnl directories known to the linker should also be known to the +            dnl runtime loader, otherwise the system is severely misconfigured.) +            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" +            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" +          fi +        fi +      fi +    done +  done +  if test "X$rpathdirs" != "X"; then +    if test -n "$acl_hardcode_libdir_separator"; then +      dnl Weird platform: only the last -rpath option counts, the user must +      dnl pass all path elements in one option. We can arrange that for a +      dnl single library, but not when more than one $LIBNAMEs are used. +      alldirs= +      for found_dir in $rpathdirs; do +        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" +      done +      dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. +      acl_save_libdir="$libdir" +      libdir="$alldirs" +      eval flag=\"$acl_hardcode_libdir_flag_spec\" +      libdir="$acl_save_libdir" +      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" +    else +      dnl The -rpath options are cumulative. +      for found_dir in $rpathdirs; do +        acl_save_libdir="$libdir" +        libdir="$found_dir" +        eval flag=\"$acl_hardcode_libdir_flag_spec\" +        libdir="$acl_save_libdir" +        LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" +      done +    fi +  fi +  if test "X$ltrpathdirs" != "X"; then +    dnl When using libtool, the option that works for both libraries and +    dnl executables is -R. The -R options are cumulative. +    for found_dir in $ltrpathdirs; do +      LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" +    done +  fi +  popdef([P_A_C_K]) +  popdef([PACKLIBS]) +  popdef([PACKUP]) +  popdef([PACK]) +  popdef([NAME]) +]) + +dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, +dnl unless already present in VAR. +dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes +dnl contains two or three consecutive elements that belong together. +AC_DEFUN([AC_LIB_APPENDTOVAR], +[ +  for element in [$2]; do +    haveit= +    for x in $[$1]; do +      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) +      if test "X$x" = "X$element"; then +        haveit=yes +        break +      fi +    done +    if test -z "$haveit"; then +      [$1]="${[$1]}${[$1]:+ }$element" +    fi +  done +]) + +dnl For those cases where a variable contains several -L and -l options +dnl referring to unknown libraries and directories, this macro determines the +dnl necessary additional linker options for the runtime path. +dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) +dnl sets LDADDVAR to linker options needed together with LIBSVALUE. +dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, +dnl otherwise linking without libtool is assumed. +AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], +[ +  AC_REQUIRE([AC_LIB_RPATH]) +  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) +  $1= +  if test "$enable_rpath" != no; then +    if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then +      dnl Use an explicit option to hardcode directories into the resulting +      dnl binary. +      rpathdirs= +      next= +      for opt in $2; do +        if test -n "$next"; then +          dir="$next" +          dnl No need to hardcode the standard /usr/lib. +          if test "X$dir" != "X/usr/$acl_libdirstem" \ +             && test "X$dir" != "X/usr/$acl_libdirstem2"; then +            rpathdirs="$rpathdirs $dir" +          fi +          next= +        else +          case $opt in +            -L) next=yes ;; +            -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` +                 dnl No need to hardcode the standard /usr/lib. +                 if test "X$dir" != "X/usr/$acl_libdirstem" \ +                    && test "X$dir" != "X/usr/$acl_libdirstem2"; then +                   rpathdirs="$rpathdirs $dir" +                 fi +                 next= ;; +            *) next= ;; +          esac +        fi +      done +      if test "X$rpathdirs" != "X"; then +        if test -n ""$3""; then +          dnl libtool is used for linking. Use -R options. +          for dir in $rpathdirs; do +            $1="${$1}${$1:+ }-R$dir" +          done +        else +          dnl The linker is used for linking directly. +          if test -n "$acl_hardcode_libdir_separator"; then +            dnl Weird platform: only the last -rpath option counts, the user +            dnl must pass all path elements in one option. +            alldirs= +            for dir in $rpathdirs; do +              alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" +            done +            acl_save_libdir="$libdir" +            libdir="$alldirs" +            eval flag=\"$acl_hardcode_libdir_flag_spec\" +            libdir="$acl_save_libdir" +            $1="$flag" +          else +            dnl The -rpath options are cumulative. +            for dir in $rpathdirs; do +              acl_save_libdir="$libdir" +              libdir="$dir" +              eval flag=\"$acl_hardcode_libdir_flag_spec\" +              libdir="$acl_save_libdir" +              $1="${$1}${$1:+ }$flag" +            done +          fi +        fi +      fi +    fi +  fi +  AC_SUBST([$1]) +]) diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4 new file mode 100644 index 00000000..1601ceae --- /dev/null +++ b/m4/lib-prefix.m4 @@ -0,0 +1,224 @@ +# lib-prefix.m4 serial 7 (gettext-0.18) +dnl Copyright (C) 2001-2005, 2008-2010 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and +dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't +dnl require excessive bracketing. +ifdef([AC_HELP_STRING], +[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], +[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) + +dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed +dnl to access previously installed libraries. The basic assumption is that +dnl a user will want packages to use other packages he previously installed +dnl with the same --prefix option. +dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate +dnl libraries, but is otherwise very convenient. +AC_DEFUN([AC_LIB_PREFIX], +[ +  AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) +  AC_REQUIRE([AC_PROG_CC]) +  AC_REQUIRE([AC_CANONICAL_HOST]) +  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) +  AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) +  dnl By default, look in $includedir and $libdir. +  use_additional=yes +  AC_LIB_WITH_FINAL_PREFIX([ +    eval additional_includedir=\"$includedir\" +    eval additional_libdir=\"$libdir\" +  ]) +  AC_LIB_ARG_WITH([lib-prefix], +[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib +  --without-lib-prefix    don't search for libraries in includedir and libdir], +[ +    if test "X$withval" = "Xno"; then +      use_additional=no +    else +      if test "X$withval" = "X"; then +        AC_LIB_WITH_FINAL_PREFIX([ +          eval additional_includedir=\"$includedir\" +          eval additional_libdir=\"$libdir\" +        ]) +      else +        additional_includedir="$withval/include" +        additional_libdir="$withval/$acl_libdirstem" +      fi +    fi +]) +  if test $use_additional = yes; then +    dnl Potentially add $additional_includedir to $CPPFLAGS. +    dnl But don't add it +    dnl   1. if it's the standard /usr/include, +    dnl   2. if it's already present in $CPPFLAGS, +    dnl   3. if it's /usr/local/include and we are using GCC on Linux, +    dnl   4. if it doesn't exist as a directory. +    if test "X$additional_includedir" != "X/usr/include"; then +      haveit= +      for x in $CPPFLAGS; do +        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) +        if test "X$x" = "X-I$additional_includedir"; then +          haveit=yes +          break +        fi +      done +      if test -z "$haveit"; then +        if test "X$additional_includedir" = "X/usr/local/include"; then +          if test -n "$GCC"; then +            case $host_os in +              linux* | gnu* | k*bsd*-gnu) haveit=yes;; +            esac +          fi +        fi +        if test -z "$haveit"; then +          if test -d "$additional_includedir"; then +            dnl Really add $additional_includedir to $CPPFLAGS. +            CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" +          fi +        fi +      fi +    fi +    dnl Potentially add $additional_libdir to $LDFLAGS. +    dnl But don't add it +    dnl   1. if it's the standard /usr/lib, +    dnl   2. if it's already present in $LDFLAGS, +    dnl   3. if it's /usr/local/lib and we are using GCC on Linux, +    dnl   4. if it doesn't exist as a directory. +    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then +      haveit= +      for x in $LDFLAGS; do +        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) +        if test "X$x" = "X-L$additional_libdir"; then +          haveit=yes +          break +        fi +      done +      if test -z "$haveit"; then +        if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then +          if test -n "$GCC"; then +            case $host_os in +              linux*) haveit=yes;; +            esac +          fi +        fi +        if test -z "$haveit"; then +          if test -d "$additional_libdir"; then +            dnl Really add $additional_libdir to $LDFLAGS. +            LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" +          fi +        fi +      fi +    fi +  fi +]) + +dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, +dnl acl_final_exec_prefix, containing the values to which $prefix and +dnl $exec_prefix will expand at the end of the configure script. +AC_DEFUN([AC_LIB_PREPARE_PREFIX], +[ +  dnl Unfortunately, prefix and exec_prefix get only finally determined +  dnl at the end of configure. +  if test "X$prefix" = "XNONE"; then +    acl_final_prefix="$ac_default_prefix" +  else +    acl_final_prefix="$prefix" +  fi +  if test "X$exec_prefix" = "XNONE"; then +    acl_final_exec_prefix='${prefix}' +  else +    acl_final_exec_prefix="$exec_prefix" +  fi +  acl_save_prefix="$prefix" +  prefix="$acl_final_prefix" +  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" +  prefix="$acl_save_prefix" +]) + +dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the +dnl variables prefix and exec_prefix bound to the values they will have +dnl at the end of the configure script. +AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], +[ +  acl_save_prefix="$prefix" +  prefix="$acl_final_prefix" +  acl_save_exec_prefix="$exec_prefix" +  exec_prefix="$acl_final_exec_prefix" +  $1 +  exec_prefix="$acl_save_exec_prefix" +  prefix="$acl_save_prefix" +]) + +dnl AC_LIB_PREPARE_MULTILIB creates +dnl - a variable acl_libdirstem, containing the basename of the libdir, either +dnl   "lib" or "lib64" or "lib/64", +dnl - a variable acl_libdirstem2, as a secondary possible value for +dnl   acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or +dnl   "lib/amd64". +AC_DEFUN([AC_LIB_PREPARE_MULTILIB], +[ +  dnl There is no formal standard regarding lib and lib64. +  dnl On glibc systems, the current practice is that on a system supporting +  dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under +  dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine +  dnl the compiler's default mode by looking at the compiler's library search +  dnl path. If at least one of its elements ends in /lib64 or points to a +  dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. +  dnl Otherwise we use the default, namely "lib". +  dnl On Solaris systems, the current practice is that on a system supporting +  dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under +  dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or +  dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. +  AC_REQUIRE([AC_CANONICAL_HOST]) +  acl_libdirstem=lib +  acl_libdirstem2= +  case "$host_os" in +    solaris*) +      dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment +      dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>. +      dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." +      dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the +      dnl symlink is missing, so we set acl_libdirstem2 too. +      AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], +        [AC_EGREP_CPP([sixtyfour bits], [ +#ifdef _LP64 +sixtyfour bits +#endif +           ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) +        ]) +      if test $gl_cv_solaris_64bit = yes; then +        acl_libdirstem=lib/64 +        case "$host_cpu" in +          sparc*)        acl_libdirstem2=lib/sparcv9 ;; +          i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; +        esac +      fi +      ;; +    *) +      searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` +      if test -n "$searchpath"; then +        acl_save_IFS="${IFS= 	}"; IFS=":" +        for searchdir in $searchpath; do +          if test -d "$searchdir"; then +            case "$searchdir" in +              */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; +              */../ | */.. ) +                # Better ignore directories of this form. They are misleading. +                ;; +              *) searchdir=`cd "$searchdir" && pwd` +                 case "$searchdir" in +                   */lib64 ) acl_libdirstem=lib64 ;; +                 esac ;; +            esac +          fi +        done +        IFS="$acl_save_IFS" +      fi +      ;; +  esac +  test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" +]) diff --git a/m4/libtool.m4 b/m4/libtool.m4 new file mode 100644 index 00000000..d8125842 --- /dev/null +++ b/m4/libtool.m4 @@ -0,0 +1,7831 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +#                 Inc. +#   Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +#                 Inc. +#   Written by Gordon Matzigkeit, 1996 +# +#   This file is part of GNU Libtool. +# +# GNU Libtool 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. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 57 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, +       [m4_default([$3], +		   [m4_fatal([Libtool version $1 or higher is required], +		             63)])], +       [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in +  *\ * | *\	*) +    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do +  case $cc_temp in +    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; +    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; +    \-*) ;; +    *) break;; +  esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then +   setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then +   setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) +  # AIX sometimes has problems with the GCC collect2 program.  For some +  # reason, if we set the COLLECT_NAMES environment variable, the problems +  # vanish in a puff of smoke. +  if test "X${COLLECT_NAMES+set}" != Xset; then +    COLLECT_NAMES= +    export COLLECT_NAMES +  fi +  ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) +  if test "$file_magic_cmd" = '$MAGIC_CMD'; then +    _LT_PATH_MAGIC +  fi +  ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], +          [m4_append([_LT_OUTPUT_LIBTOOL_INIT], +                     [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], +          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], +                     [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], +              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME.  Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], +    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], +	[m4_ifval([$1], [$1], [$2])]) +    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) +    m4_ifval([$4], +	[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) +    lt_dict_add_subkey([lt_decl_dict], [$2], +	[tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], +  [0], [m4_fatal([$0: too few arguments: $#])], +  [1], [m4_fatal([$0: too few arguments: $#: $1])], +  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], +  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], +  [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), +    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), +    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), +     m4_if([$2], [], +	   m4_quote(lt_decl_varnames), +	m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], +			lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'.  VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly.  In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +#    <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), +    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +#    # Some comment about what VAR is for. +#    visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], +					   [description])))[]dnl +m4_pushdef([_libtool_name], +    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), +    [0], [_libtool_name=[$]$1], +    [1], [_libtool_name=$lt_[]$1], +    [2], [_libtool_name=$lt_[]$1], +    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], +    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), +    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), +    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'.  Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], +	dnl If the libtool generation code has been placed in $CONFIG_LT, +	dnl instead of duplicating it all over again into config.status, +	dnl then we will have config.status run $CONFIG_LT later, so it +	dnl needs to know what name is stored there: +        [AC_CONFIG_COMMANDS([libtool], +            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], +    dnl If the libtool generation code is destined for config.status, +    dnl expand the accumulated commands and init code now: +    [AC_CONFIG_COMMANDS([libtool], +        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ +  eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do +    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in +    *[[\\\\\\\`\\"\\\$]]*) +      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" +      ;; +    *) +      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" +      ;; +    esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do +    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in +    *[[\\\\\\\`\\"\\\$]]*) +      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" +      ;; +    *) +      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" +      ;; +    esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable.  If COMMENT is supplied, it is inserted after the +# `#!' sequence but before initialization text begins.  After this +# macro, additional text can be appended to FILE to form the body of +# the child script.  The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test $lt_write_fail = 0 && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ +  echo +  AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + +  -h, --help      print this help, then exit +  -V, --version   print version number, then exit +  -q, --quiet     do not print progress messages +  -d, --debug     don't remove temporary files + +Report bugs to <bug-libtool@gnu.org>." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do +  case $[1] in +    --version | --v* | -V ) +      echo "$lt_cl_version"; exit 0 ;; +    --help | --h* | -h ) +      echo "$lt_cl_help"; exit 0 ;; +    --debug | --d* | -d ) +      debug=: ;; +    --quiet | --q* | --silent | --s* | -q ) +      lt_cl_silent=: ;; + +    -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + +    *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; +  esac +  shift +done + +if $lt_cl_silent; then +  exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure.  Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test "$silent" = yes && +  lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars.  Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ +  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl +  m4_if(_LT_TAG, [C], [ +    # See if we are running on zsh, and set the options which allow our +    # commands through without removal of \ escapes. +    if test -n "${ZSH_VERSION+set}" ; then +      setopt NO_GLOB_SUBST +    fi + +    cfgfile="${ofile}T" +    trap "$RM \"$cfgfile\"; exit 1" 1 2 15 +    $RM "$cfgfile" + +    cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + +  case $host_os in +  aix3*) +    cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program.  For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then +  COLLECT_NAMES= +  export COLLECT_NAMES +fi +_LT_EOF +    ;; +  esac + +  _LT_PROG_LTMAIN + +  # We use sed instead of cat because bash on DJGPP gets confused if +  # if finds mixed CR/LF and LF-only lines.  Since sed operates in +  # text mode, it properly converts lines to CR/LF.  This bash problem +  # is reportedly fixed, but why not run on old versions too? +  sed '$q' "$ltmain" >> "$cfgfile" \ +     || (rm -f "$cfgfile"; exit 1) + +  _LT_PROG_REPLACE_SHELLFNS + +   mv -f "$cfgfile" "$ofile" || +    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") +  chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ +    PACKAGE='$PACKAGE' +    VERSION='$VERSION' +    TIMESTAMP='$TIMESTAMP' +    RM='$RM' +    ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +#    autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], +  [C],			[_LT_LANG(C)], +  [C++],		[_LT_LANG(CXX)], +  [Java],		[_LT_LANG(GCJ)], +  [Fortran 77],		[_LT_LANG(F77)], +  [Fortran],		[_LT_LANG(FC)], +  [Windows Resource],	[_LT_LANG(RC)], +  [m4_ifdef([_LT_LANG_]$1[_CONFIG], +    [_LT_LANG($1)], +    [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], +  [LT_SUPPORTED_TAG([$1])dnl +  m4_append([_LT_TAGS], [$1 ])dnl +  m4_define([_LT_LANG_]$1[_enabled], [])dnl +  _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], +  [LT_LANG(CXX)], +  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], +  [LT_LANG(F77)], +  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], +  [LT_LANG(FC)], +  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], +  [LT_LANG(GCJ)], +  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], +    [LT_LANG(GCJ)], +    [AC_PROVIDE_IFELSE([LT_PROG_GCJ], +      [LT_LANG(GCJ)], +      [m4_ifdef([AC_PROG_GCJ], +	[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) +       m4_ifdef([A][M_PROG_GCJ], +	[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) +       m4_ifdef([LT_PROG_GCJ], +	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], +  [LT_LANG(RC)], +  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ +  case $host_os in +    rhapsody* | darwin*) +    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) +    AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) +    AC_CHECK_TOOL([LIPO], [lipo], [:]) +    AC_CHECK_TOOL([OTOOL], [otool], [:]) +    AC_CHECK_TOOL([OTOOL64], [otool64], [:]) +    _LT_DECL([], [DSYMUTIL], [1], +      [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) +    _LT_DECL([], [NMEDIT], [1], +      [Tool to change global to local symbols on Mac OS X]) +    _LT_DECL([], [LIPO], [1], +      [Tool to manipulate fat objects and archives on Mac OS X]) +    _LT_DECL([], [OTOOL], [1], +      [ldd/readelf like tool for Mach-O binaries on Mac OS X]) +    _LT_DECL([], [OTOOL64], [1], +      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + +    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], +      [lt_cv_apple_cc_single_mod=no +      if test -z "${LT_MULTI_MODULE}"; then +	# By default we will add the -single_module flag. You can override +	# by either setting the environment variable LT_MULTI_MODULE +	# non-empty at configure time, or by adding -multi_module to the +	# link flags. +	rm -rf libconftest.dylib* +	echo "int foo(void){return 1;}" > conftest.c +	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD +	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err +        _lt_result=$? +	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then +	  lt_cv_apple_cc_single_mod=yes +	else +	  cat conftest.err >&AS_MESSAGE_LOG_FD +	fi +	rm -rf libconftest.dylib* +	rm -f conftest.* +      fi]) +    AC_CACHE_CHECK([for -exported_symbols_list linker flag], +      [lt_cv_ld_exported_symbols_list], +      [lt_cv_ld_exported_symbols_list=no +      save_LDFLAGS=$LDFLAGS +      echo "_main" > conftest.sym +      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" +      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], +	[lt_cv_ld_exported_symbols_list=yes], +	[lt_cv_ld_exported_symbols_list=no]) +	LDFLAGS="$save_LDFLAGS" +    ]) +    AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], +      [lt_cv_ld_force_load=no +      cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF +      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD +      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD +      echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD +      $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD +      echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD +      $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD +      cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF +      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD +      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err +      _lt_result=$? +      if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then +	lt_cv_ld_force_load=yes +      else +	cat conftest.err >&AS_MESSAGE_LOG_FD +      fi +        rm -f conftest.err libconftest.a conftest conftest.c +        rm -rf conftest.dSYM +    ]) +    case $host_os in +    rhapsody* | darwin1.[[012]]) +      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; +    darwin1.*) +      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; +    darwin*) # darwin 5.x on +      # if running on 10.5 or later, the deployment target defaults +      # to the OS version, if on x86, and 10.4, the deployment +      # target defaults to 10.4. Don't you love it? +      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in +	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) +	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; +	10.[[012]]*) +	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; +	10.*) +	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; +      esac +    ;; +  esac +    if test "$lt_cv_apple_cc_single_mod" = "yes"; then +      _lt_dar_single_mod='$single_module' +    fi +    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then +      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' +    else +      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' +    fi +    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then +      _lt_dsymutil='~$DSYMUTIL $lib || :' +    else +      _lt_dsymutil= +    fi +    ;; +  esac +]) + + +# _LT_DARWIN_LINKER_FEATURES +# -------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ +  m4_require([_LT_REQUIRED_DARWIN_CHECKS]) +  _LT_TAGVAR(archive_cmds_need_lc, $1)=no +  _LT_TAGVAR(hardcode_direct, $1)=no +  _LT_TAGVAR(hardcode_automatic, $1)=yes +  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +  if test "$lt_cv_ld_force_load" = "yes"; then +    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' +  else +    _LT_TAGVAR(whole_archive_flag_spec, $1)='' +  fi +  _LT_TAGVAR(link_all_deplibs, $1)=yes +  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" +  case $cc_basename in +     ifort*) _lt_dar_can_shared=yes ;; +     *) _lt_dar_can_shared=$GCC ;; +  esac +  if test "$_lt_dar_can_shared" = "yes"; then +    output_verbose_link_cmd=func_echo_all +    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" +    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" +    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" +    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" +    m4_if([$1], [CXX], +[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then +      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" +      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" +    fi +],[]) +  else +  _LT_TAGVAR(ld_shlibs, $1)=no +  fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test "${lt_cv_aix_libpath+set}" = set; then +  aix_libpath=$lt_cv_aix_libpath +else +  AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], +  [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ +  lt_aix_libpath_sed='[ +      /Import File Strings/,/^$/ { +	  /^0/ { +	      s/^0  *\([^ ]*\) *$/\1/ +	      p +	  } +      }]' +  _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +  # Check for a 64-bit object if we didn't find anything. +  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then +    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +  fi],[]) +  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then +    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" +  fi +  ]) +  aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script which will find a shell with a builtin +# printf (which we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ +   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then +  ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then +  ECHO='printf %s\n' +else +  # Use this function as a fallback that always works. +  func_fallback_echo () +  { +    eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' +  } +  ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ +    $ECHO "$*"  +} + +case "$ECHO" in +  printf*) AC_MSG_RESULT([printf]) ;; +  print*) AC_MSG_RESULT([print -r]) ;; +  *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ +  test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( +    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO +    PATH=/empty FPATH=/empty; export PATH FPATH +    test "X`printf %s $ECHO`" = "X$ECHO" \ +      || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[  --with-sysroot[=DIR] Search for dependent libraries within DIR +                        (or the compiler's sysroot if not specified).], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted.  We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case ${with_sysroot} in #( + yes) +   if test "$GCC" = yes; then +     lt_sysroot=`$CC --print-sysroot 2>/dev/null` +   fi +   ;; #( + /*) +   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` +   ;; #( + no|'') +   ;; #( + *) +   AC_MSG_RESULT([${with_sysroot}]) +   AC_MSG_ERROR([The sysroot must be an absolute path.]) +   ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and in which our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], +  [AS_HELP_STRING([--disable-libtool-lock], +    [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) +  # Find out which ABI we are using. +  echo 'int i;' > conftest.$ac_ext +  if AC_TRY_EVAL(ac_compile); then +    case `/usr/bin/file conftest.$ac_objext` in +      *ELF-32*) +	HPUX_IA64_MODE="32" +	;; +      *ELF-64*) +	HPUX_IA64_MODE="64" +	;; +    esac +  fi +  rm -rf conftest* +  ;; +*-*-irix6*) +  # Find out which ABI we are using. +  echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext +  if AC_TRY_EVAL(ac_compile); then +    if test "$lt_cv_prog_gnu_ld" = yes; then +      case `/usr/bin/file conftest.$ac_objext` in +	*32-bit*) +	  LD="${LD-ld} -melf32bsmip" +	  ;; +	*N32*) +	  LD="${LD-ld} -melf32bmipn32" +	  ;; +	*64-bit*) +	  LD="${LD-ld} -melf64bmip" +	;; +      esac +    else +      case `/usr/bin/file conftest.$ac_objext` in +	*32-bit*) +	  LD="${LD-ld} -32" +	  ;; +	*N32*) +	  LD="${LD-ld} -n32" +	  ;; +	*64-bit*) +	  LD="${LD-ld} -64" +	  ;; +      esac +    fi +  fi +  rm -rf conftest* +  ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) +  # Find out which ABI we are using. +  echo 'int i;' > conftest.$ac_ext +  if AC_TRY_EVAL(ac_compile); then +    case `/usr/bin/file conftest.o` in +      *32-bit*) +	case $host in +	  x86_64-*kfreebsd*-gnu) +	    LD="${LD-ld} -m elf_i386_fbsd" +	    ;; +	  x86_64-*linux*) +	    LD="${LD-ld} -m elf_i386" +	    ;; +	  ppc64-*linux*|powerpc64-*linux*) +	    LD="${LD-ld} -m elf32ppclinux" +	    ;; +	  s390x-*linux*) +	    LD="${LD-ld} -m elf_s390" +	    ;; +	  sparc64-*linux*) +	    LD="${LD-ld} -m elf32_sparc" +	    ;; +	esac +	;; +      *64-bit*) +	case $host in +	  x86_64-*kfreebsd*-gnu) +	    LD="${LD-ld} -m elf_x86_64_fbsd" +	    ;; +	  x86_64-*linux*) +	    LD="${LD-ld} -m elf_x86_64" +	    ;; +	  ppc*-*linux*|powerpc*-*linux*) +	    LD="${LD-ld} -m elf64ppc" +	    ;; +	  s390*-*linux*|s390*-*tpf*) +	    LD="${LD-ld} -m elf64_s390" +	    ;; +	  sparc*-*linux*) +	    LD="${LD-ld} -m elf64_sparc" +	    ;; +	esac +	;; +    esac +  fi +  rm -rf conftest* +  ;; + +*-*-sco3.2v5*) +  # On SCO OpenServer 5, we need -belf to get full-featured binaries. +  SAVE_CFLAGS="$CFLAGS" +  CFLAGS="$CFLAGS -belf" +  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, +    [AC_LANG_PUSH(C) +     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) +     AC_LANG_POP]) +  if test x"$lt_cv_cc_needs_belf" != x"yes"; then +    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf +    CFLAGS="$SAVE_CFLAGS" +  fi +  ;; +sparc*-*solaris*) +  # Find out which ABI we are using. +  echo 'int i;' > conftest.$ac_ext +  if AC_TRY_EVAL(ac_compile); then +    case `/usr/bin/file conftest.o` in +    *64-bit*) +      case $lt_cv_prog_gnu_ld in +      yes*) LD="${LD-ld} -m elf64_sparc" ;; +      *) +	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then +	  LD="${LD-ld} -64" +	fi +	;; +      esac +      ;; +    esac +  fi +  rm -rf conftest* +  ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], +  [lt_cv_ar_at_file=no +   AC_COMPILE_IFELSE([AC_LANG_PROGRAM], +     [echo conftest.$ac_objext > conftest.lst +      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' +      AC_TRY_EVAL([lt_ar_try]) +      if test "$ac_status" -eq 0; then +	# Ensure the archiver fails upon bogus file names. +	rm -f conftest.$ac_objext libconftest.a +	AC_TRY_EVAL([lt_ar_try]) +	if test "$ac_status" -ne 0; then +          lt_cv_ar_at_file=@ +        fi +      fi +      rm -f conftest.* libconftest.a +     ]) +  ]) + +if test "x$lt_cv_ar_at_file" = xno; then +  archiver_list_spec= +else +  archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], +  [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], +    [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then +  case $host_os in +  openbsd*) +    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" +    ;; +  *) +    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" +    ;; +  esac +  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +case $host_os in +  darwin*) +    lock_old_archive_extraction=yes ;; +  *) +    lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], +    [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], +    [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], +  [$2=no +   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) +   echo "$lt_simple_compile_test_code" > conftest.$ac_ext +   lt_compiler_flag="$3" +   # Insert the option either (1) after the last *FLAGS variable, or +   # (2) before a word containing "conftest.", or (3) at the end. +   # Note that $ac_compile itself does not contain backslashes and begins +   # with a dollar sign (not a hyphen), so the echo should work correctly. +   # The option is referenced via a variable to avoid confusing sed. +   lt_compile=`echo "$ac_compile" | $SED \ +   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ +   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ +   -e 's:$: $lt_compiler_flag:'` +   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) +   (eval "$lt_compile" 2>conftest.err) +   ac_status=$? +   cat conftest.err >&AS_MESSAGE_LOG_FD +   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD +   if (exit $ac_status) && test -s "$ac_outfile"; then +     # The compiler can only warn and ignore the option if not recognized +     # So say no if there are warnings other than the usual output. +     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp +     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 +     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then +       $2=yes +     fi +   fi +   $RM conftest* +]) + +if test x"[$]$2" = xyes; then +    m4_if([$5], , :, [$5]) +else +    m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +#                  [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], +  [$2=no +   save_LDFLAGS="$LDFLAGS" +   LDFLAGS="$LDFLAGS $3" +   echo "$lt_simple_link_test_code" > conftest.$ac_ext +   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then +     # The linker can only warn and ignore the option if not recognized +     # So say no if there are warnings +     if test -s conftest.err; then +       # Append any errors to the config.log. +       cat conftest.err 1>&AS_MESSAGE_LOG_FD +       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp +       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 +       if diff conftest.exp conftest.er2 >/dev/null; then +         $2=yes +       fi +     else +       $2=yes +     fi +   fi +   $RM -r conftest* +   LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then +    m4_if([$4], , :, [$4]) +else +    m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl +  i=0 +  teststring="ABCD" + +  case $build_os in +  msdosdjgpp*) +    # On DJGPP, this test can blow up pretty badly due to problems in libc +    # (any single argument exceeding 2000 bytes causes a buffer overrun +    # during glob expansion).  Even if it were fixed, the result of this +    # check would be larger than it should be. +    lt_cv_sys_max_cmd_len=12288;    # 12K is about right +    ;; + +  gnu*) +    # Under GNU Hurd, this test is not required because there is +    # no limit to the length of command line arguments. +    # Libtool will interpret -1 as no limit whatsoever +    lt_cv_sys_max_cmd_len=-1; +    ;; + +  cygwin* | mingw* | cegcc*) +    # On Win9x/ME, this test blows up -- it succeeds, but takes +    # about 5 minutes as the teststring grows exponentially. +    # Worse, since 9x/ME are not pre-emptively multitasking, +    # you end up with a "frozen" computer, even though with patience +    # the test eventually succeeds (with a max line length of 256k). +    # Instead, let's just punt: use the minimum linelength reported by +    # all of the supported platforms: 8192 (on NT/2K/XP). +    lt_cv_sys_max_cmd_len=8192; +    ;; + +  mint*) +    # On MiNT this can take a long time and run out of memory. +    lt_cv_sys_max_cmd_len=8192; +    ;; + +  amigaos*) +    # On AmigaOS with pdksh, this test takes hours, literally. +    # So we just punt and use a minimum line length of 8192. +    lt_cv_sys_max_cmd_len=8192; +    ;; + +  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) +    # This has been around since 386BSD, at least.  Likely further. +    if test -x /sbin/sysctl; then +      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` +    elif test -x /usr/sbin/sysctl; then +      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` +    else +      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs +    fi +    # And add a safety zone +    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` +    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` +    ;; + +  interix*) +    # We know the value 262144 and hardcode it with a safety zone (like BSD) +    lt_cv_sys_max_cmd_len=196608 +    ;; + +  osf*) +    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure +    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not +    # nice to cause kernel panics so lets avoid the loop below. +    # First set a reasonable default. +    lt_cv_sys_max_cmd_len=16384 +    # +    if test -x /sbin/sysconfig; then +      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in +        *1*) lt_cv_sys_max_cmd_len=-1 ;; +      esac +    fi +    ;; +  sco3.2v5*) +    lt_cv_sys_max_cmd_len=102400 +    ;; +  sysv5* | sco5v6* | sysv4.2uw2*) +    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` +    if test -n "$kargmax"; then +      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[	 ]]//'` +    else +      lt_cv_sys_max_cmd_len=32768 +    fi +    ;; +  *) +    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` +    if test -n "$lt_cv_sys_max_cmd_len"; then +      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` +      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` +    else +      # Make teststring a little bigger before we do anything with it. +      # a 1K string should be a reasonable start. +      for i in 1 2 3 4 5 6 7 8 ; do +        teststring=$teststring$teststring +      done +      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} +      # If test is not a shell built-in, we'll probably end up computing a +      # maximum length that is only half of the actual maximum length, but +      # we can't tell. +      while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ +	         = "X$teststring$teststring"; } >/dev/null 2>&1 && +	      test $i != 17 # 1/2 MB should be enough +      do +        i=`expr $i + 1` +        teststring=$teststring$teststring +      done +      # Only check the string length outside the loop. +      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` +      teststring= +      # Add a significant safety factor because C++ compilers can tack on +      # massive amounts of additional arguments before passing them to the +      # linker.  It appears as though 1/2 is a usable value. +      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` +    fi +    ;; +  esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then +  AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else +  AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], +    [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : +  [$4] +else +  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 +  lt_status=$lt_dlunknown +  cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include <dlfcn.h> +#endif + +#include <stdio.h> + +#ifdef RTLD_GLOBAL +#  define LT_DLGLOBAL		RTLD_GLOBAL +#else +#  ifdef DL_GLOBAL +#    define LT_DLGLOBAL		DL_GLOBAL +#  else +#    define LT_DLGLOBAL		0 +#  endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we +   find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +#  ifdef RTLD_LAZY +#    define LT_DLLAZY_OR_NOW		RTLD_LAZY +#  else +#    ifdef DL_LAZY +#      define LT_DLLAZY_OR_NOW		DL_LAZY +#    else +#      ifdef RTLD_NOW +#        define LT_DLLAZY_OR_NOW	RTLD_NOW +#      else +#        ifdef DL_NOW +#          define LT_DLLAZY_OR_NOW	DL_NOW +#        else +#          define LT_DLLAZY_OR_NOW	0 +#        endif +#      endif +#    endif +#  endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated +   correspondingly for the symbols needed.  */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ +  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); +  int status = $lt_dlunknown; + +  if (self) +    { +      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore; +      else +        { +	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore; +          else puts (dlerror ()); +	} +      /* dlclose (self); */ +    } +  else +    puts (dlerror ()); + +  return status; +}] +_LT_EOF +  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then +    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null +    lt_status=$? +    case x$lt_status in +      x$lt_dlno_uscore) $1 ;; +      x$lt_dlneed_uscore) $2 ;; +      x$lt_dlunknown|x*) $3 ;; +    esac +  else : +    # compilation failed +    $3 +  fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then +  enable_dlopen=unknown +  enable_dlopen_self=unknown +  enable_dlopen_self_static=unknown +else +  lt_cv_dlopen=no +  lt_cv_dlopen_libs= + +  case $host_os in +  beos*) +    lt_cv_dlopen="load_add_on" +    lt_cv_dlopen_libs= +    lt_cv_dlopen_self=yes +    ;; + +  mingw* | pw32* | cegcc*) +    lt_cv_dlopen="LoadLibrary" +    lt_cv_dlopen_libs= +    ;; + +  cygwin*) +    lt_cv_dlopen="dlopen" +    lt_cv_dlopen_libs= +    ;; + +  darwin*) +  # if libdl is installed we need to link against it +    AC_CHECK_LIB([dl], [dlopen], +		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ +    lt_cv_dlopen="dyld" +    lt_cv_dlopen_libs= +    lt_cv_dlopen_self=yes +    ]) +    ;; + +  *) +    AC_CHECK_FUNC([shl_load], +	  [lt_cv_dlopen="shl_load"], +      [AC_CHECK_LIB([dld], [shl_load], +	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], +	[AC_CHECK_FUNC([dlopen], +	      [lt_cv_dlopen="dlopen"], +	  [AC_CHECK_LIB([dl], [dlopen], +		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], +	    [AC_CHECK_LIB([svld], [dlopen], +		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], +	      [AC_CHECK_LIB([dld], [dld_link], +		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) +	      ]) +	    ]) +	  ]) +	]) +      ]) +    ;; +  esac + +  if test "x$lt_cv_dlopen" != xno; then +    enable_dlopen=yes +  else +    enable_dlopen=no +  fi + +  case $lt_cv_dlopen in +  dlopen) +    save_CPPFLAGS="$CPPFLAGS" +    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + +    save_LDFLAGS="$LDFLAGS" +    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + +    save_LIBS="$LIBS" +    LIBS="$lt_cv_dlopen_libs $LIBS" + +    AC_CACHE_CHECK([whether a program can dlopen itself], +	  lt_cv_dlopen_self, [dnl +	  _LT_TRY_DLOPEN_SELF( +	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, +	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) +    ]) + +    if test "x$lt_cv_dlopen_self" = xyes; then +      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" +      AC_CACHE_CHECK([whether a statically linked program can dlopen itself], +	  lt_cv_dlopen_self_static, [dnl +	  _LT_TRY_DLOPEN_SELF( +	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, +	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross) +      ]) +    fi + +    CPPFLAGS="$save_CPPFLAGS" +    LDFLAGS="$save_LDFLAGS" +    LIBS="$save_LIBS" +    ;; +  esac + +  case $lt_cv_dlopen_self in +  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; +  *) enable_dlopen_self=unknown ;; +  esac + +  case $lt_cv_dlopen_self_static in +  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; +  *) enable_dlopen_self_static=unknown ;; +  esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], +	 [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], +	 [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], +	 [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], +  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], +  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no +   $RM -r conftest 2>/dev/null +   mkdir conftest +   cd conftest +   mkdir out +   echo "$lt_simple_compile_test_code" > conftest.$ac_ext + +   lt_compiler_flag="-o out/conftest2.$ac_objext" +   # Insert the option either (1) after the last *FLAGS variable, or +   # (2) before a word containing "conftest.", or (3) at the end. +   # Note that $ac_compile itself does not contain backslashes and begins +   # with a dollar sign (not a hyphen), so the echo should work correctly. +   lt_compile=`echo "$ac_compile" | $SED \ +   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ +   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ +   -e 's:$: $lt_compiler_flag:'` +   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) +   (eval "$lt_compile" 2>out/conftest.err) +   ac_status=$? +   cat out/conftest.err >&AS_MESSAGE_LOG_FD +   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD +   if (exit $ac_status) && test -s out/conftest2.$ac_objext +   then +     # The compiler can only warn and ignore the option if not recognized +     # So say no if there are warnings +     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp +     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 +     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then +       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes +     fi +   fi +   chmod u+w . 2>&AS_MESSAGE_LOG_FD +   $RM conftest* +   # SGI C++ compiler will create directory out/ii_files/ for +   # template instantiation +   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files +   $RM out/* && rmdir out +   cd .. +   $RM -r conftest +   $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], +	[Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then +  # do not overwrite the value of need_locks provided by the user +  AC_MSG_CHECKING([if we can lock with hard links]) +  hard_links=yes +  $RM conftest* +  ln conftest.a conftest.b 2>/dev/null && hard_links=no +  touch conftest.a +  ln conftest.a conftest.b 2>&5 || hard_links=no +  ln conftest.a conftest.b 2>/dev/null && hard_links=no +  AC_MSG_RESULT([$hard_links]) +  if test "$hard_links" = no; then +    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) +    need_locks=warn +  fi +else +  need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then +  lt_cv_objdir=.libs +else +  # MS-DOS does not allow filenames that begin with a dot. +  lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], +         [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", +  [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || +   test -n "$_LT_TAGVAR(runpath_var, $1)" || +   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + +  # We can hardcode non-existent directories. +  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && +     # If the only mechanism to avoid hardcoding is shlibpath_var, we +     # have to relink, otherwise we might link with an installed library +     # when we should be linking with a yet-to-be-installed one +     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && +     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then +    # Linking always hardcodes the temporary library directory. +    _LT_TAGVAR(hardcode_action, $1)=relink +  else +    # We can link without hardcoding, and we can hardcode nonexisting dirs. +    _LT_TAGVAR(hardcode_action, $1)=immediate +  fi +else +  # We cannot hardcode anything, or else we can only hardcode existing +  # directories. +  _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || +   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then +  # Fast installation is not supported +  enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || +     test "$enable_shared" = no; then +  # Fast installation is not necessary +  enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], +    [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then +  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" +  test -z "$striplib" && striplib="$STRIP --strip-unneeded" +  AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough +  case $host_os in +  darwin*) +    if test -n "$STRIP" ; then +      striplib="$STRIP -x" +      old_striplib="$STRIP -S" +      AC_MSG_RESULT([yes]) +    else +      AC_MSG_RESULT([no]) +    fi +    ;; +  *) +    AC_MSG_RESULT([no]) +    ;; +  esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], +	[], [ +if test "$GCC" = yes; then +  case $host_os in +    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; +    *) lt_awk_arg="/^libraries:/" ;; +  esac +  case $host_os in +    mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; +    *) lt_sed_strip_eq="s,=/,/,g" ;; +  esac +  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` +  case $lt_search_path_spec in +  *\;*) +    # if the path contains ";" then we assume it to be the separator +    # otherwise default to the standard path separator (i.e. ":") - it is +    # assumed that no part of a normal pathname contains ";" but that should +    # okay in the real world where ";" in dirpaths is itself problematic. +    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` +    ;; +  *) +    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` +    ;; +  esac +  # Ok, now we have the path, separated by spaces, we can step through it +  # and add multilib dir if necessary. +  lt_tmp_lt_search_path_spec= +  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` +  for lt_sys_path in $lt_search_path_spec; do +    if test -d "$lt_sys_path/$lt_multi_os_dir"; then +      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" +    else +      test -d "$lt_sys_path" && \ +	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" +    fi +  done +  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { +  lt_foo=""; +  lt_count=0; +  for (lt_i = NF; lt_i > 0; lt_i--) { +    if ($lt_i != "" && $lt_i != ".") { +      if ($lt_i == "..") { +        lt_count++; +      } else { +        if (lt_count == 0) { +          lt_foo="/" $lt_i lt_foo; +        } else { +          lt_count--; +        } +      } +    } +  } +  if (lt_foo != "") { lt_freq[[lt_foo]]++; } +  if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` +  # AWK program above erroneously prepends '/' to C:/dos/paths +  # for these hosts. +  case $host_os in +    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ +      $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; +  esac +  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else +  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) +  version_type=linux +  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' +  shlibpath_var=LIBPATH + +  # AIX 3 has no versioning support, so we append a major version to the name. +  soname_spec='${libname}${release}${shared_ext}$major' +  ;; + +aix[[4-9]]*) +  version_type=linux +  need_lib_prefix=no +  need_version=no +  hardcode_into_libs=yes +  if test "$host_cpu" = ia64; then +    # AIX 5 supports IA64 +    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' +    shlibpath_var=LD_LIBRARY_PATH +  else +    # With GCC up to 2.95.x, collect2 would create an import file +    # for dependence libraries.  The import file would start with +    # the line `#! .'.  This would cause the generated library to +    # depend on `.', always an invalid library.  This was fixed in +    # development snapshots of GCC prior to 3.0. +    case $host_os in +      aix4 | aix4.[[01]] | aix4.[[01]].*) +      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' +	   echo ' yes ' +	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then +	: +      else +	can_build_shared=no +      fi +      ;; +    esac +    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct +    # soname into executable. Probably we can add versioning support to +    # collect2, so additional links can be useful in future. +    if test "$aix_use_runtimelinking" = yes; then +      # If using run time linking (on AIX 4.2 or later) use lib<name>.so +      # instead of lib<name>.a to let people know that these are not +      # typical AIX shared libraries. +      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +    else +      # We preserve .a as extension for shared libraries through AIX4.2 +      # and later when we are not doing run time linking. +      library_names_spec='${libname}${release}.a $libname.a' +      soname_spec='${libname}${release}${shared_ext}$major' +    fi +    shlibpath_var=LIBPATH +  fi +  ;; + +amigaos*) +  case $host_cpu in +  powerpc) +    # Since July 2007 AmigaOS4 officially supports .so libraries. +    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +    ;; +  m68k) +    library_names_spec='$libname.ixlibrary $libname.a' +    # Create ${libname}_ixlibrary.a entries in /sys/libs. +    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' +    ;; +  esac +  ;; + +beos*) +  library_names_spec='${libname}${shared_ext}' +  dynamic_linker="$host_os ld.so" +  shlibpath_var=LIBRARY_PATH +  ;; + +bsdi[[45]]*) +  version_type=linux +  need_version=no +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +  soname_spec='${libname}${release}${shared_ext}$major' +  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' +  shlibpath_var=LD_LIBRARY_PATH +  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" +  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" +  # the default ld.so.conf also contains /usr/contrib/lib and +  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow +  # libtool to hard-code these into programs +  ;; + +cygwin* | mingw* | pw32* | cegcc*) +  version_type=windows +  shrext_cmds=".dll" +  need_version=no +  need_lib_prefix=no + +  case $GCC,$cc_basename in +  yes,*) +    # gcc +    library_names_spec='$libname.dll.a' +    # DLL is installed to $(libdir)/../bin by postinstall_cmds +    postinstall_cmds='base_file=`basename \${file}`~ +      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ +      dldir=$destdir/`dirname \$dlpath`~ +      test -d \$dldir || mkdir -p \$dldir~ +      $install_prog $dir/$dlname \$dldir/$dlname~ +      chmod a+x \$dldir/$dlname~ +      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then +        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; +      fi' +    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ +      dlpath=$dir/\$dldll~ +       $RM \$dlpath' +    shlibpath_overrides_runpath=yes + +    case $host_os in +    cygwin*) +      # Cygwin DLLs use 'cyg' prefix rather than 'lib' +      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' +m4_if([$1], [],[ +      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) +      ;; +    mingw* | cegcc*) +      # MinGW DLLs use traditional 'lib' prefix +      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' +      ;; +    pw32*) +      # pw32 DLLs use 'pw' prefix rather than 'lib' +      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' +      ;; +    esac +    dynamic_linker='Win32 ld.exe' +    ;; + +  *,cl*) +    # Native MSVC +    libname_spec='$name' +    soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' +    library_names_spec='${libname}.dll.lib' + +    case $build_os in +    mingw*) +      sys_lib_search_path_spec= +      lt_save_ifs=$IFS +      IFS=';' +      for lt_path in $LIB +      do +        IFS=$lt_save_ifs +        # Let DOS variable expansion print the short 8.3 style file name. +        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` +        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" +      done +      IFS=$lt_save_ifs +      # Convert to MSYS style. +      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` +      ;; +    cygwin*) +      # Convert to unix form, then to dos form, then back to unix form +      # but this time dos style (no spaces!) so that the unix form looks +      # like /cygdrive/c/PROGRA~1:/cygdr... +      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` +      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` +      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` +      ;; +    *) +      sys_lib_search_path_spec="$LIB" +      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then +        # It is most probably a Windows format PATH. +        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` +      else +        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` +      fi +      # FIXME: find the short name or the path components, as spaces are +      # common. (e.g. "Program Files" -> "PROGRA~1") +      ;; +    esac + +    # DLL is installed to $(libdir)/../bin by postinstall_cmds +    postinstall_cmds='base_file=`basename \${file}`~ +      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ +      dldir=$destdir/`dirname \$dlpath`~ +      test -d \$dldir || mkdir -p \$dldir~ +      $install_prog $dir/$dlname \$dldir/$dlname' +    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ +      dlpath=$dir/\$dldll~ +       $RM \$dlpath' +    shlibpath_overrides_runpath=yes +    dynamic_linker='Win32 link.exe' +    ;; + +  *) +    # Assume MSVC wrapper +    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' +    dynamic_linker='Win32 ld.exe' +    ;; +  esac +  # FIXME: first we should search . and the directory the executable is in +  shlibpath_var=PATH +  ;; + +darwin* | rhapsody*) +  dynamic_linker="$host_os dyld" +  version_type=darwin +  need_lib_prefix=no +  need_version=no +  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' +  soname_spec='${libname}${release}${major}$shared_ext' +  shlibpath_overrides_runpath=yes +  shlibpath_var=DYLD_LIBRARY_PATH +  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ +  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) +  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' +  ;; + +dgux*) +  version_type=linux +  need_lib_prefix=no +  need_version=no +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' +  soname_spec='${libname}${release}${shared_ext}$major' +  shlibpath_var=LD_LIBRARY_PATH +  ;; + +freebsd1*) +  dynamic_linker=no +  ;; + +freebsd* | dragonfly*) +  # DragonFly does not have aout.  When/if they implement a new +  # versioning mechanism, adjust this. +  if test -x /usr/bin/objformat; then +    objformat=`/usr/bin/objformat` +  else +    case $host_os in +    freebsd[[123]]*) objformat=aout ;; +    *) objformat=elf ;; +    esac +  fi +  version_type=freebsd-$objformat +  case $version_type in +    freebsd-elf*) +      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' +      need_version=no +      need_lib_prefix=no +      ;; +    freebsd-*) +      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' +      need_version=yes +      ;; +  esac +  shlibpath_var=LD_LIBRARY_PATH +  case $host_os in +  freebsd2*) +    shlibpath_overrides_runpath=yes +    ;; +  freebsd3.[[01]]* | freebsdelf3.[[01]]*) +    shlibpath_overrides_runpath=yes +    hardcode_into_libs=yes +    ;; +  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ +  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) +    shlibpath_overrides_runpath=no +    hardcode_into_libs=yes +    ;; +  *) # from 4.6 on, and DragonFly +    shlibpath_overrides_runpath=yes +    hardcode_into_libs=yes +    ;; +  esac +  ;; + +gnu*) +  version_type=linux +  need_lib_prefix=no +  need_version=no +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' +  soname_spec='${libname}${release}${shared_ext}$major' +  shlibpath_var=LD_LIBRARY_PATH +  hardcode_into_libs=yes +  ;; + +haiku*) +  version_type=linux +  need_lib_prefix=no +  need_version=no +  dynamic_linker="$host_os runtime_loader" +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' +  soname_spec='${libname}${release}${shared_ext}$major' +  shlibpath_var=LIBRARY_PATH +  shlibpath_overrides_runpath=yes +  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' +  hardcode_into_libs=yes +  ;; + +hpux9* | hpux10* | hpux11*) +  # Give a soname corresponding to the major version so that dld.sl refuses to +  # link against other versions. +  version_type=sunos +  need_lib_prefix=no +  need_version=no +  case $host_cpu in +  ia64*) +    shrext_cmds='.so' +    hardcode_into_libs=yes +    dynamic_linker="$host_os dld.so" +    shlibpath_var=LD_LIBRARY_PATH +    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +    soname_spec='${libname}${release}${shared_ext}$major' +    if test "X$HPUX_IA64_MODE" = X32; then +      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" +    else +      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" +    fi +    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec +    ;; +  hppa*64*) +    shrext_cmds='.sl' +    hardcode_into_libs=yes +    dynamic_linker="$host_os dld.sl" +    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH +    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +    soname_spec='${libname}${release}${shared_ext}$major' +    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" +    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec +    ;; +  *) +    shrext_cmds='.sl' +    dynamic_linker="$host_os dld.sl" +    shlibpath_var=SHLIB_PATH +    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +    soname_spec='${libname}${release}${shared_ext}$major' +    ;; +  esac +  # HP-UX runs *really* slowly unless shared libraries are mode 555, ... +  postinstall_cmds='chmod 555 $lib' +  # or fails outright, so override atomically: +  install_override_mode=555 +  ;; + +interix[[3-9]]*) +  version_type=linux +  need_lib_prefix=no +  need_version=no +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' +  soname_spec='${libname}${release}${shared_ext}$major' +  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' +  shlibpath_var=LD_LIBRARY_PATH +  shlibpath_overrides_runpath=no +  hardcode_into_libs=yes +  ;; + +irix5* | irix6* | nonstopux*) +  case $host_os in +    nonstopux*) version_type=nonstopux ;; +    *) +	if test "$lt_cv_prog_gnu_ld" = yes; then +		version_type=linux +	else +		version_type=irix +	fi ;; +  esac +  need_lib_prefix=no +  need_version=no +  soname_spec='${libname}${release}${shared_ext}$major' +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' +  case $host_os in +  irix5* | nonstopux*) +    libsuff= shlibsuff= +    ;; +  *) +    case $LD in # libtool.m4 will add one of these switches to LD +    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") +      libsuff= shlibsuff= libmagic=32-bit;; +    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") +      libsuff=32 shlibsuff=N32 libmagic=N32;; +    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") +      libsuff=64 shlibsuff=64 libmagic=64-bit;; +    *) libsuff= shlibsuff= libmagic=never-match;; +    esac +    ;; +  esac +  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH +  shlibpath_overrides_runpath=no +  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" +  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" +  hardcode_into_libs=yes +  ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) +  dynamic_linker=no +  ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) +  version_type=linux +  need_lib_prefix=no +  need_version=no +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +  soname_spec='${libname}${release}${shared_ext}$major' +  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' +  shlibpath_var=LD_LIBRARY_PATH +  shlibpath_overrides_runpath=no + +  # Some binutils ld are patched to set DT_RUNPATH +  AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], +    [lt_cv_shlibpath_overrides_runpath=no +    save_LDFLAGS=$LDFLAGS +    save_libdir=$libdir +    eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ +	 LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" +    AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], +      [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], +	 [lt_cv_shlibpath_overrides_runpath=yes])]) +    LDFLAGS=$save_LDFLAGS +    libdir=$save_libdir +    ]) +  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + +  # This implies no fast_install, which is unacceptable. +  # Some rework will be needed to allow for fast_install +  # before this can be enabled. +  hardcode_into_libs=yes + +  # Append ld.so.conf contents to the search path +  if test -f /etc/ld.so.conf; then +    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" +  fi + +  # We used to test for /lib/ld.so.1 and disable shared libraries on +  # powerpc, because MkLinux only supported shared libraries with the +  # GNU dynamic linker.  Since this was broken with cross compilers, +  # most powerpc-linux boxes support dynamic linking these days and +  # people can always --disable-shared, the test was removed, and we +  # assume the GNU/Linux dynamic linker is in use. +  dynamic_linker='GNU/Linux ld.so' +  ;; + +netbsd*) +  version_type=sunos +  need_lib_prefix=no +  need_version=no +  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' +    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' +    dynamic_linker='NetBSD (a.out) ld.so' +  else +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' +    soname_spec='${libname}${release}${shared_ext}$major' +    dynamic_linker='NetBSD ld.elf_so' +  fi +  shlibpath_var=LD_LIBRARY_PATH +  shlibpath_overrides_runpath=yes +  hardcode_into_libs=yes +  ;; + +newsos6) +  version_type=linux +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +  shlibpath_var=LD_LIBRARY_PATH +  shlibpath_overrides_runpath=yes +  ;; + +*nto* | *qnx*) +  version_type=qnx +  need_lib_prefix=no +  need_version=no +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +  soname_spec='${libname}${release}${shared_ext}$major' +  shlibpath_var=LD_LIBRARY_PATH +  shlibpath_overrides_runpath=no +  hardcode_into_libs=yes +  dynamic_linker='ldqnx.so' +  ;; + +openbsd*) +  version_type=sunos +  sys_lib_dlsearch_path_spec="/usr/lib" +  need_lib_prefix=no +  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. +  case $host_os in +    openbsd3.3 | openbsd3.3.*)	need_version=yes ;; +    *)				need_version=no  ;; +  esac +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' +  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' +  shlibpath_var=LD_LIBRARY_PATH +  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then +    case $host_os in +      openbsd2.[[89]] | openbsd2.[[89]].*) +	shlibpath_overrides_runpath=no +	;; +      *) +	shlibpath_overrides_runpath=yes +	;; +      esac +  else +    shlibpath_overrides_runpath=yes +  fi +  ;; + +os2*) +  libname_spec='$name' +  shrext_cmds=".dll" +  need_lib_prefix=no +  library_names_spec='$libname${shared_ext} $libname.a' +  dynamic_linker='OS/2 ld.exe' +  shlibpath_var=LIBPATH +  ;; + +osf3* | osf4* | osf5*) +  version_type=osf +  need_lib_prefix=no +  need_version=no +  soname_spec='${libname}${release}${shared_ext}$major' +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +  shlibpath_var=LD_LIBRARY_PATH +  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" +  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" +  ;; + +rdos*) +  dynamic_linker=no +  ;; + +solaris*) +  version_type=linux +  need_lib_prefix=no +  need_version=no +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +  soname_spec='${libname}${release}${shared_ext}$major' +  shlibpath_var=LD_LIBRARY_PATH +  shlibpath_overrides_runpath=yes +  hardcode_into_libs=yes +  # ldd complains unless libraries are executable +  postinstall_cmds='chmod +x $lib' +  ;; + +sunos4*) +  version_type=sunos +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' +  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' +  shlibpath_var=LD_LIBRARY_PATH +  shlibpath_overrides_runpath=yes +  if test "$with_gnu_ld" = yes; then +    need_lib_prefix=no +  fi +  need_version=yes +  ;; + +sysv4 | sysv4.3*) +  version_type=linux +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +  soname_spec='${libname}${release}${shared_ext}$major' +  shlibpath_var=LD_LIBRARY_PATH +  case $host_vendor in +    sni) +      shlibpath_overrides_runpath=no +      need_lib_prefix=no +      runpath_var=LD_RUN_PATH +      ;; +    siemens) +      need_lib_prefix=no +      ;; +    motorola) +      need_lib_prefix=no +      need_version=no +      shlibpath_overrides_runpath=no +      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' +      ;; +  esac +  ;; + +sysv4*MP*) +  if test -d /usr/nec ;then +    version_type=linux +    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' +    soname_spec='$libname${shared_ext}.$major' +    shlibpath_var=LD_LIBRARY_PATH +  fi +  ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) +  version_type=freebsd-elf +  need_lib_prefix=no +  need_version=no +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' +  soname_spec='${libname}${release}${shared_ext}$major' +  shlibpath_var=LD_LIBRARY_PATH +  shlibpath_overrides_runpath=yes +  hardcode_into_libs=yes +  if test "$with_gnu_ld" = yes; then +    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' +  else +    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' +    case $host_os in +      sco3.2v5*) +        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" +	;; +    esac +  fi +  sys_lib_dlsearch_path_spec='/usr/lib' +  ;; + +tpf*) +  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux. +  version_type=linux +  need_lib_prefix=no +  need_version=no +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +  shlibpath_var=LD_LIBRARY_PATH +  shlibpath_overrides_runpath=no +  hardcode_into_libs=yes +  ;; + +uts4*) +  version_type=linux +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +  soname_spec='${libname}${release}${shared_ext}$major' +  shlibpath_var=LD_LIBRARY_PATH +  ;; + +*) +  dynamic_linker=no +  ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then +  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then +  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then +  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], +    [Variables whose values should be saved in libtool wrapper scripts and +    restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], +    [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], +    [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], +    [[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]]) +_LT_DECL([], [soname_spec], [1], +    [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], +    [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], +    [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], +    [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], +    [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], +    [[As "finish_cmds", except a single script fragment to be evaled but +    not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], +    [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], +    [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], +    [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] |  ?:[\\/]*]) +  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. +  ;; +*) +  lt_save_MAGIC_CMD="$MAGIC_CMD" +  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word.  This closes a longstanding sh security hole. +  ac_dummy="m4_if([$2], , $PATH, [$2])" +  for ac_dir in $ac_dummy; do +    IFS="$lt_save_ifs" +    test -z "$ac_dir" && ac_dir=. +    if test -f $ac_dir/$1; then +      lt_cv_path_MAGIC_CMD="$ac_dir/$1" +      if test -n "$file_magic_test_file"; then +	case $deplibs_check_method in +	"file_magic "*) +	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` +	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | +	    $EGREP "$file_magic_regex" > /dev/null; then +	    : +	  else +	    cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such.  This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem.  Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF +	  fi ;; +	esac +      fi +      break +    fi +  done +  IFS="$lt_save_ifs" +  MAGIC_CMD="$lt_save_MAGIC_CMD" +  ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then +  AC_MSG_RESULT($MAGIC_CMD) +else +  AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], +	 [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then +  if test -n "$ac_tool_prefix"; then +    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) +  else +    MAGIC_CMD=: +  fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], +    [AS_HELP_STRING([--with-gnu-ld], +	[assume the C compiler uses GNU ld @<:@default=no@:>@])], +    [test "$withval" = no || with_gnu_ld=yes], +    [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then +  # Check if gcc -print-prog-name=ld gives a path. +  AC_MSG_CHECKING([for ld used by $CC]) +  case $host in +  *-*-mingw*) +    # gcc leaves a trailing carriage return which upsets mingw +    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; +  *) +    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; +  esac +  case $ac_prog in +    # Accept absolute paths. +    [[\\/]]* | ?:[[\\/]]*) +      re_direlt='/[[^/]][[^/]]*/\.\./' +      # Canonicalize the pathname of ld +      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` +      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do +	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` +      done +      test -z "$LD" && LD="$ac_prog" +      ;; +  "") +    # If it fails, then pretend we aren't using GCC. +    ac_prog=ld +    ;; +  *) +    # If it is relative, then search for the first ld in PATH. +    with_gnu_ld=unknown +    ;; +  esac +elif test "$with_gnu_ld" = yes; then +  AC_MSG_CHECKING([for GNU ld]) +else +  AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then +  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +  for ac_dir in $PATH; do +    IFS="$lt_save_ifs" +    test -z "$ac_dir" && ac_dir=. +    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then +      lt_cv_path_LD="$ac_dir/$ac_prog" +      # Check to see if the program is GNU ld.  I'd rather use --version, +      # but apparently some variants of GNU ld only accept -v. +      # Break only if it was the GNU/non-GNU ld that we prefer. +      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in +      *GNU* | *'with BFD'*) +	test "$with_gnu_ld" != no && break +	;; +      *) +	test "$with_gnu_ld" != yes && break +	;; +      esac +    fi +  done +  IFS="$lt_save_ifs" +else +  lt_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$lt_cv_path_LD" +if test -n "$LD"; then +  AC_MSG_RESULT($LD) +else +  AC_MSG_RESULT(no) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +_LT_PATH_LD_GNU +AC_SUBST([LD]) + +_LT_TAGDECL([], [LD], [1], [The linker used to build libraries]) +])# LT_PATH_LD + +# Old names: +AU_ALIAS([AM_PROG_LD], [LT_PATH_LD]) +AU_ALIAS([AC_PROG_LD], [LT_PATH_LD]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_LD], []) +dnl AC_DEFUN([AC_PROG_LD], []) + + +# _LT_PATH_LD_GNU +#- -------------- +m4_defun([_LT_PATH_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, +[# I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 </dev/null` in +*GNU* | *'with BFD'*) +  lt_cv_prog_gnu_ld=yes +  ;; +*) +  lt_cv_prog_gnu_ld=no +  ;; +esac]) +with_gnu_ld=$lt_cv_prog_gnu_ld +])# _LT_PATH_LD_GNU + + +# _LT_CMD_RELOAD +# -------------- +# find reload flag for linker +#   -- PORTME Some linkers may need a different reload flag. +m4_defun([_LT_CMD_RELOAD], +[AC_CACHE_CHECK([for $LD option to reload object files], +  lt_cv_ld_reload_flag, +  [lt_cv_ld_reload_flag='-r']) +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in +  cygwin* | mingw* | pw32* | cegcc*) +    if test "$GCC" != yes; then +      reload_cmds=false +    fi +    ;; +  darwin*) +    if test "$GCC" = yes; then +      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' +    else +      reload_cmds='$LD$reload_flag -o $output$reload_objs' +    fi +    ;; +esac +_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl +_LT_TAGDECL([], [reload_cmds], [2])dnl +])# _LT_CMD_RELOAD + + +# _LT_CHECK_MAGIC_METHOD +# ---------------------- +# how to check for library dependencies +#  -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_MAGIC_METHOD], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +AC_CACHE_CHECK([how to recognize dependent libraries], +lt_cv_deplibs_check_method, +[lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[[4-9]]*) +  lt_cv_deplibs_check_method=pass_all +  ;; + +beos*) +  lt_cv_deplibs_check_method=pass_all +  ;; + +bsdi[[45]]*) +  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' +  lt_cv_file_magic_cmd='/usr/bin/file -L' +  lt_cv_file_magic_test_file=/shlib/libc.so +  ;; + +cygwin*) +  # func_win32_libid is a shell function defined in ltmain.sh +  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' +  lt_cv_file_magic_cmd='func_win32_libid' +  ;; + +mingw* | pw32*) +  # Base MSYS/MinGW do not provide the 'file' command needed by +  # func_win32_libid shell function, so use a weaker test based on 'objdump', +  # unless we find 'file', for example because we are cross-compiling. +  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. +  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then +    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' +    lt_cv_file_magic_cmd='func_win32_libid' +  else +    # Keep this pattern in sync with the one in func_win32_libid. +    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' +    lt_cv_file_magic_cmd='$OBJDUMP -f' +  fi +  ;; + +cegcc*) +  # use the weaker test based on 'objdump'. See mingw*. +  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' +  lt_cv_file_magic_cmd='$OBJDUMP -f' +  ;; + +darwin* | rhapsody*) +  lt_cv_deplibs_check_method=pass_all +  ;; + +freebsd* | dragonfly*) +  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then +    case $host_cpu in +    i*86 ) +      # Not sure whether the presence of OpenBSD here was a mistake. +      # Let's accept both of them until this is cleared up. +      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' +      lt_cv_file_magic_cmd=/usr/bin/file +      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` +      ;; +    esac +  else +    lt_cv_deplibs_check_method=pass_all +  fi +  ;; + +gnu*) +  lt_cv_deplibs_check_method=pass_all +  ;; + +haiku*) +  lt_cv_deplibs_check_method=pass_all +  ;; + +hpux10.20* | hpux11*) +  lt_cv_file_magic_cmd=/usr/bin/file +  case $host_cpu in +  ia64*) +    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' +    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so +    ;; +  hppa*64*) +    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] +    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl +    ;; +  *) +    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' +    lt_cv_file_magic_test_file=/usr/lib/libc.sl +    ;; +  esac +  ;; + +interix[[3-9]]*) +  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here +  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' +  ;; + +irix5* | irix6* | nonstopux*) +  case $LD in +  *-32|*"-32 ") libmagic=32-bit;; +  *-n32|*"-n32 ") libmagic=N32;; +  *-64|*"-64 ") libmagic=64-bit;; +  *) libmagic=never-match;; +  esac +  lt_cv_deplibs_check_method=pass_all +  ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) +  lt_cv_deplibs_check_method=pass_all +  ;; + +netbsd*) +  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then +    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' +  else +    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' +  fi +  ;; + +newos6*) +  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' +  lt_cv_file_magic_cmd=/usr/bin/file +  lt_cv_file_magic_test_file=/usr/lib/libnls.so +  ;; + +*nto* | *qnx*) +  lt_cv_deplibs_check_method=pass_all +  ;; + +openbsd*) +  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then +    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' +  else +    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' +  fi +  ;; + +osf3* | osf4* | osf5*) +  lt_cv_deplibs_check_method=pass_all +  ;; + +rdos*) +  lt_cv_deplibs_check_method=pass_all +  ;; + +solaris*) +  lt_cv_deplibs_check_method=pass_all +  ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) +  lt_cv_deplibs_check_method=pass_all +  ;; + +sysv4 | sysv4.3*) +  case $host_vendor in +  motorola) +    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' +    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` +    ;; +  ncr) +    lt_cv_deplibs_check_method=pass_all +    ;; +  sequent) +    lt_cv_file_magic_cmd='/bin/file' +    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' +    ;; +  sni) +    lt_cv_file_magic_cmd='/bin/file' +    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" +    lt_cv_file_magic_test_file=/lib/libc.so +    ;; +  siemens) +    lt_cv_deplibs_check_method=pass_all +    ;; +  pc) +    lt_cv_deplibs_check_method=pass_all +    ;; +  esac +  ;; + +tpf*) +  lt_cv_deplibs_check_method=pass_all +  ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then +  case $host_os in +  mingw* | pw32*) +    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then +      want_nocaseglob=yes +    else +      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` +    fi +    ;; +  esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], +    [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], +    [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], +    [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], +    [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then +  # Let the user override the test. +  lt_cv_path_NM="$NM" +else +  lt_nm_to_check="${ac_tool_prefix}nm" +  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then +    lt_nm_to_check="$lt_nm_to_check nm" +  fi +  for lt_tmp_nm in $lt_nm_to_check; do +    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do +      IFS="$lt_save_ifs" +      test -z "$ac_dir" && ac_dir=. +      tmp_nm="$ac_dir/$lt_tmp_nm" +      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then +	# Check to see if the nm accepts a BSD-compat flag. +	# Adding the `sed 1q' prevents false positives on HP-UX, which says: +	#   nm: unknown option "B" ignored +	# Tru64's nm complains that /dev/null is an invalid object file +	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in +	*/dev/null* | *'Invalid file or object type'*) +	  lt_cv_path_NM="$tmp_nm -B" +	  break +	  ;; +	*) +	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in +	  */dev/null*) +	    lt_cv_path_NM="$tmp_nm -p" +	    break +	    ;; +	  *) +	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but +	    continue # so that we can try to find one that supports BSD flags +	    ;; +	  esac +	  ;; +	esac +      fi +    done +    IFS="$lt_save_ifs" +  done +  : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then +  NM="$lt_cv_path_NM" +else +  # Didn't find any BSD compatible name lister, look for dumpbin. +  if test -n "$DUMPBIN"; then : +    # Let the user override the test. +  else +    AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) +    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in +    *COFF*) +      DUMPBIN="$DUMPBIN -symbols" +      ;; +    *) +      DUMPBIN=: +      ;; +    esac +  fi +  AC_SUBST([DUMPBIN]) +  if test "$DUMPBIN" != ":"; then +    NM="$DUMPBIN" +  fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], +  [lt_cv_nm_interface="BSD nm" +  echo "int some_variable = 0;" > conftest.$ac_ext +  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) +  (eval "$ac_compile" 2>conftest.err) +  cat conftest.err >&AS_MESSAGE_LOG_FD +  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) +  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) +  cat conftest.err >&AS_MESSAGE_LOG_FD +  (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) +  cat conftest.out >&AS_MESSAGE_LOG_FD +  if $GREP 'External.*some_variable' conftest.out > /dev/null; then +    lt_cv_nm_interface="MS dumpbin" +  fi +  rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +#  -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) +  # two different shell functions defined in ltmain.sh +  # decide which to use based on capabilities of $DLLTOOL +  case `$DLLTOOL --help 2>&1` in +  *--identify-strict*) +    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib +    ;; +  *) +    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback +    ;; +  esac +  ;; +*) +  # fallback: assume linklib IS sharedlib +  lt_cv_sharedlib_from_linklib_cmd="$ECHO" +  ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], +    [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], +  [lt_cv_path_mainfest_tool=no +  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD +  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out +  cat conftest.err >&AS_MESSAGE_LOG_FD +  if $GREP 'Manifest Tool' conftest.out > /dev/null; then +    lt_cv_path_mainfest_tool=yes +  fi +  rm -f conftest*]) +if test "x$lt_cv_path_mainfest_tool" != xyes; then +  MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) +  # These system don't have libm, or don't need it +  ;; +*-ncr-sysv4.3*) +  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") +  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") +  ;; +*) +  AC_CHECK_LIB(m, cos, LIBM="-lm") +  ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then +  case $cc_basename in +  nvcc*) +    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; +  *) +    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; +  esac + +  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], +    lt_cv_prog_compiler_rtti_exceptions, +    [-fno-rtti -fno-exceptions], [], +    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], +	[Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix.  What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) +  symcode='[[BCDT]]' +  ;; +cygwin* | mingw* | pw32* | cegcc*) +  symcode='[[ABCDGISTW]]' +  ;; +hpux*) +  if test "$host_cpu" = ia64; then +    symcode='[[ABCDEGRST]]' +  fi +  ;; +irix* | nonstopux*) +  symcode='[[BCDEGRST]]' +  ;; +osf*) +  symcode='[[BCDEGQRST]]' +  ;; +solaris*) +  symcode='[[BDRT]]' +  ;; +sco3.2v5*) +  symcode='[[DT]]' +  ;; +sysv4.2uw2*) +  symcode='[[DT]]' +  ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) +  symcode='[[ABDT]]' +  ;; +sysv4) +  symcode='[[DFNSTU]]' +  ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) +  symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) +  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp +  ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + +  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. +  symxfrm="\\1 $ac_symprfx\\2 \\2" + +  # Write the raw and C identifiers. +  if test "$lt_cv_nm_interface" = "MS dumpbin"; then +    # Fake it for dumpbin and say T for any non-static function +    # and D for any global variable. +    # Also find C++ and __fastcall symbols from MSVC++, +    # which start with @ or ?. +    lt_cv_sys_global_symbol_pipe="$AWK ['"\ +"     {last_section=section; section=\$ 3};"\ +"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +"     \$ 0!~/External *\|/{next};"\ +"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +"     {if(hide[section]) next};"\ +"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +"     s[1]~/^[@?]/{print s[1], s[1]; next};"\ +"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +"     ' prfx=^$ac_symprfx]" +  else +    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" +  fi +  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + +  # Check to see that the pipe works correctly. +  pipe_works=no + +  rm -f conftest* +  cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + +  if AC_TRY_EVAL(ac_compile); then +    # Now try to grab the symbols. +    nlist=conftest.nm +    if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then +      # Try sorting and uniquifying the output. +      if sort "$nlist" | uniq > "$nlist"T; then +	mv -f "$nlist"T "$nlist" +      else +	rm -f "$nlist"T +      fi + +      # Make sure that we snagged all the symbols we need. +      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then +	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then +	  cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime +   relocations are performed -- see ld's documentation on pseudo-relocs.  */ +# define LT@&t@_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data.  */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF +	  # Now generate the symbol file. +	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + +	  cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols.  */ +LT@&t@_DLSYM_CONST struct { +  const char *name; +  void       *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ +  { "@PROGRAM@", (void *) 0 }, +_LT_EOF +	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext +	  cat <<\_LT_EOF >> conftest.$ac_ext +  {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { +  return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF +	  # Now try linking the two files. +	  mv conftest.$ac_objext conftstm.$ac_objext +	  lt_globsym_save_LIBS=$LIBS +	  lt_globsym_save_CFLAGS=$CFLAGS +	  LIBS="conftstm.$ac_objext" +	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" +	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then +	    pipe_works=yes +	  fi +	  LIBS=$lt_globsym_save_LIBS +	  CFLAGS=$lt_globsym_save_CFLAGS +	else +	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD +	fi +      else +	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD +      fi +    else +      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD +    fi +  else +    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD +    cat conftest.$ac_ext >&5 +  fi +  rm -rf conftest* conftst* + +  # Do not use the global_symbol_pipe unless it works. +  if test "$pipe_works" = yes; then +    break +  else +    lt_cv_sys_global_symbol_pipe= +  fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then +  lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then +  AC_MSG_RESULT(failed) +else +  AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then +  nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then +  nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], +    [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], +    [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], +    [lt_cv_sys_global_symbol_to_c_name_address], [1], +    [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], +    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], +    [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([], [nm_file_list_spec], [1], +    [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ +  # C++ specific cases for pic, static, wl, etc. +  if test "$GXX" = yes; then +    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + +    case $host_os in +    aix*) +      # All AIX code is PIC. +      if test "$host_cpu" = ia64; then +	# AIX 5 now supports IA64 processor +	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' +      fi +      ;; + +    amigaos*) +      case $host_cpu in +      powerpc) +            # see comment about AmigaOS4 .so support +            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' +        ;; +      m68k) +            # FIXME: we need at least 68020 code to build shared libraries, but +            # adding the `-m68020' flag to GCC prevents building anything better, +            # like `-m68040'. +            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' +        ;; +      esac +      ;; + +    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) +      # PIC is the default for these OSes. +      ;; +    mingw* | cygwin* | os2* | pw32* | cegcc*) +      # This hack is so that the source file can tell whether it is being +      # built for inclusion in a dll (and should export symbols for example). +      # Although the cygwin gcc ignores -fPIC, still need this for old-style +      # (--disable-auto-import) libraries +      m4_if([$1], [GCJ], [], +	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) +      ;; +    darwin* | rhapsody*) +      # PIC is the default on this platform +      # Common symbols not allowed in MH_DYLIB files +      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' +      ;; +    *djgpp*) +      # DJGPP does not support shared libraries at all +      _LT_TAGVAR(lt_prog_compiler_pic, $1)= +      ;; +    haiku*) +      # PIC is the default for Haiku. +      # The "-static" flag exists, but is broken. +      _LT_TAGVAR(lt_prog_compiler_static, $1)= +      ;; +    interix[[3-9]]*) +      # Interix 3.x gcc -fpic/-fPIC options generate broken code. +      # Instead, we relocate shared libraries at runtime. +      ;; +    sysv4*MP*) +      if test -d /usr/nec; then +	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic +      fi +      ;; +    hpux*) +      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit +      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag +      # sets the default TLS model and affects inlining. +      case $host_cpu in +      hppa*64*) +	;; +      *) +	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' +	;; +      esac +      ;; +    *qnx* | *nto*) +      # QNX uses GNU C++, but need to define -shared option too, otherwise +      # it will coredump. +      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' +      ;; +    *) +      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' +      ;; +    esac +  else +    case $host_os in +      aix[[4-9]]*) +	# All AIX code is PIC. +	if test "$host_cpu" = ia64; then +	  # AIX 5 now supports IA64 processor +	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' +	else +	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' +	fi +	;; +      chorus*) +	case $cc_basename in +	cxch68*) +	  # Green Hills C++ Compiler +	  # _LT_TAGVAR(lt_prog_compiler_static, $1)="--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" +	  ;; +	esac +	;; +      mingw* | cygwin* | os2* | pw32* | cegcc*) +	# This hack is so that the source file can tell whether it is being +	# built for inclusion in a dll (and should export symbols for example). +	m4_if([$1], [GCJ], [], +	  [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) +	;; +      dgux*) +	case $cc_basename in +	  ec++*) +	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' +	    ;; +	  ghcx*) +	    # Green Hills C++ Compiler +	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' +	    ;; +	  *) +	    ;; +	esac +	;; +      freebsd* | dragonfly*) +	# FreeBSD uses GNU C++ +	;; +      hpux9* | hpux10* | hpux11*) +	case $cc_basename in +	  CC*) +	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' +	    if test "$host_cpu" != ia64; then +	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' +	    fi +	    ;; +	  aCC*) +	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' +	    case $host_cpu in +	    hppa*64*|ia64*) +	      # +Z the default +	      ;; +	    *) +	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' +	      ;; +	    esac +	    ;; +	  *) +	    ;; +	esac +	;; +      interix*) +	# This is c89, which is MS Visual C++ (no shared libs) +	# Anyone wants to do a port? +	;; +      irix5* | irix6* | nonstopux*) +	case $cc_basename in +	  CC*) +	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' +	    # CC pic flag -KPIC is the default. +	    ;; +	  *) +	    ;; +	esac +	;; +      linux* | k*bsd*-gnu | kopensolaris*-gnu) +	case $cc_basename in +	  KCC*) +	    # KAI C++ Compiler +	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' +	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' +	    ;; +	  ecpc* ) +	    # old Intel C++ for x86_64 which still supported -KPIC. +	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' +	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' +	    ;; +	  icpc* ) +	    # Intel C++, used to be incompatible with GCC. +	    # ICC 10 doesn't accept -KPIC any more. +	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' +	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' +	    ;; +	  pgCC* | pgcpp*) +	    # Portland Group C++ compiler +	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' +	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' +	    ;; +	  cxx*) +	    # Compaq C++ +	    # Make sure the PIC flag is empty.  It appears that all Alpha +	    # Linux and Compaq Tru64 Unix objects are PIC. +	    _LT_TAGVAR(lt_prog_compiler_pic, $1)= +	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' +	    ;; +	  xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) +	    # IBM XL 8.0, 9.0 on PPC and BlueGene +	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' +	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' +	    ;; +	  *) +	    case `$CC -V 2>&1 | sed 5q` in +	    *Sun\ C*) +	      # Sun C++ 5.9 +	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' +	      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' +	      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' +	      ;; +	    esac +	    ;; +	esac +	;; +      lynxos*) +	;; +      m88k*) +	;; +      mvs*) +	case $cc_basename in +	  cxx*) +	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' +	    ;; +	  *) +	    ;; +	esac +	;; +      netbsd*) +	;; +      *qnx* | *nto*) +        # QNX uses GNU C++, but need to define -shared option too, otherwise +        # it will coredump. +        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' +        ;; +      osf3* | osf4* | osf5*) +	case $cc_basename in +	  KCC*) +	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' +	    ;; +	  RCC*) +	    # Rational C++ 2.4.1 +	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' +	    ;; +	  cxx*) +	    # Digital/Compaq C++ +	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +	    # Make sure the PIC flag is empty.  It appears that all Alpha +	    # Linux and Compaq Tru64 Unix objects are PIC. +	    _LT_TAGVAR(lt_prog_compiler_pic, $1)= +	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' +	    ;; +	  *) +	    ;; +	esac +	;; +      psos*) +	;; +      solaris*) +	case $cc_basename in +	  CC* | sunCC*) +	    # Sun C++ 4.2, 5.x and Centerline C++ +	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' +	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' +	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' +	    ;; +	  gcx*) +	    # Green Hills C++ Compiler +	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' +	    ;; +	  *) +	    ;; +	esac +	;; +      sunos4*) +	case $cc_basename in +	  CC*) +	    # Sun C++ 4.x +	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' +	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' +	    ;; +	  lcc*) +	    # Lucid +	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' +	    ;; +	  *) +	    ;; +	esac +	;; +      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) +	case $cc_basename in +	  CC*) +	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' +	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' +	    ;; +	esac +	;; +      tandem*) +	case $cc_basename in +	  NCC*) +	    # NonStop-UX NCC 3.20 +	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' +	    ;; +	  *) +	    ;; +	esac +	;; +      vxworks*) +	;; +      *) +	_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no +	;; +    esac +  fi +], +[ +  if test "$GCC" = yes; then +    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + +    case $host_os in +      aix*) +      # All AIX code is PIC. +      if test "$host_cpu" = ia64; then +	# AIX 5 now supports IA64 processor +	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' +      fi +      ;; + +    amigaos*) +      case $host_cpu in +      powerpc) +            # see comment about AmigaOS4 .so support +            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' +        ;; +      m68k) +            # FIXME: we need at least 68020 code to build shared libraries, but +            # adding the `-m68020' flag to GCC prevents building anything better, +            # like `-m68040'. +            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' +        ;; +      esac +      ;; + +    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) +      # PIC is the default for these OSes. +      ;; + +    mingw* | cygwin* | pw32* | os2* | cegcc*) +      # This hack is so that the source file can tell whether it is being +      # built for inclusion in a dll (and should export symbols for example). +      # Although the cygwin gcc ignores -fPIC, still need this for old-style +      # (--disable-auto-import) libraries +      m4_if([$1], [GCJ], [], +	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) +      ;; + +    darwin* | rhapsody*) +      # PIC is the default on this platform +      # Common symbols not allowed in MH_DYLIB files +      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' +      ;; + +    haiku*) +      # PIC is the default for Haiku. +      # The "-static" flag exists, but is broken. +      _LT_TAGVAR(lt_prog_compiler_static, $1)= +      ;; + +    hpux*) +      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit +      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag +      # sets the default TLS model and affects inlining. +      case $host_cpu in +      hppa*64*) +	# +Z the default +	;; +      *) +	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' +	;; +      esac +      ;; + +    interix[[3-9]]*) +      # Interix 3.x gcc -fpic/-fPIC options generate broken code. +      # Instead, we relocate shared libraries at runtime. +      ;; + +    msdosdjgpp*) +      # Just because we use GCC doesn't mean we suddenly get shared libraries +      # on systems that don't support them. +      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no +      enable_shared=no +      ;; + +    *nto* | *qnx*) +      # QNX uses GNU C++, but need to define -shared option too, otherwise +      # it will coredump. +      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' +      ;; + +    sysv4*MP*) +      if test -d /usr/nec; then +	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic +      fi +      ;; + +    *) +      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' +      ;; +    esac + +    case $cc_basename in +    nvcc*) # Cuda Compiler Driver 2.2 +      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' +      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC' +      ;; +    esac +  else +    # PORTME Check for flag to pass linker flags through the system compiler. +    case $host_os in +    aix*) +      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +      if test "$host_cpu" = ia64; then +	# AIX 5 now supports IA64 processor +	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' +      else +	_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' +      fi +      ;; + +    mingw* | cygwin* | pw32* | os2* | cegcc*) +      # This hack is so that the source file can tell whether it is being +      # built for inclusion in a dll (and should export symbols for example). +      m4_if([$1], [GCJ], [], +	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) +      ;; + +    hpux9* | hpux10* | hpux11*) +      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but +      # not for PA HP-UX. +      case $host_cpu in +      hppa*64*|ia64*) +	# +Z the default +	;; +      *) +	_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' +	;; +      esac +      # Is there a better lt_prog_compiler_static that works with the bundled CC? +      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' +      ;; + +    irix5* | irix6* | nonstopux*) +      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +      # PIC (with -KPIC) is the default. +      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' +      ;; + +    linux* | k*bsd*-gnu | kopensolaris*-gnu) +      case $cc_basename in +      # old Intel for x86_64 which still supported -KPIC. +      ecc*) +	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' +	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static' +        ;; +      # icc used to be incompatible with GCC. +      # ICC 10 doesn't accept -KPIC any more. +      icc* | ifort*) +	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' +	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static' +        ;; +      # Lahey Fortran 8.1. +      lf95*) +	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' +	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static' +	;; +      nagfor*) +	# NAG Fortran compiler +	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' +	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' +	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' +	;; +      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) +        # Portland Group compilers (*not* the Pentium gcc compiler, +	# which looks to be a dead project) +	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' +	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' +        ;; +      ccc*) +        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +        # All Alpha code is PIC. +        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' +        ;; +      xl* | bgxl* | bgf* | mpixl*) +	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene +	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' +	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' +	;; +      *) +	case `$CC -V 2>&1 | sed 5q` in +	*Sun\ F* | *Sun*Fortran*) +	  # Sun Fortran 8.3 passes all unrecognized flags to the linker +	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' +	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' +	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='' +	  ;; +	*Sun\ C*) +	  # Sun C 5.9 +	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' +	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' +	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +	  ;; +	esac +	;; +      esac +      ;; + +    newsos6) +      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' +      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' +      ;; + +    *nto* | *qnx*) +      # QNX uses GNU C++, but need to define -shared option too, otherwise +      # it will coredump. +      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' +      ;; + +    osf3* | osf4* | osf5*) +      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +      # All OSF/1 code is PIC. +      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' +      ;; + +    rdos*) +      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' +      ;; + +    solaris*) +      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' +      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' +      case $cc_basename in +      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) +	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; +      *) +	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; +      esac +      ;; + +    sunos4*) +      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' +      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' +      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' +      ;; + +    sysv4 | sysv4.2uw2* | sysv4.3*) +      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' +      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' +      ;; + +    sysv4*MP*) +      if test -d /usr/nec ;then +	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' +	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' +      fi +      ;; + +    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) +      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' +      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' +      ;; + +    unicos*) +      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' +      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no +      ;; + +    uts4*) +      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' +      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' +      ;; + +    *) +      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no +      ;; +    esac +  fi +]) +case $host_os in +  # For platforms which do not support PIC, -DPIC is meaningless: +  *djgpp*) +    _LT_TAGVAR(lt_prog_compiler_pic, $1)= +    ;; +  *) +    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" +    ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], +  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], +  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then +  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], +    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], +    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], +    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in +     "" | " "*) ;; +     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; +     esac], +    [_LT_TAGVAR(lt_prog_compiler_pic, $1)= +     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], +	[Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], +	[How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], +  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), +  $lt_tmp_static_flag, +  [], +  [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], +	[Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ +  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' +  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] +  case $host_os in +  aix[[4-9]]*) +    # If we're using GNU nm, then we don't want the "-C" option. +    # -C means demangle to AIX nm, but means don't demangle with GNU nm +    # Also, AIX nm treats weak defined symbols like other global defined +    # symbols, whereas GNU nm marks them as "W". +    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then +      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' +    else +      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' +    fi +    ;; +  pw32*) +    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" +    ;; +  cygwin* | mingw* | cegcc*) +    case $cc_basename in +    cl*) ;; +    *) +      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' +      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] +      ;; +    esac +    ;; +  *) +    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' +    ;; +  esac +], [ +  runpath_var= +  _LT_TAGVAR(allow_undefined_flag, $1)= +  _LT_TAGVAR(always_export_symbols, $1)=no +  _LT_TAGVAR(archive_cmds, $1)= +  _LT_TAGVAR(archive_expsym_cmds, $1)= +  _LT_TAGVAR(compiler_needs_object, $1)=no +  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no +  _LT_TAGVAR(export_dynamic_flag_spec, $1)= +  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' +  _LT_TAGVAR(hardcode_automatic, $1)=no +  _LT_TAGVAR(hardcode_direct, $1)=no +  _LT_TAGVAR(hardcode_direct_absolute, $1)=no +  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +  _LT_TAGVAR(hardcode_libdir_separator, $1)= +  _LT_TAGVAR(hardcode_minus_L, $1)=no +  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +  _LT_TAGVAR(inherit_rpath, $1)=no +  _LT_TAGVAR(link_all_deplibs, $1)=unknown +  _LT_TAGVAR(module_cmds, $1)= +  _LT_TAGVAR(module_expsym_cmds, $1)= +  _LT_TAGVAR(old_archive_from_new_cmds, $1)= +  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= +  _LT_TAGVAR(thread_safe_flag_spec, $1)= +  _LT_TAGVAR(whole_archive_flag_spec, $1)= +  # include_expsyms should be a list of space-separated symbols to be *always* +  # included in the symbol list +  _LT_TAGVAR(include_expsyms, $1)= +  # exclude_expsyms can be an extended regexp of symbols to exclude +  # it will be wrapped by ` (' and `)$', so one must not match beginning or +  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', +  # as well as any symbol that contains `d'. +  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] +  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out +  # platforms (ab)use it in PIC code, but their linkers get confused if +  # the symbol is explicitly referenced.  Since portable code cannot +  # rely on this symbol name, it's probably fine to never include it in +  # preloaded symbol tables. +  # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. +  extract_expsyms_cmds= + +  case $host_os in +  cygwin* | mingw* | pw32* | cegcc*) +    # FIXME: the MSVC++ port hasn't been tested in a loooong time +    # When not using gcc, we currently assume that we are using +    # Microsoft Visual C++. +    if test "$GCC" != yes; then +      with_gnu_ld=no +    fi +    ;; +  interix*) +    # we just hope/assume this is gcc and not c89 (= MSVC++) +    with_gnu_ld=yes +    ;; +  openbsd*) +    with_gnu_ld=no +    ;; +  esac + +  _LT_TAGVAR(ld_shlibs, $1)=yes + +  # On some targets, GNU ld is compatible enough with the native linker +  # that we're better off using the native interface for both. +  lt_use_gnu_ld_interface=no +  if test "$with_gnu_ld" = yes; then +    case $host_os in +      aix*) +	# The AIX port of GNU ld has always aspired to compatibility +	# with the native linker.  However, as the warning in the GNU ld +	# block says, versions before 2.19.5* couldn't really create working +	# shared libraries, regardless of the interface used. +	case `$LD -v 2>&1` in +	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;; +	  *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; +	  *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; +	  *) +	    lt_use_gnu_ld_interface=yes +	    ;; +	esac +	;; +      *) +	lt_use_gnu_ld_interface=yes +	;; +    esac +  fi + +  if test "$lt_use_gnu_ld_interface" = yes; then +    # If archive_cmds runs LD, not CC, wlarc should be empty +    wlarc='${wl}' + +    # Set some defaults for GNU ld with shared library support. These +    # are reset later if shared libraries are not supported. Putting them +    # here allows them to be overridden if necessary. +    runpath_var=LD_RUN_PATH +    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' +    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' +    # ancient GNU ld didn't support --whole-archive et. al. +    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then +      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' +    else +      _LT_TAGVAR(whole_archive_flag_spec, $1)= +    fi +    supports_anon_versioning=no +    case `$LD -v 2>&1` in +      *GNU\ gold*) supports_anon_versioning=yes ;; +      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 +      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... +      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... +      *\ 2.11.*) ;; # other 2.11 versions +      *) supports_anon_versioning=yes ;; +    esac + +    # See if GNU ld supports shared libraries. +    case $host_os in +    aix[[3-9]]*) +      # On AIX/PPC, the GNU linker is very broken +      if test "$host_cpu" != ia64; then +	_LT_TAGVAR(ld_shlibs, $1)=no +	cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support.  If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF +      fi +      ;; + +    amigaos*) +      case $host_cpu in +      powerpc) +            # see comment about AmigaOS4 .so support +            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +            _LT_TAGVAR(archive_expsym_cmds, $1)='' +        ;; +      m68k) +            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' +            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' +            _LT_TAGVAR(hardcode_minus_L, $1)=yes +        ;; +      esac +      ;; + +    beos*) +      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then +	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported +	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc +	# support --undefined.  This deserves some investigation.  FIXME +	_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +      else +	_LT_TAGVAR(ld_shlibs, $1)=no +      fi +      ;; + +    cygwin* | mingw* | pw32* | cegcc*) +      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, +      # as there is no search path for DLLs. +      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' +      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' +      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported +      _LT_TAGVAR(always_export_symbols, $1)=no +      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes +      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' +      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + +      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then +        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' +	# If the export-symbols file already is a .def file (1st line +	# is EXPORTS), use it as is; otherwise, prepend... +	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then +	  cp $export_symbols $output_objdir/$soname.def; +	else +	  echo EXPORTS > $output_objdir/$soname.def; +	  cat $export_symbols >> $output_objdir/$soname.def; +	fi~ +	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' +      else +	_LT_TAGVAR(ld_shlibs, $1)=no +      fi +      ;; + +    haiku*) +      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +      _LT_TAGVAR(link_all_deplibs, $1)=yes +      ;; + +    interix[[3-9]]*) +      _LT_TAGVAR(hardcode_direct, $1)=no +      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' +      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' +      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. +      # Instead, shared libraries are loaded at an image base (0x10000000 by +      # default) and relocated if they conflict, which is a slow very memory +      # consuming and fragmenting process.  To avoid this, we pick a random, +      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link +      # time.  Moving up from 0x10000000 also allows more sbrk(2) space. +      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' +      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' +      ;; + +    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) +      tmp_diet=no +      if test "$host_os" = linux-dietlibc; then +	case $cc_basename in +	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn) +	esac +      fi +      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ +	 && test "$tmp_diet" = no +      then +	tmp_addflag=' $pic_flag' +	tmp_sharedflag='-shared' +	case $cc_basename,$host_cpu in +        pgcc*)				# Portland Group C compiler +	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' +	  tmp_addflag=' $pic_flag' +	  ;; +	pgf77* | pgf90* | pgf95* | pgfortran*) +					# Portland Group f77 and f90 compilers +	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' +	  tmp_addflag=' $pic_flag -Mnomain' ;; +	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64 +	  tmp_addflag=' -i_dynamic' ;; +	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64 +	  tmp_addflag=' -i_dynamic -nofor_main' ;; +	ifc* | ifort*)			# Intel Fortran compiler +	  tmp_addflag=' -nofor_main' ;; +	lf95*)				# Lahey Fortran 8.1 +	  _LT_TAGVAR(whole_archive_flag_spec, $1)= +	  tmp_sharedflag='--shared' ;; +	xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) +	  tmp_sharedflag='-qmkshrobj' +	  tmp_addflag= ;; +	nvcc*)	# Cuda Compiler Driver 2.2 +	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' +	  _LT_TAGVAR(compiler_needs_object, $1)=yes +	  ;; +	esac +	case `$CC -V 2>&1 | sed 5q` in +	*Sun\ C*)			# Sun C 5.9 +	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' +	  _LT_TAGVAR(compiler_needs_object, $1)=yes +	  tmp_sharedflag='-G' ;; +	*Sun\ F*)			# Sun Fortran 8.3 +	  tmp_sharedflag='-G' ;; +	esac +	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + +        if test "x$supports_anon_versioning" = xyes; then +          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ +	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ +	    echo "local: *; };" >> $output_objdir/$libname.ver~ +	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' +        fi + +	case $cc_basename in +	xlf* | bgf* | bgxlf* | mpixlf*) +	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself +	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' +	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' +	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' +	  if test "x$supports_anon_versioning" = xyes; then +	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ +	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ +	      echo "local: *; };" >> $output_objdir/$libname.ver~ +	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' +	  fi +	  ;; +	esac +      else +        _LT_TAGVAR(ld_shlibs, $1)=no +      fi +      ;; + +    netbsd*) +      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then +	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' +	wlarc= +      else +	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' +      fi +      ;; + +    solaris*) +      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then +	_LT_TAGVAR(ld_shlibs, $1)=no +	cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems.  Therefore, libtool +*** is disabling shared libraries support.  We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer.  Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF +      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then +	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' +      else +	_LT_TAGVAR(ld_shlibs, $1)=no +      fi +      ;; + +    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) +      case `$LD -v 2>&1` in +        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) +	_LT_TAGVAR(ld_shlibs, $1)=no +	cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems.  Therefore, libtool +*** is disabling shared libraries support.  We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF +	;; +	*) +	  # For security reasons, it is highly recommended that you always +	  # use absolute paths for naming shared libraries, and exclude the +	  # DT_RUNPATH tag from executables and libraries.  But doing so +	  # requires that you compile everything twice, which is a pain. +	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then +	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' +	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' +	  else +	    _LT_TAGVAR(ld_shlibs, $1)=no +	  fi +	;; +      esac +      ;; + +    sunos4*) +      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' +      wlarc= +      _LT_TAGVAR(hardcode_direct, $1)=yes +      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +      ;; + +    *) +      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then +	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' +      else +	_LT_TAGVAR(ld_shlibs, $1)=no +      fi +      ;; +    esac + +    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then +      runpath_var= +      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +      _LT_TAGVAR(export_dynamic_flag_spec, $1)= +      _LT_TAGVAR(whole_archive_flag_spec, $1)= +    fi +  else +    # PORTME fill in a description of your system's linker (not GNU ld) +    case $host_os in +    aix3*) +      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported +      _LT_TAGVAR(always_export_symbols, $1)=yes +      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' +      # Note: this linker hardcodes the directories in LIBPATH if there +      # are no directories specified by -L. +      _LT_TAGVAR(hardcode_minus_L, $1)=yes +      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then +	# Neither direct hardcoding nor static linking is supported with a +	# broken collect2. +	_LT_TAGVAR(hardcode_direct, $1)=unsupported +      fi +      ;; + +    aix[[4-9]]*) +      if test "$host_cpu" = ia64; then +	# On IA64, the linker does run time linking by default, so we don't +	# have to do anything special. +	aix_use_runtimelinking=no +	exp_sym_flag='-Bexport' +	no_entry_flag="" +      else +	# If we're using GNU nm, then we don't want the "-C" option. +	# -C means demangle to AIX nm, but means don't demangle with GNU nm +	# Also, AIX nm treats weak defined symbols like other global +	# defined symbols, whereas GNU nm marks them as "W". +	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then +	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' +	else +	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' +	fi +	aix_use_runtimelinking=no + +	# Test if we are trying to use run time linking or normal +	# AIX style linking. If -brtl is somewhere in LDFLAGS, we +	# need to do runtime linking. +	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) +	  for ld_flag in $LDFLAGS; do +	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then +	    aix_use_runtimelinking=yes +	    break +	  fi +	  done +	  ;; +	esac + +	exp_sym_flag='-bexport' +	no_entry_flag='-bnoentry' +      fi + +      # When large executables or shared objects are built, AIX ld can +      # have problems creating the table of contents.  If linking a library +      # or program results in "error TOC overflow" add -mminimal-toc to +      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not +      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + +      _LT_TAGVAR(archive_cmds, $1)='' +      _LT_TAGVAR(hardcode_direct, $1)=yes +      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes +      _LT_TAGVAR(hardcode_libdir_separator, $1)=':' +      _LT_TAGVAR(link_all_deplibs, $1)=yes +      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + +      if test "$GCC" = yes; then +	case $host_os in aix4.[[012]]|aix4.[[012]].*) +	# We only want to do this on AIX 4.2 and lower, the check +	# below for broken collect2 doesn't work under 4.3+ +	  collect2name=`${CC} -print-prog-name=collect2` +	  if test -f "$collect2name" && +	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null +	  then +	  # We have reworked collect2 +	  : +	  else +	  # We have old collect2 +	  _LT_TAGVAR(hardcode_direct, $1)=unsupported +	  # It fails to find uninstalled libraries when the uninstalled +	  # path is not listed in the libpath.  Setting hardcode_minus_L +	  # to unsupported forces relinking +	  _LT_TAGVAR(hardcode_minus_L, $1)=yes +	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' +	  _LT_TAGVAR(hardcode_libdir_separator, $1)= +	  fi +	  ;; +	esac +	shared_flag='-shared' +	if test "$aix_use_runtimelinking" = yes; then +	  shared_flag="$shared_flag "'${wl}-G' +	fi +      else +	# not using gcc +	if test "$host_cpu" = ia64; then +	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release +	# chokes on -Wl,-G. The following line is correct: +	  shared_flag='-G' +	else +	  if test "$aix_use_runtimelinking" = yes; then +	    shared_flag='${wl}-G' +	  else +	    shared_flag='${wl}-bM:SRE' +	  fi +	fi +      fi + +      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' +      # It seems that -bexpall does not export symbols beginning with +      # underscore (_), so it is better to generate a list of symbols to export. +      _LT_TAGVAR(always_export_symbols, $1)=yes +      if test "$aix_use_runtimelinking" = yes; then +	# Warning - without using the other runtime loading flags (-brtl), +	# -berok will link without error, but may produce a broken library. +	_LT_TAGVAR(allow_undefined_flag, $1)='-berok' +        # Determine the default libpath from the value encoded in an +        # empty executable. +        _LT_SYS_MODULE_PATH_AIX([$1]) +        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" +        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" +      else +	if test "$host_cpu" = ia64; then +	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' +	  _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" +	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" +	else +	 # Determine the default libpath from the value encoded in an +	 # empty executable. +	 _LT_SYS_MODULE_PATH_AIX([$1]) +	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" +	  # Warning - without using the other run time loading flags, +	  # -berok will link without error, but may produce a broken library. +	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' +	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' +	  if test "$with_gnu_ld" = yes; then +	    # We only use this code for GNU lds that support --whole-archive. +	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' +	  else +	    # Exported symbols can be pulled into shared objects from archives +	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' +	  fi +	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes +	  # This is similar to how AIX traditionally builds its shared libraries. +	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' +	fi +      fi +      ;; + +    amigaos*) +      case $host_cpu in +      powerpc) +            # see comment about AmigaOS4 .so support +            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +            _LT_TAGVAR(archive_expsym_cmds, $1)='' +        ;; +      m68k) +            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' +            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' +            _LT_TAGVAR(hardcode_minus_L, $1)=yes +        ;; +      esac +      ;; + +    bsdi[[45]]*) +      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic +      ;; + +    cygwin* | mingw* | pw32* | cegcc*) +      # When not using gcc, we currently assume that we are using +      # Microsoft Visual C++. +      # hardcode_libdir_flag_spec is actually meaningless, as there is +      # no search path for DLLs. +      case $cc_basename in +      cl*) +	# Native MSVC +	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' +	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported +	_LT_TAGVAR(always_export_symbols, $1)=yes +	_LT_TAGVAR(file_list_spec, $1)='@' +	# Tell ltmain to make .lib files, not .a files. +	libext=lib +	# Tell ltmain to make .dll files, not .so files. +	shrext_cmds=".dll" +	# FIXME: Setting linknames here is a bad hack. +	_LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' +	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then +	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; +	  else +	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; +	  fi~ +	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ +	  linknames=' +	# The linker will not automatically build a static lib if we build a DLL. +	# _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' +	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes +	_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' +	# Don't use ranlib +	_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' +	_LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ +	  lt_tool_outputfile="@TOOL_OUTPUT@"~ +	  case $lt_outputfile in +	    *.exe|*.EXE) ;; +	    *) +	      lt_outputfile="$lt_outputfile.exe" +	      lt_tool_outputfile="$lt_tool_outputfile.exe" +	      ;; +	  esac~ +	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then +	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; +	    $RM "$lt_outputfile.manifest"; +	  fi' +	;; +      *) +	# Assume MSVC wrapper +	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' +	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported +	# Tell ltmain to make .lib files, not .a files. +	libext=lib +	# Tell ltmain to make .dll files, not .so files. +	shrext_cmds=".dll" +	# FIXME: Setting linknames here is a bad hack. +	_LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' +	# The linker will automatically build a .lib file if we build a DLL. +	_LT_TAGVAR(old_archive_from_new_cmds, $1)='true' +	# FIXME: Should let the user specify the lib program. +	_LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' +	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes +	;; +      esac +      ;; + +    darwin* | rhapsody*) +      _LT_DARWIN_LINKER_FEATURES($1) +      ;; + +    dgux*) +      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' +      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' +      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +      ;; + +    freebsd1*) +      _LT_TAGVAR(ld_shlibs, $1)=no +      ;; + +    # 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 +    # does not break anything, and helps significantly (at the cost of a little +    # extra space). +    freebsd2.2*) +      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' +      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' +      _LT_TAGVAR(hardcode_direct, $1)=yes +      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +      ;; + +    # Unfortunately, older versions of FreeBSD 2 do not have this feature. +    freebsd2*) +      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' +      _LT_TAGVAR(hardcode_direct, $1)=yes +      _LT_TAGVAR(hardcode_minus_L, $1)=yes +      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +      ;; + +    # FreeBSD 3 and greater uses gcc -shared to do shared libraries. +    freebsd* | dragonfly*) +      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' +      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' +      _LT_TAGVAR(hardcode_direct, $1)=yes +      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +      ;; + +    hpux9*) +      if test "$GCC" = yes; then +	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' +      else +	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' +      fi +      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' +      _LT_TAGVAR(hardcode_libdir_separator, $1)=: +      _LT_TAGVAR(hardcode_direct, $1)=yes + +      # hardcode_minus_L: Not really in the search PATH, +      # but as the default location of the library. +      _LT_TAGVAR(hardcode_minus_L, $1)=yes +      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' +      ;; + +    hpux10*) +      if test "$GCC" = yes && test "$with_gnu_ld" = no; then +	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +      else +	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +      fi +      if test "$with_gnu_ld" = no; then +	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' +	_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' +	_LT_TAGVAR(hardcode_libdir_separator, $1)=: +	_LT_TAGVAR(hardcode_direct, $1)=yes +	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes +	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' +	# hardcode_minus_L: Not really in the search PATH, +	# but as the default location of the library. +	_LT_TAGVAR(hardcode_minus_L, $1)=yes +      fi +      ;; + +    hpux11*) +      if test "$GCC" = yes && test "$with_gnu_ld" = no; then +	case $host_cpu in +	hppa*64*) +	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' +	  ;; +	ia64*) +	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' +	  ;; +	*) +	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +	  ;; +	esac +      else +	case $host_cpu in +	hppa*64*) +	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' +	  ;; +	ia64*) +	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' +	  ;; +	*) +	m4_if($1, [], [ +	  # Older versions of the 11.00 compiler do not understand -b yet +	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) +	  _LT_LINKER_OPTION([if $CC understands -b], +	    _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], +	    [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], +	    [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], +	  [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) +	  ;; +	esac +      fi +      if test "$with_gnu_ld" = no; then +	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' +	_LT_TAGVAR(hardcode_libdir_separator, $1)=: + +	case $host_cpu in +	hppa*64*|ia64*) +	  _LT_TAGVAR(hardcode_direct, $1)=no +	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +	  ;; +	*) +	  _LT_TAGVAR(hardcode_direct, $1)=yes +	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes +	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + +	  # hardcode_minus_L: Not really in the search PATH, +	  # but as the default location of the library. +	  _LT_TAGVAR(hardcode_minus_L, $1)=yes +	  ;; +	esac +      fi +      ;; + +    irix5* | irix6* | nonstopux*) +      if test "$GCC" = yes; then +	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' +	# Try to use the -exported_symbol ld option, if it does not +	# work, assume that -exports_file does not work either and +	# implicitly export all symbols. +	# This should be the same for all languages, so no per-tag cache variable. +	AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], +	  [lt_cv_irix_exported_symbol], +	  [save_LDFLAGS="$LDFLAGS" +	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" +	   AC_LINK_IFELSE( +	     [AC_LANG_SOURCE( +	        [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], +			      [C++], [[int foo (void) { return 0; }]], +			      [Fortran 77], [[ +      subroutine foo +      end]], +			      [Fortran], [[ +      subroutine foo +      end]])])], +	      [lt_cv_irix_exported_symbol=yes], +	      [lt_cv_irix_exported_symbol=no]) +           LDFLAGS="$save_LDFLAGS"]) +	if test "$lt_cv_irix_exported_symbol" = yes; then +          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' +	fi +      else +	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' +	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' +      fi +      _LT_TAGVAR(archive_cmds_need_lc, $1)='no' +      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' +      _LT_TAGVAR(hardcode_libdir_separator, $1)=: +      _LT_TAGVAR(inherit_rpath, $1)=yes +      _LT_TAGVAR(link_all_deplibs, $1)=yes +      ;; + +    netbsd*) +      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then +	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out +      else +	_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF +      fi +      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' +      _LT_TAGVAR(hardcode_direct, $1)=yes +      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +      ;; + +    newsos6) +      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' +      _LT_TAGVAR(hardcode_direct, $1)=yes +      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' +      _LT_TAGVAR(hardcode_libdir_separator, $1)=: +      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +      ;; + +    *nto* | *qnx*) +      ;; + +    openbsd*) +      if test -f /usr/libexec/ld.so; then +	_LT_TAGVAR(hardcode_direct, $1)=yes +	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no +	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes +	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then +	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' +	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' +	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' +	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' +	else +	  case $host_os in +	   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) +	     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' +	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' +	     ;; +	   *) +	     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' +	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' +	     ;; +	  esac +	fi +      else +	_LT_TAGVAR(ld_shlibs, $1)=no +      fi +      ;; + +    os2*) +      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' +      _LT_TAGVAR(hardcode_minus_L, $1)=yes +      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported +      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' +      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' +      ;; + +    osf3*) +      if test "$GCC" = yes; then +	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' +	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' +      else +	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' +	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' +      fi +      _LT_TAGVAR(archive_cmds_need_lc, $1)='no' +      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' +      _LT_TAGVAR(hardcode_libdir_separator, $1)=: +      ;; + +    osf4* | osf5*)	# as osf3* with the addition of -msym flag +      if test "$GCC" = yes; then +	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' +	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' +	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' +      else +	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' +	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' +	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ +	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + +	# Both c and cxx compiler support -rpath directly +	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' +      fi +      _LT_TAGVAR(archive_cmds_need_lc, $1)='no' +      _LT_TAGVAR(hardcode_libdir_separator, $1)=: +      ;; + +    solaris*) +      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' +      if test "$GCC" = yes; then +	wlarc='${wl}' +	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' +	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ +	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' +      else +	case `$CC -V 2>&1` in +	*"Compilers 5.0"*) +	  wlarc='' +	  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' +	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ +	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' +	  ;; +	*) +	  wlarc='${wl}' +	  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' +	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ +	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' +	  ;; +	esac +      fi +      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' +      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +      case $host_os in +      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; +      *) +	# The compiler driver will combine and reorder linker options, +	# but understands `-z linker_flag'.  GCC discards it without `$wl', +	# but is careful enough not to reorder. +	# Supported since Solaris 2.6 (maybe 2.5.1?) +	if test "$GCC" = yes; then +	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' +	else +	  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' +	fi +	;; +      esac +      _LT_TAGVAR(link_all_deplibs, $1)=yes +      ;; + +    sunos4*) +      if test "x$host_vendor" = xsequent; then +	# Use $CC to link under sequent, because it throws in some extra .o +	# files that make .init and .fini sections work. +	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' +      else +	_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' +      fi +      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' +      _LT_TAGVAR(hardcode_direct, $1)=yes +      _LT_TAGVAR(hardcode_minus_L, $1)=yes +      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +      ;; + +    sysv4) +      case $host_vendor in +	sni) +	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' +	  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? +	;; +	siemens) +	  ## LD is ld it makes a PLAMLIB +	  ## CC just makes a GrossModule. +	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' +	  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' +	  _LT_TAGVAR(hardcode_direct, $1)=no +        ;; +	motorola) +	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' +	  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie +	;; +      esac +      runpath_var='LD_RUN_PATH' +      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +      ;; + +    sysv4.3*) +      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' +      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' +      ;; + +    sysv4*MP*) +      if test -d /usr/nec; then +	_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' +	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no +	runpath_var=LD_RUN_PATH +	hardcode_runpath_var=yes +	_LT_TAGVAR(ld_shlibs, $1)=yes +      fi +      ;; + +    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) +      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' +      _LT_TAGVAR(archive_cmds_need_lc, $1)=no +      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +      runpath_var='LD_RUN_PATH' + +      if test "$GCC" = yes; then +	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' +	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' +      else +	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' +	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' +      fi +      ;; + +    sysv5* | sco3.2v5* | sco5v6*) +      # Note: We can NOT use -z defs as we might desire, because we do not +      # link with -lc, and that would cause any symbols used from libc to +      # always be unresolved, which means just about no library would +      # ever link correctly.  If we're not using GNU ld we use -z text +      # though, which does catch some bad symbols but isn't as heavy-handed +      # as -z defs. +      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' +      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' +      _LT_TAGVAR(archive_cmds_need_lc, $1)=no +      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' +      _LT_TAGVAR(hardcode_libdir_separator, $1)=':' +      _LT_TAGVAR(link_all_deplibs, $1)=yes +      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' +      runpath_var='LD_RUN_PATH' + +      if test "$GCC" = yes; then +	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' +	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' +      else +	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' +	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' +      fi +      ;; + +    uts4*) +      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' +      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' +      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +      ;; + +    *) +      _LT_TAGVAR(ld_shlibs, $1)=no +      ;; +    esac + +    if test x$host_vendor = xsni; then +      case $host in +      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) +	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' +	;; +      esac +    fi +  fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], +    [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) +  # Assume -lc should be added +  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + +  if test "$enable_shared" = yes && test "$GCC" = yes; then +    case $_LT_TAGVAR(archive_cmds, $1) in +    *'~'*) +      # FIXME: we may have to deal with multi-command sequences. +      ;; +    '$CC '*) +      # Test whether the compiler implicitly links with -lc since on some +      # systems, -lgcc has to come before -lc. If gcc already passes -lc +      # to ld, don't add -lc before -lgcc. +      AC_CACHE_CHECK([whether -lc should be explicitly linked in], +	[lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), +	[$RM conftest* +	echo "$lt_simple_compile_test_code" > conftest.$ac_ext + +	if AC_TRY_EVAL(ac_compile) 2>conftest.err; then +	  soname=conftest +	  lib=conftest +	  libobjs=conftest.$ac_objext +	  deplibs= +	  wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) +	  pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) +	  compiler_flags=-v +	  linker_flags=-v +	  verstring= +	  output_objdir=. +	  libname=conftest +	  lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) +	  _LT_TAGVAR(allow_undefined_flag, $1)= +	  if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) +	  then +	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no +	  else +	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes +	  fi +	  _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag +	else +	  cat conftest.err 1>&5 +	fi +	$RM conftest* +	]) +      _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) +      ;; +    esac +  fi +  ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], +    [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], +    [enable_shared_with_static_runtimes], [0], +    [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], +    [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], +    [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], +    [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], +    [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], +    [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], +    [Commands used to build a loadable module if different from building +    a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], +    [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], +    [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], +    [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], +    [Flag to hardcode $libdir into a binary during linking. +    This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], +    [[If ld is used when linking, flag to hardcode $libdir into a binary +    during linking.  This must work even if $libdir does not exist]]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], +    [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], +    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes +    DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], +    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes +    DIR into the resulting binary and the resulting library dependency is +    "absolute", i.e impossible to change by setting ${shlibpath_var} if the +    library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], +    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR +    into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], +    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +    into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], +    [Set to "yes" if building a shared library automatically hardcodes DIR +    into the library and all subsequent libraries and executables linked +    against it]) +_LT_TAGDECL([], [inherit_rpath], [0], +    [Set to yes if linker adds runtime paths of dependent libraries +    to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], +    [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], +    [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], +    [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], +    [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], +    [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], +    [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], +    [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], +    [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl    [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined.  These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then +  _LT_COMPILER_NO_RTTI($1) +  _LT_COMPILER_PIC($1) +  _LT_COMPILER_C_O($1) +  _LT_COMPILER_FILE_LOCKS($1) +  _LT_LINKER_SHLIBS($1) +  _LT_SYS_DYNAMIC_LINKER($1) +  _LT_LINKER_HARDCODE_LIBPATH($1) +  LT_SYS_DLOPEN_SELF +  _LT_CMD_STRIPLIB + +  # Report which library types will actually be built +  AC_MSG_CHECKING([if libtool supports shared libraries]) +  AC_MSG_RESULT([$can_build_shared]) + +  AC_MSG_CHECKING([whether to build shared libraries]) +  test "$can_build_shared" = "no" && enable_shared=no + +  # On AIX, shared libraries and static libraries use the same namespace, and +  # are all built from PIC. +  case $host_os in +  aix3*) +    test "$enable_shared" = yes && enable_static=no +    if test -n "$RANLIB"; then +      archive_cmds="$archive_cmds~\$RANLIB \$lib" +      postinstall_cmds='$RANLIB $lib' +    fi +    ;; + +  aix[[4-9]]*) +    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then +      test "$enable_shared" = yes && enable_static=no +    fi +    ;; +  esac +  AC_MSG_RESULT([$enable_shared]) + +  AC_MSG_CHECKING([whether to build static libraries]) +  # Make sure either enable_shared or enable_static is yes. +  test "$enable_shared" = yes || enable_static=yes +  AC_MSG_RESULT([$enable_static]) + +  _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined.  These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test "X$CXX" != "Xno" && +    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || +    (test "X$CXX" != "Xg++"))) ; then +  AC_PROG_CXXCPP +else +  _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working.  Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then +  # Code to be used in simple compile tests +  lt_simple_compile_test_code="int some_variable = 0;" + +  # Code to be used in simple link tests +  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + +  # ltmain only uses $CC for tagged configurations so make sure $CC is set. +  _LT_TAG_COMPILER + +  # save warnings/boilerplate of simple test code +  _LT_COMPILER_BOILERPLATE +  _LT_LINKER_BOILERPLATE + +  # Allow CC to be a program name with arguments. +  lt_save_CC=$CC +  lt_save_CFLAGS=$CFLAGS +  lt_save_LD=$LD +  lt_save_GCC=$GCC +  GCC=$GXX +  lt_save_with_gnu_ld=$with_gnu_ld +  lt_save_path_LD=$lt_cv_path_LD +  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then +    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx +  else +    $as_unset lt_cv_prog_gnu_ld +  fi +  if test -n "${lt_cv_path_LDCXX+set}"; then +    lt_cv_path_LD=$lt_cv_path_LDCXX +  else +    $as_unset lt_cv_path_LD +  fi +  test -z "${LDCXX+set}" || LD=$LDCXX +  CC=${CXX-"c++"} +  CFLAGS=$CXXFLAGS +  compiler=$CC +  _LT_TAGVAR(compiler, $1)=$CC +  _LT_CC_BASENAME([$compiler]) + +  if test -n "$compiler"; then +    # We don't want -fno-exception when compiling C++ code, so set the +    # no_builtin_flag separately +    if test "$GXX" = yes; then +      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' +    else +      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= +    fi + +    if test "$GXX" = yes; then +      # Set up default GNU C++ configuration + +      LT_PATH_LD + +      # Check if GNU C++ uses GNU ld as the underlying linker, since the +      # archiving commands below assume that GNU ld is being used. +      if test "$with_gnu_ld" = yes; then +        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' +        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + +        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' +        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + +        # If archive_cmds runs LD, not CC, wlarc should be empty +        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to +        #     investigate it a little bit more. (MM) +        wlarc='${wl}' + +        # ancient GNU ld didn't support --whole-archive et. al. +        if eval "`$CC -print-prog-name=ld` --help 2>&1" | +	  $GREP 'no-whole-archive' > /dev/null; then +          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' +        else +          _LT_TAGVAR(whole_archive_flag_spec, $1)= +        fi +      else +        with_gnu_ld=no +        wlarc= + +        # A generic and very simple default shared library creation +        # command for GNU C++ for the case where it uses the native +        # linker, instead of GNU ld.  If possible, this setting should +        # overridden to take advantage of the native linker features on +        # the platform it is being used on. +        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' +      fi + +      # Commands to make compiler produce verbose output that lists +      # what "hidden" libraries, object files and flags are used when +      # linking a shared library. +      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + +    else +      GXX=no +      with_gnu_ld=no +      wlarc= +    fi + +    # PORTME: fill in a description of your system's C++ link characteristics +    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +    _LT_TAGVAR(ld_shlibs, $1)=yes +    case $host_os in +      aix3*) +        # FIXME: insert proper C++ library support +        _LT_TAGVAR(ld_shlibs, $1)=no +        ;; +      aix[[4-9]]*) +        if test "$host_cpu" = ia64; then +          # On IA64, the linker does run time linking by default, so we don't +          # have to do anything special. +          aix_use_runtimelinking=no +          exp_sym_flag='-Bexport' +          no_entry_flag="" +        else +          aix_use_runtimelinking=no + +          # Test if we are trying to use run time linking or normal +          # AIX style linking. If -brtl is somewhere in LDFLAGS, we +          # need to do runtime linking. +          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) +	    for ld_flag in $LDFLAGS; do +	      case $ld_flag in +	      *-brtl*) +	        aix_use_runtimelinking=yes +	        break +	        ;; +	      esac +	    done +	    ;; +          esac + +          exp_sym_flag='-bexport' +          no_entry_flag='-bnoentry' +        fi + +        # When large executables or shared objects are built, AIX ld can +        # have problems creating the table of contents.  If linking a library +        # or program results in "error TOC overflow" add -mminimal-toc to +        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not +        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + +        _LT_TAGVAR(archive_cmds, $1)='' +        _LT_TAGVAR(hardcode_direct, $1)=yes +        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes +        _LT_TAGVAR(hardcode_libdir_separator, $1)=':' +        _LT_TAGVAR(link_all_deplibs, $1)=yes +        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + +        if test "$GXX" = yes; then +          case $host_os in aix4.[[012]]|aix4.[[012]].*) +          # We only want to do this on AIX 4.2 and lower, the check +          # below for broken collect2 doesn't work under 4.3+ +	  collect2name=`${CC} -print-prog-name=collect2` +	  if test -f "$collect2name" && +	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null +	  then +	    # We have reworked collect2 +	    : +	  else +	    # We have old collect2 +	    _LT_TAGVAR(hardcode_direct, $1)=unsupported +	    # It fails to find uninstalled libraries when the uninstalled +	    # path is not listed in the libpath.  Setting hardcode_minus_L +	    # to unsupported forces relinking +	    _LT_TAGVAR(hardcode_minus_L, $1)=yes +	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' +	    _LT_TAGVAR(hardcode_libdir_separator, $1)= +	  fi +          esac +          shared_flag='-shared' +	  if test "$aix_use_runtimelinking" = yes; then +	    shared_flag="$shared_flag "'${wl}-G' +	  fi +        else +          # not using gcc +          if test "$host_cpu" = ia64; then +	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release +	  # chokes on -Wl,-G. The following line is correct: +	  shared_flag='-G' +          else +	    if test "$aix_use_runtimelinking" = yes; then +	      shared_flag='${wl}-G' +	    else +	      shared_flag='${wl}-bM:SRE' +	    fi +          fi +        fi + +        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' +        # It seems that -bexpall does not export symbols beginning with +        # underscore (_), so it is better to generate a list of symbols to +	# export. +        _LT_TAGVAR(always_export_symbols, $1)=yes +        if test "$aix_use_runtimelinking" = yes; then +          # Warning - without using the other runtime loading flags (-brtl), +          # -berok will link without error, but may produce a broken library. +          _LT_TAGVAR(allow_undefined_flag, $1)='-berok' +          # Determine the default libpath from the value encoded in an empty +          # executable. +          _LT_SYS_MODULE_PATH_AIX([$1]) +          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + +          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" +        else +          if test "$host_cpu" = ia64; then +	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' +	    _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" +	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" +          else +	    # Determine the default libpath from the value encoded in an +	    # empty executable. +	    _LT_SYS_MODULE_PATH_AIX([$1]) +	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" +	    # Warning - without using the other run time loading flags, +	    # -berok will link without error, but may produce a broken library. +	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' +	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' +	    if test "$with_gnu_ld" = yes; then +	      # We only use this code for GNU lds that support --whole-archive. +	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' +	    else +	      # Exported symbols can be pulled into shared objects from archives +	      _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' +	    fi +	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes +	    # This is similar to how AIX traditionally builds its shared +	    # libraries. +	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' +          fi +        fi +        ;; + +      beos*) +	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then +	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported +	  # Joseph Beckenbach <jrb3@best.com> says some releases of gcc +	  # support --undefined.  This deserves some investigation.  FIXME +	  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +	else +	  _LT_TAGVAR(ld_shlibs, $1)=no +	fi +	;; + +      chorus*) +        case $cc_basename in +          *) +	  # FIXME: insert proper C++ library support +	  _LT_TAGVAR(ld_shlibs, $1)=no +	  ;; +        esac +        ;; + +      cygwin* | mingw* | pw32* | cegcc*) +	case $GXX,$cc_basename in +	,cl* | no,cl*) +	  # Native MSVC +	  # hardcode_libdir_flag_spec is actually meaningless, as there is +	  # no search path for DLLs. +	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' +	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported +	  _LT_TAGVAR(always_export_symbols, $1)=yes +	  _LT_TAGVAR(file_list_spec, $1)='@' +	  # Tell ltmain to make .lib files, not .a files. +	  libext=lib +	  # Tell ltmain to make .dll files, not .so files. +	  shrext_cmds=".dll" +	  # FIXME: Setting linknames here is a bad hack. +	  _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' +	  _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then +	      $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; +	    else +	      $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; +	    fi~ +	    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ +	    linknames=' +	  # The linker will not automatically build a static lib if we build a DLL. +	  # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' +	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes +	  # Don't use ranlib +	  _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' +	  _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ +	    lt_tool_outputfile="@TOOL_OUTPUT@"~ +	    case $lt_outputfile in +	      *.exe|*.EXE) ;; +	      *) +		lt_outputfile="$lt_outputfile.exe" +		lt_tool_outputfile="$lt_tool_outputfile.exe" +		;; +	    esac~ +	    func_to_tool_file "$lt_outputfile"~ +	    if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then +	      $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; +	      $RM "$lt_outputfile.manifest"; +	    fi' +	  ;; +	*) +	  # g++ +	  # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, +	  # as there is no search path for DLLs. +	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' +	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' +	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported +	  _LT_TAGVAR(always_export_symbols, $1)=no +	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + +	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then +	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' +	    # If the export-symbols file already is a .def file (1st line +	    # is EXPORTS), use it as is; otherwise, prepend... +	    _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then +	      cp $export_symbols $output_objdir/$soname.def; +	    else +	      echo EXPORTS > $output_objdir/$soname.def; +	      cat $export_symbols >> $output_objdir/$soname.def; +	    fi~ +	    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' +	  else +	    _LT_TAGVAR(ld_shlibs, $1)=no +	  fi +	  ;; +	esac +	;; +      darwin* | rhapsody*) +        _LT_DARWIN_LINKER_FEATURES($1) +	;; + +      dgux*) +        case $cc_basename in +          ec++*) +	    # FIXME: insert proper C++ library support +	    _LT_TAGVAR(ld_shlibs, $1)=no +	    ;; +          ghcx*) +	    # Green Hills C++ Compiler +	    # FIXME: insert proper C++ library support +	    _LT_TAGVAR(ld_shlibs, $1)=no +	    ;; +          *) +	    # FIXME: insert proper C++ library support +	    _LT_TAGVAR(ld_shlibs, $1)=no +	    ;; +        esac +        ;; + +      freebsd[[12]]*) +        # C++ shared libraries reported to be fairly broken before +	# switch to ELF +        _LT_TAGVAR(ld_shlibs, $1)=no +        ;; + +      freebsd-elf*) +        _LT_TAGVAR(archive_cmds_need_lc, $1)=no +        ;; + +      freebsd* | dragonfly*) +        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF +        # conventions +        _LT_TAGVAR(ld_shlibs, $1)=yes +        ;; + +      gnu*) +        ;; + +      haiku*) +        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +        _LT_TAGVAR(link_all_deplibs, $1)=yes +        ;; + +      hpux9*) +        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' +        _LT_TAGVAR(hardcode_libdir_separator, $1)=: +        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' +        _LT_TAGVAR(hardcode_direct, $1)=yes +        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, +				             # but as the default +				             # location of the library. + +        case $cc_basename in +          CC*) +            # FIXME: insert proper C++ library support +            _LT_TAGVAR(ld_shlibs, $1)=no +            ;; +          aCC*) +            _LT_TAGVAR(archive_cmds, $1)='$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' +            # Commands to make compiler produce verbose output that lists +            # what "hidden" libraries, object files and flags are used when +            # linking a shared library. +            # +            # There doesn't appear to be a way to prevent this compiler from +            # explicitly linking system object files so we need to strip them +            # from the output so that they don't get included in the library +            # dependencies. +            output_verbose_link_cmd='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; func_echo_all "$list"' +            ;; +          *) +            if test "$GXX" = yes; then +              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${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' +            else +              # FIXME: insert proper C++ library support +              _LT_TAGVAR(ld_shlibs, $1)=no +            fi +            ;; +        esac +        ;; + +      hpux10*|hpux11*) +        if test $with_gnu_ld = no; then +	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' +	  _LT_TAGVAR(hardcode_libdir_separator, $1)=: + +          case $host_cpu in +            hppa*64*|ia64*) +              ;; +            *) +	      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' +              ;; +          esac +        fi +        case $host_cpu in +          hppa*64*|ia64*) +            _LT_TAGVAR(hardcode_direct, $1)=no +            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +            ;; +          *) +            _LT_TAGVAR(hardcode_direct, $1)=yes +            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes +            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, +					         # but as the default +					         # location of the library. +            ;; +        esac + +        case $cc_basename in +          CC*) +	    # FIXME: insert proper C++ library support +	    _LT_TAGVAR(ld_shlibs, $1)=no +	    ;; +          aCC*) +	    case $host_cpu in +	      hppa*64*) +	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' +	        ;; +	      ia64*) +	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' +	        ;; +	      *) +	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' +	        ;; +	    esac +	    # Commands to make compiler produce verbose output that lists +	    # what "hidden" libraries, object files and flags are used when +	    # linking a shared library. +	    # +	    # There doesn't appear to be a way to prevent this compiler from +	    # explicitly linking system object files so we need to strip them +	    # from the output so that they don't get included in the library +	    # dependencies. +	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' +	    ;; +          *) +	    if test "$GXX" = yes; then +	      if test $with_gnu_ld = no; then +	        case $host_cpu in +	          hppa*64*) +	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' +	            ;; +	          ia64*) +	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' +	            ;; +	          *) +	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' +	            ;; +	        esac +	      fi +	    else +	      # FIXME: insert proper C++ library support +	      _LT_TAGVAR(ld_shlibs, $1)=no +	    fi +	    ;; +        esac +        ;; + +      interix[[3-9]]*) +	_LT_TAGVAR(hardcode_direct, $1)=no +	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no +	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' +	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' +	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. +	# Instead, shared libraries are loaded at an image base (0x10000000 by +	# default) and relocated if they conflict, which is a slow very memory +	# consuming and fragmenting process.  To avoid this, we pick a random, +	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link +	# time.  Moving up from 0x10000000 also allows more sbrk(2) space. +	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' +	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' +	;; +      irix5* | irix6*) +        case $cc_basename in +          CC*) +	    # SGI C++ +	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + +	    # Archives containing C++ object files must be created using +	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is +	    # necessary to make sure instantiated templates are included +	    # in the archive. +	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' +	    ;; +          *) +	    if test "$GXX" = yes; then +	      if test "$with_gnu_ld" = no; then +	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' +	      else +	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' +	      fi +	    fi +	    _LT_TAGVAR(link_all_deplibs, $1)=yes +	    ;; +        esac +        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' +        _LT_TAGVAR(hardcode_libdir_separator, $1)=: +        _LT_TAGVAR(inherit_rpath, $1)=yes +        ;; + +      linux* | k*bsd*-gnu | kopensolaris*-gnu) +        case $cc_basename in +          KCC*) +	    # Kuck and Associates, Inc. (KAI) C++ Compiler + +	    # KCC will only create a shared library if the output file +	    # ends with ".so" (or ".sl" for HP-UX), so rename the library +	    # to its proper name (with version) after linking. +	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' +	    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' +	    # Commands to make compiler produce verbose output that lists +	    # what "hidden" libraries, object files and flags are used when +	    # linking a shared library. +	    # +	    # There doesn't appear to be a way to prevent this compiler from +	    # explicitly linking system object files so we need to strip them +	    # from the output so that they don't get included in the library +	    # dependencies. +	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + +	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' +	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + +	    # Archives containing C++ object files must be created using +	    # "CC -Bstatic", where "CC" is the KAI C++ compiler. +	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' +	    ;; +	  icpc* | ecpc* ) +	    # Intel C++ +	    with_gnu_ld=yes +	    # version 8.0 and above of icpc choke on multiply defined symbols +	    # if we add $predep_objects and $postdep_objects, however 7.1 and +	    # earlier do not add the objects themselves. +	    case `$CC -V 2>&1` in +	      *"Version 7."*) +	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' +		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' +		;; +	      *)  # Version 8.0 or newer +	        tmp_idyn= +	        case $host_cpu in +		  ia64*) tmp_idyn=' -i_dynamic';; +		esac +	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' +		;; +	    esac +	    _LT_TAGVAR(archive_cmds_need_lc, $1)=no +	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' +	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' +	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' +	    ;; +          pgCC* | pgcpp*) +            # Portland Group C++ compiler +	    case `$CC -V` in +	    *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) +	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ +		rm -rf $tpldir~ +		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ +		compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' +	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ +		rm -rf $tpldir~ +		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ +		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ +		$RANLIB $oldlib' +	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ +		rm -rf $tpldir~ +		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ +		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' +	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ +		rm -rf $tpldir~ +		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ +		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' +	      ;; +	    *) # Version 6 and above use weak symbols +	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' +	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' +	      ;; +	    esac + +	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' +	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' +	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' +            ;; +	  cxx*) +	    # Compaq C++ +	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' +	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + +	    runpath_var=LD_RUN_PATH +	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' +	    _LT_TAGVAR(hardcode_libdir_separator, $1)=: + +	    # Commands to make compiler produce verbose output that lists +	    # what "hidden" libraries, object files and flags are used when +	    # linking a shared library. +	    # +	    # There doesn't appear to be a way to prevent this compiler from +	    # explicitly linking system object files so we need to strip them +	    # from the output so that they don't get included in the library +	    # dependencies. +	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$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; func_echo_all "X$list" | $Xsed' +	    ;; +	  xl* | mpixl* | bgxl*) +	    # IBM XL 8.0 on PPC, with GNU ld +	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' +	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' +	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +	    if test "x$supports_anon_versioning" = xyes; then +	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ +		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ +		echo "local: *; };" >> $output_objdir/$libname.ver~ +		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' +	    fi +	    ;; +	  *) +	    case `$CC -V 2>&1 | sed 5q` in +	    *Sun\ C*) +	      # Sun C++ 5.9 +	      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' +	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' +	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' +	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' +	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' +	      _LT_TAGVAR(compiler_needs_object, $1)=yes + +	      # Not sure whether something based on +	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 +	      # would be better. +	      output_verbose_link_cmd='func_echo_all' + +	      # Archives containing C++ object files must be created using +	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is +	      # necessary to make sure instantiated templates are included +	      # in the archive. +	      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' +	      ;; +	    esac +	    ;; +	esac +	;; + +      lynxos*) +        # FIXME: insert proper C++ library support +	_LT_TAGVAR(ld_shlibs, $1)=no +	;; + +      m88k*) +        # FIXME: insert proper C++ library support +        _LT_TAGVAR(ld_shlibs, $1)=no +	;; + +      mvs*) +        case $cc_basename in +          cxx*) +	    # FIXME: insert proper C++ library support +	    _LT_TAGVAR(ld_shlibs, $1)=no +	    ;; +	  *) +	    # FIXME: insert proper C++ library support +	    _LT_TAGVAR(ld_shlibs, $1)=no +	    ;; +	esac +	;; + +      netbsd*) +        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then +	  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' +	  wlarc= +	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' +	  _LT_TAGVAR(hardcode_direct, $1)=yes +	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +	fi +	# Workaround some broken pre-1.5 toolchains +	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' +	;; + +      *nto* | *qnx*) +        _LT_TAGVAR(ld_shlibs, $1)=yes +	;; + +      openbsd2*) +        # C++ shared libraries are fairly broken +	_LT_TAGVAR(ld_shlibs, $1)=no +	;; + +      openbsd*) +	if test -f /usr/libexec/ld.so; then +	  _LT_TAGVAR(hardcode_direct, $1)=yes +	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes +	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' +	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' +	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then +	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' +	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' +	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' +	  fi +	  output_verbose_link_cmd=func_echo_all +	else +	  _LT_TAGVAR(ld_shlibs, $1)=no +	fi +	;; + +      osf3* | osf4* | osf5*) +        case $cc_basename in +          KCC*) +	    # Kuck and Associates, Inc. (KAI) C++ Compiler + +	    # KCC will only create a shared library if the output file +	    # ends with ".so" (or ".sl" for HP-UX), so rename the library +	    # to its proper name (with version) after linking. +	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + +	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' +	    _LT_TAGVAR(hardcode_libdir_separator, $1)=: + +	    # Archives containing C++ object files must be created using +	    # the KAI C++ compiler. +	    case $host in +	      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; +	      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; +	    esac +	    ;; +          RCC*) +	    # Rational C++ 2.4.1 +	    # FIXME: insert proper C++ library support +	    _LT_TAGVAR(ld_shlibs, $1)=no +	    ;; +          cxx*) +	    case $host in +	      osf3*) +	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' +	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' +	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' +		;; +	      *) +	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' +	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' +	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ +	          echo "-hidden">> $lib.exp~ +	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ +	          $RM $lib.exp' +	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' +		;; +	    esac + +	    _LT_TAGVAR(hardcode_libdir_separator, $1)=: + +	    # Commands to make compiler produce verbose output that lists +	    # what "hidden" libraries, object files and flags are used when +	    # linking a shared library. +	    # +	    # There doesn't appear to be a way to prevent this compiler from +	    # explicitly linking system object files so we need to strip them +	    # from the output so that they don't get included in the library +	    # dependencies. +	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$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; func_echo_all "$list"' +	    ;; +	  *) +	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then +	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' +	      case $host in +	        osf3*) +	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' +		  ;; +	        *) +	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' +		  ;; +	      esac + +	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' +	      _LT_TAGVAR(hardcode_libdir_separator, $1)=: + +	      # Commands to make compiler produce verbose output that lists +	      # what "hidden" libraries, object files and flags are used when +	      # linking a shared library. +	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + +	    else +	      # FIXME: insert proper C++ library support +	      _LT_TAGVAR(ld_shlibs, $1)=no +	    fi +	    ;; +        esac +        ;; + +      psos*) +        # FIXME: insert proper C++ library support +        _LT_TAGVAR(ld_shlibs, $1)=no +        ;; + +      sunos4*) +        case $cc_basename in +          CC*) +	    # Sun C++ 4.x +	    # FIXME: insert proper C++ library support +	    _LT_TAGVAR(ld_shlibs, $1)=no +	    ;; +          lcc*) +	    # Lucid +	    # FIXME: insert proper C++ library support +	    _LT_TAGVAR(ld_shlibs, $1)=no +	    ;; +          *) +	    # FIXME: insert proper C++ library support +	    _LT_TAGVAR(ld_shlibs, $1)=no +	    ;; +        esac +        ;; + +      solaris*) +        case $cc_basename in +          CC* | sunCC*) +	    # Sun C++ 4.2, 5.x and Centerline C++ +            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes +	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' +	    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' +	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ +	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + +	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' +	    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +	    case $host_os in +	      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; +	      *) +		# The compiler driver will combine and reorder linker options, +		# but understands `-z linker_flag'. +	        # Supported since Solaris 2.6 (maybe 2.5.1?) +		_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' +	        ;; +	    esac +	    _LT_TAGVAR(link_all_deplibs, $1)=yes + +	    output_verbose_link_cmd='func_echo_all' + +	    # Archives containing C++ object files must be created using +	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is +	    # necessary to make sure instantiated templates are included +	    # in the archive. +	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' +	    ;; +          gcx*) +	    # Green Hills C++ Compiler +	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + +	    # The C++ compiler must be used to create the archive. +	    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' +	    ;; +          *) +	    # GNU C++ compiler with Solaris linker +	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then +	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' +	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then +	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' +	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ +		  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + +	        # Commands to make compiler produce verbose output that lists +	        # what "hidden" libraries, object files and flags are used when +	        # linking a shared library. +	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' +	      else +	        # g++ 2.7 appears to require `-G' NOT `-shared' on this +	        # platform. +	        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' +	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ +		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + +	        # Commands to make compiler produce verbose output that lists +	        # what "hidden" libraries, object files and flags are used when +	        # linking a shared library. +	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' +	      fi + +	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' +	      case $host_os in +		solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; +		*) +		  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' +		  ;; +	      esac +	    fi +	    ;; +        esac +        ;; + +    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) +      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' +      _LT_TAGVAR(archive_cmds_need_lc, $1)=no +      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +      runpath_var='LD_RUN_PATH' + +      case $cc_basename in +        CC*) +	  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' +	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' +	  ;; +	*) +	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' +	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' +	  ;; +      esac +      ;; + +      sysv5* | sco3.2v5* | sco5v6*) +	# Note: We can NOT use -z defs as we might desire, because we do not +	# link with -lc, and that would cause any symbols used from libc to +	# always be unresolved, which means just about no library would +	# ever link correctly.  If we're not using GNU ld we use -z text +	# though, which does catch some bad symbols but isn't as heavy-handed +	# as -z defs. +	_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' +	_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' +	_LT_TAGVAR(archive_cmds_need_lc, $1)=no +	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no +	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' +	_LT_TAGVAR(hardcode_libdir_separator, $1)=':' +	_LT_TAGVAR(link_all_deplibs, $1)=yes +	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' +	runpath_var='LD_RUN_PATH' + +	case $cc_basename in +          CC*) +	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' +	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' +	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ +	      '"$_LT_TAGVAR(old_archive_cmds, $1)" +	    _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ +	      '"$_LT_TAGVAR(reload_cmds, $1)" +	    ;; +	  *) +	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' +	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' +	    ;; +	esac +      ;; + +      tandem*) +        case $cc_basename in +          NCC*) +	    # NonStop-UX NCC 3.20 +	    # FIXME: insert proper C++ library support +	    _LT_TAGVAR(ld_shlibs, $1)=no +	    ;; +          *) +	    # FIXME: insert proper C++ library support +	    _LT_TAGVAR(ld_shlibs, $1)=no +	    ;; +        esac +        ;; + +      vxworks*) +        # FIXME: insert proper C++ library support +        _LT_TAGVAR(ld_shlibs, $1)=no +        ;; + +      *) +        # FIXME: insert proper C++ library support +        _LT_TAGVAR(ld_shlibs, $1)=no +        ;; +    esac + +    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +    _LT_TAGVAR(GCC, $1)="$GXX" +    _LT_TAGVAR(LD, $1)="$LD" + +    ## CAVEAT EMPTOR: +    ## There is no encapsulation within the following macros, do not change +    ## the running order or otherwise move them around unless you know exactly +    ## what you are doing... +    _LT_SYS_HIDDEN_LIBDEPS($1) +    _LT_COMPILER_PIC($1) +    _LT_COMPILER_C_O($1) +    _LT_COMPILER_FILE_LOCKS($1) +    _LT_LINKER_SHLIBS($1) +    _LT_SYS_DYNAMIC_LINKER($1) +    _LT_LINKER_HARDCODE_LIBPATH($1) + +    _LT_CONFIG($1) +  fi # test -n "$compiler" + +  CC=$lt_save_CC +  CFLAGS=$lt_save_CFLAGS +  LDCXX=$LD +  LD=$lt_save_LD +  GCC=$lt_save_GCC +  with_gnu_ld=$lt_save_with_gnu_ld +  lt_cv_path_LDCXX=$lt_cv_path_LD +  lt_cv_path_LD=$lt_save_path_LD +  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld +  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ +  case ${2} in +  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; +  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; +  esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library.  It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: +  Foo (void) { a = 0; } +private: +  int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF +      subroutine foo +      implicit none +      integer*4 a +      a=0 +      return +      end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF +      subroutine foo +      implicit none +      integer a +      a=0 +      return +      end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { +  private int a; +  public void bar (void) { +    a = 0; +  } +}; +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then +  # Parse the compiler output and extract the necessary +  # objects, libraries and library flags. + +  # Sentinel used to keep track of whether or not we are before +  # the conftest object file. +  pre_test_object_deps_done=no + +  for p in `eval "$output_verbose_link_cmd"`; do +    case ${prev}${p} in + +    -L* | -R* | -l*) +       # Some compilers place space between "-{L,R}" and the path. +       # Remove the space. +       if test $p = "-L" || +          test $p = "-R"; then +	 prev=$p +	 continue +       fi + +       # Expand the sysroot to ease extracting the directories later. +       if test -z "$prev"; then +         case $p in +         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; +         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; +         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; +         esac +       fi +       case $p in +       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; +       esac +       if test "$pre_test_object_deps_done" = no; then +	 case ${prev} in +	 -L | -R) +	   # Internal compiler library paths should come after those +	   # provided the user.  The postdeps already come after the +	   # user supplied libs so there is no need to process them. +	   if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then +	     _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" +	   else +	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" +	   fi +	   ;; +	 # The "-l" case would never come before the object being +	 # linked, so don't bother handling this case. +	 esac +       else +	 if test -z "$_LT_TAGVAR(postdeps, $1)"; then +	   _LT_TAGVAR(postdeps, $1)="${prev}${p}" +	 else +	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" +	 fi +       fi +       prev= +       ;; + +    *.lto.$objext) ;; # Ignore GCC LTO objects +    *.$objext) +       # This assumes that the test object file only shows up +       # once in the compiler output. +       if test "$p" = "conftest.$objext"; then +	 pre_test_object_deps_done=yes +	 continue +       fi + +       if test "$pre_test_object_deps_done" = no; then +	 if test -z "$_LT_TAGVAR(predep_objects, $1)"; then +	   _LT_TAGVAR(predep_objects, $1)="$p" +	 else +	   _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" +	 fi +       else +	 if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then +	   _LT_TAGVAR(postdep_objects, $1)="$p" +	 else +	   _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" +	 fi +       fi +       ;; + +    *) ;; # Ignore the rest. + +    esac +  done + +  # Clean up. +  rm -f a.out a.exe +else +  echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) +  # Interix 3.5 installs completely hosed .la files for C++, so rather than +  # hack all around it, let's just trust "g++" to DTRT. +  _LT_TAGVAR(predep_objects,$1)= +  _LT_TAGVAR(postdep_objects,$1)= +  _LT_TAGVAR(postdeps,$1)= +  ;; + +linux*) +  case `$CC -V 2>&1 | sed 5q` in +  *Sun\ C*) +    # Sun C++ 5.9 + +    # The more standards-conforming stlport4 library is +    # incompatible with the Cstd library. Avoid specifying +    # it if it's in CXXFLAGS. Ignore libCrun as +    # -library=stlport4 depends on it. +    case " $CXX $CXXFLAGS " in +    *" -library=stlport4 "*) +      solaris_use_stlport4=yes +      ;; +    esac + +    if test "$solaris_use_stlport4" != yes; then +      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' +    fi +    ;; +  esac +  ;; + +solaris*) +  case $cc_basename in +  CC* | sunCC*) +    # The more standards-conforming stlport4 library is +    # incompatible with the Cstd library. Avoid specifying +    # it if it's in CXXFLAGS. Ignore libCrun as +    # -library=stlport4 depends on it. +    case " $CXX $CXXFLAGS " in +    *" -library=stlport4 "*) +      solaris_use_stlport4=yes +      ;; +    esac + +    # Adding this requires a known-good setup of shared libraries for +    # Sun compiler versions before 5.6, else PIC objects from an old +    # archive will be linked into the output, leading to subtle bugs. +    if test "$solaris_use_stlport4" != yes; then +      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' +    fi +    ;; +  esac +  ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], +    [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], +    [Dependencies to place before and after the objects being linked to +    create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], +    [The library search path used internally by the compiler when linking +    a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined.  These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test "X$F77" = "Xno"; then +  _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working.  Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then +  # Code to be used in simple compile tests +  lt_simple_compile_test_code="\ +      subroutine t +      return +      end +" + +  # Code to be used in simple link tests +  lt_simple_link_test_code="\ +      program t +      end +" + +  # ltmain only uses $CC for tagged configurations so make sure $CC is set. +  _LT_TAG_COMPILER + +  # save warnings/boilerplate of simple test code +  _LT_COMPILER_BOILERPLATE +  _LT_LINKER_BOILERPLATE + +  # Allow CC to be a program name with arguments. +  lt_save_CC="$CC" +  lt_save_GCC=$GCC +  lt_save_CFLAGS=$CFLAGS +  CC=${F77-"f77"} +  CFLAGS=$FFLAGS +  compiler=$CC +  _LT_TAGVAR(compiler, $1)=$CC +  _LT_CC_BASENAME([$compiler]) +  GCC=$G77 +  if test -n "$compiler"; then +    AC_MSG_CHECKING([if libtool supports shared libraries]) +    AC_MSG_RESULT([$can_build_shared]) + +    AC_MSG_CHECKING([whether to build shared libraries]) +    test "$can_build_shared" = "no" && enable_shared=no + +    # On AIX, shared libraries and static libraries use the same namespace, and +    # are all built from PIC. +    case $host_os in +      aix3*) +        test "$enable_shared" = yes && enable_static=no +        if test -n "$RANLIB"; then +          archive_cmds="$archive_cmds~\$RANLIB \$lib" +          postinstall_cmds='$RANLIB $lib' +        fi +        ;; +      aix[[4-9]]*) +	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then +	  test "$enable_shared" = yes && enable_static=no +	fi +        ;; +    esac +    AC_MSG_RESULT([$enable_shared]) + +    AC_MSG_CHECKING([whether to build static libraries]) +    # Make sure either enable_shared or enable_static is yes. +    test "$enable_shared" = yes || enable_static=yes +    AC_MSG_RESULT([$enable_static]) + +    _LT_TAGVAR(GCC, $1)="$G77" +    _LT_TAGVAR(LD, $1)="$LD" + +    ## CAVEAT EMPTOR: +    ## There is no encapsulation within the following macros, do not change +    ## the running order or otherwise move them around unless you know exactly +    ## what you are doing... +    _LT_COMPILER_PIC($1) +    _LT_COMPILER_C_O($1) +    _LT_COMPILER_FILE_LOCKS($1) +    _LT_LINKER_SHLIBS($1) +    _LT_SYS_DYNAMIC_LINKER($1) +    _LT_LINKER_HARDCODE_LIBPATH($1) + +    _LT_CONFIG($1) +  fi # test -n "$compiler" + +  GCC=$lt_save_GCC +  CC="$lt_save_CC" +  CFLAGS="$lt_save_CFLAGS" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined.  These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test "X$FC" = "Xno"; then +  _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working.  Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then +  # Code to be used in simple compile tests +  lt_simple_compile_test_code="\ +      subroutine t +      return +      end +" + +  # Code to be used in simple link tests +  lt_simple_link_test_code="\ +      program t +      end +" + +  # ltmain only uses $CC for tagged configurations so make sure $CC is set. +  _LT_TAG_COMPILER + +  # save warnings/boilerplate of simple test code +  _LT_COMPILER_BOILERPLATE +  _LT_LINKER_BOILERPLATE + +  # Allow CC to be a program name with arguments. +  lt_save_CC="$CC" +  lt_save_GCC=$GCC +  lt_save_CFLAGS=$CFLAGS +  CC=${FC-"f95"} +  CFLAGS=$FCFLAGS +  compiler=$CC +  GCC=$ac_cv_fc_compiler_gnu + +  _LT_TAGVAR(compiler, $1)=$CC +  _LT_CC_BASENAME([$compiler]) + +  if test -n "$compiler"; then +    AC_MSG_CHECKING([if libtool supports shared libraries]) +    AC_MSG_RESULT([$can_build_shared]) + +    AC_MSG_CHECKING([whether to build shared libraries]) +    test "$can_build_shared" = "no" && enable_shared=no + +    # On AIX, shared libraries and static libraries use the same namespace, and +    # are all built from PIC. +    case $host_os in +      aix3*) +        test "$enable_shared" = yes && enable_static=no +        if test -n "$RANLIB"; then +          archive_cmds="$archive_cmds~\$RANLIB \$lib" +          postinstall_cmds='$RANLIB $lib' +        fi +        ;; +      aix[[4-9]]*) +	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then +	  test "$enable_shared" = yes && enable_static=no +	fi +        ;; +    esac +    AC_MSG_RESULT([$enable_shared]) + +    AC_MSG_CHECKING([whether to build static libraries]) +    # Make sure either enable_shared or enable_static is yes. +    test "$enable_shared" = yes || enable_static=yes +    AC_MSG_RESULT([$enable_static]) + +    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" +    _LT_TAGVAR(LD, $1)="$LD" + +    ## CAVEAT EMPTOR: +    ## There is no encapsulation within the following macros, do not change +    ## the running order or otherwise move them around unless you know exactly +    ## what you are doing... +    _LT_SYS_HIDDEN_LIBDEPS($1) +    _LT_COMPILER_PIC($1) +    _LT_COMPILER_C_O($1) +    _LT_COMPILER_FILE_LOCKS($1) +    _LT_LINKER_SHLIBS($1) +    _LT_SYS_DYNAMIC_LINKER($1) +    _LT_LINKER_HARDCODE_LIBPATH($1) + +    _LT_CONFIG($1) +  fi # test -n "$compiler" + +  GCC=$lt_save_GCC +  CC=$lt_save_CC +  CFLAGS=$lt_save_CFLAGS +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined.  These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then +  _LT_COMPILER_NO_RTTI($1) +  _LT_COMPILER_PIC($1) +  _LT_COMPILER_C_O($1) +  _LT_COMPILER_FILE_LOCKS($1) +  _LT_LINKER_SHLIBS($1) +  _LT_LINKER_HARDCODE_LIBPATH($1) + +  _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined.  These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then +  : +  _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], +  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], +    [AC_CHECK_TOOL(GCJ, gcj,) +      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" +      AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible.  Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], +    [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into   # +#  GNU Autoconf as AC_PROG_SED.  When it is available in   # +#  a released version of Autoconf we should remove this    # +#  macro and use it instead.                               # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do +  IFS=$as_save_IFS +  test -z "$as_dir" && as_dir=. +  for lt_ac_prog in sed gsed; do +    for ac_exec_ext in '' $ac_executable_extensions; do +      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then +        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" +      fi +    done +  done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do +  test ! -f $lt_ac_sed && continue +  cat /dev/null > conftest.in +  lt_ac_count=0 +  echo $ECHO_N "0123456789$ECHO_C" >conftest.in +  # Check for GNU sed and select it if it is found. +  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then +    lt_cv_path_SED=$lt_ac_sed +    break +  fi +  while true; do +    cat conftest.in conftest.in >conftest.tmp +    mv conftest.tmp conftest.in +    cp conftest.in conftest.nl +    echo >>conftest.nl +    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break +    cmp -s conftest.out conftest.nl || break +    # 10000 chars as input seems more than enough +    test $lt_ac_count -gt 10 && break +    lt_ac_count=`expr $lt_ac_count + 1` +    if test $lt_ac_count -gt $lt_ac_max; then +      lt_ac_max=$lt_ac_count +      lt_cv_path_SED=$lt_ac_sed +    fi +  done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" +  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ +      = c,a/b,b/c, \ +    && eval 'test $(( 1 + 1 )) -eq 2 \ +    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ +  && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ +    >/dev/null 2>&1 \ +  && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then +  lt_unset=unset +else +  lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system +    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr +  lt_SP2NL='tr \040 \012' +  lt_NL2SP='tr \015\012 \040\040' +  ;; + *) # EBCDIC based system +  lt_SP2NL='tr \100 \n' +  lt_NL2SP='tr \r\n \100\100' +  ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) +# ------------------------------------------------------ +# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and +# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. +m4_defun([_LT_PROG_FUNCTION_REPLACE], +[dnl { +sed -e '/^$1 ()$/,/^} # $1 /c\ +$1 ()\ +{\ +m4_bpatsubsts([$2], [$], [\\], [^\([	 ]\)], [\\\1]) +} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ +  && mv -f "$cfgfile.tmp" "$cfgfile" \ +    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: +]) + + +# _LT_PROG_REPLACE_SHELLFNS +# ------------------------- +# Replace existing portable implementations of several shell functions with +# equivalent extended shell implementations where those features are available.. +m4_defun([_LT_PROG_REPLACE_SHELLFNS], +[if test x"$xsi_shell" = xyes; then +  _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl +    case ${1} in +      */*) func_dirname_result="${1%/*}${2}" ;; +      *  ) func_dirname_result="${3}" ;; +    esac]) + +  _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl +    func_basename_result="${1##*/}"]) + +  _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl +    case ${1} in +      */*) func_dirname_result="${1%/*}${2}" ;; +      *  ) func_dirname_result="${3}" ;; +    esac +    func_basename_result="${1##*/}"]) + +  _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl +    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are +    # positional parameters, so assign one to ordinary parameter first. +    func_stripname_result=${3} +    func_stripname_result=${func_stripname_result#"${1}"} +    func_stripname_result=${func_stripname_result%"${2}"}]) + +  _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl +    func_split_long_opt_name=${1%%=*} +    func_split_long_opt_arg=${1#*=}]) + +  _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl +    func_split_short_opt_arg=${1#??} +    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) + +  _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl +    case ${1} in +      *.lo) func_lo2o_result=${1%.lo}.${objext} ;; +      *)    func_lo2o_result=${1} ;; +    esac]) + +  _LT_PROG_FUNCTION_REPLACE([func_xform], [    func_xform_result=${1%.*}.lo]) + +  _LT_PROG_FUNCTION_REPLACE([func_arith], [    func_arith_result=$(( $[*] ))]) + +  _LT_PROG_FUNCTION_REPLACE([func_len], [    func_len_result=${#1}]) +fi + +if test x"$lt_shell_append" = xyes; then +  _LT_PROG_FUNCTION_REPLACE([func_append], [    eval "${1}+=\\${2}"]) + +  _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl +    func_quote_for_eval "${2}" +dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ +    eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) + +  # Save a `func_append' function call where possible by direct use of '+=' +  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ +    && mv -f "$cfgfile.tmp" "$cfgfile" \ +      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +  test 0 -eq $? || _lt_function_replace_fail=: +else +  # Save a `func_append' function call even when '+=' is not available +  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ +    && mv -f "$cfgfile.tmp" "$cfgfile" \ +      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +  test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then +  AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) +fi +]) + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine which file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path).  These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in +  *-*-mingw* ) +    case $build in +      *-*-mingw* ) # actually msys +        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 +        ;; +      *-*-cygwin* ) +        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 +        ;; +      * ) # otherwise, assume *nix +        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 +        ;; +    esac +    ;; +  *-*-cygwin* ) +    case $build in +      *-*-mingw* ) # actually msys +        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin +        ;; +      *-*-cygwin* ) +        lt_cv_to_host_file_cmd=func_convert_file_noop +        ;; +      * ) # otherwise, assume *nix +        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin +        ;; +    esac +    ;; +  * ) # unhandled hosts (and "normal" native builds) +    lt_cv_to_host_file_cmd=func_convert_file_noop +    ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], +         [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in +  *-*-mingw* ) +    case $build in +      *-*-mingw* ) # actually msys +        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 +        ;; +    esac +    ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], +         [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4 new file mode 100644 index 00000000..17cfd51c --- /dev/null +++ b/m4/ltoptions.m4 @@ -0,0 +1,369 @@ +# Helper functions for option handling.                    -*- Autoconf -*- +# +#   Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, +#   Inc. +#   Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 7 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it.  Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), +        _LT_MANGLE_DEFUN([$1], [$2]), +    [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), +	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), +		      [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME.  If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), +    [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ +  dnl +  dnl Simply set some default values (i.e off) if boolean options were not +  dnl specified: +  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no +  ]) +  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no +  ]) +  dnl +  dnl If no reference was made to various pairs of opposing options, then +  dnl we run the default mode handler for the pair.  For example, if neither +  dnl `shared' nor `disable-shared' was passed, we enable building of shared +  dnl archives by default: +  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) +  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) +  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) +  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], +  		   [_LT_ENABLE_FAST_INSTALL]) +  ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) +  AC_CHECK_TOOL(AS, as, false) +  AC_CHECK_TOOL(DLLTOOL, dlltool, false) +  AC_CHECK_TOOL(OBJDUMP, objdump, false) +  ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS],      [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], +    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], +	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], +    [p=${PACKAGE-default} +    case $enableval in +    yes) enable_shared=yes ;; +    no) enable_shared=no ;; +    *) +      enable_shared=no +      # Look at the argument we got.  We use all the common list separators. +      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," +      for pkg in $enableval; do +	IFS="$lt_save_ifs" +	if test "X$pkg" = "X$p"; then +	  enable_shared=yes +	fi +      done +      IFS="$lt_save_ifs" +      ;; +    esac], +    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + +    _LT_DECL([build_libtool_libs], [enable_shared], [0], +	[Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], +    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], +	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], +    [p=${PACKAGE-default} +    case $enableval in +    yes) enable_static=yes ;; +    no) enable_static=no ;; +    *) +     enable_static=no +      # Look at the argument we got.  We use all the common list separators. +      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," +      for pkg in $enableval; do +	IFS="$lt_save_ifs" +	if test "X$pkg" = "X$p"; then +	  enable_static=yes +	fi +      done +      IFS="$lt_save_ifs" +      ;; +    esac], +    [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + +    _LT_DECL([build_old_libs], [enable_static], [0], +	[Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], +    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], +    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], +    [p=${PACKAGE-default} +    case $enableval in +    yes) enable_fast_install=yes ;; +    no) enable_fast_install=no ;; +    *) +      enable_fast_install=no +      # Look at the argument we got.  We use all the common list separators. +      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," +      for pkg in $enableval; do +	IFS="$lt_save_ifs" +	if test "X$pkg" = "X$p"; then +	  enable_fast_install=yes +	fi +      done +      IFS="$lt_save_ifs" +      ;; +    esac], +    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], +	 [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'.  If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], +    [AS_HELP_STRING([--with-pic], +	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])], +    [pic_mode="$withval"], +    [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], +		 [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], +		 [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], +		 [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], +		 [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], +		 [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4 new file mode 100644 index 00000000..9000a057 --- /dev/null +++ b/m4/ltsugar.m4 @@ -0,0 +1,123 @@ +# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], +       [$#], [2], [[$2]], +       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], +       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], +       [$#], 1, [], +       [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], +	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], +       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], +	     [m4_foreach([_Lt_suffix], +		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, +	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], +	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], +		 [lt_append([$1], [$2], [$3])$4], +		 [$5])], +	  [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], +	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), +    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], +	[$5], +    [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], +  [lt_join(m4_quote(m4_default([$4], [[, ]])), +           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), +		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/m4/ltversion.m4 b/m4/ltversion.m4 new file mode 100644 index 00000000..9c7b5d41 --- /dev/null +++ b/m4/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers			-*- Autoconf -*- +# +#   Copyright (C) 2004 Free Software Foundation, Inc. +#   Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 3293 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4]) +m4_define([LT_PACKAGE_REVISION], [1.3293]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4' +macro_revision='1.3293' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4 new file mode 100644 index 00000000..c573da90 --- /dev/null +++ b/m4/lt~obsolete.m4 @@ -0,0 +1,98 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*- +# +#   Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. +#   Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else.  This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.  +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS],	[AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP],		[AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS],	[AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77],		[AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC],		[AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX],		[AC_DEFUN([_LT_PROG_CXX])]) diff --git a/m4/nls.m4 b/m4/nls.m4 new file mode 100644 index 00000000..003704c4 --- /dev/null +++ b/m4/nls.m4 @@ -0,0 +1,32 @@ +# nls.m4 serial 5 (gettext-0.18) +dnl Copyright (C) 1995-2003, 2005-2006, 2008-2010 Free Software Foundation, +dnl Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000. +dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003. + +AC_PREREQ([2.50]) + +AC_DEFUN([AM_NLS], +[ +  AC_MSG_CHECKING([whether NLS is requested]) +  dnl Default is enabled NLS +  AC_ARG_ENABLE([nls], +    [  --disable-nls           do not use Native Language Support], +    USE_NLS=$enableval, USE_NLS=yes) +  AC_MSG_RESULT([$USE_NLS]) +  AC_SUBST([USE_NLS]) +]) diff --git a/m4/po.m4 b/m4/po.m4 new file mode 100644 index 00000000..47f36a41 --- /dev/null +++ b/m4/po.m4 @@ -0,0 +1,449 @@ +# po.m4 serial 17 (gettext-0.18) +dnl Copyright (C) 1995-2010 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000. +dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003. + +AC_PREREQ([2.50]) + +dnl Checks for all prerequisites of the po subdirectory. +AC_DEFUN([AM_PO_SUBDIRS], +[ +  AC_REQUIRE([AC_PROG_MAKE_SET])dnl +  AC_REQUIRE([AC_PROG_INSTALL])dnl +  AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake +  AC_REQUIRE([AM_NLS])dnl + +  dnl Release version of the gettext macros. This is used to ensure that +  dnl the gettext macros and po/Makefile.in.in are in sync. +  AC_SUBST([GETTEXT_MACRO_VERSION], [0.18]) + +  dnl Perform the following tests also if --disable-nls has been given, +  dnl because they are needed for "make dist" to work. + +  dnl Search for GNU msgfmt in the PATH. +  dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. +  dnl The second test excludes FreeBSD msgfmt. +  AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, +    [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && +     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], +    :) +  AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) + +  dnl Test whether it is GNU msgfmt >= 0.15. +changequote(,)dnl +  case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in +    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; +    *) MSGFMT_015=$MSGFMT ;; +  esac +changequote([,])dnl +  AC_SUBST([MSGFMT_015]) +changequote(,)dnl +  case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in +    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; +    *) GMSGFMT_015=$GMSGFMT ;; +  esac +changequote([,])dnl +  AC_SUBST([GMSGFMT_015]) + +  dnl Search for GNU xgettext 0.12 or newer in the PATH. +  dnl The first test excludes Solaris xgettext and early GNU xgettext versions. +  dnl The second test excludes FreeBSD xgettext. +  AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, +    [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && +     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], +    :) +  dnl Remove leftover from FreeBSD xgettext call. +  rm -f messages.po + +  dnl Test whether it is GNU xgettext >= 0.15. +changequote(,)dnl +  case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in +    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; +    *) XGETTEXT_015=$XGETTEXT ;; +  esac +changequote([,])dnl +  AC_SUBST([XGETTEXT_015]) + +  dnl Search for GNU msgmerge 0.11 or newer in the PATH. +  AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, +    [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) + +  dnl Installation directories. +  dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we +  dnl have to define it here, so that it can be used in po/Makefile. +  test -n "$localedir" || localedir='${datadir}/locale' +  AC_SUBST([localedir]) + +  dnl Support for AM_XGETTEXT_OPTION. +  test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= +  AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) + +  AC_CONFIG_COMMANDS([po-directories], [[ +    for ac_file in $CONFIG_FILES; do +      # Support "outfile[:infile[:infile...]]" +      case "$ac_file" in +        *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; +      esac +      # PO directories have a Makefile.in generated from Makefile.in.in. +      case "$ac_file" in */Makefile.in) +        # Adjust a relative srcdir. +        ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` +        ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" +        ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` +        # In autoconf-2.13 it is called $ac_given_srcdir. +        # In autoconf-2.50 it is called $srcdir. +        test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" +        case "$ac_given_srcdir" in +          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; +          /*) top_srcdir="$ac_given_srcdir" ;; +          *)  top_srcdir="$ac_dots$ac_given_srcdir" ;; +        esac +        # Treat a directory as a PO directory if and only if it has a +        # POTFILES.in file. This allows packages to have multiple PO +        # directories under different names or in different locations. +        if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then +          rm -f "$ac_dir/POTFILES" +          test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" +          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ 	]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" +          POMAKEFILEDEPS="POTFILES.in" +          # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend +          # on $ac_dir but don't depend on user-specified configuration +          # parameters. +          if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then +            # The LINGUAS file contains the set of available languages. +            if test -n "$OBSOLETE_ALL_LINGUAS"; then +              test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" +            fi +            ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` +            # Hide the ALL_LINGUAS assigment from automake < 1.5. +            eval 'ALL_LINGUAS''=$ALL_LINGUAS_' +            POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" +          else +            # The set of available languages was given in configure.in. +            # Hide the ALL_LINGUAS assigment from automake < 1.5. +            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' +          fi +          # Compute POFILES +          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) +          # Compute UPDATEPOFILES +          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) +          # Compute DUMMYPOFILES +          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop) +          # Compute GMOFILES +          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) +          case "$ac_given_srcdir" in +            .) srcdirpre= ;; +            *) srcdirpre='$(srcdir)/' ;; +          esac +          POFILES= +          UPDATEPOFILES= +          DUMMYPOFILES= +          GMOFILES= +          for lang in $ALL_LINGUAS; do +            POFILES="$POFILES $srcdirpre$lang.po" +            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" +            DUMMYPOFILES="$DUMMYPOFILES $lang.nop" +            GMOFILES="$GMOFILES $srcdirpre$lang.gmo" +          done +          # CATALOGS depends on both $ac_dir and the user's LINGUAS +          # environment variable. +          INST_LINGUAS= +          if test -n "$ALL_LINGUAS"; then +            for presentlang in $ALL_LINGUAS; do +              useit=no +              if test "%UNSET%" != "$LINGUAS"; then +                desiredlanguages="$LINGUAS" +              else +                desiredlanguages="$ALL_LINGUAS" +              fi +              for desiredlang in $desiredlanguages; do +                # Use the presentlang catalog if desiredlang is +                #   a. equal to presentlang, or +                #   b. a variant of presentlang (because in this case, +                #      presentlang can be used as a fallback for messages +                #      which are not translated in the desiredlang catalog). +                case "$desiredlang" in +                  "$presentlang"*) useit=yes;; +                esac +              done +              if test $useit = yes; then +                INST_LINGUAS="$INST_LINGUAS $presentlang" +              fi +            done +          fi +          CATALOGS= +          if test -n "$INST_LINGUAS"; then +            for lang in $INST_LINGUAS; do +              CATALOGS="$CATALOGS $lang.gmo" +            done +          fi +          test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" +          sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" +          for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do +            if test -f "$f"; then +              case "$f" in +                *.orig | *.bak | *~) ;; +                *) cat "$f" >> "$ac_dir/Makefile" ;; +              esac +            fi +          done +        fi +        ;; +      esac +    done]], +   [# Capture the value of obsolete ALL_LINGUAS because we need it to compute +    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it +    # from automake < 1.5. +    eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' +    # Capture the value of LINGUAS because we need it to compute CATALOGS. +    LINGUAS="${LINGUAS-%UNSET%}" +   ]) +]) + +dnl Postprocesses a Makefile in a directory containing PO files. +AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], +[ +  # When this code is run, in config.status, two variables have already been +  # set: +  # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, +  # - LINGUAS is the value of the environment variable LINGUAS at configure +  #   time. + +changequote(,)dnl +  # Adjust a relative srcdir. +  ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` +  ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" +  ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` +  # In autoconf-2.13 it is called $ac_given_srcdir. +  # In autoconf-2.50 it is called $srcdir. +  test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" +  case "$ac_given_srcdir" in +    .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; +    /*) top_srcdir="$ac_given_srcdir" ;; +    *)  top_srcdir="$ac_dots$ac_given_srcdir" ;; +  esac + +  # Find a way to echo strings without interpreting backslash. +  if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then +    gt_echo='echo' +  else +    if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then +      gt_echo='printf %s\n' +    else +      echo_func () { +        cat <<EOT +$* +EOT +      } +      gt_echo='echo_func' +    fi +  fi + +  # A sed script that extracts the value of VARIABLE from a Makefile. +  sed_x_variable=' +# Test if the hold space is empty. +x +s/P/P/ +x +ta +# Yes it was empty. Look if we have the expected variable definition. +/^[	 ]*VARIABLE[	 ]*=/{ +  # Seen the first line of the variable definition. +  s/^[	 ]*VARIABLE[	 ]*=// +  ba +} +bd +:a +# Here we are processing a line from the variable definition. +# Remove comment, more precisely replace it with a space. +s/#.*$/ / +# See if the line ends in a backslash. +tb +:b +s/\\$// +# Print the line, without the trailing backslash. +p +tc +# There was no trailing backslash. The end of the variable definition is +# reached. Clear the hold space. +s/^.*$// +x +bd +:c +# A trailing backslash means that the variable definition continues in the +# next line. Put a nonempty string into the hold space to indicate this. +s/^.*$/P/ +x +:d +' +changequote([,])dnl + +  # Set POTFILES to the value of the Makefile variable POTFILES. +  sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'` +  POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"` +  # Compute POTFILES_DEPS as +  #   $(foreach file, $(POTFILES), $(top_srcdir)/$(file)) +  POTFILES_DEPS= +  for file in $POTFILES; do +    POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file" +  done +  POMAKEFILEDEPS="" + +  if test -n "$OBSOLETE_ALL_LINGUAS"; then +    test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" +  fi +  if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then +    # The LINGUAS file contains the set of available languages. +    ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` +    POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" +  else +    # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS. +    sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'` +    ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"` +  fi +  # Hide the ALL_LINGUAS assigment from automake < 1.5. +  eval 'ALL_LINGUAS''=$ALL_LINGUAS_' +  # Compute POFILES +  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) +  # Compute UPDATEPOFILES +  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) +  # Compute DUMMYPOFILES +  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop) +  # Compute GMOFILES +  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) +  # Compute PROPERTIESFILES +  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties) +  # Compute CLASSFILES +  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class) +  # Compute QMFILES +  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm) +  # Compute MSGFILES +  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg) +  # Compute RESOURCESDLLFILES +  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll) +  case "$ac_given_srcdir" in +    .) srcdirpre= ;; +    *) srcdirpre='$(srcdir)/' ;; +  esac +  POFILES= +  UPDATEPOFILES= +  DUMMYPOFILES= +  GMOFILES= +  PROPERTIESFILES= +  CLASSFILES= +  QMFILES= +  MSGFILES= +  RESOURCESDLLFILES= +  for lang in $ALL_LINGUAS; do +    POFILES="$POFILES $srcdirpre$lang.po" +    UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" +    DUMMYPOFILES="$DUMMYPOFILES $lang.nop" +    GMOFILES="$GMOFILES $srcdirpre$lang.gmo" +    PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties" +    CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class" +    QMFILES="$QMFILES $srcdirpre$lang.qm" +    frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` +    MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg" +    frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` +    RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll" +  done +  # CATALOGS depends on both $ac_dir and the user's LINGUAS +  # environment variable. +  INST_LINGUAS= +  if test -n "$ALL_LINGUAS"; then +    for presentlang in $ALL_LINGUAS; do +      useit=no +      if test "%UNSET%" != "$LINGUAS"; then +        desiredlanguages="$LINGUAS" +      else +        desiredlanguages="$ALL_LINGUAS" +      fi +      for desiredlang in $desiredlanguages; do +        # Use the presentlang catalog if desiredlang is +        #   a. equal to presentlang, or +        #   b. a variant of presentlang (because in this case, +        #      presentlang can be used as a fallback for messages +        #      which are not translated in the desiredlang catalog). +        case "$desiredlang" in +          "$presentlang"*) useit=yes;; +        esac +      done +      if test $useit = yes; then +        INST_LINGUAS="$INST_LINGUAS $presentlang" +      fi +    done +  fi +  CATALOGS= +  JAVACATALOGS= +  QTCATALOGS= +  TCLCATALOGS= +  CSHARPCATALOGS= +  if test -n "$INST_LINGUAS"; then +    for lang in $INST_LINGUAS; do +      CATALOGS="$CATALOGS $lang.gmo" +      JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties" +      QTCATALOGS="$QTCATALOGS $lang.qm" +      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` +      TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg" +      frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` +      CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll" +    done +  fi + +  sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp" +  if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then +    # Add dependencies that cannot be formulated as a simple suffix rule. +    for lang in $ALL_LINGUAS; do +      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` +      cat >> "$ac_file.tmp" <<EOF +$frobbedlang.msg: $lang.po +	@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \ +	\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; } +EOF +    done +  fi +  if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then +    # Add dependencies that cannot be formulated as a simple suffix rule. +    for lang in $ALL_LINGUAS; do +      frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` +      cat >> "$ac_file.tmp" <<EOF +$frobbedlang/\$(DOMAIN).resources.dll: $lang.po +	@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \ +	\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; } +EOF +    done +  fi +  if test -n "$POMAKEFILEDEPS"; then +    cat >> "$ac_file.tmp" <<EOF +Makefile: $POMAKEFILEDEPS +EOF +  fi +  mv "$ac_file.tmp" "$ac_file" +]) + +dnl Initializes the accumulator used by AM_XGETTEXT_OPTION. +AC_DEFUN([AM_XGETTEXT_OPTION_INIT], +[ +  XGETTEXT_EXTRA_OPTIONS= +]) + +dnl Registers an option to be passed to xgettext in the po subdirectory. +AC_DEFUN([AM_XGETTEXT_OPTION], +[ +  AC_REQUIRE([AM_XGETTEXT_OPTION_INIT]) +  XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1" +]) diff --git a/m4/progtest.m4 b/m4/progtest.m4 new file mode 100644 index 00000000..2d804ac9 --- /dev/null +++ b/m4/progtest.m4 @@ -0,0 +1,92 @@ +# progtest.m4 serial 6 (gettext-0.18) +dnl Copyright (C) 1996-2003, 2005, 2008-2010 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl   Ulrich Drepper <drepper@cygnus.com>, 1996. + +AC_PREREQ([2.50]) + +# Search path for a program which passes the given test. + +dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +AC_DEFUN([AM_PATH_PROG_WITH_TEST], +[ +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then +  echo "#! /bin/sh" >conf$$.sh +  echo  "exit 0"   >>conf$$.sh +  chmod +x conf$$.sh +  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then +    PATH_SEPARATOR=';' +  else +    PATH_SEPARATOR=: +  fi +  rm -f conf$$.sh +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then +  ac_executable_p="test -x" +else +  ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL([ac_cv_path_$1], +[case "[$]$1" in +  [[\\/]]* | ?:[[\\/]]*) +    ac_cv_path_$1="[$]$1" # Let the user override the test with a path. +    ;; +  *) +    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR +    for ac_dir in ifelse([$5], , $PATH, [$5]); do +      IFS="$ac_save_IFS" +      test -z "$ac_dir" && ac_dir=. +      for ac_exec_ext in '' $ac_executable_extensions; do +        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then +          echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD +          if [$3]; then +            ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" +            break 2 +          fi +        fi +      done +    done +    IFS="$ac_save_IFS" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl +    ;; +esac])dnl +$1="$ac_cv_path_$1" +if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then +  AC_MSG_RESULT([$][$1]) +else +  AC_MSG_RESULT([no]) +fi +AC_SUBST([$1])dnl +]) @@ -1,10 +1,10 @@  #! /bin/sh  # Common stub for a few missing GNU programs while installing. -scriptversion=2006-05-10.23 +scriptversion=2009-04-28.21; # UTC -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 -#   Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, +# 2008, 2009 Free Software Foundation, Inc.  # Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.  # This program is free software; you can redistribute it and/or modify @@ -18,9 +18,7 @@ scriptversion=2006-05-10.23  # 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., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. +# along with this program.  If not, see <http://www.gnu.org/licenses/>.  # As a special exception to the GNU General Public License, if you  # distribute this file as part of a program that contains a @@ -89,6 +87,9 @@ Supported PROGRAM values:    tar          try tar, gnutar, gtar, then tar without non-portable flags    yacc         create \`y.tab.[ch]', if possible, from existing .[ch] +Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and +\`g' are ignored when checking the name. +  Send bug reports to <bug-automake@gnu.org>."      exit $?      ;; @@ -106,15 +107,22 @@ Send bug reports to <bug-automake@gnu.org>."  esac +# normalize program name to check for. +program=`echo "$1" | sed ' +  s/^gnu-//; t +  s/^gnu//; t +  s/^g//; t'` +  # Now exit if we have it, but it failed.  Also exit now if we  # don't have it and --version was passed (most likely to detect -# the program). +# the program).  This is about non-GNU programs, so use $1 not +# $program.  case $1 in -  lex|yacc) +  lex*|yacc*)      # Not GNU programs, they don't have --version.      ;; -  tar) +  tar*)      if test -n "$run"; then         echo 1>&2 "ERROR: \`tar' requires --run"         exit 1 @@ -138,7 +146,7 @@ esac  # If it does not exist, or fails to run (possibly an outdated version),  # try to emulate it. -case $1 in +case $program in    aclocal*)      echo 1>&2 "\  WARNING: \`$1' is $msg.  You should only need it if @@ -148,7 +156,7 @@ WARNING: \`$1' is $msg.  You should only need it if      touch aclocal.m4      ;; -  autoconf) +  autoconf*)      echo 1>&2 "\  WARNING: \`$1' is $msg.  You should only need it if           you modified \`${configure_ac}'.  You might want to install the @@ -157,7 +165,7 @@ WARNING: \`$1' is $msg.  You should only need it if      touch configure      ;; -  autoheader) +  autoheader*)      echo 1>&2 "\  WARNING: \`$1' is $msg.  You should only need it if           you modified \`acconfig.h' or \`${configure_ac}'.  You might want @@ -187,7 +195,7 @@ WARNING: \`$1' is $msg.  You should only need it if  	   while read f; do touch "$f"; done      ;; -  autom4te) +  autom4te*)      echo 1>&2 "\  WARNING: \`$1' is needed, but is $msg.           You might have modified some files without having the @@ -210,7 +218,7 @@ WARNING: \`$1' is needed, but is $msg.      fi      ;; -  bison|yacc) +  bison*|yacc*)      echo 1>&2 "\  WARNING: \`$1' $msg.  You should only need it if           you modified a \`.y' file.  You may need the \`Bison' package @@ -240,7 +248,7 @@ WARNING: \`$1' $msg.  You should only need it if      fi      ;; -  lex|flex) +  lex*|flex*)      echo 1>&2 "\  WARNING: \`$1' is $msg.  You should only need it if           you modified a \`.l' file.  You may need the \`Flex' package @@ -263,7 +271,7 @@ WARNING: \`$1' is $msg.  You should only need it if      fi      ;; -  help2man) +  help2man*)      echo 1>&2 "\  WARNING: \`$1' is $msg.  You should only need it if  	 you modified a dependency of a manual page.  You may need the @@ -277,11 +285,11 @@ WARNING: \`$1' is $msg.  You should only need it if      else  	test -z "$file" || exec >$file  	echo ".ab help2man is required to generate this page" -	exit 1 +	exit $?      fi      ;; -  makeinfo) +  makeinfo*)      echo 1>&2 "\  WARNING: \`$1' is $msg.  You should only need it if           you modified a \`.texi' or \`.texinfo' file, or any other file @@ -310,7 +318,7 @@ WARNING: \`$1' is $msg.  You should only need it if      touch $file      ;; -  tar) +  tar*)      shift      # We have already tried tar in the generic part. @@ -363,5 +371,6 @@ exit 0  # eval: (add-hook 'write-file-hooks 'time-stamp)  # time-stamp-start: "scriptversion="  # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC"  # End: diff --git a/mkinstalldirs b/mkinstalldirs index ef7e16fd..4191a45d 100755 --- a/mkinstalldirs +++ b/mkinstalldirs @@ -1,7 +1,7 @@  #! /bin/sh  # mkinstalldirs --- make directory hierarchy -scriptversion=2006-05-11.19 +scriptversion=2009-04-28.21; # UTC  # Original author: Noah Friedman <friedman@prep.ai.mit.edu>  # Created: 1993-05-16 @@ -157,5 +157,6 @@ exit $errstatus  # eval: (add-hook 'write-file-hooks 'time-stamp)  # time-stamp-start: "scriptversion="  # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC"  # End: diff --git a/po/Makefile.in.in b/po/Makefile.in.in index 6f2e2e94..83d8838a 100644 --- a/po/Makefile.in.in +++ b/po/Makefile.in.in @@ -1,5 +1,5 @@  # Makefile for PO directory in any package using GNU gettext. -# Copyright (C) 1995-1997, 2000-2003 by Ulrich Drepper <drepper@gnu.ai.mit.edu> +# Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper <drepper@gnu.ai.mit.edu>  #  # This file can be copied and used freely without restrictions.  It can  # be used in projects which are not available under the GNU General Public @@ -8,10 +8,12 @@  # Please note that the actual code of GNU gettext is covered by the GNU  # General Public License and is *not* in the public domain.  # -# Origin: gettext-0.13 +# Origin: gettext-0.18 +GETTEXT_MACRO_VERSION = 0.18  PACKAGE = @PACKAGE@  VERSION = @VERSION@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@  SHELL = /bin/sh  @SET_MAKE@ @@ -22,18 +24,38 @@ VPATH = @srcdir@  prefix = @prefix@  exec_prefix = @exec_prefix@ -datadir = @datadir@  datarootdir = @datarootdir@ -localedir = $(datadir)/locale +datadir = @datadir@ +localedir = @localedir@  gettextsrcdir = $(datadir)/gettext/po  INSTALL = @INSTALL@  INSTALL_DATA = @INSTALL_DATA@ -mkinstalldirs = @INSTALL@ -d -GMSGFMT = @GMSGFMT@ -MSGFMT = @MSGFMT@ -XGETTEXT = @XGETTEXT@ +# We use $(mkdir_p). +# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as +# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, +# @install_sh@ does not start with $(SHELL), so we add it. +# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined +# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake +# versions, $(mkinstalldirs) and $(install_sh) are unused. +mkinstalldirs = $(SHELL) @install_sh@ -d +install_sh = $(SHELL) @install_sh@ +MKDIR_P = @MKDIR_P@ +mkdir_p = @mkdir_p@ + +GMSGFMT_ = @GMSGFMT@ +GMSGFMT_no = @GMSGFMT@ +GMSGFMT_yes = @GMSGFMT_015@ +GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) +MSGFMT_ = @MSGFMT@ +MSGFMT_no = @MSGFMT@ +MSGFMT_yes = @MSGFMT_015@ +MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) +XGETTEXT_ = @XGETTEXT@ +XGETTEXT_no = @XGETTEXT@ +XGETTEXT_yes = @XGETTEXT_015@ +XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))  MSGMERGE = msgmerge  MSGMERGE_UPDATE = @MSGMERGE@ --update  MSGINIT = msginit @@ -46,7 +68,7 @@ UPDATEPOFILES = @UPDATEPOFILES@  DUMMYPOFILES = @DUMMYPOFILES@  DISTFILES.common = Makefile.in.in remove-potcdate.sin \  $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) -DISTFILES = $(DISTFILES.common) Makevars POTFILES.in $(DOMAIN).pot stamp-po \ +DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \  $(POFILES) $(GMOFILES) \  $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) @@ -57,7 +79,7 @@ CATALOGS = @CATALOGS@  # Makevars gets inserted here. (Don't remove this line!)  .SUFFIXES: -.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-update +.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update  .po.mo:  	@echo "$(MSGFMT) -c -o $@ $<"; \ @@ -66,19 +88,32 @@ CATALOGS = @CATALOGS@  .po.gmo:  	@lang=`echo $* | sed -e 's,.*/,,'`; \  	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ -	echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ -	cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo +	echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \ +	cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo  .sin.sed:  	sed -e '/^#/d' $< > t-$@  	mv t-$@ $@ -all: all-@USE_NLS@ +all: check-macro-version all-@USE_NLS@  all-yes: stamp-po  all-no: +# Ensure that the gettext macros and this Makefile.in.in are in sync. +check-macro-version: +	@test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ +	  || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \ +	       exit 1; \ +	     } + +# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no +# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because +# we don't want to bother translators with empty POT files). We assume that +# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. +# In this case, stamp-po is a nop (i.e. a phony target). +  # stamp-po is a timestamp denoting the last time at which the CATALOGS have  # been loosely updated. Its purpose is that when a developer or translator  # checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, @@ -88,10 +123,13 @@ all-no:  # $(POFILES) has been designed to not touch files that don't need to be  # changed.  stamp-po: $(srcdir)/$(DOMAIN).pot -	test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) -	@echo "touch stamp-po" -	@echo timestamp > stamp-poT -	@mv stamp-poT stamp-po +	test ! -f $(srcdir)/$(DOMAIN).pot || \ +	  test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) +	@test ! -f $(srcdir)/$(DOMAIN).pot || { \ +	  echo "touch stamp-po" && \ +	  echo timestamp > stamp-poT && \ +	  mv stamp-poT stamp-po; \ +	}  # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',  # otherwise packages like GCC can not be built if only parts of the source @@ -100,11 +138,34 @@ stamp-po: $(srcdir)/$(DOMAIN).pot  # This target rebuilds $(DOMAIN).pot; it is an expensive operation.  # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.  $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed -	$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ -	  --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ -	  --files-from=$(srcdir)/POTFILES.in \ -	  --copyright-holder='$(COPYRIGHT_HOLDER)' \ -	  --msgid-bugs-address='$(MSGID_BUGS_ADDRESS)' +	if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \ +	  package_gnu='GNU '; \ +	else \ +	  package_gnu=''; \ +	fi; \ +	if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ +	  msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ +	else \ +	  msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ +	fi; \ +	case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ +	  '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ +	    $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ +	      --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ +	      --files-from=$(srcdir)/POTFILES.in \ +	      --copyright-holder='$(COPYRIGHT_HOLDER)' \ +	      --msgid-bugs-address="$$msgid_bugs_address" \ +	    ;; \ +	  *) \ +	    $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ +	      --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ +	      --files-from=$(srcdir)/POTFILES.in \ +	      --copyright-holder='$(COPYRIGHT_HOLDER)' \ +	      --package-name="$${package_gnu}@PACKAGE@" \ +	      --package-version='@VERSION@' \ +	      --msgid-bugs-address="$$msgid_bugs_address" \ +	    ;; \ +	esac  	test ! -f $(DOMAIN).po || { \  	  if test -f $(srcdir)/$(DOMAIN).pot; then \  	    sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ @@ -130,16 +191,27 @@ $(srcdir)/$(DOMAIN).pot:  # Note that a PO file is not touched if it doesn't need to be changed.  $(POFILES): $(srcdir)/$(DOMAIN).pot  	@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ -	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ -	echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ -	cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot +	if test -f "$(srcdir)/$${lang}.po"; then \ +	  test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ +	  echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \ +	  cd $(srcdir) \ +	    && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ +	           '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ +	             $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ +	           *) \ +	             $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \ +	         esac; \ +	       }; \ +	else \ +	  $(MAKE) $${lang}.po-create; \ +	fi  install: install-exec install-data  install-exec:  install-data: install-data-@USE_NLS@  	if test "$(PACKAGE)" = "gettext-tools"; then \ -	  $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ +	  $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \  	  for file in $(DISTFILES.common) Makevars.template; do \  	    $(INSTALL_DATA) $(srcdir)/$$file \  			    $(DESTDIR)$(gettextsrcdir)/$$file; \ @@ -152,13 +224,12 @@ install-data: install-data-@USE_NLS@  	fi  install-data-no: all  install-data-yes: all -	$(mkinstalldirs) $(DESTDIR)$(datadir)  	@catalogs='$(CATALOGS)'; \  	for cat in $$catalogs; do \  	  cat=`basename $$cat`; \  	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \  	  dir=$(localedir)/$$lang/LC_MESSAGES; \ -	  $(mkinstalldirs) $(DESTDIR)$$dir; \ +	  $(mkdir_p) $(DESTDIR)$$dir; \  	  if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \  	  $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \  	  echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ @@ -198,19 +269,18 @@ installdirs: installdirs-exec installdirs-data  installdirs-exec:  installdirs-data: installdirs-data-@USE_NLS@  	if test "$(PACKAGE)" = "gettext-tools"; then \ -	  $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ +	  $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \  	else \  	  : ; \  	fi  installdirs-data-no:  installdirs-data-yes: -	$(mkinstalldirs) $(DESTDIR)$(datadir)  	@catalogs='$(CATALOGS)'; \  	for cat in $$catalogs; do \  	  cat=`basename $$cat`; \  	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \  	  dir=$(localedir)/$$lang/LC_MESSAGES; \ -	  $(mkinstalldirs) $(DESTDIR)$$dir; \ +	  $(mkdir_p) $(DESTDIR)$$dir; \  	  for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \  	    if test -n "$$lc"; then \  	      if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ @@ -285,11 +355,14 @@ dist distdir:  	$(MAKE) update-po  	@$(MAKE) dist2  # This is a separate target because 'update-po' must be executed before. -dist2: $(DISTFILES) +dist2: stamp-po $(DISTFILES)  	dists="$(DISTFILES)"; \  	if test "$(PACKAGE)" = "gettext-tools"; then \  	  dists="$$dists Makevars.template"; \  	fi; \ +	if test -f $(srcdir)/$(DOMAIN).pot; then \ +	  dists="$$dists $(DOMAIN).pot stamp-po"; \ +	fi; \  	if test -f $(srcdir)/ChangeLog; then \  	  dists="$$dists ChangeLog"; \  	fi; \ @@ -301,9 +374,9 @@ dist2: $(DISTFILES)  	if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \  	for file in $$dists; do \  	  if test -f $$file; then \ -	    cp -p $$file $(distdir); \ +	    cp -p $$file $(distdir) || exit 1; \  	  else \ -	    cp -p $(srcdir)/$$file $(distdir); \ +	    cp -p $(srcdir)/$$file $(distdir) || exit 1; \  	  fi; \  	done @@ -312,6 +385,13 @@ update-po: Makefile  	test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)  	$(MAKE) update-gmo +# General rule for creating PO files. + +.nop.po-create: +	@lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ +	echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ +	exit 1 +  # General rule for updating PO files.  .nop.po-update: @@ -320,9 +400,15 @@ update-po: Makefile  	tmpdir=`pwd`; \  	echo "$$lang:"; \  	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ -	echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ +	echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \  	cd $(srcdir); \ -	if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ +	if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ +	       '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ +	         $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ +	       *) \ +	         $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ +	     esac; \ +	   }; then \  	  if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \  	    rm -f $$tmpdir/$$lang.new.po; \  	  else \ @@ -343,10 +429,13 @@ $(DUMMYPOFILES):  update-gmo: Makefile $(GMOFILES)  	@: -Makefile: Makefile.in.in $(top_builddir)/config.status @POMAKEFILEDEPS@ +# Recreate Makefile by invoking config.status. Explicitly invoke the shell, +# because execution permission bits may not work on the current file system. +# Use @SHELL@, which is the shell determined by autoconf for the use by its +# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. +Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@  	cd $(top_builddir) \ -	  && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ -	       $(SHELL) ./config.status +	  && @SHELL@ ./config.status $(subdir)/$@.in po-directories  force: diff --git a/scripts/.gitignore b/scripts/.gitignore index eafc4930..fe4616f2 100644 --- a/scripts/.gitignore +++ b/scripts/.gitignore @@ -1,4 +1,5 @@  makepkg +pacman-db-upgrade  pacman-optimize  rankmirrors  repo-add diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 0fde3345..2962b915 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -7,6 +7,7 @@ bin_SCRIPTS = \  OURSCRIPTS = \  	makepkg \ +	pacman-db-upgrade \  	pacman-optimize \  	pkgdelta \  	rankmirrors \ @@ -14,6 +15,7 @@ OURSCRIPTS = \  EXTRA_DIST = \  	makepkg.sh.in \ +	pacman-db-upgrade.sh.in \  	pacman-optimize.sh.in \  	pkgdelta.sh.in \  	rankmirrors.sh.in \ @@ -35,10 +37,10 @@ edit = sed \  	-e 's|@sysconfdir[@]|$(sysconfdir)|g' \  	-e 's|@localstatedir[@]|$(localstatedir)|g' \  	-e 's|@prefix[@]|$(prefix)|g' \ +	-e 's|@BASH_SHELL[@]|$(BASH_SHELL)|g' \  	-e 's|@PACKAGE_VERSION[@]|$(REAL_PACKAGE_VERSION)|g' \  	-e 's|@PACKAGE_BUGREPORT[@]|$(PACKAGE_BUGREPORT)|g' \  	-e 's|@PACKAGE_NAME[@]|$(PACKAGE_NAME)|g' \ -	-e 's|@DBEXT[@]|$(DBEXT)|g' \  	-e 's|@BUILDSCRIPT[@]|$(BUILDSCRIPT)|g' \  	-e 's|@SIZECMD[@]|$(SIZECMD)|g' \  	-e 's|@SEDINPLACE[@]|$(SEDINPLACE)|g' \ @@ -61,6 +63,7 @@ $(OURSCRIPTS): Makefile  	@mv $@.tmp $@  makepkg: $(srcdir)/makepkg.sh.in +pacman-db-upgrade: $(srcdir)/pacman-db-upgrade.sh.in  pacman-optimize: $(srcdir)/pacman-optimize.sh.in  pkgdelta: $(srcdir)/pkgdelta.sh.in  rankmirrors: $(srcdir)/rankmirrors.sh.in diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index ec664692..73e5b906 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -1,4 +1,4 @@ -#!/bin/bash -e +#!@BASH_SHELL@ -e  #  #   makepkg - make packages compatible for use with pacman  #   @configure_input@ @@ -27,7 +27,7 @@  # makepkg uses quite a few external programs during its execution. You  # need to have at least the following installed for makepkg to function: -#   bsdtar (libarchive), bzip2, coreutils, fakeroot, file, find (findutils), +#   awk, bsdtar (libarchive), bzip2, coreutils, fakeroot, file, find (findutils),  #   gettext, grep, gzip, openssl, sed, tput (ncurses), xz  # gettext initialization @@ -45,7 +45,7 @@ srcdir="$startdir/src"  pkgdir="$startdir/pkg"  packaging_options=('strip' 'docs' 'libtool' 'emptydirs' 'zipman' 'purge') -other_options=('ccache' 'distcc' 'makeflags' 'force') +other_options=('ccache' 'distcc' 'buildflags' 'makeflags')  splitpkg_overrides=('pkgver' 'pkgrel' 'pkgdesc' 'arch' 'license' 'groups' \                      'depends' 'optdepends' 'provides' 'conflicts' 'replaces' \                      'backup' 'options' 'install' 'changelog') @@ -71,6 +71,7 @@ SOURCEONLY=0  IGNOREARCH=0  HOLDVER=0  BUILDFUNC=0 +CHECKFUNC=0  PKGFUNC=0  SPLITPKG=0  PKGLIST=() @@ -135,6 +136,8 @@ clean_up() {  	fi  	if (( ! EXIT_CODE && CLEANUP )); then +		local pkg file +  		# If it's a clean exit and -c/--clean has been passed...  		msg "$(gettext "Cleaning up...")"  		rm -rf "$pkgdir" "$srcdir" @@ -143,6 +146,9 @@ clean_up() {  			if (( BUILDFUNC )); then  				rm -f "${pkgbase}-${pkgver}-${pkgrel}-${CARCH}-build.log"*  			fi +			if (( CHECKFUNC )); then +				rm -f "${pkgbase}-${pkgver}-${pkgrel}-${CARCH}-check.log"* +			fi  			if (( PKGFUNC )); then  				rm -f "${pkgbase}-${pkgver}-${pkgrel}-${CARCH}-package.log"*  			elif (( SPLITPKG )); then @@ -153,7 +159,7 @@ clean_up() {  			# clean up dangling symlinks to packages  			for pkg in ${pkgname[@]}; do -				for file in ${pkg}-*-*-${CARCH}${PKGEXT}; do +				for file in ${pkg}-*-*-${CARCH}{${PKGEXT},${SRCEXT}}; do  					if [[ -h $file && ! -e $file ]]; then  						rm -f $file  					fi @@ -308,7 +314,7 @@ get_downloadclient() {  	for i in "${DLAGENTS[@]}"; do  		local handler="${i%%::*}"  		if [[ $proto = $handler ]]; then -			agent="${i##*::}" +			local agent="${i##*::}"  			break  		fi  	done @@ -323,7 +329,7 @@ get_downloadclient() {  	# ensure specified program is installed  	local program="${agent%% *}"  	if [[ ! -x $program ]]; then -		local baseprog=$(basename $program) +		local baseprog="${program##*/}"  		error "$(gettext "The download program %s is not installed.")" "$baseprog"  		plain "$(gettext "Aborting...")"  		exit 1 # $E_MISSING_PROGRAM @@ -370,7 +376,7 @@ download_file() {  run_pacman() {  	local cmd  	printf -v cmd "%q " "$PACMAN" $PACMAN_OPTS "$@" -	if (( ! ASROOT )) && [[ $1 != "-T" && $1 != "-Qq" ]]; then +	if (( ! ASROOT )) && [[ ! $1 =~ ^-(T|Qq)$ ]]; then  		if [ "$(type -p sudo)" ]; then  			cmd="sudo $cmd"  		else @@ -387,6 +393,7 @@ check_deps() {  	# Also, a non-zero return value is not unexpected and we are manually dealing them  	set +E  	local ret=0 +	local pmout  	pmout=$(run_pacman -T "$@") || ret=$?  	set -E  @@ -394,7 +401,7 @@ check_deps() {  		echo "$pmout"  	elif (( ret )); then  		error "$(gettext "'%s' returned a fatal error (%i): %s")" "$PACMAN" "$ret" "$pmout" -		exit 1 +		return "$ret"  	fi  } @@ -434,17 +441,16 @@ resolve_deps() {  	local R_DEPS_SATISFIED=0  	local R_DEPS_MISSING=1 -	local deplist="$(check_deps $*)" -	if [[ -z $deplist ]]; then -		return $R_DEPS_SATISFIED -	fi +	# deplist cannot be declared like this: local deplist=$(foo) +	# Otherwise, the return value will depend on the assignment. +	local deplist +	deplist="$(set +E; check_deps $*)" || exit 1 +	[[ -z $deplist ]] && return $R_DEPS_SATISFIED  	if handle_deps $deplist; then  		# check deps again to make sure they were resolved -		deplist="$(check_deps $*)" +		deplist="$(set +E; check_deps $*)" || exit 1  		[[ -z $deplist ]] && return $R_DEPS_SATISFIED -	elif (( DEP_BIN )); then -		error "$(gettext "Failed to install all missing dependencies.")"  	fi  	msg "$(gettext "Missing Dependencies:")" @@ -543,7 +549,7 @@ generate_checksums() {  	msg "$(gettext "Generating checksums for source files...")"  	plain "" -	if [ ! $(type -p openssl) ]; then +	if ! type -p openssl >/dev/null; then  		error "$(gettext "Cannot find openssl.")"  		exit 1 # $E_MISSING_PROGRAM  	fi @@ -593,7 +599,7 @@ generate_checksums() {  check_checksums() {  	(( ! ${#source[@]} )) && return 0 -	if [ ! $(type -p openssl) ]; then +	if ! type -p openssl >/dev/null; then  		error "$(gettext "Cannot find openssl.")"  		exit 1 # $E_MISSING_PROGRAM  	fi @@ -654,7 +660,7 @@ extract_sources() {  	msg "$(gettext "Extracting Sources...")"  	local netfile  	for netfile in "${source[@]}"; do -		file=$(get_filename "$netfile") +		local file=$(get_filename "$netfile")  		if in_array "$file" ${noextract[@]}; then  			#skip source files in the noextract=() array  			#  these are marked explicitly to NOT be extracted @@ -685,9 +691,12 @@ extract_sources() {  					*) continue;;  				esac ;;  			*) -				# Don't know what to use to extract this file, -				# skip to the next file -				continue;; +				# See if bsdtar can recognize the file +				if bsdtar -tf "$file" -q '*' &>/dev/null; then +					cmd="bsdtar" +				else +					continue +				fi ;;  		esac  		local ret=0 @@ -717,6 +726,7 @@ error_function() {  	fi  	# first exit all subshells, then print the error  	if (( ! BASH_SUBSHELL )); then +		error "$(gettext "A failure occurred in %s().")" "$1"  		plain "$(gettext "Aborting...")"  		remove_deps  	fi @@ -727,7 +737,14 @@ run_function() {  	if [[ -z $1 ]]; then  		return 1  	fi -	pkgfunc="$1" +	local pkgfunc="$1" + +	# clear user-specified buildflags if requested +	if [[ $(check_option buildflags) = "n" ]]; then +		CFLAGS="" +		CXXFLAGS="" +		LDFLAGS="" +	fi  	# clear user-specified makeflags if requested  	if [[ $(check_option makeflags) = "n" ]]; then @@ -743,8 +760,9 @@ run_function() {  	local shellopts=$(shopt -p)  	local ret=0 +	local restoretrap  	if (( LOGGING )); then -		BUILDLOG="${startdir}/${pkgbase}-${pkgver}-${pkgrel}-${CARCH}-$pkgfunc.log" +		local BUILDLOG="${startdir}/${pkgbase}-${pkgver}-${pkgrel}-${CARCH}-$pkgfunc.log"  		if [[ -f $BUILDLOG ]]; then  			local i=1  			while true; do @@ -759,12 +777,12 @@ run_function() {  		# ensure overridden package variables survive tee with split packages  		logpipe=$(mktemp -u "$startdir/logpipe.XXXXXXXX") -		mknod "$logpipe" p +		mkfifo "$logpipe"  		exec 3>&1  		tee "$BUILDLOG" < "$logpipe" &  		exec 1>"$logpipe" 2>"$logpipe"  		restoretrap=$(trap -p ERR) -		trap 'error_function' ERR +		trap 'error_function $pkgfunc' ERR  		$pkgfunc 2>&1  		eval $restoretrap  		sync @@ -772,7 +790,7 @@ run_function() {  		rm "$logpipe"  	else  		restoretrap=$(trap -p ERR) -		trap 'error_function' ERR +		trap 'error_function $pkgfunc' ERR  		$pkgfunc 2>&1  		eval $restoretrap  	fi @@ -798,7 +816,12 @@ run_build() {  	run_function "build"  } +run_check() { +	run_function "check" +} +  run_package() { +	local pkgfunc  	if [[ -z $1 ]]; then  		pkgfunc="package"  	else @@ -865,13 +888,13 @@ tidy_install() {  		done  	fi -	if [[ $(check_option strip) = y && -n ${STRIP_DIRS[*]} ]]; then +	if [[ $(check_option strip) = y ]]; then  		msg2 "$(gettext "Stripping unneeded symbols from binaries and libraries...")"  		# make sure library stripping variables are defined to prevent excess stripping  		[[ -z ${STRIP_SHARED+x} ]] && STRIP_SHARED="-S"  		[[ -z ${STRIP_STATIC+x} ]] && STRIP_STATIC="-S"  		local binary -		find ${STRIP_DIRS[@]} -type f -perm -u+w 2>/dev/null | while read binary ; do +		find . -type f -perm -u+w 2>/dev/null | while read binary ; do  			case "$(file -bi "$binary")" in  				*application/x-sharedlib*)  # Libraries (.so)  					/usr/bin/strip $STRIP_SHARED "$binary";; @@ -905,56 +928,39 @@ write_pkginfo() {  	size="$(( ${size%%[^0-9]*} * 1024 ))"  	msg2 "$(gettext "Generating .PKGINFO file...")" -	echo "# Generated by makepkg $myver" >.PKGINFO +	echo "# Generated by makepkg $myver"  	if (( INFAKEROOT )); then -		echo "# using $(fakeroot -v)" >>.PKGINFO -	fi -	echo "# $(LC_ALL=C date -u)" >>.PKGINFO -	echo "pkgname = $1" >>.PKGINFO -	(( SPLITPKG )) && echo pkgbase = $pkgbase >>.PKGINFO -	echo "pkgver = $pkgver-$pkgrel" >>.PKGINFO -	echo "pkgdesc = $pkgdesc" >>.PKGINFO -	echo "url = $url" >>.PKGINFO -	echo "builddate = $builddate" >>.PKGINFO -	echo "packager = $packager" >>.PKGINFO -	echo "size = $size" >>.PKGINFO -	echo "arch = $PKGARCH" >>.PKGINFO -	if [[ $(check_option force) = "y" ]]; then -		echo "force = true" >> .PKGINFO -	fi +		echo "# using $(fakeroot -v)" +	fi +	echo "# $(LC_ALL=C date -u)" +	echo "pkgname = $1" +	(( SPLITPKG )) && echo pkgbase = $pkgbase +	echo "pkgver = $pkgver-$pkgrel" +	echo "pkgdesc = $pkgdesc" +	[[ $epoch ]] && echo "epoch = $epoch" +	echo "url = $url" +	echo "builddate = $builddate" +	echo "packager = $packager" +	echo "size = $size" +	echo "arch = $PKGARCH" + +	[[ $license ]]    && printf "license = %s\n"   "${license[@]}" +	[[ $replaces ]]   && printf "replaces = %s\n"  "${replaces[@]}" +	[[ $groups ]]     && printf "group = %s\n"     "${groups[@]}" +	[[ $depends ]]    && printf "depend = %s\n"    "${depends[@]}" +	[[ $optdepends ]] && printf "optdepend = %s\n" "${optdepends[@]}" +	[[ $conflicts ]]  && printf "conflict = %s\n"  "${conflicts[@]}" +	[[ $provides ]]   && printf "provides = %s\n"  "${provides[@]}" +	[[ $backup ]]     && printf "backup = %s\n"    "${backup[@]}"  	local it -	for it in "${license[@]}"; do -		echo "license = $it" >>.PKGINFO -	done -	for it in "${replaces[@]}"; do -		echo "replaces = $it" >>.PKGINFO -	done -	for it in "${groups[@]}"; do -		echo "group = $it" >>.PKGINFO -	done -	for it in "${depends[@]}"; do -		echo "depend = $it" >>.PKGINFO -	done -	for it in "${optdepends[@]}"; do -		echo "optdepend = $it" >>.PKGINFO -	done -	for it in "${conflicts[@]}"; do -		echo "conflict = $it" >>.PKGINFO -	done -	for it in "${provides[@]}"; do -		echo "provides = $it" >>.PKGINFO -	done -	for it in "${backup[@]}"; do -		echo "backup = $it" >>.PKGINFO -	done  	for it in "${packaging_options[@]}"; do  		local ret="$(check_option $it)"  		if [[ $ret != "?" ]]; then  			if [[ $ret = y ]]; then -				echo "makepkgopt = $it" >>.PKGINFO +				echo "makepkgopt = $it"  			else -				echo "makepkgopt = !$it" >>.PKGINFO +				echo "makepkgopt = !$it"  			fi  		fi  	done @@ -974,14 +980,18 @@ check_package() {  	local file  	for file in "${backup[@]}"; do  		if [[ ! -f $file ]]; then -			warning "$(gettext "Invalid backup entry : %s")" "$file" +			warning "$(gettext "Backup entry file not in package : %s")" "$file"  		fi  	done -	# check for references to the build directory -	if find "${pkgdir}" -type f -exec grep -q "${srcdir}" {} +; then +	# check for references to the build and package directory +	if find "${pkgdir}" -type f -exec grep -q -I "${srcdir}" {} +; then  		warning "$(gettext "Package contains reference to %s")" "\$srcdir"  	fi +	if find "${pkgdir}" -type f -exec grep -q -I "${pkgdir}" {} +; then +		warning "$(gettext "Package contains reference to %s")" "\$pkgdir" +	fi +  }  create_package() { @@ -996,6 +1006,7 @@ create_package() {  	cd "$pkgdir"  	msg "$(gettext "Creating package...")" +	local nameofpkg  	if [[ -z $1 ]]; then  		nameofpkg="$pkgname"  	else @@ -1008,62 +1019,61 @@ create_package() {  		PKGARCH=$CARCH  	fi -	write_pkginfo $nameofpkg +	write_pkginfo $nameofpkg > .PKGINFO  	local comp_files=".PKGINFO" -	# check for an install script -	if [[ -n $install ]]; then -		msg2 "$(gettext "Adding install script...")" -		cp "$startdir/$install" .INSTALL -		chmod 644 .INSTALL -		comp_files="$comp_files .INSTALL" -	fi - -	# do we have a changelog? -	if [[ -n $changelog ]]; then -		msg2 "$(gettext "Adding package changelog...")" -		cp "$startdir/$changelog" .CHANGELOG -		chmod 644 .CHANGELOG -		comp_files="$comp_files .CHANGELOG" -	fi +	# check for changelog/install files +	for i in 'changelog' 'install'; do +		orig=${!i} +		dest=$(tr '[:lower:]' '[:upper:]' <<<".$i") + +		if [[ -n $orig ]]; then +			msg2 "$(gettext "Adding %s file...")" "$i" +			cp "$startdir/$orig" "$dest" +			chmod 644 "$dest" +			comp_files+=" $dest" +		fi +	done  	# tar it up  	msg2 "$(gettext "Compressing package...")" +	local EXT  	case "$PKGEXT" in  		*tar.gz)  EXT=${PKGEXT%.gz} ;;  		*tar.bz2) EXT=${PKGEXT%.bz2} ;;  		*tar.xz)  EXT=${PKGEXT%.xz} ;; +		*tar)     EXT=${PKGEXT} ;;  		*) warning "$(gettext "'%s' is not a valid archive extension.")" \  		"$PKGEXT" ; EXT=$PKGEXT ;;  	esac -	local tar_file="$PKGDEST/${nameofpkg}-${pkgver}-${pkgrel}-${PKGARCH}${EXT}" -	local pkg_file="$PKGDEST/${nameofpkg}-${pkgver}-${pkgrel}-${PKGARCH}${PKGEXT}" +	local pkg_file="$PKGDEST/${nameofpkg}-${pkgver}-${pkgrel}-${PKGARCH}${PKGEXT}"  	local ret=0  	# when fileglobbing, we want * in an empty directory to expand to  	# the null string rather than itself  	shopt -s nullglob -	bsdtar -cf - $comp_files * > "$tar_file" || ret=$? -	shopt -u nullglob +	# TODO: Maybe this can be set globally for robustness +	shopt -s -o pipefail +	bsdtar -cf - $comp_files * | +	case "$PKGEXT" in +	    *tar.gz)  gzip -c -f -n ;; +	    *tar.bz2) bzip2 -c -f ;; +	    *tar.xz)  xz -c -z - ;; +	    *tar)     cat ;; +	esac > ${pkg_file} || ret=$? -	if (( ! ret )); then -		case "$PKGEXT" in -			*tar.gz)  gzip -f -n "$tar_file" ;; -			*tar.bz2) bzip2 -f "$tar_file" ;; -			*tar.xz)  xz -z -f "$tar_file" ;; -		esac -		ret=$? -	fi +	shopt -u nullglob +	shopt -u -o pipefail  	if (( ret )); then  		error "$(gettext "Failed to create package file.")"  		exit 1 # TODO: error code  	fi -	if (( ! ret )) && [[ "$PKGDEST" != "${startdir}" ]]; then +	if (( ! ret )) && [[ ! "$PKGDEST" -ef "${startdir}" ]]; then  		ln -sf "${pkg_file}" "${pkg_file/$PKGDEST/$startdir}"  		ret=$?  	fi @@ -1129,6 +1139,7 @@ create_srcpackage() {  		*tar.gz)  TAR_OPT="z" ;;  		*tar.bz2) TAR_OPT="j" ;;  		*tar.xz)  TAR_OPT="J" ;; +		*tar)     TAR_OPT=""  ;;  		*) warning "$(gettext "'%s' is not a valid archive extension.")" \  		"$SRCEXT" ;;  	esac @@ -1142,6 +1153,16 @@ create_srcpackage() {  		error "$(gettext "Failed to create source package file.")"  		exit 1 # TODO: error code  	fi + +       if (( ! ret )) && [[ ! "$SRCPKGDEST" -ef "${startdir}" ]]; then +           ln -sf "${pkg_file}" "${pkg_file/$SRCPKGDEST/$startdir}" +           ret=$? +       fi + +       if (( ret )); then +           warning "$(gettext "Failed to create symlink to source package file.")" +       fi +  	cd "${startdir}"  	rm -rf "${srclinks}"  } @@ -1155,12 +1176,12 @@ install_package() {  		msg "$(gettext "Installing %s package group with %s -U...")" "$pkgbase" "$PACMAN"  	fi -	local pkglist +	local pkg pkglist  	for pkg in ${pkgname[@]}; do  		if [[ -f $PKGDEST/${pkg}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT} ]]; then -			pkglist="${pkglist} $PKGDEST/${pkg}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}" +			pkglist+=" $PKGDEST/${pkg}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}"  		else -			pkglist="${pkglist} $PKGDEST/${pkg}-${pkgver}-${pkgrel}-any${PKGEXT}" +			pkglist+=" $PKGDEST/${pkg}-${pkgver}-${pkgrel}-any${PKGEXT}"  		fi  	done @@ -1172,22 +1193,16 @@ install_package() {  check_sanity() {  	# check for no-no's in the build script -	if [[ -z $pkgname ]]; then -		error "$(gettext "%s is not allowed to be empty.")" "pkgname" -		return 1 -	fi -	if [[ -z $pkgver ]]; then -		error "$(gettext "%s is not allowed to be empty.")" "pkgver" -		return 1 -	fi -	if [[ -z $pkgrel ]]; then -		error "$(gettext "%s is not allowed to be empty.")" "pkgrel" -		return 1 -	fi +	local i +	for i in 'pkgname' 'pkgrel' 'pkgver'; do +		if [[ -z ${!i} ]]; then +			error "$(gettext "%s is not allowed to be empty.")" "$i" +			return 1 +		fi +	done -	local name -	for name in "${pkgname[@]}"; do -		if [[ ${name:0:1} = "-" ]]; then +	for i in "${pkgname[@]}"; do +		if [[ ${i:0:1} = "-" ]]; then  			error "$(gettext "%s is not allowed to start with a hyphen.")" "pkgname"  			return 1  		fi @@ -1206,6 +1221,11 @@ check_sanity() {  		return 1  	fi +	if [[ ! $epoch =~ ^[0-9]*$ ]]; then +		error "$(gettext "%s must be an integer.")" "epoch" +		return 1 +	fi +  	if [[ $arch != 'any' ]]; then  		if ! in_array $CARCH ${arch[@]}; then  			if (( ! IGNOREARCH )); then @@ -1217,31 +1237,33 @@ check_sanity() {  		fi  	fi -	local provide -	for provide in ${provides[@]}; do -		if [[ $provide != ${provide//</} || $provide != ${provide//>/} ]]; then +	local provides_list +	eval $(awk '/^[[:space:]]*provides=/,/\)/' "$BUILDFILE" | sed "s/provides=/provides_list+=/") +	for i in ${provides_list[@]}; do +		if [[ $i != ${i//</} || $i != ${i//>/} ]]; then  			error "$(gettext "Provides array cannot contain comparison (< or >) operators.")"  			return 1  		fi  	done -	local file -	for file in "${backup[@]}"; do -		if [[ ${file:0:1} = "/" ]]; then -			error "$(gettext "Invalid backup entry : %s")" "$file" +	local backup_list +	eval $(awk '/^[[:space:]]*backup=/,/\)/' "$BUILDFILE" | sed "s/backup=/backup_list+=/") +	for i in "${backup_list[@]}"; do +		if [[ ${i:0:1} = "/" ]]; then +			error "$(gettext "Backup entry should not contain leading slash : %s")" "$i"  			return 1  		fi  	done -	local optdepend -	for optdepend in "${optdepends[@]}"; do -		pkg=${optdepend%%:*} -		if [[ ! $pkg =~ ^[[:alnum:]\>\<\=\.\+\_\-]*$ ]]; then -			error "$(gettext "Invalid syntax for optdepend : '%s'")" "$optdepend" +	local optdepends_list +	eval $(awk '/^[[:space:]]*optdepends=/,/\)/' "$BUILDFILE" | sed "s/optdepends=/optdepends_list+=/") +	for i in "${optdepends_list[@]}"; do +		local pkg=${i%%:*} +		if [[ ! $pkg =~ ^[[:alnum:]\>\<\=\.\+\_\-]+$ ]]; then +			error "$(gettext "Invalid syntax for optdepend : '%s'")" "$i"  		fi  	done -	local i  	for i in 'changelog' 'install'; do  		local filelist=$(sed -n "s/^[[:space:]]*$i=//p" "$BUILDFILE")   		local file @@ -1256,17 +1278,18 @@ check_sanity() {  	done  	local valid_options=1 -	local opt known kopt -	for opt in ${options[@]}; do +	local known kopt options_list +	eval $(awk '/^[[:space:]]*options=/,/\)/' "$BUILDFILE" | sed "s/options=/options_list+=/") +	for i in ${options_list[@]}; do  		known=0  		# check if option matches a known option or its inverse  		for kopt in ${packaging_options[@]} ${other_options[@]}; do -			if [[ ${opt} = ${kopt} || ${opt} = "!${kopt}" ]]; then +			if [[ ${i} = ${kopt} || ${i} = "!${kopt}" ]]; then  				known=1  			fi  		done  		if (( ! known )); then -			error "$(gettext "options array contains unknown option '%s'")" "$opt" +			error "$(gettext "options array contains unknown option '%s'")" "$i"  			valid_options=0  		fi  	done @@ -1275,22 +1298,20 @@ check_sanity() {  	fi  	if (( ${#pkgname[@]} > 1 )); then -		for pkg in ${pkgname[@]}; do -			if [ "$(type -t package_${pkg})" != "function" ]; then -				error "$(gettext "missing package function for split package '%s'")" "$pkg" +		for i in ${pkgname[@]}; do +			if ! declare -f package_${i} >/dev/null; then +				error "$(gettext "missing package function for split package '%s'")" "$i"  				return 1  			fi  		done  	fi -	if [[ -n "${PKGLIST[@]}" ]]; then -		for pkg in ${PKGLIST[@]}; do -			if ! in_array $pkg ${pkgname[@]}; then -				error "$(gettext "requested package %s is not provided in %s")" "$pkg" "$BUILDFILE" -				return 1 -			fi -		done -	fi +	for i in ${PKGLIST[@]}; do +		if ! in_array $i ${pkgname[@]}; then +			error "$(gettext "requested package %s is not provided in %s")" "$i" "$BUILDFILE" +			return 1 +		fi +	done  	return 0  } @@ -1313,27 +1334,27 @@ devel_check() {  		# Also do a brief check to make sure we have the VCS tool available.  		oldpkgver=$pkgver  		if [[ -n ${_darcstrunk} && -n ${_darcsmod} ]] ; then -			[ $(type -p darcs) ] || return 0 +			type -p darcs >/dev/null || return 0  			msg "$(gettext "Determining latest darcs revision...")"  			newpkgver=$(date +%Y%m%d)  		elif [[ -n ${_cvsroot} && -n ${_cvsmod} ]] ; then -			[ $(type -p cvs) ] || return 0 +			type -p cvs >/dev/null || return 0  			msg "$(gettext "Determining latest cvs revision...")"  			newpkgver=$(date +%Y%m%d)  		elif [[ -n ${_gitroot} && -n ${_gitname} ]] ; then -			[ $(type -p git) ] || return 0 +			type -p git >/dev/null || return 0  			msg "$(gettext "Determining latest git revision...")"  			newpkgver=$(date +%Y%m%d)  		elif [[ -n ${_svntrunk} && -n ${_svnmod} ]] ; then -			[ $(type -p svn) ] || return 0 +			type -p svn >/dev/null || return 0  			msg "$(gettext "Determining latest svn revision...")"  			newpkgver=$(LC_ALL=C svn info $_svntrunk | sed -n 's/^Last Changed Rev: \([0-9]*\)$/\1/p')  		elif [[ -n ${_bzrtrunk} && -n ${_bzrmod} ]] ; then -			[ $(type -p bzr) ] || return 0 +			type -p bzr >/dev/null || return 0  			msg "$(gettext "Determining latest bzr revision...")"  			newpkgver=$(bzr revno ${_bzrtrunk})  		elif [[ -n ${_hgroot} && -n ${_hgrepo} ]] ; then -			[ $(type -p hg) ] || return 0 +			type -p hg >/dev/null || return 0  			msg "$(gettext "Determining latest hg revision...")"  			if [[ -d ./src/$_hgrepo ]] ; then  				cd ./src/$_hgrepo @@ -1380,15 +1401,17 @@ devel_update() {  }  backup_package_variables() { +	local var  	for var in ${splitpkg_overrides[@]}; do -		indirect="${var}_backup" +		local indirect="${var}_backup"  		eval "${indirect}=(\"\${$var[@]}\")"  	done  }  restore_package_variables() { +	local var  	for var in ${splitpkg_overrides[@]}; do -		indirect="${var}_backup" +		local indirect="${var}_backup"  		if [[ -n ${!indirect} ]]; then  			eval "${var}=(\"\${$indirect[@]}\")"  		else @@ -1397,12 +1420,43 @@ restore_package_variables() {  	done  } +run_split_packaging() { +	local pkgname_backup=${pkgname[@]} +	for pkgname in ${pkgname_backup[@]}; do +		pkgdir="$pkgdir/$pkgname" +		mkdir -p "$pkgdir" +		chmod a-s "$pkgdir" +		backup_package_variables +		run_package $pkgname +		tidy_install +		create_package $pkgname +		restore_package_variables +		pkgdir="${pkgdir%/*}" +	done +	pkgname=${pkgname_backup[@]} +} + +# Canonicalize a directory path if it exists +canonicalize_path() { +	local path="$1"; + +	if [[ -d $path ]]; then +		( +			cd "$path" +			pwd -P +		) +	else +		echo "$path" +	fi +} +  # getopt like parser  parse_options() {  	local short_options=$1; shift;  	local long_options=$1; shift;  	local ret=0;  	local unused_options="" +	local i  	while [[ -n $1 ]]; do  		if [[ ${1:0:2} = '--' ]]; then @@ -1438,7 +1492,7 @@ parse_options() {  		elif [[ ${1:0:1} = '-' ]]; then  			for ((i=1; i<${#1}; i++)); do  				if [[ $short_options =~ ${1:i:1} ]]; then -					if [[ $short_options =~ "${1:i:1}:" ]]; then +					if [[ $short_options =~ ${1:i:1}: ]]; then  						if [[ -n ${1:$i+1} ]]; then  							printf ' -%s' "${1:i:1}"  							printf " '%s'" "${1:$i+1}" @@ -1508,8 +1562,10 @@ usage() {  	echo "$(gettext "  -s, --syncdeps   Install missing dependencies with pacman")"  	echo "$(gettext "  --allsource      Generate a source-only tarball including downloaded sources")"  	echo "$(gettext "  --asroot         Allow makepkg to run as root user")" +	printf "$(gettext "  --check          Run the check() function in the %s")\n" "$BUILDSCRIPT"  	printf "$(gettext "  --config <file>  Use an alternate config file (instead of '%s')")\n" "$confdir/makepkg.conf" -	echo "$(gettext "  --holdver        Prevent automatic version bumping for development PKGBUILDs")" +	printf "$(gettext "  --holdver        Prevent automatic version bumping for development %ss")\n" "$BUILDSCRIPT" +	printf "$(gettext "  --nocheck        Do not run the check() function in the %s")\n" "$BUILDSCRIPT"  	echo "$(gettext "  --pkg <list>     Only build listed packages from a split package")"  	echo "$(gettext "  --skipinteg      Do not fail when integrity checks are missing")"  	echo "$(gettext "  --source         Generate a source-only tarball without downloaded sources")" @@ -1535,7 +1591,7 @@ There is NO WARRANTY, to the extent permitted by law.\n")"  # PROGRAM START  # determine whether we have gettext; make it a no-op if we do not -if [ ! $(type -t gettext) ]; then +if ! type -p gettext >/dev/null; then  	gettext() {  		echo "$@"  	} @@ -1545,12 +1601,12 @@ ARGLIST=("$@")  # Parse Command Line Options.  OPT_SHORT="AcCdefFghiLmop:rRsV" -OPT_LONG="allsource,asroot,ignorearch,clean,cleancache,nodeps" -OPT_LONG="$OPT_LONG,noextract,force,forcever:,geninteg,help,holdver" -OPT_LONG="$OPT_LONG,install,log,nocolor,nobuild,pkg:,rmdeps,repackage,skipinteg" -OPT_LONG="$OPT_LONG,source,syncdeps,version,config:" +OPT_LONG="allsource,asroot,ignorearch,check,clean,cleancache,nodeps" +OPT_LONG+=",noextract,force,forcever:,geninteg,help,holdver" +OPT_LONG+=",install,log,nocolor,nobuild,nocheck,pkg:,rmdeps" +OPT_LONG+=",repackage,skipinteg,source,syncdeps,version,config:"  # Pacman Options -OPT_LONG="$OPT_LONG,noconfirm,noprogressbar" +OPT_LONG+=",noconfirm,noprogressbar"  OPT_TEMP="$(parse_options $OPT_SHORT $OPT_LONG "$@" || echo 'PARSE_OPTIONS FAILED')"  if [[ $OPT_TEMP = *'PARSE_OPTIONS FAILED'* ]]; then  	# This is a small hack to stop the script bailing with 'set -e' @@ -1562,8 +1618,8 @@ unset OPT_SHORT OPT_LONG OPT_TEMP  while true; do  	case "$1" in  		# Pacman Options -		--noconfirm)      PACMAN_OPTS="$PACMAN_OPTS --noconfirm" ;; -		--noprogressbar)  PACMAN_OPTS="$PACMAN_OPTS --noprogressbar" ;; +		--noconfirm)      PACMAN_OPTS+=" --noconfirm" ;; +		--noprogressbar)  PACMAN_OPTS+=" --noprogressbar" ;;  		# Makepkg Options  		--allsource)      SOURCEONLY=2 ;; @@ -1571,6 +1627,7 @@ while true; do  		-A|--ignorearch)  IGNOREARCH=1 ;;  		-c|--clean)       CLEANUP=1 ;;  		-C|--cleancache)  CLEANCACHE=1 ;; +		--check)          RUN_CHECK='y' ;;  		--config)         shift; MAKEPKG_CONF=$1 ;;  		-d|--nodeps)      NODEPS=1 ;;  		-e|--noextract)   NOEXTRACT=1 ;; @@ -1583,6 +1640,7 @@ while true; do  		-i|--install)     INSTALL=1 ;;  		-L|--log)         LOGGING=1 ;;  		-m|--nocolor)     USE_COLOR='n' ;; +		--nocheck)        RUN_CHECK='n' ;;  		-o|--nobuild)     NOBUILD=1 ;;  		-p)               shift; BUILDFILE=$1 ;;  		--pkg)            shift; PKGLIST=($1) ;; @@ -1601,10 +1659,10 @@ while true; do  	shift  done -#preserve environment variables -_PKGDEST=${PKGDEST} -_SRCDEST=${SRCDEST} -_SRCPKGDEST=${SRCPKGDEST} +# preserve environment variables and canonicalize path +[[ -n ${PKGDEST} ]] && _PKGDEST=$(canonicalize_path ${PKGDEST}) +[[ -n ${SRCDEST} ]] && _SRCDEST=$(canonicalize_path ${SRCDEST}) +[[ -n ${SRCPKGDEST} ]] && _SRCPKGDEST=$(canonicalize_path ${SRCPKGDEST})  # default config is makepkg.conf  MAKEPKG_CONF=${MAKEPKG_CONF:-$confdir/makepkg.conf} @@ -1638,12 +1696,12 @@ if [[ -t 2 && ! $USE_COLOR = "n" && $(check_buildenv color) = "y" ]]; then  		RED="${BOLD}$(tput setaf 1)"  		YELLOW="${BOLD}$(tput setaf 3)"  	else -		ALL_OFF="\033[1;0m" -		BOLD="\033[1;1m" -		BLUE="${BOLD}\033[1;34m" -		GREEN="${BOLD}\033[1;32m" -		RED="${BOLD}\033[1;31m" -		YELLOW="${BOLD}\033[1;33m" +		ALL_OFF="\e[1;0m" +		BOLD="\e[1;1m" +		BLUE="${BOLD}\e[1;34m" +		GREEN="${BOLD}\e[1;32m" +		RED="${BOLD}\e[1;31m" +		YELLOW="${BOLD}\e[1;33m"  	fi  fi  readonly ALL_OFF BOLD BLUE GREEN RED YELLOW @@ -1677,7 +1735,7 @@ fi  if (( CLEANCACHE )); then  	#fix flyspray feature request #5223 -	if [[ -n $SRCDEST && $SRCDEST != $startdir ]]; then +	if [[ -n $SRCDEST && ! $SRCDEST -ef "${startdir}" ]]; then  		msg "$(gettext "Cleaning up ALL files from %s.")" "$SRCDEST"  		echo -n "$(gettext "    Are you sure you wish to do this? ")"  		echo -n "$(gettext "[y/N]")" @@ -1719,7 +1777,7 @@ if (( ! INFAKEROOT )); then  		plain "$(gettext "Please rerun makepkg without the --asroot flag.")"  		exit 1 # $E_USER_ABORT  	elif [[ $(check_buildenv fakeroot) = "y" ]] && (( EUID > 0 )); then -		if [ ! $(type -p fakeroot) ]; then +		if ! type -p fakeroot >/dev/null; then  			error "$(gettext "Fakeroot must be installed if using the 'fakeroot' option")"  			plain "$(gettext "in the BUILDENV array in %s.")" "$MAKEPKG_CONF"  			exit 1 @@ -1739,7 +1797,7 @@ fi  # check for sudo if we will need it during makepkg execution  if (( ! ( ASROOT || INFAKEROOT ) && ( DEP_BIN || RMDEPS || INSTALL ) )); then -	if [ ! "$(type -p sudo)" ]; then +	if ! type -p sudo >/dev/null; then  		warning "$(gettext "Sudo can not be found. Will use su to acquire root privileges.")"  	fi  fi @@ -1795,14 +1853,18 @@ if (( ${#pkgname[@]} > 1 )); then  fi  # test for available PKGBUILD functions -# The exclamation mark is required here to avoid triggering the ERR trap when -# a tested function does not exist. -if [[ $(! type -t build) = "function" ]]; then +if declare -f build >/dev/null; then  	BUILDFUNC=1  fi -if [ "$(type -t package)" = "function" ]; then +if declare -f check >/dev/null; then +	# "Hide" check() function if not going to be run +	if [[ $RUN_CHECK = 'y' || (! $(check_buildenv check) = "n" &&  ! $RUN_CHECK = "n") ]]; then +		CHECKFUNC=1 +	fi +fi +if declare -f package >/dev/null; then  	PKGFUNC=1 -elif [ $SPLITPKG -eq 0 -a "$(type -t package_${pkgname})" = "function" ]; then +elif [[ $SPLITPKG -eq 0 ]] && declare -f package_${pkgname} >/dev/null; then  	SPLITPKG=1  fi @@ -1863,6 +1925,7 @@ if (( INFAKEROOT )); then  			if (( ! REPKG )); then  				if (( BUILDFUNC )); then  					run_build +					(( CHECKFUNC )) && run_check  					tidy_install  				fi  			else @@ -1875,17 +1938,7 @@ if (( INFAKEROOT )); then  		fi  		create_package  	else -		for pkg in ${pkgname[@]}; do -			pkgdir="$pkgdir/$pkg" -			mkdir -p "$pkgdir" -			chmod a-s "$pkgdir" -			backup_package_variables -			run_package $pkg -			tidy_install -			create_package $pkg -			restore_package_variables -			pkgdir="${pkgdir%/*}" -		done +		run_split_packaging  	fi  	msg "$(gettext "Leaving fakeroot environment.")" @@ -1911,20 +1964,24 @@ if (( NODEPS || ( (NOBUILD || REPKG) && !DEP_BIN ) )); then  	if (( NODEPS || ( REPKG && PKGFUNC ) )); then  		warning "$(gettext "Skipping dependency checks.")"  	fi -elif [ $(type -p "${PACMAN%% *}") ]; then +elif type -p "${PACMAN%% *}" >/dev/null; then  	if (( RMDEPS )); then -		original_pkglist=($(run_pacman -Qq | sort))    # required by remove_dep +		original_pkglist=($(run_pacman -Qq))    # required by remove_dep  	fi  	deperr=0 -	msg "$(gettext "Checking Runtime Dependencies...")" +	msg "$(gettext "Checking runtime dependencies...")"  	resolve_deps ${depends[@]} || deperr=1 -	msg "$(gettext "Checking Buildtime Dependencies...")" +	msg "$(gettext "Checking buildtime dependencies...")"  	resolve_deps ${makedepends[@]} || deperr=1 +	if (( CHECKFUNC )); then +		resolve_deps ${checkdepends[@]} || deperr=1 +	fi +  	if (( RMDEPS )); then -		current_pkglist=($(run_pacman -Qq | sort))    # required by remove_deps +		current_pkglist=($(run_pacman -Qq))    # required by remove_deps  	fi  	if (( deperr )); then @@ -1988,6 +2045,7 @@ else  		if (( ! REPKG )); then  			devel_update  			(( BUILDFUNC )) && run_build +			(( CHECKFUNC )) && run_check  		fi  		if (( ! SPLITPKG )); then  			if (( PKGFUNC )); then @@ -2003,22 +2061,13 @@ else  			fi  			create_package  		else -			for pkg in ${pkgname[@]}; do -				pkgdir="$pkgdir/$pkg" -				mkdir -p "$pkgdir" -				chmod a-s "$pkgdir" -				backup_package_variables -				run_package $pkg -				tidy_install -				create_package $pkg -				restore_package_variables -				pkgdir="${pkgdir%/*}" -			done +			run_split_packaging  		fi  	else  		if (( ! REPKG && ( PKGFUNC || SPLITPKG ) )); then  			devel_update  			(( BUILDFUNC )) && run_build +			(( CHECKFUNC )) && run_check  			cd "$startdir"  		fi diff --git a/scripts/pacman-db-upgrade.sh.in b/scripts/pacman-db-upgrade.sh.in new file mode 100644 index 00000000..4e6194fa --- /dev/null +++ b/scripts/pacman-db-upgrade.sh.in @@ -0,0 +1,121 @@ +#!@BASH_SHELL@ -e +# +#   pacman-db-upgrade - upgrade the local pacman db to a newer format +#   @configure_input@ +# +#   Copyright (c) 2010 Pacman Development Team <pacman-dev@archlinux.org> +# +#   This program 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, see <http://www.gnu.org/licenses/>. +# + +# gettext initialization +export TEXTDOMAIN='pacman' +export TEXTDOMAINDIR='@localedir@' + +myver='@PACKAGE_VERSION@' + +eval $(awk '/DBPath/ {print $1$2$3}' @sysconfdir@/pacman.conf) +dbroot="${DBPath:-@localstatedir@/lib/pacman/}" + +msg() { +	local mesg=$1; shift +	printf "==> ${mesg}\n" "$@" >&2 +} + +error () { +	local mesg=$1; shift +	printf "==> ERROR: ${mesg}\n" "$@" >&2 +} +usage() { +	printf "pacman-db-upgrade (pacman) %s\n\n" "$myver" +	printf "$(gettext "Usage: %s [pacman_db_root]")\n\n" "$0" +} + +version() { +	printf "pacman-db-upgrade (pacman) %s\n" "$myver" +	printf "$(gettext "\ +Copyright (c) 2010 Pacman Development Team <pacman-dev@archlinux.org>.\n\ +This is free software; see the source for copying conditions.\n\ +There is NO WARRANTY, to the extent permitted by law.\n")" +} + +die() { +	error "$@" +	exit 1 +} + +die_r() { +	rm -f "$lockfile" +	die "$@" +} + +# PROGRAM START + +# determine whether we have gettext; make it a no-op if we do not +if ! type gettext &>/dev/null; then +	gettext() { +		echo "$@" +	} +fi + +if [[ $1 = "-h" || $1 = "--help" ]]; then +	usage +	exit 0 +fi + +if [[ $1 = "-V" || $1 = "--version" ]]; then +	version +	exit 0 +fi + +if [[ -n $1 ]]; then +	dbroot="$1" +fi + +if [[ ! -d $dbroot || ! -d $dbroot/local ]]; then +	die "$(gettext "%s does not exist or is not a directory.")" "$dbroot" +fi + +if [[ ! -w $dbroot ]]; then +	die "$(gettext "You must have correct permissions to upgrade the database.")" +fi + +# strip any trailing slash from our dbroot +dbroot="${dbroot%/}" +# form the path to our lockfile location +lockfile="${dbroot}/db.lck" + +# make sure pacman isn't running +if [[ -f $lockfile ]]; then +	die "$(gettext "Pacman lock file was found. Cannot run while pacman is running.")" +fi +# do not let pacman run while we do this +touch "$lockfile" + +# pacman-3.4 to 3.5 upgrade - merge depends into desc +if [[ $(find "$dbroot"/local -name depends) ]]; then +	msg "$(gettext "Pre-3.5 database format detected - upgrading...")" +	for i in "$dbroot"/local/*; do +		if [[ -f "$i"/depends ]]; then +			cat "$i"/depends >> "$i"/desc +			rm "$i"/depends +		fi +	done +	msg "$(gettext "Done.")" +fi + +# remove the lock file +rm -f "$lockfile" + +# vim: set ts=2 sw=2 noet: diff --git a/scripts/pacman-optimize.sh.in b/scripts/pacman-optimize.sh.in index 78b2345b..2404291e 100644 --- a/scripts/pacman-optimize.sh.in +++ b/scripts/pacman-optimize.sh.in @@ -1,4 +1,4 @@ -#!/bin/bash +#!@BASH_SHELL@  #  #   pacman-optimize  #   @configure_input@ @@ -25,7 +25,9 @@ export TEXTDOMAIN='pacman'  export TEXTDOMAINDIR='@localedir@'  myver='@PACKAGE_VERSION@' -dbroot='@localstatedir@/lib/pacman/' + +eval $(awk '/DBPath/ {print $1$2$3}' @sysconfdir@/pacman.conf) +dbroot="${DBPath:-@localstatedir@/lib/pacman/}"  msg() {  	local mesg=$1; shift @@ -99,7 +101,7 @@ if ! type diff >/dev/null 2>&1; then  	die "$(gettext "diff tool was not found, please install diffutils.")"  fi -if [[ ! -d $dbroot ]]; then +if [[ ! -d $dbroot || ! -d $dbroot/local ]]; then  	die "$(gettext "%s does not exist or is not a directory.")" "$dbroot"  fi diff --git a/scripts/pkgdelta.sh.in b/scripts/pkgdelta.sh.in index 1550fa10..6bc3f5da 100644 --- a/scripts/pkgdelta.sh.in +++ b/scripts/pkgdelta.sh.in @@ -1,4 +1,4 @@ -#!/bin/bash +#!@BASH_SHELL@  #  #   pkgdelta - create delta files for use with pacman and repo-add  #   @configure_input@ diff --git a/scripts/rankmirrors.sh.in b/scripts/rankmirrors.sh.in index b0dc1ab7..64d5a73c 100644 --- a/scripts/rankmirrors.sh.in +++ b/scripts/rankmirrors.sh.in @@ -1,4 +1,4 @@ -#!/bin/bash +#!@BASH_SHELL@  #  #   rankmirrors - read a list of mirrors from a file and rank them by speed  #   @configure_input@ @@ -25,7 +25,7 @@ usage() {  	echo "Usage: rankmirrors [options] MIRRORFILE | URL"  	echo  	echo "Ranks pacman mirrors by their connection and opening speed. Pacman mirror" -	echo "files are located in /etc/pacman.d/. It can also rank one mirror if the URL is" +	echo "files are located in @sysconfdir@/pacman.d/. It can also rank one mirror if the URL is"  	echo "provided."  	echo  	echo "Options:" @@ -85,7 +85,7 @@ getfetchurl() {  	if [[ -z $reponame || $reponame = $replacedurl ]]; then  		echo "fail"  	else -		local fetchurl="${replacedurl}/$reponame@DBEXT@" +		local fetchurl="${replacedurl}/$reponame.db"  		echo "$fetchurl"  	fi  } diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in index 283ad07a..d09d1b48 100644 --- a/scripts/repo-add.sh.in +++ b/scripts/repo-add.sh.in @@ -1,4 +1,4 @@ -#!/bin/bash +#!@BASH_SHELL@  #  #   repo-add - add a package to a given repo database file  #   repo-remove - remove a package entry from a given repo database file @@ -28,6 +28,7 @@ myver='@PACKAGE_VERSION@'  confdir='@sysconfdir@'  QUIET=0 +DELTA=0  REPO_DB_FILE=  LOCKFILE=  CLEAN_LOCK=0 @@ -37,6 +38,7 @@ startdir="$PWD"  umask 0022  msg() { +	(( QUIET )) && return  	local mesg=$1; shift  	printf "==> ${mesg}\n" "$@" >&1  } @@ -60,7 +62,7 @@ error() {  # print usage instructions  usage() {  	printf "repo-add, repo-remove (pacman) %s\n\n" "$myver" -	printf "$(gettext "Usage: repo-add [-q] <path-to-db> <package|delta> ...\n")" +	printf "$(gettext "Usage: repo-add [-d] [-q] <path-to-db> <package|delta> ...\n")"  	printf "$(gettext "Usage: repo-remove [-q] <path-to-db> <packagename|delta> ...\n\n")"  	printf "$(gettext "\  repo-add will update a package database by reading a package file.\n\ @@ -72,6 +74,10 @@ packages to remove can be specified on the command line.\n\n")"  	printf "$(gettext "\  Use the -q/--quiet flag to minimize output to basic messages, warnings,\n\  and errors\n\n")" +	printf "$(gettext "\ +Use the -d/--delta flag to automatically generate and add a delta file\n\ +between the old entry and the new one, if the old package file is found\n\ +next to the new one.\n\n")"  	echo "$(gettext "Example:  repo-add /path/to/repo.db.tar.gz pacman-3.0.0.pkg.tar.gz")"  	echo "$(gettext "Example:  repo-remove /path/to/repo.db.tar.gz kernel26")"  } @@ -127,13 +133,12 @@ db_write_delta()  	pkgentry=$(find_pkgentry $pkgname)  	if [[ -z $pkgentry ]]; then +		error "$(gettext "No database entry for package '%s'.")" "$pkgname"  		return 1  	fi  	deltas="$pkgentry/deltas" -	# create deltas file if it does not already exist  	if [[ ! -f $deltas ]]; then -		msg2 "$(gettext "Creating 'deltas' db entry...")" -		echo -e "%DELTAS%" >>$deltas +		echo -e "%DELTAS%" >$deltas  	fi  	# get md5sum and compressed size of package  	md5sum="$(openssl dgst -md5 "$deltafile")" @@ -144,10 +149,9 @@ db_write_delta()  	newfile=$(xdelta3 printhdr $deltafile | grep "XDELTA filename (output)" | sed 's/.*: *//')  	if grep -q "$oldfile.*$newfile" $deltas; then -		warning "$(gettext "An entry for '%s' already existed")" "$deltafile"  		sed -i.backup "/$oldfile.*$newfile/d" $deltas && rm -f $deltas.backup -		msg2 "$(gettext "Removing existing entry '%s'...")" "$deltafile"  	fi +	msg2 "$(gettext "Adding 'deltas' entry : %s -> %s")" "$oldfile" "$newfile"  	echo ${deltafile##*/} $md5sum $csize $oldfile $newfile >> $deltas  	return 0 @@ -184,7 +188,7 @@ db_write_entry()  {  	# blank out all variables  	local pkgfile="$1" -	local pkgname pkgver pkgdesc csize size md5sum url arch builddate packager force \ +	local pkgname pkgver pkgdesc epoch csize size md5sum url arch builddate packager force \  		_groups _licenses _replaces _depends _conflicts _provides _optdepends  	local OLDIFS="$IFS" @@ -228,6 +232,14 @@ db_write_entry()  	if [[ -d $pkgname-$pkgver ]]; then  		warning "$(gettext "An entry for '%s' already existed")" "$pkgname-$pkgver" +	else +		if [ $DELTA -eq 1 ]; then +			pkgentry=$(find_pkgentry $pkgname) +			if [ -n "$pkgentry" ]; then +				local oldfilename=$(grep -A1 FILENAME $pkgentry/desc | tail -n1) +				local oldfile="$(dirname $1)/$oldfilename" +			fi +		fi  	fi  	# remove an existing entry if it exists, ignore failures @@ -261,6 +273,11 @@ db_write_entry()  	[[ -n $builddate ]] && echo -e "%BUILDDATE%\n$builddate\n" >>desc  	[[ -n $packager ]] && echo -e "%PACKAGER%\n$packager\n" >>desc  	write_list_entry "REPLACES" "$_replaces" "desc" +	# remain backward-compatible for now; put a force entry in the database +	if [[ -n $epoch ]]; then +		echo -e "%EPOCH%\n#epoch\n" >>desc +		echo -e "%FORCE%\n" >>desc +	fi  	[[ -n $force ]] && echo -e "%FORCE%\n" >>desc  	# create depends entry @@ -274,6 +291,16 @@ db_write_entry()  	cd "$startdir" +	# create a delta file +	if [ -n "$oldfilename" -a -f "$oldfile" ]; then +		delta=$(pkgdelta -q $oldfile $1) +		if [ -f "$delta" ]; then +			db_write_delta $delta +		else +			warning "$(gettext "Old package file not found : %s")" "$oldfilename" +		fi +	fi +  	return 0  } # end db_write_entry @@ -446,6 +473,7 @@ success=0  for arg in "$@"; do  	case "$arg" in  		-q|--quiet) QUIET=1;; +		-d|--delta) DELTA=1;;  		*)  			if [[ -z $REPO_DB_FILE ]]; then  				REPO_DB_FILE="$arg" diff --git a/src/pacman/callback.c b/src/pacman/callback.c index f5bf17d1..c8f604fc 100644 --- a/src/pacman/callback.c +++ b/src/pacman/callback.c @@ -26,7 +26,6 @@  #include <sys/time.h>  #include <sys/types.h> /* off_t */  #include <unistd.h> -#include <dirent.h>  #include <wchar.h>  #include <alpm.h> @@ -229,6 +228,11 @@ void cb_trans_evt(pmtransevt_t event, void *data1, void *data2)  		case PM_TRANS_EVT_RETRIEVE_START:  			printf(_(":: Retrieving packages from %s...\n"), (char*)data1);  			break; +		case PM_TRANS_EVT_DISKSPACE_START: +			if(config->noprogressbar) { +				printf(_("checking available disk space...\n")); +			} +			break;  		/* all the simple done events, with fallthrough for each */  		case PM_TRANS_EVT_FILECONFLICTS_DONE:  		case PM_TRANS_EVT_CHECKDEPS_DONE: @@ -237,6 +241,7 @@ void cb_trans_evt(pmtransevt_t event, void *data1, void *data2)  		case PM_TRANS_EVT_INTEGRITY_DONE:  		case PM_TRANS_EVT_DELTA_INTEGRITY_DONE:  		case PM_TRANS_EVT_DELTA_PATCHES_DONE: +		case PM_TRANS_EVT_DISKSPACE_DONE:  			/* nothing */  			break;  	} @@ -262,7 +267,7 @@ void cb_trans_conv(pmtransconv_t event, void *data1, void *data2,  		case PM_TRANS_CONV_CONFLICT_PKG:  			/* data parameters: target package, local package, conflict (strings) */  			/* print conflict only if it contains new information */ -			if(!strcmp(data1, data3) || !strcmp(data2, data3)) { +			if(strcmp(data1, data3) == 0 || strcmp(data2, data3) == 0) {  				*response = noyes(_(":: %s and %s are in conflict. Remove %s?"),  						(char *)data1,  						(char *)data2, @@ -283,11 +288,16 @@ void cb_trans_conv(pmtransconv_t event, void *data1, void *data2,  					namelist = alpm_list_add(namelist,  							(char *)alpm_pkg_get_name(i->data));  				} -				printf(_(":: the following package(s) cannot be upgraded due to " -						"unresolvable dependencies:\n")); +				printf(_n( +							":: The following package cannot be upgraded due to unresolvable dependencies:\n", +							":: The following packages cannot be upgraded due to unresolvable dependencies:\n", +							alpm_list_count(namelist)));  				list_display("     ", namelist); -				*response = noyes(_("\nDo you want to skip the above " -							"package(s) for this upgrade?")); +				printf("\n"); +				*response = noyes(_n( +							"Do you want to skip the above package for this upgrade?", +							"Do you want to skip the above packages for this upgrade?", +							alpm_list_count(namelist)));  				alpm_list_free(namelist);  			}  			break; @@ -342,7 +352,7 @@ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent,  		timediff = get_update_timediff(0);  	} -	if(percent > 0 && percent < 100 && !timediff) { +	if(percent > 0 && percent < 100 && timediff > 0) {  		/* only update the progress bar when  		 * a) we first start  		 * b) we end the progress @@ -371,6 +381,9 @@ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent,  		case PM_TRANS_PROGRESS_CONFLICTS_START:  			opr = _("checking for file conflicts");  			break; +		case PM_TRANS_PROGRESS_DISKSPACE_START: +			opr = _("checking available disk space"); +			break;  		default:  			return;  	} @@ -570,7 +583,7 @@ void cb_dl_progress(const char *filename, off_t file_xfered, off_t file_total)  	fname = strdup(filename);  	/* strip package or DB extension for cleaner look */ -	if((p = strstr(fname, ".pkg.tar.")) || (p = strstr(fname, ".db.tar."))) { +	if((p = strstr(fname, ".pkg")) || (p = strstr(fname, ".db"))) {  			*p = '\0';  	}  	/* In order to deal with characters from all locales, we have to worry diff --git a/src/pacman/deptest.c b/src/pacman/deptest.c index f043c201..82c0cd6f 100644 --- a/src/pacman/deptest.c +++ b/src/pacman/deptest.c @@ -35,16 +35,24 @@  int pacman_deptest(alpm_list_t *targets)  {  	alpm_list_t *i; +	alpm_list_t *deps = NULL; +	pmdb_t *localdb = alpm_option_get_localdb(); + +	for(i = targets; i; i = alpm_list_next(i)) { +		char *target = alpm_list_getdata(i); + +		if(!alpm_find_satisfier(alpm_db_get_pkgcache(localdb), target)) { +			deps = alpm_list_add(deps, target); +		} +	} -	alpm_list_t *deps = alpm_deptest(alpm_option_get_localdb(), targets);  	if(deps == NULL) {  		return(0);  	}  	for(i = deps; i; i = alpm_list_next(i)) { -		const char *dep; +		const char *dep = alpm_list_getdata(i); -		dep = alpm_list_getdata(i);  		printf("%s\n", dep);  	}  	alpm_list_free(deps); diff --git a/src/pacman/package.c b/src/pacman/package.c index 413754c7..ac84a0c7 100644 --- a/src/pacman/package.c +++ b/src/pacman/package.c @@ -189,7 +189,7 @@ void dump_pkg_backups(pmpkg_t *pkg)  				}  				/* if checksums don't match, file has been modified */ -				if (strcmp(md5sum, ptr)) { +				if (strcmp(md5sum, ptr) != 0) {  					printf(_("MODIFIED\t%s\n"), path);  				} else {  					printf(_("Not Modified\t%s\n"), path); diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c index 78407d67..20f44b7d 100644 --- a/src/pacman/pacman.c +++ b/src/pacman/pacman.c @@ -26,8 +26,10 @@  #define PACKAGE_VERSION GIT_VERSION  #endif +#include <ctype.h> /* isspace */  #include <stdlib.h> /* atoi */  #include <stdio.h> +#include <ctype.h> /* isspace */  #include <limits.h>  #include <getopt.h>  #include <string.h> @@ -59,12 +61,52 @@ pmdb_t *db_local;  /* list of targets specified on command line */  static alpm_list_t *pm_targets; +/* Used to sort the options in --help */ +static int options_cmp(const void *p1, const void *p2) +{ +	const char *s1 = p1; +	const char *s2 = p2; + +	if(s1 == s2) return(0); +	if(!s1) return(-1); +	if(!s2) return(1); +	/* First skip all spaces in both strings */ +	while(isspace((unsigned char)*s1)) { +		s1++; +	} +	while(isspace((unsigned char)*s2)) { +		s2++; +	} +	/* If we compare a long option (--abcd) and a short one (-a), +	 * the short one always wins */ +	if(*s1 == '-' && *s2 == '-') { +		s1++; +		s2++; +		if(*s1 == '-' && *s2 == '-') { +			/* two long -> strcmp */ +			s1++; +			s2++; +		} else if(*s2 == '-') { +			/* s1 short, s2 long */ +			return(-1); +		} else if(*s1 == '-') { +			/* s1 long, s2 short */ +			return(1); +		} +		/* two short -> strcmp */ +	} + +	return(strcmp(s1, s2)); +} +  /** Display usage/syntax for the specified operation.   * @param op     the operation code requested   * @param myname basename(argv[0])   */  static void usage(int op, const char * const myname)  { +#define addlist(s) (list = alpm_list_add(list, s)) +	alpm_list_t *list = NULL, *i;  	/* prefetch some strings for usage below, which moves a lot of calls  	 * out of gettext. */  	char const * const str_opt = _("options"); @@ -89,85 +131,87 @@ static void usage(int op, const char * const myname)  		if(op == PM_OP_REMOVE) {  			printf("%s:  %s {-R --remove} [%s] <%s>\n", str_usg, myname, str_opt, str_pkg);  			printf("%s:\n", str_opt); -			printf(_("  -c, --cascade        remove packages and all packages that depend on them\n")); -			printf(_("  -d, --nodeps         skip dependency checks\n")); -			printf(_("  -k, --dbonly         only remove database entries, do not remove files\n")); -			printf(_("  -n, --nosave         remove configuration files as well\n")); -			printf(_("  -s, --recursive      remove dependencies also (that won't break packages)\n" +			addlist(_("  -c, --cascade        remove packages and all packages that depend on them\n")); +			addlist(_("  -n, --nosave         remove configuration files as well\n")); +			addlist(_("  -s, --recursive      remove dependencies also (that won't break packages)\n"  				 "                       (-ss includes explicitly installed dependencies too)\n")); -			printf(_("  -u, --unneeded       remove unneeded packages (that won't break packages)\n")); -			printf(_("      --print          only print the targets instead of performing the operation\n")); -			printf(_("      --print-format <string>\n" -			         "                       specify how the targets should be printed\n")); +			addlist(_("  -u, --unneeded       remove unneeded packages (that won't break packages)\n"));  		} else if(op == PM_OP_UPGRADE) {  			printf("%s:  %s {-U --upgrade} [%s] <%s>\n", str_usg, myname, str_opt, str_file);  			printf("%s:\n", str_opt); -			printf(_("      --asdeps         install packages as non-explicitly installed\n")); -			printf(_("      --asexplicit     install packages as explicitly installed\n")); -			printf(_("  -d, --nodeps         skip dependency checks\n")); -			printf(_("  -f, --force          force install, overwrite conflicting files\n")); -			printf(_("  -k, --dbonly         add database entries, do not install or keep existing files\n")); -			printf(_("      --print          only print the targets instead of performing the operation\n")); -			printf(_("      --print-format <string>\n" -			         "                       specify how the targets should be printed\n"));  		} else if(op == PM_OP_QUERY) {  			printf("%s:  %s {-Q --query} [%s] [%s]\n", str_usg, myname, str_opt, str_pkg);  			printf("%s:\n", str_opt); -			printf(_("  -c, --changelog      view the changelog of a package\n")); -			printf(_("  -d, --deps           list packages installed as dependencies [filter]\n")); -			printf(_("  -e, --explicit       list packages explicitly installed [filter]\n")); -			printf(_("  -g, --groups         view all members of a package group\n")); -			printf(_("  -i, --info           view package information (-ii for backup files)\n")); -			printf(_("  -k, --check          check that the files owned by the package(s) are present\n")); -			printf(_("  -l, --list           list the contents of the queried package\n")); -			printf(_("  -m, --foreign        list installed packages not found in sync db(s) [filter]\n")); -			printf(_("  -o, --owns <file>    query the package that owns <file>\n")); -			printf(_("  -p, --file <package> query a package file instead of the database\n")); -			printf(_("  -s, --search <regex> search locally-installed packages for matching strings\n")); -			printf(_("  -t, --unrequired     list packages not required by any package [filter]\n")); -			printf(_("  -u, --upgrades       list outdated packages [filter]\n")); -			printf(_("  -q, --quiet          show less information for query and search\n")); +			addlist(_("  -c, --changelog      view the changelog of a package\n")); +			addlist(_("  -d, --deps           list packages installed as dependencies [filter]\n")); +			addlist(_("  -e, --explicit       list packages explicitly installed [filter]\n")); +			addlist(_("  -g, --groups         view all members of a package group\n")); +			addlist(_("  -i, --info           view package information (-ii for backup files)\n")); +			addlist(_("  -k, --check          check that the files owned by the package(s) are present\n")); +			addlist(_("  -l, --list           list the contents of the queried package\n")); +			addlist(_("  -m, --foreign        list installed packages not found in sync db(s) [filter]\n")); +			addlist(_("  -o, --owns <file>    query the package that owns <file>\n")); +			addlist(_("  -p, --file <package> query a package file instead of the database\n")); +			addlist(_("  -q, --quiet          show less information for query and search\n")); +			addlist(_("  -s, --search <regex> search locally-installed packages for matching strings\n")); +			addlist(_("  -t, --unrequired     list packages not required by any package [filter]\n")); +			addlist(_("  -u, --upgrades       list outdated packages [filter]\n"));  		} else if(op == PM_OP_SYNC) {  			printf("%s:  %s {-S --sync} [%s] [%s]\n", str_usg, myname, str_opt, str_pkg);  			printf("%s:\n", str_opt); -			printf(_("      --asdeps         install packages as non-explicitly installed\n")); -			printf(_("      --asexplicit     install packages as explicitly installed\n")); -			printf(_("  -c, --clean          remove old packages from cache directory (-cc for all)\n")); -			printf(_("  -d, --nodeps         skip dependency checks\n")); -			printf(_("  -f, --force          force install, overwrite conflicting files\n")); -			printf(_("  -g, --groups         view all members of a package group\n")); -			printf(_("  -i, --info           view package information\n")); -			printf(_("  -l, --list <repo>    view a list of packages in a repo\n")); -			printf(_("  -s, --search <regex> search remote repositories for matching strings\n")); -			printf(_("  -u, --sysupgrade     upgrade installed packages (-uu allows downgrade)\n")); -			printf(_("  -w, --downloadonly   download packages but do not install/upgrade anything\n")); -			printf(_("  -y, --refresh        download fresh package databases from the server\n")); -			printf(_("      --needed         don't reinstall up to date packages\n")); -			printf(_("      --ignore <pkg>   ignore a package upgrade (can be used more than once)\n")); -			printf(_("      --ignoregroup <grp>\n" -			         "                       ignore a group upgrade (can be used more than once)\n")); -			printf(_("      --print          only print the targets instead of performing the operation\n")); -			printf(_("      --print-format <string>\n" -			         "                       specify how the targets should be printed\n")); -			printf(_("  -q, --quiet          show less information for query and search\n")); +			addlist(_("  -c, --clean          remove old packages from cache directory (-cc for all)\n")); +			addlist(_("  -g, --groups         view all members of a package group\n")); +			addlist(_("  -i, --info           view package information\n")); +			addlist(_("  -l, --list <repo>    view a list of packages in a repo\n")); +			addlist(_("  -q, --quiet          show less information for query and search\n")); +			addlist(_("  -s, --search <regex> search remote repositories for matching strings\n")); +			addlist(_("  -u, --sysupgrade     upgrade installed packages (-uu allows downgrade)\n")); +			addlist(_("  -w, --downloadonly   download packages but do not install/upgrade anything\n")); +			addlist(_("  -y, --refresh        download fresh package databases from the server\n")); +			addlist(_("      --needed         don't reinstall up to date packages\n"));  		} else if (op == PM_OP_DATABASE) {  			printf("%s:  %s {-D --database} <%s> <%s>\n", str_usg, myname, str_opt, str_pkg);  			printf("%s:\n", str_opt); -			printf(_("      --asdeps         mark packages as non-explicitly installed\n")); -			printf(_("      --asexplicit     mark packages as explicitly installed\n")); +			addlist(_("      --asdeps         mark packages as non-explicitly installed\n")); +			addlist(_("      --asexplicit     mark packages as explicitly installed\n")); +		} +		switch(op) { +			case PM_OP_SYNC: +			case PM_OP_UPGRADE: +				addlist(_("  -f, --force          force install, overwrite conflicting files\n")); +				addlist(_("      --asdeps         install packages as non-explicitly installed\n")); +				addlist(_("      --asexplicit     install packages as explicitly installed\n")); +				addlist(_("      --ignore <pkg>   ignore a package upgrade (can be used more than once)\n")); +				addlist(_("      --ignoregroup <grp>\n" +				         "                       ignore a group upgrade (can be used more than once)\n")); +				/* pass through */ +			case PM_OP_REMOVE: +				addlist(_("  -d, --nodeps         skip dependency checks\n")); +				addlist(_("  -k, --dbonly         only modify database entries, not package files\n")); +				addlist(_("      --noprogressbar  do not show a progress bar when downloading files\n")); +				addlist(_("      --noscriptlet    do not execute the install scriptlet if one exists\n")); +				addlist(_("      --print          only print the targets instead of performing the operation\n")); +				addlist(_("      --print-format <string>\n" +				         "                       specify how the targets should be printed\n")); +				break;  		} -		printf(_("      --config <path>  set an alternate configuration file\n")); -		printf(_("      --logfile <path> set an alternate log file\n")); -		printf(_("      --noconfirm      do not ask for any confirmation\n")); -		printf(_("      --noprogressbar  do not show a progress bar when downloading files\n")); -		printf(_("      --noscriptlet    do not execute the install scriptlet if one exists\n")); -		printf(_("  -v, --verbose        be verbose\n")); -		printf(_("      --debug          display debug messages\n")); -		printf(_("  -r, --root <path>    set an alternate installation root\n")); -		printf(_("  -b, --dbpath <path>  set an alternate database location\n")); -		printf(_("      --cachedir <dir> set an alternate package cache location\n")); -		printf(_("      --arch <arch>    set an alternate architecture\n")); + +		addlist(_("  -b, --dbpath <path>  set an alternate database location\n")); +		addlist(_("  -r, --root <path>    set an alternate installation root\n")); +		addlist(_("  -v, --verbose        be verbose\n")); +		addlist(_("      --arch <arch>    set an alternate architecture\n")); +		addlist(_("      --cachedir <dir> set an alternate package cache location\n")); +		addlist(_("      --config <path>  set an alternate configuration file\n")); +		addlist(_("      --debug          display debug messages\n")); +		addlist(_("      --logfile <path> set an alternate log file\n")); +		addlist(_("      --noconfirm      do not ask for any confirmation\n")); +	} +	list = alpm_list_msort(list, alpm_list_count(list), options_cmp); +	for (i = list; i; i = alpm_list_next(i)) { +		printf("%s", (char *)alpm_list_getdata(i));  	} +	alpm_list_free(list); +#undef addlist  }  /** Output pacman version and copyright. @@ -261,7 +305,7 @@ static ssize_t xwrite(int fd, const void *buf, size_t count)   * in a consistant state.   * @param signum the thrown signal   */ -static RETSIGTYPE handler(int signum) +static void handler(int signum)  {  	int out = fileno(stdout);  	int err = fileno(stderr); @@ -352,6 +396,241 @@ static void setlibpaths(void)  #define check_optarg() if(!optarg) { return(1); } +typedef void (*fn_add) (const char *s); + +static int parsearg_util_addlist(fn_add fn) +{ +	alpm_list_t *list = NULL, *item = NULL; /* lists for splitting strings */ + +	check_optarg(); +	list = strsplit(optarg, ','); +	for(item = list; item; item = alpm_list_next(item)) { +		fn((char *)alpm_list_getdata(item)); +	} +	FREELIST(list); +	return(0); +} + +/** Helper function for parsing operation from command-line arguments. + * @param opt Keycode returned by getopt_long + * @param dryrun If nonzero, application state is NOT changed + * @return 0 if opt was handled, 1 if it was not handled + */ +static int parsearg_op(int opt, int dryrun) +{ +	switch(opt) { +		/* operations */ +		case 'D': +			if(dryrun) break; +			config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_DATABASE); break; +		case 'Q': +			if(dryrun) break; +			config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_QUERY); break; +		case 'R': +			if(dryrun) break; +			config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_REMOVE); break; +		case 'S': +			if(dryrun) break; +			config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_SYNC); break; +		case 'T': +			if(dryrun) break; +			config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_DEPTEST); break; +		case 'U': +			if(dryrun) break; +			config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_UPGRADE); break; +		case 'V': +			if(dryrun) break; +			config->version = 1; break; +		case 'h': +			if(dryrun) break; +			config->help = 1; break; +		default: +			return(1); +	} +	return(0); +} + +/** Helper functions for parsing command-line arguments. + * @param opt Keycode returned by getopt_long + * @return 0 on success, 1 on failure + */ +static int parsearg_global(int opt) +{ +	switch(opt) { +		case OP_ARCH: check_optarg(); setarch(optarg); break; +		case OP_ASK: +			check_optarg(); +			config->noask = 1; +			config->ask = atoi(optarg); +			break; +		case OP_CACHEDIR: +			check_optarg(); +			if(alpm_option_add_cachedir(optarg) != 0) { +				pm_printf(PM_LOG_ERROR, _("problem adding cachedir '%s' (%s)\n"), +						optarg, alpm_strerrorlast()); +				return(1); +			} +			break; +		case OP_CONFIG: +			check_optarg(); +			if(config->configfile) { +				free(config->configfile); +			} +			config->configfile = strndup(optarg, PATH_MAX); +			break; +		case OP_DEBUG: +			/* debug levels are made more 'human readable' than using a raw logmask +			 * here, error and warning are set in config_new, though perhaps a +			 * --quiet option will remove these later */ +			if(optarg) { +				unsigned short debug = atoi(optarg); +				switch(debug) { +					case 2: +						config->logmask |= PM_LOG_FUNCTION; /* fall through */ +					case 1: +						config->logmask |= PM_LOG_DEBUG; +						break; +					default: +						pm_printf(PM_LOG_ERROR, _("'%s' is not a valid debug level\n"), +								optarg); +						return(1); +				} +			} else { +				config->logmask |= PM_LOG_DEBUG; +			} +			/* progress bars get wonky with debug on, shut them off */ +			config->noprogressbar = 1; +			break; +		case OP_LOGFILE: +			check_optarg(); +			config->logfile = strndup(optarg, PATH_MAX); +			break; +		case OP_NOCONFIRM: config->noconfirm = 1; break; +		case 'b': +			check_optarg(); +			config->dbpath = strdup(optarg); +			break; +		case 'r': check_optarg(); config->rootdir = strdup(optarg); break; +		case 'v': (config->verbose)++; break; +		default: return(1); +	} +	return(0); +} + +static int parsearg_database(int opt) +{ +	switch(opt) { +		case OP_ASDEPS: config->flags |= PM_TRANS_FLAG_ALLDEPS; break; +		case OP_ASEXPLICIT: config->flags |= PM_TRANS_FLAG_ALLEXPLICIT; break; +		default: return(1); +	} +	return(0); +} + +static int parsearg_query(int opt) +{ +	switch(opt) { +		case 'c': config->op_q_changelog = 1; break; +		case 'd': config->op_q_deps = 1; break; +		case 'e': config->op_q_explicit = 1; break; +		case 'g': (config->group)++; break; +		case 'i': (config->op_q_info)++; break; +		case 'k': config->op_q_check = 1; break; +		case 'l': config->op_q_list = 1; break; +		case 'm': config->op_q_foreign = 1; break; +		case 'o': config->op_q_owns = 1; break; +		case 'p': config->op_q_isfile = 1; break; +		case 'q': config->quiet = 1; break; +		case 's': config->op_q_search = 1; break; +		case 't': config->op_q_unrequired = 1; break; +		case 'u': config->op_q_upgrade = 1; break; +		default: return(1); +	} +	return(0); +} + +/* options common to -S -R -U */ +static int parsearg_trans(int opt) +{ +	switch(opt) { +		case 'd': config->flags |= PM_TRANS_FLAG_NODEPS; break; +		case 'k': config->flags |= PM_TRANS_FLAG_DBONLY; break; +		case OP_NOPROGRESSBAR: config->noprogressbar = 1; break; +		case OP_NOSCRIPTLET: config->flags |= PM_TRANS_FLAG_NOSCRIPTLET; break; +		case 'p': config->print = 1; break; +		case OP_PRINTFORMAT: +			check_optarg(); +			config->print_format = strdup(optarg); +			break; +		default: return(1); +	} +	return(0); +} + +static int parsearg_remove(int opt) +{ +	if (parsearg_trans(opt) == 0) +		return(0); +	switch(opt) { +		case 'c': config->flags |= PM_TRANS_FLAG_CASCADE; break; +		case 'n': config->flags |= PM_TRANS_FLAG_NOSAVE; break; +		case 's': +			if(config->flags & PM_TRANS_FLAG_RECURSE) { +				config->flags |= PM_TRANS_FLAG_RECURSEALL; +			} else { +				config->flags |= PM_TRANS_FLAG_RECURSE; +			} +			break; +		case 'u': config->flags |= PM_TRANS_FLAG_UNNEEDED; break; +		default: return(1); +	} +	return(0); +} + +/* options common to -S -U */ +static int parsearg_upgrade(int opt) +{ +	if (parsearg_trans(opt) == 0) +		return(0); +	switch(opt) { +		case 'f': config->flags |= PM_TRANS_FLAG_FORCE; break; +		case OP_ASDEPS: config->flags |= PM_TRANS_FLAG_ALLDEPS; break; +		case OP_ASEXPLICIT: config->flags |= PM_TRANS_FLAG_ALLEXPLICIT; break; +		case OP_IGNORE: +			parsearg_util_addlist(alpm_option_add_ignorepkg); +			break; +		case OP_IGNOREGROUP: +			parsearg_util_addlist(alpm_option_add_ignoregrp); +			break; +		default: return(1); +	} +	return(0); +} + +static int parsearg_sync(int opt) +{ +	if (parsearg_upgrade(opt) == 0) +		return(0); +	switch(opt) { +		case OP_NEEDED: config->flags |= PM_TRANS_FLAG_NEEDED; break; +		case 'c': (config->op_s_clean)++; break; +		case 'g': (config->group)++; break; +		case 'i': (config->op_s_info)++; break; +		case 'l': config->op_q_list = 1; break; +		case 'q': config->quiet = 1; break; +		case 's': config->op_s_search = 1; break; +		case 'u': (config->op_s_upgrade)++; break; +		case 'w': +			config->op_s_downloadonly = 1; +			config->flags |= PM_TRANS_FLAG_DOWNLOADONLY; +			config->flags |= PM_TRANS_FLAG_NOCONFLICTS; +			break; +		case 'y': (config->op_s_sync)++; break; +		default: return(1); +	} +	return(0); +} +  /** Parse command-line arguments for each operation.   * @param argc argc   * @param argv argv @@ -361,6 +640,8 @@ static int parseargs(int argc, char *argv[])  {  	int opt;  	int option_index = 0; +	int result; +	const char *optstring = "DQRSTUVb:cdefghiklmnopqr:stuvwy";  	static struct option opts[] =  	{  		{"database",   no_argument,       0, 'D'}, @@ -418,175 +699,23 @@ static int parseargs(int argc, char *argv[])  		{0, 0, 0, 0}  	}; -	while((opt = getopt_long(argc, argv, "DQRSTUVb:cdefghiklmnopqr:stuvwy", opts, &option_index))) { -		alpm_list_t *list = NULL, *item = NULL; /* lists for splitting strings */ - +	/* parse operation */ +	while((opt = getopt_long(argc, argv, optstring, opts, &option_index))) {  		if(opt < 0) {  			break; +		} else if(opt == 0) { +			continue; +		} else if(opt == '?') { +			/* unknown option, getopt printed an error */ +			return(1);  		} -		switch(opt) { -			case 0: break; -			case OP_NOCONFIRM: config->noconfirm = 1; break; -			case OP_CONFIG: -				check_optarg(); -				if(config->configfile) { -					free(config->configfile); -				} -				config->configfile = strndup(optarg, PATH_MAX); -				break; -			case OP_IGNORE: -				check_optarg(); -				list = strsplit(optarg, ','); -				for(item = list; item; item = alpm_list_next(item)) { -					alpm_option_add_ignorepkg((char *)alpm_list_getdata(item)); -				} -				FREELIST(list); -				break; -			case OP_DEBUG: -				/* debug levels are made more 'human readable' than using a raw logmask -				 * here, error and warning are set in config_new, though perhaps a -				 * --quiet option will remove these later */ -				if(optarg) { -					unsigned short debug = atoi(optarg); -					switch(debug) { -						case 2: -							config->logmask |= PM_LOG_FUNCTION; /* fall through */ -						case 1: -							config->logmask |= PM_LOG_DEBUG; -							break; -						default: -						  pm_printf(PM_LOG_ERROR, _("'%s' is not a valid debug level\n"), -									optarg); -							return(1); -					} -				} else { -					config->logmask |= PM_LOG_DEBUG; -				} -				/* progress bars get wonky with debug on, shut them off */ -				config->noprogressbar = 1; -				break; -			case OP_NOPROGRESSBAR: config->noprogressbar = 1; break; -			case OP_NOSCRIPTLET: config->flags |= PM_TRANS_FLAG_NOSCRIPTLET; break; -			case OP_ASK: -				check_optarg(); -				config->noask = 1; -				config->ask = atoi(optarg); -				break; -			case OP_CACHEDIR: -				check_optarg(); -				if(alpm_option_add_cachedir(optarg) != 0) { -					pm_printf(PM_LOG_ERROR, _("problem adding cachedir '%s' (%s)\n"), -							optarg, alpm_strerrorlast()); -					return(1); -				} -				break; -			case OP_ASDEPS: -				config->flags |= PM_TRANS_FLAG_ALLDEPS; -				break; -			case OP_LOGFILE: -				check_optarg(); -				config->logfile = strndup(optarg, PATH_MAX); -				break; -			case OP_IGNOREGROUP: -				check_optarg(); -				list = strsplit(optarg, ','); -				for(item = list; item; item = alpm_list_next(item)) { -					alpm_option_add_ignoregrp((char *)alpm_list_getdata(item)); -				} -				FREELIST(list); -				break; -			case OP_NEEDED: config->flags |= PM_TRANS_FLAG_NEEDED; break; -			case OP_ASEXPLICIT: -				config->flags |= PM_TRANS_FLAG_ALLEXPLICIT; -				break; -			case OP_ARCH: -				check_optarg(); -				setarch(optarg); -				break; -			case OP_PRINTFORMAT: -				check_optarg(); -				config->print_format = strdup(optarg); -				break; -			case 'D': config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_DATABASE); break; -			case 'Q': config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_QUERY); break; -			case 'R': config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_REMOVE); break; -			case 'S': config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_SYNC); break; -			case 'T': config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_DEPTEST); break; -			case 'U': config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_UPGRADE); break; -			case 'V': config->version = 1; break; -			case 'b': -				check_optarg(); -				config->dbpath = strdup(optarg); -				break; -			case 'c': -				(config->op_s_clean)++; -				config->flags |= PM_TRANS_FLAG_CASCADE; -				config->op_q_changelog = 1; -				break; -			case 'd': -				config->op_q_deps = 1; -				config->flags |= PM_TRANS_FLAG_NODEPS; -				break; -			case 'e': -				config->op_q_explicit = 1; -				break; -			case 'f': config->flags |= PM_TRANS_FLAG_FORCE; break; -			case 'g': (config->group)++; break; -			case 'h': config->help = 1; break; -			case 'i': (config->op_q_info)++; (config->op_s_info)++; break; -			case 'k': -				config->flags |= PM_TRANS_FLAG_DBONLY; -				config->op_q_check = 1; -				break; -			case 'l': config->op_q_list = 1; break; -			case 'm': config->op_q_foreign = 1; break; -			case 'n': config->flags |= PM_TRANS_FLAG_NOSAVE; break; -			case 'o': config->op_q_owns = 1; break; -			case 'p': -				config->op_q_isfile = 1; -				config->print = 1; -				break; -			case 'q': -				config->quiet = 1; -				break; -			case 'r': -				check_optarg(); -				config->rootdir = strdup(optarg); -				break; -			case 's': -				config->op_s_search = 1; -				config->op_q_search = 1; -				if(config->flags & PM_TRANS_FLAG_RECURSE) { -					config->flags |= PM_TRANS_FLAG_RECURSEALL; -				} else { -					config->flags |= PM_TRANS_FLAG_RECURSE; -				} -				break; -			case 't': -				config->op_q_unrequired = 1; -				break; -			case 'u': -				(config->op_s_upgrade)++; -				config->op_q_upgrade = 1; -				config->flags |= PM_TRANS_FLAG_UNNEEDED; -				break; -			case 'v': (config->verbose)++; break; -			case 'w': -				config->op_s_downloadonly = 1; -				config->flags |= PM_TRANS_FLAG_DOWNLOADONLY; -				config->flags |= PM_TRANS_FLAG_NOCONFLICTS; -				break; -			case 'y': (config->op_s_sync)++; break; -			case '?': return(1); -			default: return(1); -		} +		parsearg_op(opt, 0);  	}  	if(config->op == 0) {  		pm_printf(PM_LOG_ERROR, _("only one operation may be used at a time\n"));  		return(1);  	} -  	if(config->help) {  		usage(config->op, mbasename(argv[0]));  		return(2); @@ -596,6 +725,55 @@ static int parseargs(int argc, char *argv[])  		return(2);  	} +	/* parse all other options */ +	optind = 1; +	while((opt = getopt_long(argc, argv, optstring, opts, &option_index))) { +		if(opt < 0) { +			break; +		} else if(opt == 0) { +			continue; +		} else if(opt == '?') { +			/* this should have failed during first pass already */ +			return(1); +		} else if(parsearg_op(opt, 1) == 0) {	/* opt is an operation */ +			continue; +		} + +		switch(config->op) { +			case PM_OP_DATABASE: +				result = parsearg_database(opt); +				break; +			case PM_OP_QUERY: +				result = parsearg_query(opt); +				break; +			case PM_OP_REMOVE: +				result = parsearg_remove(opt); +				break; +			case PM_OP_SYNC: +				result = parsearg_sync(opt); +				break; +			case PM_OP_DEPTEST: +				result = 1; +				break; +			case PM_OP_UPGRADE: +				result = parsearg_upgrade(opt); +				break; +			default: +				pm_printf(PM_LOG_ERROR, _("no operation specified (use -h for help)\n")); +				return(1); +		} +		if (result == 0) +			continue; + +		/* fall back to global options */ +		result = parsearg_global(opt); +		if(result != 0) { +			/* global option parsing failed, abort */ +			pm_printf(PM_LOG_ERROR, _("invalid option\n")); +			return(result); +		} +	} +  	while(optind < argc) {  		/* add the target to our target array */  		pm_targets = alpm_list_add(pm_targets, strdup(argv[optind])); @@ -668,7 +846,7 @@ static char *get_tempfile(const char *path, const char *filename) {  }  /** External fetch callback */ -int download_with_xfercommand(const char *url, const char *localpath, +static int download_with_xfercommand(const char *url, const char *localpath,  		int force) {  	int ret = 0;  	int retval; @@ -676,6 +854,7 @@ int download_with_xfercommand(const char *url, const char *localpath,  	struct stat st;  	char *parsedcmd,*tempcmd;  	char cwd[PATH_MAX]; +	int restore_cwd = 0;  	char *destfile, *tempfile, *filename;  	if(!config->xfercommand) { @@ -708,8 +887,14 @@ int download_with_xfercommand(const char *url, const char *localpath,  	parsedcmd = strreplace(tempcmd, "%u", url);  	free(tempcmd); +	/* save the cwd so we can restore it later */ +	if(getcwd(cwd, PATH_MAX) == NULL) { +		pm_printf(PM_LOG_ERROR, _("could not get current working directory\n")); +	} else { +		restore_cwd = 1; +	} +  	/* cwd to the download directory */ -	getcwd(cwd, PATH_MAX);  	if(chdir(localpath)) {  		pm_printf(PM_LOG_WARNING, _("could not chdir to download directory %s\n"), localpath);  		ret = -1; @@ -736,7 +921,11 @@ int download_with_xfercommand(const char *url, const char *localpath,  	}  cleanup: -	chdir(cwd); +	/* restore the old cwd if we have it */ +	if(restore_cwd && chdir(cwd) != 0) { +		pm_printf(PM_LOG_ERROR, _("could not change directory to %s (%s)\n"), cwd, strerror(errno)); +	} +  	if(ret == -1) {  		/* hack to let an user the time to cancel a download */  		sleep(2); @@ -767,6 +956,8 @@ static int _parse_options(char *key, char *value)  		} else if(strcmp(key, "TotalDownload") == 0) {  			config->totaldownload = 1;  			pm_printf(PM_LOG_DEBUG, "config: totaldownload\n"); +		} else if(strcmp(key, "CheckSpace") == 0) { +			alpm_option_set_checkspace(1);  		} else {  			pm_printf(PM_LOG_ERROR, _("directive '%s' without value not recognized\n"), key);  			return(1); @@ -989,7 +1180,7 @@ static int _parseconfig(const char *file, const char *givensection,  							file, linenum, value);  				break;  				default: -					for(int gindex = 0; gindex < globbuf.gl_pathc; gindex++) { +					for(size_t gindex = 0; gindex < globbuf.gl_pathc; gindex++) {  						pm_printf(PM_LOG_DEBUG, "config file %s, line %d: including %s\n",  								file, linenum, globbuf.gl_pathv[gindex]);  						_parseconfig(globbuf.gl_pathv[gindex], section, db); @@ -1161,6 +1352,39 @@ int main(int argc, char *argv[])  		cleanup(ret);  	} +	/* we also support reading targets from stdin */ +	if(!isatty(fileno(stdin))) { +		char line[PATH_MAX]; +		int i = 0; +		while(i < PATH_MAX && (line[i] = fgetc(stdin)) != EOF) { +			if(isspace((unsigned char)line[i])) { +				/* avoid adding zero length arg when multiple spaces separate args */ +				if(i > 0) { +					line[i] = '\0'; +					pm_targets = alpm_list_add(pm_targets, strdup(line)); +					i = 0; +				} +			} else { +				i++; +			} +		} +		/* check for buffer overflow */ +		if (i >= PATH_MAX) { +			pm_printf(PM_LOG_ERROR, _("buffer overflow detected in arg parsing\n")); +			cleanup(EXIT_FAILURE); +		} + +		/* end of stream -- check for data still in line buffer */ +		if(i > 0) { +			line[i] = '\0'; +			pm_targets = alpm_list_add(pm_targets, strdup(line)); +		} +		if (!freopen(ctermid(NULL), "r", stdin)) { +			pm_printf(PM_LOG_ERROR, _("failed to reopen stdin for reading: (%s)\n"), +					strerror(errno)); +		} +	} +  	/* parse the config file */  	ret = parseconfig(config->configfile);  	if(ret != 0) { diff --git a/src/pacman/query.c b/src/pacman/query.c index 7f064f23..5538e811 100644 --- a/src/pacman/query.c +++ b/src/pacman/query.c @@ -406,8 +406,10 @@ static int check(pmpkg_t *pkg)  	}  	if(!config->quiet) { -		printf(_("%s: %d total files, %d missing file(s)\n"), -				pkgname, allfiles, errors); +		printf(_n("%s: %d total file, ", "%s: %d total files, ", allfiles), +				pkgname, allfiles); +		printf(_n("%d missing file\n", "%d missing files\n", errors), +				errors);  	}  	return(errors != 0 ? 1 : 0); diff --git a/src/pacman/sync.c b/src/pacman/sync.c index b2994389..6961f3cf 100644 --- a/src/pacman/sync.c +++ b/src/pacman/sync.c @@ -39,7 +39,7 @@  extern pmdb_t *db_local; -/* if keep_used != 0, then the dirnames which match an used syncdb +/* if keep_used != 0, then the db files which match an used syncdb   * will be kept  */  static int sync_cleandb(const char *dbpath, int keep_used) {  	DIR *dir; @@ -59,31 +59,47 @@ static int sync_cleandb(const char *dbpath, int keep_used) {  		alpm_list_t *syncdbs = NULL, *i;  		int found = 0;  		const char *dname = ent->d_name; +		size_t len; -		if(!strcmp(dname, ".") || !strcmp(dname, "..")) { +		if(strcmp(dname, ".") == 0 || strcmp(dname, "..") == 0) {  			continue;  		}  		/* skip the local and sync directories */ -		if(!strcmp(dname, "sync") || !strcmp(dname, "local")) { +		if(strcmp(dname, "sync") == 0 || strcmp(dname, "local") == 0) { +			continue; +		} +		/* skip the db.lck file */ +		if(strcmp(dname, "db.lck") == 0) {  			continue;  		}  		/* build the full path */  		snprintf(path, PATH_MAX, "%s%s", dbpath, dname); -		/* skip entries that are not dirs (lock file, etc.) */ + +		/* remove all non-skipped directories and non-database files */  		stat(path, &buf); -		if(!S_ISDIR(buf.st_mode)) { +		len = strlen(path); +		if(S_ISDIR(buf.st_mode) || strcmp(path+(len-3),".db") != 0) { +			if(rmrf(path)) { +				pm_fprintf(stderr, PM_LOG_ERROR, +					_("could not remove %s\n"), path); +				closedir(dir); +				return(1); +			}  			continue;  		}  		if(keep_used) { +			len = strlen(dname); +			char *dbname = strndup(dname, len-3);  			syncdbs = alpm_option_get_syncdbs();  			for(i = syncdbs; i && !found; i = alpm_list_next(i)) {  				pmdb_t *db = alpm_list_getdata(i); -				found = !strcmp(dname, alpm_db_get_name(db)); +				found = !strcmp(dbname, alpm_db_get_name(db));  			} +			free(dbname);  		} -		/* We have a directory that doesn't match any syncdb. +		/* We have a database that doesn't match any syncdb.  		 * Ask the user if he wants to remove it. */  		if(!found) {  			if(!yesno(_("Do you want to remove %s?"), path)) { @@ -92,7 +108,7 @@ static int sync_cleandb(const char *dbpath, int keep_used) {  			if(rmrf(path)) {  				pm_fprintf(stderr, PM_LOG_ERROR, -					_("could not remove repository directory\n")); +					_("could not remove %s\n"), path);  				closedir(dir);  				return(1);  			} @@ -113,8 +129,8 @@ static int sync_cleandb_all(void) {  		return(0);  	}  	/* The sync dbs were previously put in dbpath/, but are now in dbpath/sync/, -	 * so we will clean everything in dbpath/ (except dbpath/local/ and dbpath/sync/, -	 * and only the unused sync dbs in dbpath/sync/ */ +	 * so we will clean everything in dbpath/ (except dbpath/local/ and dbpath/sync/ +	 * and db.lck) and only the unused sync dbs in dbpath/sync/ */  	ret += sync_cleandb(dbpath, 0);  	sprintf(newdbpath, "%s%s", dbpath, "sync/"); @@ -178,7 +194,7 @@ static int sync_cleancache(int level)  			pmpkg_t *localpkg = NULL, *pkg = NULL;  			alpm_list_t *j; -			if(!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, "..")) { +			if(strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0) {  				continue;  			}  			/* build the full filepath */ @@ -555,7 +571,7 @@ static int sync_list(alpm_list_t *syncs, alpm_list_t *targets)  	return(0);  } -static alpm_list_t *syncfirst() { +static alpm_list_t *syncfirst(void) {  	alpm_list_t *i, *res = NULL;  	for(i = config->syncfirst; i; i = alpm_list_next(i)) { @@ -666,7 +682,7 @@ static int sync_trans(alpm_list_t *targets)  					const char *package2 = alpm_conflict_get_package2(conflict);  					const char *reason = alpm_conflict_get_reason(conflict);  					/* only print reason if it contains new information */ -					if(!strcmp(package1, reason) || !strcmp(package2, reason)) { +					if(strcmp(package1, reason) == 0 || strcmp(package2, reason) == 0) {  						printf(_(":: %s and %s are in conflict\n"), package1, package2);  					} else {  						printf(_(":: %s and %s are in conflict (%s)\n"), package1, package2, reason); diff --git a/src/pacman/upgrade.c b/src/pacman/upgrade.c index 1442eb56..c9c8301f 100644 --- a/src/pacman/upgrade.c +++ b/src/pacman/upgrade.c @@ -112,7 +112,7 @@ int pacman_upgrade(alpm_list_t *targets)  					const char *package2 = alpm_conflict_get_package2(conflict);  					const char *reason = alpm_conflict_get_reason(conflict);  					/* only print reason if it contains new information */ -					if(!strcmp(package1, reason) || !strcmp(package2, reason)) { +					if(strcmp(package1, reason) == 0 || strcmp(package2, reason) == 0) {  						printf(_(":: %s and %s are in conflict\n"), package1, package2);  					} else {  						printf(_(":: %s and %s are in conflict (%s)\n"), package1, package2, reason); diff --git a/src/pacman/util.c b/src/pacman/util.c index 557696b0..31966caa 100644 --- a/src/pacman/util.c +++ b/src/pacman/util.c @@ -143,7 +143,7 @@ int rmrf(const char *path)  			if(dp->d_ino) {  				char name[PATH_MAX];  				sprintf(name, "%s/%s", path, dp->d_name); -				if(strcmp(dp->d_name, "..") && strcmp(dp->d_name, ".")) { +				if(strcmp(dp->d_name, "..") != 0 && strcmp(dp->d_name, ".") != 0) {  					errflag += rmrf(name);  				}  			} @@ -531,10 +531,10 @@ void display_targets(const alpm_list_t *pkgs, int install)  			double mbsize = 0.0;  			mbsize = alpm_pkg_get_size(pkg) / (1024.0 * 1024.0); -			asprintf(&str, "%s-%s [%.2f MB]", alpm_pkg_get_name(pkg), +			pm_asprintf(&str, "%s-%s [%.2f MB]", alpm_pkg_get_name(pkg),  					alpm_pkg_get_version(pkg), mbsize);  		} else { -			asprintf(&str, "%s-%s", alpm_pkg_get_name(pkg), +			pm_asprintf(&str, "%s-%s", alpm_pkg_get_name(pkg),  					alpm_pkg_get_version(pkg));  		}  		targets = alpm_list_add(targets, str); @@ -545,7 +545,7 @@ void display_targets(const alpm_list_t *pkgs, int install)  	mbisize = isize / (1024.0 * 1024.0);  	if(install) { -		asprintf(&str, _("Targets (%d):"), alpm_list_count(targets)); +		pm_asprintf(&str, _("Targets (%d):"), alpm_list_count(targets));  		list_display(str, targets);  		free(str);  		printf("\n"); @@ -555,7 +555,7 @@ void display_targets(const alpm_list_t *pkgs, int install)  			printf(_("Total Installed Size:   %.2f MB\n"), mbisize);  		}  	} else { -		asprintf(&str, _("Remove (%d):"), alpm_list_count(targets)); +		pm_asprintf(&str, _("Remove (%d):"), alpm_list_count(targets));  		list_display(str, targets);  		free(str);  		printf("\n"); @@ -589,14 +589,14 @@ static char *pkg_get_location(pmpkg_t *pkg)  			dburl = alpm_db_get_url(db);  			if(dburl) {  				char *pkgurl = NULL; -				asprintf(&pkgurl, "%s/%s", dburl, alpm_pkg_get_filename(pkg)); +				pm_asprintf(&pkgurl, "%s/%s", dburl, alpm_pkg_get_filename(pkg));  				return(pkgurl);  			}  		case PM_OP_UPGRADE:  			return(strdup(alpm_pkg_get_filename(pkg)));  		default:  			string = NULL; -			asprintf(&string, "%s-%s", alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg)); +			pm_asprintf(&string, "%s-%s", alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg));  			return(string);  	}  } @@ -647,11 +647,10 @@ void print_packages(const alpm_list_t *packages)  			char *size;  			double mbsize = 0.0;  			mbsize = pkg_get_size(pkg) / (1024.0 * 1024.0); -			asprintf(&size, "%.2f", mbsize); +			pm_asprintf(&size, "%.2f", mbsize);  			string = strreplace(temp, "%s", size);  			free(size);  			free(temp); -			temp = string;  		}  		printf("%s\n",string);  		free(string); @@ -690,7 +689,6 @@ void display_optdepends(pmpkg_t *pkg)  static int question(short preset, char *fmt, va_list args)  {  	char response[32]; -	int sresponse = sizeof(response)-1;  	FILE *stream;  	if(config->noconfirm) { @@ -713,15 +711,15 @@ static int question(short preset, char *fmt, va_list args)  		return(preset);  	} -	if(fgets(response, sresponse, stdin)) { +	if(fgets(response, sizeof(response), stdin)) {  		strtrim(response);  		if(strlen(response) == 0) {  			return(preset);  		} -		if(!strcasecmp(response, _("Y")) || !strcasecmp(response, _("YES"))) { +		if(strcasecmp(response, _("Y")) == 0 || strcasecmp(response, _("YES")) == 0) {  			return(1); -		} else if (!strcasecmp(response, _("N")) || !strcasecmp(response, _("NO"))) { +		} else if (strcasecmp(response, _("N")) == 0 || strcasecmp(response, _("NO")) == 0) {  			return(0);  		}  	} @@ -778,6 +776,22 @@ int pm_fprintf(FILE *stream, pmloglevel_t level, const char *format, ...)  	return(ret);  } +int pm_asprintf(char **string, const char *format, ...) +{ +	int ret = 0; +	va_list args; + +	/* print the message using va_arg list */ +	va_start(args, format); +	if(vasprintf(string, format, args) == -1) { +		pm_fprintf(stderr, PM_LOG_ERROR,  _("failed to allocate string\n")); +		ret = -1; +	} +	va_end(args); + +	return(ret); +} +  int pm_vasprintf(char **string, pmloglevel_t level, const char *format, va_list args)  {  	int ret = 0; @@ -794,16 +808,16 @@ int pm_vasprintf(char **string, pmloglevel_t level, const char *format, va_list  	/* print a prefix to the message */  	switch(level) {  		case PM_LOG_DEBUG: -			asprintf(string, "debug: %s", msg); +			pm_asprintf(string, "debug: %s", msg);  			break;  		case PM_LOG_ERROR: -			asprintf(string, _("error: %s"), msg); +			pm_asprintf(string, _("error: %s"), msg);  			break;  		case PM_LOG_WARNING: -			asprintf(string, _("warning: %s"), msg); +			pm_asprintf(string, _("warning: %s"), msg);  			break;  		case PM_LOG_FUNCTION: -			asprintf(string, _("function: %s"), msg); +			pm_asprintf(string, _("function: %s"), msg);  			break;  		default:  			break; @@ -824,7 +838,7 @@ int pm_vfprintf(FILE *stream, pmloglevel_t level, const char *format, va_list ar  #if defined(PACMAN_DEBUG)  	/* If debug is on, we'll timestamp the output */ -  if(config->logmask & PM_LOG_DEBUG) { +	if(config->logmask & PM_LOG_DEBUG) {  		time_t t;  		struct tm *tmp;  		char timestr[10] = {0}; diff --git a/src/pacman/util.h b/src/pacman/util.h index bbf43827..0308f6b5 100644 --- a/src/pacman/util.h +++ b/src/pacman/util.h @@ -30,8 +30,10 @@  #include <libintl.h> /* here so it doesn't need to be included elsewhere */  /* define _() as shortcut for gettext() */  #define _(str) gettext(str) +#define _n(str1, str2, ct) ngettext(str1, str2, ct)  #else  #define _(str) str +#define _n(str1, str2, ct) (ct == 1 ? str1 : str2)  #endif  /* update speed for the fill_progress based functions */ @@ -53,6 +55,7 @@ void string_display(const char *title, const char *string);  void list_display(const char *title, const alpm_list_t *list);  void list_display_linebreak(const char *title, const alpm_list_t *list);  void display_targets(const alpm_list_t *pkgs, int install); +int str_cmp(const void *s1, const void *s2);  void display_new_optdepends(pmpkg_t *oldpkg, pmpkg_t *newpkg);  void display_optdepends(pmpkg_t *pkg);  void print_packages(const alpm_list_t *packages); @@ -60,6 +63,7 @@ int yesno(char *fmt, ...);  int noyes(char *fmt, ...);  int pm_printf(pmloglevel_t level, const char *format, ...) __attribute__((format(printf,2,3)));  int pm_fprintf(FILE *stream, pmloglevel_t level, const char *format, ...) __attribute__((format(printf,3,4))); +int pm_asprintf(char **string, const char *format, ...);  int pm_vfprintf(FILE *stream, pmloglevel_t level, const char *format, va_list args) __attribute__((format(printf,3,0)));  int pm_vasprintf(char **string, pmloglevel_t level, const char *format, va_list args) __attribute__((format(printf,3,0))); diff --git a/src/util/.gitignore b/src/util/.gitignore index 9c855dff..2880ce2a 100644 --- a/src/util/.gitignore +++ b/src/util/.gitignore @@ -1,11 +1,12 @@  .deps  .libs -vercmp -vercmp.exe -testpkg -testpkg.exe -testdb -testdb.exe  cleanupdelta  cleanupdelta.exe - +pactree +pactree.exe +testdb +testdb.exe +testpkg +testpkg.exe +vercmp +vercmp.exe diff --git a/src/util/Makefile.am b/src/util/Makefile.am index 7dce9dcc..30a2ee35 100644 --- a/src/util/Makefile.am +++ b/src/util/Makefile.am @@ -3,7 +3,7 @@ conffile  = ${sysconfdir}/pacman.conf  dbpath    = ${localstatedir}/lib/pacman/  cachedir  = ${localstatedir}/cache/pacman/pkg/ -bin_PROGRAMS = vercmp testpkg testdb cleanupdelta +bin_PROGRAMS = vercmp testpkg testdb cleanupdelta pactree  DEFS = -DLOCALEDIR=\"@localedir@\" \         -DCONFFILE=\"$(conffile)\" \ @@ -27,5 +27,8 @@ testdb_LDADD = $(top_builddir)/lib/libalpm/.libs/libalpm.la  cleanupdelta_SOURCES = cleanupdelta.c  cleanupdelta_LDADD = $(top_builddir)/lib/libalpm/.libs/libalpm.la +pactree_SOURCES = pactree.c +pactree_LDADD = $(top_builddir)/lib/libalpm/.libs/libalpm.la +  # vim:set ts=2 sw=2 noet: diff --git a/src/util/cleanupdelta.c b/src/util/cleanupdelta.c index ffcfaba5..a2d1541e 100644 --- a/src/util/cleanupdelta.c +++ b/src/util/cleanupdelta.c @@ -17,6 +17,8 @@   *  along with this program.  If not, see <http://www.gnu.org/licenses/>.   */ +#include "config.h" +  #include <stdio.h>  #include <stdlib.h>  #include <string.h> @@ -35,7 +37,7 @@ static void cleanup(int signum) {  	exit(signum);  } -void output_cb(pmloglevel_t level, char *fmt, va_list args) +static void output_cb(pmloglevel_t level, char *fmt, va_list args)  {  	if(strlen(fmt)) {  		switch(level) { @@ -49,7 +51,7 @@ void output_cb(pmloglevel_t level, char *fmt, va_list args)  } -void checkpkgs(alpm_list_t *pkglist) +static void checkpkgs(alpm_list_t *pkglist)  {  	alpm_list_t *i, *j;  	for(i = pkglist; i; i = alpm_list_next(i)) { @@ -63,7 +65,7 @@ void checkpkgs(alpm_list_t *pkglist)  	}  } -void checkdbs(char *dbpath, alpm_list_t *dbnames) { +static void checkdbs(char *dbpath, alpm_list_t *dbnames) {  	char syncdbpath[PATH_MAX];  	pmdb_t *db = NULL;  	alpm_list_t *i; @@ -82,14 +84,14 @@ void checkdbs(char *dbpath, alpm_list_t *dbnames) {  } -void usage() { +static void usage(void) {  	fprintf(stderr, "usage:\n");  	fprintf(stderr,  			"\t%s [-b <pacman db>] core extra ... : check the listed sync databases\n", BASENAME);  	exit(1);  } -int main(int argc, char **argv) +int main(int argc, char *argv[])  {  	char *dbpath = DBPATH;  	int a = 1; diff --git a/src/util/pactree.c b/src/util/pactree.c new file mode 100644 index 00000000..967f5c8c --- /dev/null +++ b/src/util/pactree.c @@ -0,0 +1,372 @@ +/* + *  pactree.c - a simple dependency tree viewer + * + *  Copyright (c) 2010 Pacman Development Team <pacman-dev@archlinux.org> + * + *  This program 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, see <http://www.gnu.org/licenses/>. + */ + +#include "config.h" + +#include <getopt.h> +#include <stdio.h> +#include <string.h> + +#include <alpm.h> +#include <alpm_list.h> + +/* output */ +char *provides     = " provides"; +char *unresolvable = " [unresolvable]"; +char *branch_tip1  = "|--"; +char *branch_tip2  = "+--"; +int   indent_size  = 3; + +/* color */ +char *branch1_color = "\033[0;33m"; /* yellow */ +char *branch2_color = "\033[0;37m"; /* white */ +char *leaf1_color   = "\033[1;32m"; /* bold green */ +char *leaf2_color   = "\033[0;32m"; /* green */ +char *color_off     = "\033[0m"; + +/* globals */ +pmdb_t *db_local; +alpm_list_t *walked = NULL; +alpm_list_t *provisions = NULL; + +/* options */ +int color = 0; +int graphviz = 0; +int linear = 0; +int max_depth = -1; +int reverse = 0; +int unique = 0; +char *dbpath = NULL; + +static int alpm_local_init(void) +{ +	int ret; + +	ret = alpm_initialize(); +	if(ret != 0) { +		return(ret); +	} + +	ret = alpm_option_set_root(ROOTDIR); +	if(ret != 0) { +		return(ret); +	} + +	if(dbpath) { +		ret = alpm_option_set_dbpath(dbpath); +	} else { +		ret = alpm_option_set_dbpath(DBPATH); +	} +	if(ret != 0) { +		return(ret); +	} + +	db_local = alpm_db_register_local(); +	if(!db_local) { +		return(1); +	} + +	return(0); +} + +static int parse_options(int argc, char *argv[]) +{ +	int opt, option_index = 0; +	char *endptr = NULL; + +	static struct option opts[] = { +		{"dbpath",  required_argument,    0, 'b'}, +		{"color",   no_argument,          0, 'c'}, +		{"depth",   required_argument,    0, 'd'}, +		{"graph",   no_argument,          0, 'g'}, +		{"help",    no_argument,          0, 'h'}, +		{"linear",  no_argument,          0, 'l'}, +		{"reverse", no_argument,          0, 'r'}, +		{"unique",  no_argument,          0, 'u'}, +		{0, 0, 0, 0} +	}; + +	while((opt = getopt_long(argc, argv, "b:cd:ghlru", opts, &option_index))) { +		if(opt < 0) { +			break; +		} + +		switch(opt) { +			case 'b': +				dbpath = strdup(optarg); +				break; +			case 'c': +				color = 1; +				break; +			case 'd': +				/* validate depth */ +				max_depth = strtol(optarg, &endptr, 10); +				if(*endptr != '\0') { +					fprintf(stderr, "error: invalid depth -- %s\n", optarg); +					return 1; +				} +				break; +			case 'g': +				graphviz = 1; +				break; +			case 'l': +				linear = 1; +				break; +			case 'r': +				reverse = 1; +				break; +			case 'u': +				unique = linear = 1; +				break; +			case 'h': +			case '?': +			default: +				return(1); +		} +	} + +	if(!argv[optind]) { +		return(1); +	} + +	if(!color) { +		branch1_color = ""; +		branch2_color = ""; +		leaf1_color   = ""; +		leaf2_color   = ""; +		color_off     = ""; +	} +	if(linear) { +		provides     = ""; +		branch_tip1  = ""; +		branch_tip2  = ""; +		indent_size  = 0; +	} + +	return(0); +} + +static void usage(void) +{ +	fprintf(stderr, "pactree v" PACKAGE_VERSION "\n" +			"Usage: pactree [options] PACKAGE\n\n" +			"  -b, --dbpath <path>  set an alternate database location\n" +			"  -c, --color          colorize output\n" +			"  -d, --depth <#>      limit the depth of recursion\n" +			"  -g, --graph          generate output for graphviz's dot\n" +			"  -l, --linear         enable linear output\n" +			"  -r, --reverse        show reverse dependencies\n" +			"  -u, --unique         show dependencies with no duplicates (implies -l)\n\n" +			"  -h, --help           display this help message\n"); +} + +static void cleanup(void) +{ +	if(dbpath) { +		free(dbpath); +	} + +	alpm_list_free(walked); +	alpm_list_free(provisions); +	alpm_release(); +} + +/* pkg provides provision */ +static void print_text(const char *pkg, const char *provision, int depth) +{ +	int indent_sz = (depth + 1) * indent_size; + +	if(!pkg && !provision) { +		/* not much we can do */ +		return; +	} + +	if(!pkg && provision) { +		/* we failed to resolve provision */ +		printf("%s%*s%s%s%s%s%s\n", branch1_color, indent_sz, branch_tip1, +				leaf1_color, provision, branch1_color, unresolvable, color_off); +	} else if(provision && strcmp(pkg, provision) != 0) { +		/* pkg provides provision */ +		printf("%s%*s%s%s%s%s %s%s%s\n", branch2_color, indent_sz, branch_tip2, +				leaf1_color, pkg, leaf2_color, provides, leaf1_color, provision, +				color_off); +	} else { +		/* pkg is a normal package */ +		printf("%s%*s%s%s%s\n", branch1_color, indent_sz, branch_tip1, leaf1_color, +				pkg, color_off); +	} +} + +static void print_graph(const char *parentname, const char *pkgname, const char *depname) +{ +	if(depname) { +		printf("\"%s\" -> \"%s\" [color=chocolate4];\n", parentname, depname); +		if(pkgname && strcmp(depname, pkgname) != 0 && !alpm_list_find_str(provisions, depname)) { +			printf("\"%s\" -> \"%s\" [arrowhead=none, color=grey];\n", depname, pkgname); +			provisions = alpm_list_add(provisions, (char *)depname); +		} +	} else if(pkgname) { +		printf("\"%s\" -> \"%s\" [color=chocolate4];\n", parentname, pkgname); +	} +} + +/* parent depends on dep which is satisfied by pkg */ +static void print(const char *parentname, const char *pkgname, const char *depname, int depth) +{ +	if(graphviz) { +		print_graph(parentname, pkgname, depname); +	} else { +		print_text(pkgname, depname, depth); +	} +} + +static void print_start(const char *pkgname, const char *provname) +{ +	if(graphviz) { +		printf("digraph G { START [color=red, style=filled];\n" +				"node [style=filled, color=green];\n" +				" \"START\" -> \"%s\";\n", pkgname); +	} else { +		print_text(pkgname, provname, 0); +	} +} + +static void print_end(void) +{ +	if(graphviz) { +		/* close graph output */ +		printf("}\n"); +	} +} + + +/** + * walk dependencies in reverse, showing packages which require the target + */ +static void walk_reverse_deps(pmpkg_t *pkg, int depth) +{ +	alpm_list_t *required_by, *i; + +	if((max_depth >= 0) && (depth == max_depth + 1)) { +		return; +	} + +	walked = alpm_list_add(walked, (void*)alpm_pkg_get_name(pkg)); +	required_by = alpm_pkg_compute_requiredby(pkg); + +	for(i = required_by; i; i = alpm_list_next(i)) { +		const char *pkgname = alpm_list_getdata(i); + +		if(alpm_list_find_str(walked, pkgname)) { +			/* if we've already seen this package, don't print in "unique" output +			 * and don't recurse */ +			if(!unique) { +				print(alpm_pkg_get_name(pkg), pkgname, NULL, depth); +			} +		} else { +			print(alpm_pkg_get_name(pkg), pkgname, NULL, depth); +			walk_reverse_deps(alpm_db_get_pkg(db_local, pkgname), depth + 1); +		} +	} + +	FREELIST(required_by); +} + +/** + * walk dependencies, showing dependencies of the target + */ +static void walk_deps(pmpkg_t *pkg, int depth) +{ +	alpm_list_t *i; + +	if((max_depth >= 0) && (depth == max_depth + 1)) { +		return; +	} + +	walked = alpm_list_add(walked, (void*)alpm_pkg_get_name(pkg)); + +	for(i = alpm_pkg_get_depends(pkg); i; i = alpm_list_next(i)) { +		pmdepend_t *depend = alpm_list_getdata(i); +		pmpkg_t *provider = alpm_find_satisfier(alpm_db_get_pkgcache(db_local), +				alpm_dep_get_name(depend)); + +		if(provider) { +			const char *provname = alpm_pkg_get_name(provider); + +			if(alpm_list_find_str(walked, provname)) { +				/* if we've already seen this package, don't print in "unique" output +				 * and don't recurse */ +				if(!unique) { +					print(alpm_pkg_get_name(pkg), provname, alpm_dep_get_name(depend), depth); +				} +			} else { +				print(alpm_pkg_get_name(pkg), provname, alpm_dep_get_name(depend), depth); +				walk_deps(provider, depth + 1); +			} +		} else { +			/* unresolvable package */ +			print(alpm_pkg_get_name(pkg), NULL, alpm_dep_get_name(depend), depth); +		} +	} +} + +int main(int argc, char *argv[]) +{ +	int ret; +	const char *target_name; +	pmpkg_t *pkg; + +	ret = parse_options(argc, argv); +	if(ret != 0) { +		usage(); +		goto finish; +	} + +	ret = alpm_local_init(); +	if(ret != 0) { +		fprintf(stderr, "error: cannot initialize alpm: %s\n", alpm_strerrorlast()); +		goto finish; +	} + +	/* we only care about the first non option arg for walking */ +	target_name = argv[optind]; + +	pkg = alpm_find_satisfier(alpm_db_get_pkgcache(db_local), target_name); +	if(!pkg) { +		fprintf(stderr, "error: package '%s' not found\n", target_name); +		ret = 1; +		goto finish; +	} + +	print_start(alpm_pkg_get_name(pkg), target_name); + +	if(reverse) { +		walk_reverse_deps(pkg, 1); +	} else { +		walk_deps(pkg, 1); +	} + +	print_end(); + +finish: +	cleanup(); +	return(ret); +} + +/* vim: set ts=2 sw=2 noet: */ diff --git a/src/util/testdb.c b/src/util/testdb.c index 6d351ebd..96a123a6 100644 --- a/src/util/testdb.c +++ b/src/util/testdb.c @@ -17,11 +17,12 @@   *  along with this program.  If not, see <http://www.gnu.org/licenses/>.   */ +#include "config.h" +  #include <unistd.h>  #include <stdio.h>  #include <stdlib.h>  #include <errno.h> -#include <limits.h>  #include <string.h>  #include <dirent.h> @@ -30,11 +31,6 @@  #define BASENAME "testdb" -int str_cmp(const void *s1, const void *s2) -{ -	return(strcmp(s1, s2)); -} -  static void cleanup(int signum) {  	if(alpm_release() == -1) {  		fprintf(stderr, "error releasing alpm: %s\n", alpm_strerrorlast()); @@ -43,7 +39,7 @@ static void cleanup(int signum) {  	exit(signum);  } -void output_cb(pmloglevel_t level, char *fmt, va_list args) +static void output_cb(pmloglevel_t level, char *fmt, va_list args)  {  	if(strlen(fmt)) {  		switch(level) { @@ -55,42 +51,37 @@ void output_cb(pmloglevel_t level, char *fmt, va_list args)  	}  } -static int db_test(char *dbpath, int local) +static int check_localdb_files(void)  {  	struct dirent *ent; -	char path[PATH_MAX]; +	const char *dbpath; +	char path[4096];  	int ret = 0; -  	DIR *dir; -	if(!(dir = opendir(dbpath))) { -		fprintf(stderr, "error : %s : %s\n", dbpath, strerror(errno)); +	dbpath = alpm_option_get_dbpath(); +	snprintf(path, sizeof(path), "%slocal", dbpath); +	if(!(dir = opendir(path))) { +		fprintf(stderr, "error : %s : %s\n", path, strerror(errno));  		return(1);  	}  	while ((ent = readdir(dir)) != NULL) { -		if(!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, "..") +		if(strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0  				|| ent->d_name[0] == '.') {  			continue;  		} -		/* check for desc, depends, and files */ -		snprintf(path, PATH_MAX, "%s/%s/desc", dbpath, ent->d_name); +		/* check for known db files in local database */ +		snprintf(path, sizeof(path), "%slocal/%s/desc", dbpath, ent->d_name);  		if(access(path, F_OK)) {  			printf("%s: description file is missing\n", ent->d_name);  			ret++;  		} -		snprintf(path, PATH_MAX, "%s/%s/depends", dbpath, ent->d_name); +		snprintf(path, sizeof(path), "%slocal/%s/files", dbpath, ent->d_name);  		if(access(path, F_OK)) { -			printf("%s: dependency file is missing\n", ent->d_name); +			printf("%s: file list is missing\n", ent->d_name);  			ret++;  		} -		if(local) { -			snprintf(path, PATH_MAX, "%s/%s/files", dbpath, ent->d_name); -			if(access(path, F_OK)) { -				printf("%s: file list is missing\n", ent->d_name); -				ret++; -			} -		}  	}  	if(closedir(dir)) {  		fprintf(stderr, "error closing dbpath : %s\n", strerror(errno)); @@ -100,7 +91,7 @@ static int db_test(char *dbpath, int local)  	return(ret);  } -int checkdeps(alpm_list_t *pkglist) +static int checkdeps(alpm_list_t *pkglist)  {  	alpm_list_t *data, *i;  	int ret = 0; @@ -119,7 +110,7 @@ int checkdeps(alpm_list_t *pkglist)  	return(ret);  } -int checkconflicts(alpm_list_t *pkglist) +static int checkconflicts(alpm_list_t *pkglist)  {  	alpm_list_t *data, *i;  	int ret = 0; @@ -135,14 +126,12 @@ int checkconflicts(alpm_list_t *pkglist)  	return(ret);  } -int check_localdb(char *dbpath) { -	char localdbpath[PATH_MAX]; +static int check_localdb(void) {  	int ret = 0;  	pmdb_t *db = NULL;  	alpm_list_t *pkglist; -	snprintf(localdbpath, PATH_MAX, "%s/local", dbpath); -	ret = db_test(localdbpath, 1); +	ret = check_localdb_files();  	if(ret) {  		return(ret);  	} @@ -159,20 +148,13 @@ int check_localdb(char *dbpath) {  	return(ret);  } -int check_syncdbs(char *dbpath, alpm_list_t *dbnames) { -	char syncdbpath[PATH_MAX]; +static int check_syncdbs(alpm_list_t *dbnames) {  	int ret = 0;  	pmdb_t *db = NULL;  	alpm_list_t *i, *pkglist, *syncpkglist = NULL;  	for(i = dbnames; i; i = alpm_list_next(i)) {  		char *dbname = alpm_list_getdata(i); -		snprintf(syncdbpath, PATH_MAX, "%s/sync/%s", dbpath, dbname); -		ret = db_test(syncdbpath, 0); -		if(ret) { -			ret = 1; -			goto cleanup; -		}  		db = alpm_db_register_sync(dbname);  		if(db == NULL) {  			fprintf(stderr, "error: could not register sync database (%s)\n", @@ -190,7 +172,7 @@ cleanup:  	return(ret);  } -void usage() { +static void usage(void) {  	fprintf(stderr, "usage:\n");  	fprintf(stderr,  			"\t%s [-b <pacman db>]                : check the local database\n", BASENAME); @@ -199,7 +181,7 @@ void usage() {  	exit(1);  } -int main(int argc, char **argv) +int main(int argc, char *argv[])  {  	int ret = 0;  	char *dbpath = DBPATH; @@ -224,18 +206,21 @@ int main(int argc, char **argv)  	if(alpm_initialize() == -1) {  		fprintf(stderr, "cannot initialize alpm: %s\n", alpm_strerrorlast()); -		return(1); +		return(EXIT_FAILURE);  	}  	/* let us get log messages from libalpm */  	alpm_option_set_logcb(output_cb); -	alpm_option_set_dbpath(dbpath); +	if(alpm_option_set_dbpath(dbpath) != 0) { +		fprintf(stderr, "cannot set dbpath: %s\n", alpm_strerrorlast()); +		return(EXIT_FAILURE); +	}  	if(!dbnames) { -		ret = check_localdb(dbpath); +		ret = check_localdb();  	} else { -		ret = check_syncdbs(dbpath,dbnames); +		ret = check_syncdbs(dbnames);  		alpm_list_free(dbnames);  	} diff --git a/src/util/testpkg.c b/src/util/testpkg.c index d86fb1e0..0dd8db8f 100644 --- a/src/util/testpkg.c +++ b/src/util/testpkg.c @@ -17,8 +17,6 @@   *  along with this program.  If not, see <http://www.gnu.org/licenses/>.   */ -#include "config.h" -  #include <stdio.h> /* printf */  #include <stdarg.h> /* va_list */ @@ -39,7 +37,7 @@ static void output_cb(pmloglevel_t level, char *fmt, va_list args)  	vprintf(fmt, args);  } -int main(int argc, char **argv) +int main(int argc, char *argv[])  {  	int retval = 1; /* default = false */  	pmpkg_t *pkg = NULL; diff --git a/src/util/vercmp.c b/src/util/vercmp.c index 959dc137..8a785bb8 100644 --- a/src/util/vercmp.c +++ b/src/util/vercmp.c @@ -18,20 +18,16 @@   *  along with this program.  If not, see <http://www.gnu.org/licenses/>.   */ -#include "config.h" -  #include <stdio.h> /* printf */  #include <string.h> /* strncpy */  #define BASENAME "vercmp" -#define MAX_LEN 255 -  /* forward declaration, comes from vercmp.o in libalpm source that is linked in   * directly so we don't have any library deps */  int alpm_pkg_vercmp(const char *a, const char *b); -static void usage() +static void usage(void)  {  	fprintf(stderr, "usage: %s <ver1> <ver2>\n\n", BASENAME);  	fprintf(stderr, "return values:\n"); @@ -42,8 +38,8 @@ static void usage()  int main(int argc, char *argv[])  { -	char s1[MAX_LEN] = ""; -	char s2[MAX_LEN] = ""; +	const char *s1 = ""; +	const char *s2 = "";  	int ret;  	if(argc == 1) { @@ -56,16 +52,11 @@ int main(int argc, char *argv[])  		usage();  		return(0);  	} -	if(argc > 1) { -		strncpy(s1, argv[1], MAX_LEN); -		s1[MAX_LEN -1] = '\0'; -	}  	if(argc > 2) { -		strncpy(s2, argv[2], MAX_LEN); -		s2[MAX_LEN -1] = '\0'; -	} else { -		printf("0\n"); -		return(0); +		s2 = argv[2]; +	} +	if(argc > 1) { +		s1 = argv[1];  	}  	ret = alpm_pkg_vercmp(s1, s2); diff --git a/test/pacman/pmdb.py b/test/pacman/pmdb.py index 8cb1b832..7f798192 100755 --- a/test/pacman/pmdb.py +++ b/test/pacman/pmdb.py @@ -81,11 +81,15 @@ class pmdb:      """Database object      """ -    def __init__(self, treename, dbdir): +    def __init__(self, treename, root):          self.treename = treename -        self.dbdir = dbdir          self.pkgs = []          self.option = {} +        if self.treename == "local": +            self.dbdir = os.path.join(root, PM_DBPATH, treename) +        else: +            self.dbdir = os.path.join(root, PM_SYNCDBPATH, treename) +            self.dbfile = os.path.join(root, PM_SYNCDBPATH, treename + ".db")      def __str__(self):          return "%s" % self.treename @@ -101,7 +105,7 @@ class pmdb:          """          """ -        path = os.path.join(self.dbdir, self.treename) +        path = self.dbdir          if not os.path.isdir(path):              return None @@ -154,9 +158,19 @@ class pmdb:                  pkg.md5sum = fd.readline().strip("\n")              elif line == "%REPLACES%":                  pkg.replaces = _getsection(fd) +            elif line == "%EPOCH%": +                pkg.epoch = int(fd.readline().strip("\n"))              elif line == "%FORCE%":                  fd.readline()                  pkg.force = 1 +            elif line == "%DEPENDS%": +                pkg.depends = _getsection(fd) +            elif line == "%OPTDEPENDS%": +                pkg.optdepends = _getsection(fd) +            elif line == "%CONFLICTS%": +                pkg.conflicts = _getsection(fd) +            elif line == "%PROVIDES%": +                pkg.provides = _getsection(fd)          fd.close()          pkg.checksum["desc"] = getmd5sum(filename)          pkg.mtime["desc"] = getmtime(filename) @@ -183,35 +197,6 @@ class pmdb:          pkg.checksum["files"] = getmd5sum(filename)          pkg.mtime["files"] = getmtime(filename) -        # depends -        filename = os.path.join(path, "depends") -        if not os.path.isfile(filename): -            print "invalid db entry found (depends missing) for pkg", pkgname -            return None -        fd = file(filename, "r") -        while 1: -            line = fd.readline() -            if not line: -                break -            line = line.strip("\n") -            if line == "%DEPENDS%": -                pkg.depends = _getsection(fd) -            elif line == "%OPTDEPENDS%": -                pkg.optdepends = _getsection(fd) -            elif line == "%CONFLICTS%": -                pkg.conflicts = _getsection(fd) -            elif line == "%PROVIDES%": -                pkg.provides = _getsection(fd) -            # TODO this was going to be changed, but isn't anymore -            #elif line == "%REPLACES%": -            #    pkg.replaces = _getsection(fd) -            #elif line == "%FORCE%": -            #    fd.readline() -            #    pkg.force = 1 -        fd.close() -        pkg.checksum["depends"] = getmd5sum(filename) -        pkg.mtime["depends"] = getmtime(filename) -          # install          filename = os.path.join(path, "install")          if os.path.isfile(filename): @@ -227,18 +212,15 @@ class pmdb:          """          """ -        if self.treename == "local": -            path = os.path.join(self.dbdir, self.treename, pkg.fullname()) -        else: -            path = os.path.join(self.dbdir, "sync", self.treename, pkg.fullname()) +        path = os.path.join(self.dbdir, pkg.fullname())          mkdir(path)          # desc          # for local db entries: name, version, desc, groups, url, license,          #                       arch, builddate, installdate, packager, -        #                       size, reason +        #                       size, reason, depends, conflicts, provides          # for sync entries: name, version, desc, groups, csize, md5sum, -        #                   replaces, force +        #                   replaces, force, depends, conflicts, provides          data = [_mksection("NAME", pkg.name)]          data.append(_mksection("VERSION", pkg.version))          if pkg.desc: @@ -253,6 +235,14 @@ class pmdb:              data.append(_mksection("BUILDDATE", pkg.builddate))          if pkg.packager:              data.append(_mksection("PACKAGER", pkg.packager)) +        if pkg.depends: +            data.append(_mksection("DEPENDS", pkg.depends)) +        if pkg.optdepends: +            data.append(_mksection("OPTDEPENDS", pkg.optdepends)) +        if pkg.conflicts: +            data.append(_mksection("CONFLICTS", pkg.conflicts)) +        if pkg.provides: +            data.append(_mksection("PROVIDES", pkg.provides))          if self.treename == "local":              if pkg.url:                  data.append(_mksection("URL", pkg.url)) @@ -266,6 +256,11 @@ class pmdb:              data.append(_mksection("FILENAME", pkg.filename()))              if pkg.replaces:                  data.append(_mksection("REPLACES", pkg.replaces)) +            if pkg.epoch: +                data.append(_mksection("EPOCH", pkg.epoch)) +                # for backward compatibility +                if not pkg.force: +                    data.append(_mksection("FORCE", ""))              if pkg.force:                  data.append(_mksection("FORCE", ""))              if pkg.csize: @@ -295,30 +290,6 @@ class pmdb:              pkg.checksum["files"] = getmd5sum(filename)              pkg.mtime["files"] = getmtime(filename) -        # depends -        # for local db entries: depends, conflicts, provides -        # for sync ones: depends, conflicts, provides -        data = [] -        if pkg.depends: -            data.append(_mksection("DEPENDS", pkg.depends)) -        if pkg.optdepends: -            data.append(_mksection("OPTDEPENDS", pkg.optdepends)) -        if pkg.conflicts: -            data.append(_mksection("CONFLICTS", pkg.conflicts)) -        if pkg.provides: -            data.append(_mksection("PROVIDES", pkg.provides)) -        #if self.treename != "local": -        #    if pkg.replaces: -        #        data.append(_mksection("REPLACES", pkg.replaces)) -        #    if pkg.force: -        #        data.append(_mksection("FORCE", "")) -        if data: -            data.append("") -        filename = os.path.join(path, "depends") -        mkfile(filename, "\n".join(data)) -        pkg.checksum["depends"] = getmd5sum(filename) -        pkg.mtime["depends"] = getmtime(filename) -          # install          if self.treename == "local":              empty = 1 @@ -331,30 +302,22 @@ class pmdb:                  pkg.checksum["install"] = getmd5sum(filename)                  pkg.mtime["install"] = getmtime(filename) -    def gensync(self, path): +    def gensync(self):          """          """ +        if not self.dbfile: +            return          curdir = os.getcwd() -        tmpdir = tempfile.mkdtemp() -        os.chdir(tmpdir) - -        for pkg in self.pkgs: -            mkdescfile(pkg.fullname(), pkg) +        os.chdir(self.dbdir)          # Generate database archive -        mkdir(path) -        archive = os.path.join(path, "%s%s" % (self.treename, PM_EXT_DB)) -        tar = tarfile.open(archive, "w:gz") -        for root, dirs, files in os.walk('.'): -            for d in dirs: -                tar.add(os.path.join(root, d), recursive=False) -            for f in files: -                tar.add(os.path.join(root, f)) +        tar = tarfile.open(self.dbfile, "w:gz") +        for i in os.listdir("."): +            tar.add(i)          tar.close()          os.chdir(curdir) -        shutil.rmtree(tmpdir)      def ispkgmodified(self, pkg):          """ diff --git a/test/pacman/pmpkg.py b/test/pacman/pmpkg.py index 1d55175e..9ce09783 100755 --- a/test/pacman/pmpkg.py +++ b/test/pacman/pmpkg.py @@ -48,9 +48,9 @@ class pmpkg:          self.csize = 0          self.reason = 0          self.md5sum = ""      # sync only -        self.replaces = []    # sync only (will be moved to depends) -        self.force = 0        # sync only (will be moved to depends) -        # depends +        self.replaces = [] +        self.force = 0 +        self.epoch = 0          self.depends = []          self.optdepends = []          self.conflicts = [] @@ -69,13 +69,11 @@ class pmpkg:          }          self.checksum = {              "desc": "", -            "depends": "",              "files": "",              "install": ""          }          self.mtime = {              "desc": (0, 0, 0), -            "depends": (0, 0, 0),              "files": (0, 0, 0),              "install": (0, 0, 0)          } @@ -84,7 +82,6 @@ class pmpkg:          s = ["%s" % self.fullname()]          s.append("description: %s" % self.desc)          s.append("url: %s" % self.url) -        s.append("depends: %s" % " ".join(self.depends))          s.append("files: %s" % " ".join(self.files))          s.append("reason: %d" % self.reason)          return "\n".join(s) diff --git a/test/pacman/pmrule.py b/test/pacman/pmrule.py index e7c9c44f..89ae3f49 100755 --- a/test/pacman/pmrule.py +++ b/test/pacman/pmrule.py @@ -29,7 +29,9 @@ class pmrule:          self.result = 0      def __str__(self): -        return "rule = %s" % self.rule +        if len(self.rule) <= 40: +            return self.rule +        return self.rule[:37] + '...'      def check(self, root, retcode, localdb, files):          """ @@ -76,6 +78,9 @@ class pmrule:                  elif case == "VERSION":                      if value != newpkg.version:                          success = 0 +                elif case == "DESC": +                    if value != newpkg.desc: +                        success = 0                  elif case == "GROUPS":                      if not value in newpkg.groups:                          success = 0 @@ -153,7 +158,4 @@ class pmrule:          self.result = success          return success - -if __name__ != "__main__": -    rule = pmrule("PKG_EXIST=dummy")  # vim: set ts=4 sw=4 et: diff --git a/test/pacman/pmtest.py b/test/pacman/pmtest.py index f3026f29..c70e41ae 100755 --- a/test/pacman/pmtest.py +++ b/test/pacman/pmtest.py @@ -47,7 +47,7 @@ class pmtest:          """          """          if not treename in self.db: -            self.db[treename] = pmdb.pmdb(treename, os.path.join(self.root, PM_DBPATH)) +            self.db[treename] = pmdb.pmdb(treename, self.root)          self.db[treename].pkgs.append(pkg)      def addpkg(self, pkg): @@ -73,7 +73,7 @@ class pmtest:          self.args = ""          self.retcode = 0          self.db = { -            "local": pmdb.pmdb("local", os.path.join(self.root, PM_DBPATH)) +            "local": pmdb.pmdb("local", self.root)          }          self.localpkgs = []          self.filesystem = [] @@ -152,9 +152,11 @@ class pmtest:          vprint("    Creating sync database archives")          for key, value in self.db.iteritems():              if key == "local": continue -            archive = value.treename + PM_EXT_DB -            vprint("\t" + os.path.join(SYNCREPO, archive)) -            value.gensync(os.path.join(syncdir, value.treename)) +            vprint("\t" + value.treename) +            value.gensync() +            serverpath = os.path.join(syncdir, value.treename) +            mkdir(serverpath) +            shutil.copy(value.dbfile, serverpath)          # Filesystem          vprint("    Populating file system") @@ -200,7 +202,7 @@ class pmtest:          if pacman["gdb"]:              cmd.append("libtool execute gdb --args")          if pacman["valgrind"]: -            cmd.append("valgrind -q --tool=memcheck --leak-check=full --show-reachable=yes") +            cmd.append("valgrind -q --tool=memcheck --leak-check=full --show-reachable=yes --suppressions=%s/valgrind.supp" % os.getcwd())          cmd.append("\"%s\" --config=\"%s\" --root=\"%s\" --dbpath=\"%s\" --cachedir=\"%s\"" \                     % (pacman["bin"],                         os.path.join(self.root, PACCONF), @@ -258,11 +260,6 @@ class pmtest:                  self.result["fail"] += 1              else:                  msg = "SKIP" -            print "\t[%s] %s" % (msg, i.rule) -            i.result = success - - -if __name__ == "__main__": -    pass +            print "\t[%s] %s" % (msg, i)  # vim: set ts=4 sw=4 et: diff --git a/test/pacman/tests/database012.py b/test/pacman/tests/database012.py index a1f86980..52813ec6 100644 --- a/test/pacman/tests/database012.py +++ b/test/pacman/tests/database012.py @@ -21,11 +21,5 @@ self.addrule("PACMAN_RETCODE=0")  self.addrule("PKG_EXIST=dummy")  self.addrule("PKG_VERSION=dummy|2.0-1")  for f in lp.files: -	self.addrule("!FILE_EXIST=%s" % f) -# TODO: I honestly think the above should NOT delete the original files, it -# should upgrade the DB entry without touching anything on the file system. -# E.g. this test should be the same as: -#    pacman -R --dbonly dummy && pacman -U --dbonly dummy.pkg.tar.gz -#for f in lp.files: -#	self.addrule("FILE_EXIST=%s" % f) +	self.addrule("FILE_EXIST=%s" % f)  self.addrule("!FILE_EXIST=bin/dummy2") diff --git a/test/pacman/tests/ignore001.py b/test/pacman/tests/ignore001.py index bb3fa59a..e9764bc9 100644 --- a/test/pacman/tests/ignore001.py +++ b/test/pacman/tests/ignore001.py @@ -9,7 +9,7 @@ self.addpkg2db("local", package2)  package2up = pmpkg("package2", "2.0-1")  self.addpkg2db("sync", package2up) -self.option["IgnorePkg"] = ["irrelavent"] +self.option["IgnorePkg"] = ["irrelevant"]  self.args = "-Su"  self.addrule("PACMAN_RETCODE=0") diff --git a/test/pacman/tests/pacman005.py b/test/pacman/tests/pacman005.py new file mode 100644 index 00000000..bb21ad4f --- /dev/null +++ b/test/pacman/tests/pacman005.py @@ -0,0 +1,8 @@ +self.description = "Test invalid combination of command line options (-Qy)" + +p = pmpkg("foobar") +self.addpkg2db("local", p) + +self.args = "-Qy" + +self.addrule("PACMAN_RETCODE=1") diff --git a/test/pacman/tests/smoke002.py b/test/pacman/tests/smoke002.py new file mode 100644 index 00000000..44f2d0ec --- /dev/null +++ b/test/pacman/tests/smoke002.py @@ -0,0 +1,19 @@ +self.description = "Install packages with huge descriptions" + +p1 = pmpkg("pkg1") +p1.desc = 'A' * 500 * 1024 +self.addpkg(p1) + +p2 = pmpkg("pkg2") +p2.desc = 'A' * 600 * 1024 +self.addpkg(p2) + +self.args = "-U %s %s" % (p1.filename(), p2.filename()) + +# Note that the current cutoff on line length is 512K, so the first package +# will succeed while the second one will fail to record the description. +self.addrule("PACMAN_RETCODE=0") +self.addrule("PKG_EXIST=pkg1") +self.addrule("PKG_DESC=pkg1|%s" % p1.desc) +self.addrule("PKG_EXIST=pkg1") +self.addrule("!PKG_DESC=pkg1|%s" % p2.desc) diff --git a/test/pacman/tests/sync024.py b/test/pacman/tests/sync024.py new file mode 100644 index 00000000..6d1192f0 --- /dev/null +++ b/test/pacman/tests/sync024.py @@ -0,0 +1,23 @@ +self.description = "Install a group from a sync db repo/group syntax" + +sp1 = pmpkg("pkg1") +sp2 = pmpkg("pkg2") +sp3 = pmpkg("pkg3") +newp1 = pmpkg("pkg1", "1.2-1") + +for p in sp1, sp2, sp3, newp1: +	setattr(p, "groups", ["grp"]) + +self.addpkg2db("testing", newp1); + +for p in sp1, sp2, sp3: +	self.addpkg2db("sync", p); + +self.args = "-S testing/grp" + +self.addrule("PACMAN_RETCODE=0") +for p in sp2, sp3: +	self.addrule("!PKG_EXIST=%s" % p.name) +self.addrule("PKG_EXIST=%s" % newp1.name) +# The newer version should still be installed +self.addrule("PKG_VERSION=pkg1|1.2-1") diff --git a/test/pacman/tests/sync140.py b/test/pacman/tests/sync140.py new file mode 100644 index 00000000..b7ec9fcf --- /dev/null +++ b/test/pacman/tests/sync140.py @@ -0,0 +1,13 @@ +self.description = "Sysupgrade with a sync package having higher epoch" + +sp = pmpkg("dummy", "1.0-1") +sp.epoch = 1 +self.addpkg2db("sync", sp) + +lp = pmpkg("dummy", "1.1-1") +self.addpkg2db("local", lp) + +self.args = "-Su" + +self.addrule("PACMAN_RETCODE=0") +self.addrule("PKG_VERSION=dummy|1.0-1") diff --git a/test/pacman/tests/sync141.py b/test/pacman/tests/sync141.py new file mode 100644 index 00000000..dac81f76 --- /dev/null +++ b/test/pacman/tests/sync141.py @@ -0,0 +1,13 @@ +self.description = "Sysupgrade with an epoch and ignore on same package" + +lp = pmpkg("dummy", "1.0-1") +self.addpkg2db("local", lp) + +sp = pmpkg("dummy", "1.0-2") +sp.epoch = 1 +self.addpkg2db("sync", sp) + +self.args = "-Su --ignore %s" % lp.name + +self.addrule("PACMAN_RETCODE=0") +self.addrule("PKG_VERSION=dummy|1.0-1") diff --git a/test/pacman/tests/sync142.py b/test/pacman/tests/sync142.py new file mode 100644 index 00000000..83766bb8 --- /dev/null +++ b/test/pacman/tests/sync142.py @@ -0,0 +1,14 @@ +self.description = "Sysupgrade with an epoch package overriding a force package" + +sp = pmpkg("dummy", "1.4-1") +sp.epoch = 2 +self.addpkg2db("sync", sp) + +lp = pmpkg("dummy", "2.0-1") +lp.force = 1 +self.addpkg2db("local", lp) + +self.args = "-Su" + +self.addrule("PACMAN_RETCODE=0") +self.addrule("PKG_VERSION=dummy|1.4-1") diff --git a/test/pacman/tests/sync143.py b/test/pacman/tests/sync143.py new file mode 100644 index 00000000..37353a84 --- /dev/null +++ b/test/pacman/tests/sync143.py @@ -0,0 +1,18 @@ +self.description = "Sysupgrade with same version, different epochs" + +sp = pmpkg("dummy", "2.0-1") +sp.files = ["bin/dummynew"] +sp.epoch = 2 +self.addpkg2db("sync", sp) + +lp = pmpkg("dummy", "2.0-1") +lp.files = ["bin/dummyold"] +lp.force = 1 +self.addpkg2db("local", lp) + +self.args = "-Su" + +self.addrule("PACMAN_RETCODE=0") +self.addrule("PKG_VERSION=dummy|2.0-1") +self.addrule("FILE_EXIST=bin/dummynew") +self.addrule("!FILE_EXIST=bin/dummyold") diff --git a/test/pacman/util.py b/test/pacman/util.py index e01a3b8f..0044f21b 100755 --- a/test/pacman/util.py +++ b/test/pacman/util.py @@ -25,10 +25,10 @@ import stat  # ALPM  PM_ROOT     = "/"  PM_DBPATH   = "var/lib/pacman" +PM_SYNCDBPATH = "var/lib/pacman/sync"  PM_LOCK     = "var/lib/pacman/db.lck"  PM_CACHEDIR = "var/cache/pacman/pkg"  PM_EXT_PKG  = ".pkg.tar.gz" -PM_EXT_DB   = ".db.tar.gz"  PM_PACNEW   = ".pacnew"  PM_PACORIG  = ".pacorig"  PM_PACSAVE  = ".pacsave" @@ -154,6 +154,10 @@ def mkdescfile(filename, pkg):          data.append("provides = %s" % i)      for i in pkg.backup:          data.append("backup = %s" % i) +    if pkg.epoch: +        data.append("epoch = %d" % pkg.epoch) +        if not pkg.force: +            data.append("force = 1")      if pkg.force:          data.append("force = 1")  | 
