74898 lines
2.3 MiB
74898 lines
2.3 MiB
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/aclocal.m4 open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/aclocal.m4
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/aclocal.m4 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/aclocal.m4 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,7277 @@
|
|
+# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
|
|
+
|
|
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
|
+# 2005 Free Software Foundation, Inc.
|
|
+# 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.
|
|
+
|
|
+# This program is distributed in the hope that it will be useful,
|
|
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
|
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
+# PARTICULAR PURPOSE.
|
|
+
|
|
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
|
|
+
|
|
+# serial 48 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
|
|
+dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
|
|
+dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
|
|
+ AC_PROVIDE_IFELSE([AC_PROG_CXX],
|
|
+ [AC_LIBTOOL_CXX],
|
|
+ [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
|
|
+ ])])
|
|
+dnl And a similar setup for Fortran 77 support
|
|
+ AC_PROVIDE_IFELSE([AC_PROG_F77],
|
|
+ [AC_LIBTOOL_F77],
|
|
+ [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
|
|
+])])
|
|
+
|
|
+dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
|
|
+dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
|
|
+dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
|
|
+ AC_PROVIDE_IFELSE([AC_PROG_GCJ],
|
|
+ [AC_LIBTOOL_GCJ],
|
|
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
|
|
+ [AC_LIBTOOL_GCJ],
|
|
+ [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
|
|
+ [AC_LIBTOOL_GCJ],
|
|
+ [ifdef([AC_PROG_GCJ],
|
|
+ [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
|
|
+ ifdef([A][M_PROG_GCJ],
|
|
+ [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
|
|
+ ifdef([LT_AC_PROG_GCJ],
|
|
+ [define([LT_AC_PROG_GCJ],
|
|
+ defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
|
|
+])])# AC_PROG_LIBTOOL
|
|
+
|
|
+
|
|
+# _AC_PROG_LIBTOOL
|
|
+# ----------------
|
|
+AC_DEFUN([_AC_PROG_LIBTOOL],
|
|
+[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
|
|
+AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
|
|
+AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
|
|
+AC_BEFORE([$0],[AC_LIBTOOL_GCJ])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_deplibs'
|
|
+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_outfile=conftest.$ac_objext
|
|
+printf "$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_outfile=conftest.$ac_objext
|
|
+printf "$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_LINK_IFELSE(AC_LANG_PROGRAM,[
|
|
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
|
+}'`
|
|
+# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
|
+}'`; 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-*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-*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-*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])
|
|
+ printf "$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_CACHE_CHECK([$1], [$2],
|
|
+ [$2=no
|
|
+ save_LDFLAGS="$LDFLAGS"
|
|
+ LDFLAGS="$LDFLAGS $3"
|
|
+ printf "$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
|
|
+ ;;
|
|
+ *)
|
|
+ # 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.
|
|
+ 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`
|
|
+ ;;
|
|
+ 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_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
|
|
+ printf "$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"
|
|
+ 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_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"
|
|
+if test "$GCC" = yes; then
|
|
+ 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 ';' >/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.
|
|
+ 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
|
|
+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`'
|
|
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
|
|
+ if test "$GCC" = yes; then
|
|
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
|
|
+ else
|
|
+ sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
|
|
+ fi
|
|
+ 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
|
|
+ ;;
|
|
+
|
|
+kfreebsd*-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
|
|
+ shlibpath_overrides_runpath=no
|
|
+ hardcode_into_libs=yes
|
|
+ dynamic_linker='GNU ld.so'
|
|
+ ;;
|
|
+
|
|
+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
|
|
+ ;;
|
|
+ freebsd*) # from 4.6 on
|
|
+ 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'
|
|
+ ;;
|
|
+
|
|
+interix3*)
|
|
+ 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*)
|
|
+ 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
|
|
+
|
|
+ # find out which ABI we are using
|
|
+ libsuff=
|
|
+ case "$host_cpu" in
|
|
+ x86_64*|s390x*|powerpc64*)
|
|
+ echo '[#]line __oline__ "configure"' > conftest.$ac_ext
|
|
+ if AC_TRY_EVAL(ac_compile); then
|
|
+ case `/usr/bin/file conftest.$ac_objext` in
|
|
+ *64-bit*)
|
|
+ libsuff=64
|
|
+ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ rm -rf conftest*
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # 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/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
|
|
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $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'
|
|
+ ;;
|
|
+
|
|
+knetbsd*-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
|
|
+ shlibpath_overrides_runpath=no
|
|
+ hardcode_into_libs=yes
|
|
+ dynamic_linker='GNU 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"
|
|
+ ;;
|
|
+
|
|
+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_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
|
|
+ CXX)
|
|
+ if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
|
|
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
|
|
+ (test "X$CXX" != "Xg++"))) ; then
|
|
+ AC_LIBTOOL_LANG_CXX_CONFIG
|
|
+ else
|
|
+ tagname=""
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ F77)
|
|
+ if test -n "$F77" && test "X$F77" != "Xno"; then
|
|
+ AC_LIBTOOL_LANG_F77_CONFIG
|
|
+ else
|
|
+ tagname=""
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ GCJ)
|
|
+ if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
|
|
+ AC_LIBTOOL_LANG_GCJ_CONFIG
|
|
+ else
|
|
+ tagname=""
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ 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 recognise 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 recognise 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 recognise 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'.
|
|
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
|
|
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
|
|
+ ;;
|
|
+
|
|
+darwin* | rhapsody*)
|
|
+ lt_cv_deplibs_check_method=pass_all
|
|
+ ;;
|
|
+
|
|
+freebsd* | kfreebsd*-gnu | 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
|
|
+ ;;
|
|
+
|
|
+interix3*)
|
|
+ # 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*)
|
|
+ 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
|
|
+ ;;
|
|
+
|
|
+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_CXX
|
|
+# --------------
|
|
+# enable support for C++ libraries
|
|
+AC_DEFUN([AC_LIBTOOL_CXX],
|
|
+[AC_REQUIRE([_LT_AC_LANG_CXX])
|
|
+])# AC_LIBTOOL_CXX
|
|
+
|
|
+
|
|
+# _LT_AC_LANG_CXX
|
|
+# ---------------
|
|
+AC_DEFUN([_LT_AC_LANG_CXX],
|
|
+[AC_REQUIRE([AC_PROG_CXX])
|
|
+AC_REQUIRE([_LT_AC_PROG_CXXCPP])
|
|
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
|
|
+])# _LT_AC_LANG_CXX
|
|
+
|
|
+# _LT_AC_PROG_CXXCPP
|
|
+# ------------------
|
|
+AC_DEFUN([_LT_AC_PROG_CXXCPP],
|
|
+[
|
|
+AC_REQUIRE([AC_PROG_CXX])
|
|
+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
|
|
+fi
|
|
+])# _LT_AC_PROG_CXXCPP
|
|
+
|
|
+# AC_LIBTOOL_F77
|
|
+# --------------
|
|
+# enable support for Fortran 77 libraries
|
|
+AC_DEFUN([AC_LIBTOOL_F77],
|
|
+[AC_REQUIRE([_LT_AC_LANG_F77])
|
|
+])# AC_LIBTOOL_F77
|
|
+
|
|
+
|
|
+# _LT_AC_LANG_F77
|
|
+# ---------------
|
|
+AC_DEFUN([_LT_AC_LANG_F77],
|
|
+[AC_REQUIRE([AC_PROG_F77])
|
|
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
|
|
+])# _LT_AC_LANG_F77
|
|
+
|
|
+
|
|
+# AC_LIBTOOL_GCJ
|
|
+# --------------
|
|
+# enable support for GCJ libraries
|
|
+AC_DEFUN([AC_LIBTOOL_GCJ],
|
|
+[AC_REQUIRE([_LT_AC_LANG_GCJ])
|
|
+])# AC_LIBTOOL_GCJ
|
|
+
|
|
+
|
|
+# _LT_AC_LANG_GCJ
|
|
+# ---------------
|
|
+AC_DEFUN([_LT_AC_LANG_GCJ],
|
|
+[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
|
|
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
|
|
+ [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
|
|
+ [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
|
|
+ [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
|
|
+ [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
|
|
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
|
|
+])# _LT_AC_LANG_GCJ
|
|
+
|
|
+
|
|
+# 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;\n"
|
|
+
|
|
+# Code to be used in simple link tests
|
|
+lt_simple_link_test_code='int main(){return(0);}\n'
|
|
+
|
|
+_LT_AC_SYS_COMPILER
|
|
+
|
|
+# save warnings/boilerplate of simple test code
|
|
+_LT_COMPILER_BOILERPLATE
|
|
+_LT_LINKER_BOILERPLATE
|
|
+
|
|
+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_LANG_CXX_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_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
|
|
+AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
|
|
+[AC_LANG_PUSH(C++)
|
|
+AC_REQUIRE([AC_PROG_CXX])
|
|
+AC_REQUIRE([_LT_AC_PROG_CXXCPP])
|
|
+
|
|
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
|
|
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
|
|
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
|
|
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
|
|
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
|
|
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
|
|
+_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_minus_L, $1)=no
|
|
+_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
|
|
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
|
|
+_LT_AC_TAGVAR(module_cmds, $1)=
|
|
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
|
|
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
|
|
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
|
|
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
|
|
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
|
|
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
|
|
+
|
|
+# Dependencies to place before and after the object being linked:
|
|
+_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)=
|
|
+
|
|
+# Source file extension for C++ test sources.
|
|
+ac_ext=cpp
|
|
+
|
|
+# 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;\n"
|
|
+
|
|
+# Code to be used in simple link tests
|
|
+lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }\n'
|
|
+
|
|
+# 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
|
|
+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++"}
|
|
+compiler=$CC
|
|
+_LT_AC_TAGVAR(compiler, $1)=$CC
|
|
+_LT_CC_BASENAME([$compiler])
|
|
+
|
|
+# We don't want -fno-exception wen compiling C++ code, so set the
|
|
+# no_builtin_flag separately
|
|
+if test "$GXX" = yes; then
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
|
|
+else
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
|
|
+fi
|
|
+
|
|
+if test "$GXX" = yes; then
|
|
+ # Set up default GNU C++ configuration
|
|
+
|
|
+ AC_PROG_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
|
|
+
|
|
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
|
|
+ _LT_AC_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_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
|
|
+ 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_AC_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 "\-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_AC_TAGVAR(ld_shlibs, $1)=yes
|
|
+case $host_os in
|
|
+ aix3*)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ 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
|
|
+ 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
|
|
+ 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_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 "$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
|
|
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
|
|
+ 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
|
|
+ ;;
|
|
+
|
|
+ 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
|
|
+ ;;
|
|
+
|
|
+ chorus*)
|
|
+ case $cc_basename in
|
|
+ *)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+
|
|
+ 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
|
|
+
|
|
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
|
|
+ _LT_AC_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_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 -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_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ fi
|
|
+ ;;
|
|
+ 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 "$GXX" = yes ; then
|
|
+ lt_int_apple_cc_single_mod=no
|
|
+ output_verbose_link_cmd='echo'
|
|
+ if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then
|
|
+ lt_int_apple_cc_single_mod=yes
|
|
+ fi
|
|
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
|
|
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
|
|
+ else
|
|
+ _LT_AC_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'
|
|
+ fi
|
|
+ _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
|
|
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
|
|
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
|
|
+ else
|
|
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "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~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
|
|
+ fi
|
|
+ _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 ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $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 -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$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}'
|
|
+ ;;
|
|
+ *)
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ dgux*)
|
|
+ case $cc_basename in
|
|
+ ec++*)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ ghcx*)
|
|
+ # Green Hills C++ Compiler
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ *)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ freebsd[[12]]*)
|
|
+ # C++ shared libraries reported to be fairly broken before switch to ELF
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ freebsd-elf*)
|
|
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
|
|
+ ;;
|
|
+ freebsd* | kfreebsd*-gnu | dragonfly*)
|
|
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
|
|
+ # conventions
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
|
|
+ ;;
|
|
+ gnu*)
|
|
+ ;;
|
|
+ hpux9*)
|
|
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
|
|
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
|
|
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
|
|
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
|
|
+ _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ aCC*)
|
|
+ _LT_AC_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) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
|
|
+ ;;
|
|
+ *)
|
|
+ if test "$GXX" = yes; then
|
|
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${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_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ hpux10*|hpux11*)
|
|
+ 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(export_dynamic_flag_spec, $1)='${wl}-E'
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ case $host_cpu in
|
|
+ hppa*64*|ia64*)
|
|
+ _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(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_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ aCC*)
|
|
+ case $host_cpu in
|
|
+ hppa*64*)
|
|
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
|
|
+ ;;
|
|
+ ia64*)
|
|
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
|
|
+ ;;
|
|
+ *)
|
|
+ _LT_AC_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; echo $list'
|
|
+ ;;
|
|
+ *)
|
|
+ if test "$GXX" = yes; then
|
|
+ if test $with_gnu_ld = no; then
|
|
+ case $host_cpu in
|
|
+ hppa*64*)
|
|
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
|
|
+ ;;
|
|
+ ia64*)
|
|
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
|
|
+ ;;
|
|
+ *)
|
|
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${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_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ interix3*)
|
|
+ _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'
|
|
+ ;;
|
|
+ irix5* | irix6*)
|
|
+ case $cc_basename in
|
|
+ CC*)
|
|
+ # SGI C++
|
|
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -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_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
|
|
+ else
|
|
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
|
|
+ fi
|
|
+ fi
|
|
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
|
|
+ ;;
|
|
+ esac
|
|
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
|
|
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
|
|
+ ;;
|
|
+ linux*)
|
|
+ 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_AC_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_AC_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; echo $list'
|
|
+
|
|
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
|
|
+ _LT_AC_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_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
|
|
+ ;;
|
|
+ icpc*)
|
|
+ # 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_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ _LT_AC_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_AC_TAGVAR(archive_cmds_need_lc, $1)=no
|
|
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
|
|
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
|
|
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
|
|
+ ;;
|
|
+ pgCC*)
|
|
+ # Portland Group C++ compiler
|
|
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
|
|
+ _LT_AC_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'
|
|
+
|
|
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
|
|
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
|
|
+ _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'
|
|
+ ;;
|
|
+ cxx*)
|
|
+ # Compaq C++
|
|
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
|
|
+ _LT_AC_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=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ lynxos*)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ m88k*)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ mvs*)
|
|
+ case $cc_basename in
|
|
+ cxx*)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ *)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ netbsd*)
|
|
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
|
|
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
|
|
+ wlarc=
|
|
+ _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
|
|
+ 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::"'
|
|
+ ;;
|
|
+ openbsd2*)
|
|
+ # C++ shared libraries are fairly broken
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ openbsd*)
|
|
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
|
|
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
|
|
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
|
|
+ _LT_AC_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_AC_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_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
|
|
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
|
|
+ fi
|
|
+ output_verbose_link_cmd='echo'
|
|
+ ;;
|
|
+ osf3*)
|
|
+ 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_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
|
|
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
|
|
+
|
|
+ # Archives containing C++ object files must be created using
|
|
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
|
|
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
|
|
+
|
|
+ ;;
|
|
+ RCC*)
|
|
+ # Rational C++ 2.4.1
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ cxx*)
|
|
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
|
|
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
|
|
+
|
|
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
|
|
+ _LT_AC_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=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
|
|
+ ;;
|
|
+ *)
|
|
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
|
|
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
|
|
+ _LT_AC_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" && 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'
|
|
+ _LT_AC_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 "\-L"'
|
|
+
|
|
+ else
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ 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_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
|
|
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
|
|
+
|
|
+ # Archives containing C++ object files must be created using
|
|
+ # the KAI C++ compiler.
|
|
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
|
|
+ ;;
|
|
+ RCC*)
|
|
+ # Rational C++ 2.4.1
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ cxx*)
|
|
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
|
|
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_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~
|
|
+ $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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
|
|
+ _LT_AC_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=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
|
|
+ ;;
|
|
+ *)
|
|
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
|
|
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
|
|
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
|
|
+
|
|
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
|
|
+ _LT_AC_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 "\-L"'
|
|
+
|
|
+ else
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ psos*)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ sunos4*)
|
|
+ case $cc_basename in
|
|
+ CC*)
|
|
+ # Sun C++ 4.x
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ lcc*)
|
|
+ # Lucid
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ *)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ solaris*)
|
|
+ case $cc_basename in
|
|
+ CC*)
|
|
+ # Sun C++ 4.2, 5.x and Centerline C++
|
|
+ _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes
|
|
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
|
|
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $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 -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_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 C++ compiler is used as linker so we must use $wl
|
|
+ # flag to pass the commands to the underlying system
|
|
+ # linker. We must also pass each convience library through
|
|
+ # to the system linker between allextract/defaultextract.
|
|
+ # The C++ compiler will combine linker options so we
|
|
+ # cannot just pass the convience library names through
|
|
+ # without $wl.
|
|
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
|
|
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract'
|
|
+ ;;
|
|
+ esac
|
|
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
|
|
+
|
|
+ output_verbose_link_cmd='echo'
|
|
+
|
|
+ # 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_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
|
|
+ ;;
|
|
+ gcx*)
|
|
+ # Green Hills C++ Compiler
|
|
+ _LT_AC_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_AC_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_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
|
|
+ if $CC --version | grep -v '^2\.7' > /dev/null; then
|
|
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
|
|
+ _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 -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 \"\-L\""
|
|
+ else
|
|
+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
|
|
+ # platform.
|
|
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
|
|
+ _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 -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 \"\-L\""
|
|
+ fi
|
|
+
|
|
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ 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'
|
|
+
|
|
+ case $cc_basename in
|
|
+ CC*)
|
|
+ _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'
|
|
+ ;;
|
|
+ *)
|
|
+ _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'
|
|
+ ;;
|
|
+ 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.
|
|
+ # 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.
|
|
+ # So that behaviour is only enabled if SCOABSPATH is set to a
|
|
+ # non-empty value in the environment. Most likely only useful for
|
|
+ # creating official distributions of packages.
|
|
+ # This is a hack until libtool officially supports absolute path
|
|
+ # names for shared libraries.
|
|
+ _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'
|
|
+
|
|
+ case $cc_basename in
|
|
+ CC*)
|
|
+ _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'
|
|
+ ;;
|
|
+ *)
|
|
+ _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'
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ tandem*)
|
|
+ case $cc_basename in
|
|
+ NCC*)
|
|
+ # NonStop-UX NCC 3.20
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ *)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ vxworks*)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+ *)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
|
|
+ ;;
|
|
+esac
|
|
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
|
|
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
|
|
+
|
|
+_LT_AC_TAGVAR(GCC, $1)="$GXX"
|
|
+_LT_AC_TAGVAR(LD, $1)="$LD"
|
|
+
|
|
+AC_LIBTOOL_POSTDEP_PREDEP($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_CONFIG($1)
|
|
+
|
|
+AC_LANG_POP
|
|
+CC=$lt_save_CC
|
|
+LDCXX=$LD
|
|
+LD=$lt_save_LD
|
|
+GCC=$lt_save_GCC
|
|
+with_gnu_ldcxx=$with_gnu_ld
|
|
+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
|
|
+])# AC_LIBTOOL_LANG_CXX_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
|
|
+],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
|
|
+class Foo
|
|
+{
|
|
+public:
|
|
+ Foo (void) { a = 0; }
|
|
+private:
|
|
+ int a;
|
|
+};
|
|
+EOF
|
|
+],[$1],[F77],[cat > conftest.$ac_ext <<EOF
|
|
+ subroutine foo
|
|
+ implicit none
|
|
+ integer*4 a
|
|
+ a=0
|
|
+ return
|
|
+ end
|
|
+EOF
|
|
+],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
|
|
+public class foo {
|
|
+ private int a;
|
|
+ public void bar (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
|
|
+
|
|
+# PORTME: override above test on systems where it is broken
|
|
+ifelse([$1],[CXX],
|
|
+[case $host_os in
|
|
+interix3*)
|
|
+ # 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_AC_TAGVAR(predep_objects,$1)=
|
|
+ _LT_AC_TAGVAR(postdep_objects,$1)=
|
|
+ _LT_AC_TAGVAR(postdeps,$1)=
|
|
+ ;;
|
|
+
|
|
+solaris*)
|
|
+ case $cc_basename in
|
|
+ CC*)
|
|
+ # 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.
|
|
+ _LT_AC_TAGVAR(postdeps,$1)='-lCstd -lCrun'
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+esac
|
|
+])
|
|
+
|
|
+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_F77_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_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
|
|
+AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
|
|
+[AC_REQUIRE([AC_PROG_F77])
|
|
+AC_LANG_PUSH(Fortran 77)
|
|
+
|
|
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
|
|
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
|
|
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
|
|
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
|
|
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
|
|
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
|
|
+_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_minus_L, $1)=no
|
|
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
|
|
+_LT_AC_TAGVAR(module_cmds, $1)=
|
|
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
|
|
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
|
|
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
|
|
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
|
|
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
|
|
+_LT_AC_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_AC_TAGVAR(objext, $1)=$objext
|
|
+
|
|
+# Code to be used in simple compile tests
|
|
+lt_simple_compile_test_code=" subroutine t\n return\n end\n"
|
|
+
|
|
+# Code to be used in simple link tests
|
|
+lt_simple_link_test_code=" program t\n end\n"
|
|
+
|
|
+# 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=${F77-"f77"}
|
|
+compiler=$CC
|
|
+_LT_AC_TAGVAR(compiler, $1)=$CC
|
|
+_LT_CC_BASENAME([$compiler])
|
|
+
|
|
+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])
|
|
+
|
|
+_LT_AC_TAGVAR(GCC, $1)="$G77"
|
|
+_LT_AC_TAGVAR(LD, $1)="$LD"
|
|
+
|
|
+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_CONFIG($1)
|
|
+
|
|
+AC_LANG_POP
|
|
+CC="$lt_save_CC"
|
|
+])# AC_LIBTOOL_LANG_F77_CONFIG
|
|
+
|
|
+
|
|
+# AC_LIBTOOL_LANG_GCJ_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_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
|
|
+AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
|
|
+[AC_LANG_SAVE
|
|
+
|
|
+# Source file extension for Java test sources.
|
|
+ac_ext=java
|
|
+
|
|
+# Object file extension for compiled Java test sources.
|
|
+objext=o
|
|
+_LT_AC_TAGVAR(objext, $1)=$objext
|
|
+
|
|
+# Code to be used in simple compile tests
|
|
+lt_simple_compile_test_code="class foo {}\n"
|
|
+
|
|
+# Code to be used in simple link tests
|
|
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }\n'
|
|
+
|
|
+# 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=${GCJ-"gcj"}
|
|
+compiler=$CC
|
|
+_LT_AC_TAGVAR(compiler, $1)=$CC
|
|
+_LT_CC_BASENAME([$compiler])
|
|
+
|
|
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
|
|
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
|
|
+
|
|
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
|
|
+
|
|
+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_CONFIG($1)
|
|
+
|
|
+AC_LANG_RESTORE
|
|
+CC="$lt_save_CC"
|
|
+])# AC_LIBTOOL_LANG_GCJ_CONFIG
|
|
+
|
|
+
|
|
+# 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 }\n'
|
|
+
|
|
+# 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(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
|
|
+# 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)
|
|
+
|
|
+gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\`
|
|
+gcc_ver=\`gcc -dumpversion\`
|
|
+
|
|
+# 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=\`echo $lt_[]_LT_AC_TAGVAR(predep_objects, $1) | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# Dependencies to place after the objects being linked to create a
|
|
+# shared library.
|
|
+postdep_objects=\`echo $lt_[]_LT_AC_TAGVAR(postdep_objects, $1) | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# 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=\`echo $lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# 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=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# 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_AC_TAGVAR(fix_srcfile_path, $1)"
|
|
+
|
|
+# 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([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*)
|
|
+ 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])
|
|
+ ifelse([$1],[CXX],[
|
|
+ # C++ specific cases for pic, static, wl, etc.
|
|
+ if test "$GXX" = 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* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
|
|
+ # PIC is the default for these OSes.
|
|
+ ;;
|
|
+ mingw* | os2* | pw32*)
|
|
+ # 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'
|
|
+ ;;
|
|
+ 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'
|
|
+ ;;
|
|
+ *djgpp*)
|
|
+ # DJGPP does not support shared libraries at all
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
|
|
+ ;;
|
|
+ interix3*)
|
|
+ # 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_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*)
|
|
+ ;;
|
|
+ *)
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ *)
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
|
|
+ ;;
|
|
+ esac
|
|
+ else
|
|
+ case $host_os in
|
|
+ aix4* | aix5*)
|
|
+ # 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'
|
|
+ else
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
|
|
+ fi
|
|
+ ;;
|
|
+ chorus*)
|
|
+ case $cc_basename in
|
|
+ cxch68*)
|
|
+ # Green Hills C++ Compiler
|
|
+ # _LT_AC_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
|
|
+ ;;
|
|
+ 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
|
|
+ ;;
|
|
+ dgux*)
|
|
+ case $cc_basename in
|
|
+ ec++*)
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
|
|
+ ;;
|
|
+ ghcx*)
|
|
+ # Green Hills C++ Compiler
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
|
|
+ ;;
|
|
+ *)
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ freebsd* | kfreebsd*-gnu | dragonfly*)
|
|
+ # FreeBSD uses GNU C++
|
|
+ ;;
|
|
+ hpux9* | hpux10* | hpux11*)
|
|
+ case $cc_basename in
|
|
+ CC*)
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
|
|
+ if test "$host_cpu" != ia64; then
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
|
|
+ fi
|
|
+ ;;
|
|
+ aCC*)
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
|
|
+ case $host_cpu in
|
|
+ hppa*64*|ia64*)
|
|
+ # +Z the default
|
|
+ ;;
|
|
+ *)
|
|
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
|
|
+ # CC pic flag -KPIC is the default.
|
|
+ ;;
|
|
+ *)
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ linux*)
|
|
+ case $cc_basename in
|
|
+ KCC*)
|
|
+ # KAI C++ Compiler
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
|
|
+ ;;
|
|
+ icpc* | ecpc*)
|
|
+ # Intel C++
|
|
+ _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*)
|
|
+ # Portland Group C++ compiler.
|
|
+ _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'
|
|
+ ;;
|
|
+ cxx*)
|
|
+ # Compaq C++
|
|
+ # Make sure the PIC flag is empty. It appears that all Alpha
|
|
+ # Linux and Compaq Tru64 Unix objects are PIC.
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
|
|
+ ;;
|
|
+ *)
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ lynxos*)
|
|
+ ;;
|
|
+ m88k*)
|
|
+ ;;
|
|
+ mvs*)
|
|
+ case $cc_basename in
|
|
+ cxx*)
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
|
|
+ ;;
|
|
+ *)
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ netbsd*)
|
|
+ ;;
|
|
+ osf3* | osf4* | osf5*)
|
|
+ case $cc_basename in
|
|
+ KCC*)
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
|
|
+ ;;
|
|
+ RCC*)
|
|
+ # Rational C++ 2.4.1
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
|
|
+ ;;
|
|
+ cxx*)
|
|
+ # Digital/Compaq C++
|
|
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)=
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
|
|
+ ;;
|
|
+ *)
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ psos*)
|
|
+ ;;
|
|
+ solaris*)
|
|
+ case $cc_basename in
|
|
+ CC*)
|
|
+ # Sun C++ 4.2, 5.x and Centerline C++
|
|
+ _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)='-Qoption ld '
|
|
+ ;;
|
|
+ gcx*)
|
|
+ # Green Hills C++ Compiler
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
|
|
+ ;;
|
|
+ *)
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ sunos4*)
|
|
+ case $cc_basename in
|
|
+ CC*)
|
|
+ # Sun C++ 4.x
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
|
|
+ ;;
|
|
+ lcc*)
|
|
+ # Lucid
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
|
|
+ ;;
|
|
+ *)
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ tandem*)
|
|
+ case $cc_basename in
|
|
+ NCC*)
|
|
+ # NonStop-UX NCC 3.20
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
|
|
+ ;;
|
|
+ *)
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
|
|
+ case $cc_basename in
|
|
+ CC*)
|
|
+ _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'
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ vxworks*)
|
|
+ ;;
|
|
+ *)
|
|
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+],
|
|
+[
|
|
+ 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* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
|
|
+ # PIC is the default for these OSes.
|
|
+ ;;
|
|
+
|
|
+ mingw* | 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'
|
|
+ ;;
|
|
+
|
|
+ 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'
|
|
+ ;;
|
|
+
|
|
+ interix3*)
|
|
+ # 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* | 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*)
|
|
+ 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'
|
|
+ ;;
|
|
+ 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'
|
|
+ ;;
|
|
+
|
|
+ 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_prog_compiler_pic_works, $1),
|
|
+ [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -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],[ifelse([$1],[CXX],[ -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_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_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
|
|
+ifelse([$1],[CXX],[
|
|
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
|
|
+ case $host_os in
|
|
+ aix4* | aix5*)
|
|
+ # 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
|
|
+ ;;
|
|
+ pw32*)
|
|
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
|
|
+ ;;
|
|
+ cygwin* | mingw*)
|
|
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
|
|
+ ;;
|
|
+ *)
|
|
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
|
|
+ ;;
|
|
+ esac
|
|
+],[
|
|
+ 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/'\'' | $SED -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
|
|
+ ;;
|
|
+
|
|
+ interix3*)
|
|
+ _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'
|
|
+ ;;
|
|
+
|
|
+ linux*)
|
|
+ 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
|
|
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$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 -shared'"$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
|
|
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
|
|
+ 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` $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 -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$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}'
|
|
+ ;;
|
|
+ *)
|
|
+ _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* | kfreebsd*-gnu | 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*)
|
|
+ _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
|
|
+ ;;
|
|
+
|
|
+ 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 linker options so we
|
|
+ # cannot just pass the convience library names through
|
|
+ # without $wl, iff we do not link with $LD.
|
|
+ # Luckily, gcc supports the same syntax we need for Sun Studio.
|
|
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
|
|
+ case $wlarc in
|
|
+ '')
|
|
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
|
|
+ *)
|
|
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
|
|
+ esac ;;
|
|
+ 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*)
|
|
+ _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*
|
|
+ printf "$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_GCJ],
|
|
+[AC_CHECK_TOOL(GCJ, gcj, no)
|
|
+ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
|
|
+ AC_SUBST(GCJFLAGS)
|
|
+])
|
|
+
|
|
+AC_DEFUN([LT_AC_PROG_RC],
|
|
+[AC_CHECK_TOOL(RC, windres, no)
|
|
+])
|
|
+
|
|
+# 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])
|
|
+])
|
|
+
|
|
+# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
|
|
+#
|
|
+# 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.
|
|
+
|
|
+# AM_AUTOMAKE_VERSION(VERSION)
|
|
+# ----------------------------
|
|
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
|
|
+# generated from the m4 files accompanying Automake X.Y.
|
|
+AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
|
|
+
|
|
+# AM_SET_CURRENT_AUTOMAKE_VERSION
|
|
+# -------------------------------
|
|
+# Call AM_AUTOMAKE_VERSION so it can be traced.
|
|
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
|
|
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
|
+ [AM_AUTOMAKE_VERSION([1.9.6])])
|
|
+
|
|
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
|
|
+
|
|
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
|
+#
|
|
+# 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.
|
|
+
|
|
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
|
|
+# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
|
|
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
|
|
+#
|
|
+# Of course, Automake must honor this variable whenever it calls a
|
|
+# tool from the auxiliary directory. The problem is that $srcdir (and
|
|
+# therefore $ac_aux_dir as well) can be either absolute or relative,
|
|
+# depending on how configure is run. This is pretty annoying, since
|
|
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
|
|
+# source directory, any form will work fine, but in subdirectories a
|
|
+# relative path needs to be adjusted first.
|
|
+#
|
|
+# $ac_aux_dir/missing
|
|
+# fails when called from a subdirectory if $ac_aux_dir is relative
|
|
+# $top_srcdir/$ac_aux_dir/missing
|
|
+# fails if $ac_aux_dir is absolute,
|
|
+# fails when called from a subdirectory in a VPATH build with
|
|
+# a relative $ac_aux_dir
|
|
+#
|
|
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
|
|
+# are both prefixed by $srcdir. In an in-source build this is usually
|
|
+# harmless because $srcdir is `.', but things will broke when you
|
|
+# start a VPATH build or use an absolute $srcdir.
|
|
+#
|
|
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
|
|
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
|
|
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
|
|
+# and then we would define $MISSING as
|
|
+# MISSING="\${SHELL} $am_aux_dir/missing"
|
|
+# This will work as long as MISSING is not called from configure, because
|
|
+# unfortunately $(top_srcdir) has no meaning in configure.
|
|
+# However there are other variables, like CC, which are often used in
|
|
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
|
|
+#
|
|
+# Another solution, used here, is to always expand $ac_aux_dir to an
|
|
+# absolute PATH. The drawback is that using absolute paths prevent a
|
|
+# configured tree to be moved without reconfiguration.
|
|
+
|
|
+AC_DEFUN([AM_AUX_DIR_EXPAND],
|
|
+[dnl Rely on autoconf to set up CDPATH properly.
|
|
+AC_PREREQ([2.50])dnl
|
|
+# expand $ac_aux_dir to an absolute path
|
|
+am_aux_dir=`cd $ac_aux_dir && pwd`
|
|
+])
|
|
+
|
|
+# AM_CONDITIONAL -*- Autoconf -*-
|
|
+
|
|
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
|
|
+# Free Software Foundation, Inc.
|
|
+#
|
|
+# 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
|
|
+
|
|
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
|
|
+# -------------------------------------
|
|
+# Define a conditional.
|
|
+AC_DEFUN([AM_CONDITIONAL],
|
|
+[AC_PREREQ(2.52)dnl
|
|
+ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
|
|
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
|
|
+AC_SUBST([$1_TRUE])
|
|
+AC_SUBST([$1_FALSE])
|
|
+if $2; then
|
|
+ $1_TRUE=
|
|
+ $1_FALSE='#'
|
|
+else
|
|
+ $1_TRUE='#'
|
|
+ $1_FALSE=
|
|
+fi
|
|
+AC_CONFIG_COMMANDS_PRE(
|
|
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
|
|
+ AC_MSG_ERROR([[conditional "$1" was never defined.
|
|
+Usually this means the macro was only invoked conditionally.]])
|
|
+fi])])
|
|
+
|
|
+
|
|
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
|
+# Free Software Foundation, Inc.
|
|
+#
|
|
+# 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 8
|
|
+
|
|
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
|
|
+# written in clear, in which case automake, when reading aclocal.m4,
|
|
+# will think it sees a *use*, and therefore will trigger all it's
|
|
+# C support machinery. Also note that it means that autoscan, seeing
|
|
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
|
|
+
|
|
+
|
|
+# _AM_DEPENDENCIES(NAME)
|
|
+# ----------------------
|
|
+# See how the compiler implements dependency checking.
|
|
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
|
|
+# We try a few techniques and use that to set a single cache variable.
|
|
+#
|
|
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
|
|
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
|
|
+# dependency, and given that the user is not expected to run this macro,
|
|
+# just rely on AC_PROG_CC.
|
|
+AC_DEFUN([_AM_DEPENDENCIES],
|
|
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
|
|
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
|
|
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
|
|
+AC_REQUIRE([AM_DEP_TRACK])dnl
|
|
+
|
|
+ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
|
|
+ [$1], CXX, [depcc="$CXX" am_compiler_list=],
|
|
+ [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
|
|
+ [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
|
|
+ [depcc="$$1" am_compiler_list=])
|
|
+
|
|
+AC_CACHE_CHECK([dependency style of $depcc],
|
|
+ [am_cv_$1_dependencies_compiler_type],
|
|
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
|
|
+ # We make a subdir and do the tests there. Otherwise we can end up
|
|
+ # making bogus files that we don't know about and never remove. For
|
|
+ # instance it was reported that on HP-UX the gcc test will end up
|
|
+ # making a dummy file named `D' -- because `-MD' means `put the output
|
|
+ # in D'.
|
|
+ mkdir conftest.dir
|
|
+ # Copy depcomp to subdir because otherwise we won't find it if we're
|
|
+ # using a relative directory.
|
|
+ cp "$am_depcomp" conftest.dir
|
|
+ cd conftest.dir
|
|
+ # We will build objects and dependencies in a subdirectory because
|
|
+ # it helps to detect inapplicable dependency modes. For instance
|
|
+ # both Tru64's cc and ICC support -MD to output dependencies as a
|
|
+ # side effect of compilation, but ICC will put the dependencies in
|
|
+ # the current directory while Tru64 will put them in the object
|
|
+ # directory.
|
|
+ mkdir sub
|
|
+
|
|
+ am_cv_$1_dependencies_compiler_type=none
|
|
+ if test "$am_compiler_list" = ""; then
|
|
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
|
|
+ fi
|
|
+ for depmode in $am_compiler_list; do
|
|
+ # Setup a source with many dependencies, because some compilers
|
|
+ # like to wrap large dependency lists on column 80 (with \), and
|
|
+ # we should not choose a depcomp mode which is confused by this.
|
|
+ #
|
|
+ # We need to recreate these files for each test, as the compiler may
|
|
+ # overwrite some of them when testing with obscure command lines.
|
|
+ # This happens at least with the AIX C compiler.
|
|
+ : > sub/conftest.c
|
|
+ for i in 1 2 3 4 5 6; do
|
|
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
|
|
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
|
|
+ # Solaris 8's {/usr,}/bin/sh.
|
|
+ touch sub/conftst$i.h
|
|
+ done
|
|
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
|
|
+
|
|
+ case $depmode in
|
|
+ nosideeffect)
|
|
+ # after this tag, mechanisms are not by side-effect, so they'll
|
|
+ # only be used when explicitly requested
|
|
+ if test "x$enable_dependency_tracking" = xyes; then
|
|
+ continue
|
|
+ else
|
|
+ break
|
|
+ fi
|
|
+ ;;
|
|
+ none) break ;;
|
|
+ esac
|
|
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
|
|
+ # mode. It turns out that the SunPro C++ compiler does not properly
|
|
+ # handle `-M -o', and we need to detect this.
|
|
+ if depmode=$depmode \
|
|
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
|
|
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
|
|
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
|
|
+ >/dev/null 2>conftest.err &&
|
|
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
|
|
+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
|
|
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
|
|
+ # icc doesn't choke on unknown options, it will just issue warnings
|
|
+ # or remarks (even with -Werror). So we grep stderr for any message
|
|
+ # that says an option was ignored or not supported.
|
|
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
|
|
+ # icc: Command line warning: ignoring option '-M'; no argument required
|
|
+ # The diagnosis changed in icc 8.0:
|
|
+ # icc: Command line remark: option '-MP' not supported
|
|
+ if (grep 'ignoring option' conftest.err ||
|
|
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
|
|
+ am_cv_$1_dependencies_compiler_type=$depmode
|
|
+ break
|
|
+ fi
|
|
+ fi
|
|
+ done
|
|
+
|
|
+ cd ..
|
|
+ rm -rf conftest.dir
|
|
+else
|
|
+ am_cv_$1_dependencies_compiler_type=none
|
|
+fi
|
|
+])
|
|
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
|
|
+AM_CONDITIONAL([am__fastdep$1], [
|
|
+ test "x$enable_dependency_tracking" != xno \
|
|
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
|
|
+])
|
|
+
|
|
+
|
|
+# AM_SET_DEPDIR
|
|
+# -------------
|
|
+# Choose a directory name for dependency files.
|
|
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
|
|
+AC_DEFUN([AM_SET_DEPDIR],
|
|
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
|
|
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
|
|
+])
|
|
+
|
|
+
|
|
+# AM_DEP_TRACK
|
|
+# ------------
|
|
+AC_DEFUN([AM_DEP_TRACK],
|
|
+[AC_ARG_ENABLE(dependency-tracking,
|
|
+[ --disable-dependency-tracking speeds up one-time build
|
|
+ --enable-dependency-tracking do not reject slow dependency extractors])
|
|
+if test "x$enable_dependency_tracking" != xno; then
|
|
+ am_depcomp="$ac_aux_dir/depcomp"
|
|
+ AMDEPBACKSLASH='\'
|
|
+fi
|
|
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
|
|
+AC_SUBST([AMDEPBACKSLASH])
|
|
+])
|
|
+
|
|
+# Generate code to set up dependency tracking. -*- Autoconf -*-
|
|
+
|
|
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
|
+# Free Software Foundation, Inc.
|
|
+#
|
|
+# 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 3
|
|
+
|
|
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
|
|
+# ------------------------------
|
|
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
|
|
+[for mf in $CONFIG_FILES; do
|
|
+ # Strip MF so we end up with the name of the file.
|
|
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
|
|
+ # Check whether this is an Automake generated Makefile or not.
|
|
+ # We used to match only the files named `Makefile.in', but
|
|
+ # some people rename them; so instead we look at the file content.
|
|
+ # Grep'ing the first line is not enough: some people post-process
|
|
+ # each Makefile.in and add a new line on top of each file to say so.
|
|
+ # So let's grep whole file.
|
|
+ if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
|
|
+ dirpart=`AS_DIRNAME("$mf")`
|
|
+ else
|
|
+ continue
|
|
+ fi
|
|
+ # Extract the definition of DEPDIR, am__include, and am__quote
|
|
+ # from the Makefile without running `make'.
|
|
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
|
|
+ test -z "$DEPDIR" && continue
|
|
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
|
|
+ test -z "am__include" && continue
|
|
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
|
|
+ # When using ansi2knr, U may be empty or an underscore; expand it
|
|
+ U=`sed -n 's/^U = //p' < "$mf"`
|
|
+ # Find all dependency output files, they are included files with
|
|
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
|
|
+ # simplest approach to changing $(DEPDIR) to its actual value in the
|
|
+ # expansion.
|
|
+ for file in `sed -n "
|
|
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
|
|
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
|
|
+ # Make sure the directory exists.
|
|
+ test -f "$dirpart/$file" && continue
|
|
+ fdir=`AS_DIRNAME(["$file"])`
|
|
+ AS_MKDIR_P([$dirpart/$fdir])
|
|
+ # echo "creating $dirpart/$file"
|
|
+ echo '# dummy' > "$dirpart/$file"
|
|
+ done
|
|
+done
|
|
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
|
|
+
|
|
+
|
|
+# AM_OUTPUT_DEPENDENCY_COMMANDS
|
|
+# -----------------------------
|
|
+# This macro should only be invoked once -- use via AC_REQUIRE.
|
|
+#
|
|
+# This code is only required when automatic dependency tracking
|
|
+# is enabled. FIXME. This creates each `.P' file that we will
|
|
+# need in order to bootstrap the dependency handling code.
|
|
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
|
|
+[AC_CONFIG_COMMANDS([depfiles],
|
|
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
|
|
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
|
|
+])
|
|
+
|
|
+# Do all the work for Automake. -*- Autoconf -*-
|
|
+
|
|
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
|
+# Free Software Foundation, Inc.
|
|
+#
|
|
+# 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 12
|
|
+
|
|
+# This macro actually does too much. Some checks are only needed if
|
|
+# your package does certain things. But this isn't really a big deal.
|
|
+
|
|
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
|
|
+# AM_INIT_AUTOMAKE([OPTIONS])
|
|
+# -----------------------------------------------
|
|
+# The call with PACKAGE and VERSION arguments is the old style
|
|
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
|
|
+# and VERSION should now be passed to AC_INIT and removed from
|
|
+# the call to AM_INIT_AUTOMAKE.
|
|
+# We support both call styles for the transition. After
|
|
+# the next Automake release, Autoconf can make the AC_INIT
|
|
+# arguments mandatory, and then we can depend on a new Autoconf
|
|
+# release and drop the old call support.
|
|
+AC_DEFUN([AM_INIT_AUTOMAKE],
|
|
+[AC_PREREQ([2.58])dnl
|
|
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
|
|
+dnl the ones we care about.
|
|
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
|
|
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
|
|
+AC_REQUIRE([AC_PROG_INSTALL])dnl
|
|
+# test to see if srcdir already configured
|
|
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
|
|
+ test -f $srcdir/config.status; then
|
|
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
|
|
+fi
|
|
+
|
|
+# test whether we have cygpath
|
|
+if test -z "$CYGPATH_W"; then
|
|
+ if (cygpath --version) >/dev/null 2>/dev/null; then
|
|
+ CYGPATH_W='cygpath -w'
|
|
+ else
|
|
+ CYGPATH_W=echo
|
|
+ fi
|
|
+fi
|
|
+AC_SUBST([CYGPATH_W])
|
|
+
|
|
+# Define the identity of the package.
|
|
+dnl Distinguish between old-style and new-style calls.
|
|
+m4_ifval([$2],
|
|
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
|
|
+ AC_SUBST([PACKAGE], [$1])dnl
|
|
+ AC_SUBST([VERSION], [$2])],
|
|
+[_AM_SET_OPTIONS([$1])dnl
|
|
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
|
|
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
|
|
+
|
|
+_AM_IF_OPTION([no-define],,
|
|
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
|
|
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
|
|
+
|
|
+# Some tools Automake needs.
|
|
+AC_REQUIRE([AM_SANITY_CHECK])dnl
|
|
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
|
|
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
|
|
+AM_MISSING_PROG(AUTOCONF, autoconf)
|
|
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
|
|
+AM_MISSING_PROG(AUTOHEADER, autoheader)
|
|
+AM_MISSING_PROG(MAKEINFO, makeinfo)
|
|
+AM_PROG_INSTALL_SH
|
|
+AM_PROG_INSTALL_STRIP
|
|
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
|
|
+# We need awk for the "check" target. The system "awk" is bad on
|
|
+# some platforms.
|
|
+AC_REQUIRE([AC_PROG_AWK])dnl
|
|
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
|
|
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
|
|
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
|
|
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
|
|
+ [_AM_PROG_TAR([v7])])])
|
|
+_AM_IF_OPTION([no-dependencies],,
|
|
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
|
|
+ [_AM_DEPENDENCIES(CC)],
|
|
+ [define([AC_PROG_CC],
|
|
+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
|
|
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
|
|
+ [_AM_DEPENDENCIES(CXX)],
|
|
+ [define([AC_PROG_CXX],
|
|
+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
|
|
+])
|
|
+])
|
|
+
|
|
+
|
|
+# When config.status generates a header, we must update the stamp-h file.
|
|
+# This file resides in the same directory as the config header
|
|
+# that is generated. The stamp files are numbered to have different names.
|
|
+
|
|
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
|
|
+# loop where config.status creates the headers, so we can generate
|
|
+# our stamp files there.
|
|
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
|
|
+[# Compute $1's index in $config_headers.
|
|
+_am_stamp_count=1
|
|
+for _am_header in $config_headers :; do
|
|
+ case $_am_header in
|
|
+ $1 | $1:* )
|
|
+ break ;;
|
|
+ * )
|
|
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
|
|
+ esac
|
|
+done
|
|
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
|
|
+
|
|
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
|
+#
|
|
+# 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.
|
|
+
|
|
+# AM_PROG_INSTALL_SH
|
|
+# ------------------
|
|
+# Define $install_sh.
|
|
+AC_DEFUN([AM_PROG_INSTALL_SH],
|
|
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
|
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
|
|
+AC_SUBST(install_sh)])
|
|
+
|
|
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
|
|
+#
|
|
+# 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 2
|
|
+
|
|
+# Check whether the underlying file-system supports filenames
|
|
+# with a leading dot. For instance MS-DOS doesn't.
|
|
+AC_DEFUN([AM_SET_LEADING_DOT],
|
|
+[rm -rf .tst 2>/dev/null
|
|
+mkdir .tst 2>/dev/null
|
|
+if test -d .tst; then
|
|
+ am__leading_dot=.
|
|
+else
|
|
+ am__leading_dot=_
|
|
+fi
|
|
+rmdir .tst 2>/dev/null
|
|
+AC_SUBST([am__leading_dot])])
|
|
+
|
|
+# Check to see how 'make' treats includes. -*- Autoconf -*-
|
|
+
|
|
+# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
|
|
+#
|
|
+# 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 3
|
|
+
|
|
+# AM_MAKE_INCLUDE()
|
|
+# -----------------
|
|
+# Check to see how make treats includes.
|
|
+AC_DEFUN([AM_MAKE_INCLUDE],
|
|
+[am_make=${MAKE-make}
|
|
+cat > confinc << 'END'
|
|
+am__doit:
|
|
+ @echo done
|
|
+.PHONY: am__doit
|
|
+END
|
|
+# If we don't find an include directive, just comment out the code.
|
|
+AC_MSG_CHECKING([for style of include used by $am_make])
|
|
+am__include="#"
|
|
+am__quote=
|
|
+_am_result=none
|
|
+# First try GNU make style include.
|
|
+echo "include confinc" > confmf
|
|
+# We grep out `Entering directory' and `Leaving directory'
|
|
+# messages which can occur if `w' ends up in MAKEFLAGS.
|
|
+# In particular we don't look at `^make:' because GNU make might
|
|
+# be invoked under some other name (usually "gmake"), in which
|
|
+# case it prints its new name instead of `make'.
|
|
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
|
|
+ am__include=include
|
|
+ am__quote=
|
|
+ _am_result=GNU
|
|
+fi
|
|
+# Now try BSD make style include.
|
|
+if test "$am__include" = "#"; then
|
|
+ echo '.include "confinc"' > confmf
|
|
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
|
|
+ am__include=.include
|
|
+ am__quote="\""
|
|
+ _am_result=BSD
|
|
+ fi
|
|
+fi
|
|
+AC_SUBST([am__include])
|
|
+AC_SUBST([am__quote])
|
|
+AC_MSG_RESULT([$_am_result])
|
|
+rm -f confinc confmf
|
|
+])
|
|
+
|
|
+# Copyright (C) 1999, 2000, 2001, 2003, 2005 Free Software Foundation, Inc.
|
|
+#
|
|
+# 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 3
|
|
+
|
|
+# AM_PROG_CC_C_O
|
|
+# --------------
|
|
+# Like AC_PROG_CC_C_O, but changed for automake.
|
|
+AC_DEFUN([AM_PROG_CC_C_O],
|
|
+[AC_REQUIRE([AC_PROG_CC_C_O])dnl
|
|
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
|
+# FIXME: we rely on the cache variable name because
|
|
+# there is no other way.
|
|
+set dummy $CC
|
|
+ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
|
|
+if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
|
|
+ # Losing compiler, so override with the script.
|
|
+ # FIXME: It is wrong to rewrite CC.
|
|
+ # But if we don't then we get into trouble of one sort or another.
|
|
+ # A longer-term fix would be to have automake use am__CC in this case,
|
|
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
|
|
+ CC="$am_aux_dir/compile $CC"
|
|
+fi
|
|
+])
|
|
+
|
|
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
|
|
+
|
|
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
|
|
+# Free Software Foundation, Inc.
|
|
+#
|
|
+# 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 4
|
|
+
|
|
+# AM_MISSING_PROG(NAME, PROGRAM)
|
|
+# ------------------------------
|
|
+AC_DEFUN([AM_MISSING_PROG],
|
|
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
|
|
+$1=${$1-"${am_missing_run}$2"}
|
|
+AC_SUBST($1)])
|
|
+
|
|
+
|
|
+# AM_MISSING_HAS_RUN
|
|
+# ------------------
|
|
+# Define MISSING if not defined so far and test if it supports --run.
|
|
+# If it does, set am_missing_run to use it, otherwise, to nothing.
|
|
+AC_DEFUN([AM_MISSING_HAS_RUN],
|
|
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
|
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
|
|
+# Use eval to expand $SHELL
|
|
+if eval "$MISSING --run true"; then
|
|
+ am_missing_run="$MISSING --run "
|
|
+else
|
|
+ am_missing_run=
|
|
+ AC_MSG_WARN([`missing' script is too old or missing])
|
|
+fi
|
|
+])
|
|
+
|
|
+# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
|
|
+#
|
|
+# 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.
|
|
+
|
|
+# AM_PROG_MKDIR_P
|
|
+# ---------------
|
|
+# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
|
|
+#
|
|
+# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
|
|
+# created by `make install' are always world readable, even if the
|
|
+# installer happens to have an overly restrictive umask (e.g. 077).
|
|
+# This was a mistake. There are at least two reasons why we must not
|
|
+# use `-m 0755':
|
|
+# - it causes special bits like SGID to be ignored,
|
|
+# - it may be too restrictive (some setups expect 775 directories).
|
|
+#
|
|
+# Do not use -m 0755 and let people choose whatever they expect by
|
|
+# setting umask.
|
|
+#
|
|
+# We cannot accept any implementation of `mkdir' that recognizes `-p'.
|
|
+# Some implementations (such as Solaris 8's) are not thread-safe: if a
|
|
+# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
|
|
+# concurrently, both version can detect that a/ is missing, but only
|
|
+# one can create it and the other will error out. Consequently we
|
|
+# restrict ourselves to GNU make (using the --version option ensures
|
|
+# this.)
|
|
+AC_DEFUN([AM_PROG_MKDIR_P],
|
|
+[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
|
|
+ # We used to keeping the `.' as first argument, in order to
|
|
+ # allow $(mkdir_p) to be used without argument. As in
|
|
+ # $(mkdir_p) $(somedir)
|
|
+ # where $(somedir) is conditionally defined. However this is wrong
|
|
+ # for two reasons:
|
|
+ # 1. if the package is installed by a user who cannot write `.'
|
|
+ # make install will fail,
|
|
+ # 2. the above comment should most certainly read
|
|
+ # $(mkdir_p) $(DESTDIR)$(somedir)
|
|
+ # so it does not work when $(somedir) is undefined and
|
|
+ # $(DESTDIR) is not.
|
|
+ # To support the latter case, we have to write
|
|
+ # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
|
|
+ # so the `.' trick is pointless.
|
|
+ mkdir_p='mkdir -p --'
|
|
+else
|
|
+ # On NextStep and OpenStep, the `mkdir' command does not
|
|
+ # recognize any option. It will interpret all options as
|
|
+ # directories to create, and then abort because `.' already
|
|
+ # exists.
|
|
+ for d in ./-p ./--version;
|
|
+ do
|
|
+ test -d $d && rmdir $d
|
|
+ done
|
|
+ # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
|
|
+ if test -f "$ac_aux_dir/mkinstalldirs"; then
|
|
+ mkdir_p='$(mkinstalldirs)'
|
|
+ else
|
|
+ mkdir_p='$(install_sh) -d'
|
|
+ fi
|
|
+fi
|
|
+AC_SUBST([mkdir_p])])
|
|
+
|
|
+# Helper functions for option handling. -*- Autoconf -*-
|
|
+
|
|
+# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
|
|
+#
|
|
+# 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 3
|
|
+
|
|
+# _AM_MANGLE_OPTION(NAME)
|
|
+# -----------------------
|
|
+AC_DEFUN([_AM_MANGLE_OPTION],
|
|
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
|
|
+
|
|
+# _AM_SET_OPTION(NAME)
|
|
+# ------------------------------
|
|
+# Set option NAME. Presently that only means defining a flag for this option.
|
|
+AC_DEFUN([_AM_SET_OPTION],
|
|
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
|
|
+
|
|
+# _AM_SET_OPTIONS(OPTIONS)
|
|
+# ----------------------------------
|
|
+# OPTIONS is a space-separated list of Automake options.
|
|
+AC_DEFUN([_AM_SET_OPTIONS],
|
|
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
|
|
+
|
|
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
|
|
+# -------------------------------------------
|
|
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
|
|
+AC_DEFUN([_AM_IF_OPTION],
|
|
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
|
|
+
|
|
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
|
|
+
|
|
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
|
|
+# Free Software Foundation, Inc.
|
|
+#
|
|
+# 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 4
|
|
+
|
|
+# AM_SANITY_CHECK
|
|
+# ---------------
|
|
+AC_DEFUN([AM_SANITY_CHECK],
|
|
+[AC_MSG_CHECKING([whether build environment is sane])
|
|
+# Just in case
|
|
+sleep 1
|
|
+echo timestamp > conftest.file
|
|
+# Do `set' in a subshell so we don't clobber the current shell's
|
|
+# arguments. Must try -L first in case configure is actually a
|
|
+# symlink; some systems play weird games with the mod time of symlinks
|
|
+# (eg FreeBSD returns the mod time of the symlink's containing
|
|
+# directory).
|
|
+if (
|
|
+ set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
|
|
+ if test "$[*]" = "X"; then
|
|
+ # -L didn't work.
|
|
+ set X `ls -t $srcdir/configure conftest.file`
|
|
+ fi
|
|
+ rm -f conftest.file
|
|
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
|
|
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
|
|
+
|
|
+ # If neither matched, then we have a broken ls. This can happen
|
|
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
|
|
+ # broken ls alias from the environment. This has actually
|
|
+ # happened. Such a system could not be considered "sane".
|
|
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
|
|
+alias in your environment])
|
|
+ fi
|
|
+
|
|
+ test "$[2]" = conftest.file
|
|
+ )
|
|
+then
|
|
+ # Ok.
|
|
+ :
|
|
+else
|
|
+ AC_MSG_ERROR([newly created file is older than distributed files!
|
|
+Check your system clock])
|
|
+fi
|
|
+AC_MSG_RESULT(yes)])
|
|
+
|
|
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
|
+#
|
|
+# 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.
|
|
+
|
|
+# AM_PROG_INSTALL_STRIP
|
|
+# ---------------------
|
|
+# One issue with vendor `install' (even GNU) is that you can't
|
|
+# specify the program used to strip binaries. This is especially
|
|
+# annoying in cross-compiling environments, where the build's strip
|
|
+# is unlikely to handle the host's binaries.
|
|
+# Fortunately install-sh will honor a STRIPPROG variable, so we
|
|
+# always use install-sh in `make install-strip', and initialize
|
|
+# STRIPPROG with the value of the STRIP variable (set by the user).
|
|
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
|
|
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
|
|
+# Installed binaries are usually stripped using `strip' when the user
|
|
+# run `make install-strip'. However `strip' might not be the right
|
|
+# tool to use in cross-compilation environments, therefore Automake
|
|
+# will honor the `STRIP' environment variable to overrule this program.
|
|
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
|
|
+if test "$cross_compiling" != no; then
|
|
+ AC_CHECK_TOOL([STRIP], [strip], :)
|
|
+fi
|
|
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
|
|
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
|
|
+
|
|
+# Check how to create a tarball. -*- Autoconf -*-
|
|
+
|
|
+# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
|
|
+#
|
|
+# 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 2
|
|
+
|
|
+# _AM_PROG_TAR(FORMAT)
|
|
+# --------------------
|
|
+# Check how to create a tarball in format FORMAT.
|
|
+# FORMAT should be one of `v7', `ustar', or `pax'.
|
|
+#
|
|
+# Substitute a variable $(am__tar) that is a command
|
|
+# writing to stdout a FORMAT-tarball containing the directory
|
|
+# $tardir.
|
|
+# tardir=directory && $(am__tar) > result.tar
|
|
+#
|
|
+# Substitute a variable $(am__untar) that extract such
|
|
+# a tarball read from stdin.
|
|
+# $(am__untar) < result.tar
|
|
+AC_DEFUN([_AM_PROG_TAR],
|
|
+[# Always define AMTAR for backward compatibility.
|
|
+AM_MISSING_PROG([AMTAR], [tar])
|
|
+m4_if([$1], [v7],
|
|
+ [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
|
|
+ [m4_case([$1], [ustar],, [pax],,
|
|
+ [m4_fatal([Unknown tar format])])
|
|
+AC_MSG_CHECKING([how to create a $1 tar archive])
|
|
+# Loop over all known methods to create a tar archive until one works.
|
|
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
|
|
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
|
|
+# Do not fold the above two line into one, because Tru64 sh and
|
|
+# Solaris sh will not grok spaces in the rhs of `-'.
|
|
+for _am_tool in $_am_tools
|
|
+do
|
|
+ case $_am_tool in
|
|
+ gnutar)
|
|
+ for _am_tar in tar gnutar gtar;
|
|
+ do
|
|
+ AM_RUN_LOG([$_am_tar --version]) && break
|
|
+ done
|
|
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
|
|
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
|
|
+ am__untar="$_am_tar -xf -"
|
|
+ ;;
|
|
+ plaintar)
|
|
+ # Must skip GNU tar: if it does not support --format= it doesn't create
|
|
+ # ustar tarball either.
|
|
+ (tar --version) >/dev/null 2>&1 && continue
|
|
+ am__tar='tar chf - "$$tardir"'
|
|
+ am__tar_='tar chf - "$tardir"'
|
|
+ am__untar='tar xf -'
|
|
+ ;;
|
|
+ pax)
|
|
+ am__tar='pax -L -x $1 -w "$$tardir"'
|
|
+ am__tar_='pax -L -x $1 -w "$tardir"'
|
|
+ am__untar='pax -r'
|
|
+ ;;
|
|
+ cpio)
|
|
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
|
|
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
|
|
+ am__untar='cpio -i -H $1 -d'
|
|
+ ;;
|
|
+ none)
|
|
+ am__tar=false
|
|
+ am__tar_=false
|
|
+ am__untar=false
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # If the value was cached, stop now. We just wanted to have am__tar
|
|
+ # and am__untar set.
|
|
+ test -n "${am_cv_prog_tar_$1}" && break
|
|
+
|
|
+ # tar/untar a dummy directory, and stop if the command works
|
|
+ rm -rf conftest.dir
|
|
+ mkdir conftest.dir
|
|
+ echo GrepMe > conftest.dir/file
|
|
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
|
|
+ rm -rf conftest.dir
|
|
+ if test -s conftest.tar; then
|
|
+ AM_RUN_LOG([$am__untar <conftest.tar])
|
|
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
|
|
+ fi
|
|
+done
|
|
+rm -rf conftest.dir
|
|
+
|
|
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
|
|
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
|
|
+AC_SUBST([am__tar])
|
|
+AC_SUBST([am__untar])
|
|
+]) # _AM_PROG_TAR
|
|
+
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/ChangeLog open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/ChangeLog
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/ChangeLog 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/ChangeLog 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,7 @@
|
|
+Version 0.4.1 (July 20, 2009)
|
|
+ * Fix from Mike Christie to determine page size from getpagesize()
|
|
+ rather then the constant PAGE_SIZE. PAGE_SIZE is not defined om
|
|
+ ia64 and ppc.
|
|
+ * Update documentation to indicate IPv6 is not supported
|
|
+ * Fix code to catch the message from the CNIC that the network
|
|
+ interface is going down.
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/compile open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/compile
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/compile 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/compile 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,142 @@
|
|
+#! /bin/sh
|
|
+# Wrapper for compilers which do not understand `-c -o'.
|
|
+
|
|
+scriptversion=2005-05-14.22
|
|
+
|
|
+# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
|
|
+# Written by Tom Tromey <tromey@cygnus.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, 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.
|
|
+
|
|
+# This file is maintained in Automake, please report
|
|
+# bugs to <bug-automake@gnu.org> or send patches to
|
|
+# <automake-patches@gnu.org>.
|
|
+
|
|
+case $1 in
|
|
+ '')
|
|
+ echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
|
+ exit 1;
|
|
+ ;;
|
|
+ -h | --h*)
|
|
+ cat <<\EOF
|
|
+Usage: compile [--help] [--version] PROGRAM [ARGS]
|
|
+
|
|
+Wrapper for compilers which do not understand `-c -o'.
|
|
+Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
|
|
+arguments, and rename the output as expected.
|
|
+
|
|
+If you are trying to build a whole package this is not the
|
|
+right script to run: please start by reading the file `INSTALL'.
|
|
+
|
|
+Report bugs to <bug-automake@gnu.org>.
|
|
+EOF
|
|
+ exit $?
|
|
+ ;;
|
|
+ -v | --v*)
|
|
+ echo "compile $scriptversion"
|
|
+ exit $?
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+ofile=
|
|
+cfile=
|
|
+eat=
|
|
+
|
|
+for arg
|
|
+do
|
|
+ if test -n "$eat"; then
|
|
+ eat=
|
|
+ else
|
|
+ case $1 in
|
|
+ -o)
|
|
+ # configure might choose to run compile as `compile cc -o foo foo.c'.
|
|
+ # So we strip `-o arg' only if arg is an object.
|
|
+ eat=1
|
|
+ case $2 in
|
|
+ *.o | *.obj)
|
|
+ ofile=$2
|
|
+ ;;
|
|
+ *)
|
|
+ set x "$@" -o "$2"
|
|
+ shift
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ *.c)
|
|
+ cfile=$1
|
|
+ set x "$@" "$1"
|
|
+ shift
|
|
+ ;;
|
|
+ *)
|
|
+ set x "$@" "$1"
|
|
+ shift
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ shift
|
|
+done
|
|
+
|
|
+if test -z "$ofile" || test -z "$cfile"; then
|
|
+ # If no `-o' option was seen then we might have been invoked from a
|
|
+ # pattern rule where we don't need one. That is ok -- this is a
|
|
+ # normal compilation that the losing compiler can handle. If no
|
|
+ # `.c' file was seen then we are probably linking. That is also
|
|
+ # ok.
|
|
+ exec "$@"
|
|
+fi
|
|
+
|
|
+# Name of file we expect compiler to create.
|
|
+cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
|
|
+
|
|
+# Create the lock directory.
|
|
+# Note: use `[/.-]' here to ensure that we don't use the same name
|
|
+# that we are using for the .o file. Also, base the name on the expected
|
|
+# object file name, since that is what matters with a parallel build.
|
|
+lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
|
|
+while true; do
|
|
+ if mkdir "$lockdir" >/dev/null 2>&1; then
|
|
+ break
|
|
+ fi
|
|
+ sleep 1
|
|
+done
|
|
+# FIXME: race condition here if user kills between mkdir and trap.
|
|
+trap "rmdir '$lockdir'; exit 1" 1 2 15
|
|
+
|
|
+# Run the compile.
|
|
+"$@"
|
|
+ret=$?
|
|
+
|
|
+if test -f "$cofile"; then
|
|
+ mv "$cofile" "$ofile"
|
|
+elif test -f "${cofile}bj"; then
|
|
+ mv "${cofile}bj" "$ofile"
|
|
+fi
|
|
+
|
|
+rmdir "$lockdir"
|
|
+exit $ret
|
|
+
|
|
+# Local Variables:
|
|
+# mode: shell-script
|
|
+# sh-indentation: 2
|
|
+# eval: (add-hook 'write-file-hooks 'time-stamp)
|
|
+# time-stamp-start: "scriptversion="
|
|
+# time-stamp-format: "%:y-%02m-%02d.%02H"
|
|
+# time-stamp-end: "$"
|
|
+# End:
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/config.guess open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/config.guess
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/config.guess 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/config.guess 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,1548 @@
|
|
+#! /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
|
|
+# Free Software Foundation, Inc.
|
|
+
|
|
+timestamp='2008-09-28'
|
|
+
|
|
+# This file is free software; you can redistribute it and/or modify it
|
|
+# under the terms of the GNU General Public License as published by
|
|
+# the Free Software Foundation; either version 2 of the License, or
|
|
+# (at your option) any later version.
|
|
+#
|
|
+# This program is distributed in the hope that it will be useful, but
|
|
+# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
+# General Public License for more details.
|
|
+#
|
|
+# You should have received a copy of the GNU General Public License
|
|
+# along with this program; if not, write to the Free Software
|
|
+# Foundation, Inc., 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.
|
|
+
|
|
+
|
|
+# 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.
|
|
+#
|
|
+# 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.
|
|
+
|
|
+me=`echo "$0" | sed -e 's,.*/,,'`
|
|
+
|
|
+usage="\
|
|
+Usage: $0 [OPTION]
|
|
+
|
|
+Output the configuration name of the system \`$me' is run on.
|
|
+
|
|
+Operation modes:
|
|
+ -h, --help print this help, then exit
|
|
+ -t, --time-stamp print date of last modification, then exit
|
|
+ -v, --version print version number, then exit
|
|
+
|
|
+Report bugs and patches to <config-patches@gnu.org>."
|
|
+
|
|
+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.
|
|
+
|
|
+This is free software; see the source for copying conditions. There is NO
|
|
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
|
+
|
|
+help="
|
|
+Try \`$me --help' for more information."
|
|
+
|
|
+# Parse command line
|
|
+while test $# -gt 0 ; do
|
|
+ case $1 in
|
|
+ --time-stamp | --time* | -t )
|
|
+ echo "$timestamp" ; exit ;;
|
|
+ --version | -v )
|
|
+ echo "$version" ; exit ;;
|
|
+ --help | --h* | -h )
|
|
+ echo "$usage"; exit ;;
|
|
+ -- ) # Stop option processing
|
|
+ shift; break ;;
|
|
+ - ) # Use stdin as input.
|
|
+ break ;;
|
|
+ -* )
|
|
+ echo "$me: invalid option $1$help" >&2
|
|
+ exit 1 ;;
|
|
+ * )
|
|
+ break ;;
|
|
+ esac
|
|
+done
|
|
+
|
|
+if test $# != 0; then
|
|
+ echo "$me: too many arguments$help" >&2
|
|
+ exit 1
|
|
+fi
|
|
+
|
|
+trap 'exit 1' 1 2 15
|
|
+
|
|
+# 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
|
|
+# temporary files to be created and, as you can see below, it is a
|
|
+# headache to deal with in a portable fashion.
|
|
+
|
|
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
|
|
+# use `HOST_CC' if defined, but it is deprecated.
|
|
+
|
|
+# Portable tmp directory creation inspired by the Autoconf team.
|
|
+
|
|
+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 ;
|
|
+: ${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) ; } ||
|
|
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
|
|
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
|
|
+dummy=$tmp/dummy ;
|
|
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
|
|
+case $CC_FOR_BUILD,$HOST_CC,$CC in
|
|
+ ,,) echo "int x;" > $dummy.c ;
|
|
+ for c in cc gcc c89 c99 ; do
|
|
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
|
|
+ CC_FOR_BUILD="$c"; break ;
|
|
+ fi ;
|
|
+ done ;
|
|
+ if test x"$CC_FOR_BUILD" = x ; then
|
|
+ CC_FOR_BUILD=no_compiler_found ;
|
|
+ fi
|
|
+ ;;
|
|
+ ,,*) CC_FOR_BUILD=$CC ;;
|
|
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
|
|
+esac ; set_cc_for_build= ;'
|
|
+
|
|
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
|
+# (ghazi@noc.rutgers.edu 1994-08-24)
|
|
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
|
|
+ PATH=$PATH:/.attbin ; export PATH
|
|
+fi
|
|
+
|
|
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
|
|
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
|
|
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
|
|
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
|
|
+
|
|
+if [ "${UNAME_SYSTEM}" = "Linux" ] ; then
|
|
+ eval $set_cc_for_build
|
|
+ cat << EOF > $dummy.c
|
|
+ #include <features.h>
|
|
+ #ifdef __UCLIBC__
|
|
+ # ifdef __UCLIBC_CONFIG_VERSION__
|
|
+ LIBC=uclibc __UCLIBC_CONFIG_VERSION__
|
|
+ # else
|
|
+ LIBC=uclibc
|
|
+ # endif
|
|
+ #else
|
|
+ LIBC=gnu
|
|
+ #endif
|
|
+EOF
|
|
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep LIBC= | sed -e 's: ::g'`
|
|
+fi
|
|
+
|
|
+# Note: order is significant - the case branches are not exclusive.
|
|
+
|
|
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|
+ *:NetBSD:*:*)
|
|
+ # NetBSD (nbsd) targets should (where applicable) match one or
|
|
+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
|
|
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
|
|
+ # switched to ELF, *-*-netbsd* would select the old
|
|
+ # object file format. This provides both forward
|
|
+ # compatibility and a consistent mechanism for selecting the
|
|
+ # object file format.
|
|
+ #
|
|
+ # Note: NetBSD doesn't particularly care about the vendor
|
|
+ # portion of the name. We always set it to "unknown".
|
|
+ sysctl="sysctl -n hw.machine_arch"
|
|
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
|
|
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
|
|
+ case "${UNAME_MACHINE_ARCH}" in
|
|
+ armeb) machine=armeb-unknown ;;
|
|
+ arm*) machine=arm-unknown ;;
|
|
+ sh3el) machine=shl-unknown ;;
|
|
+ sh3eb) machine=sh-unknown ;;
|
|
+ sh5el) machine=sh5le-unknown ;;
|
|
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
|
|
+ esac
|
|
+ # The Operating System including object format, if it has switched
|
|
+ # to ELF recently, or will in the future.
|
|
+ case "${UNAME_MACHINE_ARCH}" 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
|
|
+ then
|
|
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
|
|
+ # Return netbsd for either. FIX?
|
|
+ os=netbsd
|
|
+ else
|
|
+ os=netbsdelf
|
|
+ fi
|
|
+ ;;
|
|
+ *)
|
|
+ os=netbsd
|
|
+ ;;
|
|
+ esac
|
|
+ # The OS release
|
|
+ # Debian GNU/NetBSD machines have a different userland, and
|
|
+ # thus, need a distinct triplet. However, they do not need
|
|
+ # kernel version information, so it can be replaced with a
|
|
+ # suitable tag, in the style of linux-gnu.
|
|
+ case "${UNAME_VERSION}" in
|
|
+ Debian*)
|
|
+ release='-gnu'
|
|
+ ;;
|
|
+ *)
|
|
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
|
+ ;;
|
|
+ esac
|
|
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
|
|
+ # contains redundant information, the shorter form:
|
|
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
|
|
+ echo "${machine}-${os}${release}"
|
|
+ exit ;;
|
|
+ *:OpenBSD:*:*)
|
|
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
|
|
+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:ekkoBSD:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:SolidBSD:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ macppc:MirBSD:*:*)
|
|
+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:MirBSD:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ alpha:OSF1:*:*)
|
|
+ case $UNAME_RELEASE in
|
|
+ *4.0)
|
|
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
|
|
+ ;;
|
|
+ *5.*)
|
|
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
|
|
+ ;;
|
|
+ esac
|
|
+ # According to Compaq, /usr/sbin/psrinfo has been available on
|
|
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
|
|
+ # covers most systems running today. This code pipes the CPU
|
|
+ # types through head -n 1, so we only detect the type of CPU 0.
|
|
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
|
|
+ case "$ALPHA_CPU_TYPE" in
|
|
+ "EV4 (21064)")
|
|
+ UNAME_MACHINE="alpha" ;;
|
|
+ "EV4.5 (21064)")
|
|
+ UNAME_MACHINE="alpha" ;;
|
|
+ "LCA4 (21066/21068)")
|
|
+ UNAME_MACHINE="alpha" ;;
|
|
+ "EV5 (21164)")
|
|
+ UNAME_MACHINE="alphaev5" ;;
|
|
+ "EV5.6 (21164A)")
|
|
+ UNAME_MACHINE="alphaev56" ;;
|
|
+ "EV5.6 (21164PC)")
|
|
+ UNAME_MACHINE="alphapca56" ;;
|
|
+ "EV5.7 (21164PC)")
|
|
+ UNAME_MACHINE="alphapca57" ;;
|
|
+ "EV6 (21264)")
|
|
+ UNAME_MACHINE="alphaev6" ;;
|
|
+ "EV6.7 (21264A)")
|
|
+ UNAME_MACHINE="alphaev67" ;;
|
|
+ "EV6.8CB (21264C)")
|
|
+ UNAME_MACHINE="alphaev68" ;;
|
|
+ "EV6.8AL (21264B)")
|
|
+ UNAME_MACHINE="alphaev68" ;;
|
|
+ "EV6.8CX (21264D)")
|
|
+ UNAME_MACHINE="alphaev68" ;;
|
|
+ "EV6.9A (21264/EV69A)")
|
|
+ UNAME_MACHINE="alphaev69" ;;
|
|
+ "EV7 (21364)")
|
|
+ UNAME_MACHINE="alphaev7" ;;
|
|
+ "EV7.9 (21364A)")
|
|
+ UNAME_MACHINE="alphaev79" ;;
|
|
+ esac
|
|
+ # A Pn.n version is a patched version.
|
|
+ # A Vn.n version is a released version.
|
|
+ # A Tn.n version is a released field test version.
|
|
+ # A Xn.n version is an unreleased experimental baselevel.
|
|
+ # 1.2 uses "1.2" for uname -r.
|
|
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
|
+ exit ;;
|
|
+ Alpha\ *:Windows_NT*:*)
|
|
+ # How do we know it's Interix rather than the generic POSIX subsystem?
|
|
+ # Should we change UNAME_MACHINE based on the output of uname instead
|
|
+ # of the specific Alpha model?
|
|
+ echo alpha-pc-interix
|
|
+ exit ;;
|
|
+ 21064:Windows_NT:50:3)
|
|
+ echo alpha-dec-winnt3.5
|
|
+ exit ;;
|
|
+ Amiga*:UNIX_System_V:4.0:*)
|
|
+ echo m68k-unknown-sysv4
|
|
+ exit ;;
|
|
+ *:[Aa]miga[Oo][Ss]:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-amigaos
|
|
+ exit ;;
|
|
+ *:[Mm]orph[Oo][Ss]:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-morphos
|
|
+ exit ;;
|
|
+ *:OS/390:*:*)
|
|
+ echo i370-ibm-openedition
|
|
+ exit ;;
|
|
+ *:z/VM:*:*)
|
|
+ echo s390-ibm-zvmoe
|
|
+ exit ;;
|
|
+ *:OS400:*:*)
|
|
+ echo powerpc-ibm-os400
|
|
+ exit ;;
|
|
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
|
|
+ echo arm-acorn-riscix${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ arm:riscos:*:*|arm:RISCOS:*:*)
|
|
+ echo arm-unknown-riscos
|
|
+ exit ;;
|
|
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
|
|
+ echo hppa1.1-hitachi-hiuxmpp
|
|
+ exit ;;
|
|
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
|
|
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
|
|
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
|
|
+ echo pyramid-pyramid-sysv3
|
|
+ else
|
|
+ echo pyramid-pyramid-bsd
|
|
+ fi
|
|
+ exit ;;
|
|
+ NILE*:*:*:dcosx)
|
|
+ echo pyramid-pyramid-svr4
|
|
+ exit ;;
|
|
+ DRS?6000:unix:4.0:6*)
|
|
+ echo sparc-icl-nx6
|
|
+ exit ;;
|
|
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
|
|
+ case `/usr/bin/uname -p` in
|
|
+ sparc) echo sparc-icl-nx7; exit ;;
|
|
+ esac ;;
|
|
+ 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:SunOS:5.*:* | i86xen:SunOS:5.*:*)
|
|
+ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
|
+ exit ;;
|
|
+ sun4*:SunOS:6*:*)
|
|
+ # According to config.sub, this is the proper way to canonicalize
|
|
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
|
|
+ # it's likely to be more like Solaris than SunOS4.
|
|
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
|
+ exit ;;
|
|
+ sun4*:SunOS:*:*)
|
|
+ case "`/usr/bin/arch -k`" in
|
|
+ Series*|S4*)
|
|
+ UNAME_RELEASE=`uname -v`
|
|
+ ;;
|
|
+ esac
|
|
+ # Japanese Language versions have a version number like `4.1.3-JL'.
|
|
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
|
|
+ exit ;;
|
|
+ sun3*:SunOS:*:*)
|
|
+ echo m68k-sun-sunos${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ sun*:*:4.2BSD:*)
|
|
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
|
|
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
|
|
+ case "`/bin/arch`" in
|
|
+ sun3)
|
|
+ echo m68k-sun-sunos${UNAME_RELEASE}
|
|
+ ;;
|
|
+ sun4)
|
|
+ echo sparc-sun-sunos${UNAME_RELEASE}
|
|
+ ;;
|
|
+ esac
|
|
+ exit ;;
|
|
+ aushp:SunOS:*:*)
|
|
+ echo sparc-auspex-sunos${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ # The situation for MiNT is a little confusing. The machine name
|
|
+ # can be virtually everything (everything which is not
|
|
+ # "atarist" or "atariste" at least should have a processor
|
|
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
|
|
+ # to the lowercase version "mint" (or "freemint"). Finally
|
|
+ # the system name "TOS" denotes a system which is actually not
|
|
+ # MiNT. But MiNT is downward compatible to TOS, so this should
|
|
+ # be no problem.
|
|
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
|
|
+ echo m68k-atari-mint${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
|
|
+ echo m68k-atari-mint${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
|
|
+ echo m68k-atari-mint${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
|
|
+ echo m68k-milan-mint${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
|
|
+ echo m68k-hades-mint${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
|
|
+ echo m68k-unknown-mint${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ m68k:machten:*:*)
|
|
+ echo m68k-apple-machten${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ powerpc:machten:*:*)
|
|
+ echo powerpc-apple-machten${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ RISC*:Mach:*:*)
|
|
+ echo mips-dec-mach_bsd4.3
|
|
+ exit ;;
|
|
+ RISC*:ULTRIX:*:*)
|
|
+ echo mips-dec-ultrix${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ VAX*:ULTRIX*:*:*)
|
|
+ echo vax-dec-ultrix${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
|
|
+ echo clipper-intergraph-clix${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ mips:*:*:UMIPS | mips:*:*:RISCos)
|
|
+ eval $set_cc_for_build
|
|
+ sed 's/^ //' << EOF >$dummy.c
|
|
+#ifdef __cplusplus
|
|
+#include <stdio.h> /* for printf() prototype */
|
|
+ int main (int argc, char *argv[]) {
|
|
+#else
|
|
+ int main (argc, argv) int argc; char *argv[]; {
|
|
+#endif
|
|
+ #if defined (host_mips) && defined (MIPSEB)
|
|
+ #if defined (SYSTYPE_SYSV)
|
|
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
|
|
+ #endif
|
|
+ #if defined (SYSTYPE_SVR4)
|
|
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
|
|
+ #endif
|
|
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
|
|
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
|
|
+ #endif
|
|
+ #endif
|
|
+ exit (-1);
|
|
+ }
|
|
+EOF
|
|
+ $CC_FOR_BUILD -o $dummy $dummy.c &&
|
|
+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
|
|
+ SYSTEM_NAME=`$dummy $dummyarg` &&
|
|
+ { echo "$SYSTEM_NAME"; exit; }
|
|
+ echo mips-mips-riscos${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ Motorola:PowerMAX_OS:*:*)
|
|
+ echo powerpc-motorola-powermax
|
|
+ exit ;;
|
|
+ Motorola:*:4.3:PL8-*)
|
|
+ echo powerpc-harris-powermax
|
|
+ exit ;;
|
|
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
|
|
+ echo powerpc-harris-powermax
|
|
+ exit ;;
|
|
+ Night_Hawk:Power_UNIX:*:*)
|
|
+ echo powerpc-harris-powerunix
|
|
+ exit ;;
|
|
+ m88k:CX/UX:7*:*)
|
|
+ echo m88k-harris-cxux7
|
|
+ exit ;;
|
|
+ m88k:*:4*:R4*)
|
|
+ echo m88k-motorola-sysv4
|
|
+ exit ;;
|
|
+ m88k:*:3*:R3*)
|
|
+ echo m88k-motorola-sysv3
|
|
+ exit ;;
|
|
+ AViiON:dgux:*:*)
|
|
+ # DG/UX returns AViiON for all architectures
|
|
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
|
|
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
|
|
+ then
|
|
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
|
|
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
|
|
+ then
|
|
+ echo m88k-dg-dgux${UNAME_RELEASE}
|
|
+ else
|
|
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
|
|
+ fi
|
|
+ else
|
|
+ echo i586-dg-dgux${UNAME_RELEASE}
|
|
+ fi
|
|
+ exit ;;
|
|
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
|
|
+ echo m88k-dolphin-sysv3
|
|
+ exit ;;
|
|
+ M88*:*:R3*:*)
|
|
+ # Delta 88k system running SVR3
|
|
+ echo m88k-motorola-sysv3
|
|
+ exit ;;
|
|
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
|
|
+ echo m88k-tektronix-sysv3
|
|
+ exit ;;
|
|
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
|
|
+ echo m68k-tektronix-bsd
|
|
+ exit ;;
|
|
+ *:IRIX*:*:*)
|
|
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
|
|
+ exit ;;
|
|
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
|
|
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
|
|
+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
|
|
+ i*86:AIX:*:*)
|
|
+ echo i386-ibm-aix
|
|
+ exit ;;
|
|
+ ia64:AIX:*:*)
|
|
+ if [ -x /usr/bin/oslevel ] ; then
|
|
+ IBM_REV=`/usr/bin/oslevel`
|
|
+ else
|
|
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
|
|
+ fi
|
|
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
|
|
+ exit ;;
|
|
+ *:AIX:2:3)
|
|
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
|
|
+ eval $set_cc_for_build
|
|
+ sed 's/^ //' << EOF >$dummy.c
|
|
+ #include <sys/systemcfg.h>
|
|
+
|
|
+ main()
|
|
+ {
|
|
+ if (!__power_pc())
|
|
+ exit(1);
|
|
+ puts("powerpc-ibm-aix3.2.5");
|
|
+ exit(0);
|
|
+ }
|
|
+EOF
|
|
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
|
|
+ then
|
|
+ echo "$SYSTEM_NAME"
|
|
+ else
|
|
+ echo rs6000-ibm-aix3.2.5
|
|
+ fi
|
|
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
|
+ echo rs6000-ibm-aix3.2.4
|
|
+ else
|
|
+ echo rs6000-ibm-aix3.2
|
|
+ fi
|
|
+ exit ;;
|
|
+ *:AIX:*:[456])
|
|
+ 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
|
|
+ else
|
|
+ IBM_ARCH=powerpc
|
|
+ fi
|
|
+ if [ -x /usr/bin/oslevel ] ; then
|
|
+ IBM_REV=`/usr/bin/oslevel`
|
|
+ else
|
|
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
|
|
+ fi
|
|
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
|
|
+ exit ;;
|
|
+ *:AIX:*:*)
|
|
+ echo rs6000-ibm-aix
|
|
+ exit ;;
|
|
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
|
|
+ echo romp-ibm-bsd4.4
|
|
+ exit ;;
|
|
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
|
|
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
|
|
+ exit ;; # report: romp-ibm BSD 4.3
|
|
+ *:BOSX:*:*)
|
|
+ echo rs6000-bull-bosx
|
|
+ exit ;;
|
|
+ DPX/2?00:B.O.S.:*:*)
|
|
+ echo m68k-bull-sysv3
|
|
+ exit ;;
|
|
+ 9000/[34]??:4.3bsd:1.*:*)
|
|
+ echo m68k-hp-bsd
|
|
+ exit ;;
|
|
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
|
|
+ echo m68k-hp-bsd4.4
|
|
+ exit ;;
|
|
+ 9000/[34678]??:HP-UX:*:*)
|
|
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
|
|
+ case "${UNAME_MACHINE}" in
|
|
+ 9000/31? ) HP_ARCH=m68000 ;;
|
|
+ 9000/[34]?? ) HP_ARCH=m68k ;;
|
|
+ 9000/[678][0-9][0-9])
|
|
+ if [ -x /usr/bin/getconf ]; then
|
|
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
|
|
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
|
|
+ case "${sc_cpu_version}" in
|
|
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
|
|
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
|
|
+ 532) # CPU_PA_RISC2_0
|
|
+ case "${sc_kernel_bits}" in
|
|
+ 32) HP_ARCH="hppa2.0n" ;;
|
|
+ 64) HP_ARCH="hppa2.0w" ;;
|
|
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
|
|
+ esac ;;
|
|
+ esac
|
|
+ fi
|
|
+ if [ "${HP_ARCH}" = "" ]; then
|
|
+ eval $set_cc_for_build
|
|
+ sed 's/^ //' << EOF >$dummy.c
|
|
+
|
|
+ #define _HPUX_SOURCE
|
|
+ #include <stdlib.h>
|
|
+ #include <unistd.h>
|
|
+
|
|
+ int main ()
|
|
+ {
|
|
+ #if defined(_SC_KERNEL_BITS)
|
|
+ long bits = sysconf(_SC_KERNEL_BITS);
|
|
+ #endif
|
|
+ long cpu = sysconf (_SC_CPU_VERSION);
|
|
+
|
|
+ switch (cpu)
|
|
+ {
|
|
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
|
|
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
|
|
+ case CPU_PA_RISC2_0:
|
|
+ #if defined(_SC_KERNEL_BITS)
|
|
+ switch (bits)
|
|
+ {
|
|
+ case 64: puts ("hppa2.0w"); break;
|
|
+ case 32: puts ("hppa2.0n"); break;
|
|
+ default: puts ("hppa2.0"); break;
|
|
+ } break;
|
|
+ #else /* !defined(_SC_KERNEL_BITS) */
|
|
+ puts ("hppa2.0"); break;
|
|
+ #endif
|
|
+ default: puts ("hppa1.0"); break;
|
|
+ }
|
|
+ exit (0);
|
|
+ }
|
|
+EOF
|
|
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
|
|
+ test -z "$HP_ARCH" && HP_ARCH=hppa
|
|
+ fi ;;
|
|
+ esac
|
|
+ if [ ${HP_ARCH} = "hppa2.0w" ]
|
|
+ then
|
|
+ eval $set_cc_for_build
|
|
+
|
|
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
|
|
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
|
|
+ # generating 64-bit code. GNU and HP use different nomenclature:
|
|
+ #
|
|
+ # $ CC_FOR_BUILD=cc ./config.guess
|
|
+ # => hppa2.0w-hp-hpux11.23
|
|
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
|
|
+ # => hppa64-hp-hpux11.23
|
|
+
|
|
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
|
|
+ grep __LP64__ >/dev/null
|
|
+ then
|
|
+ HP_ARCH="hppa2.0w"
|
|
+ else
|
|
+ HP_ARCH="hppa64"
|
|
+ fi
|
|
+ fi
|
|
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
|
|
+ exit ;;
|
|
+ ia64:HP-UX:*:*)
|
|
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
|
|
+ echo ia64-hp-hpux${HPUX_REV}
|
|
+ exit ;;
|
|
+ 3050*:HI-UX:*:*)
|
|
+ eval $set_cc_for_build
|
|
+ sed 's/^ //' << EOF >$dummy.c
|
|
+ #include <unistd.h>
|
|
+ int
|
|
+ main ()
|
|
+ {
|
|
+ long cpu = sysconf (_SC_CPU_VERSION);
|
|
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
|
|
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
|
|
+ results, however. */
|
|
+ if (CPU_IS_PA_RISC (cpu))
|
|
+ {
|
|
+ switch (cpu)
|
|
+ {
|
|
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
|
|
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
|
|
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
|
|
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
|
|
+ }
|
|
+ }
|
|
+ else if (CPU_IS_HP_MC68K (cpu))
|
|
+ puts ("m68k-hitachi-hiuxwe2");
|
|
+ else puts ("unknown-hitachi-hiuxwe2");
|
|
+ exit (0);
|
|
+ }
|
|
+EOF
|
|
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
|
|
+ { echo "$SYSTEM_NAME"; exit; }
|
|
+ echo unknown-hitachi-hiuxwe2
|
|
+ exit ;;
|
|
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
|
|
+ echo hppa1.1-hp-bsd
|
|
+ exit ;;
|
|
+ 9000/8??:4.3bsd:*:*)
|
|
+ echo hppa1.0-hp-bsd
|
|
+ exit ;;
|
|
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
|
|
+ echo hppa1.0-hp-mpeix
|
|
+ exit ;;
|
|
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
|
|
+ echo hppa1.1-hp-osf
|
|
+ exit ;;
|
|
+ hp8??:OSF1:*:*)
|
|
+ echo hppa1.0-hp-osf
|
|
+ exit ;;
|
|
+ i*86:OSF1:*:*)
|
|
+ if [ -x /usr/sbin/sysversion ] ; then
|
|
+ echo ${UNAME_MACHINE}-unknown-osf1mk
|
|
+ else
|
|
+ echo ${UNAME_MACHINE}-unknown-osf1
|
|
+ fi
|
|
+ exit ;;
|
|
+ parisc*:Lites*:*:*)
|
|
+ echo hppa1.1-hp-lites
|
|
+ exit ;;
|
|
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
|
|
+ echo c1-convex-bsd
|
|
+ exit ;;
|
|
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
|
|
+ if getsysinfo -f scalar_acc
|
|
+ then echo c32-convex-bsd
|
|
+ else echo c2-convex-bsd
|
|
+ fi
|
|
+ exit ;;
|
|
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
|
|
+ echo c34-convex-bsd
|
|
+ exit ;;
|
|
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
|
|
+ echo c38-convex-bsd
|
|
+ exit ;;
|
|
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
|
|
+ echo c4-convex-bsd
|
|
+ exit ;;
|
|
+ CRAY*Y-MP:*:*:*)
|
|
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
|
+ exit ;;
|
|
+ CRAY*[A-Z]90:*:*:*)
|
|
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
|
|
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
|
|
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
|
|
+ -e 's/\.[^.]*$/.X/'
|
|
+ exit ;;
|
|
+ CRAY*TS:*:*:*)
|
|
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
|
+ exit ;;
|
|
+ CRAY*T3E:*:*:*)
|
|
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
|
+ exit ;;
|
|
+ CRAY*SV1:*:*:*)
|
|
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
|
+ exit ;;
|
|
+ *:UNICOS/mp:*:*)
|
|
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
|
+ exit ;;
|
|
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
|
|
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
|
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
|
|
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
|
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
|
+ exit ;;
|
|
+ 5000:UNIX_System_V:4.*:*)
|
|
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
|
|
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
|
|
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
|
+ exit ;;
|
|
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ sparc*:BSD/OS:*:*)
|
|
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:BSD/OS:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:FreeBSD:*:*)
|
|
+ case ${UNAME_MACHINE} in
|
|
+ pc98)
|
|
+ echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
|
|
+ amd64)
|
|
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
|
|
+ *)
|
|
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
|
|
+ esac
|
|
+ exit ;;
|
|
+ i*:CYGWIN*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-cygwin
|
|
+ exit ;;
|
|
+ *:MINGW*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-mingw32
|
|
+ exit ;;
|
|
+ i*:windows32*:*)
|
|
+ # uname -m includes "-pc" on this system.
|
|
+ echo ${UNAME_MACHINE}-mingw32
|
|
+ exit ;;
|
|
+ i*:PW*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-pw32
|
|
+ exit ;;
|
|
+ *:Interix*:[3456]*)
|
|
+ case ${UNAME_MACHINE} in
|
|
+ x86)
|
|
+ echo i586-pc-interix${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ EM64T | authenticamd | genuineintel)
|
|
+ echo x86_64-unknown-interix${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ IA64)
|
|
+ echo ia64-unknown-interix${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ esac ;;
|
|
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
|
|
+ echo i${UNAME_MACHINE}-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
|
|
+ # UNAME_MACHINE based on the output of uname instead of i386?
|
|
+ echo i586-pc-interix
|
|
+ exit ;;
|
|
+ i*:UWIN*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-uwin
|
|
+ exit ;;
|
|
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
|
|
+ echo x86_64-unknown-cygwin
|
|
+ exit ;;
|
|
+ p*:CYGWIN*:*)
|
|
+ echo powerpcle-unknown-cygwin
|
|
+ exit ;;
|
|
+ prep*:SunOS:5.*:*)
|
|
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
|
+ exit ;;
|
|
+ *:GNU:*:*)
|
|
+ # the GNU system
|
|
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
|
+ exit ;;
|
|
+ *:GNU/*:*:*)
|
|
+ # other systems with GNU libc and userland
|
|
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
|
|
+ exit ;;
|
|
+ i*86:Minix:*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-minix
|
|
+ exit ;;
|
|
+ arm*:Linux:*:*)
|
|
+ eval $set_cc_for_build
|
|
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
|
+ | grep -q __ARM_EABI__
|
|
+ then
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
|
+ else
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
|
|
+ fi
|
|
+ exit ;;
|
|
+ avr32*:Linux:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
|
+ exit ;;
|
|
+ cris:Linux:*:*)
|
|
+ echo cris-axis-linux-${LIBC}
|
|
+ exit ;;
|
|
+ crisv32:Linux:*:*)
|
|
+ echo crisv32-axis-linux-${LIBC}
|
|
+ exit ;;
|
|
+ frv:Linux:*:*)
|
|
+ echo frv-unknown-linux-${LIBC}
|
|
+ exit ;;
|
|
+ ia64:Linux:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
|
+ exit ;;
|
|
+ m32r*:Linux:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
|
+ exit ;;
|
|
+ m68*:Linux:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
|
+ 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-${LIBC}"; exit; }
|
|
+ ;;
|
|
+ mips64:Linux:*:*)
|
|
+ eval $set_cc_for_build
|
|
+ sed 's/^ //' << EOF >$dummy.c
|
|
+ #undef CPU
|
|
+ #undef mips64
|
|
+ #undef mips64el
|
|
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
|
|
+ CPU=mips64el
|
|
+ #else
|
|
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
|
|
+ CPU=mips64
|
|
+ #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-${LIBC}"; exit; }
|
|
+ ;;
|
|
+ or32:Linux:*:*)
|
|
+ echo or32-unknown-linux-${LIBC}
|
|
+ exit ;;
|
|
+ ppc:Linux:*:*)
|
|
+ echo powerpc-unknown-linux-${LIBC}
|
|
+ exit ;;
|
|
+ ppc64:Linux:*:*)
|
|
+ echo powerpc64-unknown-linux-${LIBC}
|
|
+ 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="gnulibc1" ; fi
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
|
+ exit ;;
|
|
+ padre:Linux:*:*)
|
|
+ echo sparc-unknown-linux-gnu
|
|
+ exit ;;
|
|
+ parisc:Linux:*:* | hppa:Linux:*:*)
|
|
+ # Look for CPU level
|
|
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
|
|
+ PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
|
|
+ PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
|
|
+ *) echo hppa-unknown-linux-${LIBC} ;;
|
|
+ esac
|
|
+ exit ;;
|
|
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
|
|
+ echo hppa64-unknown-linux-${LIBC}
|
|
+ exit ;;
|
|
+ s390:Linux:*:* | s390x:Linux:*:*)
|
|
+ echo ${UNAME_MACHINE}-ibm-linux
|
|
+ exit ;;
|
|
+ sh64*:Linux:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
|
+ exit ;;
|
|
+ sh*:Linux:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
|
+ exit ;;
|
|
+ sparc:Linux:*:* | sparc64:Linux:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
|
+ exit ;;
|
|
+ vax:Linux:*:*)
|
|
+ echo ${UNAME_MACHINE}-dec-linux-${LIBC}
|
|
+ exit ;;
|
|
+ x86_64:Linux:*:*)
|
|
+ echo x86_64-unknown-linux-${LIBC}
|
|
+ exit ;;
|
|
+ xtensa*:Linux:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
|
+ 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-${LIBC}"
|
|
+ ;;
|
|
+ a.out-i386-linux)
|
|
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}aout"
|
|
+ exit ;;
|
|
+ "")
|
|
+ # Either a pre-BFD a.out linker (linux-gnuoldld) or
|
|
+ # one that does not give us useful --help.
|
|
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}oldld"
|
|
+ exit ;;
|
|
+ esac
|
|
+ # This should get integrated into the C code below, but now we hack
|
|
+ if [ "$LIBC" != "gnu" ] ; then echo "$TENTATIVE" && exit 0 ; fi
|
|
+ # 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
|
|
+ # sysname and nodename.
|
|
+ echo i386-sequent-sysv4
|
|
+ exit ;;
|
|
+ i*86:UNIX_SV:4.2MP:2.*)
|
|
+ # Unixware is an offshoot of SVR4, but it has its own version
|
|
+ # number series starting with 2...
|
|
+ # I am not positive that other SVR4 systems won't match this,
|
|
+ # I just have to hope. -- rms.
|
|
+ # Use sysv4.2uw... so that sysv4* matches it.
|
|
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
|
|
+ exit ;;
|
|
+ i*86:OS/2:*:*)
|
|
+ # If we were able to find `uname', then EMX Unix compatibility
|
|
+ # is probably installed.
|
|
+ echo ${UNAME_MACHINE}-pc-os2-emx
|
|
+ exit ;;
|
|
+ i*86:XTS-300:*:STOP)
|
|
+ echo ${UNAME_MACHINE}-unknown-stop
|
|
+ exit ;;
|
|
+ i*86:atheos:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-atheos
|
|
+ exit ;;
|
|
+ i*86:syllable:*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-syllable
|
|
+ exit ;;
|
|
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
|
|
+ echo i386-unknown-lynxos${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ i*86:*DOS:*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
|
|
+ exit ;;
|
|
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
|
|
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
|
|
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
|
|
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
|
|
+ else
|
|
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
|
|
+ fi
|
|
+ exit ;;
|
|
+ i*86:*:5:[678]*)
|
|
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
|
|
+ case `/bin/uname -X | grep "^Machine"` in
|
|
+ *486*) UNAME_MACHINE=i486 ;;
|
|
+ *Pentium) UNAME_MACHINE=i586 ;;
|
|
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
|
|
+ esac
|
|
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
|
|
+ exit ;;
|
|
+ i*86:*:3.2:*)
|
|
+ if test -f /usr/options/cb.name; then
|
|
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
|
|
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
|
|
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
|
|
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
|
|
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
|
|
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
|
|
+ && UNAME_MACHINE=i586
|
|
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
|
|
+ && UNAME_MACHINE=i686
|
|
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
|
|
+ && UNAME_MACHINE=i686
|
|
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
|
|
+ else
|
|
+ echo ${UNAME_MACHINE}-pc-sysv32
|
|
+ fi
|
|
+ exit ;;
|
|
+ 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
|
|
+ exit ;;
|
|
+ Intel:Mach:3*:*)
|
|
+ echo i386-pc-mach3
|
|
+ exit ;;
|
|
+ paragon:*:*:*)
|
|
+ echo i860-intel-osf1
|
|
+ exit ;;
|
|
+ i860:*:4.*:*) # i860-SVR4
|
|
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
|
|
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
|
|
+ else # Add other i860-SVR4 vendors below as they are discovered.
|
|
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
|
|
+ fi
|
|
+ exit ;;
|
|
+ mini*:CTIX:SYS*5:*)
|
|
+ # "miniframe"
|
|
+ echo m68010-convergent-sysv
|
|
+ exit ;;
|
|
+ mc68k:UNIX:SYSTEM5:3.51m)
|
|
+ echo m68k-convergent-sysv
|
|
+ exit ;;
|
|
+ M680?0:D-NIX:5.3:*)
|
|
+ echo m68k-diab-dnix
|
|
+ exit ;;
|
|
+ M68*:*:R3V[5678]*:*)
|
|
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
|
|
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
|
|
+ OS_REL=''
|
|
+ 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; } ;;
|
|
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
|
|
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
|
|
+ && { echo i486-ncr-sysv4; exit; } ;;
|
|
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
|
|
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ mc68030:UNIX_System_V:4.*:*)
|
|
+ echo m68k-atari-sysv4
|
|
+ exit ;;
|
|
+ TSUNAMI:LynxOS:2.*:*)
|
|
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ rs6000:LynxOS:2.*:*)
|
|
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
|
|
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ SM[BE]S:UNIX_SV:*:*)
|
|
+ echo mips-dde-sysv${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ RM*:ReliantUNIX-*:*:*)
|
|
+ echo mips-sni-sysv4
|
|
+ exit ;;
|
|
+ RM*:SINIX-*:*:*)
|
|
+ echo mips-sni-sysv4
|
|
+ exit ;;
|
|
+ *:SINIX-*:*:*)
|
|
+ if uname -p 2>/dev/null >/dev/null ; then
|
|
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
|
|
+ echo ${UNAME_MACHINE}-sni-sysv4
|
|
+ else
|
|
+ echo ns32k-sni-sysv
|
|
+ fi
|
|
+ exit ;;
|
|
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
|
|
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
|
|
+ echo i586-unisys-sysv4
|
|
+ exit ;;
|
|
+ *:UNIX_System_V:4*:FTX*)
|
|
+ # From Gerald Hewes <hewes@openmarket.com>.
|
|
+ # How about differentiating between stratus architectures? -djm
|
|
+ echo hppa1.1-stratus-sysv4
|
|
+ exit ;;
|
|
+ *:*:*:FTX*)
|
|
+ # From seanf@swdc.stratus.com.
|
|
+ echo i860-stratus-sysv4
|
|
+ exit ;;
|
|
+ i*86:VOS:*:*)
|
|
+ # From Paul.Green@stratus.com.
|
|
+ echo ${UNAME_MACHINE}-stratus-vos
|
|
+ exit ;;
|
|
+ *:VOS:*:*)
|
|
+ # From Paul.Green@stratus.com.
|
|
+ echo hppa1.1-stratus-vos
|
|
+ exit ;;
|
|
+ mc68*:A/UX:*:*)
|
|
+ echo m68k-apple-aux${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ news*:NEWS-OS:6*:*)
|
|
+ echo mips-sony-newsos6
|
|
+ exit ;;
|
|
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
|
|
+ if [ -d /usr/nec ]; then
|
|
+ echo mips-nec-sysv${UNAME_RELEASE}
|
|
+ else
|
|
+ echo mips-unknown-sysv${UNAME_RELEASE}
|
|
+ fi
|
|
+ exit ;;
|
|
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
|
|
+ echo powerpc-be-beos
|
|
+ exit ;;
|
|
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
|
|
+ echo powerpc-apple-beos
|
|
+ exit ;;
|
|
+ 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 ;;
|
|
+ SX-5:SUPER-UX:*:*)
|
|
+ echo sx5-nec-superux${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ SX-6:SUPER-UX:*:*)
|
|
+ echo sx6-nec-superux${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ SX-7:SUPER-UX:*:*)
|
|
+ echo sx7-nec-superux${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ SX-8:SUPER-UX:*:*)
|
|
+ echo sx8-nec-superux${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ SX-8R:SUPER-UX:*:*)
|
|
+ echo sx8r-nec-superux${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ Power*:Rhapsody:*:*)
|
|
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:Rhapsody:*:*)
|
|
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:Darwin:*:*)
|
|
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
|
|
+ case $UNAME_PROCESSOR in
|
|
+ unknown) UNAME_PROCESSOR=powerpc ;;
|
|
+ esac
|
|
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
|
|
+ UNAME_PROCESSOR=`uname -p`
|
|
+ if test "$UNAME_PROCESSOR" = "x86"; then
|
|
+ UNAME_PROCESSOR=i386
|
|
+ UNAME_MACHINE=pc
|
|
+ fi
|
|
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:QNX:*:4*)
|
|
+ echo i386-pc-qnx
|
|
+ exit ;;
|
|
+ NSE-?:NONSTOP_KERNEL:*:*)
|
|
+ echo nse-tandem-nsk${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ NSR-?:NONSTOP_KERNEL:*:*)
|
|
+ echo nsr-tandem-nsk${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:NonStop-UX:*:*)
|
|
+ echo mips-compaq-nonstopux
|
|
+ exit ;;
|
|
+ BS2000:POSIX*:*:*)
|
|
+ echo bs2000-siemens-sysv
|
|
+ exit ;;
|
|
+ DS/*:UNIX_System_V:*:*)
|
|
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:Plan9:*:*)
|
|
+ # "uname -m" is not consistent, so use $cputype instead. 386
|
|
+ # is converted to i386 for consistency with other x86
|
|
+ # operating systems.
|
|
+ if test "$cputype" = "386"; then
|
|
+ UNAME_MACHINE=i386
|
|
+ else
|
|
+ UNAME_MACHINE="$cputype"
|
|
+ fi
|
|
+ echo ${UNAME_MACHINE}-unknown-plan9
|
|
+ exit ;;
|
|
+ *:TOPS-10:*:*)
|
|
+ echo pdp10-unknown-tops10
|
|
+ exit ;;
|
|
+ *:TENEX:*:*)
|
|
+ echo pdp10-unknown-tenex
|
|
+ exit ;;
|
|
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
|
|
+ echo pdp10-dec-tops20
|
|
+ exit ;;
|
|
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
|
|
+ echo pdp10-xkl-tops20
|
|
+ exit ;;
|
|
+ *:TOPS-20:*:*)
|
|
+ echo pdp10-unknown-tops20
|
|
+ exit ;;
|
|
+ *:ITS:*:*)
|
|
+ echo pdp10-unknown-its
|
|
+ exit ;;
|
|
+ SEI:*:*:SEIUX)
|
|
+ echo mips-sei-seiux${UNAME_RELEASE}
|
|
+ exit ;;
|
|
+ *:DragonFly:*:*)
|
|
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
|
|
+ exit ;;
|
|
+ *:*VMS:*:*)
|
|
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
|
|
+ case "${UNAME_MACHINE}" in
|
|
+ A*) echo alpha-dec-vms ; exit ;;
|
|
+ I*) echo ia64-dec-vms ; exit ;;
|
|
+ V*) echo vax-dec-vms ; exit ;;
|
|
+ esac ;;
|
|
+ *:XENIX:*:SysV)
|
|
+ echo i386-pc-xenix
|
|
+ exit ;;
|
|
+ i*86:skyos:*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
|
|
+ exit ;;
|
|
+ i*86:rdos:*:*)
|
|
+ echo ${UNAME_MACHINE}-pc-rdos
|
|
+ exit ;;
|
|
+esac
|
|
+
|
|
+#echo '(No uname command or uname output not recognized.)' 1>&2
|
|
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
|
|
+
|
|
+eval $set_cc_for_build
|
|
+cat >$dummy.c <<EOF
|
|
+#ifdef _SEQUENT_
|
|
+# include <sys/types.h>
|
|
+# include <sys/utsname.h>
|
|
+#endif
|
|
+main ()
|
|
+{
|
|
+#if defined (sony)
|
|
+#if defined (MIPSEB)
|
|
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
|
|
+ I don't know.... */
|
|
+ printf ("mips-sony-bsd\n"); exit (0);
|
|
+#else
|
|
+#include <sys/param.h>
|
|
+ printf ("m68k-sony-newsos%s\n",
|
|
+#ifdef NEWSOS4
|
|
+ "4"
|
|
+#else
|
|
+ ""
|
|
+#endif
|
|
+ ); exit (0);
|
|
+#endif
|
|
+#endif
|
|
+
|
|
+#if defined (__arm) && defined (__acorn) && defined (__unix)
|
|
+ printf ("arm-acorn-riscix\n"); exit (0);
|
|
+#endif
|
|
+
|
|
+#if defined (hp300) && !defined (hpux)
|
|
+ printf ("m68k-hp-bsd\n"); exit (0);
|
|
+#endif
|
|
+
|
|
+#if defined (NeXT)
|
|
+#if !defined (__ARCHITECTURE__)
|
|
+#define __ARCHITECTURE__ "m68k"
|
|
+#endif
|
|
+ int version;
|
|
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
|
|
+ if (version < 4)
|
|
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
|
|
+ else
|
|
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
|
|
+ exit (0);
|
|
+#endif
|
|
+
|
|
+#if defined (MULTIMAX) || defined (n16)
|
|
+#if defined (UMAXV)
|
|
+ printf ("ns32k-encore-sysv\n"); exit (0);
|
|
+#else
|
|
+#if defined (CMU)
|
|
+ printf ("ns32k-encore-mach\n"); exit (0);
|
|
+#else
|
|
+ printf ("ns32k-encore-bsd\n"); exit (0);
|
|
+#endif
|
|
+#endif
|
|
+#endif
|
|
+
|
|
+#if defined (__386BSD__)
|
|
+ printf ("i386-pc-bsd\n"); exit (0);
|
|
+#endif
|
|
+
|
|
+#if defined (sequent)
|
|
+#if defined (i386)
|
|
+ printf ("i386-sequent-dynix\n"); exit (0);
|
|
+#endif
|
|
+#if defined (ns32000)
|
|
+ printf ("ns32k-sequent-dynix\n"); exit (0);
|
|
+#endif
|
|
+#endif
|
|
+
|
|
+#if defined (_SEQUENT_)
|
|
+ struct utsname un;
|
|
+
|
|
+ uname(&un);
|
|
+
|
|
+ if (strncmp(un.version, "V2", 2) == 0) {
|
|
+ printf ("i386-sequent-ptx2\n"); exit (0);
|
|
+ }
|
|
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
|
|
+ printf ("i386-sequent-ptx1\n"); exit (0);
|
|
+ }
|
|
+ printf ("i386-sequent-ptx\n"); exit (0);
|
|
+
|
|
+#endif
|
|
+
|
|
+#if defined (vax)
|
|
+# if !defined (ultrix)
|
|
+# include <sys/param.h>
|
|
+# if defined (BSD)
|
|
+# if BSD == 43
|
|
+ printf ("vax-dec-bsd4.3\n"); exit (0);
|
|
+# else
|
|
+# if BSD == 199006
|
|
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
|
|
+# else
|
|
+ printf ("vax-dec-bsd\n"); exit (0);
|
|
+# endif
|
|
+# endif
|
|
+# else
|
|
+ printf ("vax-dec-bsd\n"); exit (0);
|
|
+# endif
|
|
+# else
|
|
+ printf ("vax-dec-ultrix\n"); exit (0);
|
|
+# endif
|
|
+#endif
|
|
+
|
|
+#if defined (alliant) && defined (i860)
|
|
+ printf ("i860-alliant-bsd\n"); exit (0);
|
|
+#endif
|
|
+
|
|
+ exit (1);
|
|
+}
|
|
+EOF
|
|
+
|
|
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
|
|
+ { echo "$SYSTEM_NAME"; exit; }
|
|
+
|
|
+# Apollos put the system type in the environment.
|
|
+
|
|
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
|
|
+
|
|
+# Convex versions that predate uname can use getsysinfo(1)
|
|
+
|
|
+if [ -x /usr/convex/getsysinfo ]
|
|
+then
|
|
+ case `getsysinfo -f cpu_type` in
|
|
+ c1*)
|
|
+ echo c1-convex-bsd
|
|
+ exit ;;
|
|
+ c2*)
|
|
+ if getsysinfo -f scalar_acc
|
|
+ then echo c32-convex-bsd
|
|
+ else echo c2-convex-bsd
|
|
+ fi
|
|
+ exit ;;
|
|
+ c34*)
|
|
+ echo c34-convex-bsd
|
|
+ exit ;;
|
|
+ c38*)
|
|
+ echo c38-convex-bsd
|
|
+ exit ;;
|
|
+ c4*)
|
|
+ echo c4-convex-bsd
|
|
+ exit ;;
|
|
+ esac
|
|
+fi
|
|
+
|
|
+cat >&2 <<EOF
|
|
+$0: unable to guess system type
|
|
+
|
|
+This script, last modified $timestamp, has failed to recognize
|
|
+the operating system you are using. It is advised that you
|
|
+download the most up to date version of the config scripts from
|
|
+
|
|
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
|
|
+and
|
|
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
|
|
+
|
|
+If the version you run ($0) is already up to date, please
|
|
+send the following data and any information you think might be
|
|
+pertinent to <config-patches@gnu.org> in order to provide the needed
|
|
+information to handle your system.
|
|
+
|
|
+config.guess timestamp = $timestamp
|
|
+
|
|
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
|
|
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
|
|
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
|
|
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
|
|
+
|
|
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
|
|
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
|
|
+
|
|
+hostinfo = `(hostinfo) 2>/dev/null`
|
|
+/bin/universe = `(/bin/universe) 2>/dev/null`
|
|
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
|
|
+/bin/arch = `(/bin/arch) 2>/dev/null`
|
|
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
|
|
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
|
|
+
|
|
+UNAME_MACHINE = ${UNAME_MACHINE}
|
|
+UNAME_RELEASE = ${UNAME_RELEASE}
|
|
+UNAME_SYSTEM = ${UNAME_SYSTEM}
|
|
+UNAME_VERSION = ${UNAME_VERSION}
|
|
+EOF
|
|
+
|
|
+exit 1
|
|
+
|
|
+# Local variables:
|
|
+# eval: (add-hook 'write-file-hooks 'time-stamp)
|
|
+# time-stamp-start: "timestamp='"
|
|
+# time-stamp-format: "%:y-%02m-%02d"
|
|
+# time-stamp-end: "'"
|
|
+# End:
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/config.h.in open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/config.h.in
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/config.h.in 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/config.h.in 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,111 @@
|
|
+/* config.h.in. Generated from configure.ac by autoheader. */
|
|
+
|
|
+/* Define to 1 if you have the <dlfcn.h> header file. */
|
|
+#undef HAVE_DLFCN_H
|
|
+
|
|
+/* Define to 1 if the system has the type `int16_t'. */
|
|
+#undef HAVE_INT16_T
|
|
+
|
|
+/* Define to 1 if the system has the type `int32_t'. */
|
|
+#undef HAVE_INT32_T
|
|
+
|
|
+/* Define to 1 if the system has the type `int64_t'. */
|
|
+#undef HAVE_INT64_T
|
|
+
|
|
+/* Define to 1 if the system has the type `int8_t'. */
|
|
+#undef HAVE_INT8_T
|
|
+
|
|
+/* Define to 1 if you have the <inttypes.h> header file. */
|
|
+#undef HAVE_INTTYPES_H
|
|
+
|
|
+/* Define to 1 if you have the <memory.h> header file. */
|
|
+#undef HAVE_MEMORY_H
|
|
+
|
|
+/* Define to 1 if you have the <stdint.h> header file. */
|
|
+#undef HAVE_STDINT_H
|
|
+
|
|
+/* Define to 1 if you have the <stdlib.h> header file. */
|
|
+#undef HAVE_STDLIB_H
|
|
+
|
|
+/* Define to 1 if you have the <strings.h> header file. */
|
|
+#undef HAVE_STRINGS_H
|
|
+
|
|
+/* Define to 1 if you have the <string.h> header file. */
|
|
+#undef HAVE_STRING_H
|
|
+
|
|
+/* Define to 1 if you have the <sys/stat.h> header file. */
|
|
+#undef HAVE_SYS_STAT_H
|
|
+
|
|
+/* Define to 1 if you have the <sys/types.h> header file. */
|
|
+#undef HAVE_SYS_TYPES_H
|
|
+
|
|
+/* Define to 1 if the system has the type `uint16_t'. */
|
|
+#undef HAVE_UINT16_T
|
|
+
|
|
+/* Define to 1 if the system has the type `uint32_t'. */
|
|
+#undef HAVE_UINT32_T
|
|
+
|
|
+/* Define to 1 if the system has the type `uint64_t'. */
|
|
+#undef HAVE_UINT64_T
|
|
+
|
|
+/* Define to 1 if the system has the type `uint8_t'. */
|
|
+#undef HAVE_UINT8_T
|
|
+
|
|
+/* Define to 1 if you have the <unistd.h> header file. */
|
|
+#undef HAVE_UNISTD_H
|
|
+
|
|
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
|
|
+#undef NO_MINUS_C_MINUS_O
|
|
+
|
|
+/* Name of package */
|
|
+#undef PACKAGE
|
|
+
|
|
+/* Define to the address where bug reports for this package should be sent. */
|
|
+#undef PACKAGE_BUGREPORT
|
|
+
|
|
+/* Define to the full name of this package. */
|
|
+#undef PACKAGE_NAME
|
|
+
|
|
+/* Define to the full name and version of this package. */
|
|
+#undef PACKAGE_STRING
|
|
+
|
|
+/* Define to the one symbol short name of this package. */
|
|
+#undef PACKAGE_TARNAME
|
|
+
|
|
+/* Define to the version of this package. */
|
|
+#undef PACKAGE_VERSION
|
|
+
|
|
+/* The size of a `int', as computed by sizeof. */
|
|
+#undef SIZEOF_INT
|
|
+
|
|
+/* The size of a `long', as computed by sizeof. */
|
|
+#undef SIZEOF_LONG
|
|
+
|
|
+/* The size of a `short', as computed by sizeof. */
|
|
+#undef SIZEOF_SHORT
|
|
+
|
|
+/* Define to 1 if you have the ANSI C header files. */
|
|
+#undef STDC_HEADERS
|
|
+
|
|
+/* Version number of package */
|
|
+#undef VERSION
|
|
+
|
|
+/* Enable GNU extensions on systems that have them. */
|
|
+#ifndef _GNU_SOURCE
|
|
+# undef _GNU_SOURCE
|
|
+#endif
|
|
+
|
|
+/* Define to empty if `const' does not conform to ANSI C. */
|
|
+#undef const
|
|
+
|
|
+/* Define to `__inline__' or `__inline' if that's what the C compiler
|
|
+ calls it, or to nothing if 'inline' is not supported under any name. */
|
|
+#ifndef __cplusplus
|
|
+#undef inline
|
|
+#endif
|
|
+
|
|
+/* Define to `long' if <sys/types.h> does not define. */
|
|
+#undef off_t
|
|
+
|
|
+/* Define to `unsigned' if <sys/types.h> does not define. */
|
|
+#undef size_t
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/config.sub open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/config.sub
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/config.sub 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/config.sub 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,1695 @@
|
|
+#! /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
|
|
+# Free Software Foundation, Inc.
|
|
+
|
|
+timestamp='2008-09-08'
|
|
+
|
|
+# This file is (in principle) common to ALL GNU software.
|
|
+# The presence of a machine in this file suggests that SOME GNU software
|
|
+# can handle that machine. It does not imply ALL GNU software can.
|
|
+#
|
|
+# This file is free software; you can redistribute it and/or modify
|
|
+# it under the terms of the GNU General Public License as published by
|
|
+# the Free Software Foundation; either version 2 of the License, or
|
|
+# (at your option) any later version.
|
|
+#
|
|
+# This program is distributed in the hope that it will be useful,
|
|
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+# GNU General Public License for more details.
|
|
+#
|
|
+# You should have received a copy of the GNU General Public License
|
|
+# along with this program; if not, write to the Free Software
|
|
+# Foundation, Inc., 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.
|
|
+
|
|
+
|
|
+# Please send patches to <config-patches@gnu.org>. Submit a context
|
|
+# diff and a properly formatted 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.
|
|
+
|
|
+# 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.
|
|
+# Each package is responsible for reporting which valid configurations
|
|
+# it does not support. The user should be able to distinguish
|
|
+# a failure to support a valid configuration from a meaningless
|
|
+# configuration.
|
|
+
|
|
+# The goal of this file is to map all the various variations of a given
|
|
+# machine specification into a single specification in the form:
|
|
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
|
|
+# or in some cases, the newer four-part form:
|
|
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
|
+# It is wrong to echo any other type of specification.
|
|
+
|
|
+me=`echo "$0" | sed -e 's,.*/,,'`
|
|
+
|
|
+usage="\
|
|
+Usage: $0 [OPTION] CPU-MFR-OPSYS
|
|
+ $0 [OPTION] ALIAS
|
|
+
|
|
+Canonicalize a configuration name.
|
|
+
|
|
+Operation modes:
|
|
+ -h, --help print this help, then exit
|
|
+ -t, --time-stamp print date of last modification, then exit
|
|
+ -v, --version print version number, then exit
|
|
+
|
|
+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.
|
|
+
|
|
+This is free software; see the source for copying conditions. There is NO
|
|
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
|
+
|
|
+help="
|
|
+Try \`$me --help' for more information."
|
|
+
|
|
+# Parse command line
|
|
+while test $# -gt 0 ; do
|
|
+ case $1 in
|
|
+ --time-stamp | --time* | -t )
|
|
+ echo "$timestamp" ; exit ;;
|
|
+ --version | -v )
|
|
+ echo "$version" ; exit ;;
|
|
+ --help | --h* | -h )
|
|
+ echo "$usage"; exit ;;
|
|
+ -- ) # Stop option processing
|
|
+ shift; break ;;
|
|
+ - ) # Use stdin as input.
|
|
+ break ;;
|
|
+ -* )
|
|
+ echo "$me: invalid option $1$help"
|
|
+ exit 1 ;;
|
|
+
|
|
+ *local*)
|
|
+ # First pass through any local machine types.
|
|
+ echo $1
|
|
+ exit ;;
|
|
+
|
|
+ * )
|
|
+ break ;;
|
|
+ esac
|
|
+done
|
|
+
|
|
+case $# in
|
|
+ 0) echo "$me: missing argument$help" >&2
|
|
+ exit 1;;
|
|
+ 1) ;;
|
|
+ *) echo "$me: too many arguments$help" >&2
|
|
+ exit 1;;
|
|
+esac
|
|
+
|
|
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
|
|
+# 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* | \
|
|
+ storm-chaos* | os2-emx* | rtmk-nova*)
|
|
+ os=-$maybe_os
|
|
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
|
+ ;;
|
|
+ *)
|
|
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
|
|
+ if [ $basic_machine != $1 ]
|
|
+ then os=`echo $1 | sed 's/.*-/-/'`
|
|
+ else os=; fi
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+### Let's recognize common machines as not being operating systems so
|
|
+### that things like config.sub decstation-3100 work. We also
|
|
+### recognize some manufacturers as not being operating systems, so we
|
|
+### can provide default operating systems below.
|
|
+case $os in
|
|
+ -sun*os*)
|
|
+ # Prevent following clause from handling this invalid input.
|
|
+ ;;
|
|
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
|
|
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
|
|
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
|
|
+ -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)
|
|
+ os=
|
|
+ basic_machine=$1
|
|
+ ;;
|
|
+ -sim | -cisco | -oki | -wec | -winbond)
|
|
+ os=
|
|
+ basic_machine=$1
|
|
+ ;;
|
|
+ -scout)
|
|
+ ;;
|
|
+ -wrs)
|
|
+ os=-vxworks
|
|
+ basic_machine=$1
|
|
+ ;;
|
|
+ -chorusos*)
|
|
+ os=-chorusos
|
|
+ basic_machine=$1
|
|
+ ;;
|
|
+ -chorusrdb)
|
|
+ os=-chorusrdb
|
|
+ basic_machine=$1
|
|
+ ;;
|
|
+ -hiux*)
|
|
+ os=-hiuxwe2
|
|
+ ;;
|
|
+ -sco6)
|
|
+ os=-sco5v6
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
|
+ ;;
|
|
+ -sco5)
|
|
+ os=-sco3.2v5
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
|
+ ;;
|
|
+ -sco4)
|
|
+ os=-sco3.2v4
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
|
+ ;;
|
|
+ -sco3.2.[4-9]*)
|
|
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
|
+ ;;
|
|
+ -sco3.2v[4-9]*)
|
|
+ # Don't forget version if it is 3.2v4 or newer.
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
|
+ ;;
|
|
+ -sco5v6*)
|
|
+ # Don't forget version if it is 3.2v4 or newer.
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
|
+ ;;
|
|
+ -sco*)
|
|
+ os=-sco3.2v2
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
|
+ ;;
|
|
+ -udk*)
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
|
+ ;;
|
|
+ -isc)
|
|
+ os=-isc2.2
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
|
+ ;;
|
|
+ -clix*)
|
|
+ basic_machine=clipper-intergraph
|
|
+ ;;
|
|
+ -isc*)
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
|
+ ;;
|
|
+ -lynx*)
|
|
+ os=-lynxos
|
|
+ ;;
|
|
+ -ptx*)
|
|
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
|
|
+ ;;
|
|
+ -windowsnt*)
|
|
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
|
|
+ ;;
|
|
+ -psos*)
|
|
+ os=-psos
|
|
+ ;;
|
|
+ -mint | -mint[0-9]*)
|
|
+ basic_machine=m68k-atari
|
|
+ os=-mint
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+# Decode aliases for certain CPU-COMPANY combinations.
|
|
+case $basic_machine in
|
|
+ # Recognize the basic CPU types without company name.
|
|
+ # Some are omitted here because they have special meanings below.
|
|
+ 1750a | 580 \
|
|
+ | a29k \
|
|
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
|
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
|
|
+ | am33_2.0 \
|
|
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
|
|
+ | bfin \
|
|
+ | c4x | clipper \
|
|
+ | d10v | d30v | dlx | dsp16xx | dvp \
|
|
+ | fido | fr30 | frv \
|
|
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
|
+ | i370 | i860 | i960 | ia64 \
|
|
+ | ip2k | iq2000 \
|
|
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
|
|
+ | maxq | mb | microblaze | mcore | mep | metag \
|
|
+ | mips | mipsbe | mipseb | mipsel | mipsle \
|
|
+ | mips16 \
|
|
+ | mips64 | mips64el \
|
|
+ | mips64octeon | mips64octeonel \
|
|
+ | mips64orion | mips64orionel \
|
|
+ | mips64r5900 | mips64r5900el \
|
|
+ | mips64vr | mips64vrel \
|
|
+ | mips64vr4100 | mips64vr4100el \
|
|
+ | mips64vr4300 | mips64vr4300el \
|
|
+ | mips64vr5000 | mips64vr5000el \
|
|
+ | mips64vr5900 | mips64vr5900el \
|
|
+ | mipsisa32 | mipsisa32el \
|
|
+ | mipsisa32r2 | mipsisa32r2el \
|
|
+ | mipsisa64 | mipsisa64el \
|
|
+ | mipsisa64r2 | mipsisa64r2el \
|
|
+ | mipsisa64sb1 | mipsisa64sb1el \
|
|
+ | mipsisa64sr71k | mipsisa64sr71kel \
|
|
+ | mipstx39 | mipstx39el \
|
|
+ | mn10200 | mn10300 \
|
|
+ | mt \
|
|
+ | msp430 \
|
|
+ | nios | nios2 \
|
|
+ | ns16k | ns32k \
|
|
+ | or32 \
|
|
+ | pdp10 | pdp11 | pj | pjl \
|
|
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
|
+ | pyramid \
|
|
+ | score \
|
|
+ | sh | sh[1234] | sh[24]a | sh[24]a*eb | 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 \
|
|
+ | v850 | v850e \
|
|
+ | we32k \
|
|
+ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
|
|
+ | z8k | z80)
|
|
+ basic_machine=$basic_machine-unknown
|
|
+ ;;
|
|
+ m6811 | m68hc11 | m6812 | m68hc12)
|
|
+ # Motorola 68HC11/12.
|
|
+ basic_machine=$basic_machine-unknown
|
|
+ os=-none
|
|
+ ;;
|
|
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
|
|
+ ;;
|
|
+ ms1)
|
|
+ basic_machine=mt-unknown
|
|
+ ;;
|
|
+
|
|
+ # We use `pc' rather than `unknown'
|
|
+ # because (1) that's what they normally are, and
|
|
+ # (2) the word "unknown" tends to confuse beginning users.
|
|
+ i*86 | x86_64)
|
|
+ basic_machine=$basic_machine-pc
|
|
+ ;;
|
|
+ # Object if more than one company name word.
|
|
+ *-*-*)
|
|
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
|
|
+ exit 1
|
|
+ ;;
|
|
+ # Recognize the basic CPU types with company name.
|
|
+ 580-* \
|
|
+ | a29k-* \
|
|
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
|
|
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
|
|
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
|
|
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
|
|
+ | avr-* | avr32-* \
|
|
+ | bfin-* | bs2000-* \
|
|
+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
|
|
+ | clipper-* | craynv-* | cydra-* \
|
|
+ | d10v-* | d30v-* | dlx-* \
|
|
+ | elxsi-* \
|
|
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
|
|
+ | h8300-* | h8500-* \
|
|
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
|
+ | i*86-* | i860-* | i960-* | ia64-* \
|
|
+ | ip2k-* | iq2000-* \
|
|
+ | m32c-* | m32r-* | m32rle-* \
|
|
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
|
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
|
|
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
|
|
+ | mips16-* \
|
|
+ | mips64-* | mips64el-* \
|
|
+ | mips64octeon-* | mips64octeonel-* \
|
|
+ | mips64orion-* | mips64orionel-* \
|
|
+ | mips64r5900-* | mips64r5900el-* \
|
|
+ | mips64vr-* | mips64vrel-* \
|
|
+ | mips64vr4100-* | mips64vr4100el-* \
|
|
+ | mips64vr4300-* | mips64vr4300el-* \
|
|
+ | mips64vr5000-* | mips64vr5000el-* \
|
|
+ | mips64vr5900-* | mips64vr5900el-* \
|
|
+ | mipsisa32-* | mipsisa32el-* \
|
|
+ | mipsisa32r2-* | mipsisa32r2el-* \
|
|
+ | mipsisa64-* | mipsisa64el-* \
|
|
+ | mipsisa64r2-* | mipsisa64r2el-* \
|
|
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
|
|
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
|
|
+ | mipstx39-* | mipstx39el-* \
|
|
+ | mmix-* \
|
|
+ | mt-* \
|
|
+ | msp430-* \
|
|
+ | 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[24]a*eb-* | 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-* \
|
|
+ | tron-* \
|
|
+ | v850-* | v850e-* | vax-* \
|
|
+ | we32k-* \
|
|
+ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
|
|
+ | xstormy16-* | xtensa*-* \
|
|
+ | ymp-* \
|
|
+ | z8k-* | z80-*)
|
|
+ ;;
|
|
+ # Recognize the basic CPU types without company name, with glob match.
|
|
+ xtensa*)
|
|
+ basic_machine=$basic_machine-unknown
|
|
+ ;;
|
|
+ # Recognize the various machine names and aliases which stand
|
|
+ # for a CPU type and a company and sometimes even an OS.
|
|
+ 386bsd)
|
|
+ basic_machine=i386-unknown
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
|
|
+ basic_machine=m68000-att
|
|
+ ;;
|
|
+ 3b*)
|
|
+ basic_machine=we32k-att
|
|
+ ;;
|
|
+ a29khif)
|
|
+ basic_machine=a29k-amd
|
|
+ os=-udi
|
|
+ ;;
|
|
+ abacus)
|
|
+ basic_machine=abacus-unknown
|
|
+ ;;
|
|
+ adobe68k)
|
|
+ basic_machine=m68010-adobe
|
|
+ os=-scout
|
|
+ ;;
|
|
+ alliant | fx80)
|
|
+ basic_machine=fx80-alliant
|
|
+ ;;
|
|
+ altos | altos3068)
|
|
+ basic_machine=m68k-altos
|
|
+ ;;
|
|
+ am29k)
|
|
+ basic_machine=a29k-none
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ amd64)
|
|
+ basic_machine=x86_64-pc
|
|
+ ;;
|
|
+ amd64-*)
|
|
+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ ;;
|
|
+ amdahl)
|
|
+ basic_machine=580-amdahl
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ amiga | amiga-*)
|
|
+ basic_machine=m68k-unknown
|
|
+ ;;
|
|
+ amigaos | amigados)
|
|
+ basic_machine=m68k-unknown
|
|
+ os=-amigaos
|
|
+ ;;
|
|
+ amigaunix | amix)
|
|
+ basic_machine=m68k-unknown
|
|
+ os=-sysv4
|
|
+ ;;
|
|
+ apollo68)
|
|
+ basic_machine=m68k-apollo
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ apollo68bsd)
|
|
+ basic_machine=m68k-apollo
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ aux)
|
|
+ basic_machine=m68k-apple
|
|
+ os=-aux
|
|
+ ;;
|
|
+ balance)
|
|
+ basic_machine=ns32k-sequent
|
|
+ os=-dynix
|
|
+ ;;
|
|
+ blackfin)
|
|
+ basic_machine=bfin-unknown
|
|
+ os=-linux
|
|
+ ;;
|
|
+ blackfin-*)
|
|
+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ os=-linux
|
|
+ ;;
|
|
+ c90)
|
|
+ basic_machine=c90-cray
|
|
+ os=-unicos
|
|
+ ;;
|
|
+ cegcc)
|
|
+ basic_machine=arm-unknown
|
|
+ os=-cegcc
|
|
+ ;;
|
|
+ convex-c1)
|
|
+ basic_machine=c1-convex
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ convex-c2)
|
|
+ basic_machine=c2-convex
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ convex-c32)
|
|
+ basic_machine=c32-convex
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ convex-c34)
|
|
+ basic_machine=c34-convex
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ convex-c38)
|
|
+ basic_machine=c38-convex
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ cray | j90)
|
|
+ basic_machine=j90-cray
|
|
+ os=-unicos
|
|
+ ;;
|
|
+ craynv)
|
|
+ basic_machine=craynv-cray
|
|
+ os=-unicosmp
|
|
+ ;;
|
|
+ cr16)
|
|
+ basic_machine=cr16-unknown
|
|
+ os=-elf
|
|
+ ;;
|
|
+ crds | unos)
|
|
+ basic_machine=m68k-crds
|
|
+ ;;
|
|
+ crisv32 | crisv32-* | etraxfs*)
|
|
+ basic_machine=crisv32-axis
|
|
+ ;;
|
|
+ cris | cris-* | etrax*)
|
|
+ basic_machine=cris-axis
|
|
+ ;;
|
|
+ crx)
|
|
+ basic_machine=crx-unknown
|
|
+ os=-elf
|
|
+ ;;
|
|
+ da30 | da30-*)
|
|
+ basic_machine=m68k-da30
|
|
+ ;;
|
|
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
|
|
+ basic_machine=mips-dec
|
|
+ ;;
|
|
+ decsystem10* | dec10*)
|
|
+ basic_machine=pdp10-dec
|
|
+ os=-tops10
|
|
+ ;;
|
|
+ decsystem20* | dec20*)
|
|
+ basic_machine=pdp10-dec
|
|
+ os=-tops20
|
|
+ ;;
|
|
+ delta | 3300 | motorola-3300 | motorola-delta \
|
|
+ | 3300-motorola | delta-motorola)
|
|
+ basic_machine=m68k-motorola
|
|
+ ;;
|
|
+ delta88)
|
|
+ basic_machine=m88k-motorola
|
|
+ os=-sysv3
|
|
+ ;;
|
|
+ dicos)
|
|
+ basic_machine=i686-pc
|
|
+ os=-dicos
|
|
+ ;;
|
|
+ djgpp)
|
|
+ basic_machine=i586-pc
|
|
+ os=-msdosdjgpp
|
|
+ ;;
|
|
+ dpx20 | dpx20-*)
|
|
+ basic_machine=rs6000-bull
|
|
+ os=-bosx
|
|
+ ;;
|
|
+ dpx2* | dpx2*-bull)
|
|
+ basic_machine=m68k-bull
|
|
+ os=-sysv3
|
|
+ ;;
|
|
+ ebmon29k)
|
|
+ basic_machine=a29k-amd
|
|
+ os=-ebmon
|
|
+ ;;
|
|
+ elxsi)
|
|
+ basic_machine=elxsi-elxsi
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ encore | umax | mmax)
|
|
+ basic_machine=ns32k-encore
|
|
+ ;;
|
|
+ es1800 | OSE68k | ose68k | ose | OSE)
|
|
+ basic_machine=m68k-ericsson
|
|
+ os=-ose
|
|
+ ;;
|
|
+ fx2800)
|
|
+ basic_machine=i860-alliant
|
|
+ ;;
|
|
+ genix)
|
|
+ basic_machine=ns32k-ns
|
|
+ ;;
|
|
+ gmicro)
|
|
+ basic_machine=tron-gmicro
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ go32)
|
|
+ basic_machine=i386-pc
|
|
+ os=-go32
|
|
+ ;;
|
|
+ h3050r* | hiux*)
|
|
+ basic_machine=hppa1.1-hitachi
|
|
+ os=-hiuxwe2
|
|
+ ;;
|
|
+ h8300hms)
|
|
+ basic_machine=h8300-hitachi
|
|
+ os=-hms
|
|
+ ;;
|
|
+ h8300xray)
|
|
+ basic_machine=h8300-hitachi
|
|
+ os=-xray
|
|
+ ;;
|
|
+ h8500hms)
|
|
+ basic_machine=h8500-hitachi
|
|
+ os=-hms
|
|
+ ;;
|
|
+ harris)
|
|
+ basic_machine=m88k-harris
|
|
+ os=-sysv3
|
|
+ ;;
|
|
+ hp300-*)
|
|
+ basic_machine=m68k-hp
|
|
+ ;;
|
|
+ hp300bsd)
|
|
+ basic_machine=m68k-hp
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ hp300hpux)
|
|
+ basic_machine=m68k-hp
|
|
+ os=-hpux
|
|
+ ;;
|
|
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
|
|
+ basic_machine=hppa1.0-hp
|
|
+ ;;
|
|
+ hp9k2[0-9][0-9] | hp9k31[0-9])
|
|
+ basic_machine=m68000-hp
|
|
+ ;;
|
|
+ hp9k3[2-9][0-9])
|
|
+ basic_machine=m68k-hp
|
|
+ ;;
|
|
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
|
|
+ basic_machine=hppa1.0-hp
|
|
+ ;;
|
|
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
|
|
+ basic_machine=hppa1.1-hp
|
|
+ ;;
|
|
+ hp9k78[0-9] | hp78[0-9])
|
|
+ # FIXME: really hppa2.0-hp
|
|
+ basic_machine=hppa1.1-hp
|
|
+ ;;
|
|
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
|
|
+ # FIXME: really hppa2.0-hp
|
|
+ basic_machine=hppa1.1-hp
|
|
+ ;;
|
|
+ hp9k8[0-9][13679] | hp8[0-9][13679])
|
|
+ basic_machine=hppa1.1-hp
|
|
+ ;;
|
|
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
|
|
+ basic_machine=hppa1.0-hp
|
|
+ ;;
|
|
+ hppa-next)
|
|
+ os=-nextstep3
|
|
+ ;;
|
|
+ hppaosf)
|
|
+ basic_machine=hppa1.1-hp
|
|
+ os=-osf
|
|
+ ;;
|
|
+ hppro)
|
|
+ basic_machine=hppa1.1-hp
|
|
+ os=-proelf
|
|
+ ;;
|
|
+ i370-ibm* | ibm*)
|
|
+ basic_machine=i370-ibm
|
|
+ ;;
|
|
+# I'm not sure what "Sysv32" means. Should this be sysv3.2?
|
|
+ i*86v32)
|
|
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
|
+ os=-sysv32
|
|
+ ;;
|
|
+ i*86v4*)
|
|
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
|
+ os=-sysv4
|
|
+ ;;
|
|
+ i*86v)
|
|
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ i*86sol2)
|
|
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
|
+ os=-solaris2
|
|
+ ;;
|
|
+ i386mach)
|
|
+ basic_machine=i386-mach
|
|
+ os=-mach
|
|
+ ;;
|
|
+ i386-vsta | vsta)
|
|
+ basic_machine=i386-unknown
|
|
+ os=-vsta
|
|
+ ;;
|
|
+ iris | iris4d)
|
|
+ basic_machine=mips-sgi
|
|
+ case $os in
|
|
+ -irix*)
|
|
+ ;;
|
|
+ *)
|
|
+ os=-irix4
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ isi68 | isi)
|
|
+ basic_machine=m68k-isi
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ m68knommu)
|
|
+ basic_machine=m68k-unknown
|
|
+ os=-linux
|
|
+ ;;
|
|
+ m68knommu-*)
|
|
+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ os=-linux
|
|
+ ;;
|
|
+ m88k-omron*)
|
|
+ basic_machine=m88k-omron
|
|
+ ;;
|
|
+ magnum | m3230)
|
|
+ basic_machine=mips-mips
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ merlin)
|
|
+ basic_machine=ns32k-utek
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ mingw32)
|
|
+ basic_machine=i386-pc
|
|
+ os=-mingw32
|
|
+ ;;
|
|
+ mingw32ce)
|
|
+ basic_machine=arm-unknown
|
|
+ os=-mingw32ce
|
|
+ ;;
|
|
+ miniframe)
|
|
+ basic_machine=m68000-convergent
|
|
+ ;;
|
|
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
|
|
+ basic_machine=m68k-atari
|
|
+ os=-mint
|
|
+ ;;
|
|
+ mipsEE* | ee | ps2)
|
|
+ basic_machine=mips64r5900el-scei
|
|
+ case $os in
|
|
+ -linux*)
|
|
+ ;;
|
|
+ *)
|
|
+ os=-elf
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ iop)
|
|
+ basic_machine=mipsel-scei
|
|
+ os=-irx
|
|
+ ;;
|
|
+ dvp)
|
|
+ basic_machine=dvp-scei
|
|
+ os=-elf
|
|
+ ;;
|
|
+ mips3*-*)
|
|
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
|
|
+ ;;
|
|
+ mips3*)
|
|
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
|
|
+ ;;
|
|
+ monitor)
|
|
+ basic_machine=m68k-rom68k
|
|
+ os=-coff
|
|
+ ;;
|
|
+ morphos)
|
|
+ basic_machine=powerpc-unknown
|
|
+ os=-morphos
|
|
+ ;;
|
|
+ msdos)
|
|
+ basic_machine=i386-pc
|
|
+ os=-msdos
|
|
+ ;;
|
|
+ ms1-*)
|
|
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
|
|
+ ;;
|
|
+ mvs)
|
|
+ basic_machine=i370-ibm
|
|
+ os=-mvs
|
|
+ ;;
|
|
+ ncr3000)
|
|
+ basic_machine=i486-ncr
|
|
+ os=-sysv4
|
|
+ ;;
|
|
+ netbsd386)
|
|
+ basic_machine=i386-unknown
|
|
+ os=-netbsd
|
|
+ ;;
|
|
+ netwinder)
|
|
+ basic_machine=armv4l-rebel
|
|
+ os=-linux
|
|
+ ;;
|
|
+ news | news700 | news800 | news900)
|
|
+ basic_machine=m68k-sony
|
|
+ os=-newsos
|
|
+ ;;
|
|
+ news1000)
|
|
+ basic_machine=m68030-sony
|
|
+ os=-newsos
|
|
+ ;;
|
|
+ news-3600 | risc-news)
|
|
+ basic_machine=mips-sony
|
|
+ os=-newsos
|
|
+ ;;
|
|
+ necv70)
|
|
+ basic_machine=v70-nec
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ next | m*-next )
|
|
+ basic_machine=m68k-next
|
|
+ case $os in
|
|
+ -nextstep* )
|
|
+ ;;
|
|
+ -ns2*)
|
|
+ os=-nextstep2
|
|
+ ;;
|
|
+ *)
|
|
+ os=-nextstep3
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ nh3000)
|
|
+ basic_machine=m68k-harris
|
|
+ os=-cxux
|
|
+ ;;
|
|
+ nh[45]000)
|
|
+ basic_machine=m88k-harris
|
|
+ os=-cxux
|
|
+ ;;
|
|
+ nindy960)
|
|
+ basic_machine=i960-intel
|
|
+ os=-nindy
|
|
+ ;;
|
|
+ mon960)
|
|
+ basic_machine=i960-intel
|
|
+ os=-mon960
|
|
+ ;;
|
|
+ nonstopux)
|
|
+ basic_machine=mips-compaq
|
|
+ os=-nonstopux
|
|
+ ;;
|
|
+ np1)
|
|
+ basic_machine=np1-gould
|
|
+ ;;
|
|
+ nsr-tandem)
|
|
+ basic_machine=nsr-tandem
|
|
+ ;;
|
|
+ op50n-* | op60c-*)
|
|
+ basic_machine=hppa1.1-oki
|
|
+ os=-proelf
|
|
+ ;;
|
|
+ openrisc | openrisc-*)
|
|
+ basic_machine=or32-unknown
|
|
+ ;;
|
|
+ os400)
|
|
+ basic_machine=powerpc-ibm
|
|
+ os=-os400
|
|
+ ;;
|
|
+ OSE68000 | ose68000)
|
|
+ basic_machine=m68000-ericsson
|
|
+ os=-ose
|
|
+ ;;
|
|
+ os68k)
|
|
+ basic_machine=m68k-none
|
|
+ os=-os68k
|
|
+ ;;
|
|
+ pa-hitachi)
|
|
+ basic_machine=hppa1.1-hitachi
|
|
+ os=-hiuxwe2
|
|
+ ;;
|
|
+ paragon)
|
|
+ basic_machine=i860-intel
|
|
+ os=-osf
|
|
+ ;;
|
|
+ parisc)
|
|
+ basic_machine=hppa-unknown
|
|
+ os=-linux
|
|
+ ;;
|
|
+ parisc-*)
|
|
+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ os=-linux
|
|
+ ;;
|
|
+ pbd)
|
|
+ basic_machine=sparc-tti
|
|
+ ;;
|
|
+ pbb)
|
|
+ basic_machine=m68k-tti
|
|
+ ;;
|
|
+ pc532 | pc532-*)
|
|
+ basic_machine=ns32k-pc532
|
|
+ ;;
|
|
+ pc98)
|
|
+ basic_machine=i386-pc
|
|
+ ;;
|
|
+ pc98-*)
|
|
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ ;;
|
|
+ pentium | p5 | k5 | k6 | nexgen | viac3)
|
|
+ basic_machine=i586-pc
|
|
+ ;;
|
|
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
|
|
+ basic_machine=i686-pc
|
|
+ ;;
|
|
+ pentiumii | pentium2 | pentiumiii | pentium3)
|
|
+ basic_machine=i686-pc
|
|
+ ;;
|
|
+ pentium4)
|
|
+ basic_machine=i786-pc
|
|
+ ;;
|
|
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
|
|
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ ;;
|
|
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
|
|
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ ;;
|
|
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
|
|
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ ;;
|
|
+ pentium4-*)
|
|
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ ;;
|
|
+ pn)
|
|
+ basic_machine=pn-gould
|
|
+ ;;
|
|
+ power) basic_machine=power-ibm
|
|
+ ;;
|
|
+ ppc) basic_machine=powerpc-unknown
|
|
+ ;;
|
|
+ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ ;;
|
|
+ ppcle | powerpclittle | ppc-le | powerpc-little)
|
|
+ basic_machine=powerpcle-unknown
|
|
+ ;;
|
|
+ ppcle-* | powerpclittle-*)
|
|
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ ;;
|
|
+ ppc64) basic_machine=powerpc64-unknown
|
|
+ ;;
|
|
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ ;;
|
|
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
|
|
+ basic_machine=powerpc64le-unknown
|
|
+ ;;
|
|
+ ppc64le-* | powerpc64little-*)
|
|
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
|
|
+ ;;
|
|
+ ps2)
|
|
+ basic_machine=i386-ibm
|
|
+ ;;
|
|
+ pw32)
|
|
+ basic_machine=i586-unknown
|
|
+ os=-pw32
|
|
+ ;;
|
|
+ rdos)
|
|
+ basic_machine=i386-pc
|
|
+ os=-rdos
|
|
+ ;;
|
|
+ rom68k)
|
|
+ basic_machine=m68k-rom68k
|
|
+ os=-coff
|
|
+ ;;
|
|
+ rm[46]00)
|
|
+ basic_machine=mips-siemens
|
|
+ ;;
|
|
+ rtpc | rtpc-*)
|
|
+ basic_machine=romp-ibm
|
|
+ ;;
|
|
+ s390 | s390-*)
|
|
+ basic_machine=s390-ibm
|
|
+ ;;
|
|
+ s390x | s390x-*)
|
|
+ basic_machine=s390x-ibm
|
|
+ ;;
|
|
+ sa29200)
|
|
+ basic_machine=a29k-amd
|
|
+ os=-udi
|
|
+ ;;
|
|
+ sb1)
|
|
+ basic_machine=mipsisa64sb1-unknown
|
|
+ ;;
|
|
+ sb1el)
|
|
+ basic_machine=mipsisa64sb1el-unknown
|
|
+ ;;
|
|
+ sde)
|
|
+ basic_machine=mipsisa32-sde
|
|
+ os=-elf
|
|
+ ;;
|
|
+ sei)
|
|
+ basic_machine=mips-sei
|
|
+ os=-seiux
|
|
+ ;;
|
|
+ sequent)
|
|
+ basic_machine=i386-sequent
|
|
+ ;;
|
|
+ sh)
|
|
+ basic_machine=sh-hitachi
|
|
+ os=-hms
|
|
+ ;;
|
|
+ sh5el)
|
|
+ basic_machine=sh5le-unknown
|
|
+ ;;
|
|
+ sh64)
|
|
+ basic_machine=sh64-unknown
|
|
+ ;;
|
|
+ sparclite-wrs | simso-wrs)
|
|
+ basic_machine=sparclite-wrs
|
|
+ os=-vxworks
|
|
+ ;;
|
|
+ sps7)
|
|
+ basic_machine=m68k-bull
|
|
+ os=-sysv2
|
|
+ ;;
|
|
+ spur)
|
|
+ basic_machine=spur-unknown
|
|
+ ;;
|
|
+ st2000)
|
|
+ basic_machine=m68k-tandem
|
|
+ ;;
|
|
+ stratus)
|
|
+ basic_machine=i860-stratus
|
|
+ os=-sysv4
|
|
+ ;;
|
|
+ sun2)
|
|
+ basic_machine=m68000-sun
|
|
+ ;;
|
|
+ sun2os3)
|
|
+ basic_machine=m68000-sun
|
|
+ os=-sunos3
|
|
+ ;;
|
|
+ sun2os4)
|
|
+ basic_machine=m68000-sun
|
|
+ os=-sunos4
|
|
+ ;;
|
|
+ sun3os3)
|
|
+ basic_machine=m68k-sun
|
|
+ os=-sunos3
|
|
+ ;;
|
|
+ sun3os4)
|
|
+ basic_machine=m68k-sun
|
|
+ os=-sunos4
|
|
+ ;;
|
|
+ sun4os3)
|
|
+ basic_machine=sparc-sun
|
|
+ os=-sunos3
|
|
+ ;;
|
|
+ sun4os4)
|
|
+ basic_machine=sparc-sun
|
|
+ os=-sunos4
|
|
+ ;;
|
|
+ sun4sol2)
|
|
+ basic_machine=sparc-sun
|
|
+ os=-solaris2
|
|
+ ;;
|
|
+ sun3 | sun3-*)
|
|
+ basic_machine=m68k-sun
|
|
+ ;;
|
|
+ sun4)
|
|
+ basic_machine=sparc-sun
|
|
+ ;;
|
|
+ sun386 | sun386i | roadrunner)
|
|
+ basic_machine=i386-sun
|
|
+ ;;
|
|
+ sv1)
|
|
+ basic_machine=sv1-cray
|
|
+ os=-unicos
|
|
+ ;;
|
|
+ symmetry)
|
|
+ basic_machine=i386-sequent
|
|
+ os=-dynix
|
|
+ ;;
|
|
+ t3e)
|
|
+ basic_machine=alphaev5-cray
|
|
+ os=-unicos
|
|
+ ;;
|
|
+ t90)
|
|
+ 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
|
|
+ ;;
|
|
+ tile*)
|
|
+ basic_machine=tile-unknown
|
|
+ os=-linux-gnu
|
|
+ ;;
|
|
+ tx39)
|
|
+ basic_machine=mipstx39-unknown
|
|
+ ;;
|
|
+ tx39el)
|
|
+ basic_machine=mipstx39el-unknown
|
|
+ ;;
|
|
+ toad1)
|
|
+ basic_machine=pdp10-xkl
|
|
+ os=-tops20
|
|
+ ;;
|
|
+ tower | tower-32)
|
|
+ basic_machine=m68k-ncr
|
|
+ ;;
|
|
+ tpf)
|
|
+ basic_machine=s390x-ibm
|
|
+ os=-tpf
|
|
+ ;;
|
|
+ udi29k)
|
|
+ basic_machine=a29k-amd
|
|
+ os=-udi
|
|
+ ;;
|
|
+ ultra3)
|
|
+ basic_machine=a29k-nyu
|
|
+ os=-sym1
|
|
+ ;;
|
|
+ v810 | necv810)
|
|
+ basic_machine=v810-nec
|
|
+ os=-none
|
|
+ ;;
|
|
+ vaxv)
|
|
+ basic_machine=vax-dec
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ vms)
|
|
+ basic_machine=vax-dec
|
|
+ os=-vms
|
|
+ ;;
|
|
+ vpp*|vx|vx-*)
|
|
+ basic_machine=f301-fujitsu
|
|
+ ;;
|
|
+ vxworks960)
|
|
+ basic_machine=i960-wrs
|
|
+ os=-vxworks
|
|
+ ;;
|
|
+ vxworks68)
|
|
+ basic_machine=m68k-wrs
|
|
+ os=-vxworks
|
|
+ ;;
|
|
+ vxworks29k)
|
|
+ basic_machine=a29k-wrs
|
|
+ os=-vxworks
|
|
+ ;;
|
|
+ w65*)
|
|
+ basic_machine=w65-wdc
|
|
+ os=-none
|
|
+ ;;
|
|
+ w89k-*)
|
|
+ basic_machine=hppa1.1-winbond
|
|
+ os=-proelf
|
|
+ ;;
|
|
+ xbox)
|
|
+ basic_machine=i686-pc
|
|
+ os=-mingw32
|
|
+ ;;
|
|
+ xps | xps100)
|
|
+ basic_machine=xps100-honeywell
|
|
+ ;;
|
|
+ ymp)
|
|
+ basic_machine=ymp-cray
|
|
+ os=-unicos
|
|
+ ;;
|
|
+ z8k-*-coff)
|
|
+ basic_machine=z8k-unknown
|
|
+ os=-sim
|
|
+ ;;
|
|
+ z80-*-coff)
|
|
+ basic_machine=z80-unknown
|
|
+ os=-sim
|
|
+ ;;
|
|
+ none)
|
|
+ basic_machine=none-none
|
|
+ os=-none
|
|
+ ;;
|
|
+
|
|
+# Here we handle the default manufacturer of certain CPU types. It is in
|
|
+# some cases the only manufacturer, in others, it is the most popular.
|
|
+ w89k)
|
|
+ basic_machine=hppa1.1-winbond
|
|
+ ;;
|
|
+ op50n)
|
|
+ basic_machine=hppa1.1-oki
|
|
+ ;;
|
|
+ op60c)
|
|
+ basic_machine=hppa1.1-oki
|
|
+ ;;
|
|
+ romp)
|
|
+ basic_machine=romp-ibm
|
|
+ ;;
|
|
+ mmix)
|
|
+ basic_machine=mmix-knuth
|
|
+ ;;
|
|
+ rs6000)
|
|
+ basic_machine=rs6000-ibm
|
|
+ ;;
|
|
+ vax)
|
|
+ basic_machine=vax-dec
|
|
+ ;;
|
|
+ pdp10)
|
|
+ # there are many clones, so DEC is not a safe bet
|
|
+ basic_machine=pdp10-unknown
|
|
+ ;;
|
|
+ pdp11)
|
|
+ basic_machine=pdp11-dec
|
|
+ ;;
|
|
+ we32k)
|
|
+ basic_machine=we32k-att
|
|
+ ;;
|
|
+ sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
|
|
+ basic_machine=sh-unknown
|
|
+ ;;
|
|
+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
|
|
+ basic_machine=sparc-sun
|
|
+ ;;
|
|
+ cydra)
|
|
+ basic_machine=cydra-cydrome
|
|
+ ;;
|
|
+ orion)
|
|
+ basic_machine=orion-highlevel
|
|
+ ;;
|
|
+ orion105)
|
|
+ basic_machine=clipper-highlevel
|
|
+ ;;
|
|
+ mac | mpw | mac-mpw)
|
|
+ basic_machine=m68k-apple
|
|
+ ;;
|
|
+ pmac | pmac-mpw)
|
|
+ basic_machine=powerpc-apple
|
|
+ ;;
|
|
+ *-unknown)
|
|
+ # Make sure to match an already-canonicalized machine name.
|
|
+ ;;
|
|
+ *)
|
|
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
|
|
+ exit 1
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+# Here we canonicalize certain aliases for manufacturers.
|
|
+case $basic_machine in
|
|
+ *-digital*)
|
|
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
|
|
+ ;;
|
|
+ *-commodore*)
|
|
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
|
|
+ ;;
|
|
+ *)
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+# Decode manufacturer-specific aliases for certain operating systems.
|
|
+
|
|
+if [ x"$os" != x"" ]
|
|
+then
|
|
+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.
|
|
+ -solaris1 | -solaris1.*)
|
|
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
|
|
+ ;;
|
|
+ -solaris)
|
|
+ os=-solaris2
|
|
+ ;;
|
|
+ -svr4*)
|
|
+ os=-sysv4
|
|
+ ;;
|
|
+ -unixware*)
|
|
+ os=-sysv4.2uw
|
|
+ ;;
|
|
+ -gnu/linux*)
|
|
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
|
|
+ ;;
|
|
+ # First accept the basic system types.
|
|
+ # The portable systems comes first.
|
|
+ # 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* \
|
|
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
|
|
+ | -aos* \
|
|
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
|
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
|
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
|
|
+ | -openbsd* | -solidbsd* \
|
|
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
|
|
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
|
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
|
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
|
+ | -chorusos* | -chorusrdb* | -cegcc* \
|
|
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
|
+ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
|
|
+ | -uxpv* | -beos* | -mpeix* | -udk* \
|
|
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
|
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
|
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
|
|
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
|
|
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
|
|
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
|
|
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -irx*)
|
|
+ # Remember, each alternative MUST END IN *, to match a version number.
|
|
+ ;;
|
|
+ -qnx*)
|
|
+ case $basic_machine in
|
|
+ x86-* | i*86-*)
|
|
+ ;;
|
|
+ *)
|
|
+ os=-nto$os
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ -nto-qnx*)
|
|
+ ;;
|
|
+ -nto*)
|
|
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
|
|
+ ;;
|
|
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
|
|
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
|
|
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
|
|
+ ;;
|
|
+ -mac*)
|
|
+ os=`echo $os | sed -e 's|mac|macos|'`
|
|
+ ;;
|
|
+ -linux-dietlibc)
|
|
+ os=-linux-dietlibc
|
|
+ ;;
|
|
+ -linux*)
|
|
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
|
|
+ ;;
|
|
+ -sunos5*)
|
|
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
|
|
+ ;;
|
|
+ -sunos6*)
|
|
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
|
|
+ ;;
|
|
+ -opened*)
|
|
+ os=-openedition
|
|
+ ;;
|
|
+ -os400*)
|
|
+ os=-os400
|
|
+ ;;
|
|
+ -wince*)
|
|
+ os=-wince
|
|
+ ;;
|
|
+ -osfrose*)
|
|
+ os=-osfrose
|
|
+ ;;
|
|
+ -osf*)
|
|
+ os=-osf
|
|
+ ;;
|
|
+ -utek*)
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ -dynix*)
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ -acis*)
|
|
+ os=-aos
|
|
+ ;;
|
|
+ -atheos*)
|
|
+ os=-atheos
|
|
+ ;;
|
|
+ -syllable*)
|
|
+ os=-syllable
|
|
+ ;;
|
|
+ -386bsd)
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ -ctix* | -uts*)
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ -nova*)
|
|
+ os=-rtmk-nova
|
|
+ ;;
|
|
+ -ns2 )
|
|
+ os=-nextstep2
|
|
+ ;;
|
|
+ -nsk*)
|
|
+ os=-nsk
|
|
+ ;;
|
|
+ # Preserve the version number of sinix5.
|
|
+ -sinix5.*)
|
|
+ os=`echo $os | sed -e 's|sinix|sysv|'`
|
|
+ ;;
|
|
+ -sinix*)
|
|
+ os=-sysv4
|
|
+ ;;
|
|
+ -tpf*)
|
|
+ os=-tpf
|
|
+ ;;
|
|
+ -triton*)
|
|
+ os=-sysv3
|
|
+ ;;
|
|
+ -oss*)
|
|
+ os=-sysv3
|
|
+ ;;
|
|
+ -svr4)
|
|
+ os=-sysv4
|
|
+ ;;
|
|
+ -svr3)
|
|
+ os=-sysv3
|
|
+ ;;
|
|
+ -sysvr4)
|
|
+ os=-sysv4
|
|
+ ;;
|
|
+ # This must come after -sysvr4.
|
|
+ -sysv*)
|
|
+ ;;
|
|
+ -ose*)
|
|
+ os=-ose
|
|
+ ;;
|
|
+ -es1800*)
|
|
+ os=-ose
|
|
+ ;;
|
|
+ -xenix)
|
|
+ os=-xenix
|
|
+ ;;
|
|
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
|
|
+ os=-mint
|
|
+ ;;
|
|
+ -aros*)
|
|
+ os=-aros
|
|
+ ;;
|
|
+ -kaos*)
|
|
+ os=-kaos
|
|
+ ;;
|
|
+ -zvmoe)
|
|
+ os=-zvmoe
|
|
+ ;;
|
|
+ -dicos*)
|
|
+ os=-dicos
|
|
+ ;;
|
|
+ -none)
|
|
+ ;;
|
|
+ *)
|
|
+ # Get rid of the `-' at the beginning of $os.
|
|
+ os=`echo $os | sed 's/[^-]*-//'`
|
|
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
|
|
+ exit 1
|
|
+ ;;
|
|
+esac
|
|
+else
|
|
+
|
|
+# Here we handle the default operating systems that come with various machines.
|
|
+# The value should be what the vendor currently ships out the door with their
|
|
+# machine or put another way, the most popular os provided with the machine.
|
|
+
|
|
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
|
|
+# "-sun"), then you have to tell the case statement up towards the top
|
|
+# that MANUFACTURER isn't an operating system. Otherwise, code above
|
|
+# will signal an error saying that MANUFACTURER isn't an operating
|
|
+# system, and we'll never get to this point.
|
|
+
|
|
+case $basic_machine in
|
|
+ score-*)
|
|
+ os=-elf
|
|
+ ;;
|
|
+ spu-*)
|
|
+ os=-elf
|
|
+ ;;
|
|
+ *-acorn)
|
|
+ os=-riscix1.2
|
|
+ ;;
|
|
+ arm*-rebel)
|
|
+ os=-linux
|
|
+ ;;
|
|
+ arm*-semi)
|
|
+ os=-aout
|
|
+ ;;
|
|
+ c4x-* | tic4x-*)
|
|
+ os=-coff
|
|
+ ;;
|
|
+ # This must come before the *-dec entry.
|
|
+ pdp10-*)
|
|
+ os=-tops20
|
|
+ ;;
|
|
+ pdp11-*)
|
|
+ os=-none
|
|
+ ;;
|
|
+ *-dec | vax-*)
|
|
+ os=-ultrix4.2
|
|
+ ;;
|
|
+ m68*-apollo)
|
|
+ os=-domain
|
|
+ ;;
|
|
+ i386-sun)
|
|
+ os=-sunos4.0.2
|
|
+ ;;
|
|
+ m68000-sun)
|
|
+ os=-sunos3
|
|
+ # This also exists in the configure program, but was not the
|
|
+ # default.
|
|
+ # os=-sunos4
|
|
+ ;;
|
|
+ m68*-cisco)
|
|
+ os=-aout
|
|
+ ;;
|
|
+ mep-*)
|
|
+ os=-elf
|
|
+ ;;
|
|
+ mips*-cisco)
|
|
+ os=-elf
|
|
+ ;;
|
|
+ mips*-*)
|
|
+ os=-elf
|
|
+ ;;
|
|
+ or32-*)
|
|
+ os=-coff
|
|
+ ;;
|
|
+ *-tti) # must be before sparc entry or we get the wrong os.
|
|
+ os=-sysv3
|
|
+ ;;
|
|
+ sparc-* | *-sun)
|
|
+ os=-sunos4.1.1
|
|
+ ;;
|
|
+ *-be)
|
|
+ os=-beos
|
|
+ ;;
|
|
+ *-haiku)
|
|
+ os=-haiku
|
|
+ ;;
|
|
+ *-ibm)
|
|
+ os=-aix
|
|
+ ;;
|
|
+ *-knuth)
|
|
+ os=-mmixware
|
|
+ ;;
|
|
+ *-wec)
|
|
+ os=-proelf
|
|
+ ;;
|
|
+ *-winbond)
|
|
+ os=-proelf
|
|
+ ;;
|
|
+ *-oki)
|
|
+ os=-proelf
|
|
+ ;;
|
|
+ *-hp)
|
|
+ os=-hpux
|
|
+ ;;
|
|
+ *-hitachi)
|
|
+ os=-hiux
|
|
+ ;;
|
|
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ *-cbm)
|
|
+ os=-amigaos
|
|
+ ;;
|
|
+ *-dg)
|
|
+ os=-dgux
|
|
+ ;;
|
|
+ *-dolphin)
|
|
+ os=-sysv3
|
|
+ ;;
|
|
+ m68k-ccur)
|
|
+ os=-rtu
|
|
+ ;;
|
|
+ m88k-omron*)
|
|
+ os=-luna
|
|
+ ;;
|
|
+ *-next )
|
|
+ os=-nextstep
|
|
+ ;;
|
|
+ *-sequent)
|
|
+ os=-ptx
|
|
+ ;;
|
|
+ *-crds)
|
|
+ os=-unos
|
|
+ ;;
|
|
+ *-ns)
|
|
+ os=-genix
|
|
+ ;;
|
|
+ i370-*)
|
|
+ os=-mvs
|
|
+ ;;
|
|
+ *-next)
|
|
+ os=-nextstep3
|
|
+ ;;
|
|
+ *-gould)
|
|
+ os=-sysv
|
|
+ ;;
|
|
+ *-highlevel)
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ *-encore)
|
|
+ os=-bsd
|
|
+ ;;
|
|
+ *-sgi)
|
|
+ os=-irix
|
|
+ ;;
|
|
+ *-siemens)
|
|
+ os=-sysv4
|
|
+ ;;
|
|
+ *-masscomp)
|
|
+ os=-rtu
|
|
+ ;;
|
|
+ f30[01]-fujitsu | f700-fujitsu)
|
|
+ os=-uxpv
|
|
+ ;;
|
|
+ *-rom68k)
|
|
+ os=-coff
|
|
+ ;;
|
|
+ *-*bug)
|
|
+ os=-coff
|
|
+ ;;
|
|
+ *-apple)
|
|
+ os=-macos
|
|
+ ;;
|
|
+ *-atari*)
|
|
+ os=-mint
|
|
+ ;;
|
|
+ *)
|
|
+ os=-none
|
|
+ ;;
|
|
+esac
|
|
+fi
|
|
+
|
|
+# Here we handle the case where we know the os, and the CPU type, but not the
|
|
+# manufacturer. We pick the logical manufacturer.
|
|
+vendor=unknown
|
|
+case $basic_machine in
|
|
+ *-unknown)
|
|
+ case $os in
|
|
+ -riscix*)
|
|
+ vendor=acorn
|
|
+ ;;
|
|
+ -sunos*)
|
|
+ vendor=sun
|
|
+ ;;
|
|
+ -aix*)
|
|
+ vendor=ibm
|
|
+ ;;
|
|
+ -beos*)
|
|
+ vendor=be
|
|
+ ;;
|
|
+ -hpux*)
|
|
+ vendor=hp
|
|
+ ;;
|
|
+ -mpeix*)
|
|
+ vendor=hp
|
|
+ ;;
|
|
+ -hiux*)
|
|
+ vendor=hitachi
|
|
+ ;;
|
|
+ -unos*)
|
|
+ vendor=crds
|
|
+ ;;
|
|
+ -dgux*)
|
|
+ vendor=dg
|
|
+ ;;
|
|
+ -luna*)
|
|
+ vendor=omron
|
|
+ ;;
|
|
+ -genix*)
|
|
+ vendor=ns
|
|
+ ;;
|
|
+ -mvs* | -opened*)
|
|
+ vendor=ibm
|
|
+ ;;
|
|
+ -os400*)
|
|
+ vendor=ibm
|
|
+ ;;
|
|
+ -ptx*)
|
|
+ vendor=sequent
|
|
+ ;;
|
|
+ -tpf*)
|
|
+ vendor=ibm
|
|
+ ;;
|
|
+ -vxsim* | -vxworks* | -windiss*)
|
|
+ vendor=wrs
|
|
+ ;;
|
|
+ -aux*)
|
|
+ vendor=apple
|
|
+ ;;
|
|
+ -hms*)
|
|
+ vendor=hitachi
|
|
+ ;;
|
|
+ -mpw* | -macos*)
|
|
+ vendor=apple
|
|
+ ;;
|
|
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
|
|
+ vendor=atari
|
|
+ ;;
|
|
+ -vos*)
|
|
+ vendor=stratus
|
|
+ ;;
|
|
+ esac
|
|
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+echo $basic_machine$os
|
|
+exit
|
|
+
|
|
+# Local variables:
|
|
+# eval: (add-hook 'write-file-hooks 'time-stamp)
|
|
+# time-stamp-start: "timestamp='"
|
|
+# time-stamp-format: "%:y-%02m-%02d"
|
|
+# time-stamp-end: "'"
|
|
+# End:
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/configure open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/configure
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/configure 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/configure 2012-04-09 21:53:58.000000000 -0500
|
|
@@ -0,0 +1,22786 @@
|
|
+#! /bin/sh
|
|
+# Guess values for system-dependent variables and create Makefiles.
|
|
+# Generated by GNU Autoconf 2.59 for iscsiuio 0.7.2.1.
|
|
+#
|
|
+# Report bugs to <eddie.wai@broadcom.com>.
|
|
+#
|
|
+# Copyright (C) 2003 Free Software Foundation, Inc.
|
|
+# This configure script is free software; the Free Software Foundation
|
|
+# gives unlimited permission to copy, distribute and modify it.
|
|
+## --------------------- ##
|
|
+## M4sh Initialization. ##
|
|
+## --------------------- ##
|
|
+
|
|
+# 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+"$@"}'='"$@"'
|
|
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
|
|
+ set -o posix
|
|
+fi
|
|
+DUALCASE=1; export DUALCASE # for MKS sh
|
|
+
|
|
+# Support unset when possible.
|
|
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
|
|
+ as_unset=unset
|
|
+else
|
|
+ as_unset=false
|
|
+fi
|
|
+
|
|
+
|
|
+# Work around bugs in pre-3.0 UWIN ksh.
|
|
+$as_unset ENV MAIL MAILPATH
|
|
+PS1='$ '
|
|
+PS2='> '
|
|
+PS4='+ '
|
|
+
|
|
+# NLS nuisances.
|
|
+for as_var in \
|
|
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
|
|
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
|
|
+ LC_TELEPHONE LC_TIME
|
|
+do
|
|
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
|
|
+ eval $as_var=C; export $as_var
|
|
+ else
|
|
+ $as_unset $as_var
|
|
+ fi
|
|
+done
|
|
+
|
|
+# Required to use basename.
|
|
+if expr a : '\(a\)' >/dev/null 2>&1; then
|
|
+ as_expr=expr
|
|
+else
|
|
+ as_expr=false
|
|
+fi
|
|
+
|
|
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
|
|
+ as_basename=basename
|
|
+else
|
|
+ as_basename=false
|
|
+fi
|
|
+
|
|
+
|
|
+# Name of the executable.
|
|
+as_me=`$as_basename "$0" ||
|
|
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
|
|
+ X"$0" : 'X\(//\)$' \| \
|
|
+ X"$0" : 'X\(/\)$' \| \
|
|
+ . : '\(.\)' 2>/dev/null ||
|
|
+echo X/"$0" |
|
|
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
|
|
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
|
|
+ /^X\/\(\/\).*/{ s//\1/; q; }
|
|
+ s/.*/./; q'`
|
|
+
|
|
+
|
|
+# PATH needs CR, and LINENO needs CR and PATH.
|
|
+# Avoid depending upon Character Ranges.
|
|
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
|
|
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
|
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
|
|
+as_cr_digits='0123456789'
|
|
+as_cr_alnum=$as_cr_Letters$as_cr_digits
|
|
+
|
|
+# 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
|
|
+
|
|
+
|
|
+ as_lineno_1=$LINENO
|
|
+ as_lineno_2=$LINENO
|
|
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
|
|
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
|
|
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
|
|
+ # Find who we are. Look in the path if we contain no path at all
|
|
+ # relative or not.
|
|
+ case $0 in
|
|
+ *[\\/]* ) as_myself=$0 ;;
|
|
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
|
|
+done
|
|
+
|
|
+ ;;
|
|
+ esac
|
|
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
|
|
+ # in which case we are not to be found in the path.
|
|
+ if test "x$as_myself" = x; then
|
|
+ as_myself=$0
|
|
+ fi
|
|
+ if test ! -f "$as_myself"; then
|
|
+ { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
|
|
+ { (exit 1); exit 1; }; }
|
|
+ fi
|
|
+ case $CONFIG_SHELL in
|
|
+ '')
|
|
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for as_base in sh bash ksh sh5; do
|
|
+ case $as_dir in
|
|
+ /*)
|
|
+ if ("$as_dir/$as_base" -c '
|
|
+ as_lineno_1=$LINENO
|
|
+ as_lineno_2=$LINENO
|
|
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
|
|
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
|
|
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
|
|
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
|
|
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
|
|
+ CONFIG_SHELL=$as_dir/$as_base
|
|
+ export CONFIG_SHELL
|
|
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
|
|
+ fi;;
|
|
+ esac
|
|
+ done
|
|
+done
|
|
+;;
|
|
+ esac
|
|
+
|
|
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
|
|
+ # uniformly replaced by the line number. The first 'sed' inserts a
|
|
+ # line-number line before each line; the second 'sed' does the real
|
|
+ # work. The second script uses 'N' to pair each line-number line
|
|
+ # with the numbered line, and appends trailing '-' during
|
|
+ # substitution so that $LINENO is not a special case at line end.
|
|
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
|
|
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
|
|
+ sed '=' <$as_myself |
|
|
+ sed '
|
|
+ N
|
|
+ s,$,-,
|
|
+ : loop
|
|
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
|
|
+ t loop
|
|
+ s,-$,,
|
|
+ s,^['$as_cr_digits']*\n,,
|
|
+ ' >$as_me.lineno &&
|
|
+ chmod +x $as_me.lineno ||
|
|
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
|
|
+ { (exit 1); exit 1; }; }
|
|
+
|
|
+ # Don't try to exec as it changes $[0], causing all sort of problems
|
|
+ # (the dirname of $[0] is not the place where we might find the
|
|
+ # original and so on. Autoconf is especially sensible to this).
|
|
+ . ./$as_me.lineno
|
|
+ # Exit status is that of the last command.
|
|
+ exit
|
|
+}
|
|
+
|
|
+
|
|
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
|
|
+ *c*,-n*) ECHO_N= ECHO_C='
|
|
+' ECHO_T=' ' ;;
|
|
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
|
|
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
|
|
+esac
|
|
+
|
|
+if expr a : '\(a\)' >/dev/null 2>&1; then
|
|
+ as_expr=expr
|
|
+else
|
|
+ as_expr=false
|
|
+fi
|
|
+
|
|
+rm -f conf$$ conf$$.exe conf$$.file
|
|
+echo >conf$$.file
|
|
+if ln -s conf$$.file conf$$ 2>/dev/null; then
|
|
+ # We could just check for DJGPP; but this test a) works b) is more generic
|
|
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
|
|
+ if test -f conf$$.exe; then
|
|
+ # Don't use ln at all; we don't have any links
|
|
+ as_ln_s='cp -p'
|
|
+ else
|
|
+ as_ln_s='ln -s'
|
|
+ fi
|
|
+elif ln conf$$.file conf$$ 2>/dev/null; then
|
|
+ as_ln_s=ln
|
|
+else
|
|
+ as_ln_s='cp -p'
|
|
+fi
|
|
+rm -f conf$$ conf$$.exe conf$$.file
|
|
+
|
|
+if mkdir -p . 2>/dev/null; then
|
|
+ as_mkdir_p=:
|
|
+else
|
|
+ test -d ./-p && rmdir ./-p
|
|
+ as_mkdir_p=false
|
|
+fi
|
|
+
|
|
+as_executable_p="test -f"
|
|
+
|
|
+# Sed expression to map a string onto a valid CPP name.
|
|
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
|
|
+
|
|
+# Sed expression to map a string onto a valid variable name.
|
|
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
|
|
+
|
|
+
|
|
+# IFS
|
|
+# We need space, tab and new line, in precisely that order.
|
|
+as_nl='
|
|
+'
|
|
+IFS=" $as_nl"
|
|
+
|
|
+# CDPATH.
|
|
+$as_unset CDPATH
|
|
+
|
|
+
|
|
+
|
|
+# 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
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+tagnames=${tagnames+${tagnames},}CXX
|
|
+
|
|
+tagnames=${tagnames+${tagnames},}F77
|
|
+
|
|
+# Name of the host.
|
|
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
|
|
+# so uname gets run too.
|
|
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
|
|
+
|
|
+exec 6>&1
|
|
+
|
|
+#
|
|
+# Initializations.
|
|
+#
|
|
+ac_default_prefix=/usr/local
|
|
+ac_config_libobj_dir=.
|
|
+cross_compiling=no
|
|
+subdirs=
|
|
+MFLAGS=
|
|
+MAKEFLAGS=
|
|
+SHELL=${CONFIG_SHELL-/bin/sh}
|
|
+
|
|
+# Maximum number of lines to put in a shell here document.
|
|
+# This variable seems obsolete. It should probably be removed, and
|
|
+# only ac_max_sed_lines should be used.
|
|
+: ${ac_max_here_lines=38}
|
|
+
|
|
+# Identity of this package.
|
|
+PACKAGE_NAME='iscsiuio'
|
|
+PACKAGE_TARNAME='iscsiuio'
|
|
+PACKAGE_VERSION='0.7.2.1'
|
|
+PACKAGE_STRING='iscsiuio 0.7.2.1'
|
|
+PACKAGE_BUGREPORT='eddie.wai@broadcom.com'
|
|
+
|
|
+# Factoring default headers for most tests.
|
|
+ac_includes_default="\
|
|
+#include <stdio.h>
|
|
+#if HAVE_SYS_TYPES_H
|
|
+# include <sys/types.h>
|
|
+#endif
|
|
+#if HAVE_SYS_STAT_H
|
|
+# include <sys/stat.h>
|
|
+#endif
|
|
+#if STDC_HEADERS
|
|
+# include <stdlib.h>
|
|
+# include <stddef.h>
|
|
+#else
|
|
+# if HAVE_STDLIB_H
|
|
+# include <stdlib.h>
|
|
+# endif
|
|
+#endif
|
|
+#if HAVE_STRING_H
|
|
+# if !STDC_HEADERS && HAVE_MEMORY_H
|
|
+# include <memory.h>
|
|
+# endif
|
|
+# include <string.h>
|
|
+#endif
|
|
+#if HAVE_STRINGS_H
|
|
+# include <strings.h>
|
|
+#endif
|
|
+#if HAVE_INTTYPES_H
|
|
+# include <inttypes.h>
|
|
+#else
|
|
+# if HAVE_STDINT_H
|
|
+# include <stdint.h>
|
|
+# endif
|
|
+#endif
|
|
+#if HAVE_UNISTD_H
|
|
+# include <unistd.h>
|
|
+#endif"
|
|
+
|
|
+ac_default_prefix=
|
|
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar BASH CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE RANLIB ac_ct_RANLIB CPP EGREP ENDIAN build build_cpu build_vendor build_os host host_cpu host_vendor host_os SED LN_S ECHO AR ac_ct_AR CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL DEBUG_TRUE DEBUG_FALSE LIBOBJS LTLIBOBJS'
|
|
+ac_subst_files=''
|
|
+
|
|
+# Initialize some variables set by options.
|
|
+ac_init_help=
|
|
+ac_init_version=false
|
|
+# The variables have the same names as the options, with
|
|
+# dashes changed to underlines.
|
|
+cache_file=/dev/null
|
|
+exec_prefix=NONE
|
|
+no_create=
|
|
+no_recursion=
|
|
+prefix=NONE
|
|
+program_prefix=NONE
|
|
+program_suffix=NONE
|
|
+program_transform_name=s,x,x,
|
|
+silent=
|
|
+site=
|
|
+srcdir=
|
|
+verbose=
|
|
+x_includes=NONE
|
|
+x_libraries=NONE
|
|
+
|
|
+# Installation directory options.
|
|
+# These are left unexpanded so users can "make install exec_prefix=/foo"
|
|
+# and all the variables that are supposed to be based on exec_prefix
|
|
+# by default will actually change.
|
|
+# Use braces instead of parens because sh, perl, etc. also accept them.
|
|
+bindir='${exec_prefix}/bin'
|
|
+sbindir='${exec_prefix}/sbin'
|
|
+libexecdir='${exec_prefix}/libexec'
|
|
+datadir='${prefix}/share'
|
|
+sysconfdir='${prefix}/etc'
|
|
+sharedstatedir='${prefix}/com'
|
|
+localstatedir='${prefix}/var'
|
|
+libdir='${exec_prefix}/lib'
|
|
+includedir='${prefix}/include'
|
|
+oldincludedir='/usr/include'
|
|
+infodir='${prefix}/info'
|
|
+mandir='${prefix}/man'
|
|
+
|
|
+ac_prev=
|
|
+for ac_option
|
|
+do
|
|
+ # If the previous option needs an argument, assign it.
|
|
+ if test -n "$ac_prev"; then
|
|
+ eval "$ac_prev=\$ac_option"
|
|
+ ac_prev=
|
|
+ continue
|
|
+ fi
|
|
+
|
|
+ ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
|
|
+
|
|
+ # Accept the important Cygnus configure options, so we can diagnose typos.
|
|
+
|
|
+ case $ac_option in
|
|
+
|
|
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
|
|
+ ac_prev=bindir ;;
|
|
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
|
|
+ bindir=$ac_optarg ;;
|
|
+
|
|
+ -build | --build | --buil | --bui | --bu)
|
|
+ ac_prev=build_alias ;;
|
|
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
|
|
+ build_alias=$ac_optarg ;;
|
|
+
|
|
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
|
|
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
|
|
+ ac_prev=cache_file ;;
|
|
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
|
|
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
|
|
+ cache_file=$ac_optarg ;;
|
|
+
|
|
+ --config-cache | -C)
|
|
+ cache_file=config.cache ;;
|
|
+
|
|
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
|
|
+ ac_prev=datadir ;;
|
|
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
|
|
+ | --da=*)
|
|
+ datadir=$ac_optarg ;;
|
|
+
|
|
+ -disable-* | --disable-*)
|
|
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
|
|
+ # Reject names that are not valid shell variable names.
|
|
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
|
|
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
|
|
+ { (exit 1); exit 1; }; }
|
|
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
|
|
+ eval "enable_$ac_feature=no" ;;
|
|
+
|
|
+ -enable-* | --enable-*)
|
|
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
|
|
+ # Reject names that are not valid shell variable names.
|
|
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
|
|
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
|
|
+ { (exit 1); exit 1; }; }
|
|
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
|
|
+ case $ac_option in
|
|
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
|
|
+ *) ac_optarg=yes ;;
|
|
+ esac
|
|
+ eval "enable_$ac_feature='$ac_optarg'" ;;
|
|
+
|
|
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
|
|
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
|
|
+ | --exec | --exe | --ex)
|
|
+ ac_prev=exec_prefix ;;
|
|
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
|
|
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
|
|
+ | --exec=* | --exe=* | --ex=*)
|
|
+ exec_prefix=$ac_optarg ;;
|
|
+
|
|
+ -gas | --gas | --ga | --g)
|
|
+ # Obsolete; use --with-gas.
|
|
+ with_gas=yes ;;
|
|
+
|
|
+ -help | --help | --hel | --he | -h)
|
|
+ ac_init_help=long ;;
|
|
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
|
|
+ ac_init_help=recursive ;;
|
|
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
|
|
+ ac_init_help=short ;;
|
|
+
|
|
+ -host | --host | --hos | --ho)
|
|
+ ac_prev=host_alias ;;
|
|
+ -host=* | --host=* | --hos=* | --ho=*)
|
|
+ host_alias=$ac_optarg ;;
|
|
+
|
|
+ -includedir | --includedir | --includedi | --included | --include \
|
|
+ | --includ | --inclu | --incl | --inc)
|
|
+ ac_prev=includedir ;;
|
|
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
|
|
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
|
|
+ includedir=$ac_optarg ;;
|
|
+
|
|
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
|
|
+ ac_prev=infodir ;;
|
|
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
|
|
+ infodir=$ac_optarg ;;
|
|
+
|
|
+ -libdir | --libdir | --libdi | --libd)
|
|
+ ac_prev=libdir ;;
|
|
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
|
|
+ libdir=$ac_optarg ;;
|
|
+
|
|
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
|
|
+ | --libexe | --libex | --libe)
|
|
+ ac_prev=libexecdir ;;
|
|
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
|
|
+ | --libexe=* | --libex=* | --libe=*)
|
|
+ libexecdir=$ac_optarg ;;
|
|
+
|
|
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
|
|
+ | --localstate | --localstat | --localsta | --localst \
|
|
+ | --locals | --local | --loca | --loc | --lo)
|
|
+ ac_prev=localstatedir ;;
|
|
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
|
|
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
|
|
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
|
|
+ localstatedir=$ac_optarg ;;
|
|
+
|
|
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
|
|
+ ac_prev=mandir ;;
|
|
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
|
|
+ mandir=$ac_optarg ;;
|
|
+
|
|
+ -nfp | --nfp | --nf)
|
|
+ # Obsolete; use --without-fp.
|
|
+ with_fp=no ;;
|
|
+
|
|
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
|
|
+ | --no-cr | --no-c | -n)
|
|
+ no_create=yes ;;
|
|
+
|
|
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
|
|
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
|
|
+ no_recursion=yes ;;
|
|
+
|
|
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
|
|
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
|
|
+ | --oldin | --oldi | --old | --ol | --o)
|
|
+ ac_prev=oldincludedir ;;
|
|
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
|
|
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
|
|
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
|
|
+ oldincludedir=$ac_optarg ;;
|
|
+
|
|
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
|
|
+ ac_prev=prefix ;;
|
|
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
|
|
+ prefix=$ac_optarg ;;
|
|
+
|
|
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
|
|
+ | --program-pre | --program-pr | --program-p)
|
|
+ ac_prev=program_prefix ;;
|
|
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
|
|
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
|
|
+ program_prefix=$ac_optarg ;;
|
|
+
|
|
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
|
|
+ | --program-suf | --program-su | --program-s)
|
|
+ ac_prev=program_suffix ;;
|
|
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
|
|
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
|
|
+ program_suffix=$ac_optarg ;;
|
|
+
|
|
+ -program-transform-name | --program-transform-name \
|
|
+ | --program-transform-nam | --program-transform-na \
|
|
+ | --program-transform-n | --program-transform- \
|
|
+ | --program-transform | --program-transfor \
|
|
+ | --program-transfo | --program-transf \
|
|
+ | --program-trans | --program-tran \
|
|
+ | --progr-tra | --program-tr | --program-t)
|
|
+ ac_prev=program_transform_name ;;
|
|
+ -program-transform-name=* | --program-transform-name=* \
|
|
+ | --program-transform-nam=* | --program-transform-na=* \
|
|
+ | --program-transform-n=* | --program-transform-=* \
|
|
+ | --program-transform=* | --program-transfor=* \
|
|
+ | --program-transfo=* | --program-transf=* \
|
|
+ | --program-trans=* | --program-tran=* \
|
|
+ | --progr-tra=* | --program-tr=* | --program-t=*)
|
|
+ program_transform_name=$ac_optarg ;;
|
|
+
|
|
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
|
|
+ | -silent | --silent | --silen | --sile | --sil)
|
|
+ silent=yes ;;
|
|
+
|
|
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
|
|
+ ac_prev=sbindir ;;
|
|
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
|
|
+ | --sbi=* | --sb=*)
|
|
+ sbindir=$ac_optarg ;;
|
|
+
|
|
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
|
|
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
|
|
+ | --sharedst | --shareds | --shared | --share | --shar \
|
|
+ | --sha | --sh)
|
|
+ ac_prev=sharedstatedir ;;
|
|
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
|
|
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
|
|
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
|
|
+ | --sha=* | --sh=*)
|
|
+ sharedstatedir=$ac_optarg ;;
|
|
+
|
|
+ -site | --site | --sit)
|
|
+ ac_prev=site ;;
|
|
+ -site=* | --site=* | --sit=*)
|
|
+ site=$ac_optarg ;;
|
|
+
|
|
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
|
|
+ ac_prev=srcdir ;;
|
|
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
|
|
+ srcdir=$ac_optarg ;;
|
|
+
|
|
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
|
|
+ | --syscon | --sysco | --sysc | --sys | --sy)
|
|
+ ac_prev=sysconfdir ;;
|
|
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
|
|
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
|
|
+ sysconfdir=$ac_optarg ;;
|
|
+
|
|
+ -target | --target | --targe | --targ | --tar | --ta | --t)
|
|
+ ac_prev=target_alias ;;
|
|
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
|
|
+ target_alias=$ac_optarg ;;
|
|
+
|
|
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
|
|
+ verbose=yes ;;
|
|
+
|
|
+ -version | --version | --versio | --versi | --vers | -V)
|
|
+ ac_init_version=: ;;
|
|
+
|
|
+ -with-* | --with-*)
|
|
+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
|
|
+ # Reject names that are not valid shell variable names.
|
|
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
|
|
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
|
|
+ { (exit 1); exit 1; }; }
|
|
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
|
|
+ case $ac_option in
|
|
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
|
|
+ *) ac_optarg=yes ;;
|
|
+ esac
|
|
+ eval "with_$ac_package='$ac_optarg'" ;;
|
|
+
|
|
+ -without-* | --without-*)
|
|
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
|
|
+ # Reject names that are not valid shell variable names.
|
|
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
|
|
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
|
|
+ { (exit 1); exit 1; }; }
|
|
+ ac_package=`echo $ac_package | sed 's/-/_/g'`
|
|
+ eval "with_$ac_package=no" ;;
|
|
+
|
|
+ --x)
|
|
+ # Obsolete; use --with-x.
|
|
+ with_x=yes ;;
|
|
+
|
|
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
|
|
+ | --x-incl | --x-inc | --x-in | --x-i)
|
|
+ ac_prev=x_includes ;;
|
|
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
|
|
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
|
|
+ x_includes=$ac_optarg ;;
|
|
+
|
|
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
|
|
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
|
|
+ ac_prev=x_libraries ;;
|
|
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
|
|
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
|
|
+ x_libraries=$ac_optarg ;;
|
|
+
|
|
+ -*) { echo "$as_me: error: unrecognized option: $ac_option
|
|
+Try \`$0 --help' for more information." >&2
|
|
+ { (exit 1); exit 1; }; }
|
|
+ ;;
|
|
+
|
|
+ *=*)
|
|
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
|
|
+ # Reject names that are not valid shell variable names.
|
|
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
|
|
+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
|
|
+ { (exit 1); exit 1; }; }
|
|
+ ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
|
|
+ eval "$ac_envvar='$ac_optarg'"
|
|
+ export $ac_envvar ;;
|
|
+
|
|
+ *)
|
|
+ # FIXME: should be removed in autoconf 3.0.
|
|
+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
|
|
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
|
|
+ echo "$as_me: WARNING: invalid host type: $ac_option" >&2
|
|
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
|
|
+ ;;
|
|
+
|
|
+ esac
|
|
+done
|
|
+
|
|
+if test -n "$ac_prev"; then
|
|
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
|
|
+ { echo "$as_me: error: missing argument to $ac_option" >&2
|
|
+ { (exit 1); exit 1; }; }
|
|
+fi
|
|
+
|
|
+# Be sure to have absolute paths.
|
|
+for ac_var in exec_prefix prefix
|
|
+do
|
|
+ eval ac_val=$`echo $ac_var`
|
|
+ case $ac_val in
|
|
+ [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
|
|
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
|
|
+ { (exit 1); exit 1; }; };;
|
|
+ esac
|
|
+done
|
|
+
|
|
+# Be sure to have absolute paths.
|
|
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
|
|
+ localstatedir libdir includedir oldincludedir infodir mandir
|
|
+do
|
|
+ eval ac_val=$`echo $ac_var`
|
|
+ case $ac_val in
|
|
+ [\\/$]* | ?:[\\/]* ) ;;
|
|
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
|
|
+ { (exit 1); exit 1; }; };;
|
|
+ esac
|
|
+done
|
|
+
|
|
+# There might be people who depend on the old broken behavior: `$host'
|
|
+# used to hold the argument of --host etc.
|
|
+# FIXME: To remove some day.
|
|
+build=$build_alias
|
|
+host=$host_alias
|
|
+target=$target_alias
|
|
+
|
|
+# FIXME: To remove some day.
|
|
+if test "x$host_alias" != x; then
|
|
+ if test "x$build_alias" = x; then
|
|
+ cross_compiling=maybe
|
|
+ echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
|
|
+ If a cross compiler is detected then cross compile mode will be used." >&2
|
|
+ elif test "x$build_alias" != "x$host_alias"; then
|
|
+ cross_compiling=yes
|
|
+ fi
|
|
+fi
|
|
+
|
|
+ac_tool_prefix=
|
|
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
|
|
+
|
|
+test "$silent" = yes && exec 6>/dev/null
|
|
+
|
|
+
|
|
+# Find the source files, if location was not specified.
|
|
+if test -z "$srcdir"; then
|
|
+ ac_srcdir_defaulted=yes
|
|
+ # Try the directory containing this script, then its parent.
|
|
+ ac_confdir=`(dirname "$0") 2>/dev/null ||
|
|
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
|
+ X"$0" : 'X\(//\)[^/]' \| \
|
|
+ X"$0" : 'X\(//\)$' \| \
|
|
+ X"$0" : 'X\(/\)' \| \
|
|
+ . : '\(.\)' 2>/dev/null ||
|
|
+echo X"$0" |
|
|
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)$/{ s//\1/; q; }
|
|
+ /^X\(\/\).*/{ s//\1/; q; }
|
|
+ s/.*/./; q'`
|
|
+ srcdir=$ac_confdir
|
|
+ if test ! -r $srcdir/$ac_unique_file; then
|
|
+ srcdir=..
|
|
+ fi
|
|
+else
|
|
+ ac_srcdir_defaulted=no
|
|
+fi
|
|
+if test ! -r $srcdir/$ac_unique_file; then
|
|
+ if test "$ac_srcdir_defaulted" = yes; then
|
|
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
|
|
+ { (exit 1); exit 1; }; }
|
|
+ else
|
|
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
|
|
+ { (exit 1); exit 1; }; }
|
|
+ fi
|
|
+fi
|
|
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
|
|
+ { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
|
|
+ { (exit 1); exit 1; }; }
|
|
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
|
|
+ac_env_build_alias_set=${build_alias+set}
|
|
+ac_env_build_alias_value=$build_alias
|
|
+ac_cv_env_build_alias_set=${build_alias+set}
|
|
+ac_cv_env_build_alias_value=$build_alias
|
|
+ac_env_host_alias_set=${host_alias+set}
|
|
+ac_env_host_alias_value=$host_alias
|
|
+ac_cv_env_host_alias_set=${host_alias+set}
|
|
+ac_cv_env_host_alias_value=$host_alias
|
|
+ac_env_target_alias_set=${target_alias+set}
|
|
+ac_env_target_alias_value=$target_alias
|
|
+ac_cv_env_target_alias_set=${target_alias+set}
|
|
+ac_cv_env_target_alias_value=$target_alias
|
|
+ac_env_CC_set=${CC+set}
|
|
+ac_env_CC_value=$CC
|
|
+ac_cv_env_CC_set=${CC+set}
|
|
+ac_cv_env_CC_value=$CC
|
|
+ac_env_CFLAGS_set=${CFLAGS+set}
|
|
+ac_env_CFLAGS_value=$CFLAGS
|
|
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
|
|
+ac_cv_env_CFLAGS_value=$CFLAGS
|
|
+ac_env_LDFLAGS_set=${LDFLAGS+set}
|
|
+ac_env_LDFLAGS_value=$LDFLAGS
|
|
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
|
|
+ac_cv_env_LDFLAGS_value=$LDFLAGS
|
|
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
|
|
+ac_env_CPPFLAGS_value=$CPPFLAGS
|
|
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
|
|
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
|
|
+ac_env_CPP_set=${CPP+set}
|
|
+ac_env_CPP_value=$CPP
|
|
+ac_cv_env_CPP_set=${CPP+set}
|
|
+ac_cv_env_CPP_value=$CPP
|
|
+ac_env_CXX_set=${CXX+set}
|
|
+ac_env_CXX_value=$CXX
|
|
+ac_cv_env_CXX_set=${CXX+set}
|
|
+ac_cv_env_CXX_value=$CXX
|
|
+ac_env_CXXFLAGS_set=${CXXFLAGS+set}
|
|
+ac_env_CXXFLAGS_value=$CXXFLAGS
|
|
+ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
|
|
+ac_cv_env_CXXFLAGS_value=$CXXFLAGS
|
|
+ac_env_CXXCPP_set=${CXXCPP+set}
|
|
+ac_env_CXXCPP_value=$CXXCPP
|
|
+ac_cv_env_CXXCPP_set=${CXXCPP+set}
|
|
+ac_cv_env_CXXCPP_value=$CXXCPP
|
|
+ac_env_F77_set=${F77+set}
|
|
+ac_env_F77_value=$F77
|
|
+ac_cv_env_F77_set=${F77+set}
|
|
+ac_cv_env_F77_value=$F77
|
|
+ac_env_FFLAGS_set=${FFLAGS+set}
|
|
+ac_env_FFLAGS_value=$FFLAGS
|
|
+ac_cv_env_FFLAGS_set=${FFLAGS+set}
|
|
+ac_cv_env_FFLAGS_value=$FFLAGS
|
|
+
|
|
+#
|
|
+# Report the --help message.
|
|
+#
|
|
+if test "$ac_init_help" = "long"; then
|
|
+ # Omit some internal or obsolete options to make the list less imposing.
|
|
+ # This message is too long to be a string in the A/UX 3.1 sh.
|
|
+ cat <<_ACEOF
|
|
+\`configure' configures iscsiuio 0.7.2.1 to adapt to many kinds of systems.
|
|
+
|
|
+Usage: $0 [OPTION]... [VAR=VALUE]...
|
|
+
|
|
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
|
|
+VAR=VALUE. See below for descriptions of some of the useful variables.
|
|
+
|
|
+Defaults for the options are specified in brackets.
|
|
+
|
|
+Configuration:
|
|
+ -h, --help display this help and exit
|
|
+ --help=short display options specific to this package
|
|
+ --help=recursive display the short help of all the included packages
|
|
+ -V, --version display version information and exit
|
|
+ -q, --quiet, --silent do not print \`checking...' messages
|
|
+ --cache-file=FILE cache test results in FILE [disabled]
|
|
+ -C, --config-cache alias for \`--cache-file=config.cache'
|
|
+ -n, --no-create do not create output files
|
|
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
|
|
+
|
|
+_ACEOF
|
|
+
|
|
+ cat <<_ACEOF
|
|
+Installation directories:
|
|
+ --prefix=PREFIX install architecture-independent files in PREFIX
|
|
+ [$ac_default_prefix]
|
|
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
|
|
+ [PREFIX]
|
|
+
|
|
+By default, \`make install' will install all the files in
|
|
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
|
|
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
|
|
+for instance \`--prefix=\$HOME'.
|
|
+
|
|
+For better control, use the options below.
|
|
+
|
|
+Fine tuning of the installation directories:
|
|
+ --bindir=DIR user executables [EPREFIX/bin]
|
|
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
|
|
+ --libexecdir=DIR program executables [EPREFIX/libexec]
|
|
+ --datadir=DIR read-only architecture-independent data [PREFIX/share]
|
|
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
|
|
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
|
|
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
|
|
+ --libdir=DIR object code libraries [EPREFIX/lib]
|
|
+ --includedir=DIR C header files [PREFIX/include]
|
|
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
|
|
+ --infodir=DIR info documentation [PREFIX/info]
|
|
+ --mandir=DIR man documentation [PREFIX/man]
|
|
+_ACEOF
|
|
+
|
|
+ cat <<\_ACEOF
|
|
+
|
|
+Program names:
|
|
+ --program-prefix=PREFIX prepend PREFIX to installed program names
|
|
+ --program-suffix=SUFFIX append SUFFIX to installed program names
|
|
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
|
|
+
|
|
+System types:
|
|
+ --build=BUILD configure for building on BUILD [guessed]
|
|
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
|
|
+_ACEOF
|
|
+fi
|
|
+
|
|
+if test -n "$ac_init_help"; then
|
|
+ case $ac_init_help in
|
|
+ short | recursive ) echo "Configuration of iscsiuio 0.7.2.1:";;
|
|
+ esac
|
|
+ cat <<\_ACEOF
|
|
+
|
|
+Optional Features:
|
|
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
|
|
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
|
|
+ --disable-dependency-tracking speeds up one-time build
|
|
+ --enable-dependency-tracking do not reject slow dependency extractors
|
|
+ --enable-shared[=PKGS]
|
|
+ build shared libraries [default=yes]
|
|
+ --enable-static[=PKGS]
|
|
+ build static libraries [default=yes]
|
|
+ --enable-fast-install[=PKGS]
|
|
+ optimize for fast installation [default=yes]
|
|
+ --disable-libtool-lock avoid locking (might break parallel builds)
|
|
+ --enable-debug Turn on compiler debugging information (default=no)
|
|
+
|
|
+Optional Packages:
|
|
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
|
|
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
|
|
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
|
|
+ --with-pic try to use only PIC/non-PIC objects [default=use
|
|
+ both]
|
|
+ --with-tags[=TAGS]
|
|
+ include additional configurations [automatic]
|
|
+ --with-iscsid-version Compile against a certain version of iscsid (default="$ISCSID_VERSION_DEFAULT")
|
|
+
|
|
+Some influential environment variables:
|
|
+ CC C compiler command
|
|
+ CFLAGS C compiler flags
|
|
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
|
|
+ nonstandard directory <lib dir>
|
|
+ CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
|
|
+ headers in a nonstandard directory <include dir>
|
|
+ CPP C preprocessor
|
|
+ CXX C++ compiler command
|
|
+ CXXFLAGS C++ compiler flags
|
|
+ CXXCPP C++ preprocessor
|
|
+ F77 Fortran 77 compiler command
|
|
+ FFLAGS Fortran 77 compiler flags
|
|
+
|
|
+Use these variables to override the choices made by `configure' or to help
|
|
+it to find libraries and programs with nonstandard names/locations.
|
|
+
|
|
+Report bugs to <eddie.wai@broadcom.com>.
|
|
+_ACEOF
|
|
+fi
|
|
+
|
|
+if test "$ac_init_help" = "recursive"; then
|
|
+ # If there are subdirs, report their specific --help.
|
|
+ ac_popdir=`pwd`
|
|
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
|
|
+ test -d $ac_dir || continue
|
|
+ ac_builddir=.
|
|
+
|
|
+if test "$ac_dir" != .; then
|
|
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
|
|
+ # A "../" for each directory in $ac_dir_suffix.
|
|
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
|
|
+else
|
|
+ ac_dir_suffix= ac_top_builddir=
|
|
+fi
|
|
+
|
|
+case $srcdir in
|
|
+ .) # No --srcdir option. We are building in place.
|
|
+ ac_srcdir=.
|
|
+ if test -z "$ac_top_builddir"; then
|
|
+ ac_top_srcdir=.
|
|
+ else
|
|
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
|
|
+ fi ;;
|
|
+ [\\/]* | ?:[\\/]* ) # Absolute path.
|
|
+ ac_srcdir=$srcdir$ac_dir_suffix;
|
|
+ ac_top_srcdir=$srcdir ;;
|
|
+ *) # Relative path.
|
|
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
|
|
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
|
|
+esac
|
|
+
|
|
+# Do not use `cd foo && pwd` to compute absolute paths, because
|
|
+# the directories may not exist.
|
|
+case `pwd` in
|
|
+.) ac_abs_builddir="$ac_dir";;
|
|
+*)
|
|
+ case "$ac_dir" in
|
|
+ .) ac_abs_builddir=`pwd`;;
|
|
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
|
|
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
|
|
+ esac;;
|
|
+esac
|
|
+case $ac_abs_builddir in
|
|
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
|
|
+*)
|
|
+ case ${ac_top_builddir}. in
|
|
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
|
|
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
|
|
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
|
|
+ esac;;
|
|
+esac
|
|
+case $ac_abs_builddir in
|
|
+.) ac_abs_srcdir=$ac_srcdir;;
|
|
+*)
|
|
+ case $ac_srcdir in
|
|
+ .) ac_abs_srcdir=$ac_abs_builddir;;
|
|
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
|
|
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
|
|
+ esac;;
|
|
+esac
|
|
+case $ac_abs_builddir in
|
|
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
|
|
+*)
|
|
+ case $ac_top_srcdir in
|
|
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
|
|
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
|
|
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
|
|
+ esac;;
|
|
+esac
|
|
+
|
|
+ cd $ac_dir
|
|
+ # Check for guested configure; otherwise get Cygnus style configure.
|
|
+ if test -f $ac_srcdir/configure.gnu; then
|
|
+ echo
|
|
+ $SHELL $ac_srcdir/configure.gnu --help=recursive
|
|
+ elif test -f $ac_srcdir/configure; then
|
|
+ echo
|
|
+ $SHELL $ac_srcdir/configure --help=recursive
|
|
+ elif test -f $ac_srcdir/configure.ac ||
|
|
+ test -f $ac_srcdir/configure.in; then
|
|
+ echo
|
|
+ $ac_configure --help
|
|
+ else
|
|
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
|
|
+ fi
|
|
+ cd $ac_popdir
|
|
+ done
|
|
+fi
|
|
+
|
|
+test -n "$ac_init_help" && exit 0
|
|
+if $ac_init_version; then
|
|
+ cat <<\_ACEOF
|
|
+iscsiuio configure 0.7.2.1
|
|
+generated by GNU Autoconf 2.59
|
|
+
|
|
+Copyright (C) 2003 Free Software Foundation, Inc.
|
|
+This configure script is free software; the Free Software Foundation
|
|
+gives unlimited permission to copy, distribute and modify it.
|
|
+_ACEOF
|
|
+ exit 0
|
|
+fi
|
|
+exec 5>config.log
|
|
+cat >&5 <<_ACEOF
|
|
+This file contains any messages produced by compilers while
|
|
+running configure, to aid debugging if configure makes a mistake.
|
|
+
|
|
+It was created by iscsiuio $as_me 0.7.2.1, which was
|
|
+generated by GNU Autoconf 2.59. Invocation command line was
|
|
+
|
|
+ $ $0 $@
|
|
+
|
|
+_ACEOF
|
|
+{
|
|
+cat <<_ASUNAME
|
|
+## --------- ##
|
|
+## Platform. ##
|
|
+## --------- ##
|
|
+
|
|
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
|
|
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
|
|
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
|
|
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
|
|
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
|
|
+
|
|
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
|
|
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
|
|
+
|
|
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
|
|
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
|
|
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
|
|
+hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
|
|
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
|
|
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
|
|
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
|
|
+
|
|
+_ASUNAME
|
|
+
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ echo "PATH: $as_dir"
|
|
+done
|
|
+
|
|
+} >&5
|
|
+
|
|
+cat >&5 <<_ACEOF
|
|
+
|
|
+
|
|
+## ----------- ##
|
|
+## Core tests. ##
|
|
+## ----------- ##
|
|
+
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+# Keep a trace of the command line.
|
|
+# Strip out --no-create and --no-recursion so they do not pile up.
|
|
+# Strip out --silent because we don't want to record it for future runs.
|
|
+# Also quote any args containing shell meta-characters.
|
|
+# Make two passes to allow for proper duplicate-argument suppression.
|
|
+ac_configure_args=
|
|
+ac_configure_args0=
|
|
+ac_configure_args1=
|
|
+ac_sep=
|
|
+ac_must_keep_next=false
|
|
+for ac_pass in 1 2
|
|
+do
|
|
+ for ac_arg
|
|
+ do
|
|
+ case $ac_arg in
|
|
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
|
|
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
|
|
+ | -silent | --silent | --silen | --sile | --sil)
|
|
+ continue ;;
|
|
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
|
|
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
|
|
+ esac
|
|
+ case $ac_pass in
|
|
+ 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
|
|
+ 2)
|
|
+ ac_configure_args1="$ac_configure_args1 '$ac_arg'"
|
|
+ if test $ac_must_keep_next = true; then
|
|
+ ac_must_keep_next=false # Got value, back to normal.
|
|
+ else
|
|
+ case $ac_arg in
|
|
+ *=* | --config-cache | -C | -disable-* | --disable-* \
|
|
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
|
|
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
|
|
+ | -with-* | --with-* | -without-* | --without-* | --x)
|
|
+ case "$ac_configure_args0 " in
|
|
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
|
|
+ esac
|
|
+ ;;
|
|
+ -* ) ac_must_keep_next=true ;;
|
|
+ esac
|
|
+ fi
|
|
+ ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
|
|
+ # Get rid of the leading space.
|
|
+ ac_sep=" "
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+done
|
|
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
|
|
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
|
|
+
|
|
+# When interrupted or exit'd, cleanup temporary files, and complete
|
|
+# config.log. We remove comments because anyway the quotes in there
|
|
+# would cause problems or look ugly.
|
|
+# WARNING: Be sure not to use single quotes in there, as some shells,
|
|
+# such as our DU 5.0 friend, will then `close' the trap.
|
|
+trap 'exit_status=$?
|
|
+ # Save into config.log some information that might help in debugging.
|
|
+ {
|
|
+ echo
|
|
+
|
|
+ cat <<\_ASBOX
|
|
+## ---------------- ##
|
|
+## Cache variables. ##
|
|
+## ---------------- ##
|
|
+_ASBOX
|
|
+ echo
|
|
+ # The following way of writing the cache mishandles newlines in values,
|
|
+{
|
|
+ (set) 2>&1 |
|
|
+ case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
|
|
+ *ac_space=\ *)
|
|
+ sed -n \
|
|
+ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
|
|
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
|
|
+ ;;
|
|
+ *)
|
|
+ sed -n \
|
|
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
|
|
+ ;;
|
|
+ esac;
|
|
+}
|
|
+ echo
|
|
+
|
|
+ cat <<\_ASBOX
|
|
+## ----------------- ##
|
|
+## Output variables. ##
|
|
+## ----------------- ##
|
|
+_ASBOX
|
|
+ echo
|
|
+ for ac_var in $ac_subst_vars
|
|
+ do
|
|
+ eval ac_val=$`echo $ac_var`
|
|
+ echo "$ac_var='"'"'$ac_val'"'"'"
|
|
+ done | sort
|
|
+ echo
|
|
+
|
|
+ if test -n "$ac_subst_files"; then
|
|
+ cat <<\_ASBOX
|
|
+## ------------- ##
|
|
+## Output files. ##
|
|
+## ------------- ##
|
|
+_ASBOX
|
|
+ echo
|
|
+ for ac_var in $ac_subst_files
|
|
+ do
|
|
+ eval ac_val=$`echo $ac_var`
|
|
+ echo "$ac_var='"'"'$ac_val'"'"'"
|
|
+ done | sort
|
|
+ echo
|
|
+ fi
|
|
+
|
|
+ if test -s confdefs.h; then
|
|
+ cat <<\_ASBOX
|
|
+## ----------- ##
|
|
+## confdefs.h. ##
|
|
+## ----------- ##
|
|
+_ASBOX
|
|
+ echo
|
|
+ sed "/^$/d" confdefs.h | sort
|
|
+ echo
|
|
+ fi
|
|
+ test "$ac_signal" != 0 &&
|
|
+ echo "$as_me: caught signal $ac_signal"
|
|
+ echo "$as_me: exit $exit_status"
|
|
+ } >&5
|
|
+ rm -f core *.core &&
|
|
+ rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
|
|
+ exit $exit_status
|
|
+ ' 0
|
|
+for ac_signal in 1 2 13 15; do
|
|
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
|
|
+done
|
|
+ac_signal=0
|
|
+
|
|
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
|
|
+rm -rf conftest* confdefs.h
|
|
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
|
|
+echo >confdefs.h
|
|
+
|
|
+# Predefined preprocessor variables.
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define PACKAGE_NAME "$PACKAGE_NAME"
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define PACKAGE_STRING "$PACKAGE_STRING"
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+# Let the site file select an alternate cache file if it wants to.
|
|
+# Prefer explicitly selected file to automatically selected ones.
|
|
+if test -z "$CONFIG_SITE"; then
|
|
+ if test "x$prefix" != xNONE; then
|
|
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
|
|
+ else
|
|
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
|
|
+ fi
|
|
+fi
|
|
+for ac_site_file in $CONFIG_SITE; do
|
|
+ if test -r "$ac_site_file"; then
|
|
+ { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
|
|
+echo "$as_me: loading site script $ac_site_file" >&6;}
|
|
+ sed 's/^/| /' "$ac_site_file" >&5
|
|
+ . "$ac_site_file"
|
|
+ fi
|
|
+done
|
|
+
|
|
+if test -r "$cache_file"; then
|
|
+ # Some versions of bash will fail to source /dev/null (special
|
|
+ # files actually), so we avoid doing that.
|
|
+ if test -f "$cache_file"; then
|
|
+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
|
|
+echo "$as_me: loading cache $cache_file" >&6;}
|
|
+ case $cache_file in
|
|
+ [\\/]* | ?:[\\/]* ) . $cache_file;;
|
|
+ *) . ./$cache_file;;
|
|
+ esac
|
|
+ fi
|
|
+else
|
|
+ { echo "$as_me:$LINENO: creating cache $cache_file" >&5
|
|
+echo "$as_me: creating cache $cache_file" >&6;}
|
|
+ >$cache_file
|
|
+fi
|
|
+
|
|
+# Check that the precious variables saved in the cache have kept the same
|
|
+# value.
|
|
+ac_cache_corrupted=false
|
|
+for ac_var in `(set) 2>&1 |
|
|
+ sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
|
|
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
|
|
+ eval ac_new_set=\$ac_env_${ac_var}_set
|
|
+ eval ac_old_val="\$ac_cv_env_${ac_var}_value"
|
|
+ eval ac_new_val="\$ac_env_${ac_var}_value"
|
|
+ case $ac_old_set,$ac_new_set in
|
|
+ set,)
|
|
+ { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
|
|
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
|
|
+ ac_cache_corrupted=: ;;
|
|
+ ,set)
|
|
+ { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
|
|
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
|
|
+ ac_cache_corrupted=: ;;
|
|
+ ,);;
|
|
+ *)
|
|
+ if test "x$ac_old_val" != "x$ac_new_val"; then
|
|
+ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
|
|
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
|
|
+ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
|
|
+echo "$as_me: former value: $ac_old_val" >&2;}
|
|
+ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
|
|
+echo "$as_me: current value: $ac_new_val" >&2;}
|
|
+ ac_cache_corrupted=:
|
|
+ fi;;
|
|
+ esac
|
|
+ # Pass precious variables to config.status.
|
|
+ if test "$ac_new_set" = set; then
|
|
+ case $ac_new_val in
|
|
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
|
|
+ ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
|
|
+ *) ac_arg=$ac_var=$ac_new_val ;;
|
|
+ esac
|
|
+ case " $ac_configure_args " in
|
|
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
|
|
+ *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
|
|
+ esac
|
|
+ fi
|
|
+done
|
|
+if $ac_cache_corrupted; then
|
|
+ { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
|
|
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
|
|
+ { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
|
|
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+fi
|
|
+
|
|
+ac_ext=c
|
|
+ac_cpp='$CPP $CPPFLAGS'
|
|
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+am__api_version="1.9"
|
|
+ac_aux_dir=
|
|
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
|
|
+ if test -f $ac_dir/install-sh; then
|
|
+ ac_aux_dir=$ac_dir
|
|
+ ac_install_sh="$ac_aux_dir/install-sh -c"
|
|
+ break
|
|
+ elif test -f $ac_dir/install.sh; then
|
|
+ ac_aux_dir=$ac_dir
|
|
+ ac_install_sh="$ac_aux_dir/install.sh -c"
|
|
+ break
|
|
+ elif test -f $ac_dir/shtool; then
|
|
+ ac_aux_dir=$ac_dir
|
|
+ ac_install_sh="$ac_aux_dir/shtool install -c"
|
|
+ break
|
|
+ fi
|
|
+done
|
|
+if test -z "$ac_aux_dir"; then
|
|
+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
|
|
+echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+fi
|
|
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
|
|
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
|
|
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
|
|
+
|
|
+# Find a good install program. We prefer a C program (faster),
|
|
+# so one script is as good as another. But avoid the broken or
|
|
+# incompatible versions:
|
|
+# SysV /etc/install, /usr/sbin/install
|
|
+# SunOS /usr/etc/install
|
|
+# IRIX /sbin/install
|
|
+# AIX /bin/install
|
|
+# AmigaOS /C/install, which installs bootblocks on floppy discs
|
|
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
|
|
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
|
|
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
|
|
+# OS/2's system install, which has a completely different semantic
|
|
+# ./install, which can be erroneously created by make from ./install.sh.
|
|
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
|
|
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
|
|
+if test -z "$INSTALL"; then
|
|
+if test "${ac_cv_path_install+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ # Account for people who put trailing slashes in PATH elements.
|
|
+case $as_dir/ in
|
|
+ ./ | .// | /cC/* | \
|
|
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
|
|
+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
|
|
+ /usr/ucb/* ) ;;
|
|
+ *)
|
|
+ # OSF1 and SCO ODT 3.0 have their own names for install.
|
|
+ # Don't use installbsd from OSF since it installs stuff as root
|
|
+ # by default.
|
|
+ for ac_prog in ginstall scoinst install; do
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
|
|
+ if test $ac_prog = install &&
|
|
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
|
|
+ # AIX install. It has an incompatible calling convention.
|
|
+ :
|
|
+ elif test $ac_prog = install &&
|
|
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
|
|
+ # program-specific install script used by HP pwplus--don't use.
|
|
+ :
|
|
+ else
|
|
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
|
|
+ break 3
|
|
+ fi
|
|
+ fi
|
|
+ done
|
|
+ done
|
|
+ ;;
|
|
+esac
|
|
+done
|
|
+
|
|
+
|
|
+fi
|
|
+ if test "${ac_cv_path_install+set}" = set; then
|
|
+ INSTALL=$ac_cv_path_install
|
|
+ else
|
|
+ # As a last resort, use the slow shell script. We don't cache a
|
|
+ # path for INSTALL within a source directory, because that will
|
|
+ # break other packages using the cache if that directory is
|
|
+ # removed, or if the path is relative.
|
|
+ INSTALL=$ac_install_sh
|
|
+ fi
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $INSTALL" >&5
|
|
+echo "${ECHO_T}$INSTALL" >&6
|
|
+
|
|
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
|
|
+# It thinks the first close brace ends the variable substitution.
|
|
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
|
|
+
|
|
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
|
|
+
|
|
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
|
|
+
|
|
+echo "$as_me:$LINENO: checking whether build environment is sane" >&5
|
|
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
|
|
+# Just in case
|
|
+sleep 1
|
|
+echo timestamp > conftest.file
|
|
+# Do `set' in a subshell so we don't clobber the current shell's
|
|
+# arguments. Must try -L first in case configure is actually a
|
|
+# symlink; some systems play weird games with the mod time of symlinks
|
|
+# (eg FreeBSD returns the mod time of the symlink's containing
|
|
+# directory).
|
|
+if (
|
|
+ set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
|
|
+ if test "$*" = "X"; then
|
|
+ # -L didn't work.
|
|
+ set X `ls -t $srcdir/configure conftest.file`
|
|
+ fi
|
|
+ rm -f conftest.file
|
|
+ if test "$*" != "X $srcdir/configure conftest.file" \
|
|
+ && test "$*" != "X conftest.file $srcdir/configure"; then
|
|
+
|
|
+ # If neither matched, then we have a broken ls. This can happen
|
|
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
|
|
+ # broken ls alias from the environment. This has actually
|
|
+ # happened. Such a system could not be considered "sane".
|
|
+ { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken
|
|
+alias in your environment" >&5
|
|
+echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken
|
|
+alias in your environment" >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+ fi
|
|
+
|
|
+ test "$2" = conftest.file
|
|
+ )
|
|
+then
|
|
+ # Ok.
|
|
+ :
|
|
+else
|
|
+ { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
|
|
+Check your system clock" >&5
|
|
+echo "$as_me: error: newly created file is older than distributed files!
|
|
+Check your system clock" >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: yes" >&5
|
|
+echo "${ECHO_T}yes" >&6
|
|
+test "$program_prefix" != NONE &&
|
|
+ program_transform_name="s,^,$program_prefix,;$program_transform_name"
|
|
+# Use a double $ so make ignores it.
|
|
+test "$program_suffix" != NONE &&
|
|
+ program_transform_name="s,\$,$program_suffix,;$program_transform_name"
|
|
+# Double any \ or $. echo might interpret backslashes.
|
|
+# By default was `s,x,x', remove it if useless.
|
|
+cat <<\_ACEOF >conftest.sed
|
|
+s/[\\$]/&&/g;s/;s,x,x,$//
|
|
+_ACEOF
|
|
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
|
|
+rm conftest.sed
|
|
+
|
|
+# expand $ac_aux_dir to an absolute path
|
|
+am_aux_dir=`cd $ac_aux_dir && pwd`
|
|
+
|
|
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
|
|
+# Use eval to expand $SHELL
|
|
+if eval "$MISSING --run true"; then
|
|
+ am_missing_run="$MISSING --run "
|
|
+else
|
|
+ am_missing_run=
|
|
+ { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
|
|
+echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
|
|
+fi
|
|
+
|
|
+if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
|
|
+ # We used to keeping the `.' as first argument, in order to
|
|
+ # allow $(mkdir_p) to be used without argument. As in
|
|
+ # $(mkdir_p) $(somedir)
|
|
+ # where $(somedir) is conditionally defined. However this is wrong
|
|
+ # for two reasons:
|
|
+ # 1. if the package is installed by a user who cannot write `.'
|
|
+ # make install will fail,
|
|
+ # 2. the above comment should most certainly read
|
|
+ # $(mkdir_p) $(DESTDIR)$(somedir)
|
|
+ # so it does not work when $(somedir) is undefined and
|
|
+ # $(DESTDIR) is not.
|
|
+ # To support the latter case, we have to write
|
|
+ # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
|
|
+ # so the `.' trick is pointless.
|
|
+ mkdir_p='mkdir -p --'
|
|
+else
|
|
+ # On NextStep and OpenStep, the `mkdir' command does not
|
|
+ # recognize any option. It will interpret all options as
|
|
+ # directories to create, and then abort because `.' already
|
|
+ # exists.
|
|
+ for d in ./-p ./--version;
|
|
+ do
|
|
+ test -d $d && rmdir $d
|
|
+ done
|
|
+ # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
|
|
+ if test -f "$ac_aux_dir/mkinstalldirs"; then
|
|
+ mkdir_p='$(mkinstalldirs)'
|
|
+ else
|
|
+ mkdir_p='$(install_sh) -d'
|
|
+ fi
|
|
+fi
|
|
+
|
|
+for ac_prog in gawk mawk nawk awk
|
|
+do
|
|
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
|
|
+set dummy $ac_prog; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_AWK+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$AWK"; then
|
|
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_AWK="$ac_prog"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+fi
|
|
+fi
|
|
+AWK=$ac_cv_prog_AWK
|
|
+if test -n "$AWK"; then
|
|
+ echo "$as_me:$LINENO: result: $AWK" >&5
|
|
+echo "${ECHO_T}$AWK" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+ test -n "$AWK" && break
|
|
+done
|
|
+
|
|
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
|
|
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
|
|
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
|
|
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.make <<\_ACEOF
|
|
+all:
|
|
+ @echo 'ac_maketemp="$(MAKE)"'
|
|
+_ACEOF
|
|
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
|
|
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
|
|
+if test -n "$ac_maketemp"; then
|
|
+ eval ac_cv_prog_make_${ac_make}_set=yes
|
|
+else
|
|
+ eval ac_cv_prog_make_${ac_make}_set=no
|
|
+fi
|
|
+rm -f conftest.make
|
|
+fi
|
|
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
|
|
+ echo "$as_me:$LINENO: result: yes" >&5
|
|
+echo "${ECHO_T}yes" >&6
|
|
+ SET_MAKE=
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+ SET_MAKE="MAKE=${MAKE-make}"
|
|
+fi
|
|
+
|
|
+rm -rf .tst 2>/dev/null
|
|
+mkdir .tst 2>/dev/null
|
|
+if test -d .tst; then
|
|
+ am__leading_dot=.
|
|
+else
|
|
+ am__leading_dot=_
|
|
+fi
|
|
+rmdir .tst 2>/dev/null
|
|
+
|
|
+# test to see if srcdir already configured
|
|
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
|
|
+ test -f $srcdir/config.status; then
|
|
+ { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
|
|
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+fi
|
|
+
|
|
+# test whether we have cygpath
|
|
+if test -z "$CYGPATH_W"; then
|
|
+ if (cygpath --version) >/dev/null 2>/dev/null; then
|
|
+ CYGPATH_W='cygpath -w'
|
|
+ else
|
|
+ CYGPATH_W=echo
|
|
+ fi
|
|
+fi
|
|
+
|
|
+
|
|
+# Define the identity of the package.
|
|
+ PACKAGE=$PACKAGE
|
|
+ VERSION=$VERSION
|
|
+
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define PACKAGE "$PACKAGE"
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define VERSION "$VERSION"
|
|
+_ACEOF
|
|
+
|
|
+# Some tools Automake needs.
|
|
+
|
|
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
|
|
+
|
|
+
|
|
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
|
|
+
|
|
+
|
|
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
|
|
+
|
|
+
|
|
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
|
|
+
|
|
+
|
|
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
|
|
+
|
|
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
|
|
+
|
|
+# Installed binaries are usually stripped using `strip' when the user
|
|
+# run `make install-strip'. However `strip' might not be the right
|
|
+# tool to use in cross-compilation environments, therefore Automake
|
|
+# will honor the `STRIP' environment variable to overrule this program.
|
|
+if test "$cross_compiling" != no; then
|
|
+ if test -n "$ac_tool_prefix"; then
|
|
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
|
|
+set dummy ${ac_tool_prefix}strip; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_STRIP+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$STRIP"; then
|
|
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+fi
|
|
+fi
|
|
+STRIP=$ac_cv_prog_STRIP
|
|
+if test -n "$STRIP"; then
|
|
+ echo "$as_me:$LINENO: result: $STRIP" >&5
|
|
+echo "${ECHO_T}$STRIP" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+fi
|
|
+if test -z "$ac_cv_prog_STRIP"; then
|
|
+ ac_ct_STRIP=$STRIP
|
|
+ # Extract the first word of "strip", so it can be a program name with args.
|
|
+set dummy strip; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$ac_ct_STRIP"; then
|
|
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_ac_ct_STRIP="strip"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+ test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
|
|
+fi
|
|
+fi
|
|
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
|
|
+if test -n "$ac_ct_STRIP"; then
|
|
+ echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
|
|
+echo "${ECHO_T}$ac_ct_STRIP" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+ STRIP=$ac_ct_STRIP
|
|
+else
|
|
+ STRIP="$ac_cv_prog_STRIP"
|
|
+fi
|
|
+
|
|
+fi
|
|
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
|
|
+
|
|
+# We need awk for the "check" target. The system "awk" is bad on
|
|
+# some platforms.
|
|
+# Always define AMTAR for backward compatibility.
|
|
+
|
|
+AMTAR=${AMTAR-"${am_missing_run}tar"}
|
|
+
|
|
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+ ac_config_headers="$ac_config_headers config.h"
|
|
+
|
|
+for ac_prog in bash
|
|
+do
|
|
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
|
|
+set dummy $ac_prog; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_path_BASH+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ case $BASH in
|
|
+ [\\/]* | ?:[\\/]*)
|
|
+ ac_cv_path_BASH="$BASH" # Let the user override the test with a path.
|
|
+ ;;
|
|
+ *)
|
|
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_path_BASH="$as_dir/$ac_word$ac_exec_ext"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+ ;;
|
|
+esac
|
|
+fi
|
|
+BASH=$ac_cv_path_BASH
|
|
+
|
|
+if test -n "$BASH"; then
|
|
+ echo "$as_me:$LINENO: result: $BASH" >&5
|
|
+echo "${ECHO_T}$BASH" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+ test -n "$BASH" && break
|
|
+done
|
|
+
|
|
+
|
|
+ac_ext=c
|
|
+ac_cpp='$CPP $CPPFLAGS'
|
|
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
+if test -n "$ac_tool_prefix"; then
|
|
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
|
|
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_CC+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$CC"; then
|
|
+ ac_cv_prog_CC="$CC" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+fi
|
|
+fi
|
|
+CC=$ac_cv_prog_CC
|
|
+if test -n "$CC"; then
|
|
+ echo "$as_me:$LINENO: result: $CC" >&5
|
|
+echo "${ECHO_T}$CC" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+fi
|
|
+if test -z "$ac_cv_prog_CC"; then
|
|
+ ac_ct_CC=$CC
|
|
+ # Extract the first word of "gcc", so it can be a program name with args.
|
|
+set dummy gcc; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$ac_ct_CC"; then
|
|
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_ac_ct_CC="gcc"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+fi
|
|
+fi
|
|
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
|
|
+if test -n "$ac_ct_CC"; then
|
|
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
|
|
+echo "${ECHO_T}$ac_ct_CC" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+ CC=$ac_ct_CC
|
|
+else
|
|
+ CC="$ac_cv_prog_CC"
|
|
+fi
|
|
+
|
|
+if test -z "$CC"; then
|
|
+ if test -n "$ac_tool_prefix"; then
|
|
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
|
|
+set dummy ${ac_tool_prefix}cc; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_CC+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$CC"; then
|
|
+ ac_cv_prog_CC="$CC" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+fi
|
|
+fi
|
|
+CC=$ac_cv_prog_CC
|
|
+if test -n "$CC"; then
|
|
+ echo "$as_me:$LINENO: result: $CC" >&5
|
|
+echo "${ECHO_T}$CC" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+fi
|
|
+if test -z "$ac_cv_prog_CC"; then
|
|
+ ac_ct_CC=$CC
|
|
+ # Extract the first word of "cc", so it can be a program name with args.
|
|
+set dummy cc; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$ac_ct_CC"; then
|
|
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_ac_ct_CC="cc"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+fi
|
|
+fi
|
|
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
|
|
+if test -n "$ac_ct_CC"; then
|
|
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
|
|
+echo "${ECHO_T}$ac_ct_CC" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+ CC=$ac_ct_CC
|
|
+else
|
|
+ CC="$ac_cv_prog_CC"
|
|
+fi
|
|
+
|
|
+fi
|
|
+if test -z "$CC"; then
|
|
+ # Extract the first word of "cc", so it can be a program name with args.
|
|
+set dummy cc; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_CC+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$CC"; then
|
|
+ ac_cv_prog_CC="$CC" # Let the user override the test.
|
|
+else
|
|
+ ac_prog_rejected=no
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
|
|
+ ac_prog_rejected=yes
|
|
+ continue
|
|
+ fi
|
|
+ ac_cv_prog_CC="cc"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+if test $ac_prog_rejected = yes; then
|
|
+ # We found a bogon in the path, so make sure we never use it.
|
|
+ set dummy $ac_cv_prog_CC
|
|
+ shift
|
|
+ if test $# != 0; then
|
|
+ # We chose a different compiler from the bogus one.
|
|
+ # However, it has the same basename, so the bogon will be chosen
|
|
+ # first if we set CC to just the basename; use the full file name.
|
|
+ shift
|
|
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
|
|
+ fi
|
|
+fi
|
|
+fi
|
|
+fi
|
|
+CC=$ac_cv_prog_CC
|
|
+if test -n "$CC"; then
|
|
+ echo "$as_me:$LINENO: result: $CC" >&5
|
|
+echo "${ECHO_T}$CC" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+fi
|
|
+if test -z "$CC"; then
|
|
+ if test -n "$ac_tool_prefix"; then
|
|
+ for ac_prog in cl
|
|
+ do
|
|
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
|
|
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_CC+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$CC"; then
|
|
+ ac_cv_prog_CC="$CC" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+fi
|
|
+fi
|
|
+CC=$ac_cv_prog_CC
|
|
+if test -n "$CC"; then
|
|
+ echo "$as_me:$LINENO: result: $CC" >&5
|
|
+echo "${ECHO_T}$CC" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+ test -n "$CC" && break
|
|
+ done
|
|
+fi
|
|
+if test -z "$CC"; then
|
|
+ ac_ct_CC=$CC
|
|
+ for ac_prog in cl
|
|
+do
|
|
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
|
|
+set dummy $ac_prog; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$ac_ct_CC"; then
|
|
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_ac_ct_CC="$ac_prog"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+fi
|
|
+fi
|
|
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
|
|
+if test -n "$ac_ct_CC"; then
|
|
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
|
|
+echo "${ECHO_T}$ac_ct_CC" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+ test -n "$ac_ct_CC" && break
|
|
+done
|
|
+
|
|
+ CC=$ac_ct_CC
|
|
+fi
|
|
+
|
|
+fi
|
|
+
|
|
+
|
|
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
|
|
+See \`config.log' for more details." >&5
|
|
+echo "$as_me: error: no acceptable C compiler found in \$PATH
|
|
+See \`config.log' for more details." >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+
|
|
+# Provide some information about the compiler.
|
|
+echo "$as_me:$LINENO:" \
|
|
+ "checking for C compiler version" >&5
|
|
+ac_compiler=`set X $ac_compile; echo $2`
|
|
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
|
|
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }
|
|
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
|
|
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }
|
|
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
|
|
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }
|
|
+
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+ac_clean_files_save=$ac_clean_files
|
|
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
|
|
+# Try to create an executable without -o first, disregard a.out.
|
|
+# It will help us diagnose broken compilers, and finding out an intuition
|
|
+# of exeext.
|
|
+echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
|
|
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
|
|
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
|
|
+ (eval $ac_link_default) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; then
|
|
+ # Find the output, starting from the most likely. This scheme is
|
|
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
|
|
+# resort.
|
|
+
|
|
+# Be careful to initialize this variable, since it used to be cached.
|
|
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
|
|
+ac_cv_exeext=
|
|
+# b.out is created by i960 compilers.
|
|
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
|
|
+do
|
|
+ test -f "$ac_file" || continue
|
|
+ case $ac_file in
|
|
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
|
|
+ ;;
|
|
+ conftest.$ac_ext )
|
|
+ # This is the source file.
|
|
+ ;;
|
|
+ [ab].out )
|
|
+ # We found the default executable, but exeext='' is most
|
|
+ # certainly right.
|
|
+ break;;
|
|
+ *.* )
|
|
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
|
|
+ # FIXME: I believe we export ac_cv_exeext for Libtool,
|
|
+ # but it would be cool to find out if it's true. Does anybody
|
|
+ # maintain Libtool? --akim.
|
|
+ export ac_cv_exeext
|
|
+ break;;
|
|
+ * )
|
|
+ break;;
|
|
+ esac
|
|
+done
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
|
|
+See \`config.log' for more details." >&5
|
|
+echo "$as_me: error: C compiler cannot create executables
|
|
+See \`config.log' for more details." >&2;}
|
|
+ { (exit 77); exit 77; }; }
|
|
+fi
|
|
+
|
|
+ac_exeext=$ac_cv_exeext
|
|
+echo "$as_me:$LINENO: result: $ac_file" >&5
|
|
+echo "${ECHO_T}$ac_file" >&6
|
|
+
|
|
+# Check the compiler produces executables we can run. If not, either
|
|
+# the compiler is broken, or we cross compile.
|
|
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
|
|
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
|
|
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
|
|
+# If not cross compiling, check that we can run a simple program.
|
|
+if test "$cross_compiling" != yes; then
|
|
+ if { ac_try='./$ac_file'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ cross_compiling=no
|
|
+ else
|
|
+ if test "$cross_compiling" = maybe; then
|
|
+ cross_compiling=yes
|
|
+ else
|
|
+ { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
|
|
+If you meant to cross compile, use \`--host'.
|
|
+See \`config.log' for more details." >&5
|
|
+echo "$as_me: error: cannot run C compiled programs.
|
|
+If you meant to cross compile, use \`--host'.
|
|
+See \`config.log' for more details." >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+ fi
|
|
+ fi
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: yes" >&5
|
|
+echo "${ECHO_T}yes" >&6
|
|
+
|
|
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
|
|
+ac_clean_files=$ac_clean_files_save
|
|
+# Check the compiler produces executables we can run. If not, either
|
|
+# the compiler is broken, or we cross compile.
|
|
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
|
|
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
|
|
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
|
|
+echo "${ECHO_T}$cross_compiling" >&6
|
|
+
|
|
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
|
|
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; then
|
|
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
|
|
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
|
|
+# work properly (i.e., refer to `conftest.exe'), while it won't with
|
|
+# `rm'.
|
|
+for ac_file in conftest.exe conftest conftest.*; do
|
|
+ test -f "$ac_file" || continue
|
|
+ case $ac_file in
|
|
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
|
|
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
|
|
+ export ac_cv_exeext
|
|
+ break;;
|
|
+ * ) break;;
|
|
+ esac
|
|
+done
|
|
+else
|
|
+ { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
|
|
+See \`config.log' for more details." >&5
|
|
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
|
|
+See \`config.log' for more details." >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+fi
|
|
+
|
|
+rm -f conftest$ac_cv_exeext
|
|
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
|
|
+echo "${ECHO_T}$ac_cv_exeext" >&6
|
|
+
|
|
+rm -f conftest.$ac_ext
|
|
+EXEEXT=$ac_cv_exeext
|
|
+ac_exeext=$EXEEXT
|
|
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
|
|
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
|
|
+if test "${ac_cv_objext+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.o conftest.obj
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; then
|
|
+ for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
|
|
+ case $ac_file in
|
|
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
|
|
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
|
|
+ break;;
|
|
+ esac
|
|
+done
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
|
|
+See \`config.log' for more details." >&5
|
|
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
|
|
+See \`config.log' for more details." >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+fi
|
|
+
|
|
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
|
|
+echo "${ECHO_T}$ac_cv_objext" >&6
|
|
+OBJEXT=$ac_cv_objext
|
|
+ac_objext=$OBJEXT
|
|
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
|
|
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
|
|
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+#ifndef __GNUC__
|
|
+ choke me
|
|
+#endif
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_compiler_gnu=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_compiler_gnu=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
|
|
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
|
|
+GCC=`test $ac_compiler_gnu = yes && echo yes`
|
|
+ac_test_CFLAGS=${CFLAGS+set}
|
|
+ac_save_CFLAGS=$CFLAGS
|
|
+CFLAGS="-g"
|
|
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
|
|
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_cc_g+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_prog_cc_g=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_prog_cc_g=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
|
|
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
|
|
+if test "$ac_test_CFLAGS" = set; then
|
|
+ CFLAGS=$ac_save_CFLAGS
|
|
+elif test $ac_cv_prog_cc_g = yes; then
|
|
+ if test "$GCC" = yes; then
|
|
+ CFLAGS="-g -O2"
|
|
+ else
|
|
+ CFLAGS="-g"
|
|
+ fi
|
|
+else
|
|
+ if test "$GCC" = yes; then
|
|
+ CFLAGS="-O2"
|
|
+ else
|
|
+ CFLAGS=
|
|
+ fi
|
|
+fi
|
|
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
|
|
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ ac_cv_prog_cc_stdc=no
|
|
+ac_save_CC=$CC
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <stdarg.h>
|
|
+#include <stdio.h>
|
|
+#include <sys/types.h>
|
|
+#include <sys/stat.h>
|
|
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
|
|
+struct buf { int x; };
|
|
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
|
|
+static char *e (p, i)
|
|
+ char **p;
|
|
+ int i;
|
|
+{
|
|
+ return p[i];
|
|
+}
|
|
+static char *f (char * (*g) (char **, int), char **p, ...)
|
|
+{
|
|
+ char *s;
|
|
+ va_list v;
|
|
+ va_start (v,p);
|
|
+ s = g (p, va_arg (v,int));
|
|
+ va_end (v);
|
|
+ return s;
|
|
+}
|
|
+
|
|
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
|
|
+ function prototypes and stuff, but not '\xHH' hex character constants.
|
|
+ These don't provoke an error unfortunately, instead are silently treated
|
|
+ as 'x'. The following induces an error, until -std1 is added to get
|
|
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
|
|
+ array size at least. It's necessary to write '\x00'==0 to get something
|
|
+ that's true only with -std1. */
|
|
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
|
|
+
|
|
+int test (int i, double x);
|
|
+struct s1 {int (*f) (int a);};
|
|
+struct s2 {int (*f) (double a);};
|
|
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
|
|
+int argc;
|
|
+char **argv;
|
|
+int
|
|
+main ()
|
|
+{
|
|
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+# Don't try gcc -ansi; that turns off useful extensions and
|
|
+# breaks some systems' header files.
|
|
+# AIX -qlanglvl=ansi
|
|
+# Ultrix and OSF/1 -std1
|
|
+# HP-UX 10.20 and later -Ae
|
|
+# HP-UX older versions -Aa -D_HPUX_SOURCE
|
|
+# SVR4 -Xc -D__EXTENSIONS__
|
|
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
|
|
+do
|
|
+ CC="$ac_save_CC $ac_arg"
|
|
+ rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_prog_cc_stdc=$ac_arg
|
|
+break
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext
|
|
+done
|
|
+rm -f conftest.$ac_ext conftest.$ac_objext
|
|
+CC=$ac_save_CC
|
|
+
|
|
+fi
|
|
+
|
|
+case "x$ac_cv_prog_cc_stdc" in
|
|
+ x|xno)
|
|
+ echo "$as_me:$LINENO: result: none needed" >&5
|
|
+echo "${ECHO_T}none needed" >&6 ;;
|
|
+ *)
|
|
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
|
|
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
|
|
+ CC="$CC $ac_cv_prog_cc_stdc" ;;
|
|
+esac
|
|
+
|
|
+# Some people use a C++ compiler to compile C. Since we use `exit',
|
|
+# in C++ we need to declare it. In case someone uses the same compiler
|
|
+# for both compiling C and C++ we need to have the C++ compiler decide
|
|
+# the declaration of exit, since it's the most demanding environment.
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
+#ifndef __cplusplus
|
|
+ choke me
|
|
+#endif
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ for ac_declaration in \
|
|
+ '' \
|
|
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
|
|
+ 'extern "C" void std::exit (int); using std::exit;' \
|
|
+ 'extern "C" void exit (int) throw ();' \
|
|
+ 'extern "C" void exit (int);' \
|
|
+ 'void exit (int);'
|
|
+do
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_declaration
|
|
+#include <stdlib.h>
|
|
+int
|
|
+main ()
|
|
+{
|
|
+exit (42);
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ :
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+continue
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_declaration
|
|
+int
|
|
+main ()
|
|
+{
|
|
+exit (42);
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ break
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+done
|
|
+rm -f conftest*
|
|
+if test -n "$ac_declaration"; then
|
|
+ echo '#ifdef __cplusplus' >>confdefs.h
|
|
+ echo $ac_declaration >>confdefs.h
|
|
+ echo '#endif' >>confdefs.h
|
|
+fi
|
|
+
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+ac_ext=c
|
|
+ac_cpp='$CPP $CPPFLAGS'
|
|
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
+DEPDIR="${am__leading_dot}deps"
|
|
+
|
|
+ ac_config_commands="$ac_config_commands depfiles"
|
|
+
|
|
+
|
|
+am_make=${MAKE-make}
|
|
+cat > confinc << 'END'
|
|
+am__doit:
|
|
+ @echo done
|
|
+.PHONY: am__doit
|
|
+END
|
|
+# If we don't find an include directive, just comment out the code.
|
|
+echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
|
|
+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
|
|
+am__include="#"
|
|
+am__quote=
|
|
+_am_result=none
|
|
+# First try GNU make style include.
|
|
+echo "include confinc" > confmf
|
|
+# We grep out `Entering directory' and `Leaving directory'
|
|
+# messages which can occur if `w' ends up in MAKEFLAGS.
|
|
+# In particular we don't look at `^make:' because GNU make might
|
|
+# be invoked under some other name (usually "gmake"), in which
|
|
+# case it prints its new name instead of `make'.
|
|
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
|
|
+ am__include=include
|
|
+ am__quote=
|
|
+ _am_result=GNU
|
|
+fi
|
|
+# Now try BSD make style include.
|
|
+if test "$am__include" = "#"; then
|
|
+ echo '.include "confinc"' > confmf
|
|
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
|
|
+ am__include=.include
|
|
+ am__quote="\""
|
|
+ _am_result=BSD
|
|
+ fi
|
|
+fi
|
|
+
|
|
+
|
|
+echo "$as_me:$LINENO: result: $_am_result" >&5
|
|
+echo "${ECHO_T}$_am_result" >&6
|
|
+rm -f confinc confmf
|
|
+
|
|
+# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
|
|
+if test "${enable_dependency_tracking+set}" = set; then
|
|
+ enableval="$enable_dependency_tracking"
|
|
+
|
|
+fi;
|
|
+if test "x$enable_dependency_tracking" != xno; then
|
|
+ am_depcomp="$ac_aux_dir/depcomp"
|
|
+ AMDEPBACKSLASH='\'
|
|
+fi
|
|
+
|
|
+
|
|
+if test "x$enable_dependency_tracking" != xno; then
|
|
+ AMDEP_TRUE=
|
|
+ AMDEP_FALSE='#'
|
|
+else
|
|
+ AMDEP_TRUE='#'
|
|
+ AMDEP_FALSE=
|
|
+fi
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+depcc="$CC" am_compiler_list=
|
|
+
|
|
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
|
|
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
|
|
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
|
|
+ # We make a subdir and do the tests there. Otherwise we can end up
|
|
+ # making bogus files that we don't know about and never remove. For
|
|
+ # instance it was reported that on HP-UX the gcc test will end up
|
|
+ # making a dummy file named `D' -- because `-MD' means `put the output
|
|
+ # in D'.
|
|
+ mkdir conftest.dir
|
|
+ # Copy depcomp to subdir because otherwise we won't find it if we're
|
|
+ # using a relative directory.
|
|
+ cp "$am_depcomp" conftest.dir
|
|
+ cd conftest.dir
|
|
+ # We will build objects and dependencies in a subdirectory because
|
|
+ # it helps to detect inapplicable dependency modes. For instance
|
|
+ # both Tru64's cc and ICC support -MD to output dependencies as a
|
|
+ # side effect of compilation, but ICC will put the dependencies in
|
|
+ # the current directory while Tru64 will put them in the object
|
|
+ # directory.
|
|
+ mkdir sub
|
|
+
|
|
+ am_cv_CC_dependencies_compiler_type=none
|
|
+ if test "$am_compiler_list" = ""; then
|
|
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
|
|
+ fi
|
|
+ for depmode in $am_compiler_list; do
|
|
+ # Setup a source with many dependencies, because some compilers
|
|
+ # like to wrap large dependency lists on column 80 (with \), and
|
|
+ # we should not choose a depcomp mode which is confused by this.
|
|
+ #
|
|
+ # We need to recreate these files for each test, as the compiler may
|
|
+ # overwrite some of them when testing with obscure command lines.
|
|
+ # This happens at least with the AIX C compiler.
|
|
+ : > sub/conftest.c
|
|
+ for i in 1 2 3 4 5 6; do
|
|
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
|
|
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
|
|
+ # Solaris 8's {/usr,}/bin/sh.
|
|
+ touch sub/conftst$i.h
|
|
+ done
|
|
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
|
|
+
|
|
+ case $depmode in
|
|
+ nosideeffect)
|
|
+ # after this tag, mechanisms are not by side-effect, so they'll
|
|
+ # only be used when explicitly requested
|
|
+ if test "x$enable_dependency_tracking" = xyes; then
|
|
+ continue
|
|
+ else
|
|
+ break
|
|
+ fi
|
|
+ ;;
|
|
+ none) break ;;
|
|
+ esac
|
|
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
|
|
+ # mode. It turns out that the SunPro C++ compiler does not properly
|
|
+ # handle `-M -o', and we need to detect this.
|
|
+ if depmode=$depmode \
|
|
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
|
|
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
|
|
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
|
|
+ >/dev/null 2>conftest.err &&
|
|
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
|
|
+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
|
|
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
|
|
+ # icc doesn't choke on unknown options, it will just issue warnings
|
|
+ # or remarks (even with -Werror). So we grep stderr for any message
|
|
+ # that says an option was ignored or not supported.
|
|
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
|
|
+ # icc: Command line warning: ignoring option '-M'; no argument required
|
|
+ # The diagnosis changed in icc 8.0:
|
|
+ # icc: Command line remark: option '-MP' not supported
|
|
+ if (grep 'ignoring option' conftest.err ||
|
|
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
|
|
+ am_cv_CC_dependencies_compiler_type=$depmode
|
|
+ break
|
|
+ fi
|
|
+ fi
|
|
+ done
|
|
+
|
|
+ cd ..
|
|
+ rm -rf conftest.dir
|
|
+else
|
|
+ am_cv_CC_dependencies_compiler_type=none
|
|
+fi
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
|
|
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
|
|
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
|
|
+
|
|
+
|
|
+
|
|
+if
|
|
+ test "x$enable_dependency_tracking" != xno \
|
|
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
|
|
+ am__fastdepCC_TRUE=
|
|
+ am__fastdepCC_FALSE='#'
|
|
+else
|
|
+ am__fastdepCC_TRUE='#'
|
|
+ am__fastdepCC_FALSE=
|
|
+fi
|
|
+
|
|
+
|
|
+if test "x$CC" != xcc; then
|
|
+ echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5
|
|
+echo $ECHO_N "checking whether $CC and cc understand -c and -o together... $ECHO_C" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5
|
|
+echo $ECHO_N "checking whether cc understands -c and -o together... $ECHO_C" >&6
|
|
+fi
|
|
+set dummy $CC; ac_cc=`echo $2 |
|
|
+ sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
|
|
+if eval "test \"\${ac_cv_prog_cc_${ac_cc}_c_o+set}\" = set"; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+# Make sure it works both with $CC and with simple cc.
|
|
+# We do the test twice because some compilers refuse to overwrite an
|
|
+# existing .o file with -o, though they will create one.
|
|
+ac_try='$CC -c conftest.$ac_ext -o conftest.$ac_objext >&5'
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ test -f conftest.$ac_objext && { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); };
|
|
+then
|
|
+ eval ac_cv_prog_cc_${ac_cc}_c_o=yes
|
|
+ if test "x$CC" != xcc; then
|
|
+ # Test first that cc exists at all.
|
|
+ if { ac_try='cc -c conftest.$ac_ext >&5'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_try='cc -c conftest.$ac_ext -o conftest.$ac_objext >&5'
|
|
+ if { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ test -f conftest.$ac_objext && { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); };
|
|
+ then
|
|
+ # cc works too.
|
|
+ :
|
|
+ else
|
|
+ # cc exists but doesn't like -o.
|
|
+ eval ac_cv_prog_cc_${ac_cc}_c_o=no
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+else
|
|
+ eval ac_cv_prog_cc_${ac_cc}_c_o=no
|
|
+fi
|
|
+rm -f conftest*
|
|
+
|
|
+fi
|
|
+if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = yes"; then
|
|
+ echo "$as_me:$LINENO: result: yes" >&5
|
|
+echo "${ECHO_T}yes" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+
|
|
+cat >>confdefs.h <<\_ACEOF
|
|
+#define NO_MINUS_C_MINUS_O 1
|
|
+_ACEOF
|
|
+
|
|
+fi
|
|
+
|
|
+# FIXME: we rely on the cache variable name because
|
|
+# there is no other way.
|
|
+set dummy $CC
|
|
+ac_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
|
|
+if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
|
|
+ # Losing compiler, so override with the script.
|
|
+ # FIXME: It is wrong to rewrite CC.
|
|
+ # But if we don't then we get into trouble of one sort or another.
|
|
+ # A longer-term fix would be to have automake use am__CC in this case,
|
|
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
|
|
+ CC="$am_aux_dir/compile $CC"
|
|
+fi
|
|
+
|
|
+
|
|
+if test -n "$ac_tool_prefix"; then
|
|
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
|
|
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_RANLIB+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$RANLIB"; then
|
|
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+fi
|
|
+fi
|
|
+RANLIB=$ac_cv_prog_RANLIB
|
|
+if test -n "$RANLIB"; then
|
|
+ echo "$as_me:$LINENO: result: $RANLIB" >&5
|
|
+echo "${ECHO_T}$RANLIB" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+fi
|
|
+if test -z "$ac_cv_prog_RANLIB"; then
|
|
+ ac_ct_RANLIB=$RANLIB
|
|
+ # Extract the first word of "ranlib", so it can be a program name with args.
|
|
+set dummy ranlib; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$ac_ct_RANLIB"; then
|
|
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+ test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
|
|
+fi
|
|
+fi
|
|
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
|
|
+if test -n "$ac_ct_RANLIB"; then
|
|
+ echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
|
|
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+ RANLIB=$ac_ct_RANLIB
|
|
+else
|
|
+ RANLIB="$ac_cv_prog_RANLIB"
|
|
+fi
|
|
+
|
|
+
|
|
+
|
|
+cat >>confdefs.h <<\_ACEOF
|
|
+#define _GNU_SOURCE 1
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+# Find a good install program. We prefer a C program (faster),
|
|
+# so one script is as good as another. But avoid the broken or
|
|
+# incompatible versions:
|
|
+# SysV /etc/install, /usr/sbin/install
|
|
+# SunOS /usr/etc/install
|
|
+# IRIX /sbin/install
|
|
+# AIX /bin/install
|
|
+# AmigaOS /C/install, which installs bootblocks on floppy discs
|
|
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
|
|
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
|
|
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
|
|
+# OS/2's system install, which has a completely different semantic
|
|
+# ./install, which can be erroneously created by make from ./install.sh.
|
|
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
|
|
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
|
|
+if test -z "$INSTALL"; then
|
|
+if test "${ac_cv_path_install+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ # Account for people who put trailing slashes in PATH elements.
|
|
+case $as_dir/ in
|
|
+ ./ | .// | /cC/* | \
|
|
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
|
|
+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
|
|
+ /usr/ucb/* ) ;;
|
|
+ *)
|
|
+ # OSF1 and SCO ODT 3.0 have their own names for install.
|
|
+ # Don't use installbsd from OSF since it installs stuff as root
|
|
+ # by default.
|
|
+ for ac_prog in ginstall scoinst install; do
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
|
|
+ if test $ac_prog = install &&
|
|
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
|
|
+ # AIX install. It has an incompatible calling convention.
|
|
+ :
|
|
+ elif test $ac_prog = install &&
|
|
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
|
|
+ # program-specific install script used by HP pwplus--don't use.
|
|
+ :
|
|
+ else
|
|
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
|
|
+ break 3
|
|
+ fi
|
|
+ fi
|
|
+ done
|
|
+ done
|
|
+ ;;
|
|
+esac
|
|
+done
|
|
+
|
|
+
|
|
+fi
|
|
+ if test "${ac_cv_path_install+set}" = set; then
|
|
+ INSTALL=$ac_cv_path_install
|
|
+ else
|
|
+ # As a last resort, use the slow shell script. We don't cache a
|
|
+ # path for INSTALL within a source directory, because that will
|
|
+ # break other packages using the cache if that directory is
|
|
+ # removed, or if the path is relative.
|
|
+ INSTALL=$ac_install_sh
|
|
+ fi
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $INSTALL" >&5
|
|
+echo "${ECHO_T}$INSTALL" >&6
|
|
+
|
|
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
|
|
+# It thinks the first close brace ends the variable substitution.
|
|
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
|
|
+
|
|
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
|
|
+
|
|
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
|
|
+
|
|
+
|
|
+ac_ext=c
|
|
+ac_cpp='$CPP $CPPFLAGS'
|
|
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
|
|
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
|
|
+# On Suns, sometimes $CPP names a directory.
|
|
+if test -n "$CPP" && test -d "$CPP"; then
|
|
+ CPP=
|
|
+fi
|
|
+if test -z "$CPP"; then
|
|
+ if test "${ac_cv_prog_CPP+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ # Double quotes because CPP needs to be expanded
|
|
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
|
|
+ do
|
|
+ ac_preproc_ok=false
|
|
+for ac_c_preproc_warn_flag in '' yes
|
|
+do
|
|
+ # Use a header file that comes with gcc, so configuring glibc
|
|
+ # with a fresh cross-compiler works.
|
|
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
|
|
+ # <limits.h> exists even on freestanding compilers.
|
|
+ # On the NeXT, cc -E runs the code through the compiler's parser,
|
|
+ # not just through cpp. "Syntax error" is here to catch this case.
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#ifdef __STDC__
|
|
+# include <limits.h>
|
|
+#else
|
|
+# include <assert.h>
|
|
+#endif
|
|
+ Syntax error
|
|
+_ACEOF
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
|
|
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } >/dev/null; then
|
|
+ if test -s conftest.err; then
|
|
+ ac_cpp_err=$ac_c_preproc_warn_flag
|
|
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
|
|
+ else
|
|
+ ac_cpp_err=
|
|
+ fi
|
|
+else
|
|
+ ac_cpp_err=yes
|
|
+fi
|
|
+if test -z "$ac_cpp_err"; then
|
|
+ :
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ # Broken: fails on valid input.
|
|
+continue
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_ext
|
|
+
|
|
+ # OK, works on sane cases. Now check whether non-existent headers
|
|
+ # can be detected and how.
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <ac_nonexistent.h>
|
|
+_ACEOF
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
|
|
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } >/dev/null; then
|
|
+ if test -s conftest.err; then
|
|
+ ac_cpp_err=$ac_c_preproc_warn_flag
|
|
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
|
|
+ else
|
|
+ ac_cpp_err=
|
|
+ fi
|
|
+else
|
|
+ ac_cpp_err=yes
|
|
+fi
|
|
+if test -z "$ac_cpp_err"; then
|
|
+ # Broken: success on invalid input.
|
|
+continue
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ # Passes both tests.
|
|
+ac_preproc_ok=:
|
|
+break
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_ext
|
|
+
|
|
+done
|
|
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
|
|
+rm -f conftest.err conftest.$ac_ext
|
|
+if $ac_preproc_ok; then
|
|
+ break
|
|
+fi
|
|
+
|
|
+ done
|
|
+ ac_cv_prog_CPP=$CPP
|
|
+
|
|
+fi
|
|
+ CPP=$ac_cv_prog_CPP
|
|
+else
|
|
+ ac_cv_prog_CPP=$CPP
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $CPP" >&5
|
|
+echo "${ECHO_T}$CPP" >&6
|
|
+ac_preproc_ok=false
|
|
+for ac_c_preproc_warn_flag in '' yes
|
|
+do
|
|
+ # Use a header file that comes with gcc, so configuring glibc
|
|
+ # with a fresh cross-compiler works.
|
|
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
|
|
+ # <limits.h> exists even on freestanding compilers.
|
|
+ # On the NeXT, cc -E runs the code through the compiler's parser,
|
|
+ # not just through cpp. "Syntax error" is here to catch this case.
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#ifdef __STDC__
|
|
+# include <limits.h>
|
|
+#else
|
|
+# include <assert.h>
|
|
+#endif
|
|
+ Syntax error
|
|
+_ACEOF
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
|
|
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } >/dev/null; then
|
|
+ if test -s conftest.err; then
|
|
+ ac_cpp_err=$ac_c_preproc_warn_flag
|
|
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
|
|
+ else
|
|
+ ac_cpp_err=
|
|
+ fi
|
|
+else
|
|
+ ac_cpp_err=yes
|
|
+fi
|
|
+if test -z "$ac_cpp_err"; then
|
|
+ :
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ # Broken: fails on valid input.
|
|
+continue
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_ext
|
|
+
|
|
+ # OK, works on sane cases. Now check whether non-existent headers
|
|
+ # can be detected and how.
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <ac_nonexistent.h>
|
|
+_ACEOF
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
|
|
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } >/dev/null; then
|
|
+ if test -s conftest.err; then
|
|
+ ac_cpp_err=$ac_c_preproc_warn_flag
|
|
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
|
|
+ else
|
|
+ ac_cpp_err=
|
|
+ fi
|
|
+else
|
|
+ ac_cpp_err=yes
|
|
+fi
|
|
+if test -z "$ac_cpp_err"; then
|
|
+ # Broken: success on invalid input.
|
|
+continue
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ # Passes both tests.
|
|
+ac_preproc_ok=:
|
|
+break
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_ext
|
|
+
|
|
+done
|
|
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
|
|
+rm -f conftest.err conftest.$ac_ext
|
|
+if $ac_preproc_ok; then
|
|
+ :
|
|
+else
|
|
+ { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
|
|
+See \`config.log' for more details." >&5
|
|
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
|
|
+See \`config.log' for more details." >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+fi
|
|
+
|
|
+ac_ext=c
|
|
+ac_cpp='$CPP $CPPFLAGS'
|
|
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
+
|
|
+
|
|
+echo "$as_me:$LINENO: checking for egrep" >&5
|
|
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_egrep+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ 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
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
|
|
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
|
|
+ EGREP=$ac_cv_prog_egrep
|
|
+
|
|
+
|
|
+if test $ac_cv_c_compiler_gnu = yes; then
|
|
+ echo "$as_me:$LINENO: checking whether $CC needs -traditional" >&5
|
|
+echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_gcc_traditional+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ ac_pattern="Autoconf.*'x'"
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <sgtty.h>
|
|
+Autoconf TIOCGETP
|
|
+_ACEOF
|
|
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
|
+ $EGREP "$ac_pattern" >/dev/null 2>&1; then
|
|
+ ac_cv_prog_gcc_traditional=yes
|
|
+else
|
|
+ ac_cv_prog_gcc_traditional=no
|
|
+fi
|
|
+rm -f conftest*
|
|
+
|
|
+
|
|
+ if test $ac_cv_prog_gcc_traditional = no; then
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <termio.h>
|
|
+Autoconf TCGETA
|
|
+_ACEOF
|
|
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
|
+ $EGREP "$ac_pattern" >/dev/null 2>&1; then
|
|
+ ac_cv_prog_gcc_traditional=yes
|
|
+fi
|
|
+rm -f conftest*
|
|
+
|
|
+ fi
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_prog_gcc_traditional" >&5
|
|
+echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6
|
|
+ if test $ac_cv_prog_gcc_traditional = yes; then
|
|
+ CC="$CC -traditional"
|
|
+ fi
|
|
+fi
|
|
+
|
|
+
|
|
+# Checks for typedefs, structures, and compiler characteristics.
|
|
+echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
|
|
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
|
|
+if test "${ac_cv_c_const+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+/* FIXME: Include the comments suggested by Paul. */
|
|
+#ifndef __cplusplus
|
|
+ /* Ultrix mips cc rejects this. */
|
|
+ typedef int charset[2];
|
|
+ const charset x;
|
|
+ /* SunOS 4.1.1 cc rejects this. */
|
|
+ char const *const *ccp;
|
|
+ char **p;
|
|
+ /* NEC SVR4.0.2 mips cc rejects this. */
|
|
+ struct point {int x, y;};
|
|
+ static struct point const zero = {0,0};
|
|
+ /* AIX XL C 1.02.0.0 rejects this.
|
|
+ It does not let you subtract one const X* pointer from another in
|
|
+ an arm of an if-expression whose if-part is not a constant
|
|
+ expression */
|
|
+ const char *g = "string";
|
|
+ ccp = &g + (g ? g-g : 0);
|
|
+ /* HPUX 7.0 cc rejects these. */
|
|
+ ++ccp;
|
|
+ p = (char**) ccp;
|
|
+ ccp = (char const *const *) p;
|
|
+ { /* SCO 3.2v4 cc rejects this. */
|
|
+ char *t;
|
|
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
|
|
+
|
|
+ *t++ = 0;
|
|
+ }
|
|
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
|
|
+ int x[] = {25, 17};
|
|
+ const int *foo = &x[0];
|
|
+ ++foo;
|
|
+ }
|
|
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
|
|
+ typedef const int *iptr;
|
|
+ iptr p = 0;
|
|
+ ++p;
|
|
+ }
|
|
+ { /* AIX XL C 1.02.0.0 rejects this saying
|
|
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
|
|
+ struct s { int j; const int *ap[3]; };
|
|
+ struct s *b; b->j = 5;
|
|
+ }
|
|
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
|
|
+ const int foo = 10;
|
|
+ }
|
|
+#endif
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_c_const=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_c_const=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
|
|
+echo "${ECHO_T}$ac_cv_c_const" >&6
|
|
+if test $ac_cv_c_const = no; then
|
|
+
|
|
+cat >>confdefs.h <<\_ACEOF
|
|
+#define const
|
|
+_ACEOF
|
|
+
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking for inline" >&5
|
|
+echo $ECHO_N "checking for inline... $ECHO_C" >&6
|
|
+if test "${ac_cv_c_inline+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ ac_cv_c_inline=no
|
|
+for ac_kw in inline __inline__ __inline; do
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#ifndef __cplusplus
|
|
+typedef int foo_t;
|
|
+static $ac_kw foo_t static_foo () {return 0; }
|
|
+$ac_kw foo_t foo () {return 0; }
|
|
+#endif
|
|
+
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_c_inline=$ac_kw; break
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+done
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
|
|
+echo "${ECHO_T}$ac_cv_c_inline" >&6
|
|
+
|
|
+
|
|
+case $ac_cv_c_inline in
|
|
+ inline | yes) ;;
|
|
+ *)
|
|
+ case $ac_cv_c_inline in
|
|
+ no) ac_val=;;
|
|
+ *) ac_val=$ac_cv_c_inline;;
|
|
+ esac
|
|
+ cat >>confdefs.h <<_ACEOF
|
|
+#ifndef __cplusplus
|
|
+#define inline $ac_val
|
|
+#endif
|
|
+_ACEOF
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
|
|
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
|
|
+if test "${ac_cv_header_stdc+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <stdlib.h>
|
|
+#include <stdarg.h>
|
|
+#include <string.h>
|
|
+#include <float.h>
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_header_stdc=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_header_stdc=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+
|
|
+if test $ac_cv_header_stdc = yes; then
|
|
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <string.h>
|
|
+
|
|
+_ACEOF
|
|
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
|
+ $EGREP "memchr" >/dev/null 2>&1; then
|
|
+ :
|
|
+else
|
|
+ ac_cv_header_stdc=no
|
|
+fi
|
|
+rm -f conftest*
|
|
+
|
|
+fi
|
|
+
|
|
+if test $ac_cv_header_stdc = yes; then
|
|
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <stdlib.h>
|
|
+
|
|
+_ACEOF
|
|
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
|
+ $EGREP "free" >/dev/null 2>&1; then
|
|
+ :
|
|
+else
|
|
+ ac_cv_header_stdc=no
|
|
+fi
|
|
+rm -f conftest*
|
|
+
|
|
+fi
|
|
+
|
|
+if test $ac_cv_header_stdc = yes; then
|
|
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
|
|
+ if test "$cross_compiling" = yes; then
|
|
+ :
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <ctype.h>
|
|
+#if ((' ' & 0x0FF) == 0x020)
|
|
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
|
|
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
|
|
+#else
|
|
+# define ISLOWER(c) \
|
|
+ (('a' <= (c) && (c) <= 'i') \
|
|
+ || ('j' <= (c) && (c) <= 'r') \
|
|
+ || ('s' <= (c) && (c) <= 'z'))
|
|
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
|
|
+#endif
|
|
+
|
|
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
|
|
+int
|
|
+main ()
|
|
+{
|
|
+ int i;
|
|
+ for (i = 0; i < 256; i++)
|
|
+ if (XOR (islower (i), ISLOWER (i))
|
|
+ || toupper (i) != TOUPPER (i))
|
|
+ exit(2);
|
|
+ exit (0);
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ :
|
|
+else
|
|
+ echo "$as_me: program exited with status $ac_status" >&5
|
|
+echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+( exit $ac_status )
|
|
+ac_cv_header_stdc=no
|
|
+fi
|
|
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+fi
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
|
|
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
|
|
+if test $ac_cv_header_stdc = yes; then
|
|
+
|
|
+cat >>confdefs.h <<\_ACEOF
|
|
+#define STDC_HEADERS 1
|
|
+_ACEOF
|
|
+
|
|
+fi
|
|
+
|
|
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
|
|
+ inttypes.h stdint.h unistd.h
|
|
+do
|
|
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
|
+echo "$as_me:$LINENO: checking for $ac_header" >&5
|
|
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
|
|
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+
|
|
+#include <$ac_header>
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ eval "$as_ac_Header=yes"
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+eval "$as_ac_Header=no"
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
|
|
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
|
|
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
|
|
+ cat >>confdefs.h <<_ACEOF
|
|
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
|
+_ACEOF
|
|
+
|
|
+fi
|
|
+
|
|
+done
|
|
+
|
|
+
|
|
+echo "$as_me:$LINENO: checking for off_t" >&5
|
|
+echo $ECHO_N "checking for off_t... $ECHO_C" >&6
|
|
+if test "${ac_cv_type_off_t+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+if ((off_t *) 0)
|
|
+ return 0;
|
|
+if (sizeof (off_t))
|
|
+ return 0;
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_type_off_t=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_type_off_t=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
|
|
+echo "${ECHO_T}$ac_cv_type_off_t" >&6
|
|
+if test $ac_cv_type_off_t = yes; then
|
|
+ :
|
|
+else
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define off_t long
|
|
+_ACEOF
|
|
+
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking for size_t" >&5
|
|
+echo $ECHO_N "checking for size_t... $ECHO_C" >&6
|
|
+if test "${ac_cv_type_size_t+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+if ((size_t *) 0)
|
|
+ return 0;
|
|
+if (sizeof (size_t))
|
|
+ return 0;
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_type_size_t=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_type_size_t=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
|
|
+echo "${ECHO_T}$ac_cv_type_size_t" >&6
|
|
+if test $ac_cv_type_size_t = yes; then
|
|
+ :
|
|
+else
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define size_t unsigned
|
|
+_ACEOF
|
|
+
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking for int8_t" >&5
|
|
+echo $ECHO_N "checking for int8_t... $ECHO_C" >&6
|
|
+if test "${ac_cv_type_int8_t+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+if ((int8_t *) 0)
|
|
+ return 0;
|
|
+if (sizeof (int8_t))
|
|
+ return 0;
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_type_int8_t=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_type_int8_t=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_type_int8_t" >&5
|
|
+echo "${ECHO_T}$ac_cv_type_int8_t" >&6
|
|
+if test $ac_cv_type_int8_t = yes; then
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define HAVE_INT8_T 1
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking for uint8_t" >&5
|
|
+echo $ECHO_N "checking for uint8_t... $ECHO_C" >&6
|
|
+if test "${ac_cv_type_uint8_t+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+if ((uint8_t *) 0)
|
|
+ return 0;
|
|
+if (sizeof (uint8_t))
|
|
+ return 0;
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_type_uint8_t=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_type_uint8_t=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_type_uint8_t" >&5
|
|
+echo "${ECHO_T}$ac_cv_type_uint8_t" >&6
|
|
+if test $ac_cv_type_uint8_t = yes; then
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define HAVE_UINT8_T 1
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking for int16_t" >&5
|
|
+echo $ECHO_N "checking for int16_t... $ECHO_C" >&6
|
|
+if test "${ac_cv_type_int16_t+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+if ((int16_t *) 0)
|
|
+ return 0;
|
|
+if (sizeof (int16_t))
|
|
+ return 0;
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_type_int16_t=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_type_int16_t=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_type_int16_t" >&5
|
|
+echo "${ECHO_T}$ac_cv_type_int16_t" >&6
|
|
+if test $ac_cv_type_int16_t = yes; then
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define HAVE_INT16_T 1
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking for uint16_t" >&5
|
|
+echo $ECHO_N "checking for uint16_t... $ECHO_C" >&6
|
|
+if test "${ac_cv_type_uint16_t+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+if ((uint16_t *) 0)
|
|
+ return 0;
|
|
+if (sizeof (uint16_t))
|
|
+ return 0;
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_type_uint16_t=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_type_uint16_t=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_type_uint16_t" >&5
|
|
+echo "${ECHO_T}$ac_cv_type_uint16_t" >&6
|
|
+if test $ac_cv_type_uint16_t = yes; then
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define HAVE_UINT16_T 1
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking for int32_t" >&5
|
|
+echo $ECHO_N "checking for int32_t... $ECHO_C" >&6
|
|
+if test "${ac_cv_type_int32_t+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+if ((int32_t *) 0)
|
|
+ return 0;
|
|
+if (sizeof (int32_t))
|
|
+ return 0;
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_type_int32_t=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_type_int32_t=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_type_int32_t" >&5
|
|
+echo "${ECHO_T}$ac_cv_type_int32_t" >&6
|
|
+if test $ac_cv_type_int32_t = yes; then
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define HAVE_INT32_T 1
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking for uint32_t" >&5
|
|
+echo $ECHO_N "checking for uint32_t... $ECHO_C" >&6
|
|
+if test "${ac_cv_type_uint32_t+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+if ((uint32_t *) 0)
|
|
+ return 0;
|
|
+if (sizeof (uint32_t))
|
|
+ return 0;
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_type_uint32_t=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_type_uint32_t=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_type_uint32_t" >&5
|
|
+echo "${ECHO_T}$ac_cv_type_uint32_t" >&6
|
|
+if test $ac_cv_type_uint32_t = yes; then
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define HAVE_UINT32_T 1
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking for int64_t" >&5
|
|
+echo $ECHO_N "checking for int64_t... $ECHO_C" >&6
|
|
+if test "${ac_cv_type_int64_t+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+if ((int64_t *) 0)
|
|
+ return 0;
|
|
+if (sizeof (int64_t))
|
|
+ return 0;
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_type_int64_t=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_type_int64_t=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_type_int64_t" >&5
|
|
+echo "${ECHO_T}$ac_cv_type_int64_t" >&6
|
|
+if test $ac_cv_type_int64_t = yes; then
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define HAVE_INT64_T 1
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking for uint64_t" >&5
|
|
+echo $ECHO_N "checking for uint64_t... $ECHO_C" >&6
|
|
+if test "${ac_cv_type_uint64_t+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+if ((uint64_t *) 0)
|
|
+ return 0;
|
|
+if (sizeof (uint64_t))
|
|
+ return 0;
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_type_uint64_t=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_type_uint64_t=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_type_uint64_t" >&5
|
|
+echo "${ECHO_T}$ac_cv_type_uint64_t" >&6
|
|
+if test $ac_cv_type_uint64_t = yes; then
|
|
+
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define HAVE_UINT64_T 1
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking for short" >&5
|
|
+echo $ECHO_N "checking for short... $ECHO_C" >&6
|
|
+if test "${ac_cv_type_short+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+if ((short *) 0)
|
|
+ return 0;
|
|
+if (sizeof (short))
|
|
+ return 0;
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_type_short=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_type_short=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5
|
|
+echo "${ECHO_T}$ac_cv_type_short" >&6
|
|
+
|
|
+echo "$as_me:$LINENO: checking size of short" >&5
|
|
+echo $ECHO_N "checking size of short... $ECHO_C" >&6
|
|
+if test "${ac_cv_sizeof_short+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test "$ac_cv_type_short" = yes; then
|
|
+ # The cast to unsigned long works around a bug in the HP C Compiler
|
|
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
|
|
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
|
|
+ # This bug is HP SR number 8606223364.
|
|
+ if test "$cross_compiling" = yes; then
|
|
+ # Depending upon the size, compute the lo and hi bounds.
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)];
|
|
+test_array [0] = 0
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_lo=0 ac_mid=0
|
|
+ while :; do
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)];
|
|
+test_array [0] = 0
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_hi=$ac_mid; break
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_lo=`expr $ac_mid + 1`
|
|
+ if test $ac_lo -le $ac_mid; then
|
|
+ ac_lo= ac_hi=
|
|
+ break
|
|
+ fi
|
|
+ ac_mid=`expr 2 '*' $ac_mid + 1`
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+ done
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)];
|
|
+test_array [0] = 0
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_hi=-1 ac_mid=-1
|
|
+ while :; do
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)];
|
|
+test_array [0] = 0
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_lo=$ac_mid; break
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_hi=`expr '(' $ac_mid ')' - 1`
|
|
+ if test $ac_mid -le $ac_hi; then
|
|
+ ac_lo= ac_hi=
|
|
+ break
|
|
+ fi
|
|
+ ac_mid=`expr 2 '*' $ac_mid`
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+ done
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_lo= ac_hi=
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+# Binary search between lo and hi bounds.
|
|
+while test "x$ac_lo" != "x$ac_hi"; do
|
|
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)];
|
|
+test_array [0] = 0
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_hi=$ac_mid
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_lo=`expr '(' $ac_mid ')' + 1`
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+done
|
|
+case $ac_lo in
|
|
+?*) ac_cv_sizeof_short=$ac_lo;;
|
|
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77
|
|
+See \`config.log' for more details." >&5
|
|
+echo "$as_me: error: cannot compute sizeof (short), 77
|
|
+See \`config.log' for more details." >&2;}
|
|
+ { (exit 1); exit 1; }; } ;;
|
|
+esac
|
|
+else
|
|
+ if test "$cross_compiling" = yes; then
|
|
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
|
|
+See \`config.log' for more details." >&5
|
|
+echo "$as_me: error: cannot run test program while cross compiling
|
|
+See \`config.log' for more details." >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+long longval () { return (long) (sizeof (short)); }
|
|
+unsigned long ulongval () { return (long) (sizeof (short)); }
|
|
+#include <stdio.h>
|
|
+#include <stdlib.h>
|
|
+int
|
|
+main ()
|
|
+{
|
|
+
|
|
+ FILE *f = fopen ("conftest.val", "w");
|
|
+ if (! f)
|
|
+ exit (1);
|
|
+ if (((long) (sizeof (short))) < 0)
|
|
+ {
|
|
+ long i = longval ();
|
|
+ if (i != ((long) (sizeof (short))))
|
|
+ exit (1);
|
|
+ fprintf (f, "%ld\n", i);
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ unsigned long i = ulongval ();
|
|
+ if (i != ((long) (sizeof (short))))
|
|
+ exit (1);
|
|
+ fprintf (f, "%lu\n", i);
|
|
+ }
|
|
+ exit (ferror (f) || fclose (f) != 0);
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_sizeof_short=`cat conftest.val`
|
|
+else
|
|
+ echo "$as_me: program exited with status $ac_status" >&5
|
|
+echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+( exit $ac_status )
|
|
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77
|
|
+See \`config.log' for more details." >&5
|
|
+echo "$as_me: error: cannot compute sizeof (short), 77
|
|
+See \`config.log' for more details." >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+fi
|
|
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+fi
|
|
+rm -f conftest.val
|
|
+else
|
|
+ ac_cv_sizeof_short=0
|
|
+fi
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5
|
|
+echo "${ECHO_T}$ac_cv_sizeof_short" >&6
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define SIZEOF_SHORT $ac_cv_sizeof_short
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+echo "$as_me:$LINENO: checking for int" >&5
|
|
+echo $ECHO_N "checking for int... $ECHO_C" >&6
|
|
+if test "${ac_cv_type_int+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+if ((int *) 0)
|
|
+ return 0;
|
|
+if (sizeof (int))
|
|
+ return 0;
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_type_int=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_type_int=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5
|
|
+echo "${ECHO_T}$ac_cv_type_int" >&6
|
|
+
|
|
+echo "$as_me:$LINENO: checking size of int" >&5
|
|
+echo $ECHO_N "checking size of int... $ECHO_C" >&6
|
|
+if test "${ac_cv_sizeof_int+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test "$ac_cv_type_int" = yes; then
|
|
+ # The cast to unsigned long works around a bug in the HP C Compiler
|
|
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
|
|
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
|
|
+ # This bug is HP SR number 8606223364.
|
|
+ if test "$cross_compiling" = yes; then
|
|
+ # Depending upon the size, compute the lo and hi bounds.
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)];
|
|
+test_array [0] = 0
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_lo=0 ac_mid=0
|
|
+ while :; do
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
|
|
+test_array [0] = 0
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_hi=$ac_mid; break
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_lo=`expr $ac_mid + 1`
|
|
+ if test $ac_lo -le $ac_mid; then
|
|
+ ac_lo= ac_hi=
|
|
+ break
|
|
+ fi
|
|
+ ac_mid=`expr 2 '*' $ac_mid + 1`
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+ done
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)];
|
|
+test_array [0] = 0
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_hi=-1 ac_mid=-1
|
|
+ while :; do
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)];
|
|
+test_array [0] = 0
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_lo=$ac_mid; break
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_hi=`expr '(' $ac_mid ')' - 1`
|
|
+ if test $ac_mid -le $ac_hi; then
|
|
+ ac_lo= ac_hi=
|
|
+ break
|
|
+ fi
|
|
+ ac_mid=`expr 2 '*' $ac_mid`
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+ done
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_lo= ac_hi=
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+# Binary search between lo and hi bounds.
|
|
+while test "x$ac_lo" != "x$ac_hi"; do
|
|
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
|
|
+test_array [0] = 0
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_hi=$ac_mid
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_lo=`expr '(' $ac_mid ')' + 1`
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+done
|
|
+case $ac_lo in
|
|
+?*) ac_cv_sizeof_int=$ac_lo;;
|
|
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
|
|
+See \`config.log' for more details." >&5
|
|
+echo "$as_me: error: cannot compute sizeof (int), 77
|
|
+See \`config.log' for more details." >&2;}
|
|
+ { (exit 1); exit 1; }; } ;;
|
|
+esac
|
|
+else
|
|
+ if test "$cross_compiling" = yes; then
|
|
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
|
|
+See \`config.log' for more details." >&5
|
|
+echo "$as_me: error: cannot run test program while cross compiling
|
|
+See \`config.log' for more details." >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+long longval () { return (long) (sizeof (int)); }
|
|
+unsigned long ulongval () { return (long) (sizeof (int)); }
|
|
+#include <stdio.h>
|
|
+#include <stdlib.h>
|
|
+int
|
|
+main ()
|
|
+{
|
|
+
|
|
+ FILE *f = fopen ("conftest.val", "w");
|
|
+ if (! f)
|
|
+ exit (1);
|
|
+ if (((long) (sizeof (int))) < 0)
|
|
+ {
|
|
+ long i = longval ();
|
|
+ if (i != ((long) (sizeof (int))))
|
|
+ exit (1);
|
|
+ fprintf (f, "%ld\n", i);
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ unsigned long i = ulongval ();
|
|
+ if (i != ((long) (sizeof (int))))
|
|
+ exit (1);
|
|
+ fprintf (f, "%lu\n", i);
|
|
+ }
|
|
+ exit (ferror (f) || fclose (f) != 0);
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_sizeof_int=`cat conftest.val`
|
|
+else
|
|
+ echo "$as_me: program exited with status $ac_status" >&5
|
|
+echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+( exit $ac_status )
|
|
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
|
|
+See \`config.log' for more details." >&5
|
|
+echo "$as_me: error: cannot compute sizeof (int), 77
|
|
+See \`config.log' for more details." >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+fi
|
|
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+fi
|
|
+rm -f conftest.val
|
|
+else
|
|
+ ac_cv_sizeof_int=0
|
|
+fi
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
|
|
+echo "${ECHO_T}$ac_cv_sizeof_int" >&6
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define SIZEOF_INT $ac_cv_sizeof_int
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+echo "$as_me:$LINENO: checking for long" >&5
|
|
+echo $ECHO_N "checking for long... $ECHO_C" >&6
|
|
+if test "${ac_cv_type_long+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+if ((long *) 0)
|
|
+ return 0;
|
|
+if (sizeof (long))
|
|
+ return 0;
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_type_long=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_type_long=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5
|
|
+echo "${ECHO_T}$ac_cv_type_long" >&6
|
|
+
|
|
+echo "$as_me:$LINENO: checking size of long" >&5
|
|
+echo $ECHO_N "checking size of long... $ECHO_C" >&6
|
|
+if test "${ac_cv_sizeof_long+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test "$ac_cv_type_long" = yes; then
|
|
+ # The cast to unsigned long works around a bug in the HP C Compiler
|
|
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
|
|
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
|
|
+ # This bug is HP SR number 8606223364.
|
|
+ if test "$cross_compiling" = yes; then
|
|
+ # Depending upon the size, compute the lo and hi bounds.
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)];
|
|
+test_array [0] = 0
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_lo=0 ac_mid=0
|
|
+ while :; do
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
|
|
+test_array [0] = 0
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_hi=$ac_mid; break
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_lo=`expr $ac_mid + 1`
|
|
+ if test $ac_lo -le $ac_mid; then
|
|
+ ac_lo= ac_hi=
|
|
+ break
|
|
+ fi
|
|
+ ac_mid=`expr 2 '*' $ac_mid + 1`
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+ done
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)];
|
|
+test_array [0] = 0
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_hi=-1 ac_mid=-1
|
|
+ while :; do
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)];
|
|
+test_array [0] = 0
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_lo=$ac_mid; break
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_hi=`expr '(' $ac_mid ')' - 1`
|
|
+ if test $ac_mid -le $ac_hi; then
|
|
+ ac_lo= ac_hi=
|
|
+ break
|
|
+ fi
|
|
+ ac_mid=`expr 2 '*' $ac_mid`
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+ done
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_lo= ac_hi=
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+# Binary search between lo and hi bounds.
|
|
+while test "x$ac_lo" != "x$ac_hi"; do
|
|
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+int
|
|
+main ()
|
|
+{
|
|
+static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
|
|
+test_array [0] = 0
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_hi=$ac_mid
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_lo=`expr '(' $ac_mid ')' + 1`
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+done
|
|
+case $ac_lo in
|
|
+?*) ac_cv_sizeof_long=$ac_lo;;
|
|
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
|
|
+See \`config.log' for more details." >&5
|
|
+echo "$as_me: error: cannot compute sizeof (long), 77
|
|
+See \`config.log' for more details." >&2;}
|
|
+ { (exit 1); exit 1; }; } ;;
|
|
+esac
|
|
+else
|
|
+ if test "$cross_compiling" = yes; then
|
|
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
|
|
+See \`config.log' for more details." >&5
|
|
+echo "$as_me: error: cannot run test program while cross compiling
|
|
+See \`config.log' for more details." >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+long longval () { return (long) (sizeof (long)); }
|
|
+unsigned long ulongval () { return (long) (sizeof (long)); }
|
|
+#include <stdio.h>
|
|
+#include <stdlib.h>
|
|
+int
|
|
+main ()
|
|
+{
|
|
+
|
|
+ FILE *f = fopen ("conftest.val", "w");
|
|
+ if (! f)
|
|
+ exit (1);
|
|
+ if (((long) (sizeof (long))) < 0)
|
|
+ {
|
|
+ long i = longval ();
|
|
+ if (i != ((long) (sizeof (long))))
|
|
+ exit (1);
|
|
+ fprintf (f, "%ld\n", i);
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ unsigned long i = ulongval ();
|
|
+ if (i != ((long) (sizeof (long))))
|
|
+ exit (1);
|
|
+ fprintf (f, "%lu\n", i);
|
|
+ }
|
|
+ exit (ferror (f) || fclose (f) != 0);
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_sizeof_long=`cat conftest.val`
|
|
+else
|
|
+ echo "$as_me: program exited with status $ac_status" >&5
|
|
+echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+( exit $ac_status )
|
|
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
|
|
+See \`config.log' for more details." >&5
|
|
+echo "$as_me: error: cannot compute sizeof (long), 77
|
|
+See \`config.log' for more details." >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+fi
|
|
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+fi
|
|
+rm -f conftest.val
|
|
+else
|
|
+ ac_cv_sizeof_long=0
|
|
+fi
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
|
|
+echo "${ECHO_T}$ac_cv_sizeof_long" >&6
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define SIZEOF_LONG $ac_cv_sizeof_long
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+
|
|
+echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
|
|
+echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6
|
|
+if test "${ac_cv_c_bigendian+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ # See if sys/param.h defines the BYTE_ORDER macro.
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <sys/types.h>
|
|
+#include <sys/param.h>
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
|
|
+ bogus endian macros
|
|
+#endif
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ # It does; now see whether it defined to BIG_ENDIAN or not.
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <sys/types.h>
|
|
+#include <sys/param.h>
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+#if BYTE_ORDER != BIG_ENDIAN
|
|
+ not big endian
|
|
+#endif
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_c_bigendian=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_c_bigendian=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+# It does not; compile a test program.
|
|
+if test "$cross_compiling" = yes; then
|
|
+ # try to guess the endianness by grepping values into an object file
|
|
+ ac_cv_c_bigendian=unknown
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
|
|
+short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
|
|
+void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }
|
|
+short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
|
|
+short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
|
|
+void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }
|
|
+int
|
|
+main ()
|
|
+{
|
|
+ _ascii (); _ebcdic ();
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
|
|
+ ac_cv_c_bigendian=yes
|
|
+fi
|
|
+if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
|
|
+ if test "$ac_cv_c_bigendian" = unknown; then
|
|
+ ac_cv_c_bigendian=no
|
|
+ else
|
|
+ # finding both strings is unlikely to happen, but who knows?
|
|
+ ac_cv_c_bigendian=unknown
|
|
+ fi
|
|
+fi
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+int
|
|
+main ()
|
|
+{
|
|
+ /* Are we little or big endian? From Harbison&Steele. */
|
|
+ union
|
|
+ {
|
|
+ long l;
|
|
+ char c[sizeof (long)];
|
|
+ } u;
|
|
+ u.l = 1;
|
|
+ exit (u.c[sizeof (long) - 1] == 1);
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_c_bigendian=no
|
|
+else
|
|
+ echo "$as_me: program exited with status $ac_status" >&5
|
|
+echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+( exit $ac_status )
|
|
+ac_cv_c_bigendian=yes
|
|
+fi
|
|
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
|
|
+echo "${ECHO_T}$ac_cv_c_bigendian" >&6
|
|
+case $ac_cv_c_bigendian in
|
|
+ yes)
|
|
+ ENDIAN=BIG
|
|
+ ;;
|
|
+ no)
|
|
+ ENDIAN=LITTLE
|
|
+ ;;
|
|
+ *)
|
|
+ { { echo "$as_me:$LINENO: error: unknown endianness
|
|
+presetting ac_cv_c_bigendian=no (or yes) will help" >&5
|
|
+echo "$as_me: error: unknown endianness
|
|
+presetting ac_cv_c_bigendian=no (or yes) will help" >&2;}
|
|
+ { (exit 1); exit 1; }; } ;;
|
|
+esac
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+# libtool stuff
|
|
+# Check whether --enable-shared or --disable-shared was given.
|
|
+if test "${enable_shared+set}" = set; then
|
|
+ enableval="$enable_shared"
|
|
+ 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
|
|
+else
|
|
+ enable_shared=yes
|
|
+fi;
|
|
+
|
|
+# Check whether --enable-static or --disable-static was given.
|
|
+if test "${enable_static+set}" = set; then
|
|
+ enableval="$enable_static"
|
|
+ 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
|
|
+else
|
|
+ enable_static=yes
|
|
+fi;
|
|
+
|
|
+# Check whether --enable-fast-install or --disable-fast-install was given.
|
|
+if test "${enable_fast_install+set}" = set; then
|
|
+ enableval="$enable_fast_install"
|
|
+ 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
|
|
+else
|
|
+ enable_fast_install=yes
|
|
+fi;
|
|
+
|
|
+# Make sure we can run config.sub.
|
|
+$ac_config_sub sun4 >/dev/null 2>&1 ||
|
|
+ { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
|
|
+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+
|
|
+echo "$as_me:$LINENO: checking build system type" >&5
|
|
+echo $ECHO_N "checking build system type... $ECHO_C" >&6
|
|
+if test "${ac_cv_build+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ ac_cv_build_alias=$build_alias
|
|
+test -z "$ac_cv_build_alias" &&
|
|
+ ac_cv_build_alias=`$ac_config_guess`
|
|
+test -z "$ac_cv_build_alias" &&
|
|
+ { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
|
|
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
|
|
+ { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
|
|
+echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_build" >&5
|
|
+echo "${ECHO_T}$ac_cv_build" >&6
|
|
+build=$ac_cv_build
|
|
+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
|
|
+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
|
|
+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
|
|
+
|
|
+
|
|
+echo "$as_me:$LINENO: checking host system type" >&5
|
|
+echo $ECHO_N "checking host system type... $ECHO_C" >&6
|
|
+if test "${ac_cv_host+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ ac_cv_host_alias=$host_alias
|
|
+test -z "$ac_cv_host_alias" &&
|
|
+ ac_cv_host_alias=$ac_cv_build_alias
|
|
+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
|
|
+ { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
|
|
+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_host" >&5
|
|
+echo "${ECHO_T}$ac_cv_host" >&6
|
|
+host=$ac_cv_host
|
|
+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
|
|
+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
|
|
+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
|
|
+
|
|
+
|
|
+echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
|
|
+echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6
|
|
+if test "${lt_cv_path_SED+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ # 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
|
|
+
|
|
+fi
|
|
+
|
|
+SED=$lt_cv_path_SED
|
|
+
|
|
+echo "$as_me:$LINENO: result: $SED" >&5
|
|
+echo "${ECHO_T}$SED" >&6
|
|
+
|
|
+
|
|
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
|
|
+if test "${with_gnu_ld+set}" = set; then
|
|
+ withval="$with_gnu_ld"
|
|
+ test "$withval" = no || with_gnu_ld=yes
|
|
+else
|
|
+ with_gnu_ld=no
|
|
+fi;
|
|
+ac_prog=ld
|
|
+if test "$GCC" = yes; then
|
|
+ # Check if gcc -print-prog-name=ld gives a path.
|
|
+ echo "$as_me:$LINENO: checking for ld used by $CC" >&5
|
|
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
|
|
+ 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
|
|
+ echo "$as_me:$LINENO: checking for GNU ld" >&5
|
|
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: checking for non-GNU ld" >&5
|
|
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
|
|
+fi
|
|
+if test "${lt_cv_path_LD+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ 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
|
|
+fi
|
|
+
|
|
+LD="$lt_cv_path_LD"
|
|
+if test -n "$LD"; then
|
|
+ echo "$as_me:$LINENO: result: $LD" >&5
|
|
+echo "${ECHO_T}$LD" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
|
|
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
|
|
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
|
|
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ # 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
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
|
|
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
|
|
+with_gnu_ld=$lt_cv_prog_gnu_ld
|
|
+
|
|
+
|
|
+echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
|
|
+echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
|
|
+if test "${lt_cv_ld_reload_flag+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ lt_cv_ld_reload_flag='-r'
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
|
|
+echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
|
|
+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
|
|
+
|
|
+echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
|
|
+echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
|
|
+if test "${lt_cv_path_NM+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ 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
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
|
|
+echo "${ECHO_T}$lt_cv_path_NM" >&6
|
|
+NM="$lt_cv_path_NM"
|
|
+
|
|
+echo "$as_me:$LINENO: checking whether ln -s works" >&5
|
|
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
|
|
+LN_S=$as_ln_s
|
|
+if test "$LN_S" = "ln -s"; then
|
|
+ echo "$as_me:$LINENO: result: yes" >&5
|
|
+echo "${ECHO_T}yes" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no, using $LN_S" >&5
|
|
+echo "${ECHO_T}no, using $LN_S" >&6
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5
|
|
+echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6
|
|
+if test "${lt_cv_deplibs_check_method+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ 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'.
|
|
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
|
|
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
|
|
+ ;;
|
|
+
|
|
+darwin* | rhapsody*)
|
|
+ lt_cv_deplibs_check_method=pass_all
|
|
+ ;;
|
|
+
|
|
+freebsd* | kfreebsd*-gnu | 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
|
|
+ ;;
|
|
+
|
|
+interix3*)
|
|
+ # 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*)
|
|
+ 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
|
|
+ ;;
|
|
+
|
|
+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
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
|
|
+echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
|
|
+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
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+# 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
|
|
+
|
|
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
|
|
+if test "${enable_libtool_lock+set}" = set; then
|
|
+ enableval="$enable_libtool_lock"
|
|
+
|
|
+fi;
|
|
+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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; 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 6826 "configure"' > conftest.$ac_ext
|
|
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; 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-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
|
|
+ # Find out which ABI we are using.
|
|
+ echo 'int i;' > conftest.$ac_ext
|
|
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; then
|
|
+ case `/usr/bin/file conftest.o` in
|
|
+ *32-bit*)
|
|
+ case $host in
|
|
+ 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-*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"
|
|
+ echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
|
|
+echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
|
|
+if test "${lt_cv_cc_needs_belf+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ ac_ext=c
|
|
+ac_cpp='$CPP $CPPFLAGS'
|
|
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
+
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ lt_cv_cc_needs_belf=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+lt_cv_cc_needs_belf=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext \
|
|
+ conftest$ac_exeext conftest.$ac_ext
|
|
+ ac_ext=c
|
|
+ac_cpp='$CPP $CPPFLAGS'
|
|
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
|
|
+echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
|
|
+ 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; 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*
|
|
+ ;;
|
|
+
|
|
+
|
|
+esac
|
|
+
|
|
+need_locks="$enable_libtool_lock"
|
|
+
|
|
+
|
|
+
|
|
+for ac_header in dlfcn.h
|
|
+do
|
|
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
|
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
|
|
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
|
|
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
|
|
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
|
|
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
|
|
+else
|
|
+ # Is the header compilable?
|
|
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
|
|
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_includes_default
|
|
+#include <$ac_header>
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_header_compiler=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_header_compiler=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
|
|
+echo "${ECHO_T}$ac_header_compiler" >&6
|
|
+
|
|
+# Is the header present?
|
|
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
|
|
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <$ac_header>
|
|
+_ACEOF
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
|
|
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } >/dev/null; then
|
|
+ if test -s conftest.err; then
|
|
+ ac_cpp_err=$ac_c_preproc_warn_flag
|
|
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
|
|
+ else
|
|
+ ac_cpp_err=
|
|
+ fi
|
|
+else
|
|
+ ac_cpp_err=yes
|
|
+fi
|
|
+if test -z "$ac_cpp_err"; then
|
|
+ ac_header_preproc=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ ac_header_preproc=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_ext
|
|
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
|
|
+echo "${ECHO_T}$ac_header_preproc" >&6
|
|
+
|
|
+# So? What about this header?
|
|
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
|
|
+ yes:no: )
|
|
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
|
|
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
|
|
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
|
|
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
|
|
+ ac_header_preproc=yes
|
|
+ ;;
|
|
+ no:yes:* )
|
|
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
|
|
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
|
|
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
|
|
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
|
|
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
|
|
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
|
|
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
|
|
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
|
|
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
|
|
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
|
|
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
|
|
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
|
|
+ (
|
|
+ cat <<\_ASBOX
|
|
+## ------------------------------------- ##
|
|
+## Report this to eddie.wai@broadcom.com ##
|
|
+## ------------------------------------- ##
|
|
+_ASBOX
|
|
+ ) |
|
|
+ sed "s/^/$as_me: WARNING: /" >&2
|
|
+ ;;
|
|
+esac
|
|
+echo "$as_me:$LINENO: checking for $ac_header" >&5
|
|
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
|
|
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ eval "$as_ac_Header=\$ac_header_preproc"
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
|
|
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
|
|
+
|
|
+fi
|
|
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
|
|
+ cat >>confdefs.h <<_ACEOF
|
|
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
|
+_ACEOF
|
|
+
|
|
+fi
|
|
+
|
|
+done
|
|
+
|
|
+ac_ext=cc
|
|
+ac_cpp='$CXXCPP $CPPFLAGS'
|
|
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
|
|
+if test -n "$ac_tool_prefix"; then
|
|
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
|
|
+ do
|
|
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
|
|
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_CXX+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$CXX"; then
|
|
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+fi
|
|
+fi
|
|
+CXX=$ac_cv_prog_CXX
|
|
+if test -n "$CXX"; then
|
|
+ echo "$as_me:$LINENO: result: $CXX" >&5
|
|
+echo "${ECHO_T}$CXX" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+ test -n "$CXX" && break
|
|
+ done
|
|
+fi
|
|
+if test -z "$CXX"; then
|
|
+ ac_ct_CXX=$CXX
|
|
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
|
|
+do
|
|
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
|
|
+set dummy $ac_prog; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$ac_ct_CXX"; then
|
|
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+fi
|
|
+fi
|
|
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
|
|
+if test -n "$ac_ct_CXX"; then
|
|
+ echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
|
|
+echo "${ECHO_T}$ac_ct_CXX" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+ test -n "$ac_ct_CXX" && break
|
|
+done
|
|
+test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
|
|
+
|
|
+ CXX=$ac_ct_CXX
|
|
+fi
|
|
+
|
|
+
|
|
+# Provide some information about the compiler.
|
|
+echo "$as_me:$LINENO:" \
|
|
+ "checking for C++ compiler version" >&5
|
|
+ac_compiler=`set X $ac_compile; echo $2`
|
|
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
|
|
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }
|
|
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
|
|
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }
|
|
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
|
|
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }
|
|
+
|
|
+echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
|
|
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
|
|
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+#ifndef __GNUC__
|
|
+ choke me
|
|
+#endif
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_cxx_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_compiler_gnu=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_compiler_gnu=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
|
|
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
|
|
+GXX=`test $ac_compiler_gnu = yes && echo yes`
|
|
+ac_test_CXXFLAGS=${CXXFLAGS+set}
|
|
+ac_save_CXXFLAGS=$CXXFLAGS
|
|
+CXXFLAGS="-g"
|
|
+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
|
|
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_cxx_g+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_cxx_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_prog_cxx_g=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_prog_cxx_g=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
|
|
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
|
|
+if test "$ac_test_CXXFLAGS" = set; then
|
|
+ CXXFLAGS=$ac_save_CXXFLAGS
|
|
+elif test $ac_cv_prog_cxx_g = yes; then
|
|
+ if test "$GXX" = yes; then
|
|
+ CXXFLAGS="-g -O2"
|
|
+ else
|
|
+ CXXFLAGS="-g"
|
|
+ fi
|
|
+else
|
|
+ if test "$GXX" = yes; then
|
|
+ CXXFLAGS="-O2"
|
|
+ else
|
|
+ CXXFLAGS=
|
|
+ fi
|
|
+fi
|
|
+for ac_declaration in \
|
|
+ '' \
|
|
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
|
|
+ 'extern "C" void std::exit (int); using std::exit;' \
|
|
+ 'extern "C" void exit (int) throw ();' \
|
|
+ 'extern "C" void exit (int);' \
|
|
+ 'void exit (int);'
|
|
+do
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_declaration
|
|
+#include <stdlib.h>
|
|
+int
|
|
+main ()
|
|
+{
|
|
+exit (42);
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_cxx_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ :
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+continue
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+$ac_declaration
|
|
+int
|
|
+main ()
|
|
+{
|
|
+exit (42);
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_cxx_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ break
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+done
|
|
+rm -f conftest*
|
|
+if test -n "$ac_declaration"; then
|
|
+ echo '#ifdef __cplusplus' >>confdefs.h
|
|
+ echo $ac_declaration >>confdefs.h
|
|
+ echo '#endif' >>confdefs.h
|
|
+fi
|
|
+
|
|
+ac_ext=cc
|
|
+ac_cpp='$CXXCPP $CPPFLAGS'
|
|
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
|
|
+
|
|
+depcc="$CXX" am_compiler_list=
|
|
+
|
|
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
|
|
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
|
|
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
|
|
+ # We make a subdir and do the tests there. Otherwise we can end up
|
|
+ # making bogus files that we don't know about and never remove. For
|
|
+ # instance it was reported that on HP-UX the gcc test will end up
|
|
+ # making a dummy file named `D' -- because `-MD' means `put the output
|
|
+ # in D'.
|
|
+ mkdir conftest.dir
|
|
+ # Copy depcomp to subdir because otherwise we won't find it if we're
|
|
+ # using a relative directory.
|
|
+ cp "$am_depcomp" conftest.dir
|
|
+ cd conftest.dir
|
|
+ # We will build objects and dependencies in a subdirectory because
|
|
+ # it helps to detect inapplicable dependency modes. For instance
|
|
+ # both Tru64's cc and ICC support -MD to output dependencies as a
|
|
+ # side effect of compilation, but ICC will put the dependencies in
|
|
+ # the current directory while Tru64 will put them in the object
|
|
+ # directory.
|
|
+ mkdir sub
|
|
+
|
|
+ am_cv_CXX_dependencies_compiler_type=none
|
|
+ if test "$am_compiler_list" = ""; then
|
|
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
|
|
+ fi
|
|
+ for depmode in $am_compiler_list; do
|
|
+ # Setup a source with many dependencies, because some compilers
|
|
+ # like to wrap large dependency lists on column 80 (with \), and
|
|
+ # we should not choose a depcomp mode which is confused by this.
|
|
+ #
|
|
+ # We need to recreate these files for each test, as the compiler may
|
|
+ # overwrite some of them when testing with obscure command lines.
|
|
+ # This happens at least with the AIX C compiler.
|
|
+ : > sub/conftest.c
|
|
+ for i in 1 2 3 4 5 6; do
|
|
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
|
|
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
|
|
+ # Solaris 8's {/usr,}/bin/sh.
|
|
+ touch sub/conftst$i.h
|
|
+ done
|
|
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
|
|
+
|
|
+ case $depmode in
|
|
+ nosideeffect)
|
|
+ # after this tag, mechanisms are not by side-effect, so they'll
|
|
+ # only be used when explicitly requested
|
|
+ if test "x$enable_dependency_tracking" = xyes; then
|
|
+ continue
|
|
+ else
|
|
+ break
|
|
+ fi
|
|
+ ;;
|
|
+ none) break ;;
|
|
+ esac
|
|
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
|
|
+ # mode. It turns out that the SunPro C++ compiler does not properly
|
|
+ # handle `-M -o', and we need to detect this.
|
|
+ if depmode=$depmode \
|
|
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
|
|
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
|
|
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
|
|
+ >/dev/null 2>conftest.err &&
|
|
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
|
|
+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
|
|
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
|
|
+ # icc doesn't choke on unknown options, it will just issue warnings
|
|
+ # or remarks (even with -Werror). So we grep stderr for any message
|
|
+ # that says an option was ignored or not supported.
|
|
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
|
|
+ # icc: Command line warning: ignoring option '-M'; no argument required
|
|
+ # The diagnosis changed in icc 8.0:
|
|
+ # icc: Command line remark: option '-MP' not supported
|
|
+ if (grep 'ignoring option' conftest.err ||
|
|
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
|
|
+ am_cv_CXX_dependencies_compiler_type=$depmode
|
|
+ break
|
|
+ fi
|
|
+ fi
|
|
+ done
|
|
+
|
|
+ cd ..
|
|
+ rm -rf conftest.dir
|
|
+else
|
|
+ am_cv_CXX_dependencies_compiler_type=none
|
|
+fi
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
|
|
+echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6
|
|
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
|
|
+
|
|
+
|
|
+
|
|
+if
|
|
+ test "x$enable_dependency_tracking" != xno \
|
|
+ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
|
|
+ am__fastdepCXX_TRUE=
|
|
+ am__fastdepCXX_FALSE='#'
|
|
+else
|
|
+ am__fastdepCXX_TRUE='#'
|
|
+ am__fastdepCXX_FALSE=
|
|
+fi
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
|
|
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
|
|
+ (test "X$CXX" != "Xg++"))) ; then
|
|
+ ac_ext=cc
|
|
+ac_cpp='$CXXCPP $CPPFLAGS'
|
|
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
|
|
+echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
|
|
+echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
|
|
+if test -z "$CXXCPP"; then
|
|
+ if test "${ac_cv_prog_CXXCPP+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ # Double quotes because CXXCPP needs to be expanded
|
|
+ for CXXCPP in "$CXX -E" "/lib/cpp"
|
|
+ do
|
|
+ ac_preproc_ok=false
|
|
+for ac_cxx_preproc_warn_flag in '' yes
|
|
+do
|
|
+ # Use a header file that comes with gcc, so configuring glibc
|
|
+ # with a fresh cross-compiler works.
|
|
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
|
|
+ # <limits.h> exists even on freestanding compilers.
|
|
+ # On the NeXT, cc -E runs the code through the compiler's parser,
|
|
+ # not just through cpp. "Syntax error" is here to catch this case.
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#ifdef __STDC__
|
|
+# include <limits.h>
|
|
+#else
|
|
+# include <assert.h>
|
|
+#endif
|
|
+ Syntax error
|
|
+_ACEOF
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
|
|
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } >/dev/null; then
|
|
+ if test -s conftest.err; then
|
|
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
|
|
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
|
|
+ else
|
|
+ ac_cpp_err=
|
|
+ fi
|
|
+else
|
|
+ ac_cpp_err=yes
|
|
+fi
|
|
+if test -z "$ac_cpp_err"; then
|
|
+ :
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ # Broken: fails on valid input.
|
|
+continue
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_ext
|
|
+
|
|
+ # OK, works on sane cases. Now check whether non-existent headers
|
|
+ # can be detected and how.
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <ac_nonexistent.h>
|
|
+_ACEOF
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
|
|
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } >/dev/null; then
|
|
+ if test -s conftest.err; then
|
|
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
|
|
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
|
|
+ else
|
|
+ ac_cpp_err=
|
|
+ fi
|
|
+else
|
|
+ ac_cpp_err=yes
|
|
+fi
|
|
+if test -z "$ac_cpp_err"; then
|
|
+ # Broken: success on invalid input.
|
|
+continue
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ # Passes both tests.
|
|
+ac_preproc_ok=:
|
|
+break
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_ext
|
|
+
|
|
+done
|
|
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
|
|
+rm -f conftest.err conftest.$ac_ext
|
|
+if $ac_preproc_ok; then
|
|
+ break
|
|
+fi
|
|
+
|
|
+ done
|
|
+ ac_cv_prog_CXXCPP=$CXXCPP
|
|
+
|
|
+fi
|
|
+ CXXCPP=$ac_cv_prog_CXXCPP
|
|
+else
|
|
+ ac_cv_prog_CXXCPP=$CXXCPP
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $CXXCPP" >&5
|
|
+echo "${ECHO_T}$CXXCPP" >&6
|
|
+ac_preproc_ok=false
|
|
+for ac_cxx_preproc_warn_flag in '' yes
|
|
+do
|
|
+ # Use a header file that comes with gcc, so configuring glibc
|
|
+ # with a fresh cross-compiler works.
|
|
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
|
|
+ # <limits.h> exists even on freestanding compilers.
|
|
+ # On the NeXT, cc -E runs the code through the compiler's parser,
|
|
+ # not just through cpp. "Syntax error" is here to catch this case.
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#ifdef __STDC__
|
|
+# include <limits.h>
|
|
+#else
|
|
+# include <assert.h>
|
|
+#endif
|
|
+ Syntax error
|
|
+_ACEOF
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
|
|
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } >/dev/null; then
|
|
+ if test -s conftest.err; then
|
|
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
|
|
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
|
|
+ else
|
|
+ ac_cpp_err=
|
|
+ fi
|
|
+else
|
|
+ ac_cpp_err=yes
|
|
+fi
|
|
+if test -z "$ac_cpp_err"; then
|
|
+ :
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ # Broken: fails on valid input.
|
|
+continue
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_ext
|
|
+
|
|
+ # OK, works on sane cases. Now check whether non-existent headers
|
|
+ # can be detected and how.
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+#include <ac_nonexistent.h>
|
|
+_ACEOF
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
|
|
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } >/dev/null; then
|
|
+ if test -s conftest.err; then
|
|
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
|
|
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
|
|
+ else
|
|
+ ac_cpp_err=
|
|
+ fi
|
|
+else
|
|
+ ac_cpp_err=yes
|
|
+fi
|
|
+if test -z "$ac_cpp_err"; then
|
|
+ # Broken: success on invalid input.
|
|
+continue
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ # Passes both tests.
|
|
+ac_preproc_ok=:
|
|
+break
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_ext
|
|
+
|
|
+done
|
|
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
|
|
+rm -f conftest.err conftest.$ac_ext
|
|
+if $ac_preproc_ok; then
|
|
+ :
|
|
+else
|
|
+ { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
|
|
+See \`config.log' for more details." >&5
|
|
+echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
|
|
+See \`config.log' for more details." >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+fi
|
|
+
|
|
+ac_ext=cc
|
|
+ac_cpp='$CXXCPP $CPPFLAGS'
|
|
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
|
|
+
|
|
+fi
|
|
+
|
|
+
|
|
+ac_ext=f
|
|
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
|
|
+if test -n "$ac_tool_prefix"; then
|
|
+ for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
|
|
+ do
|
|
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
|
|
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_F77+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$F77"; then
|
|
+ ac_cv_prog_F77="$F77" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_F77="$ac_tool_prefix$ac_prog"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+fi
|
|
+fi
|
|
+F77=$ac_cv_prog_F77
|
|
+if test -n "$F77"; then
|
|
+ echo "$as_me:$LINENO: result: $F77" >&5
|
|
+echo "${ECHO_T}$F77" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+ test -n "$F77" && break
|
|
+ done
|
|
+fi
|
|
+if test -z "$F77"; then
|
|
+ ac_ct_F77=$F77
|
|
+ for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
|
|
+do
|
|
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
|
|
+set dummy $ac_prog; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_ac_ct_F77+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$ac_ct_F77"; then
|
|
+ ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_ac_ct_F77="$ac_prog"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+fi
|
|
+fi
|
|
+ac_ct_F77=$ac_cv_prog_ac_ct_F77
|
|
+if test -n "$ac_ct_F77"; then
|
|
+ echo "$as_me:$LINENO: result: $ac_ct_F77" >&5
|
|
+echo "${ECHO_T}$ac_ct_F77" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+ test -n "$ac_ct_F77" && break
|
|
+done
|
|
+
|
|
+ F77=$ac_ct_F77
|
|
+fi
|
|
+
|
|
+
|
|
+# Provide some information about the compiler.
|
|
+echo "$as_me:7952:" \
|
|
+ "checking for Fortran 77 compiler version" >&5
|
|
+ac_compiler=`set X $ac_compile; echo $2`
|
|
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
|
|
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }
|
|
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
|
|
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }
|
|
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
|
|
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }
|
|
+rm -f a.out
|
|
+
|
|
+# If we don't use `.F' as extension, the preprocessor is not run on the
|
|
+# input file. (Note that this only needs to work for GNU compilers.)
|
|
+ac_save_ext=$ac_ext
|
|
+ac_ext=F
|
|
+echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5
|
|
+echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6
|
|
+if test "${ac_cv_f77_compiler_gnu+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+ program main
|
|
+#ifndef __GNUC__
|
|
+ choke me
|
|
+#endif
|
|
+
|
|
+ end
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_f77_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_compiler_gnu=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_compiler_gnu=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+ac_cv_f77_compiler_gnu=$ac_compiler_gnu
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5
|
|
+echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6
|
|
+ac_ext=$ac_save_ext
|
|
+ac_test_FFLAGS=${FFLAGS+set}
|
|
+ac_save_FFLAGS=$FFLAGS
|
|
+FFLAGS=
|
|
+echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5
|
|
+echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_f77_g+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ FFLAGS=-g
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
+ program main
|
|
+
|
|
+ end
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_f77_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest.$ac_objext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_prog_f77_g=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_prog_f77_g=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5
|
|
+echo "${ECHO_T}$ac_cv_prog_f77_g" >&6
|
|
+if test "$ac_test_FFLAGS" = set; then
|
|
+ FFLAGS=$ac_save_FFLAGS
|
|
+elif test $ac_cv_prog_f77_g = yes; then
|
|
+ if test "x$ac_cv_f77_compiler_gnu" = xyes; then
|
|
+ FFLAGS="-g -O2"
|
|
+ else
|
|
+ FFLAGS="-g"
|
|
+ fi
|
|
+else
|
|
+ if test "x$ac_cv_f77_compiler_gnu" = xyes; then
|
|
+ FFLAGS="-O2"
|
|
+ else
|
|
+ FFLAGS=
|
|
+ fi
|
|
+fi
|
|
+
|
|
+G77=`test $ac_compiler_gnu = yes && echo yes`
|
|
+ac_ext=c
|
|
+ac_cpp='$CPP $CPPFLAGS'
|
|
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
+
|
|
+
|
|
+
|
|
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
|
|
+
|
|
+# find the maximum length of command line arguments
|
|
+echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
|
|
+echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6
|
|
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ 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
|
|
+ ;;
|
|
+ *)
|
|
+ # 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.
|
|
+ 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`
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+fi
|
|
+
|
|
+if test -n $lt_cv_sys_max_cmd_len ; then
|
|
+ echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
|
|
+echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: none" >&5
|
|
+echo "${ECHO_T}none" >&6
|
|
+fi
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+# Check for command to grab the raw symbol name followed by C symbol from nm.
|
|
+echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
|
|
+echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6
|
|
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+
|
|
+# 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*)
|
|
+ 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; then
|
|
+ # Now try to grab the symbols.
|
|
+ nlist=conftest.nm
|
|
+ if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
|
|
+ (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } && 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_prog_compiler_no_builtin_flag"
|
|
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } && 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" >&5
|
|
+ fi
|
|
+ else
|
|
+ echo "cannot find nm_test_var in $nlist" >&5
|
|
+ fi
|
|
+ else
|
|
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
|
|
+ fi
|
|
+ else
|
|
+ echo "$progname: failed program was:" >&5
|
|
+ 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
|
|
+
|
|
+fi
|
|
+
|
|
+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
|
|
+ echo "$as_me:$LINENO: result: failed" >&5
|
|
+echo "${ECHO_T}failed" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: ok" >&5
|
|
+echo "${ECHO_T}ok" >&6
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking for objdir" >&5
|
|
+echo $ECHO_N "checking for objdir... $ECHO_C" >&6
|
|
+if test "${lt_cv_objdir+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ 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
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
|
|
+echo "${ECHO_T}$lt_cv_objdir" >&6
|
|
+objdir=$lt_cv_objdir
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+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"
|
|
+
|
|
+if test -n "$ac_tool_prefix"; then
|
|
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
|
|
+set dummy ${ac_tool_prefix}ar; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_AR+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$AR"; then
|
|
+ ac_cv_prog_AR="$AR" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+fi
|
|
+fi
|
|
+AR=$ac_cv_prog_AR
|
|
+if test -n "$AR"; then
|
|
+ echo "$as_me:$LINENO: result: $AR" >&5
|
|
+echo "${ECHO_T}$AR" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+fi
|
|
+if test -z "$ac_cv_prog_AR"; then
|
|
+ ac_ct_AR=$AR
|
|
+ # Extract the first word of "ar", so it can be a program name with args.
|
|
+set dummy ar; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$ac_ct_AR"; then
|
|
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_ac_ct_AR="ar"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+ test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false"
|
|
+fi
|
|
+fi
|
|
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
|
|
+if test -n "$ac_ct_AR"; then
|
|
+ echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
|
|
+echo "${ECHO_T}$ac_ct_AR" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+ AR=$ac_ct_AR
|
|
+else
|
|
+ AR="$ac_cv_prog_AR"
|
|
+fi
|
|
+
|
|
+if test -n "$ac_tool_prefix"; then
|
|
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
|
|
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_RANLIB+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$RANLIB"; then
|
|
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+fi
|
|
+fi
|
|
+RANLIB=$ac_cv_prog_RANLIB
|
|
+if test -n "$RANLIB"; then
|
|
+ echo "$as_me:$LINENO: result: $RANLIB" >&5
|
|
+echo "${ECHO_T}$RANLIB" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+fi
|
|
+if test -z "$ac_cv_prog_RANLIB"; then
|
|
+ ac_ct_RANLIB=$RANLIB
|
|
+ # Extract the first word of "ranlib", so it can be a program name with args.
|
|
+set dummy ranlib; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$ac_ct_RANLIB"; then
|
|
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+ test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
|
|
+fi
|
|
+fi
|
|
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
|
|
+if test -n "$ac_ct_RANLIB"; then
|
|
+ echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
|
|
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+ RANLIB=$ac_ct_RANLIB
|
|
+else
|
|
+ RANLIB="$ac_cv_prog_RANLIB"
|
|
+fi
|
|
+
|
|
+if test -n "$ac_tool_prefix"; then
|
|
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
|
|
+set dummy ${ac_tool_prefix}strip; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_STRIP+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$STRIP"; then
|
|
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+fi
|
|
+fi
|
|
+STRIP=$ac_cv_prog_STRIP
|
|
+if test -n "$STRIP"; then
|
|
+ echo "$as_me:$LINENO: result: $STRIP" >&5
|
|
+echo "${ECHO_T}$STRIP" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+fi
|
|
+if test -z "$ac_cv_prog_STRIP"; then
|
|
+ ac_ct_STRIP=$STRIP
|
|
+ # Extract the first word of "strip", so it can be a program name with args.
|
|
+set dummy strip; ac_word=$2
|
|
+echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test -n "$ac_ct_STRIP"; then
|
|
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
|
|
+else
|
|
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
+ ac_cv_prog_ac_ct_STRIP="strip"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+
|
|
+ test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
|
|
+fi
|
|
+fi
|
|
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
|
|
+if test -n "$ac_ct_STRIP"; then
|
|
+ echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
|
|
+echo "${ECHO_T}$ac_ct_STRIP" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+ STRIP=$ac_ct_STRIP
|
|
+else
|
|
+ STRIP="$ac_cv_prog_STRIP"
|
|
+fi
|
|
+
|
|
+
|
|
+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_deplibs'
|
|
+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
|
|
+
|
|
+for cc_temp in $compiler""; 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-%%"`
|
|
+
|
|
+
|
|
+# 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
|
|
+ echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
|
|
+echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
|
|
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ 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
|
|
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
|
|
+ for ac_dir in $ac_dummy; do
|
|
+ IFS="$lt_save_ifs"
|
|
+ test -z "$ac_dir" && ac_dir=.
|
|
+ if test -f $ac_dir/${ac_tool_prefix}file; then
|
|
+ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
|
|
+ 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
|
|
+fi
|
|
+
|
|
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
|
|
+if test -n "$MAGIC_CMD"; then
|
|
+ echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
|
|
+echo "${ECHO_T}$MAGIC_CMD" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+if test -z "$lt_cv_path_MAGIC_CMD"; then
|
|
+ if test -n "$ac_tool_prefix"; then
|
|
+ echo "$as_me:$LINENO: checking for file" >&5
|
|
+echo $ECHO_N "checking for file... $ECHO_C" >&6
|
|
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ 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
|
|
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
|
|
+ for ac_dir in $ac_dummy; do
|
|
+ IFS="$lt_save_ifs"
|
|
+ test -z "$ac_dir" && ac_dir=.
|
|
+ if test -f $ac_dir/file; then
|
|
+ lt_cv_path_MAGIC_CMD="$ac_dir/file"
|
|
+ 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
|
|
+fi
|
|
+
|
|
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
|
|
+if test -n "$MAGIC_CMD"; then
|
|
+ echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
|
|
+echo "${ECHO_T}$MAGIC_CMD" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+
|
|
+ else
|
|
+ MAGIC_CMD=:
|
|
+ fi
|
|
+fi
|
|
+
|
|
+ fi
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+enable_dlopen=yes
|
|
+enable_win32_dll=no
|
|
+
|
|
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
|
|
+if test "${enable_libtool_lock+set}" = set; then
|
|
+ enableval="$enable_libtool_lock"
|
|
+
|
|
+fi;
|
|
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
|
|
+
|
|
+
|
|
+# Check whether --with-pic or --without-pic was given.
|
|
+if test "${with_pic+set}" = set; then
|
|
+ withval="$with_pic"
|
|
+ pic_mode="$withval"
|
|
+else
|
|
+ pic_mode=default
|
|
+fi;
|
|
+test -z "$pic_mode" && pic_mode=default
|
|
+
|
|
+# Use C for the default configuration in the libtool script
|
|
+tagname=
|
|
+lt_save_CC="$CC"
|
|
+ac_ext=c
|
|
+ac_cpp='$CPP $CPPFLAGS'
|
|
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
+
|
|
+
|
|
+# Source file extension for C test sources.
|
|
+ac_ext=c
|
|
+
|
|
+# Object file extension for compiled C test sources.
|
|
+objext=o
|
|
+objext=$objext
|
|
+
|
|
+# Code to be used in simple compile tests
|
|
+lt_simple_compile_test_code="int some_variable = 0;\n"
|
|
+
|
|
+# Code to be used in simple link tests
|
|
+lt_simple_link_test_code='int main(){return(0);}\n'
|
|
+
|
|
+
|
|
+# 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
|
|
+
|
|
+
|
|
+# save warnings/boilerplate of simple test code
|
|
+ac_outfile=conftest.$ac_objext
|
|
+printf "$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*
|
|
+
|
|
+ac_outfile=conftest.$ac_objext
|
|
+printf "$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_prog_compiler_no_builtin_flag=
|
|
+
|
|
+if test "$GCC" = yes; then
|
|
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin'
|
|
+
|
|
+
|
|
+echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
|
|
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
|
|
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ lt_cv_prog_compiler_rtti_exceptions=no
|
|
+ ac_outfile=conftest.$ac_objext
|
|
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
|
|
+ lt_compiler_flag="-fno-rtti -fno-exceptions"
|
|
+ # 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:9015: $lt_compile\"" >&5)
|
|
+ (eval "$lt_compile" 2>conftest.err)
|
|
+ ac_status=$?
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:9019: \$? = $ac_status" >&5
|
|
+ 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
|
|
+ lt_cv_prog_compiler_rtti_exceptions=yes
|
|
+ fi
|
|
+ fi
|
|
+ $rm conftest*
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
|
|
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
|
|
+
|
|
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
|
|
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
|
|
+else
|
|
+ :
|
|
+fi
|
|
+
|
|
+fi
|
|
+
|
|
+lt_prog_compiler_wl=
|
|
+lt_prog_compiler_pic=
|
|
+lt_prog_compiler_static=
|
|
+
|
|
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
|
|
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
|
|
+
|
|
+ if test "$GCC" = yes; then
|
|
+ lt_prog_compiler_wl='-Wl,'
|
|
+ lt_prog_compiler_static='-static'
|
|
+
|
|
+ case $host_os in
|
|
+ aix*)
|
|
+ # All AIX code is PIC.
|
|
+ if test "$host_cpu" = ia64; then
|
|
+ # AIX 5 now supports IA64 processor
|
|
+ lt_prog_compiler_static='-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_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
|
|
+ ;;
|
|
+
|
|
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
|
|
+ # PIC is the default for these OSes.
|
|
+ ;;
|
|
+
|
|
+ mingw* | 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_prog_compiler_pic='-DDLL_EXPORT'
|
|
+ ;;
|
|
+
|
|
+ darwin* | rhapsody*)
|
|
+ # PIC is the default on this platform
|
|
+ # Common symbols not allowed in MH_DYLIB files
|
|
+ lt_prog_compiler_pic='-fno-common'
|
|
+ ;;
|
|
+
|
|
+ interix3*)
|
|
+ # 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_prog_compiler_can_build_shared=no
|
|
+ enable_shared=no
|
|
+ ;;
|
|
+
|
|
+ sysv4*MP*)
|
|
+ if test -d /usr/nec; then
|
|
+ lt_prog_compiler_pic=-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_prog_compiler_pic='-fPIC'
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ lt_prog_compiler_pic='-fPIC'
|
|
+ ;;
|
|
+ esac
|
|
+ else
|
|
+ # PORTME Check for flag to pass linker flags through the system compiler.
|
|
+ case $host_os in
|
|
+ aix*)
|
|
+ lt_prog_compiler_wl='-Wl,'
|
|
+ if test "$host_cpu" = ia64; then
|
|
+ # AIX 5 now supports IA64 processor
|
|
+ lt_prog_compiler_static='-Bstatic'
|
|
+ else
|
|
+ lt_prog_compiler_static='-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_prog_compiler_pic='-qnocommon'
|
|
+ lt_prog_compiler_wl='-Wl,'
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+
|
|
+ mingw* | 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_prog_compiler_pic='-DDLL_EXPORT'
|
|
+ ;;
|
|
+
|
|
+ hpux9* | hpux10* | hpux11*)
|
|
+ lt_prog_compiler_wl='-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_prog_compiler_pic='+Z'
|
|
+ ;;
|
|
+ esac
|
|
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
|
|
+ lt_prog_compiler_static='${wl}-a ${wl}archive'
|
|
+ ;;
|
|
+
|
|
+ irix5* | irix6* | nonstopux*)
|
|
+ lt_prog_compiler_wl='-Wl,'
|
|
+ # PIC (with -KPIC) is the default.
|
|
+ lt_prog_compiler_static='-non_shared'
|
|
+ ;;
|
|
+
|
|
+ newsos6)
|
|
+ lt_prog_compiler_pic='-KPIC'
|
|
+ lt_prog_compiler_static='-Bstatic'
|
|
+ ;;
|
|
+
|
|
+ linux*)
|
|
+ case $cc_basename in
|
|
+ icc* | ecc*)
|
|
+ lt_prog_compiler_wl='-Wl,'
|
|
+ lt_prog_compiler_pic='-KPIC'
|
|
+ lt_prog_compiler_static='-static'
|
|
+ ;;
|
|
+ pgcc* | pgf77* | pgf90* | pgf95*)
|
|
+ # Portland Group compilers (*not* the Pentium gcc compiler,
|
|
+ # which looks to be a dead project)
|
|
+ lt_prog_compiler_wl='-Wl,'
|
|
+ lt_prog_compiler_pic='-fpic'
|
|
+ lt_prog_compiler_static='-Bstatic'
|
|
+ ;;
|
|
+ ccc*)
|
|
+ lt_prog_compiler_wl='-Wl,'
|
|
+ # All Alpha code is PIC.
|
|
+ lt_prog_compiler_static='-non_shared'
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+
|
|
+ osf3* | osf4* | osf5*)
|
|
+ lt_prog_compiler_wl='-Wl,'
|
|
+ # All OSF/1 code is PIC.
|
|
+ lt_prog_compiler_static='-non_shared'
|
|
+ ;;
|
|
+
|
|
+ solaris*)
|
|
+ lt_prog_compiler_pic='-KPIC'
|
|
+ lt_prog_compiler_static='-Bstatic'
|
|
+ case $cc_basename in
|
|
+ f77* | f90* | f95*)
|
|
+ lt_prog_compiler_wl='-Qoption ld ';;
|
|
+ *)
|
|
+ lt_prog_compiler_wl='-Wl,';;
|
|
+ esac
|
|
+ ;;
|
|
+
|
|
+ sunos4*)
|
|
+ lt_prog_compiler_wl='-Qoption ld '
|
|
+ lt_prog_compiler_pic='-PIC'
|
|
+ lt_prog_compiler_static='-Bstatic'
|
|
+ ;;
|
|
+
|
|
+ sysv4 | sysv4.2uw2* | sysv4.3*)
|
|
+ lt_prog_compiler_wl='-Wl,'
|
|
+ lt_prog_compiler_pic='-KPIC'
|
|
+ lt_prog_compiler_static='-Bstatic'
|
|
+ ;;
|
|
+
|
|
+ sysv4*MP*)
|
|
+ if test -d /usr/nec ;then
|
|
+ lt_prog_compiler_pic='-Kconform_pic'
|
|
+ lt_prog_compiler_static='-Bstatic'
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
|
|
+ lt_prog_compiler_wl='-Wl,'
|
|
+ lt_prog_compiler_pic='-KPIC'
|
|
+ lt_prog_compiler_static='-Bstatic'
|
|
+ ;;
|
|
+
|
|
+ unicos*)
|
|
+ lt_prog_compiler_wl='-Wl,'
|
|
+ lt_prog_compiler_can_build_shared=no
|
|
+ ;;
|
|
+
|
|
+ uts4*)
|
|
+ lt_prog_compiler_pic='-pic'
|
|
+ lt_prog_compiler_static='-Bstatic'
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ lt_prog_compiler_can_build_shared=no
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+
|
|
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
|
|
+echo "${ECHO_T}$lt_prog_compiler_pic" >&6
|
|
+
|
|
+#
|
|
+# Check to make sure the PIC flag actually works.
|
|
+#
|
|
+if test -n "$lt_prog_compiler_pic"; then
|
|
+
|
|
+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
|
|
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6
|
|
+if test "${lt_prog_compiler_pic_works+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ lt_prog_compiler_pic_works=no
|
|
+ ac_outfile=conftest.$ac_objext
|
|
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
|
|
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
|
|
+ # 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:9283: $lt_compile\"" >&5)
|
|
+ (eval "$lt_compile" 2>conftest.err)
|
|
+ ac_status=$?
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:9287: \$? = $ac_status" >&5
|
|
+ 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
|
|
+ lt_prog_compiler_pic_works=yes
|
|
+ fi
|
|
+ fi
|
|
+ $rm conftest*
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5
|
|
+echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6
|
|
+
|
|
+if test x"$lt_prog_compiler_pic_works" = xyes; then
|
|
+ case $lt_prog_compiler_pic in
|
|
+ "" | " "*) ;;
|
|
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
|
|
+ esac
|
|
+else
|
|
+ lt_prog_compiler_pic=
|
|
+ lt_prog_compiler_can_build_shared=no
|
|
+fi
|
|
+
|
|
+fi
|
|
+case $host_os in
|
|
+ # For platforms which do not support PIC, -DPIC is meaningless:
|
|
+ *djgpp*)
|
|
+ lt_prog_compiler_pic=
|
|
+ ;;
|
|
+ *)
|
|
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+#
|
|
+# Check to make sure the static flag actually works.
|
|
+#
|
|
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
|
|
+echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
|
|
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6
|
|
+if test "${lt_prog_compiler_static_works+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ lt_prog_compiler_static_works=no
|
|
+ save_LDFLAGS="$LDFLAGS"
|
|
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
|
|
+ printf "$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>&5
|
|
+ $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
|
|
+ lt_prog_compiler_static_works=yes
|
|
+ fi
|
|
+ else
|
|
+ lt_prog_compiler_static_works=yes
|
|
+ fi
|
|
+ fi
|
|
+ $rm conftest*
|
|
+ LDFLAGS="$save_LDFLAGS"
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5
|
|
+echo "${ECHO_T}$lt_prog_compiler_static_works" >&6
|
|
+
|
|
+if test x"$lt_prog_compiler_static_works" = xyes; then
|
|
+ :
|
|
+else
|
|
+ lt_prog_compiler_static=
|
|
+fi
|
|
+
|
|
+
|
|
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
|
|
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
|
|
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ lt_cv_prog_compiler_c_o=no
|
|
+ $rm -r conftest 2>/dev/null
|
|
+ mkdir conftest
|
|
+ cd conftest
|
|
+ mkdir out
|
|
+ printf "$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:9387: $lt_compile\"" >&5)
|
|
+ (eval "$lt_compile" 2>out/conftest.err)
|
|
+ ac_status=$?
|
|
+ cat out/conftest.err >&5
|
|
+ echo "$as_me:9391: \$? = $ac_status" >&5
|
|
+ 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_cv_prog_compiler_c_o=yes
|
|
+ fi
|
|
+ fi
|
|
+ chmod u+w . 2>&5
|
|
+ $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*
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
|
|
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
|
|
+
|
|
+
|
|
+hard_links="nottested"
|
|
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
|
|
+ # do not overwrite the value of need_locks provided by the user
|
|
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
|
|
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
|
|
+ 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
|
|
+ echo "$as_me:$LINENO: result: $hard_links" >&5
|
|
+echo "${ECHO_T}$hard_links" >&6
|
|
+ if test "$hard_links" = no; then
|
|
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
|
|
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
|
|
+ need_locks=warn
|
|
+ fi
|
|
+else
|
|
+ need_locks=no
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
|
|
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
|
|
+
|
|
+ runpath_var=
|
|
+ allow_undefined_flag=
|
|
+ enable_shared_with_static_runtimes=no
|
|
+ archive_cmds=
|
|
+ archive_expsym_cmds=
|
|
+ old_archive_From_new_cmds=
|
|
+ old_archive_from_expsyms_cmds=
|
|
+ export_dynamic_flag_spec=
|
|
+ whole_archive_flag_spec=
|
|
+ thread_safe_flag_spec=
|
|
+ hardcode_libdir_flag_spec=
|
|
+ hardcode_libdir_flag_spec_ld=
|
|
+ hardcode_libdir_separator=
|
|
+ hardcode_direct=no
|
|
+ hardcode_minus_L=no
|
|
+ hardcode_shlibpath_var=unsupported
|
|
+ link_all_deplibs=unknown
|
|
+ hardcode_automatic=no
|
|
+ module_cmds=
|
|
+ module_expsym_cmds=
|
|
+ always_export_symbols=no
|
|
+ export_symbols_cmds='$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
|
|
+ include_expsyms=
|
|
+ # 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'.
|
|
+ exclude_expsyms="_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.
|
|
+ for cc_temp in $compiler""; 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-%%"`
|
|
+
|
|
+ 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
|
|
+
|
|
+ ld_shlibs=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
|
|
+ hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
|
|
+ export_dynamic_flag_spec='${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
|
|
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
|
|
+ else
|
|
+ whole_archive_flag_spec=
|
|
+ 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
|
|
+ ld_shlibs=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*)
|
|
+ archive_cmds='$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)'
|
|
+ hardcode_libdir_flag_spec='-L$libdir'
|
|
+ hardcode_minus_L=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.
|
|
+ ld_shlibs=no
|
|
+ ;;
|
|
+
|
|
+ beos*)
|
|
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
|
+ allow_undefined_flag=unsupported
|
|
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
|
|
+ # support --undefined. This deserves some investigation. FIXME
|
|
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ else
|
|
+ ld_shlibs=no
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ cygwin* | mingw* | pw32*)
|
|
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
|
|
+ # as there is no search path for DLLs.
|
|
+ hardcode_libdir_flag_spec='-L$libdir'
|
|
+ allow_undefined_flag=unsupported
|
|
+ always_export_symbols=no
|
|
+ enable_shared_with_static_runtimes=yes
|
|
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
|
|
+
|
|
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
|
|
+ archive_cmds='$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...
|
|
+ archive_expsym_cmds='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
|
|
+ ld_shlibs=no
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ interix3*)
|
|
+ hardcode_direct=no
|
|
+ hardcode_shlibpath_var=no
|
|
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
|
+ export_dynamic_flag_spec='${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.
|
|
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
|
+ archive_expsym_cmds='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'
|
|
+ ;;
|
|
+
|
|
+ linux*)
|
|
+ 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
|
|
+ whole_archive_flag_spec='${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
|
|
+ whole_archive_flag_spec='${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
|
|
+ archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+
|
|
+ if test $supports_anon_versioning = yes; then
|
|
+ archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~
|
|
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
|
+ $echo "local: *; };" >> $output_objdir/$libname.ver~
|
|
+ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
|
|
+ fi
|
|
+ else
|
|
+ ld_shlibs=no
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ netbsd*)
|
|
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
|
|
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
|
|
+ wlarc=
|
|
+ else
|
|
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ archive_expsym_cmds='$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
|
|
+ ld_shlibs=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
|
|
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
|
|
+ else
|
|
+ ld_shlibs=no
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
|
|
+ case `$LD -v 2>&1` in
|
|
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
|
|
+ ld_shlibs=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
|
|
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
|
|
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
|
|
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
|
|
+ else
|
|
+ ld_shlibs=no
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+
|
|
+ sunos4*)
|
|
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
|
|
+ wlarc=
|
|
+ hardcode_direct=yes
|
|
+ hardcode_shlibpath_var=no
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
|
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
|
|
+ else
|
|
+ ld_shlibs=no
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ if test "$ld_shlibs" = no; then
|
|
+ runpath_var=
|
|
+ hardcode_libdir_flag_spec=
|
|
+ export_dynamic_flag_spec=
|
|
+ whole_archive_flag_spec=
|
|
+ fi
|
|
+ else
|
|
+ # PORTME fill in a description of your system's linker (not GNU ld)
|
|
+ case $host_os in
|
|
+ aix3*)
|
|
+ allow_undefined_flag=unsupported
|
|
+ always_export_symbols=yes
|
|
+ archive_expsym_cmds='$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.
|
|
+ hardcode_minus_L=yes
|
|
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
|
|
+ # Neither direct hardcoding nor static linking is supported with a
|
|
+ # broken collect2.
|
|
+ hardcode_direct=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
|
|
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
|
|
+ else
|
|
+ export_symbols_cmds='$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.
|
|
+
|
|
+ archive_cmds=''
|
|
+ hardcode_direct=yes
|
|
+ hardcode_libdir_separator=':'
|
|
+ link_all_deplibs=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
|
|
+ hardcode_direct=yes
|
|
+ else
|
|
+ # We have old collect2
|
|
+ hardcode_direct=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
|
|
+ hardcode_minus_L=yes
|
|
+ hardcode_libdir_flag_spec='-L$libdir'
|
|
+ hardcode_libdir_separator=
|
|
+ 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.
|
|
+ always_export_symbols=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.
|
|
+ allow_undefined_flag='-berok'
|
|
+ # Determine the default libpath from the value encoded in an empty executable.
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+
|
|
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
|
+}'`
|
|
+# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
|
+}'`; fi
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext \
|
|
+ conftest$ac_exeext conftest.$ac_ext
|
|
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
|
|
+
|
|
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
|
|
+ archive_expsym_cmds="\$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
|
|
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
|
|
+ allow_undefined_flag="-z nodefs"
|
|
+ archive_expsym_cmds="\$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.
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+
|
|
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
|
+}'`
|
|
+# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
|
+}'`; fi
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext \
|
|
+ conftest$ac_exeext conftest.$ac_ext
|
|
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
|
|
+
|
|
+ hardcode_libdir_flag_spec='${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.
|
|
+ no_undefined_flag=' ${wl}-bernotok'
|
|
+ allow_undefined_flag=' ${wl}-berok'
|
|
+ # Exported symbols can be pulled into shared objects from archives
|
|
+ whole_archive_flag_spec='$convenience'
|
|
+ archive_cmds_need_lc=yes
|
|
+ # This is similar to how AIX traditionally builds its shared libraries.
|
|
+ archive_expsym_cmds="\$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*)
|
|
+ archive_cmds='$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)'
|
|
+ hardcode_libdir_flag_spec='-L$libdir'
|
|
+ hardcode_minus_L=yes
|
|
+ # see comment about different semantics on the GNU ld section
|
|
+ ld_shlibs=no
|
|
+ ;;
|
|
+
|
|
+ bsdi[45]*)
|
|
+ export_dynamic_flag_spec=-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.
|
|
+ hardcode_libdir_flag_spec=' '
|
|
+ allow_undefined_flag=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.
|
|
+ archive_cmds='$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.
|
|
+ old_archive_From_new_cmds='true'
|
|
+ # FIXME: Should let the user specify the lib program.
|
|
+ old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
|
|
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
|
|
+ enable_shared_with_static_runtimes=yes
|
|
+ ;;
|
|
+
|
|
+ darwin* | rhapsody*)
|
|
+ case $host_os in
|
|
+ rhapsody* | darwin1.[012])
|
|
+ allow_undefined_flag='${wl}-undefined ${wl}suppress'
|
|
+ ;;
|
|
+ *) # Darwin 1.3 on
|
|
+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
|
|
+ allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
|
|
+ else
|
|
+ case ${MACOSX_DEPLOYMENT_TARGET} in
|
|
+ 10.[012])
|
|
+ allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
|
|
+ ;;
|
|
+ 10.*)
|
|
+ allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup'
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ archive_cmds_need_lc=no
|
|
+ hardcode_direct=no
|
|
+ hardcode_automatic=yes
|
|
+ hardcode_shlibpath_var=unsupported
|
|
+ whole_archive_flag_spec=''
|
|
+ link_all_deplibs=yes
|
|
+ if test "$GCC" = yes ; then
|
|
+ output_verbose_link_cmd='echo'
|
|
+ archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
|
|
+ module_cmds='$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
|
|
+ archive_expsym_cmds='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}'
|
|
+ module_expsym_cmds='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'
|
|
+ archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
|
|
+ module_cmds='$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
|
|
+ archive_expsym_cmds='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 $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
|
|
+ module_expsym_cmds='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}'
|
|
+ ;;
|
|
+ *)
|
|
+ ld_shlibs=no
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ dgux*)
|
|
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_libdir_flag_spec='-L$libdir'
|
|
+ hardcode_shlibpath_var=no
|
|
+ ;;
|
|
+
|
|
+ freebsd1*)
|
|
+ ld_shlibs=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*)
|
|
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
|
|
+ hardcode_libdir_flag_spec='-R$libdir'
|
|
+ hardcode_direct=yes
|
|
+ hardcode_shlibpath_var=no
|
|
+ ;;
|
|
+
|
|
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
|
|
+ freebsd2*)
|
|
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_direct=yes
|
|
+ hardcode_minus_L=yes
|
|
+ hardcode_shlibpath_var=no
|
|
+ ;;
|
|
+
|
|
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
|
|
+ freebsd* | kfreebsd*-gnu | dragonfly*)
|
|
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ hardcode_libdir_flag_spec='-R$libdir'
|
|
+ hardcode_direct=yes
|
|
+ hardcode_shlibpath_var=no
|
|
+ ;;
|
|
+
|
|
+ hpux9*)
|
|
+ if test "$GCC" = yes; then
|
|
+ archive_cmds='$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
|
|
+ archive_cmds='$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
|
|
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
|
+ hardcode_libdir_separator=:
|
|
+ hardcode_direct=yes
|
|
+
|
|
+ # hardcode_minus_L: Not really in the search PATH,
|
|
+ # but as the default location of the library.
|
|
+ hardcode_minus_L=yes
|
|
+ export_dynamic_flag_spec='${wl}-E'
|
|
+ ;;
|
|
+
|
|
+ hpux10*)
|
|
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
|
|
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ else
|
|
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
|
|
+ fi
|
|
+ if test "$with_gnu_ld" = no; then
|
|
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
|
+ hardcode_libdir_separator=:
|
|
+
|
|
+ hardcode_direct=yes
|
|
+ export_dynamic_flag_spec='${wl}-E'
|
|
+
|
|
+ # hardcode_minus_L: Not really in the search PATH,
|
|
+ # but as the default location of the library.
|
|
+ hardcode_minus_L=yes
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ hpux11*)
|
|
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
|
|
+ case $host_cpu in
|
|
+ hppa*64*)
|
|
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ ;;
|
|
+ ia64*)
|
|
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ ;;
|
|
+ *)
|
|
+ archive_cmds='$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*)
|
|
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ ;;
|
|
+ ia64*)
|
|
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ ;;
|
|
+ *)
|
|
+ archive_cmds='$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
|
|
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
|
+ hardcode_libdir_separator=:
|
|
+
|
|
+ case $host_cpu in
|
|
+ hppa*64*|ia64*)
|
|
+ hardcode_libdir_flag_spec_ld='+b $libdir'
|
|
+ hardcode_direct=no
|
|
+ hardcode_shlibpath_var=no
|
|
+ ;;
|
|
+ *)
|
|
+ hardcode_direct=yes
|
|
+ export_dynamic_flag_spec='${wl}-E'
|
|
+
|
|
+ # hardcode_minus_L: Not really in the search PATH,
|
|
+ # but as the default location of the library.
|
|
+ hardcode_minus_L=yes
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ irix5* | irix6* | nonstopux*)
|
|
+ if test "$GCC" = yes; then
|
|
+ archive_cmds='$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
|
|
+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
|
|
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
|
|
+ fi
|
|
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
|
+ hardcode_libdir_separator=:
|
|
+ link_all_deplibs=yes
|
|
+ ;;
|
|
+
|
|
+ netbsd*)
|
|
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
|
|
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
|
|
+ else
|
|
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
|
|
+ fi
|
|
+ hardcode_libdir_flag_spec='-R$libdir'
|
|
+ hardcode_direct=yes
|
|
+ hardcode_shlibpath_var=no
|
|
+ ;;
|
|
+
|
|
+ newsos6)
|
|
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_direct=yes
|
|
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
|
+ hardcode_libdir_separator=:
|
|
+ hardcode_shlibpath_var=no
|
|
+ ;;
|
|
+
|
|
+ openbsd*)
|
|
+ hardcode_direct=yes
|
|
+ hardcode_shlibpath_var=no
|
|
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
|
|
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
|
|
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
|
+ export_dynamic_flag_spec='${wl}-E'
|
|
+ else
|
|
+ case $host_os in
|
|
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
|
|
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_libdir_flag_spec='-R$libdir'
|
|
+ ;;
|
|
+ *)
|
|
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ os2*)
|
|
+ hardcode_libdir_flag_spec='-L$libdir'
|
|
+ hardcode_minus_L=yes
|
|
+ allow_undefined_flag=unsupported
|
|
+ archive_cmds='$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'
|
|
+ old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
|
|
+ ;;
|
|
+
|
|
+ osf3*)
|
|
+ if test "$GCC" = yes; then
|
|
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
|
|
+ archive_cmds='$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
|
|
+ allow_undefined_flag=' -expect_unresolved \*'
|
|
+ archive_cmds='$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
|
|
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
|
+ hardcode_libdir_separator=:
|
|
+ ;;
|
|
+
|
|
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
|
|
+ if test "$GCC" = yes; then
|
|
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
|
|
+ archive_cmds='$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'
|
|
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
|
+ else
|
|
+ allow_undefined_flag=' -expect_unresolved \*'
|
|
+ archive_cmds='$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'
|
|
+ archive_expsym_cmds='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
|
|
+ hardcode_libdir_flag_spec='-rpath $libdir'
|
|
+ fi
|
|
+ hardcode_libdir_separator=:
|
|
+ ;;
|
|
+
|
|
+ solaris*)
|
|
+ no_undefined_flag=' -z text'
|
|
+ if test "$GCC" = yes; then
|
|
+ wlarc='${wl}'
|
|
+ archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds='$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=''
|
|
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ archive_expsym_cmds='$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
|
|
+ hardcode_libdir_flag_spec='-R$libdir'
|
|
+ hardcode_shlibpath_var=no
|
|
+ case $host_os in
|
|
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
|
|
+ *)
|
|
+ # The compiler driver will combine linker options so we
|
|
+ # cannot just pass the convience library names through
|
|
+ # without $wl, iff we do not link with $LD.
|
|
+ # Luckily, gcc supports the same syntax we need for Sun Studio.
|
|
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
|
|
+ case $wlarc in
|
|
+ '')
|
|
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
|
|
+ *)
|
|
+ whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
|
|
+ esac ;;
|
|
+ esac
|
|
+ link_all_deplibs=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.
|
|
+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ else
|
|
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
|
|
+ fi
|
|
+ hardcode_libdir_flag_spec='-L$libdir'
|
|
+ hardcode_direct=yes
|
|
+ hardcode_minus_L=yes
|
|
+ hardcode_shlibpath_var=no
|
|
+ ;;
|
|
+
|
|
+ sysv4)
|
|
+ case $host_vendor in
|
|
+ sni)
|
|
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_direct=yes # is this really true???
|
|
+ ;;
|
|
+ siemens)
|
|
+ ## LD is ld it makes a PLAMLIB
|
|
+ ## CC just makes a GrossModule.
|
|
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
|
|
+ reload_cmds='$CC -r -o $output$reload_objs'
|
|
+ hardcode_direct=no
|
|
+ ;;
|
|
+ motorola)
|
|
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
|
|
+ ;;
|
|
+ esac
|
|
+ runpath_var='LD_RUN_PATH'
|
|
+ hardcode_shlibpath_var=no
|
|
+ ;;
|
|
+
|
|
+ sysv4.3*)
|
|
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_shlibpath_var=no
|
|
+ export_dynamic_flag_spec='-Bexport'
|
|
+ ;;
|
|
+
|
|
+ sysv4*MP*)
|
|
+ if test -d /usr/nec; then
|
|
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_shlibpath_var=no
|
|
+ runpath_var=LD_RUN_PATH
|
|
+ hardcode_runpath_var=yes
|
|
+ ld_shlibs=yes
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
|
|
+ no_undefined_flag='${wl}-z,text'
|
|
+ archive_cmds_need_lc=no
|
|
+ hardcode_shlibpath_var=no
|
|
+ runpath_var='LD_RUN_PATH'
|
|
+
|
|
+ if test "$GCC" = yes; then
|
|
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ else
|
|
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds='$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.
|
|
+ no_undefined_flag='${wl}-z,text'
|
|
+ allow_undefined_flag='${wl}-z,nodefs'
|
|
+ archive_cmds_need_lc=no
|
|
+ hardcode_shlibpath_var=no
|
|
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
|
|
+ hardcode_libdir_separator=':'
|
|
+ link_all_deplibs=yes
|
|
+ export_dynamic_flag_spec='${wl}-Bexport'
|
|
+ runpath_var='LD_RUN_PATH'
|
|
+
|
|
+ if test "$GCC" = yes; then
|
|
+ archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ else
|
|
+ archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ uts4*)
|
|
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_libdir_flag_spec='-L$libdir'
|
|
+ hardcode_shlibpath_var=no
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ ld_shlibs=no
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+
|
|
+echo "$as_me:$LINENO: result: $ld_shlibs" >&5
|
|
+echo "${ECHO_T}$ld_shlibs" >&6
|
|
+test "$ld_shlibs" = no && can_build_shared=no
|
|
+
|
|
+#
|
|
+# Do we need to explicitly link libc?
|
|
+#
|
|
+case "x$archive_cmds_need_lc" in
|
|
+x|xyes)
|
|
+ # Assume -lc should be added
|
|
+ archive_cmds_need_lc=yes
|
|
+
|
|
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
|
|
+ case $archive_cmds 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.
|
|
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
|
|
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
|
|
+ $rm conftest*
|
|
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
|
|
+
|
|
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } 2>conftest.err; then
|
|
+ soname=conftest
|
|
+ lib=conftest
|
|
+ libobjs=conftest.$ac_objext
|
|
+ deplibs=
|
|
+ wl=$lt_prog_compiler_wl
|
|
+ pic_flag=$lt_prog_compiler_pic
|
|
+ compiler_flags=-v
|
|
+ linker_flags=-v
|
|
+ verstring=
|
|
+ output_objdir=.
|
|
+ libname=conftest
|
|
+ lt_save_allow_undefined_flag=$allow_undefined_flag
|
|
+ allow_undefined_flag=
|
|
+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
|
|
+ (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }
|
|
+ then
|
|
+ archive_cmds_need_lc=no
|
|
+ else
|
|
+ archive_cmds_need_lc=yes
|
|
+ fi
|
|
+ allow_undefined_flag=$lt_save_allow_undefined_flag
|
|
+ else
|
|
+ cat conftest.err 1>&5
|
|
+ fi
|
|
+ $rm conftest*
|
|
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
|
|
+echo "${ECHO_T}$archive_cmds_need_lc" >&6
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
|
|
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
|
|
+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"
|
|
+if test "$GCC" = yes; then
|
|
+ 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 ';' >/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.
|
|
+ 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
|
|
+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`'
|
|
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
|
|
+ if test "$GCC" = yes; then
|
|
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
|
|
+ else
|
|
+ sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
|
|
+ fi
|
|
+ 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
|
|
+ ;;
|
|
+
|
|
+kfreebsd*-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
|
|
+ shlibpath_overrides_runpath=no
|
|
+ hardcode_into_libs=yes
|
|
+ dynamic_linker='GNU ld.so'
|
|
+ ;;
|
|
+
|
|
+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
|
|
+ ;;
|
|
+ freebsd*) # from 4.6 on
|
|
+ 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'
|
|
+ ;;
|
|
+
|
|
+interix3*)
|
|
+ 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*)
|
|
+ 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
|
|
+
|
|
+ # find out which ABI we are using
|
|
+ libsuff=
|
|
+ case "$host_cpu" in
|
|
+ x86_64*|s390x*|powerpc64*)
|
|
+ echo '#line 10856 "configure"' > conftest.$ac_ext
|
|
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; then
|
|
+ case `/usr/bin/file conftest.$ac_objext` in
|
|
+ *64-bit*)
|
|
+ libsuff=64
|
|
+ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ rm -rf conftest*
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # 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/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
|
|
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $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'
|
|
+ ;;
|
|
+
|
|
+knetbsd*-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
|
|
+ shlibpath_overrides_runpath=no
|
|
+ hardcode_into_libs=yes
|
|
+ dynamic_linker='GNU 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"
|
|
+ ;;
|
|
+
|
|
+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
|
|
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
|
|
+echo "${ECHO_T}$dynamic_linker" >&6
|
|
+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
|
|
+
|
|
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
|
|
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
|
|
+hardcode_action=
|
|
+if test -n "$hardcode_libdir_flag_spec" || \
|
|
+ test -n "$runpath_var" || \
|
|
+ test "X$hardcode_automatic" = "Xyes" ; then
|
|
+
|
|
+ # We can hardcode non-existant directories.
|
|
+ if test "$hardcode_direct" != 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, )" != no &&
|
|
+ test "$hardcode_minus_L" != no; then
|
|
+ # Linking always hardcodes the temporary library directory.
|
|
+ hardcode_action=relink
|
|
+ else
|
|
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
|
|
+ hardcode_action=immediate
|
|
+ fi
|
|
+else
|
|
+ # We cannot hardcode anything, or else we can only hardcode existing
|
|
+ # directories.
|
|
+ hardcode_action=unsupported
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $hardcode_action" >&5
|
|
+echo "${ECHO_T}$hardcode_action" >&6
|
|
+
|
|
+if test "$hardcode_action" = 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
|
|
+
|
|
+striplib=
|
|
+old_striplib=
|
|
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
|
|
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
|
|
+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"
|
|
+ echo "$as_me:$LINENO: result: yes" >&5
|
|
+echo "${ECHO_T}yes" >&6
|
|
+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"
|
|
+ echo "$as_me:$LINENO: result: yes" >&5
|
|
+echo "${ECHO_T}yes" >&6
|
|
+ else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+ ;;
|
|
+ *)
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+ ;;
|
|
+ esac
|
|
+fi
|
|
+
|
|
+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
|
|
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
|
|
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
|
|
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ ac_check_lib_save_LIBS=$LIBS
|
|
+LIBS="-ldl $LIBS"
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+
|
|
+/* Override any gcc2 internal prototype to avoid an error. */
|
|
+#ifdef __cplusplus
|
|
+extern "C"
|
|
+#endif
|
|
+/* We use char because int might match the return type of a gcc2
|
|
+ builtin and then its argument prototype would still apply. */
|
|
+char dlopen ();
|
|
+int
|
|
+main ()
|
|
+{
|
|
+dlopen ();
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_lib_dl_dlopen=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_lib_dl_dlopen=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext \
|
|
+ conftest$ac_exeext conftest.$ac_ext
|
|
+LIBS=$ac_check_lib_save_LIBS
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
|
|
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
|
|
+if test $ac_cv_lib_dl_dlopen = yes; then
|
|
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
|
|
+else
|
|
+
|
|
+ lt_cv_dlopen="dyld"
|
|
+ lt_cv_dlopen_libs=
|
|
+ lt_cv_dlopen_self=yes
|
|
+
|
|
+fi
|
|
+
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ echo "$as_me:$LINENO: checking for shl_load" >&5
|
|
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
|
|
+if test "${ac_cv_func_shl_load+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
|
|
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
|
|
+#define shl_load innocuous_shl_load
|
|
+
|
|
+/* System header to define __stub macros and hopefully few prototypes,
|
|
+ which can conflict with char shl_load (); below.
|
|
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
|
|
+ <limits.h> exists even on freestanding compilers. */
|
|
+
|
|
+#ifdef __STDC__
|
|
+# include <limits.h>
|
|
+#else
|
|
+# include <assert.h>
|
|
+#endif
|
|
+
|
|
+#undef shl_load
|
|
+
|
|
+/* Override any gcc2 internal prototype to avoid an error. */
|
|
+#ifdef __cplusplus
|
|
+extern "C"
|
|
+{
|
|
+#endif
|
|
+/* We use char because int might match the return type of a gcc2
|
|
+ builtin and then its argument prototype would still apply. */
|
|
+char shl_load ();
|
|
+/* The GNU C library defines this for functions which it implements
|
|
+ to always fail with ENOSYS. Some functions are actually named
|
|
+ something starting with __ and the normal name is an alias. */
|
|
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
|
|
+choke me
|
|
+#else
|
|
+char (*f) () = shl_load;
|
|
+#endif
|
|
+#ifdef __cplusplus
|
|
+}
|
|
+#endif
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+return f != shl_load;
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_func_shl_load=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_func_shl_load=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext \
|
|
+ conftest$ac_exeext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
|
|
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
|
|
+if test $ac_cv_func_shl_load = yes; then
|
|
+ lt_cv_dlopen="shl_load"
|
|
+else
|
|
+ echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
|
|
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
|
|
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ ac_check_lib_save_LIBS=$LIBS
|
|
+LIBS="-ldld $LIBS"
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+
|
|
+/* Override any gcc2 internal prototype to avoid an error. */
|
|
+#ifdef __cplusplus
|
|
+extern "C"
|
|
+#endif
|
|
+/* We use char because int might match the return type of a gcc2
|
|
+ builtin and then its argument prototype would still apply. */
|
|
+char shl_load ();
|
|
+int
|
|
+main ()
|
|
+{
|
|
+shl_load ();
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_lib_dld_shl_load=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_lib_dld_shl_load=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext \
|
|
+ conftest$ac_exeext conftest.$ac_ext
|
|
+LIBS=$ac_check_lib_save_LIBS
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
|
|
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
|
|
+if test $ac_cv_lib_dld_shl_load = yes; then
|
|
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
|
|
+else
|
|
+ echo "$as_me:$LINENO: checking for dlopen" >&5
|
|
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
|
|
+if test "${ac_cv_func_dlopen+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
|
|
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
|
|
+#define dlopen innocuous_dlopen
|
|
+
|
|
+/* System header to define __stub macros and hopefully few prototypes,
|
|
+ which can conflict with char dlopen (); below.
|
|
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
|
|
+ <limits.h> exists even on freestanding compilers. */
|
|
+
|
|
+#ifdef __STDC__
|
|
+# include <limits.h>
|
|
+#else
|
|
+# include <assert.h>
|
|
+#endif
|
|
+
|
|
+#undef dlopen
|
|
+
|
|
+/* Override any gcc2 internal prototype to avoid an error. */
|
|
+#ifdef __cplusplus
|
|
+extern "C"
|
|
+{
|
|
+#endif
|
|
+/* We use char because int might match the return type of a gcc2
|
|
+ builtin and then its argument prototype would still apply. */
|
|
+char dlopen ();
|
|
+/* The GNU C library defines this for functions which it implements
|
|
+ to always fail with ENOSYS. Some functions are actually named
|
|
+ something starting with __ and the normal name is an alias. */
|
|
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
|
|
+choke me
|
|
+#else
|
|
+char (*f) () = dlopen;
|
|
+#endif
|
|
+#ifdef __cplusplus
|
|
+}
|
|
+#endif
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+return f != dlopen;
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_func_dlopen=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_func_dlopen=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext \
|
|
+ conftest$ac_exeext conftest.$ac_ext
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
|
|
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
|
|
+if test $ac_cv_func_dlopen = yes; then
|
|
+ lt_cv_dlopen="dlopen"
|
|
+else
|
|
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
|
|
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
|
|
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ ac_check_lib_save_LIBS=$LIBS
|
|
+LIBS="-ldl $LIBS"
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+
|
|
+/* Override any gcc2 internal prototype to avoid an error. */
|
|
+#ifdef __cplusplus
|
|
+extern "C"
|
|
+#endif
|
|
+/* We use char because int might match the return type of a gcc2
|
|
+ builtin and then its argument prototype would still apply. */
|
|
+char dlopen ();
|
|
+int
|
|
+main ()
|
|
+{
|
|
+dlopen ();
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_lib_dl_dlopen=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_lib_dl_dlopen=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext \
|
|
+ conftest$ac_exeext conftest.$ac_ext
|
|
+LIBS=$ac_check_lib_save_LIBS
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
|
|
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
|
|
+if test $ac_cv_lib_dl_dlopen = yes; then
|
|
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
|
|
+else
|
|
+ echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
|
|
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
|
|
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ ac_check_lib_save_LIBS=$LIBS
|
|
+LIBS="-lsvld $LIBS"
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+
|
|
+/* Override any gcc2 internal prototype to avoid an error. */
|
|
+#ifdef __cplusplus
|
|
+extern "C"
|
|
+#endif
|
|
+/* We use char because int might match the return type of a gcc2
|
|
+ builtin and then its argument prototype would still apply. */
|
|
+char dlopen ();
|
|
+int
|
|
+main ()
|
|
+{
|
|
+dlopen ();
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_lib_svld_dlopen=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_lib_svld_dlopen=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext \
|
|
+ conftest$ac_exeext conftest.$ac_ext
|
|
+LIBS=$ac_check_lib_save_LIBS
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
|
|
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
|
|
+if test $ac_cv_lib_svld_dlopen = yes; then
|
|
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
|
|
+else
|
|
+ echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
|
|
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
|
|
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ ac_check_lib_save_LIBS=$LIBS
|
|
+LIBS="-ldld $LIBS"
|
|
+cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+
|
|
+/* Override any gcc2 internal prototype to avoid an error. */
|
|
+#ifdef __cplusplus
|
|
+extern "C"
|
|
+#endif
|
|
+/* We use char because int might match the return type of a gcc2
|
|
+ builtin and then its argument prototype would still apply. */
|
|
+char dld_link ();
|
|
+int
|
|
+main ()
|
|
+{
|
|
+dld_link ();
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ ac_cv_lib_dld_dld_link=yes
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ac_cv_lib_dld_dld_link=no
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext \
|
|
+ conftest$ac_exeext conftest.$ac_ext
|
|
+LIBS=$ac_check_lib_save_LIBS
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
|
|
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
|
|
+if test $ac_cv_lib_dld_dld_link = yes; then
|
|
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
|
|
+fi
|
|
+
|
|
+
|
|
+fi
|
|
+
|
|
+
|
|
+fi
|
|
+
|
|
+
|
|
+fi
|
|
+
|
|
+
|
|
+fi
|
|
+
|
|
+
|
|
+fi
|
|
+
|
|
+ ;;
|
|
+ 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"
|
|
+
|
|
+ echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
|
|
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
|
|
+if test "${lt_cv_dlopen_self+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test "$cross_compiling" = yes; then :
|
|
+ lt_cv_dlopen_self=cross
|
|
+else
|
|
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
|
+ lt_status=$lt_dlunknown
|
|
+ cat > conftest.$ac_ext <<EOF
|
|
+#line 11753 "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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
|
|
+ (./conftest; exit; ) >&5 2>/dev/null
|
|
+ lt_status=$?
|
|
+ case x$lt_status in
|
|
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
|
|
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
|
|
+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
|
|
+ esac
|
|
+ else :
|
|
+ # compilation failed
|
|
+ lt_cv_dlopen_self=no
|
|
+ fi
|
|
+fi
|
|
+rm -fr conftest*
|
|
+
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
|
|
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
|
|
+
|
|
+ if test "x$lt_cv_dlopen_self" = xyes; then
|
|
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
|
|
+ echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
|
|
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
|
|
+if test "${lt_cv_dlopen_self_static+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ if test "$cross_compiling" = yes; then :
|
|
+ lt_cv_dlopen_self_static=cross
|
|
+else
|
|
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
|
+ lt_status=$lt_dlunknown
|
|
+ cat > conftest.$ac_ext <<EOF
|
|
+#line 11853 "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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
|
|
+ (./conftest; exit; ) >&5 2>/dev/null
|
|
+ lt_status=$?
|
|
+ case x$lt_status in
|
|
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
|
|
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
|
|
+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
|
|
+ esac
|
|
+ else :
|
|
+ # compilation failed
|
|
+ lt_cv_dlopen_self_static=no
|
|
+ fi
|
|
+fi
|
|
+rm -fr conftest*
|
|
+
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
|
|
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
|
|
+ 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
|
|
+
|
|
+
|
|
+# Report which library types will actually be built
|
|
+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
|
|
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
|
|
+echo "$as_me:$LINENO: result: $can_build_shared" >&5
|
|
+echo "${ECHO_T}$can_build_shared" >&6
|
|
+
|
|
+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
|
|
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
|
|
+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
|
|
+echo "$as_me:$LINENO: result: $enable_shared" >&5
|
|
+echo "${ECHO_T}$enable_shared" >&6
|
|
+
|
|
+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
|
|
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
|
|
+# Make sure either enable_shared or enable_static is yes.
|
|
+test "$enable_shared" = yes || enable_static=yes
|
|
+echo "$as_me:$LINENO: result: $enable_static" >&5
|
|
+echo "${ECHO_T}$enable_static" >&6
|
|
+
|
|
+# 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 \
|
|
+ compiler \
|
|
+ CC \
|
|
+ LD \
|
|
+ lt_prog_compiler_wl \
|
|
+ lt_prog_compiler_pic \
|
|
+ lt_prog_compiler_static \
|
|
+ lt_prog_compiler_no_builtin_flag \
|
|
+ export_dynamic_flag_spec \
|
|
+ thread_safe_flag_spec \
|
|
+ whole_archive_flag_spec \
|
|
+ enable_shared_with_static_runtimes \
|
|
+ old_archive_cmds \
|
|
+ old_archive_from_new_cmds \
|
|
+ predep_objects \
|
|
+ postdep_objects \
|
|
+ predeps \
|
|
+ postdeps \
|
|
+ compiler_lib_search_path \
|
|
+ archive_cmds \
|
|
+ archive_expsym_cmds \
|
|
+ postinstall_cmds \
|
|
+ postuninstall_cmds \
|
|
+ old_archive_from_expsyms_cmds \
|
|
+ allow_undefined_flag \
|
|
+ no_undefined_flag \
|
|
+ export_symbols_cmds \
|
|
+ hardcode_libdir_flag_spec \
|
|
+ hardcode_libdir_flag_spec_ld \
|
|
+ hardcode_libdir_separator \
|
|
+ hardcode_automatic \
|
|
+ module_cmds \
|
|
+ module_expsym_cmds \
|
|
+ lt_cv_prog_compiler_c_o \
|
|
+ exclude_expsyms \
|
|
+ include_expsyms; do
|
|
+
|
|
+ case $var in
|
|
+ old_archive_cmds | \
|
|
+ old_archive_from_new_cmds | \
|
|
+ archive_cmds | \
|
|
+ archive_expsym_cmds | \
|
|
+ module_cmds | \
|
|
+ module_expsym_cmds | \
|
|
+ old_archive_from_expsyms_cmds | \
|
|
+ export_symbols_cmds | \
|
|
+ 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
|
|
+
|
|
+cfgfile="${ofile}T"
|
|
+ trap "$rm \"$cfgfile\"; exit 1" 1 2 15
|
|
+ $rm -f "$cfgfile"
|
|
+ { echo "$as_me:$LINENO: creating $ofile" >&5
|
|
+echo "$as_me: creating $ofile" >&6;}
|
|
+
|
|
+ cat <<__EOF__ >> "$cfgfile"
|
|
+#! $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
|
|
+# 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
|
|
+
|
|
+# 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=$archive_cmds_need_lc
|
|
+
|
|
+# Whether or not to disallow shared libs when runtime libs are static
|
|
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
|
|
+
|
|
+# 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_compiler
|
|
+
|
|
+# Is the compiler the GNU C compiler?
|
|
+with_gcc=$GCC
|
|
+
|
|
+gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\`
|
|
+gcc_ver=\`gcc -dumpversion\`
|
|
+
|
|
+# An ERE matcher.
|
|
+EGREP=$lt_EGREP
|
|
+
|
|
+# The linker used to build libraries.
|
|
+LD=$lt_LD
|
|
+
|
|
+# 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_prog_compiler_wl
|
|
+
|
|
+# 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_prog_compiler_pic
|
|
+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_cv_prog_compiler_c_o
|
|
+
|
|
+# 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_prog_compiler_static
|
|
+
|
|
+# Compiler flag to turn off builtin functions.
|
|
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
|
|
+
|
|
+# Compiler flag to allow reflexive dlopens.
|
|
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
|
|
+
|
|
+# Compiler flag to generate shared objects directly from archives.
|
|
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
|
|
+
|
|
+# Compiler flag to generate thread-safe objects.
|
|
+thread_safe_flag_spec=$lt_thread_safe_flag_spec
|
|
+
|
|
+# 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_old_archive_cmds
|
|
+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_old_archive_from_new_cmds
|
|
+
|
|
+# Create a temporary old-style archive to link instead of a shared archive.
|
|
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
|
|
+
|
|
+# Commands used to build and install a shared archive.
|
|
+archive_cmds=$lt_archive_cmds
|
|
+archive_expsym_cmds=$lt_archive_expsym_cmds
|
|
+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_module_cmds
|
|
+module_expsym_cmds=$lt_module_expsym_cmds
|
|
+
|
|
+# 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=\`echo $lt_predep_objects | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# Dependencies to place after the objects being linked to create a
|
|
+# shared library.
|
|
+postdep_objects=\`echo $lt_postdep_objects | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# Dependencies to place before the objects being linked to create a
|
|
+# shared library.
|
|
+predeps=$lt_predeps
|
|
+
|
|
+# Dependencies to place after the objects being linked to create a
|
|
+# shared library.
|
|
+postdeps=$lt_postdeps
|
|
+
|
|
+# The library search path used internally by the compiler when linking
|
|
+# a shared library.
|
|
+compiler_lib_search_path=\`echo $lt_compiler_lib_search_path | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# 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_allow_undefined_flag
|
|
+
|
|
+# Flag that forces no undefined symbols.
|
|
+no_undefined_flag=$lt_no_undefined_flag
|
|
+
|
|
+# 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=$hardcode_action
|
|
+
|
|
+# 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_hardcode_libdir_flag_spec
|
|
+
|
|
+# 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_hardcode_libdir_flag_spec_ld
|
|
+
|
|
+# Whether we need a single -rpath flag with a separated argument.
|
|
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
|
|
+
|
|
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
|
|
+# resulting binary.
|
|
+hardcode_direct=$hardcode_direct
|
|
+
|
|
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
|
|
+# resulting binary.
|
|
+hardcode_minus_L=$hardcode_minus_L
|
|
+
|
|
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
|
|
+# the resulting binary.
|
|
+hardcode_shlibpath_var=$hardcode_shlibpath_var
|
|
+
|
|
+# 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=$hardcode_automatic
|
|
+
|
|
+# 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=$link_all_deplibs
|
|
+
|
|
+# Compile-time system search path for libraries
|
|
+sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# 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="$fix_srcfile_path"
|
|
+
|
|
+# Set to yes if exported symbols are required.
|
|
+always_export_symbols=$always_export_symbols
|
|
+
|
|
+# The commands to list exported symbols.
|
|
+export_symbols_cmds=$lt_export_symbols_cmds
|
|
+
|
|
+# 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_exclude_expsyms
|
|
+
|
|
+# Symbols that must always be exported.
|
|
+include_expsyms=$lt_include_expsyms
|
|
+
|
|
+# ### END LIBTOOL CONFIG
|
|
+
|
|
+__EOF__
|
|
+
|
|
+
|
|
+ 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_ext=c
|
|
+ac_cpp='$CPP $CPPFLAGS'
|
|
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
+
|
|
+CC="$lt_save_CC"
|
|
+
|
|
+
|
|
+# Check whether --with-tags or --without-tags was given.
|
|
+if test "${with_tags+set}" = set; then
|
|
+ withval="$with_tags"
|
|
+ tagnames="$withval"
|
|
+fi;
|
|
+
|
|
+if test -f "$ltmain" && test -n "$tagnames"; then
|
|
+ if test ! -f "${ofile}"; then
|
|
+ { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5
|
|
+echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;}
|
|
+ fi
|
|
+
|
|
+ if test -z "$LTCC"; then
|
|
+ eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
|
|
+ if test -z "$LTCC"; then
|
|
+ { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5
|
|
+echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;}
|
|
+ else
|
|
+ { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5
|
|
+echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;}
|
|
+ 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
|
|
+ "") ;;
|
|
+ *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5
|
|
+echo "$as_me: error: invalid tag name: $tagname" >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
|
|
+ then
|
|
+ { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5
|
|
+echo "$as_me: error: tag name \"$tagname\" already exists" >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+ fi
|
|
+
|
|
+ # Update the list of available tags.
|
|
+ if test -n "$tagname"; then
|
|
+ echo appending configuration tag \"$tagname\" to $ofile
|
|
+
|
|
+ case $tagname in
|
|
+ CXX)
|
|
+ if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
|
|
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
|
|
+ (test "X$CXX" != "Xg++"))) ; then
|
|
+ ac_ext=cc
|
|
+ac_cpp='$CXXCPP $CPPFLAGS'
|
|
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+archive_cmds_need_lc_CXX=no
|
|
+allow_undefined_flag_CXX=
|
|
+always_export_symbols_CXX=no
|
|
+archive_expsym_cmds_CXX=
|
|
+export_dynamic_flag_spec_CXX=
|
|
+hardcode_direct_CXX=no
|
|
+hardcode_libdir_flag_spec_CXX=
|
|
+hardcode_libdir_flag_spec_ld_CXX=
|
|
+hardcode_libdir_separator_CXX=
|
|
+hardcode_minus_L_CXX=no
|
|
+hardcode_shlibpath_var_CXX=unsupported
|
|
+hardcode_automatic_CXX=no
|
|
+module_cmds_CXX=
|
|
+module_expsym_cmds_CXX=
|
|
+link_all_deplibs_CXX=unknown
|
|
+old_archive_cmds_CXX=$old_archive_cmds
|
|
+no_undefined_flag_CXX=
|
|
+whole_archive_flag_spec_CXX=
|
|
+enable_shared_with_static_runtimes_CXX=no
|
|
+
|
|
+# Dependencies to place before and after the object being linked:
|
|
+predep_objects_CXX=
|
|
+postdep_objects_CXX=
|
|
+predeps_CXX=
|
|
+postdeps_CXX=
|
|
+compiler_lib_search_path_CXX=
|
|
+
|
|
+# Source file extension for C++ test sources.
|
|
+ac_ext=cpp
|
|
+
|
|
+# Object file extension for compiled C++ test sources.
|
|
+objext=o
|
|
+objext_CXX=$objext
|
|
+
|
|
+# Code to be used in simple compile tests
|
|
+lt_simple_compile_test_code="int some_variable = 0;\n"
|
|
+
|
|
+# Code to be used in simple link tests
|
|
+lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n'
|
|
+
|
|
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
|
|
+
|
|
+# 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
|
|
+
|
|
+
|
|
+# save warnings/boilerplate of simple test code
|
|
+ac_outfile=conftest.$ac_objext
|
|
+printf "$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*
|
|
+
|
|
+ac_outfile=conftest.$ac_objext
|
|
+printf "$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*
|
|
+
|
|
+
|
|
+# Allow CC to be a program name with arguments.
|
|
+lt_save_CC=$CC
|
|
+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++"}
|
|
+compiler=$CC
|
|
+compiler_CXX=$CC
|
|
+for cc_temp in $compiler""; 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-%%"`
|
|
+
|
|
+
|
|
+# We don't want -fno-exception wen compiling C++ code, so set the
|
|
+# no_builtin_flag separately
|
|
+if test "$GXX" = yes; then
|
|
+ lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
|
|
+else
|
|
+ lt_prog_compiler_no_builtin_flag_CXX=
|
|
+fi
|
|
+
|
|
+if test "$GXX" = yes; then
|
|
+ # Set up default GNU C++ configuration
|
|
+
|
|
+
|
|
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
|
|
+if test "${with_gnu_ld+set}" = set; then
|
|
+ withval="$with_gnu_ld"
|
|
+ test "$withval" = no || with_gnu_ld=yes
|
|
+else
|
|
+ with_gnu_ld=no
|
|
+fi;
|
|
+ac_prog=ld
|
|
+if test "$GCC" = yes; then
|
|
+ # Check if gcc -print-prog-name=ld gives a path.
|
|
+ echo "$as_me:$LINENO: checking for ld used by $CC" >&5
|
|
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
|
|
+ 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
|
|
+ echo "$as_me:$LINENO: checking for GNU ld" >&5
|
|
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: checking for non-GNU ld" >&5
|
|
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
|
|
+fi
|
|
+if test "${lt_cv_path_LD+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ 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
|
|
+fi
|
|
+
|
|
+LD="$lt_cv_path_LD"
|
|
+if test -n "$LD"; then
|
|
+ echo "$as_me:$LINENO: result: $LD" >&5
|
|
+echo "${ECHO_T}$LD" >&6
|
|
+else
|
|
+ echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6
|
|
+fi
|
|
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
|
|
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
|
|
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
|
|
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ # 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
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
|
|
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
|
|
+with_gnu_ld=$lt_cv_prog_gnu_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
|
|
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
|
|
+
|
|
+ hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
|
|
+ export_dynamic_flag_spec_CXX='${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
|
|
+ whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
|
|
+ else
|
|
+ whole_archive_flag_spec_CXX=
|
|
+ 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.
|
|
+ archive_cmds_CXX='$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 "\-L"'
|
|
+
|
|
+else
|
|
+ GXX=no
|
|
+ with_gnu_ld=no
|
|
+ wlarc=
|
|
+fi
|
|
+
|
|
+# PORTME: fill in a description of your system's C++ link characteristics
|
|
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
|
|
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
|
|
+ld_shlibs_CXX=yes
|
|
+case $host_os in
|
|
+ aix3*)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ 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
|
|
+ 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
|
|
+ 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.
|
|
+
|
|
+ archive_cmds_CXX=''
|
|
+ hardcode_direct_CXX=yes
|
|
+ hardcode_libdir_separator_CXX=':'
|
|
+ link_all_deplibs_CXX=yes
|
|
+
|
|
+ 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
|
|
+ hardcode_direct_CXX=yes
|
|
+ else
|
|
+ # We have old collect2
|
|
+ hardcode_direct_CXX=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
|
|
+ hardcode_minus_L_CXX=yes
|
|
+ hardcode_libdir_flag_spec_CXX='-L$libdir'
|
|
+ hardcode_libdir_separator_CXX=
|
|
+ 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.
|
|
+ always_export_symbols_CXX=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.
|
|
+ allow_undefined_flag_CXX='-berok'
|
|
+ # Determine the default libpath from the value encoded in an empty executable.
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_cxx_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+
|
|
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
|
+}'`
|
|
+# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
|
+}'`; fi
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext \
|
|
+ conftest$ac_exeext conftest.$ac_ext
|
|
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
|
|
+
|
|
+ hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
|
|
+
|
|
+ archive_expsym_cmds_CXX="\$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
|
|
+ hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
|
|
+ allow_undefined_flag_CXX="-z nodefs"
|
|
+ archive_expsym_cmds_CXX="\$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.
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_cxx_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+
|
|
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
|
+}'`
|
|
+# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
|
+}'`; fi
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext \
|
|
+ conftest$ac_exeext conftest.$ac_ext
|
|
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
|
|
+
|
|
+ hardcode_libdir_flag_spec_CXX='${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.
|
|
+ no_undefined_flag_CXX=' ${wl}-bernotok'
|
|
+ allow_undefined_flag_CXX=' ${wl}-berok'
|
|
+ # Exported symbols can be pulled into shared objects from archives
|
|
+ whole_archive_flag_spec_CXX='$convenience'
|
|
+ archive_cmds_need_lc_CXX=yes
|
|
+ # This is similar to how AIX traditionally builds its shared libraries.
|
|
+ archive_expsym_cmds_CXX="\$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
|
|
+ allow_undefined_flag_CXX=unsupported
|
|
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
|
|
+ # support --undefined. This deserves some investigation. FIXME
|
|
+ archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ else
|
|
+ ld_shlibs_CXX=no
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ chorus*)
|
|
+ case $cc_basename in
|
|
+ *)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+
|
|
+ cygwin* | mingw* | pw32*)
|
|
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
|
|
+ # as there is no search path for DLLs.
|
|
+ hardcode_libdir_flag_spec_CXX='-L$libdir'
|
|
+ allow_undefined_flag_CXX=unsupported
|
|
+ always_export_symbols_CXX=no
|
|
+ enable_shared_with_static_runtimes_CXX=yes
|
|
+
|
|
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
|
|
+ archive_cmds_CXX='$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...
|
|
+ archive_expsym_cmds_CXX='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
|
|
+ ld_shlibs_CXX=no
|
|
+ fi
|
|
+ ;;
|
|
+ darwin* | rhapsody*)
|
|
+ case $host_os in
|
|
+ rhapsody* | darwin1.[012])
|
|
+ allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress'
|
|
+ ;;
|
|
+ *) # Darwin 1.3 on
|
|
+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
|
|
+ allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
|
|
+ else
|
|
+ case ${MACOSX_DEPLOYMENT_TARGET} in
|
|
+ 10.[012])
|
|
+ allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
|
|
+ ;;
|
|
+ 10.*)
|
|
+ allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup'
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ archive_cmds_need_lc_CXX=no
|
|
+ hardcode_direct_CXX=no
|
|
+ hardcode_automatic_CXX=yes
|
|
+ hardcode_shlibpath_var_CXX=unsupported
|
|
+ whole_archive_flag_spec_CXX=''
|
|
+ link_all_deplibs_CXX=yes
|
|
+
|
|
+ if test "$GXX" = yes ; then
|
|
+ lt_int_apple_cc_single_mod=no
|
|
+ output_verbose_link_cmd='echo'
|
|
+ if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then
|
|
+ lt_int_apple_cc_single_mod=yes
|
|
+ fi
|
|
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
|
|
+ archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
|
|
+ else
|
|
+ archive_cmds_CXX='$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'
|
|
+ fi
|
|
+ module_cmds_CXX='$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
|
|
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
|
|
+ archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
|
|
+ else
|
|
+ archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "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~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
|
|
+ fi
|
|
+ module_expsym_cmds_CXX='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'
|
|
+ archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
|
|
+ module_cmds_CXX='$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
|
|
+ archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
|
|
+ module_expsym_cmds_CXX='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}'
|
|
+ ;;
|
|
+ *)
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ dgux*)
|
|
+ case $cc_basename in
|
|
+ ec++*)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ ghcx*)
|
|
+ # Green Hills C++ Compiler
|
|
+ # FIXME: insert proper C++ library support
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ *)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ freebsd[12]*)
|
|
+ # C++ shared libraries reported to be fairly broken before switch to ELF
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ freebsd-elf*)
|
|
+ archive_cmds_need_lc_CXX=no
|
|
+ ;;
|
|
+ freebsd* | kfreebsd*-gnu | dragonfly*)
|
|
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
|
|
+ # conventions
|
|
+ ld_shlibs_CXX=yes
|
|
+ ;;
|
|
+ gnu*)
|
|
+ ;;
|
|
+ hpux9*)
|
|
+ hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
|
|
+ hardcode_libdir_separator_CXX=:
|
|
+ export_dynamic_flag_spec_CXX='${wl}-E'
|
|
+ hardcode_direct_CXX=yes
|
|
+ hardcode_minus_L_CXX=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
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ aCC*)
|
|
+ archive_cmds_CXX='$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) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
|
|
+ ;;
|
|
+ *)
|
|
+ if test "$GXX" = yes; then
|
|
+ archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${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
|
|
+ ld_shlibs_CXX=no
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ hpux10*|hpux11*)
|
|
+ if test $with_gnu_ld = no; then
|
|
+ hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
|
|
+ hardcode_libdir_separator_CXX=:
|
|
+
|
|
+ case $host_cpu in
|
|
+ hppa*64*|ia64*)
|
|
+ hardcode_libdir_flag_spec_ld_CXX='+b $libdir'
|
|
+ ;;
|
|
+ *)
|
|
+ export_dynamic_flag_spec_CXX='${wl}-E'
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ case $host_cpu in
|
|
+ hppa*64*|ia64*)
|
|
+ hardcode_direct_CXX=no
|
|
+ hardcode_shlibpath_var_CXX=no
|
|
+ ;;
|
|
+ *)
|
|
+ hardcode_direct_CXX=yes
|
|
+ hardcode_minus_L_CXX=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
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ aCC*)
|
|
+ case $host_cpu in
|
|
+ hppa*64*)
|
|
+ archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
|
|
+ ;;
|
|
+ ia64*)
|
|
+ archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
|
|
+ ;;
|
|
+ *)
|
|
+ archive_cmds_CXX='$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; echo $list'
|
|
+ ;;
|
|
+ *)
|
|
+ if test "$GXX" = yes; then
|
|
+ if test $with_gnu_ld = no; then
|
|
+ case $host_cpu in
|
|
+ hppa*64*)
|
|
+ archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
|
|
+ ;;
|
|
+ ia64*)
|
|
+ archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
|
|
+ ;;
|
|
+ *)
|
|
+ archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${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
|
|
+ ld_shlibs_CXX=no
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ interix3*)
|
|
+ hardcode_direct_CXX=no
|
|
+ hardcode_shlibpath_var_CXX=no
|
|
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
|
|
+ export_dynamic_flag_spec_CXX='${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.
|
|
+ archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
|
+ archive_expsym_cmds_CXX='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++
|
|
+ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -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.
|
|
+ old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
|
|
+ ;;
|
|
+ *)
|
|
+ if test "$GXX" = yes; then
|
|
+ if test "$with_gnu_ld" = no; then
|
|
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
|
|
+ else
|
|
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
|
|
+ fi
|
|
+ fi
|
|
+ link_all_deplibs_CXX=yes
|
|
+ ;;
|
|
+ esac
|
|
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
|
|
+ hardcode_libdir_separator_CXX=:
|
|
+ ;;
|
|
+ linux*)
|
|
+ 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.
|
|
+ archive_cmds_CXX='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'
|
|
+ archive_expsym_cmds_CXX='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; echo $list'
|
|
+
|
|
+ hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir'
|
|
+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
|
|
+
|
|
+ # Archives containing C++ object files must be created using
|
|
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
|
|
+ old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
|
|
+ ;;
|
|
+ icpc*)
|
|
+ # 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."*)
|
|
+ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ archive_expsym_cmds_CXX='$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
|
|
+ archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
|
|
+ ;;
|
|
+ esac
|
|
+ archive_cmds_need_lc_CXX=no
|
|
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
|
|
+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
|
|
+ whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
|
|
+ ;;
|
|
+ pgCC*)
|
|
+ # Portland Group C++ compiler
|
|
+ archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
|
|
+ archive_expsym_cmds_CXX='$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'
|
|
+
|
|
+ hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
|
|
+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
|
|
+ whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
|
|
+ ;;
|
|
+ cxx*)
|
|
+ # Compaq C++
|
|
+ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ archive_expsym_cmds_CXX='$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
|
|
+ hardcode_libdir_flag_spec_CXX='-rpath $libdir'
|
|
+ hardcode_libdir_separator_CXX=:
|
|
+
|
|
+ # 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=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ lynxos*)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ m88k*)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ mvs*)
|
|
+ case $cc_basename in
|
|
+ cxx*)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ *)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ netbsd*)
|
|
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
|
|
+ archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
|
|
+ wlarc=
|
|
+ hardcode_libdir_flag_spec_CXX='-R$libdir'
|
|
+ hardcode_direct_CXX=yes
|
|
+ hardcode_shlibpath_var_CXX=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::"'
|
|
+ ;;
|
|
+ openbsd2*)
|
|
+ # C++ shared libraries are fairly broken
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ openbsd*)
|
|
+ hardcode_direct_CXX=yes
|
|
+ hardcode_shlibpath_var_CXX=no
|
|
+ archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
|
|
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
|
|
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
|
|
+ archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
|
|
+ export_dynamic_flag_spec_CXX='${wl}-E'
|
|
+ whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
|
|
+ fi
|
|
+ output_verbose_link_cmd='echo'
|
|
+ ;;
|
|
+ osf3*)
|
|
+ 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.
|
|
+ archive_cmds_CXX='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'
|
|
+
|
|
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
|
|
+ hardcode_libdir_separator_CXX=:
|
|
+
|
|
+ # Archives containing C++ object files must be created using
|
|
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
|
|
+ old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
|
|
+
|
|
+ ;;
|
|
+ RCC*)
|
|
+ # Rational C++ 2.4.1
|
|
+ # FIXME: insert proper C++ library support
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ cxx*)
|
|
+ allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
|
|
+ archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
|
|
+
|
|
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
|
|
+ hardcode_libdir_separator_CXX=:
|
|
+
|
|
+ # 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=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
|
|
+ ;;
|
|
+ *)
|
|
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
|
|
+ allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
|
|
+ archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
|
|
+
|
|
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
|
|
+ hardcode_libdir_separator_CXX=:
|
|
+
|
|
+ # 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 "\-L"'
|
|
+
|
|
+ else
|
|
+ # FIXME: insert proper C++ library support
|
|
+ ld_shlibs_CXX=no
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ 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.
|
|
+ archive_cmds_CXX='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'
|
|
+
|
|
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
|
|
+ hardcode_libdir_separator_CXX=:
|
|
+
|
|
+ # Archives containing C++ object files must be created using
|
|
+ # the KAI C++ compiler.
|
|
+ old_archive_cmds_CXX='$CC -o $oldlib $oldobjs'
|
|
+ ;;
|
|
+ RCC*)
|
|
+ # Rational C++ 2.4.1
|
|
+ # FIXME: insert proper C++ library support
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ cxx*)
|
|
+ allow_undefined_flag_CXX=' -expect_unresolved \*'
|
|
+ archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
|
|
+ archive_expsym_cmds_CXX='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'
|
|
+
|
|
+ hardcode_libdir_flag_spec_CXX='-rpath $libdir'
|
|
+ hardcode_libdir_separator_CXX=:
|
|
+
|
|
+ # 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=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
|
|
+ ;;
|
|
+ *)
|
|
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
|
|
+ allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
|
|
+ archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
|
|
+
|
|
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
|
|
+ hardcode_libdir_separator_CXX=:
|
|
+
|
|
+ # 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 "\-L"'
|
|
+
|
|
+ else
|
|
+ # FIXME: insert proper C++ library support
|
|
+ ld_shlibs_CXX=no
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ psos*)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ sunos4*)
|
|
+ case $cc_basename in
|
|
+ CC*)
|
|
+ # Sun C++ 4.x
|
|
+ # FIXME: insert proper C++ library support
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ lcc*)
|
|
+ # Lucid
|
|
+ # FIXME: insert proper C++ library support
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ *)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ solaris*)
|
|
+ case $cc_basename in
|
|
+ CC*)
|
|
+ # Sun C++ 4.2, 5.x and Centerline C++
|
|
+ archive_cmds_need_lc_CXX=yes
|
|
+ no_undefined_flag_CXX=' -zdefs'
|
|
+ archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
|
|
+ archive_expsym_cmds_CXX='$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'
|
|
+
|
|
+ hardcode_libdir_flag_spec_CXX='-R$libdir'
|
|
+ hardcode_shlibpath_var_CXX=no
|
|
+ case $host_os in
|
|
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
|
|
+ *)
|
|
+ # The C++ compiler is used as linker so we must use $wl
|
|
+ # flag to pass the commands to the underlying system
|
|
+ # linker. We must also pass each convience library through
|
|
+ # to the system linker between allextract/defaultextract.
|
|
+ # The C++ compiler will combine linker options so we
|
|
+ # cannot just pass the convience library names through
|
|
+ # without $wl.
|
|
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
|
|
+ whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract'
|
|
+ ;;
|
|
+ esac
|
|
+ link_all_deplibs_CXX=yes
|
|
+
|
|
+ output_verbose_link_cmd='echo'
|
|
+
|
|
+ # 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.
|
|
+ old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
|
|
+ ;;
|
|
+ gcx*)
|
|
+ # Green Hills C++ Compiler
|
|
+ archive_cmds_CXX='$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.
|
|
+ old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
|
|
+ ;;
|
|
+ *)
|
|
+ # GNU C++ compiler with Solaris linker
|
|
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
|
|
+ no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
|
|
+ if $CC --version | grep -v '^2\.7' > /dev/null; then
|
|
+ archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
|
|
+ archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
|
|
+ $CC -shared -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 \"\-L\""
|
|
+ else
|
|
+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
|
|
+ # platform.
|
|
+ archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
|
|
+ archive_expsym_cmds_CXX='$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 \"\-L\""
|
|
+ fi
|
|
+
|
|
+ hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
|
|
+ no_undefined_flag_CXX='${wl}-z,text'
|
|
+ archive_cmds_need_lc_CXX=no
|
|
+ hardcode_shlibpath_var_CXX=no
|
|
+ runpath_var='LD_RUN_PATH'
|
|
+
|
|
+ case $cc_basename in
|
|
+ CC*)
|
|
+ archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ ;;
|
|
+ *)
|
|
+ archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds_CXX='$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.
|
|
+ # 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.
|
|
+ # So that behaviour is only enabled if SCOABSPATH is set to a
|
|
+ # non-empty value in the environment. Most likely only useful for
|
|
+ # creating official distributions of packages.
|
|
+ # This is a hack until libtool officially supports absolute path
|
|
+ # names for shared libraries.
|
|
+ no_undefined_flag_CXX='${wl}-z,text'
|
|
+ allow_undefined_flag_CXX='${wl}-z,nodefs'
|
|
+ archive_cmds_need_lc_CXX=no
|
|
+ hardcode_shlibpath_var_CXX=no
|
|
+ hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
|
|
+ hardcode_libdir_separator_CXX=':'
|
|
+ link_all_deplibs_CXX=yes
|
|
+ export_dynamic_flag_spec_CXX='${wl}-Bexport'
|
|
+ runpath_var='LD_RUN_PATH'
|
|
+
|
|
+ case $cc_basename in
|
|
+ CC*)
|
|
+ archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ ;;
|
|
+ *)
|
|
+ archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$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
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ *)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ vxworks*)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+ *)
|
|
+ # FIXME: insert proper C++ library support
|
|
+ ld_shlibs_CXX=no
|
|
+ ;;
|
|
+esac
|
|
+echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
|
|
+echo "${ECHO_T}$ld_shlibs_CXX" >&6
|
|
+test "$ld_shlibs_CXX" = no && can_build_shared=no
|
|
+
|
|
+GCC_CXX="$GXX"
|
|
+LD_CXX="$LD"
|
|
+
|
|
+
|
|
+cat > conftest.$ac_ext <<EOF
|
|
+class Foo
|
|
+{
|
|
+public:
|
|
+ Foo (void) { a = 0; }
|
|
+private:
|
|
+ int a;
|
|
+};
|
|
+EOF
|
|
+
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; 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 "$compiler_lib_search_path_CXX"; then
|
|
+ compiler_lib_search_path_CXX="${prev}${p}"
|
|
+ else
|
|
+ compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${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 "$postdeps_CXX"; then
|
|
+ postdeps_CXX="${prev}${p}"
|
|
+ else
|
|
+ postdeps_CXX="${postdeps_CXX} ${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 "$predep_objects_CXX"; then
|
|
+ predep_objects_CXX="$p"
|
|
+ else
|
|
+ predep_objects_CXX="$predep_objects_CXX $p"
|
|
+ fi
|
|
+ else
|
|
+ if test -z "$postdep_objects_CXX"; then
|
|
+ postdep_objects_CXX="$p"
|
|
+ else
|
|
+ postdep_objects_CXX="$postdep_objects_CXX $p"
|
|
+ fi
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ *) ;; # Ignore the rest.
|
|
+
|
|
+ esac
|
|
+ done
|
|
+
|
|
+ # Clean up.
|
|
+ rm -f a.out a.exe
|
|
+else
|
|
+ echo "libtool.m4: error: problem compiling CXX test program"
|
|
+fi
|
|
+
|
|
+$rm -f confest.$objext
|
|
+
|
|
+# PORTME: override above test on systems where it is broken
|
|
+case $host_os in
|
|
+interix3*)
|
|
+ # Interix 3.5 installs completely hosed .la files for C++, so rather than
|
|
+ # hack all around it, let's just trust "g++" to DTRT.
|
|
+ predep_objects_CXX=
|
|
+ postdep_objects_CXX=
|
|
+ postdeps_CXX=
|
|
+ ;;
|
|
+
|
|
+solaris*)
|
|
+ case $cc_basename in
|
|
+ CC*)
|
|
+ # 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.
|
|
+ postdeps_CXX='-lCstd -lCrun'
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+
|
|
+case " $postdeps_CXX " in
|
|
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
|
|
+esac
|
|
+
|
|
+lt_prog_compiler_wl_CXX=
|
|
+lt_prog_compiler_pic_CXX=
|
|
+lt_prog_compiler_static_CXX=
|
|
+
|
|
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
|
|
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
|
|
+
|
|
+ # C++ specific cases for pic, static, wl, etc.
|
|
+ if test "$GXX" = yes; then
|
|
+ lt_prog_compiler_wl_CXX='-Wl,'
|
|
+ lt_prog_compiler_static_CXX='-static'
|
|
+
|
|
+ case $host_os in
|
|
+ aix*)
|
|
+ # All AIX code is PIC.
|
|
+ if test "$host_cpu" = ia64; then
|
|
+ # AIX 5 now supports IA64 processor
|
|
+ lt_prog_compiler_static_CXX='-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_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
|
|
+ ;;
|
|
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
|
|
+ # PIC is the default for these OSes.
|
|
+ ;;
|
|
+ mingw* | os2* | pw32*)
|
|
+ # 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_prog_compiler_pic_CXX='-DDLL_EXPORT'
|
|
+ ;;
|
|
+ darwin* | rhapsody*)
|
|
+ # PIC is the default on this platform
|
|
+ # Common symbols not allowed in MH_DYLIB files
|
|
+ lt_prog_compiler_pic_CXX='-fno-common'
|
|
+ ;;
|
|
+ *djgpp*)
|
|
+ # DJGPP does not support shared libraries at all
|
|
+ lt_prog_compiler_pic_CXX=
|
|
+ ;;
|
|
+ interix3*)
|
|
+ # 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_prog_compiler_pic_CXX=-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*)
|
|
+ ;;
|
|
+ *)
|
|
+ lt_prog_compiler_pic_CXX='-fPIC'
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ *)
|
|
+ lt_prog_compiler_pic_CXX='-fPIC'
|
|
+ ;;
|
|
+ esac
|
|
+ else
|
|
+ case $host_os in
|
|
+ aix4* | aix5*)
|
|
+ # All AIX code is PIC.
|
|
+ if test "$host_cpu" = ia64; then
|
|
+ # AIX 5 now supports IA64 processor
|
|
+ lt_prog_compiler_static_CXX='-Bstatic'
|
|
+ else
|
|
+ lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
|
|
+ fi
|
|
+ ;;
|
|
+ chorus*)
|
|
+ case $cc_basename in
|
|
+ cxch68*)
|
|
+ # Green Hills C++ Compiler
|
|
+ # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--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
|
|
+ ;;
|
|
+ darwin*)
|
|
+ # PIC is the default on this platform
|
|
+ # Common symbols not allowed in MH_DYLIB files
|
|
+ case $cc_basename in
|
|
+ xlc*)
|
|
+ lt_prog_compiler_pic_CXX='-qnocommon'
|
|
+ lt_prog_compiler_wl_CXX='-Wl,'
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ dgux*)
|
|
+ case $cc_basename in
|
|
+ ec++*)
|
|
+ lt_prog_compiler_pic_CXX='-KPIC'
|
|
+ ;;
|
|
+ ghcx*)
|
|
+ # Green Hills C++ Compiler
|
|
+ lt_prog_compiler_pic_CXX='-pic'
|
|
+ ;;
|
|
+ *)
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ freebsd* | kfreebsd*-gnu | dragonfly*)
|
|
+ # FreeBSD uses GNU C++
|
|
+ ;;
|
|
+ hpux9* | hpux10* | hpux11*)
|
|
+ case $cc_basename in
|
|
+ CC*)
|
|
+ lt_prog_compiler_wl_CXX='-Wl,'
|
|
+ lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
|
|
+ if test "$host_cpu" != ia64; then
|
|
+ lt_prog_compiler_pic_CXX='+Z'
|
|
+ fi
|
|
+ ;;
|
|
+ aCC*)
|
|
+ lt_prog_compiler_wl_CXX='-Wl,'
|
|
+ lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
|
|
+ case $host_cpu in
|
|
+ hppa*64*|ia64*)
|
|
+ # +Z the default
|
|
+ ;;
|
|
+ *)
|
|
+ lt_prog_compiler_pic_CXX='+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_prog_compiler_wl_CXX='-Wl,'
|
|
+ lt_prog_compiler_static_CXX='-non_shared'
|
|
+ # CC pic flag -KPIC is the default.
|
|
+ ;;
|
|
+ *)
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ linux*)
|
|
+ case $cc_basename in
|
|
+ KCC*)
|
|
+ # KAI C++ Compiler
|
|
+ lt_prog_compiler_wl_CXX='--backend -Wl,'
|
|
+ lt_prog_compiler_pic_CXX='-fPIC'
|
|
+ ;;
|
|
+ icpc* | ecpc*)
|
|
+ # Intel C++
|
|
+ lt_prog_compiler_wl_CXX='-Wl,'
|
|
+ lt_prog_compiler_pic_CXX='-KPIC'
|
|
+ lt_prog_compiler_static_CXX='-static'
|
|
+ ;;
|
|
+ pgCC*)
|
|
+ # Portland Group C++ compiler.
|
|
+ lt_prog_compiler_wl_CXX='-Wl,'
|
|
+ lt_prog_compiler_pic_CXX='-fpic'
|
|
+ lt_prog_compiler_static_CXX='-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_prog_compiler_pic_CXX=
|
|
+ lt_prog_compiler_static_CXX='-non_shared'
|
|
+ ;;
|
|
+ *)
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ lynxos*)
|
|
+ ;;
|
|
+ m88k*)
|
|
+ ;;
|
|
+ mvs*)
|
|
+ case $cc_basename in
|
|
+ cxx*)
|
|
+ lt_prog_compiler_pic_CXX='-W c,exportall'
|
|
+ ;;
|
|
+ *)
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ netbsd*)
|
|
+ ;;
|
|
+ osf3* | osf4* | osf5*)
|
|
+ case $cc_basename in
|
|
+ KCC*)
|
|
+ lt_prog_compiler_wl_CXX='--backend -Wl,'
|
|
+ ;;
|
|
+ RCC*)
|
|
+ # Rational C++ 2.4.1
|
|
+ lt_prog_compiler_pic_CXX='-pic'
|
|
+ ;;
|
|
+ cxx*)
|
|
+ # Digital/Compaq C++
|
|
+ lt_prog_compiler_wl_CXX='-Wl,'
|
|
+ # Make sure the PIC flag is empty. It appears that all Alpha
|
|
+ # Linux and Compaq Tru64 Unix objects are PIC.
|
|
+ lt_prog_compiler_pic_CXX=
|
|
+ lt_prog_compiler_static_CXX='-non_shared'
|
|
+ ;;
|
|
+ *)
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ psos*)
|
|
+ ;;
|
|
+ solaris*)
|
|
+ case $cc_basename in
|
|
+ CC*)
|
|
+ # Sun C++ 4.2, 5.x and Centerline C++
|
|
+ lt_prog_compiler_pic_CXX='-KPIC'
|
|
+ lt_prog_compiler_static_CXX='-Bstatic'
|
|
+ lt_prog_compiler_wl_CXX='-Qoption ld '
|
|
+ ;;
|
|
+ gcx*)
|
|
+ # Green Hills C++ Compiler
|
|
+ lt_prog_compiler_pic_CXX='-PIC'
|
|
+ ;;
|
|
+ *)
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ sunos4*)
|
|
+ case $cc_basename in
|
|
+ CC*)
|
|
+ # Sun C++ 4.x
|
|
+ lt_prog_compiler_pic_CXX='-pic'
|
|
+ lt_prog_compiler_static_CXX='-Bstatic'
|
|
+ ;;
|
|
+ lcc*)
|
|
+ # Lucid
|
|
+ lt_prog_compiler_pic_CXX='-pic'
|
|
+ ;;
|
|
+ *)
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ tandem*)
|
|
+ case $cc_basename in
|
|
+ NCC*)
|
|
+ # NonStop-UX NCC 3.20
|
|
+ lt_prog_compiler_pic_CXX='-KPIC'
|
|
+ ;;
|
|
+ *)
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
|
|
+ case $cc_basename in
|
|
+ CC*)
|
|
+ lt_prog_compiler_wl_CXX='-Wl,'
|
|
+ lt_prog_compiler_pic_CXX='-KPIC'
|
|
+ lt_prog_compiler_static_CXX='-Bstatic'
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ vxworks*)
|
|
+ ;;
|
|
+ *)
|
|
+ lt_prog_compiler_can_build_shared_CXX=no
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+
|
|
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5
|
|
+echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6
|
|
+
|
|
+#
|
|
+# Check to make sure the PIC flag actually works.
|
|
+#
|
|
+if test -n "$lt_prog_compiler_pic_CXX"; then
|
|
+
|
|
+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
|
|
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6
|
|
+if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ lt_prog_compiler_pic_works_CXX=no
|
|
+ ac_outfile=conftest.$ac_objext
|
|
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
|
|
+ lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
|
|
+ # 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:14196: $lt_compile\"" >&5)
|
|
+ (eval "$lt_compile" 2>conftest.err)
|
|
+ ac_status=$?
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:14200: \$? = $ac_status" >&5
|
|
+ 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
|
|
+ lt_prog_compiler_pic_works_CXX=yes
|
|
+ fi
|
|
+ fi
|
|
+ $rm conftest*
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5
|
|
+echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6
|
|
+
|
|
+if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then
|
|
+ case $lt_prog_compiler_pic_CXX in
|
|
+ "" | " "*) ;;
|
|
+ *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
|
|
+ esac
|
|
+else
|
|
+ lt_prog_compiler_pic_CXX=
|
|
+ lt_prog_compiler_can_build_shared_CXX=no
|
|
+fi
|
|
+
|
|
+fi
|
|
+case $host_os in
|
|
+ # For platforms which do not support PIC, -DPIC is meaningless:
|
|
+ *djgpp*)
|
|
+ lt_prog_compiler_pic_CXX=
|
|
+ ;;
|
|
+ *)
|
|
+ lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+#
|
|
+# Check to make sure the static flag actually works.
|
|
+#
|
|
+wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
|
|
+echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
|
|
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6
|
|
+if test "${lt_prog_compiler_static_works_CXX+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ lt_prog_compiler_static_works_CXX=no
|
|
+ save_LDFLAGS="$LDFLAGS"
|
|
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
|
|
+ printf "$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>&5
|
|
+ $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
|
|
+ lt_prog_compiler_static_works_CXX=yes
|
|
+ fi
|
|
+ else
|
|
+ lt_prog_compiler_static_works_CXX=yes
|
|
+ fi
|
|
+ fi
|
|
+ $rm conftest*
|
|
+ LDFLAGS="$save_LDFLAGS"
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5
|
|
+echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6
|
|
+
|
|
+if test x"$lt_prog_compiler_static_works_CXX" = xyes; then
|
|
+ :
|
|
+else
|
|
+ lt_prog_compiler_static_CXX=
|
|
+fi
|
|
+
|
|
+
|
|
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
|
|
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
|
|
+if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ lt_cv_prog_compiler_c_o_CXX=no
|
|
+ $rm -r conftest 2>/dev/null
|
|
+ mkdir conftest
|
|
+ cd conftest
|
|
+ mkdir out
|
|
+ printf "$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:14300: $lt_compile\"" >&5)
|
|
+ (eval "$lt_compile" 2>out/conftest.err)
|
|
+ ac_status=$?
|
|
+ cat out/conftest.err >&5
|
|
+ echo "$as_me:14304: \$? = $ac_status" >&5
|
|
+ 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_cv_prog_compiler_c_o_CXX=yes
|
|
+ fi
|
|
+ fi
|
|
+ chmod u+w . 2>&5
|
|
+ $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*
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
|
|
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6
|
|
+
|
|
+
|
|
+hard_links="nottested"
|
|
+if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
|
|
+ # do not overwrite the value of need_locks provided by the user
|
|
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
|
|
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
|
|
+ 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
|
|
+ echo "$as_me:$LINENO: result: $hard_links" >&5
|
|
+echo "${ECHO_T}$hard_links" >&6
|
|
+ if test "$hard_links" = no; then
|
|
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
|
|
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
|
|
+ need_locks=warn
|
|
+ fi
|
|
+else
|
|
+ need_locks=no
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
|
|
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
|
|
+
|
|
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
|
|
+ case $host_os in
|
|
+ aix4* | aix5*)
|
|
+ # 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
|
|
+ export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
|
|
+ else
|
|
+ export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
|
|
+ fi
|
|
+ ;;
|
|
+ pw32*)
|
|
+ export_symbols_cmds_CXX="$ltdll_cmds"
|
|
+ ;;
|
|
+ cygwin* | mingw*)
|
|
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
|
|
+ ;;
|
|
+ *)
|
|
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
|
|
+echo "${ECHO_T}$ld_shlibs_CXX" >&6
|
|
+test "$ld_shlibs_CXX" = no && can_build_shared=no
|
|
+
|
|
+#
|
|
+# Do we need to explicitly link libc?
|
|
+#
|
|
+case "x$archive_cmds_need_lc_CXX" in
|
|
+x|xyes)
|
|
+ # Assume -lc should be added
|
|
+ archive_cmds_need_lc_CXX=yes
|
|
+
|
|
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
|
|
+ case $archive_cmds_CXX 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.
|
|
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
|
|
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
|
|
+ $rm conftest*
|
|
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
|
|
+
|
|
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } 2>conftest.err; then
|
|
+ soname=conftest
|
|
+ lib=conftest
|
|
+ libobjs=conftest.$ac_objext
|
|
+ deplibs=
|
|
+ wl=$lt_prog_compiler_wl_CXX
|
|
+ pic_flag=$lt_prog_compiler_pic_CXX
|
|
+ compiler_flags=-v
|
|
+ linker_flags=-v
|
|
+ verstring=
|
|
+ output_objdir=.
|
|
+ libname=conftest
|
|
+ lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
|
|
+ allow_undefined_flag_CXX=
|
|
+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
|
|
+ (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }
|
|
+ then
|
|
+ archive_cmds_need_lc_CXX=no
|
|
+ else
|
|
+ archive_cmds_need_lc_CXX=yes
|
|
+ fi
|
|
+ allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
|
|
+ else
|
|
+ cat conftest.err 1>&5
|
|
+ fi
|
|
+ $rm conftest*
|
|
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5
|
|
+echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
|
|
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
|
|
+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"
|
|
+if test "$GCC" = yes; then
|
|
+ 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 ';' >/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.
|
|
+ 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
|
|
+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`'
|
|
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
|
|
+ if test "$GCC" = yes; then
|
|
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
|
|
+ else
|
|
+ sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
|
|
+ fi
|
|
+ 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
|
|
+ ;;
|
|
+
|
|
+kfreebsd*-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
|
|
+ shlibpath_overrides_runpath=no
|
|
+ hardcode_into_libs=yes
|
|
+ dynamic_linker='GNU ld.so'
|
|
+ ;;
|
|
+
|
|
+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
|
|
+ ;;
|
|
+ freebsd*) # from 4.6 on
|
|
+ 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'
|
|
+ ;;
|
|
+
|
|
+interix3*)
|
|
+ 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*)
|
|
+ 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
|
|
+
|
|
+ # find out which ABI we are using
|
|
+ libsuff=
|
|
+ case "$host_cpu" in
|
|
+ x86_64*|s390x*|powerpc64*)
|
|
+ echo '#line 14836 "configure"' > conftest.$ac_ext
|
|
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; then
|
|
+ case `/usr/bin/file conftest.$ac_objext` in
|
|
+ *64-bit*)
|
|
+ libsuff=64
|
|
+ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ rm -rf conftest*
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # 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/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
|
|
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $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'
|
|
+ ;;
|
|
+
|
|
+knetbsd*-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
|
|
+ shlibpath_overrides_runpath=no
|
|
+ hardcode_into_libs=yes
|
|
+ dynamic_linker='GNU 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"
|
|
+ ;;
|
|
+
|
|
+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
|
|
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
|
|
+echo "${ECHO_T}$dynamic_linker" >&6
|
|
+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
|
|
+
|
|
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
|
|
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
|
|
+hardcode_action_CXX=
|
|
+if test -n "$hardcode_libdir_flag_spec_CXX" || \
|
|
+ test -n "$runpath_var_CXX" || \
|
|
+ test "X$hardcode_automatic_CXX" = "Xyes" ; then
|
|
+
|
|
+ # We can hardcode non-existant directories.
|
|
+ if test "$hardcode_direct_CXX" != 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, CXX)" != no &&
|
|
+ test "$hardcode_minus_L_CXX" != no; then
|
|
+ # Linking always hardcodes the temporary library directory.
|
|
+ hardcode_action_CXX=relink
|
|
+ else
|
|
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
|
|
+ hardcode_action_CXX=immediate
|
|
+ fi
|
|
+else
|
|
+ # We cannot hardcode anything, or else we can only hardcode existing
|
|
+ # directories.
|
|
+ hardcode_action_CXX=unsupported
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5
|
|
+echo "${ECHO_T}$hardcode_action_CXX" >&6
|
|
+
|
|
+if test "$hardcode_action_CXX" = 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
|
|
+
|
|
+
|
|
+# 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 \
|
|
+ compiler_CXX \
|
|
+ CC_CXX \
|
|
+ LD_CXX \
|
|
+ lt_prog_compiler_wl_CXX \
|
|
+ lt_prog_compiler_pic_CXX \
|
|
+ lt_prog_compiler_static_CXX \
|
|
+ lt_prog_compiler_no_builtin_flag_CXX \
|
|
+ export_dynamic_flag_spec_CXX \
|
|
+ thread_safe_flag_spec_CXX \
|
|
+ whole_archive_flag_spec_CXX \
|
|
+ enable_shared_with_static_runtimes_CXX \
|
|
+ old_archive_cmds_CXX \
|
|
+ old_archive_from_new_cmds_CXX \
|
|
+ predep_objects_CXX \
|
|
+ postdep_objects_CXX \
|
|
+ predeps_CXX \
|
|
+ postdeps_CXX \
|
|
+ compiler_lib_search_path_CXX \
|
|
+ archive_cmds_CXX \
|
|
+ archive_expsym_cmds_CXX \
|
|
+ postinstall_cmds_CXX \
|
|
+ postuninstall_cmds_CXX \
|
|
+ old_archive_from_expsyms_cmds_CXX \
|
|
+ allow_undefined_flag_CXX \
|
|
+ no_undefined_flag_CXX \
|
|
+ export_symbols_cmds_CXX \
|
|
+ hardcode_libdir_flag_spec_CXX \
|
|
+ hardcode_libdir_flag_spec_ld_CXX \
|
|
+ hardcode_libdir_separator_CXX \
|
|
+ hardcode_automatic_CXX \
|
|
+ module_cmds_CXX \
|
|
+ module_expsym_cmds_CXX \
|
|
+ lt_cv_prog_compiler_c_o_CXX \
|
|
+ exclude_expsyms_CXX \
|
|
+ include_expsyms_CXX; do
|
|
+
|
|
+ case $var in
|
|
+ old_archive_cmds_CXX | \
|
|
+ old_archive_from_new_cmds_CXX | \
|
|
+ archive_cmds_CXX | \
|
|
+ archive_expsym_cmds_CXX | \
|
|
+ module_cmds_CXX | \
|
|
+ module_expsym_cmds_CXX | \
|
|
+ old_archive_from_expsyms_cmds_CXX | \
|
|
+ export_symbols_cmds_CXX | \
|
|
+ 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
|
|
+
|
|
+cfgfile="$ofile"
|
|
+
|
|
+ cat <<__EOF__ >> "$cfgfile"
|
|
+# ### 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=$archive_cmds_need_lc_CXX
|
|
+
|
|
+# Whether or not to disallow shared libs when runtime libs are static
|
|
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
|
|
+
|
|
+# 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_compiler_CXX
|
|
+
|
|
+# Is the compiler the GNU C compiler?
|
|
+with_gcc=$GCC_CXX
|
|
+
|
|
+gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\`
|
|
+gcc_ver=\`gcc -dumpversion\`
|
|
+
|
|
+# An ERE matcher.
|
|
+EGREP=$lt_EGREP
|
|
+
|
|
+# The linker used to build libraries.
|
|
+LD=$lt_LD_CXX
|
|
+
|
|
+# 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_prog_compiler_wl_CXX
|
|
+
|
|
+# 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_prog_compiler_pic_CXX
|
|
+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_cv_prog_compiler_c_o_CXX
|
|
+
|
|
+# 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_prog_compiler_static_CXX
|
|
+
|
|
+# Compiler flag to turn off builtin functions.
|
|
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
|
|
+
|
|
+# Compiler flag to allow reflexive dlopens.
|
|
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
|
|
+
|
|
+# Compiler flag to generate shared objects directly from archives.
|
|
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
|
|
+
|
|
+# Compiler flag to generate thread-safe objects.
|
|
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX
|
|
+
|
|
+# 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_old_archive_cmds_CXX
|
|
+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_old_archive_from_new_cmds_CXX
|
|
+
|
|
+# Create a temporary old-style archive to link instead of a shared archive.
|
|
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
|
|
+
|
|
+# Commands used to build and install a shared archive.
|
|
+archive_cmds=$lt_archive_cmds_CXX
|
|
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
|
|
+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_module_cmds_CXX
|
|
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
|
|
+
|
|
+# 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=\`echo $lt_predep_objects_CXX | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# Dependencies to place after the objects being linked to create a
|
|
+# shared library.
|
|
+postdep_objects=\`echo $lt_postdep_objects_CXX | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# Dependencies to place before the objects being linked to create a
|
|
+# shared library.
|
|
+predeps=$lt_predeps_CXX
|
|
+
|
|
+# Dependencies to place after the objects being linked to create a
|
|
+# shared library.
|
|
+postdeps=$lt_postdeps_CXX
|
|
+
|
|
+# The library search path used internally by the compiler when linking
|
|
+# a shared library.
|
|
+compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_CXX | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# 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_allow_undefined_flag_CXX
|
|
+
|
|
+# Flag that forces no undefined symbols.
|
|
+no_undefined_flag=$lt_no_undefined_flag_CXX
|
|
+
|
|
+# 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=$hardcode_action_CXX
|
|
+
|
|
+# 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_hardcode_libdir_flag_spec_CXX
|
|
+
|
|
+# 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_hardcode_libdir_flag_spec_ld_CXX
|
|
+
|
|
+# Whether we need a single -rpath flag with a separated argument.
|
|
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
|
|
+
|
|
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
|
|
+# resulting binary.
|
|
+hardcode_direct=$hardcode_direct_CXX
|
|
+
|
|
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
|
|
+# resulting binary.
|
|
+hardcode_minus_L=$hardcode_minus_L_CXX
|
|
+
|
|
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
|
|
+# the resulting binary.
|
|
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
|
|
+
|
|
+# 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=$hardcode_automatic_CXX
|
|
+
|
|
+# 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=$link_all_deplibs_CXX
|
|
+
|
|
+# Compile-time system search path for libraries
|
|
+sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# 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="$fix_srcfile_path_CXX"
|
|
+
|
|
+# Set to yes if exported symbols are required.
|
|
+always_export_symbols=$always_export_symbols_CXX
|
|
+
|
|
+# The commands to list exported symbols.
|
|
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
|
|
+
|
|
+# 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_exclude_expsyms_CXX
|
|
+
|
|
+# Symbols that must always be exported.
|
|
+include_expsyms=$lt_include_expsyms_CXX
|
|
+
|
|
+# ### END LIBTOOL TAG CONFIG: $tagname
|
|
+
|
|
+__EOF__
|
|
+
|
|
+
|
|
+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_ext=c
|
|
+ac_cpp='$CPP $CPPFLAGS'
|
|
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
+
|
|
+CC=$lt_save_CC
|
|
+LDCXX=$LD
|
|
+LD=$lt_save_LD
|
|
+GCC=$lt_save_GCC
|
|
+with_gnu_ldcxx=$with_gnu_ld
|
|
+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
|
|
+
|
|
+ else
|
|
+ tagname=""
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ F77)
|
|
+ if test -n "$F77" && test "X$F77" != "Xno"; then
|
|
+
|
|
+ac_ext=f
|
|
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
|
|
+
|
|
+
|
|
+archive_cmds_need_lc_F77=no
|
|
+allow_undefined_flag_F77=
|
|
+always_export_symbols_F77=no
|
|
+archive_expsym_cmds_F77=
|
|
+export_dynamic_flag_spec_F77=
|
|
+hardcode_direct_F77=no
|
|
+hardcode_libdir_flag_spec_F77=
|
|
+hardcode_libdir_flag_spec_ld_F77=
|
|
+hardcode_libdir_separator_F77=
|
|
+hardcode_minus_L_F77=no
|
|
+hardcode_automatic_F77=no
|
|
+module_cmds_F77=
|
|
+module_expsym_cmds_F77=
|
|
+link_all_deplibs_F77=unknown
|
|
+old_archive_cmds_F77=$old_archive_cmds
|
|
+no_undefined_flag_F77=
|
|
+whole_archive_flag_spec_F77=
|
|
+enable_shared_with_static_runtimes_F77=no
|
|
+
|
|
+# Source file extension for f77 test sources.
|
|
+ac_ext=f
|
|
+
|
|
+# Object file extension for compiled f77 test sources.
|
|
+objext=o
|
|
+objext_F77=$objext
|
|
+
|
|
+# Code to be used in simple compile tests
|
|
+lt_simple_compile_test_code=" subroutine t\n return\n end\n"
|
|
+
|
|
+# Code to be used in simple link tests
|
|
+lt_simple_link_test_code=" program t\n end\n"
|
|
+
|
|
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
|
|
+
|
|
+# 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
|
|
+
|
|
+
|
|
+# save warnings/boilerplate of simple test code
|
|
+ac_outfile=conftest.$ac_objext
|
|
+printf "$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*
|
|
+
|
|
+ac_outfile=conftest.$ac_objext
|
|
+printf "$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*
|
|
+
|
|
+
|
|
+# Allow CC to be a program name with arguments.
|
|
+lt_save_CC="$CC"
|
|
+CC=${F77-"f77"}
|
|
+compiler=$CC
|
|
+compiler_F77=$CC
|
|
+for cc_temp in $compiler""; 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-%%"`
|
|
+
|
|
+
|
|
+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
|
|
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
|
|
+echo "$as_me:$LINENO: result: $can_build_shared" >&5
|
|
+echo "${ECHO_T}$can_build_shared" >&6
|
|
+
|
|
+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
|
|
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
|
|
+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
|
|
+echo "$as_me:$LINENO: result: $enable_shared" >&5
|
|
+echo "${ECHO_T}$enable_shared" >&6
|
|
+
|
|
+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
|
|
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
|
|
+# Make sure either enable_shared or enable_static is yes.
|
|
+test "$enable_shared" = yes || enable_static=yes
|
|
+echo "$as_me:$LINENO: result: $enable_static" >&5
|
|
+echo "${ECHO_T}$enable_static" >&6
|
|
+
|
|
+GCC_F77="$G77"
|
|
+LD_F77="$LD"
|
|
+
|
|
+lt_prog_compiler_wl_F77=
|
|
+lt_prog_compiler_pic_F77=
|
|
+lt_prog_compiler_static_F77=
|
|
+
|
|
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
|
|
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
|
|
+
|
|
+ if test "$GCC" = yes; then
|
|
+ lt_prog_compiler_wl_F77='-Wl,'
|
|
+ lt_prog_compiler_static_F77='-static'
|
|
+
|
|
+ case $host_os in
|
|
+ aix*)
|
|
+ # All AIX code is PIC.
|
|
+ if test "$host_cpu" = ia64; then
|
|
+ # AIX 5 now supports IA64 processor
|
|
+ lt_prog_compiler_static_F77='-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_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4'
|
|
+ ;;
|
|
+
|
|
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
|
|
+ # PIC is the default for these OSes.
|
|
+ ;;
|
|
+
|
|
+ mingw* | 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_prog_compiler_pic_F77='-DDLL_EXPORT'
|
|
+ ;;
|
|
+
|
|
+ darwin* | rhapsody*)
|
|
+ # PIC is the default on this platform
|
|
+ # Common symbols not allowed in MH_DYLIB files
|
|
+ lt_prog_compiler_pic_F77='-fno-common'
|
|
+ ;;
|
|
+
|
|
+ interix3*)
|
|
+ # 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_prog_compiler_can_build_shared_F77=no
|
|
+ enable_shared=no
|
|
+ ;;
|
|
+
|
|
+ sysv4*MP*)
|
|
+ if test -d /usr/nec; then
|
|
+ lt_prog_compiler_pic_F77=-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_prog_compiler_pic_F77='-fPIC'
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ lt_prog_compiler_pic_F77='-fPIC'
|
|
+ ;;
|
|
+ esac
|
|
+ else
|
|
+ # PORTME Check for flag to pass linker flags through the system compiler.
|
|
+ case $host_os in
|
|
+ aix*)
|
|
+ lt_prog_compiler_wl_F77='-Wl,'
|
|
+ if test "$host_cpu" = ia64; then
|
|
+ # AIX 5 now supports IA64 processor
|
|
+ lt_prog_compiler_static_F77='-Bstatic'
|
|
+ else
|
|
+ lt_prog_compiler_static_F77='-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_prog_compiler_pic_F77='-qnocommon'
|
|
+ lt_prog_compiler_wl_F77='-Wl,'
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+
|
|
+ mingw* | 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_prog_compiler_pic_F77='-DDLL_EXPORT'
|
|
+ ;;
|
|
+
|
|
+ hpux9* | hpux10* | hpux11*)
|
|
+ lt_prog_compiler_wl_F77='-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_prog_compiler_pic_F77='+Z'
|
|
+ ;;
|
|
+ esac
|
|
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
|
|
+ lt_prog_compiler_static_F77='${wl}-a ${wl}archive'
|
|
+ ;;
|
|
+
|
|
+ irix5* | irix6* | nonstopux*)
|
|
+ lt_prog_compiler_wl_F77='-Wl,'
|
|
+ # PIC (with -KPIC) is the default.
|
|
+ lt_prog_compiler_static_F77='-non_shared'
|
|
+ ;;
|
|
+
|
|
+ newsos6)
|
|
+ lt_prog_compiler_pic_F77='-KPIC'
|
|
+ lt_prog_compiler_static_F77='-Bstatic'
|
|
+ ;;
|
|
+
|
|
+ linux*)
|
|
+ case $cc_basename in
|
|
+ icc* | ecc*)
|
|
+ lt_prog_compiler_wl_F77='-Wl,'
|
|
+ lt_prog_compiler_pic_F77='-KPIC'
|
|
+ lt_prog_compiler_static_F77='-static'
|
|
+ ;;
|
|
+ pgcc* | pgf77* | pgf90* | pgf95*)
|
|
+ # Portland Group compilers (*not* the Pentium gcc compiler,
|
|
+ # which looks to be a dead project)
|
|
+ lt_prog_compiler_wl_F77='-Wl,'
|
|
+ lt_prog_compiler_pic_F77='-fpic'
|
|
+ lt_prog_compiler_static_F77='-Bstatic'
|
|
+ ;;
|
|
+ ccc*)
|
|
+ lt_prog_compiler_wl_F77='-Wl,'
|
|
+ # All Alpha code is PIC.
|
|
+ lt_prog_compiler_static_F77='-non_shared'
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+
|
|
+ osf3* | osf4* | osf5*)
|
|
+ lt_prog_compiler_wl_F77='-Wl,'
|
|
+ # All OSF/1 code is PIC.
|
|
+ lt_prog_compiler_static_F77='-non_shared'
|
|
+ ;;
|
|
+
|
|
+ solaris*)
|
|
+ lt_prog_compiler_pic_F77='-KPIC'
|
|
+ lt_prog_compiler_static_F77='-Bstatic'
|
|
+ case $cc_basename in
|
|
+ f77* | f90* | f95*)
|
|
+ lt_prog_compiler_wl_F77='-Qoption ld ';;
|
|
+ *)
|
|
+ lt_prog_compiler_wl_F77='-Wl,';;
|
|
+ esac
|
|
+ ;;
|
|
+
|
|
+ sunos4*)
|
|
+ lt_prog_compiler_wl_F77='-Qoption ld '
|
|
+ lt_prog_compiler_pic_F77='-PIC'
|
|
+ lt_prog_compiler_static_F77='-Bstatic'
|
|
+ ;;
|
|
+
|
|
+ sysv4 | sysv4.2uw2* | sysv4.3*)
|
|
+ lt_prog_compiler_wl_F77='-Wl,'
|
|
+ lt_prog_compiler_pic_F77='-KPIC'
|
|
+ lt_prog_compiler_static_F77='-Bstatic'
|
|
+ ;;
|
|
+
|
|
+ sysv4*MP*)
|
|
+ if test -d /usr/nec ;then
|
|
+ lt_prog_compiler_pic_F77='-Kconform_pic'
|
|
+ lt_prog_compiler_static_F77='-Bstatic'
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
|
|
+ lt_prog_compiler_wl_F77='-Wl,'
|
|
+ lt_prog_compiler_pic_F77='-KPIC'
|
|
+ lt_prog_compiler_static_F77='-Bstatic'
|
|
+ ;;
|
|
+
|
|
+ unicos*)
|
|
+ lt_prog_compiler_wl_F77='-Wl,'
|
|
+ lt_prog_compiler_can_build_shared_F77=no
|
|
+ ;;
|
|
+
|
|
+ uts4*)
|
|
+ lt_prog_compiler_pic_F77='-pic'
|
|
+ lt_prog_compiler_static_F77='-Bstatic'
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ lt_prog_compiler_can_build_shared_F77=no
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+
|
|
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5
|
|
+echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6
|
|
+
|
|
+#
|
|
+# Check to make sure the PIC flag actually works.
|
|
+#
|
|
+if test -n "$lt_prog_compiler_pic_F77"; then
|
|
+
|
|
+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5
|
|
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6
|
|
+if test "${lt_prog_compiler_pic_works_F77+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ lt_prog_compiler_pic_works_F77=no
|
|
+ ac_outfile=conftest.$ac_objext
|
|
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
|
|
+ lt_compiler_flag="$lt_prog_compiler_pic_F77"
|
|
+ # 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:15894: $lt_compile\"" >&5)
|
|
+ (eval "$lt_compile" 2>conftest.err)
|
|
+ ac_status=$?
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:15898: \$? = $ac_status" >&5
|
|
+ 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
|
|
+ lt_prog_compiler_pic_works_F77=yes
|
|
+ fi
|
|
+ fi
|
|
+ $rm conftest*
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5
|
|
+echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6
|
|
+
|
|
+if test x"$lt_prog_compiler_pic_works_F77" = xyes; then
|
|
+ case $lt_prog_compiler_pic_F77 in
|
|
+ "" | " "*) ;;
|
|
+ *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;;
|
|
+ esac
|
|
+else
|
|
+ lt_prog_compiler_pic_F77=
|
|
+ lt_prog_compiler_can_build_shared_F77=no
|
|
+fi
|
|
+
|
|
+fi
|
|
+case $host_os in
|
|
+ # For platforms which do not support PIC, -DPIC is meaningless:
|
|
+ *djgpp*)
|
|
+ lt_prog_compiler_pic_F77=
|
|
+ ;;
|
|
+ *)
|
|
+ lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77"
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+#
|
|
+# Check to make sure the static flag actually works.
|
|
+#
|
|
+wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\"
|
|
+echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
|
|
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6
|
|
+if test "${lt_prog_compiler_static_works_F77+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ lt_prog_compiler_static_works_F77=no
|
|
+ save_LDFLAGS="$LDFLAGS"
|
|
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
|
|
+ printf "$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>&5
|
|
+ $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
|
|
+ lt_prog_compiler_static_works_F77=yes
|
|
+ fi
|
|
+ else
|
|
+ lt_prog_compiler_static_works_F77=yes
|
|
+ fi
|
|
+ fi
|
|
+ $rm conftest*
|
|
+ LDFLAGS="$save_LDFLAGS"
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5
|
|
+echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6
|
|
+
|
|
+if test x"$lt_prog_compiler_static_works_F77" = xyes; then
|
|
+ :
|
|
+else
|
|
+ lt_prog_compiler_static_F77=
|
|
+fi
|
|
+
|
|
+
|
|
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
|
|
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
|
|
+if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ lt_cv_prog_compiler_c_o_F77=no
|
|
+ $rm -r conftest 2>/dev/null
|
|
+ mkdir conftest
|
|
+ cd conftest
|
|
+ mkdir out
|
|
+ printf "$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:15998: $lt_compile\"" >&5)
|
|
+ (eval "$lt_compile" 2>out/conftest.err)
|
|
+ ac_status=$?
|
|
+ cat out/conftest.err >&5
|
|
+ echo "$as_me:16002: \$? = $ac_status" >&5
|
|
+ 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_cv_prog_compiler_c_o_F77=yes
|
|
+ fi
|
|
+ fi
|
|
+ chmod u+w . 2>&5
|
|
+ $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*
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5
|
|
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6
|
|
+
|
|
+
|
|
+hard_links="nottested"
|
|
+if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then
|
|
+ # do not overwrite the value of need_locks provided by the user
|
|
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
|
|
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
|
|
+ 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
|
|
+ echo "$as_me:$LINENO: result: $hard_links" >&5
|
|
+echo "${ECHO_T}$hard_links" >&6
|
|
+ if test "$hard_links" = no; then
|
|
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
|
|
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
|
|
+ need_locks=warn
|
|
+ fi
|
|
+else
|
|
+ need_locks=no
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
|
|
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
|
|
+
|
|
+ runpath_var=
|
|
+ allow_undefined_flag_F77=
|
|
+ enable_shared_with_static_runtimes_F77=no
|
|
+ archive_cmds_F77=
|
|
+ archive_expsym_cmds_F77=
|
|
+ old_archive_From_new_cmds_F77=
|
|
+ old_archive_from_expsyms_cmds_F77=
|
|
+ export_dynamic_flag_spec_F77=
|
|
+ whole_archive_flag_spec_F77=
|
|
+ thread_safe_flag_spec_F77=
|
|
+ hardcode_libdir_flag_spec_F77=
|
|
+ hardcode_libdir_flag_spec_ld_F77=
|
|
+ hardcode_libdir_separator_F77=
|
|
+ hardcode_direct_F77=no
|
|
+ hardcode_minus_L_F77=no
|
|
+ hardcode_shlibpath_var_F77=unsupported
|
|
+ link_all_deplibs_F77=unknown
|
|
+ hardcode_automatic_F77=no
|
|
+ module_cmds_F77=
|
|
+ module_expsym_cmds_F77=
|
|
+ always_export_symbols_F77=no
|
|
+ export_symbols_cmds_F77='$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
|
|
+ include_expsyms_F77=
|
|
+ # 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'.
|
|
+ exclude_expsyms_F77="_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.
|
|
+ for cc_temp in $compiler""; 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-%%"`
|
|
+
|
|
+ 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
|
|
+
|
|
+ ld_shlibs_F77=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
|
|
+ hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir'
|
|
+ export_dynamic_flag_spec_F77='${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
|
|
+ whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
|
|
+ else
|
|
+ whole_archive_flag_spec_F77=
|
|
+ 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
|
|
+ ld_shlibs_F77=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*)
|
|
+ archive_cmds_F77='$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)'
|
|
+ hardcode_libdir_flag_spec_F77='-L$libdir'
|
|
+ hardcode_minus_L_F77=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.
|
|
+ ld_shlibs_F77=no
|
|
+ ;;
|
|
+
|
|
+ beos*)
|
|
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
|
+ allow_undefined_flag_F77=unsupported
|
|
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
|
|
+ # support --undefined. This deserves some investigation. FIXME
|
|
+ archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ else
|
|
+ ld_shlibs_F77=no
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ cygwin* | mingw* | pw32*)
|
|
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless,
|
|
+ # as there is no search path for DLLs.
|
|
+ hardcode_libdir_flag_spec_F77='-L$libdir'
|
|
+ allow_undefined_flag_F77=unsupported
|
|
+ always_export_symbols_F77=no
|
|
+ enable_shared_with_static_runtimes_F77=yes
|
|
+ export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
|
|
+
|
|
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
|
|
+ archive_cmds_F77='$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...
|
|
+ archive_expsym_cmds_F77='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
|
|
+ ld_shlibs_F77=no
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ interix3*)
|
|
+ hardcode_direct_F77=no
|
|
+ hardcode_shlibpath_var_F77=no
|
|
+ hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
|
|
+ export_dynamic_flag_spec_F77='${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.
|
|
+ archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
|
+ archive_expsym_cmds_F77='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'
|
|
+ ;;
|
|
+
|
|
+ linux*)
|
|
+ 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
|
|
+ whole_archive_flag_spec_F77='${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
|
|
+ whole_archive_flag_spec_F77='${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
|
|
+ archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+
|
|
+ if test $supports_anon_versioning = yes; then
|
|
+ archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~
|
|
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
|
+ $echo "local: *; };" >> $output_objdir/$libname.ver~
|
|
+ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
|
|
+ fi
|
|
+ else
|
|
+ ld_shlibs_F77=no
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ netbsd*)
|
|
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
|
|
+ archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
|
|
+ wlarc=
|
|
+ else
|
|
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ archive_expsym_cmds_F77='$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
|
|
+ ld_shlibs_F77=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
|
|
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
|
|
+ else
|
|
+ ld_shlibs_F77=no
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
|
|
+ case `$LD -v 2>&1` in
|
|
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
|
|
+ ld_shlibs_F77=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
|
|
+ hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
|
|
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
|
|
+ archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
|
|
+ else
|
|
+ ld_shlibs_F77=no
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+
|
|
+ sunos4*)
|
|
+ archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
|
|
+ wlarc=
|
|
+ hardcode_direct_F77=yes
|
|
+ hardcode_shlibpath_var_F77=no
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
|
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
|
|
+ else
|
|
+ ld_shlibs_F77=no
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ if test "$ld_shlibs_F77" = no; then
|
|
+ runpath_var=
|
|
+ hardcode_libdir_flag_spec_F77=
|
|
+ export_dynamic_flag_spec_F77=
|
|
+ whole_archive_flag_spec_F77=
|
|
+ fi
|
|
+ else
|
|
+ # PORTME fill in a description of your system's linker (not GNU ld)
|
|
+ case $host_os in
|
|
+ aix3*)
|
|
+ allow_undefined_flag_F77=unsupported
|
|
+ always_export_symbols_F77=yes
|
|
+ archive_expsym_cmds_F77='$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.
|
|
+ hardcode_minus_L_F77=yes
|
|
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
|
|
+ # Neither direct hardcoding nor static linking is supported with a
|
|
+ # broken collect2.
|
|
+ hardcode_direct_F77=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
|
|
+ export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
|
|
+ else
|
|
+ export_symbols_cmds_F77='$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.
|
|
+
|
|
+ archive_cmds_F77=''
|
|
+ hardcode_direct_F77=yes
|
|
+ hardcode_libdir_separator_F77=':'
|
|
+ link_all_deplibs_F77=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
|
|
+ hardcode_direct_F77=yes
|
|
+ else
|
|
+ # We have old collect2
|
|
+ hardcode_direct_F77=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
|
|
+ hardcode_minus_L_F77=yes
|
|
+ hardcode_libdir_flag_spec_F77='-L$libdir'
|
|
+ hardcode_libdir_separator_F77=
|
|
+ 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.
|
|
+ always_export_symbols_F77=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.
|
|
+ allow_undefined_flag_F77='-berok'
|
|
+ # Determine the default libpath from the value encoded in an empty executable.
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+ program main
|
|
+
|
|
+ end
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_f77_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+
|
|
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
|
+}'`
|
|
+# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
|
+}'`; fi
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext \
|
|
+ conftest$ac_exeext conftest.$ac_ext
|
|
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
|
|
+
|
|
+ hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
|
|
+ archive_expsym_cmds_F77="\$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
|
|
+ hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib'
|
|
+ allow_undefined_flag_F77="-z nodefs"
|
|
+ archive_expsym_cmds_F77="\$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.
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+ program main
|
|
+
|
|
+ end
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_f77_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+
|
|
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
|
+}'`
|
|
+# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
|
+}'`; fi
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext \
|
|
+ conftest$ac_exeext conftest.$ac_ext
|
|
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
|
|
+
|
|
+ hardcode_libdir_flag_spec_F77='${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.
|
|
+ no_undefined_flag_F77=' ${wl}-bernotok'
|
|
+ allow_undefined_flag_F77=' ${wl}-berok'
|
|
+ # Exported symbols can be pulled into shared objects from archives
|
|
+ whole_archive_flag_spec_F77='$convenience'
|
|
+ archive_cmds_need_lc_F77=yes
|
|
+ # This is similar to how AIX traditionally builds its shared libraries.
|
|
+ archive_expsym_cmds_F77="\$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*)
|
|
+ archive_cmds_F77='$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)'
|
|
+ hardcode_libdir_flag_spec_F77='-L$libdir'
|
|
+ hardcode_minus_L_F77=yes
|
|
+ # see comment about different semantics on the GNU ld section
|
|
+ ld_shlibs_F77=no
|
|
+ ;;
|
|
+
|
|
+ bsdi[45]*)
|
|
+ export_dynamic_flag_spec_F77=-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.
|
|
+ hardcode_libdir_flag_spec_F77=' '
|
|
+ allow_undefined_flag_F77=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.
|
|
+ archive_cmds_F77='$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.
|
|
+ old_archive_From_new_cmds_F77='true'
|
|
+ # FIXME: Should let the user specify the lib program.
|
|
+ old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs'
|
|
+ fix_srcfile_path_F77='`cygpath -w "$srcfile"`'
|
|
+ enable_shared_with_static_runtimes_F77=yes
|
|
+ ;;
|
|
+
|
|
+ darwin* | rhapsody*)
|
|
+ case $host_os in
|
|
+ rhapsody* | darwin1.[012])
|
|
+ allow_undefined_flag_F77='${wl}-undefined ${wl}suppress'
|
|
+ ;;
|
|
+ *) # Darwin 1.3 on
|
|
+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
|
|
+ allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
|
|
+ else
|
|
+ case ${MACOSX_DEPLOYMENT_TARGET} in
|
|
+ 10.[012])
|
|
+ allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
|
|
+ ;;
|
|
+ 10.*)
|
|
+ allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup'
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ archive_cmds_need_lc_F77=no
|
|
+ hardcode_direct_F77=no
|
|
+ hardcode_automatic_F77=yes
|
|
+ hardcode_shlibpath_var_F77=unsupported
|
|
+ whole_archive_flag_spec_F77=''
|
|
+ link_all_deplibs_F77=yes
|
|
+ if test "$GCC" = yes ; then
|
|
+ output_verbose_link_cmd='echo'
|
|
+ archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
|
|
+ module_cmds_F77='$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
|
|
+ archive_expsym_cmds_F77='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}'
|
|
+ module_expsym_cmds_F77='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'
|
|
+ archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
|
|
+ module_cmds_F77='$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
|
|
+ archive_expsym_cmds_F77='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 $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
|
|
+ module_expsym_cmds_F77='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}'
|
|
+ ;;
|
|
+ *)
|
|
+ ld_shlibs_F77=no
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ dgux*)
|
|
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_libdir_flag_spec_F77='-L$libdir'
|
|
+ hardcode_shlibpath_var_F77=no
|
|
+ ;;
|
|
+
|
|
+ freebsd1*)
|
|
+ ld_shlibs_F77=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*)
|
|
+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
|
|
+ hardcode_libdir_flag_spec_F77='-R$libdir'
|
|
+ hardcode_direct_F77=yes
|
|
+ hardcode_shlibpath_var_F77=no
|
|
+ ;;
|
|
+
|
|
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
|
|
+ freebsd2*)
|
|
+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_direct_F77=yes
|
|
+ hardcode_minus_L_F77=yes
|
|
+ hardcode_shlibpath_var_F77=no
|
|
+ ;;
|
|
+
|
|
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
|
|
+ freebsd* | kfreebsd*-gnu | dragonfly*)
|
|
+ archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ hardcode_libdir_flag_spec_F77='-R$libdir'
|
|
+ hardcode_direct_F77=yes
|
|
+ hardcode_shlibpath_var_F77=no
|
|
+ ;;
|
|
+
|
|
+ hpux9*)
|
|
+ if test "$GCC" = yes; then
|
|
+ archive_cmds_F77='$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
|
|
+ archive_cmds_F77='$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
|
|
+ hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
|
|
+ hardcode_libdir_separator_F77=:
|
|
+ hardcode_direct_F77=yes
|
|
+
|
|
+ # hardcode_minus_L: Not really in the search PATH,
|
|
+ # but as the default location of the library.
|
|
+ hardcode_minus_L_F77=yes
|
|
+ export_dynamic_flag_spec_F77='${wl}-E'
|
|
+ ;;
|
|
+
|
|
+ hpux10*)
|
|
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
|
|
+ archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ else
|
|
+ archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
|
|
+ fi
|
|
+ if test "$with_gnu_ld" = no; then
|
|
+ hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
|
|
+ hardcode_libdir_separator_F77=:
|
|
+
|
|
+ hardcode_direct_F77=yes
|
|
+ export_dynamic_flag_spec_F77='${wl}-E'
|
|
+
|
|
+ # hardcode_minus_L: Not really in the search PATH,
|
|
+ # but as the default location of the library.
|
|
+ hardcode_minus_L_F77=yes
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ hpux11*)
|
|
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
|
|
+ case $host_cpu in
|
|
+ hppa*64*)
|
|
+ archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ ;;
|
|
+ ia64*)
|
|
+ archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ ;;
|
|
+ *)
|
|
+ archive_cmds_F77='$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*)
|
|
+ archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ ;;
|
|
+ ia64*)
|
|
+ archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ ;;
|
|
+ *)
|
|
+ archive_cmds_F77='$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
|
|
+ hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
|
|
+ hardcode_libdir_separator_F77=:
|
|
+
|
|
+ case $host_cpu in
|
|
+ hppa*64*|ia64*)
|
|
+ hardcode_libdir_flag_spec_ld_F77='+b $libdir'
|
|
+ hardcode_direct_F77=no
|
|
+ hardcode_shlibpath_var_F77=no
|
|
+ ;;
|
|
+ *)
|
|
+ hardcode_direct_F77=yes
|
|
+ export_dynamic_flag_spec_F77='${wl}-E'
|
|
+
|
|
+ # hardcode_minus_L: Not really in the search PATH,
|
|
+ # but as the default location of the library.
|
|
+ hardcode_minus_L_F77=yes
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ irix5* | irix6* | nonstopux*)
|
|
+ if test "$GCC" = yes; then
|
|
+ archive_cmds_F77='$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
|
|
+ archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
|
|
+ hardcode_libdir_flag_spec_ld_F77='-rpath $libdir'
|
|
+ fi
|
|
+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
|
|
+ hardcode_libdir_separator_F77=:
|
|
+ link_all_deplibs_F77=yes
|
|
+ ;;
|
|
+
|
|
+ netbsd*)
|
|
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
|
|
+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
|
|
+ else
|
|
+ archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
|
|
+ fi
|
|
+ hardcode_libdir_flag_spec_F77='-R$libdir'
|
|
+ hardcode_direct_F77=yes
|
|
+ hardcode_shlibpath_var_F77=no
|
|
+ ;;
|
|
+
|
|
+ newsos6)
|
|
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_direct_F77=yes
|
|
+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
|
|
+ hardcode_libdir_separator_F77=:
|
|
+ hardcode_shlibpath_var_F77=no
|
|
+ ;;
|
|
+
|
|
+ openbsd*)
|
|
+ hardcode_direct_F77=yes
|
|
+ hardcode_shlibpath_var_F77=no
|
|
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
|
|
+ archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
|
|
+ hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
|
|
+ export_dynamic_flag_spec_F77='${wl}-E'
|
|
+ else
|
|
+ case $host_os in
|
|
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
|
|
+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_libdir_flag_spec_F77='-R$libdir'
|
|
+ ;;
|
|
+ *)
|
|
+ archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ os2*)
|
|
+ hardcode_libdir_flag_spec_F77='-L$libdir'
|
|
+ hardcode_minus_L_F77=yes
|
|
+ allow_undefined_flag_F77=unsupported
|
|
+ archive_cmds_F77='$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'
|
|
+ old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
|
|
+ ;;
|
|
+
|
|
+ osf3*)
|
|
+ if test "$GCC" = yes; then
|
|
+ allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
|
|
+ archive_cmds_F77='$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
|
|
+ allow_undefined_flag_F77=' -expect_unresolved \*'
|
|
+ archive_cmds_F77='$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
|
|
+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
|
|
+ hardcode_libdir_separator_F77=:
|
|
+ ;;
|
|
+
|
|
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
|
|
+ if test "$GCC" = yes; then
|
|
+ allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
|
|
+ archive_cmds_F77='$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'
|
|
+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
|
|
+ else
|
|
+ allow_undefined_flag_F77=' -expect_unresolved \*'
|
|
+ archive_cmds_F77='$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'
|
|
+ archive_expsym_cmds_F77='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
|
|
+ hardcode_libdir_flag_spec_F77='-rpath $libdir'
|
|
+ fi
|
|
+ hardcode_libdir_separator_F77=:
|
|
+ ;;
|
|
+
|
|
+ solaris*)
|
|
+ no_undefined_flag_F77=' -z text'
|
|
+ if test "$GCC" = yes; then
|
|
+ wlarc='${wl}'
|
|
+ archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds_F77='$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=''
|
|
+ archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ archive_expsym_cmds_F77='$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
|
|
+ hardcode_libdir_flag_spec_F77='-R$libdir'
|
|
+ hardcode_shlibpath_var_F77=no
|
|
+ case $host_os in
|
|
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
|
|
+ *)
|
|
+ # The compiler driver will combine linker options so we
|
|
+ # cannot just pass the convience library names through
|
|
+ # without $wl, iff we do not link with $LD.
|
|
+ # Luckily, gcc supports the same syntax we need for Sun Studio.
|
|
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
|
|
+ case $wlarc in
|
|
+ '')
|
|
+ whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;;
|
|
+ *)
|
|
+ whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
|
|
+ esac ;;
|
|
+ esac
|
|
+ link_all_deplibs_F77=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.
|
|
+ archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ else
|
|
+ archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
|
|
+ fi
|
|
+ hardcode_libdir_flag_spec_F77='-L$libdir'
|
|
+ hardcode_direct_F77=yes
|
|
+ hardcode_minus_L_F77=yes
|
|
+ hardcode_shlibpath_var_F77=no
|
|
+ ;;
|
|
+
|
|
+ sysv4)
|
|
+ case $host_vendor in
|
|
+ sni)
|
|
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_direct_F77=yes # is this really true???
|
|
+ ;;
|
|
+ siemens)
|
|
+ ## LD is ld it makes a PLAMLIB
|
|
+ ## CC just makes a GrossModule.
|
|
+ archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
|
|
+ reload_cmds_F77='$CC -r -o $output$reload_objs'
|
|
+ hardcode_direct_F77=no
|
|
+ ;;
|
|
+ motorola)
|
|
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie
|
|
+ ;;
|
|
+ esac
|
|
+ runpath_var='LD_RUN_PATH'
|
|
+ hardcode_shlibpath_var_F77=no
|
|
+ ;;
|
|
+
|
|
+ sysv4.3*)
|
|
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_shlibpath_var_F77=no
|
|
+ export_dynamic_flag_spec_F77='-Bexport'
|
|
+ ;;
|
|
+
|
|
+ sysv4*MP*)
|
|
+ if test -d /usr/nec; then
|
|
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_shlibpath_var_F77=no
|
|
+ runpath_var=LD_RUN_PATH
|
|
+ hardcode_runpath_var=yes
|
|
+ ld_shlibs_F77=yes
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
|
|
+ no_undefined_flag_F77='${wl}-z,text'
|
|
+ archive_cmds_need_lc_F77=no
|
|
+ hardcode_shlibpath_var_F77=no
|
|
+ runpath_var='LD_RUN_PATH'
|
|
+
|
|
+ if test "$GCC" = yes; then
|
|
+ archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ else
|
|
+ archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds_F77='$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.
|
|
+ no_undefined_flag_F77='${wl}-z,text'
|
|
+ allow_undefined_flag_F77='${wl}-z,nodefs'
|
|
+ archive_cmds_need_lc_F77=no
|
|
+ hardcode_shlibpath_var_F77=no
|
|
+ hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
|
|
+ hardcode_libdir_separator_F77=':'
|
|
+ link_all_deplibs_F77=yes
|
|
+ export_dynamic_flag_spec_F77='${wl}-Bexport'
|
|
+ runpath_var='LD_RUN_PATH'
|
|
+
|
|
+ if test "$GCC" = yes; then
|
|
+ archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ else
|
|
+ archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ uts4*)
|
|
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_libdir_flag_spec_F77='-L$libdir'
|
|
+ hardcode_shlibpath_var_F77=no
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ ld_shlibs_F77=no
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+
|
|
+echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5
|
|
+echo "${ECHO_T}$ld_shlibs_F77" >&6
|
|
+test "$ld_shlibs_F77" = no && can_build_shared=no
|
|
+
|
|
+#
|
|
+# Do we need to explicitly link libc?
|
|
+#
|
|
+case "x$archive_cmds_need_lc_F77" in
|
|
+x|xyes)
|
|
+ # Assume -lc should be added
|
|
+ archive_cmds_need_lc_F77=yes
|
|
+
|
|
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
|
|
+ case $archive_cmds_F77 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.
|
|
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
|
|
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
|
|
+ $rm conftest*
|
|
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
|
|
+
|
|
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } 2>conftest.err; then
|
|
+ soname=conftest
|
|
+ lib=conftest
|
|
+ libobjs=conftest.$ac_objext
|
|
+ deplibs=
|
|
+ wl=$lt_prog_compiler_wl_F77
|
|
+ pic_flag=$lt_prog_compiler_pic_F77
|
|
+ compiler_flags=-v
|
|
+ linker_flags=-v
|
|
+ verstring=
|
|
+ output_objdir=.
|
|
+ libname=conftest
|
|
+ lt_save_allow_undefined_flag=$allow_undefined_flag_F77
|
|
+ allow_undefined_flag_F77=
|
|
+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
|
|
+ (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }
|
|
+ then
|
|
+ archive_cmds_need_lc_F77=no
|
|
+ else
|
|
+ archive_cmds_need_lc_F77=yes
|
|
+ fi
|
|
+ allow_undefined_flag_F77=$lt_save_allow_undefined_flag
|
|
+ else
|
|
+ cat conftest.err 1>&5
|
|
+ fi
|
|
+ $rm conftest*
|
|
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5
|
|
+echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
|
|
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
|
|
+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"
|
|
+if test "$GCC" = yes; then
|
|
+ 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 ';' >/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.
|
|
+ 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
|
|
+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`'
|
|
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
|
|
+ if test "$GCC" = yes; then
|
|
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
|
|
+ else
|
|
+ sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
|
|
+ fi
|
|
+ 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
|
|
+ ;;
|
|
+
|
|
+kfreebsd*-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
|
|
+ shlibpath_overrides_runpath=no
|
|
+ hardcode_into_libs=yes
|
|
+ dynamic_linker='GNU ld.so'
|
|
+ ;;
|
|
+
|
|
+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
|
|
+ ;;
|
|
+ freebsd*) # from 4.6 on
|
|
+ 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'
|
|
+ ;;
|
|
+
|
|
+interix3*)
|
|
+ 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*)
|
|
+ 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
|
|
+
|
|
+ # find out which ABI we are using
|
|
+ libsuff=
|
|
+ case "$host_cpu" in
|
|
+ x86_64*|s390x*|powerpc64*)
|
|
+ echo '#line 17447 "configure"' > conftest.$ac_ext
|
|
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; then
|
|
+ case `/usr/bin/file conftest.$ac_objext` in
|
|
+ *64-bit*)
|
|
+ libsuff=64
|
|
+ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ rm -rf conftest*
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # 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/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
|
|
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $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'
|
|
+ ;;
|
|
+
|
|
+knetbsd*-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
|
|
+ shlibpath_overrides_runpath=no
|
|
+ hardcode_into_libs=yes
|
|
+ dynamic_linker='GNU 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"
|
|
+ ;;
|
|
+
|
|
+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
|
|
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
|
|
+echo "${ECHO_T}$dynamic_linker" >&6
|
|
+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
|
|
+
|
|
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
|
|
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
|
|
+hardcode_action_F77=
|
|
+if test -n "$hardcode_libdir_flag_spec_F77" || \
|
|
+ test -n "$runpath_var_F77" || \
|
|
+ test "X$hardcode_automatic_F77" = "Xyes" ; then
|
|
+
|
|
+ # We can hardcode non-existant directories.
|
|
+ if test "$hardcode_direct_F77" != 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, F77)" != no &&
|
|
+ test "$hardcode_minus_L_F77" != no; then
|
|
+ # Linking always hardcodes the temporary library directory.
|
|
+ hardcode_action_F77=relink
|
|
+ else
|
|
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
|
|
+ hardcode_action_F77=immediate
|
|
+ fi
|
|
+else
|
|
+ # We cannot hardcode anything, or else we can only hardcode existing
|
|
+ # directories.
|
|
+ hardcode_action_F77=unsupported
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5
|
|
+echo "${ECHO_T}$hardcode_action_F77" >&6
|
|
+
|
|
+if test "$hardcode_action_F77" = 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
|
|
+
|
|
+
|
|
+# 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 \
|
|
+ compiler_F77 \
|
|
+ CC_F77 \
|
|
+ LD_F77 \
|
|
+ lt_prog_compiler_wl_F77 \
|
|
+ lt_prog_compiler_pic_F77 \
|
|
+ lt_prog_compiler_static_F77 \
|
|
+ lt_prog_compiler_no_builtin_flag_F77 \
|
|
+ export_dynamic_flag_spec_F77 \
|
|
+ thread_safe_flag_spec_F77 \
|
|
+ whole_archive_flag_spec_F77 \
|
|
+ enable_shared_with_static_runtimes_F77 \
|
|
+ old_archive_cmds_F77 \
|
|
+ old_archive_from_new_cmds_F77 \
|
|
+ predep_objects_F77 \
|
|
+ postdep_objects_F77 \
|
|
+ predeps_F77 \
|
|
+ postdeps_F77 \
|
|
+ compiler_lib_search_path_F77 \
|
|
+ archive_cmds_F77 \
|
|
+ archive_expsym_cmds_F77 \
|
|
+ postinstall_cmds_F77 \
|
|
+ postuninstall_cmds_F77 \
|
|
+ old_archive_from_expsyms_cmds_F77 \
|
|
+ allow_undefined_flag_F77 \
|
|
+ no_undefined_flag_F77 \
|
|
+ export_symbols_cmds_F77 \
|
|
+ hardcode_libdir_flag_spec_F77 \
|
|
+ hardcode_libdir_flag_spec_ld_F77 \
|
|
+ hardcode_libdir_separator_F77 \
|
|
+ hardcode_automatic_F77 \
|
|
+ module_cmds_F77 \
|
|
+ module_expsym_cmds_F77 \
|
|
+ lt_cv_prog_compiler_c_o_F77 \
|
|
+ exclude_expsyms_F77 \
|
|
+ include_expsyms_F77; do
|
|
+
|
|
+ case $var in
|
|
+ old_archive_cmds_F77 | \
|
|
+ old_archive_from_new_cmds_F77 | \
|
|
+ archive_cmds_F77 | \
|
|
+ archive_expsym_cmds_F77 | \
|
|
+ module_cmds_F77 | \
|
|
+ module_expsym_cmds_F77 | \
|
|
+ old_archive_from_expsyms_cmds_F77 | \
|
|
+ export_symbols_cmds_F77 | \
|
|
+ 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
|
|
+
|
|
+cfgfile="$ofile"
|
|
+
|
|
+ cat <<__EOF__ >> "$cfgfile"
|
|
+# ### 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=$archive_cmds_need_lc_F77
|
|
+
|
|
+# Whether or not to disallow shared libs when runtime libs are static
|
|
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77
|
|
+
|
|
+# 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_compiler_F77
|
|
+
|
|
+# Is the compiler the GNU C compiler?
|
|
+with_gcc=$GCC_F77
|
|
+
|
|
+gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\`
|
|
+gcc_ver=\`gcc -dumpversion\`
|
|
+
|
|
+# An ERE matcher.
|
|
+EGREP=$lt_EGREP
|
|
+
|
|
+# The linker used to build libraries.
|
|
+LD=$lt_LD_F77
|
|
+
|
|
+# 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_prog_compiler_wl_F77
|
|
+
|
|
+# 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_prog_compiler_pic_F77
|
|
+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_cv_prog_compiler_c_o_F77
|
|
+
|
|
+# 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_prog_compiler_static_F77
|
|
+
|
|
+# Compiler flag to turn off builtin functions.
|
|
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77
|
|
+
|
|
+# Compiler flag to allow reflexive dlopens.
|
|
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77
|
|
+
|
|
+# Compiler flag to generate shared objects directly from archives.
|
|
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77
|
|
+
|
|
+# Compiler flag to generate thread-safe objects.
|
|
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77
|
|
+
|
|
+# 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_old_archive_cmds_F77
|
|
+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_old_archive_from_new_cmds_F77
|
|
+
|
|
+# Create a temporary old-style archive to link instead of a shared archive.
|
|
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77
|
|
+
|
|
+# Commands used to build and install a shared archive.
|
|
+archive_cmds=$lt_archive_cmds_F77
|
|
+archive_expsym_cmds=$lt_archive_expsym_cmds_F77
|
|
+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_module_cmds_F77
|
|
+module_expsym_cmds=$lt_module_expsym_cmds_F77
|
|
+
|
|
+# 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=\`echo $lt_predep_objects_F77 | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# Dependencies to place after the objects being linked to create a
|
|
+# shared library.
|
|
+postdep_objects=\`echo $lt_postdep_objects_F77 | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# Dependencies to place before the objects being linked to create a
|
|
+# shared library.
|
|
+predeps=$lt_predeps_F77
|
|
+
|
|
+# Dependencies to place after the objects being linked to create a
|
|
+# shared library.
|
|
+postdeps=$lt_postdeps_F77
|
|
+
|
|
+# The library search path used internally by the compiler when linking
|
|
+# a shared library.
|
|
+compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_F77 | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# 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_allow_undefined_flag_F77
|
|
+
|
|
+# Flag that forces no undefined symbols.
|
|
+no_undefined_flag=$lt_no_undefined_flag_F77
|
|
+
|
|
+# 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=$hardcode_action_F77
|
|
+
|
|
+# 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_hardcode_libdir_flag_spec_F77
|
|
+
|
|
+# 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_hardcode_libdir_flag_spec_ld_F77
|
|
+
|
|
+# Whether we need a single -rpath flag with a separated argument.
|
|
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77
|
|
+
|
|
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
|
|
+# resulting binary.
|
|
+hardcode_direct=$hardcode_direct_F77
|
|
+
|
|
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
|
|
+# resulting binary.
|
|
+hardcode_minus_L=$hardcode_minus_L_F77
|
|
+
|
|
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
|
|
+# the resulting binary.
|
|
+hardcode_shlibpath_var=$hardcode_shlibpath_var_F77
|
|
+
|
|
+# 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=$hardcode_automatic_F77
|
|
+
|
|
+# 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=$link_all_deplibs_F77
|
|
+
|
|
+# Compile-time system search path for libraries
|
|
+sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# 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="$fix_srcfile_path_F77"
|
|
+
|
|
+# Set to yes if exported symbols are required.
|
|
+always_export_symbols=$always_export_symbols_F77
|
|
+
|
|
+# The commands to list exported symbols.
|
|
+export_symbols_cmds=$lt_export_symbols_cmds_F77
|
|
+
|
|
+# 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_exclude_expsyms_F77
|
|
+
|
|
+# Symbols that must always be exported.
|
|
+include_expsyms=$lt_include_expsyms_F77
|
|
+
|
|
+# ### END LIBTOOL TAG CONFIG: $tagname
|
|
+
|
|
+__EOF__
|
|
+
|
|
+
|
|
+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_ext=c
|
|
+ac_cpp='$CPP $CPPFLAGS'
|
|
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
+
|
|
+CC="$lt_save_CC"
|
|
+
|
|
+ else
|
|
+ tagname=""
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ GCJ)
|
|
+ if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
|
|
+
|
|
+
|
|
+
|
|
+# Source file extension for Java test sources.
|
|
+ac_ext=java
|
|
+
|
|
+# Object file extension for compiled Java test sources.
|
|
+objext=o
|
|
+objext_GCJ=$objext
|
|
+
|
|
+# Code to be used in simple compile tests
|
|
+lt_simple_compile_test_code="class foo {}\n"
|
|
+
|
|
+# Code to be used in simple link tests
|
|
+lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n'
|
|
+
|
|
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
|
|
+
|
|
+# 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
|
|
+
|
|
+
|
|
+# save warnings/boilerplate of simple test code
|
|
+ac_outfile=conftest.$ac_objext
|
|
+printf "$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*
|
|
+
|
|
+ac_outfile=conftest.$ac_objext
|
|
+printf "$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*
|
|
+
|
|
+
|
|
+# Allow CC to be a program name with arguments.
|
|
+lt_save_CC="$CC"
|
|
+CC=${GCJ-"gcj"}
|
|
+compiler=$CC
|
|
+compiler_GCJ=$CC
|
|
+for cc_temp in $compiler""; 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-%%"`
|
|
+
|
|
+
|
|
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
|
|
+archive_cmds_need_lc_GCJ=no
|
|
+
|
|
+old_archive_cmds_GCJ=$old_archive_cmds
|
|
+
|
|
+
|
|
+lt_prog_compiler_no_builtin_flag_GCJ=
|
|
+
|
|
+if test "$GCC" = yes; then
|
|
+ lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin'
|
|
+
|
|
+
|
|
+echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
|
|
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
|
|
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ lt_cv_prog_compiler_rtti_exceptions=no
|
|
+ ac_outfile=conftest.$ac_objext
|
|
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
|
|
+ lt_compiler_flag="-fno-rtti -fno-exceptions"
|
|
+ # 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:18225: $lt_compile\"" >&5)
|
|
+ (eval "$lt_compile" 2>conftest.err)
|
|
+ ac_status=$?
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:18229: \$? = $ac_status" >&5
|
|
+ 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
|
|
+ lt_cv_prog_compiler_rtti_exceptions=yes
|
|
+ fi
|
|
+ fi
|
|
+ $rm conftest*
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
|
|
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
|
|
+
|
|
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
|
|
+ lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions"
|
|
+else
|
|
+ :
|
|
+fi
|
|
+
|
|
+fi
|
|
+
|
|
+lt_prog_compiler_wl_GCJ=
|
|
+lt_prog_compiler_pic_GCJ=
|
|
+lt_prog_compiler_static_GCJ=
|
|
+
|
|
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
|
|
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
|
|
+
|
|
+ if test "$GCC" = yes; then
|
|
+ lt_prog_compiler_wl_GCJ='-Wl,'
|
|
+ lt_prog_compiler_static_GCJ='-static'
|
|
+
|
|
+ case $host_os in
|
|
+ aix*)
|
|
+ # All AIX code is PIC.
|
|
+ if test "$host_cpu" = ia64; then
|
|
+ # AIX 5 now supports IA64 processor
|
|
+ lt_prog_compiler_static_GCJ='-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_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4'
|
|
+ ;;
|
|
+
|
|
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
|
|
+ # PIC is the default for these OSes.
|
|
+ ;;
|
|
+
|
|
+ mingw* | 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_prog_compiler_pic_GCJ='-DDLL_EXPORT'
|
|
+ ;;
|
|
+
|
|
+ darwin* | rhapsody*)
|
|
+ # PIC is the default on this platform
|
|
+ # Common symbols not allowed in MH_DYLIB files
|
|
+ lt_prog_compiler_pic_GCJ='-fno-common'
|
|
+ ;;
|
|
+
|
|
+ interix3*)
|
|
+ # 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_prog_compiler_can_build_shared_GCJ=no
|
|
+ enable_shared=no
|
|
+ ;;
|
|
+
|
|
+ sysv4*MP*)
|
|
+ if test -d /usr/nec; then
|
|
+ lt_prog_compiler_pic_GCJ=-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_prog_compiler_pic_GCJ='-fPIC'
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ lt_prog_compiler_pic_GCJ='-fPIC'
|
|
+ ;;
|
|
+ esac
|
|
+ else
|
|
+ # PORTME Check for flag to pass linker flags through the system compiler.
|
|
+ case $host_os in
|
|
+ aix*)
|
|
+ lt_prog_compiler_wl_GCJ='-Wl,'
|
|
+ if test "$host_cpu" = ia64; then
|
|
+ # AIX 5 now supports IA64 processor
|
|
+ lt_prog_compiler_static_GCJ='-Bstatic'
|
|
+ else
|
|
+ lt_prog_compiler_static_GCJ='-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_prog_compiler_pic_GCJ='-qnocommon'
|
|
+ lt_prog_compiler_wl_GCJ='-Wl,'
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+
|
|
+ mingw* | 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_prog_compiler_pic_GCJ='-DDLL_EXPORT'
|
|
+ ;;
|
|
+
|
|
+ hpux9* | hpux10* | hpux11*)
|
|
+ lt_prog_compiler_wl_GCJ='-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_prog_compiler_pic_GCJ='+Z'
|
|
+ ;;
|
|
+ esac
|
|
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
|
|
+ lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive'
|
|
+ ;;
|
|
+
|
|
+ irix5* | irix6* | nonstopux*)
|
|
+ lt_prog_compiler_wl_GCJ='-Wl,'
|
|
+ # PIC (with -KPIC) is the default.
|
|
+ lt_prog_compiler_static_GCJ='-non_shared'
|
|
+ ;;
|
|
+
|
|
+ newsos6)
|
|
+ lt_prog_compiler_pic_GCJ='-KPIC'
|
|
+ lt_prog_compiler_static_GCJ='-Bstatic'
|
|
+ ;;
|
|
+
|
|
+ linux*)
|
|
+ case $cc_basename in
|
|
+ icc* | ecc*)
|
|
+ lt_prog_compiler_wl_GCJ='-Wl,'
|
|
+ lt_prog_compiler_pic_GCJ='-KPIC'
|
|
+ lt_prog_compiler_static_GCJ='-static'
|
|
+ ;;
|
|
+ pgcc* | pgf77* | pgf90* | pgf95*)
|
|
+ # Portland Group compilers (*not* the Pentium gcc compiler,
|
|
+ # which looks to be a dead project)
|
|
+ lt_prog_compiler_wl_GCJ='-Wl,'
|
|
+ lt_prog_compiler_pic_GCJ='-fpic'
|
|
+ lt_prog_compiler_static_GCJ='-Bstatic'
|
|
+ ;;
|
|
+ ccc*)
|
|
+ lt_prog_compiler_wl_GCJ='-Wl,'
|
|
+ # All Alpha code is PIC.
|
|
+ lt_prog_compiler_static_GCJ='-non_shared'
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+
|
|
+ osf3* | osf4* | osf5*)
|
|
+ lt_prog_compiler_wl_GCJ='-Wl,'
|
|
+ # All OSF/1 code is PIC.
|
|
+ lt_prog_compiler_static_GCJ='-non_shared'
|
|
+ ;;
|
|
+
|
|
+ solaris*)
|
|
+ lt_prog_compiler_pic_GCJ='-KPIC'
|
|
+ lt_prog_compiler_static_GCJ='-Bstatic'
|
|
+ case $cc_basename in
|
|
+ f77* | f90* | f95*)
|
|
+ lt_prog_compiler_wl_GCJ='-Qoption ld ';;
|
|
+ *)
|
|
+ lt_prog_compiler_wl_GCJ='-Wl,';;
|
|
+ esac
|
|
+ ;;
|
|
+
|
|
+ sunos4*)
|
|
+ lt_prog_compiler_wl_GCJ='-Qoption ld '
|
|
+ lt_prog_compiler_pic_GCJ='-PIC'
|
|
+ lt_prog_compiler_static_GCJ='-Bstatic'
|
|
+ ;;
|
|
+
|
|
+ sysv4 | sysv4.2uw2* | sysv4.3*)
|
|
+ lt_prog_compiler_wl_GCJ='-Wl,'
|
|
+ lt_prog_compiler_pic_GCJ='-KPIC'
|
|
+ lt_prog_compiler_static_GCJ='-Bstatic'
|
|
+ ;;
|
|
+
|
|
+ sysv4*MP*)
|
|
+ if test -d /usr/nec ;then
|
|
+ lt_prog_compiler_pic_GCJ='-Kconform_pic'
|
|
+ lt_prog_compiler_static_GCJ='-Bstatic'
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
|
|
+ lt_prog_compiler_wl_GCJ='-Wl,'
|
|
+ lt_prog_compiler_pic_GCJ='-KPIC'
|
|
+ lt_prog_compiler_static_GCJ='-Bstatic'
|
|
+ ;;
|
|
+
|
|
+ unicos*)
|
|
+ lt_prog_compiler_wl_GCJ='-Wl,'
|
|
+ lt_prog_compiler_can_build_shared_GCJ=no
|
|
+ ;;
|
|
+
|
|
+ uts4*)
|
|
+ lt_prog_compiler_pic_GCJ='-pic'
|
|
+ lt_prog_compiler_static_GCJ='-Bstatic'
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ lt_prog_compiler_can_build_shared_GCJ=no
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+
|
|
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5
|
|
+echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6
|
|
+
|
|
+#
|
|
+# Check to make sure the PIC flag actually works.
|
|
+#
|
|
+if test -n "$lt_prog_compiler_pic_GCJ"; then
|
|
+
|
|
+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5
|
|
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6
|
|
+if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ lt_prog_compiler_pic_works_GCJ=no
|
|
+ ac_outfile=conftest.$ac_objext
|
|
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
|
|
+ lt_compiler_flag="$lt_prog_compiler_pic_GCJ"
|
|
+ # 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:18493: $lt_compile\"" >&5)
|
|
+ (eval "$lt_compile" 2>conftest.err)
|
|
+ ac_status=$?
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:18497: \$? = $ac_status" >&5
|
|
+ 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
|
|
+ lt_prog_compiler_pic_works_GCJ=yes
|
|
+ fi
|
|
+ fi
|
|
+ $rm conftest*
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5
|
|
+echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6
|
|
+
|
|
+if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then
|
|
+ case $lt_prog_compiler_pic_GCJ in
|
|
+ "" | " "*) ;;
|
|
+ *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;;
|
|
+ esac
|
|
+else
|
|
+ lt_prog_compiler_pic_GCJ=
|
|
+ lt_prog_compiler_can_build_shared_GCJ=no
|
|
+fi
|
|
+
|
|
+fi
|
|
+case $host_os in
|
|
+ # For platforms which do not support PIC, -DPIC is meaningless:
|
|
+ *djgpp*)
|
|
+ lt_prog_compiler_pic_GCJ=
|
|
+ ;;
|
|
+ *)
|
|
+ lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ"
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+#
|
|
+# Check to make sure the static flag actually works.
|
|
+#
|
|
+wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\"
|
|
+echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
|
|
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6
|
|
+if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ lt_prog_compiler_static_works_GCJ=no
|
|
+ save_LDFLAGS="$LDFLAGS"
|
|
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
|
|
+ printf "$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>&5
|
|
+ $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
|
|
+ lt_prog_compiler_static_works_GCJ=yes
|
|
+ fi
|
|
+ else
|
|
+ lt_prog_compiler_static_works_GCJ=yes
|
|
+ fi
|
|
+ fi
|
|
+ $rm conftest*
|
|
+ LDFLAGS="$save_LDFLAGS"
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5
|
|
+echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6
|
|
+
|
|
+if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then
|
|
+ :
|
|
+else
|
|
+ lt_prog_compiler_static_GCJ=
|
|
+fi
|
|
+
|
|
+
|
|
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
|
|
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
|
|
+if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ lt_cv_prog_compiler_c_o_GCJ=no
|
|
+ $rm -r conftest 2>/dev/null
|
|
+ mkdir conftest
|
|
+ cd conftest
|
|
+ mkdir out
|
|
+ printf "$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:18597: $lt_compile\"" >&5)
|
|
+ (eval "$lt_compile" 2>out/conftest.err)
|
|
+ ac_status=$?
|
|
+ cat out/conftest.err >&5
|
|
+ echo "$as_me:18601: \$? = $ac_status" >&5
|
|
+ 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_cv_prog_compiler_c_o_GCJ=yes
|
|
+ fi
|
|
+ fi
|
|
+ chmod u+w . 2>&5
|
|
+ $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*
|
|
+
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5
|
|
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6
|
|
+
|
|
+
|
|
+hard_links="nottested"
|
|
+if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then
|
|
+ # do not overwrite the value of need_locks provided by the user
|
|
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
|
|
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
|
|
+ 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
|
|
+ echo "$as_me:$LINENO: result: $hard_links" >&5
|
|
+echo "${ECHO_T}$hard_links" >&6
|
|
+ if test "$hard_links" = no; then
|
|
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
|
|
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
|
|
+ need_locks=warn
|
|
+ fi
|
|
+else
|
|
+ need_locks=no
|
|
+fi
|
|
+
|
|
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
|
|
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
|
|
+
|
|
+ runpath_var=
|
|
+ allow_undefined_flag_GCJ=
|
|
+ enable_shared_with_static_runtimes_GCJ=no
|
|
+ archive_cmds_GCJ=
|
|
+ archive_expsym_cmds_GCJ=
|
|
+ old_archive_From_new_cmds_GCJ=
|
|
+ old_archive_from_expsyms_cmds_GCJ=
|
|
+ export_dynamic_flag_spec_GCJ=
|
|
+ whole_archive_flag_spec_GCJ=
|
|
+ thread_safe_flag_spec_GCJ=
|
|
+ hardcode_libdir_flag_spec_GCJ=
|
|
+ hardcode_libdir_flag_spec_ld_GCJ=
|
|
+ hardcode_libdir_separator_GCJ=
|
|
+ hardcode_direct_GCJ=no
|
|
+ hardcode_minus_L_GCJ=no
|
|
+ hardcode_shlibpath_var_GCJ=unsupported
|
|
+ link_all_deplibs_GCJ=unknown
|
|
+ hardcode_automatic_GCJ=no
|
|
+ module_cmds_GCJ=
|
|
+ module_expsym_cmds_GCJ=
|
|
+ always_export_symbols_GCJ=no
|
|
+ export_symbols_cmds_GCJ='$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
|
|
+ include_expsyms_GCJ=
|
|
+ # 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'.
|
|
+ exclude_expsyms_GCJ="_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.
|
|
+ for cc_temp in $compiler""; 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-%%"`
|
|
+
|
|
+ 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
|
|
+
|
|
+ ld_shlibs_GCJ=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
|
|
+ hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir'
|
|
+ export_dynamic_flag_spec_GCJ='${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
|
|
+ whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
|
|
+ else
|
|
+ whole_archive_flag_spec_GCJ=
|
|
+ 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
|
|
+ ld_shlibs_GCJ=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*)
|
|
+ archive_cmds_GCJ='$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)'
|
|
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
|
|
+ hardcode_minus_L_GCJ=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.
|
|
+ ld_shlibs_GCJ=no
|
|
+ ;;
|
|
+
|
|
+ beos*)
|
|
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
|
+ allow_undefined_flag_GCJ=unsupported
|
|
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
|
|
+ # support --undefined. This deserves some investigation. FIXME
|
|
+ archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ else
|
|
+ ld_shlibs_GCJ=no
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ cygwin* | mingw* | pw32*)
|
|
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless,
|
|
+ # as there is no search path for DLLs.
|
|
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
|
|
+ allow_undefined_flag_GCJ=unsupported
|
|
+ always_export_symbols_GCJ=no
|
|
+ enable_shared_with_static_runtimes_GCJ=yes
|
|
+ export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
|
|
+
|
|
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
|
|
+ archive_cmds_GCJ='$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...
|
|
+ archive_expsym_cmds_GCJ='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
|
|
+ ld_shlibs_GCJ=no
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ interix3*)
|
|
+ hardcode_direct_GCJ=no
|
|
+ hardcode_shlibpath_var_GCJ=no
|
|
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
|
|
+ export_dynamic_flag_spec_GCJ='${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.
|
|
+ archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
|
+ archive_expsym_cmds_GCJ='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'
|
|
+ ;;
|
|
+
|
|
+ linux*)
|
|
+ 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
|
|
+ whole_archive_flag_spec_GCJ='${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
|
|
+ whole_archive_flag_spec_GCJ='${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
|
|
+ archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+
|
|
+ if test $supports_anon_versioning = yes; then
|
|
+ archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~
|
|
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
|
+ $echo "local: *; };" >> $output_objdir/$libname.ver~
|
|
+ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
|
|
+ fi
|
|
+ else
|
|
+ ld_shlibs_GCJ=no
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ netbsd*)
|
|
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
|
|
+ archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
|
|
+ wlarc=
|
|
+ else
|
|
+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ archive_expsym_cmds_GCJ='$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
|
|
+ ld_shlibs_GCJ=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
|
|
+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
|
|
+ else
|
|
+ ld_shlibs_GCJ=no
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
|
|
+ case `$LD -v 2>&1` in
|
|
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
|
|
+ ld_shlibs_GCJ=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
|
|
+ hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
|
|
+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
|
|
+ archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
|
|
+ else
|
|
+ ld_shlibs_GCJ=no
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+
|
|
+ sunos4*)
|
|
+ archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
|
|
+ wlarc=
|
|
+ hardcode_direct_GCJ=yes
|
|
+ hardcode_shlibpath_var_GCJ=no
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
|
+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
|
|
+ archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
|
|
+ else
|
|
+ ld_shlibs_GCJ=no
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ if test "$ld_shlibs_GCJ" = no; then
|
|
+ runpath_var=
|
|
+ hardcode_libdir_flag_spec_GCJ=
|
|
+ export_dynamic_flag_spec_GCJ=
|
|
+ whole_archive_flag_spec_GCJ=
|
|
+ fi
|
|
+ else
|
|
+ # PORTME fill in a description of your system's linker (not GNU ld)
|
|
+ case $host_os in
|
|
+ aix3*)
|
|
+ allow_undefined_flag_GCJ=unsupported
|
|
+ always_export_symbols_GCJ=yes
|
|
+ archive_expsym_cmds_GCJ='$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.
|
|
+ hardcode_minus_L_GCJ=yes
|
|
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
|
|
+ # Neither direct hardcoding nor static linking is supported with a
|
|
+ # broken collect2.
|
|
+ hardcode_direct_GCJ=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
|
|
+ export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
|
|
+ else
|
|
+ export_symbols_cmds_GCJ='$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.
|
|
+
|
|
+ archive_cmds_GCJ=''
|
|
+ hardcode_direct_GCJ=yes
|
|
+ hardcode_libdir_separator_GCJ=':'
|
|
+ link_all_deplibs_GCJ=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
|
|
+ hardcode_direct_GCJ=yes
|
|
+ else
|
|
+ # We have old collect2
|
|
+ hardcode_direct_GCJ=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
|
|
+ hardcode_minus_L_GCJ=yes
|
|
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
|
|
+ hardcode_libdir_separator_GCJ=
|
|
+ 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.
|
|
+ always_export_symbols_GCJ=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.
|
|
+ allow_undefined_flag_GCJ='-berok'
|
|
+ # Determine the default libpath from the value encoded in an empty executable.
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+
|
|
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
|
+}'`
|
|
+# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
|
+}'`; fi
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext \
|
|
+ conftest$ac_exeext conftest.$ac_ext
|
|
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
|
|
+
|
|
+ hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
|
|
+ archive_expsym_cmds_GCJ="\$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
|
|
+ hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib'
|
|
+ allow_undefined_flag_GCJ="-z nodefs"
|
|
+ archive_expsym_cmds_GCJ="\$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.
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext conftest$ac_exeext
|
|
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
+ (eval $ac_link) 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
+ || test ! -s conftest.err'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest$ac_exeext'
|
|
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
+ (eval $ac_try) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+
|
|
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
|
+}'`
|
|
+# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
|
+}'`; fi
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+fi
|
|
+rm -f conftest.err conftest.$ac_objext \
|
|
+ conftest$ac_exeext conftest.$ac_ext
|
|
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
|
|
+
|
|
+ hardcode_libdir_flag_spec_GCJ='${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.
|
|
+ no_undefined_flag_GCJ=' ${wl}-bernotok'
|
|
+ allow_undefined_flag_GCJ=' ${wl}-berok'
|
|
+ # Exported symbols can be pulled into shared objects from archives
|
|
+ whole_archive_flag_spec_GCJ='$convenience'
|
|
+ archive_cmds_need_lc_GCJ=yes
|
|
+ # This is similar to how AIX traditionally builds its shared libraries.
|
|
+ archive_expsym_cmds_GCJ="\$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*)
|
|
+ archive_cmds_GCJ='$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)'
|
|
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
|
|
+ hardcode_minus_L_GCJ=yes
|
|
+ # see comment about different semantics on the GNU ld section
|
|
+ ld_shlibs_GCJ=no
|
|
+ ;;
|
|
+
|
|
+ bsdi[45]*)
|
|
+ export_dynamic_flag_spec_GCJ=-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.
|
|
+ hardcode_libdir_flag_spec_GCJ=' '
|
|
+ allow_undefined_flag_GCJ=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.
|
|
+ archive_cmds_GCJ='$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.
|
|
+ old_archive_From_new_cmds_GCJ='true'
|
|
+ # FIXME: Should let the user specify the lib program.
|
|
+ old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs'
|
|
+ fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`'
|
|
+ enable_shared_with_static_runtimes_GCJ=yes
|
|
+ ;;
|
|
+
|
|
+ darwin* | rhapsody*)
|
|
+ case $host_os in
|
|
+ rhapsody* | darwin1.[012])
|
|
+ allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress'
|
|
+ ;;
|
|
+ *) # Darwin 1.3 on
|
|
+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
|
|
+ allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
|
|
+ else
|
|
+ case ${MACOSX_DEPLOYMENT_TARGET} in
|
|
+ 10.[012])
|
|
+ allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
|
|
+ ;;
|
|
+ 10.*)
|
|
+ allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup'
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ archive_cmds_need_lc_GCJ=no
|
|
+ hardcode_direct_GCJ=no
|
|
+ hardcode_automatic_GCJ=yes
|
|
+ hardcode_shlibpath_var_GCJ=unsupported
|
|
+ whole_archive_flag_spec_GCJ=''
|
|
+ link_all_deplibs_GCJ=yes
|
|
+ if test "$GCC" = yes ; then
|
|
+ output_verbose_link_cmd='echo'
|
|
+ archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
|
|
+ module_cmds_GCJ='$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
|
|
+ archive_expsym_cmds_GCJ='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}'
|
|
+ module_expsym_cmds_GCJ='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'
|
|
+ archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
|
|
+ module_cmds_GCJ='$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
|
|
+ archive_expsym_cmds_GCJ='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 $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
|
|
+ module_expsym_cmds_GCJ='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}'
|
|
+ ;;
|
|
+ *)
|
|
+ ld_shlibs_GCJ=no
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ dgux*)
|
|
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
|
|
+ hardcode_shlibpath_var_GCJ=no
|
|
+ ;;
|
|
+
|
|
+ freebsd1*)
|
|
+ ld_shlibs_GCJ=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*)
|
|
+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
|
|
+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
|
|
+ hardcode_direct_GCJ=yes
|
|
+ hardcode_shlibpath_var_GCJ=no
|
|
+ ;;
|
|
+
|
|
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
|
|
+ freebsd2*)
|
|
+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_direct_GCJ=yes
|
|
+ hardcode_minus_L_GCJ=yes
|
|
+ hardcode_shlibpath_var_GCJ=no
|
|
+ ;;
|
|
+
|
|
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
|
|
+ freebsd* | kfreebsd*-gnu | dragonfly*)
|
|
+ archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
|
|
+ hardcode_direct_GCJ=yes
|
|
+ hardcode_shlibpath_var_GCJ=no
|
|
+ ;;
|
|
+
|
|
+ hpux9*)
|
|
+ if test "$GCC" = yes; then
|
|
+ archive_cmds_GCJ='$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
|
|
+ archive_cmds_GCJ='$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
|
|
+ hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
|
|
+ hardcode_libdir_separator_GCJ=:
|
|
+ hardcode_direct_GCJ=yes
|
|
+
|
|
+ # hardcode_minus_L: Not really in the search PATH,
|
|
+ # but as the default location of the library.
|
|
+ hardcode_minus_L_GCJ=yes
|
|
+ export_dynamic_flag_spec_GCJ='${wl}-E'
|
|
+ ;;
|
|
+
|
|
+ hpux10*)
|
|
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
|
|
+ archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ else
|
|
+ archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
|
|
+ fi
|
|
+ if test "$with_gnu_ld" = no; then
|
|
+ hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
|
|
+ hardcode_libdir_separator_GCJ=:
|
|
+
|
|
+ hardcode_direct_GCJ=yes
|
|
+ export_dynamic_flag_spec_GCJ='${wl}-E'
|
|
+
|
|
+ # hardcode_minus_L: Not really in the search PATH,
|
|
+ # but as the default location of the library.
|
|
+ hardcode_minus_L_GCJ=yes
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ hpux11*)
|
|
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
|
|
+ case $host_cpu in
|
|
+ hppa*64*)
|
|
+ archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ ;;
|
|
+ ia64*)
|
|
+ archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ ;;
|
|
+ *)
|
|
+ archive_cmds_GCJ='$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*)
|
|
+ archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ ;;
|
|
+ ia64*)
|
|
+ archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ ;;
|
|
+ *)
|
|
+ archive_cmds_GCJ='$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
|
|
+ hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
|
|
+ hardcode_libdir_separator_GCJ=:
|
|
+
|
|
+ case $host_cpu in
|
|
+ hppa*64*|ia64*)
|
|
+ hardcode_libdir_flag_spec_ld_GCJ='+b $libdir'
|
|
+ hardcode_direct_GCJ=no
|
|
+ hardcode_shlibpath_var_GCJ=no
|
|
+ ;;
|
|
+ *)
|
|
+ hardcode_direct_GCJ=yes
|
|
+ export_dynamic_flag_spec_GCJ='${wl}-E'
|
|
+
|
|
+ # hardcode_minus_L: Not really in the search PATH,
|
|
+ # but as the default location of the library.
|
|
+ hardcode_minus_L_GCJ=yes
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ irix5* | irix6* | nonstopux*)
|
|
+ if test "$GCC" = yes; then
|
|
+ archive_cmds_GCJ='$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
|
|
+ archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
|
|
+ hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir'
|
|
+ fi
|
|
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
|
|
+ hardcode_libdir_separator_GCJ=:
|
|
+ link_all_deplibs_GCJ=yes
|
|
+ ;;
|
|
+
|
|
+ netbsd*)
|
|
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
|
|
+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
|
|
+ else
|
|
+ archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
|
|
+ fi
|
|
+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
|
|
+ hardcode_direct_GCJ=yes
|
|
+ hardcode_shlibpath_var_GCJ=no
|
|
+ ;;
|
|
+
|
|
+ newsos6)
|
|
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_direct_GCJ=yes
|
|
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
|
|
+ hardcode_libdir_separator_GCJ=:
|
|
+ hardcode_shlibpath_var_GCJ=no
|
|
+ ;;
|
|
+
|
|
+ openbsd*)
|
|
+ hardcode_direct_GCJ=yes
|
|
+ hardcode_shlibpath_var_GCJ=no
|
|
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
|
|
+ archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
|
|
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
|
|
+ export_dynamic_flag_spec_GCJ='${wl}-E'
|
|
+ else
|
|
+ case $host_os in
|
|
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
|
|
+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
|
|
+ ;;
|
|
+ *)
|
|
+ archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ os2*)
|
|
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
|
|
+ hardcode_minus_L_GCJ=yes
|
|
+ allow_undefined_flag_GCJ=unsupported
|
|
+ archive_cmds_GCJ='$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'
|
|
+ old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
|
|
+ ;;
|
|
+
|
|
+ osf3*)
|
|
+ if test "$GCC" = yes; then
|
|
+ allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
|
|
+ archive_cmds_GCJ='$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
|
|
+ allow_undefined_flag_GCJ=' -expect_unresolved \*'
|
|
+ archive_cmds_GCJ='$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
|
|
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
|
|
+ hardcode_libdir_separator_GCJ=:
|
|
+ ;;
|
|
+
|
|
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
|
|
+ if test "$GCC" = yes; then
|
|
+ allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
|
|
+ archive_cmds_GCJ='$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'
|
|
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
|
|
+ else
|
|
+ allow_undefined_flag_GCJ=' -expect_unresolved \*'
|
|
+ archive_cmds_GCJ='$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'
|
|
+ archive_expsym_cmds_GCJ='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
|
|
+ hardcode_libdir_flag_spec_GCJ='-rpath $libdir'
|
|
+ fi
|
|
+ hardcode_libdir_separator_GCJ=:
|
|
+ ;;
|
|
+
|
|
+ solaris*)
|
|
+ no_undefined_flag_GCJ=' -z text'
|
|
+ if test "$GCC" = yes; then
|
|
+ wlarc='${wl}'
|
|
+ archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds_GCJ='$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=''
|
|
+ archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ archive_expsym_cmds_GCJ='$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
|
|
+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
|
|
+ hardcode_shlibpath_var_GCJ=no
|
|
+ case $host_os in
|
|
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
|
|
+ *)
|
|
+ # The compiler driver will combine linker options so we
|
|
+ # cannot just pass the convience library names through
|
|
+ # without $wl, iff we do not link with $LD.
|
|
+ # Luckily, gcc supports the same syntax we need for Sun Studio.
|
|
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
|
|
+ case $wlarc in
|
|
+ '')
|
|
+ whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;;
|
|
+ *)
|
|
+ whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
|
|
+ esac ;;
|
|
+ esac
|
|
+ link_all_deplibs_GCJ=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.
|
|
+ archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ else
|
|
+ archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
|
|
+ fi
|
|
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
|
|
+ hardcode_direct_GCJ=yes
|
|
+ hardcode_minus_L_GCJ=yes
|
|
+ hardcode_shlibpath_var_GCJ=no
|
|
+ ;;
|
|
+
|
|
+ sysv4)
|
|
+ case $host_vendor in
|
|
+ sni)
|
|
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_direct_GCJ=yes # is this really true???
|
|
+ ;;
|
|
+ siemens)
|
|
+ ## LD is ld it makes a PLAMLIB
|
|
+ ## CC just makes a GrossModule.
|
|
+ archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
|
|
+ reload_cmds_GCJ='$CC -r -o $output$reload_objs'
|
|
+ hardcode_direct_GCJ=no
|
|
+ ;;
|
|
+ motorola)
|
|
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie
|
|
+ ;;
|
|
+ esac
|
|
+ runpath_var='LD_RUN_PATH'
|
|
+ hardcode_shlibpath_var_GCJ=no
|
|
+ ;;
|
|
+
|
|
+ sysv4.3*)
|
|
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_shlibpath_var_GCJ=no
|
|
+ export_dynamic_flag_spec_GCJ='-Bexport'
|
|
+ ;;
|
|
+
|
|
+ sysv4*MP*)
|
|
+ if test -d /usr/nec; then
|
|
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_shlibpath_var_GCJ=no
|
|
+ runpath_var=LD_RUN_PATH
|
|
+ hardcode_runpath_var=yes
|
|
+ ld_shlibs_GCJ=yes
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
|
|
+ no_undefined_flag_GCJ='${wl}-z,text'
|
|
+ archive_cmds_need_lc_GCJ=no
|
|
+ hardcode_shlibpath_var_GCJ=no
|
|
+ runpath_var='LD_RUN_PATH'
|
|
+
|
|
+ if test "$GCC" = yes; then
|
|
+ archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ else
|
|
+ archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds_GCJ='$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.
|
|
+ no_undefined_flag_GCJ='${wl}-z,text'
|
|
+ allow_undefined_flag_GCJ='${wl}-z,nodefs'
|
|
+ archive_cmds_need_lc_GCJ=no
|
|
+ hardcode_shlibpath_var_GCJ=no
|
|
+ hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
|
|
+ hardcode_libdir_separator_GCJ=':'
|
|
+ link_all_deplibs_GCJ=yes
|
|
+ export_dynamic_flag_spec_GCJ='${wl}-Bexport'
|
|
+ runpath_var='LD_RUN_PATH'
|
|
+
|
|
+ if test "$GCC" = yes; then
|
|
+ archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ else
|
|
+ archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ uts4*)
|
|
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
|
|
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
|
|
+ hardcode_shlibpath_var_GCJ=no
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ ld_shlibs_GCJ=no
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+
|
|
+echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5
|
|
+echo "${ECHO_T}$ld_shlibs_GCJ" >&6
|
|
+test "$ld_shlibs_GCJ" = no && can_build_shared=no
|
|
+
|
|
+#
|
|
+# Do we need to explicitly link libc?
|
|
+#
|
|
+case "x$archive_cmds_need_lc_GCJ" in
|
|
+x|xyes)
|
|
+ # Assume -lc should be added
|
|
+ archive_cmds_need_lc_GCJ=yes
|
|
+
|
|
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
|
|
+ case $archive_cmds_GCJ 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.
|
|
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
|
|
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
|
|
+ $rm conftest*
|
|
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
|
|
+
|
|
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } 2>conftest.err; then
|
|
+ soname=conftest
|
|
+ lib=conftest
|
|
+ libobjs=conftest.$ac_objext
|
|
+ deplibs=
|
|
+ wl=$lt_prog_compiler_wl_GCJ
|
|
+ pic_flag=$lt_prog_compiler_pic_GCJ
|
|
+ compiler_flags=-v
|
|
+ linker_flags=-v
|
|
+ verstring=
|
|
+ output_objdir=.
|
|
+ libname=conftest
|
|
+ lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ
|
|
+ allow_undefined_flag_GCJ=
|
|
+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
|
|
+ (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }
|
|
+ then
|
|
+ archive_cmds_need_lc_GCJ=no
|
|
+ else
|
|
+ archive_cmds_need_lc_GCJ=yes
|
|
+ fi
|
|
+ allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag
|
|
+ else
|
|
+ cat conftest.err 1>&5
|
|
+ fi
|
|
+ $rm conftest*
|
|
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5
|
|
+echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
|
|
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
|
|
+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"
|
|
+if test "$GCC" = yes; then
|
|
+ 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 ';' >/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.
|
|
+ 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
|
|
+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`'
|
|
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
|
|
+ if test "$GCC" = yes; then
|
|
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
|
|
+ else
|
|
+ sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
|
|
+ fi
|
|
+ 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
|
|
+ ;;
|
|
+
|
|
+kfreebsd*-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
|
|
+ shlibpath_overrides_runpath=no
|
|
+ hardcode_into_libs=yes
|
|
+ dynamic_linker='GNU ld.so'
|
|
+ ;;
|
|
+
|
|
+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
|
|
+ ;;
|
|
+ freebsd*) # from 4.6 on
|
|
+ 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'
|
|
+ ;;
|
|
+
|
|
+interix3*)
|
|
+ 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*)
|
|
+ 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
|
|
+
|
|
+ # find out which ABI we are using
|
|
+ libsuff=
|
|
+ case "$host_cpu" in
|
|
+ x86_64*|s390x*|powerpc64*)
|
|
+ echo '#line 20066 "configure"' > conftest.$ac_ext
|
|
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
+ (eval $ac_compile) 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; then
|
|
+ case `/usr/bin/file conftest.$ac_objext` in
|
|
+ *64-bit*)
|
|
+ libsuff=64
|
|
+ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ rm -rf conftest*
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # 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/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
|
|
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $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'
|
|
+ ;;
|
|
+
|
|
+knetbsd*-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
|
|
+ shlibpath_overrides_runpath=no
|
|
+ hardcode_into_libs=yes
|
|
+ dynamic_linker='GNU 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"
|
|
+ ;;
|
|
+
|
|
+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
|
|
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
|
|
+echo "${ECHO_T}$dynamic_linker" >&6
|
|
+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
|
|
+
|
|
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
|
|
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
|
|
+hardcode_action_GCJ=
|
|
+if test -n "$hardcode_libdir_flag_spec_GCJ" || \
|
|
+ test -n "$runpath_var_GCJ" || \
|
|
+ test "X$hardcode_automatic_GCJ" = "Xyes" ; then
|
|
+
|
|
+ # We can hardcode non-existant directories.
|
|
+ if test "$hardcode_direct_GCJ" != 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, GCJ)" != no &&
|
|
+ test "$hardcode_minus_L_GCJ" != no; then
|
|
+ # Linking always hardcodes the temporary library directory.
|
|
+ hardcode_action_GCJ=relink
|
|
+ else
|
|
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
|
|
+ hardcode_action_GCJ=immediate
|
|
+ fi
|
|
+else
|
|
+ # We cannot hardcode anything, or else we can only hardcode existing
|
|
+ # directories.
|
|
+ hardcode_action_GCJ=unsupported
|
|
+fi
|
|
+echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5
|
|
+echo "${ECHO_T}$hardcode_action_GCJ" >&6
|
|
+
|
|
+if test "$hardcode_action_GCJ" = 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
|
|
+
|
|
+
|
|
+# 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 \
|
|
+ compiler_GCJ \
|
|
+ CC_GCJ \
|
|
+ LD_GCJ \
|
|
+ lt_prog_compiler_wl_GCJ \
|
|
+ lt_prog_compiler_pic_GCJ \
|
|
+ lt_prog_compiler_static_GCJ \
|
|
+ lt_prog_compiler_no_builtin_flag_GCJ \
|
|
+ export_dynamic_flag_spec_GCJ \
|
|
+ thread_safe_flag_spec_GCJ \
|
|
+ whole_archive_flag_spec_GCJ \
|
|
+ enable_shared_with_static_runtimes_GCJ \
|
|
+ old_archive_cmds_GCJ \
|
|
+ old_archive_from_new_cmds_GCJ \
|
|
+ predep_objects_GCJ \
|
|
+ postdep_objects_GCJ \
|
|
+ predeps_GCJ \
|
|
+ postdeps_GCJ \
|
|
+ compiler_lib_search_path_GCJ \
|
|
+ archive_cmds_GCJ \
|
|
+ archive_expsym_cmds_GCJ \
|
|
+ postinstall_cmds_GCJ \
|
|
+ postuninstall_cmds_GCJ \
|
|
+ old_archive_from_expsyms_cmds_GCJ \
|
|
+ allow_undefined_flag_GCJ \
|
|
+ no_undefined_flag_GCJ \
|
|
+ export_symbols_cmds_GCJ \
|
|
+ hardcode_libdir_flag_spec_GCJ \
|
|
+ hardcode_libdir_flag_spec_ld_GCJ \
|
|
+ hardcode_libdir_separator_GCJ \
|
|
+ hardcode_automatic_GCJ \
|
|
+ module_cmds_GCJ \
|
|
+ module_expsym_cmds_GCJ \
|
|
+ lt_cv_prog_compiler_c_o_GCJ \
|
|
+ exclude_expsyms_GCJ \
|
|
+ include_expsyms_GCJ; do
|
|
+
|
|
+ case $var in
|
|
+ old_archive_cmds_GCJ | \
|
|
+ old_archive_from_new_cmds_GCJ | \
|
|
+ archive_cmds_GCJ | \
|
|
+ archive_expsym_cmds_GCJ | \
|
|
+ module_cmds_GCJ | \
|
|
+ module_expsym_cmds_GCJ | \
|
|
+ old_archive_from_expsyms_cmds_GCJ | \
|
|
+ export_symbols_cmds_GCJ | \
|
|
+ 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
|
|
+
|
|
+cfgfile="$ofile"
|
|
+
|
|
+ cat <<__EOF__ >> "$cfgfile"
|
|
+# ### 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=$archive_cmds_need_lc_GCJ
|
|
+
|
|
+# Whether or not to disallow shared libs when runtime libs are static
|
|
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ
|
|
+
|
|
+# 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_compiler_GCJ
|
|
+
|
|
+# Is the compiler the GNU C compiler?
|
|
+with_gcc=$GCC_GCJ
|
|
+
|
|
+gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\`
|
|
+gcc_ver=\`gcc -dumpversion\`
|
|
+
|
|
+# An ERE matcher.
|
|
+EGREP=$lt_EGREP
|
|
+
|
|
+# The linker used to build libraries.
|
|
+LD=$lt_LD_GCJ
|
|
+
|
|
+# 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_prog_compiler_wl_GCJ
|
|
+
|
|
+# 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_prog_compiler_pic_GCJ
|
|
+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_cv_prog_compiler_c_o_GCJ
|
|
+
|
|
+# 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_prog_compiler_static_GCJ
|
|
+
|
|
+# Compiler flag to turn off builtin functions.
|
|
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ
|
|
+
|
|
+# Compiler flag to allow reflexive dlopens.
|
|
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ
|
|
+
|
|
+# Compiler flag to generate shared objects directly from archives.
|
|
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ
|
|
+
|
|
+# Compiler flag to generate thread-safe objects.
|
|
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ
|
|
+
|
|
+# 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_old_archive_cmds_GCJ
|
|
+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_old_archive_from_new_cmds_GCJ
|
|
+
|
|
+# Create a temporary old-style archive to link instead of a shared archive.
|
|
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ
|
|
+
|
|
+# Commands used to build and install a shared archive.
|
|
+archive_cmds=$lt_archive_cmds_GCJ
|
|
+archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ
|
|
+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_module_cmds_GCJ
|
|
+module_expsym_cmds=$lt_module_expsym_cmds_GCJ
|
|
+
|
|
+# 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=\`echo $lt_predep_objects_GCJ | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# Dependencies to place after the objects being linked to create a
|
|
+# shared library.
|
|
+postdep_objects=\`echo $lt_postdep_objects_GCJ | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# Dependencies to place before the objects being linked to create a
|
|
+# shared library.
|
|
+predeps=$lt_predeps_GCJ
|
|
+
|
|
+# Dependencies to place after the objects being linked to create a
|
|
+# shared library.
|
|
+postdeps=$lt_postdeps_GCJ
|
|
+
|
|
+# The library search path used internally by the compiler when linking
|
|
+# a shared library.
|
|
+compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_GCJ | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# 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_allow_undefined_flag_GCJ
|
|
+
|
|
+# Flag that forces no undefined symbols.
|
|
+no_undefined_flag=$lt_no_undefined_flag_GCJ
|
|
+
|
|
+# 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=$hardcode_action_GCJ
|
|
+
|
|
+# 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_hardcode_libdir_flag_spec_GCJ
|
|
+
|
|
+# 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_hardcode_libdir_flag_spec_ld_GCJ
|
|
+
|
|
+# Whether we need a single -rpath flag with a separated argument.
|
|
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ
|
|
+
|
|
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
|
|
+# resulting binary.
|
|
+hardcode_direct=$hardcode_direct_GCJ
|
|
+
|
|
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
|
|
+# resulting binary.
|
|
+hardcode_minus_L=$hardcode_minus_L_GCJ
|
|
+
|
|
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
|
|
+# the resulting binary.
|
|
+hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ
|
|
+
|
|
+# 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=$hardcode_automatic_GCJ
|
|
+
|
|
+# 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=$link_all_deplibs_GCJ
|
|
+
|
|
+# Compile-time system search path for libraries
|
|
+sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# 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="$fix_srcfile_path_GCJ"
|
|
+
|
|
+# Set to yes if exported symbols are required.
|
|
+always_export_symbols=$always_export_symbols_GCJ
|
|
+
|
|
+# The commands to list exported symbols.
|
|
+export_symbols_cmds=$lt_export_symbols_cmds_GCJ
|
|
+
|
|
+# 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_exclude_expsyms_GCJ
|
|
+
|
|
+# Symbols that must always be exported.
|
|
+include_expsyms=$lt_include_expsyms_GCJ
|
|
+
|
|
+# ### END LIBTOOL TAG CONFIG: $tagname
|
|
+
|
|
+__EOF__
|
|
+
|
|
+
|
|
+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_ext=c
|
|
+ac_cpp='$CPP $CPPFLAGS'
|
|
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
+
|
|
+CC="$lt_save_CC"
|
|
+
|
|
+ else
|
|
+ tagname=""
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ RC)
|
|
+
|
|
+
|
|
+
|
|
+# Source file extension for RC test sources.
|
|
+ac_ext=rc
|
|
+
|
|
+# Object file extension for compiled RC test sources.
|
|
+objext=o
|
|
+objext_RC=$objext
|
|
+
|
|
+# Code to be used in simple compile tests
|
|
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
|
|
+
|
|
+# 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.
|
|
+
|
|
+# 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
|
|
+
|
|
+
|
|
+# save warnings/boilerplate of simple test code
|
|
+ac_outfile=conftest.$ac_objext
|
|
+printf "$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*
|
|
+
|
|
+ac_outfile=conftest.$ac_objext
|
|
+printf "$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*
|
|
+
|
|
+
|
|
+# Allow CC to be a program name with arguments.
|
|
+lt_save_CC="$CC"
|
|
+CC=${RC-"windres"}
|
|
+compiler=$CC
|
|
+compiler_RC=$CC
|
|
+for cc_temp in $compiler""; 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_cv_prog_compiler_c_o_RC=yes
|
|
+
|
|
+# 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 \
|
|
+ compiler_RC \
|
|
+ CC_RC \
|
|
+ LD_RC \
|
|
+ lt_prog_compiler_wl_RC \
|
|
+ lt_prog_compiler_pic_RC \
|
|
+ lt_prog_compiler_static_RC \
|
|
+ lt_prog_compiler_no_builtin_flag_RC \
|
|
+ export_dynamic_flag_spec_RC \
|
|
+ thread_safe_flag_spec_RC \
|
|
+ whole_archive_flag_spec_RC \
|
|
+ enable_shared_with_static_runtimes_RC \
|
|
+ old_archive_cmds_RC \
|
|
+ old_archive_from_new_cmds_RC \
|
|
+ predep_objects_RC \
|
|
+ postdep_objects_RC \
|
|
+ predeps_RC \
|
|
+ postdeps_RC \
|
|
+ compiler_lib_search_path_RC \
|
|
+ archive_cmds_RC \
|
|
+ archive_expsym_cmds_RC \
|
|
+ postinstall_cmds_RC \
|
|
+ postuninstall_cmds_RC \
|
|
+ old_archive_from_expsyms_cmds_RC \
|
|
+ allow_undefined_flag_RC \
|
|
+ no_undefined_flag_RC \
|
|
+ export_symbols_cmds_RC \
|
|
+ hardcode_libdir_flag_spec_RC \
|
|
+ hardcode_libdir_flag_spec_ld_RC \
|
|
+ hardcode_libdir_separator_RC \
|
|
+ hardcode_automatic_RC \
|
|
+ module_cmds_RC \
|
|
+ module_expsym_cmds_RC \
|
|
+ lt_cv_prog_compiler_c_o_RC \
|
|
+ exclude_expsyms_RC \
|
|
+ include_expsyms_RC; do
|
|
+
|
|
+ case $var in
|
|
+ old_archive_cmds_RC | \
|
|
+ old_archive_from_new_cmds_RC | \
|
|
+ archive_cmds_RC | \
|
|
+ archive_expsym_cmds_RC | \
|
|
+ module_cmds_RC | \
|
|
+ module_expsym_cmds_RC | \
|
|
+ old_archive_from_expsyms_cmds_RC | \
|
|
+ export_symbols_cmds_RC | \
|
|
+ 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
|
|
+
|
|
+cfgfile="$ofile"
|
|
+
|
|
+ cat <<__EOF__ >> "$cfgfile"
|
|
+# ### 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=$archive_cmds_need_lc_RC
|
|
+
|
|
+# Whether or not to disallow shared libs when runtime libs are static
|
|
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC
|
|
+
|
|
+# 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_compiler_RC
|
|
+
|
|
+# Is the compiler the GNU C compiler?
|
|
+with_gcc=$GCC_RC
|
|
+
|
|
+gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\`
|
|
+gcc_ver=\`gcc -dumpversion\`
|
|
+
|
|
+# An ERE matcher.
|
|
+EGREP=$lt_EGREP
|
|
+
|
|
+# The linker used to build libraries.
|
|
+LD=$lt_LD_RC
|
|
+
|
|
+# 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_prog_compiler_wl_RC
|
|
+
|
|
+# 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_prog_compiler_pic_RC
|
|
+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_cv_prog_compiler_c_o_RC
|
|
+
|
|
+# 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_prog_compiler_static_RC
|
|
+
|
|
+# Compiler flag to turn off builtin functions.
|
|
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC
|
|
+
|
|
+# Compiler flag to allow reflexive dlopens.
|
|
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC
|
|
+
|
|
+# Compiler flag to generate shared objects directly from archives.
|
|
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC
|
|
+
|
|
+# Compiler flag to generate thread-safe objects.
|
|
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC
|
|
+
|
|
+# 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_old_archive_cmds_RC
|
|
+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_old_archive_from_new_cmds_RC
|
|
+
|
|
+# Create a temporary old-style archive to link instead of a shared archive.
|
|
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC
|
|
+
|
|
+# Commands used to build and install a shared archive.
|
|
+archive_cmds=$lt_archive_cmds_RC
|
|
+archive_expsym_cmds=$lt_archive_expsym_cmds_RC
|
|
+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_module_cmds_RC
|
|
+module_expsym_cmds=$lt_module_expsym_cmds_RC
|
|
+
|
|
+# 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=\`echo $lt_predep_objects_RC | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# Dependencies to place after the objects being linked to create a
|
|
+# shared library.
|
|
+postdep_objects=\`echo $lt_postdep_objects_RC | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# Dependencies to place before the objects being linked to create a
|
|
+# shared library.
|
|
+predeps=$lt_predeps_RC
|
|
+
|
|
+# Dependencies to place after the objects being linked to create a
|
|
+# shared library.
|
|
+postdeps=$lt_postdeps_RC
|
|
+
|
|
+# The library search path used internally by the compiler when linking
|
|
+# a shared library.
|
|
+compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_RC | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# 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_allow_undefined_flag_RC
|
|
+
|
|
+# Flag that forces no undefined symbols.
|
|
+no_undefined_flag=$lt_no_undefined_flag_RC
|
|
+
|
|
+# 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=$hardcode_action_RC
|
|
+
|
|
+# 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_hardcode_libdir_flag_spec_RC
|
|
+
|
|
+# 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_hardcode_libdir_flag_spec_ld_RC
|
|
+
|
|
+# Whether we need a single -rpath flag with a separated argument.
|
|
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC
|
|
+
|
|
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
|
|
+# resulting binary.
|
|
+hardcode_direct=$hardcode_direct_RC
|
|
+
|
|
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
|
|
+# resulting binary.
|
|
+hardcode_minus_L=$hardcode_minus_L_RC
|
|
+
|
|
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
|
|
+# the resulting binary.
|
|
+hardcode_shlibpath_var=$hardcode_shlibpath_var_RC
|
|
+
|
|
+# 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=$hardcode_automatic_RC
|
|
+
|
|
+# 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=$link_all_deplibs_RC
|
|
+
|
|
+# Compile-time system search path for libraries
|
|
+sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\`
|
|
+
|
|
+# 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="$fix_srcfile_path_RC"
|
|
+
|
|
+# Set to yes if exported symbols are required.
|
|
+always_export_symbols=$always_export_symbols_RC
|
|
+
|
|
+# The commands to list exported symbols.
|
|
+export_symbols_cmds=$lt_export_symbols_cmds_RC
|
|
+
|
|
+# 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_exclude_expsyms_RC
|
|
+
|
|
+# Symbols that must always be exported.
|
|
+include_expsyms=$lt_include_expsyms_RC
|
|
+
|
|
+# ### END LIBTOOL TAG CONFIG: $tagname
|
|
+
|
|
+__EOF__
|
|
+
|
|
+
|
|
+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_ext=c
|
|
+ac_cpp='$CPP $CPPFLAGS'
|
|
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
+
|
|
+CC="$lt_save_CC"
|
|
+
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5
|
|
+echo "$as_me: error: Unsupported tag name: $tagname" >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+ ;;
|
|
+ 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"
|
|
+ { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5
|
|
+echo "$as_me: error: unable to update list of available tagged configurations." >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+ fi
|
|
+fi
|
|
+
|
|
+
|
|
+
|
|
+# 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'
|
|
+
|
|
+# Prevent multiple expansion
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+CFLAGS="-O2 -Wall"
|
|
+## check for --enable-debug first before checking CFLAGS before
|
|
+## so that we don't mix -O and -g
|
|
+# Check whether --enable-debug or --disable-debug was given.
|
|
+if test "${enable_debug+set}" = set; then
|
|
+ enableval="$enable_debug"
|
|
+ if eval "test x$enable_debug = xyes"; then
|
|
+ CFLAGS="${CFLAGS} -g -O0"
|
|
+ fi
|
|
+fi;
|
|
+
|
|
+
|
|
+if test x$debug = xtrue; then
|
|
+ DEBUG_TRUE=
|
|
+ DEBUG_FALSE='#'
|
|
+else
|
|
+ DEBUG_TRUE='#'
|
|
+ DEBUG_FALSE=
|
|
+fi
|
|
+
|
|
+
|
|
+ISCSID_VERSION_DEFAULT="871"
|
|
+ISCSID_VERSION=$ISCSID_VERSION_DEFAULT
|
|
+which iscsid 2>&1 > /dev/null
|
|
+if test $? -eq 0 ; then
|
|
+ ISCSID_VERSION=`iscsid -v | awk '{ print $3 }' | awk -F- '{ print $2 }'`
|
|
+ echo "Detected iscsid version $ISCSID_VERSION"
|
|
+fi
|
|
+
|
|
+
|
|
+# Check whether --with-iscsid-version or --without-iscsid-version was given.
|
|
+if test "${with_iscsid_version+set}" = set; then
|
|
+ withval="$with_iscsid_version"
|
|
+ ISCSID_VERSION=$withval
|
|
+fi;
|
|
+
|
|
+echo "ISCSID_VERSION: $ISCSID_VERSION"
|
|
+CFLAGS="${CFLAGS} -DISCSID_VERSION=$ISCSID_VERSION"
|
|
+CFLAGS=${CFLAGS}
|
|
+
|
|
+
|
|
+ ac_config_commands="$ac_config_commands default"
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+ ac_config_files="$ac_config_files Makefile src/Makefile src/apps/Makefile src/apps/dhcpc/Makefile src/apps/brcm-iscsi/Makefile src/uip/Makefile src/unix/Makefile src/unix/libs/Makefile"
|
|
+cat >confcache <<\_ACEOF
|
|
+# This file is a shell script that caches the results of configure
|
|
+# tests run on this system so they can be shared between configure
|
|
+# scripts and configure runs, see configure's option --config-cache.
|
|
+# It is not useful on other systems. If it contains results you don't
|
|
+# want to keep, you may remove or edit it.
|
|
+#
|
|
+# config.status only pays attention to the cache file if you give it
|
|
+# the --recheck option to rerun configure.
|
|
+#
|
|
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
|
|
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
|
|
+# following values.
|
|
+
|
|
+_ACEOF
|
|
+
|
|
+# The following way of writing the cache mishandles newlines in values,
|
|
+# but we know of no workaround that is simple, portable, and efficient.
|
|
+# So, don't put newlines in cache variables' values.
|
|
+# Ultrix sh set writes to stderr and can't be redirected directly,
|
|
+# and sets the high bit in the cache file unless we assign to the vars.
|
|
+{
|
|
+ (set) 2>&1 |
|
|
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
|
|
+ *ac_space=\ *)
|
|
+ # `set' does not quote correctly, so add quotes (double-quote
|
|
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
|
|
+ sed -n \
|
|
+ "s/'/'\\\\''/g;
|
|
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
|
|
+ ;;
|
|
+ *)
|
|
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
|
|
+ sed -n \
|
|
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
|
|
+ ;;
|
|
+ esac;
|
|
+} |
|
|
+ sed '
|
|
+ t clear
|
|
+ : clear
|
|
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
|
|
+ t end
|
|
+ /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
|
|
+ : end' >>confcache
|
|
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
|
|
+ if test -w $cache_file; then
|
|
+ test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
|
|
+ cat confcache >$cache_file
|
|
+ else
|
|
+ echo "not updating unwritable cache $cache_file"
|
|
+ fi
|
|
+fi
|
|
+rm -f confcache
|
|
+
|
|
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
|
|
+# Let make expand exec_prefix.
|
|
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
|
|
+
|
|
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
|
|
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
|
|
+# trailing colons and then remove the whole line if VPATH becomes empty
|
|
+# (actually we leave an empty line to preserve line numbers).
|
|
+if test "x$srcdir" = x.; then
|
|
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
|
|
+s/:*\$(srcdir):*/:/;
|
|
+s/:*\${srcdir}:*/:/;
|
|
+s/:*@srcdir@:*/:/;
|
|
+s/^\([^=]*=[ ]*\):*/\1/;
|
|
+s/:*$//;
|
|
+s/^[^=]*=[ ]*$//;
|
|
+}'
|
|
+fi
|
|
+
|
|
+DEFS=-DHAVE_CONFIG_H
|
|
+
|
|
+ac_libobjs=
|
|
+ac_ltlibobjs=
|
|
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
|
|
+ # 1. Remove the extension, and $U if already installed.
|
|
+ ac_i=`echo "$ac_i" |
|
|
+ sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
|
|
+ # 2. Add them.
|
|
+ ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
|
|
+ ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
|
|
+done
|
|
+LIBOBJS=$ac_libobjs
|
|
+
|
|
+LTLIBOBJS=$ac_ltlibobjs
|
|
+
|
|
+
|
|
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
|
|
+ { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
|
|
+Usually this means the macro was only invoked conditionally." >&5
|
|
+echo "$as_me: error: conditional \"AMDEP\" was never defined.
|
|
+Usually this means the macro was only invoked conditionally." >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+fi
|
|
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
|
|
+ { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
|
|
+Usually this means the macro was only invoked conditionally." >&5
|
|
+echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
|
|
+Usually this means the macro was only invoked conditionally." >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+fi
|
|
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
|
|
+ { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
|
|
+Usually this means the macro was only invoked conditionally." >&5
|
|
+echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
|
|
+Usually this means the macro was only invoked conditionally." >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+fi
|
|
+if test -z "${DEBUG_TRUE}" && test -z "${DEBUG_FALSE}"; then
|
|
+ { { echo "$as_me:$LINENO: error: conditional \"DEBUG\" was never defined.
|
|
+Usually this means the macro was only invoked conditionally." >&5
|
|
+echo "$as_me: error: conditional \"DEBUG\" was never defined.
|
|
+Usually this means the macro was only invoked conditionally." >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+fi
|
|
+
|
|
+: ${CONFIG_STATUS=./config.status}
|
|
+ac_clean_files_save=$ac_clean_files
|
|
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
|
|
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
|
|
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
|
|
+cat >$CONFIG_STATUS <<_ACEOF
|
|
+#! $SHELL
|
|
+# Generated by $as_me.
|
|
+# Run this file to recreate the current configuration.
|
|
+# Compiler output produced by configure, useful for debugging
|
|
+# configure, is in config.log if it exists.
|
|
+
|
|
+debug=false
|
|
+ac_cs_recheck=false
|
|
+ac_cs_silent=false
|
|
+SHELL=\${CONFIG_SHELL-$SHELL}
|
|
+_ACEOF
|
|
+
|
|
+cat >>$CONFIG_STATUS <<\_ACEOF
|
|
+## --------------------- ##
|
|
+## M4sh Initialization. ##
|
|
+## --------------------- ##
|
|
+
|
|
+# 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+"$@"}'='"$@"'
|
|
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
|
|
+ set -o posix
|
|
+fi
|
|
+DUALCASE=1; export DUALCASE # for MKS sh
|
|
+
|
|
+# Support unset when possible.
|
|
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
|
|
+ as_unset=unset
|
|
+else
|
|
+ as_unset=false
|
|
+fi
|
|
+
|
|
+
|
|
+# Work around bugs in pre-3.0 UWIN ksh.
|
|
+$as_unset ENV MAIL MAILPATH
|
|
+PS1='$ '
|
|
+PS2='> '
|
|
+PS4='+ '
|
|
+
|
|
+# NLS nuisances.
|
|
+for as_var in \
|
|
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
|
|
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
|
|
+ LC_TELEPHONE LC_TIME
|
|
+do
|
|
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
|
|
+ eval $as_var=C; export $as_var
|
|
+ else
|
|
+ $as_unset $as_var
|
|
+ fi
|
|
+done
|
|
+
|
|
+# Required to use basename.
|
|
+if expr a : '\(a\)' >/dev/null 2>&1; then
|
|
+ as_expr=expr
|
|
+else
|
|
+ as_expr=false
|
|
+fi
|
|
+
|
|
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
|
|
+ as_basename=basename
|
|
+else
|
|
+ as_basename=false
|
|
+fi
|
|
+
|
|
+
|
|
+# Name of the executable.
|
|
+as_me=`$as_basename "$0" ||
|
|
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
|
|
+ X"$0" : 'X\(//\)$' \| \
|
|
+ X"$0" : 'X\(/\)$' \| \
|
|
+ . : '\(.\)' 2>/dev/null ||
|
|
+echo X/"$0" |
|
|
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
|
|
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
|
|
+ /^X\/\(\/\).*/{ s//\1/; q; }
|
|
+ s/.*/./; q'`
|
|
+
|
|
+
|
|
+# PATH needs CR, and LINENO needs CR and PATH.
|
|
+# Avoid depending upon Character Ranges.
|
|
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
|
|
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
|
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
|
|
+as_cr_digits='0123456789'
|
|
+as_cr_alnum=$as_cr_Letters$as_cr_digits
|
|
+
|
|
+# 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
|
|
+
|
|
+
|
|
+ as_lineno_1=$LINENO
|
|
+ as_lineno_2=$LINENO
|
|
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
|
|
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
|
|
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
|
|
+ # Find who we are. Look in the path if we contain no path at all
|
|
+ # relative or not.
|
|
+ case $0 in
|
|
+ *[\\/]* ) as_myself=$0 ;;
|
|
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
|
|
+done
|
|
+
|
|
+ ;;
|
|
+ esac
|
|
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
|
|
+ # in which case we are not to be found in the path.
|
|
+ if test "x$as_myself" = x; then
|
|
+ as_myself=$0
|
|
+ fi
|
|
+ if test ! -f "$as_myself"; then
|
|
+ { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
|
|
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+ fi
|
|
+ case $CONFIG_SHELL in
|
|
+ '')
|
|
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for as_base in sh bash ksh sh5; do
|
|
+ case $as_dir in
|
|
+ /*)
|
|
+ if ("$as_dir/$as_base" -c '
|
|
+ as_lineno_1=$LINENO
|
|
+ as_lineno_2=$LINENO
|
|
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
|
|
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
|
|
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
|
|
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
|
|
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
|
|
+ CONFIG_SHELL=$as_dir/$as_base
|
|
+ export CONFIG_SHELL
|
|
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
|
|
+ fi;;
|
|
+ esac
|
|
+ done
|
|
+done
|
|
+;;
|
|
+ esac
|
|
+
|
|
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
|
|
+ # uniformly replaced by the line number. The first 'sed' inserts a
|
|
+ # line-number line before each line; the second 'sed' does the real
|
|
+ # work. The second script uses 'N' to pair each line-number line
|
|
+ # with the numbered line, and appends trailing '-' during
|
|
+ # substitution so that $LINENO is not a special case at line end.
|
|
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
|
|
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
|
|
+ sed '=' <$as_myself |
|
|
+ sed '
|
|
+ N
|
|
+ s,$,-,
|
|
+ : loop
|
|
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
|
|
+ t loop
|
|
+ s,-$,,
|
|
+ s,^['$as_cr_digits']*\n,,
|
|
+ ' >$as_me.lineno &&
|
|
+ chmod +x $as_me.lineno ||
|
|
+ { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
|
|
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+
|
|
+ # Don't try to exec as it changes $[0], causing all sort of problems
|
|
+ # (the dirname of $[0] is not the place where we might find the
|
|
+ # original and so on. Autoconf is especially sensible to this).
|
|
+ . ./$as_me.lineno
|
|
+ # Exit status is that of the last command.
|
|
+ exit
|
|
+}
|
|
+
|
|
+
|
|
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
|
|
+ *c*,-n*) ECHO_N= ECHO_C='
|
|
+' ECHO_T=' ' ;;
|
|
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
|
|
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
|
|
+esac
|
|
+
|
|
+if expr a : '\(a\)' >/dev/null 2>&1; then
|
|
+ as_expr=expr
|
|
+else
|
|
+ as_expr=false
|
|
+fi
|
|
+
|
|
+rm -f conf$$ conf$$.exe conf$$.file
|
|
+echo >conf$$.file
|
|
+if ln -s conf$$.file conf$$ 2>/dev/null; then
|
|
+ # We could just check for DJGPP; but this test a) works b) is more generic
|
|
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
|
|
+ if test -f conf$$.exe; then
|
|
+ # Don't use ln at all; we don't have any links
|
|
+ as_ln_s='cp -p'
|
|
+ else
|
|
+ as_ln_s='ln -s'
|
|
+ fi
|
|
+elif ln conf$$.file conf$$ 2>/dev/null; then
|
|
+ as_ln_s=ln
|
|
+else
|
|
+ as_ln_s='cp -p'
|
|
+fi
|
|
+rm -f conf$$ conf$$.exe conf$$.file
|
|
+
|
|
+if mkdir -p . 2>/dev/null; then
|
|
+ as_mkdir_p=:
|
|
+else
|
|
+ test -d ./-p && rmdir ./-p
|
|
+ as_mkdir_p=false
|
|
+fi
|
|
+
|
|
+as_executable_p="test -f"
|
|
+
|
|
+# Sed expression to map a string onto a valid CPP name.
|
|
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
|
|
+
|
|
+# Sed expression to map a string onto a valid variable name.
|
|
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
|
|
+
|
|
+
|
|
+# IFS
|
|
+# We need space, tab and new line, in precisely that order.
|
|
+as_nl='
|
|
+'
|
|
+IFS=" $as_nl"
|
|
+
|
|
+# CDPATH.
|
|
+$as_unset CDPATH
|
|
+
|
|
+exec 6>&1
|
|
+
|
|
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
|
|
+# report actual input values of CONFIG_FILES etc. instead of their
|
|
+# values after options handling. Logging --version etc. is OK.
|
|
+exec 5>>config.log
|
|
+{
|
|
+ echo
|
|
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
|
|
+## Running $as_me. ##
|
|
+_ASBOX
|
|
+} >&5
|
|
+cat >&5 <<_CSEOF
|
|
+
|
|
+This file was extended by iscsiuio $as_me 0.7.2.1, which was
|
|
+generated by GNU Autoconf 2.59. Invocation command line was
|
|
+
|
|
+ CONFIG_FILES = $CONFIG_FILES
|
|
+ CONFIG_HEADERS = $CONFIG_HEADERS
|
|
+ CONFIG_LINKS = $CONFIG_LINKS
|
|
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
|
|
+ $ $0 $@
|
|
+
|
|
+_CSEOF
|
|
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
|
|
+echo >&5
|
|
+_ACEOF
|
|
+
|
|
+# Files that config.status was made for.
|
|
+if test -n "$ac_config_files"; then
|
|
+ echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
|
|
+fi
|
|
+
|
|
+if test -n "$ac_config_headers"; then
|
|
+ echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
|
|
+fi
|
|
+
|
|
+if test -n "$ac_config_links"; then
|
|
+ echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
|
|
+fi
|
|
+
|
|
+if test -n "$ac_config_commands"; then
|
|
+ echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
|
|
+fi
|
|
+
|
|
+cat >>$CONFIG_STATUS <<\_ACEOF
|
|
+
|
|
+ac_cs_usage="\
|
|
+\`$as_me' instantiates files from templates according to the
|
|
+current configuration.
|
|
+
|
|
+Usage: $0 [OPTIONS] [FILE]...
|
|
+
|
|
+ -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
|
|
+ --recheck update $as_me by reconfiguring in the same conditions
|
|
+ --file=FILE[:TEMPLATE]
|
|
+ instantiate the configuration file FILE
|
|
+ --header=FILE[:TEMPLATE]
|
|
+ instantiate the configuration header FILE
|
|
+
|
|
+Configuration files:
|
|
+$config_files
|
|
+
|
|
+Configuration headers:
|
|
+$config_headers
|
|
+
|
|
+Configuration commands:
|
|
+$config_commands
|
|
+
|
|
+Report bugs to <bug-autoconf@gnu.org>."
|
|
+_ACEOF
|
|
+
|
|
+cat >>$CONFIG_STATUS <<_ACEOF
|
|
+ac_cs_version="\\
|
|
+iscsiuio config.status 0.7.2.1
|
|
+configured by $0, generated by GNU Autoconf 2.59,
|
|
+ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
|
|
+
|
|
+Copyright (C) 2003 Free Software Foundation, Inc.
|
|
+This config.status script is free software; the Free Software Foundation
|
|
+gives unlimited permission to copy, distribute and modify it."
|
|
+srcdir=$srcdir
|
|
+INSTALL="$INSTALL"
|
|
+_ACEOF
|
|
+
|
|
+cat >>$CONFIG_STATUS <<\_ACEOF
|
|
+# If no file are specified by the user, then we need to provide default
|
|
+# value. By we need to know if files were specified by the user.
|
|
+ac_need_defaults=:
|
|
+while test $# != 0
|
|
+do
|
|
+ case $1 in
|
|
+ --*=*)
|
|
+ ac_option=`expr "x$1" : 'x\([^=]*\)='`
|
|
+ ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
|
|
+ ac_shift=:
|
|
+ ;;
|
|
+ -*)
|
|
+ ac_option=$1
|
|
+ ac_optarg=$2
|
|
+ ac_shift=shift
|
|
+ ;;
|
|
+ *) # This is not an option, so the user has probably given explicit
|
|
+ # arguments.
|
|
+ ac_option=$1
|
|
+ ac_need_defaults=false;;
|
|
+ esac
|
|
+
|
|
+ case $ac_option in
|
|
+ # Handling of the options.
|
|
+_ACEOF
|
|
+cat >>$CONFIG_STATUS <<\_ACEOF
|
|
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
|
|
+ ac_cs_recheck=: ;;
|
|
+ --version | --vers* | -V )
|
|
+ echo "$ac_cs_version"; exit 0 ;;
|
|
+ --he | --h)
|
|
+ # Conflict between --help and --header
|
|
+ { { echo "$as_me:$LINENO: error: ambiguous option: $1
|
|
+Try \`$0 --help' for more information." >&5
|
|
+echo "$as_me: error: ambiguous option: $1
|
|
+Try \`$0 --help' for more information." >&2;}
|
|
+ { (exit 1); exit 1; }; };;
|
|
+ --help | --hel | -h )
|
|
+ echo "$ac_cs_usage"; exit 0 ;;
|
|
+ --debug | --d* | -d )
|
|
+ debug=: ;;
|
|
+ --file | --fil | --fi | --f )
|
|
+ $ac_shift
|
|
+ CONFIG_FILES="$CONFIG_FILES $ac_optarg"
|
|
+ ac_need_defaults=false;;
|
|
+ --header | --heade | --head | --hea )
|
|
+ $ac_shift
|
|
+ CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
|
|
+ ac_need_defaults=false;;
|
|
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
|
|
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
|
|
+ ac_cs_silent=: ;;
|
|
+
|
|
+ # This is an error.
|
|
+ -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
|
|
+Try \`$0 --help' for more information." >&5
|
|
+echo "$as_me: error: unrecognized option: $1
|
|
+Try \`$0 --help' for more information." >&2;}
|
|
+ { (exit 1); exit 1; }; } ;;
|
|
+
|
|
+ *) ac_config_targets="$ac_config_targets $1" ;;
|
|
+
|
|
+ esac
|
|
+ shift
|
|
+done
|
|
+
|
|
+ac_configure_extra_args=
|
|
+
|
|
+if $ac_cs_silent; then
|
|
+ exec 6>/dev/null
|
|
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
|
|
+fi
|
|
+
|
|
+_ACEOF
|
|
+cat >>$CONFIG_STATUS <<_ACEOF
|
|
+if \$ac_cs_recheck; then
|
|
+ echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
|
|
+ exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
|
|
+fi
|
|
+
|
|
+_ACEOF
|
|
+
|
|
+cat >>$CONFIG_STATUS <<_ACEOF
|
|
+#
|
|
+# INIT-COMMANDS section.
|
|
+#
|
|
+
|
|
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
|
|
+
|
|
+
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+
|
|
+cat >>$CONFIG_STATUS <<\_ACEOF
|
|
+for ac_config_target in $ac_config_targets
|
|
+do
|
|
+ case "$ac_config_target" in
|
|
+ # Handling of arguments.
|
|
+ "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
|
|
+ "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
|
|
+ "src/apps/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/apps/Makefile" ;;
|
|
+ "src/apps/dhcpc/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/apps/dhcpc/Makefile" ;;
|
|
+ "src/apps/brcm-iscsi/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/apps/brcm-iscsi/Makefile" ;;
|
|
+ "src/uip/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/uip/Makefile" ;;
|
|
+ "src/unix/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/unix/Makefile" ;;
|
|
+ "src/unix/libs/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/unix/libs/Makefile" ;;
|
|
+ "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
|
|
+ "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
|
|
+ "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
|
|
+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
|
|
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
|
|
+ { (exit 1); exit 1; }; };;
|
|
+ esac
|
|
+done
|
|
+
|
|
+# If the user did not use the arguments to specify the items to instantiate,
|
|
+# then the envvar interface is used. Set only those that are not.
|
|
+# We use the long form for the default assignment because of an extremely
|
|
+# bizarre bug on SunOS 4.1.3.
|
|
+if $ac_need_defaults; then
|
|
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
|
|
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
|
|
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
|
|
+fi
|
|
+
|
|
+# Have a temporary directory for convenience. Make it in the build tree
|
|
+# simply because there is no reason to put it here, and in addition,
|
|
+# creating and moving files from /tmp can sometimes cause problems.
|
|
+# Create a temporary directory, and hook for its removal unless debugging.
|
|
+$debug ||
|
|
+{
|
|
+ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
|
|
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
|
|
+}
|
|
+
|
|
+# Create a (secure) tmp directory for tmp files.
|
|
+
|
|
+{
|
|
+ tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
|
|
+ test -n "$tmp" && test -d "$tmp"
|
|
+} ||
|
|
+{
|
|
+ tmp=./confstat$$-$RANDOM
|
|
+ (umask 077 && mkdir $tmp)
|
|
+} ||
|
|
+{
|
|
+ echo "$me: cannot create a temporary directory in ." >&2
|
|
+ { (exit 1); exit 1; }
|
|
+}
|
|
+
|
|
+_ACEOF
|
|
+
|
|
+cat >>$CONFIG_STATUS <<_ACEOF
|
|
+
|
|
+#
|
|
+# CONFIG_FILES section.
|
|
+#
|
|
+
|
|
+# No need to generate the scripts if there are no CONFIG_FILES.
|
|
+# This happens for instance when ./config.status config.h
|
|
+if test -n "\$CONFIG_FILES"; then
|
|
+ # Protect against being on the right side of a sed subst in config.status.
|
|
+ sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
|
|
+ s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
|
|
+s,@SHELL@,$SHELL,;t t
|
|
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
|
|
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
|
|
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
|
|
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
|
|
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
|
|
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
|
|
+s,@exec_prefix@,$exec_prefix,;t t
|
|
+s,@prefix@,$prefix,;t t
|
|
+s,@program_transform_name@,$program_transform_name,;t t
|
|
+s,@bindir@,$bindir,;t t
|
|
+s,@sbindir@,$sbindir,;t t
|
|
+s,@libexecdir@,$libexecdir,;t t
|
|
+s,@datadir@,$datadir,;t t
|
|
+s,@sysconfdir@,$sysconfdir,;t t
|
|
+s,@sharedstatedir@,$sharedstatedir,;t t
|
|
+s,@localstatedir@,$localstatedir,;t t
|
|
+s,@libdir@,$libdir,;t t
|
|
+s,@includedir@,$includedir,;t t
|
|
+s,@oldincludedir@,$oldincludedir,;t t
|
|
+s,@infodir@,$infodir,;t t
|
|
+s,@mandir@,$mandir,;t t
|
|
+s,@build_alias@,$build_alias,;t t
|
|
+s,@host_alias@,$host_alias,;t t
|
|
+s,@target_alias@,$target_alias,;t t
|
|
+s,@DEFS@,$DEFS,;t t
|
|
+s,@ECHO_C@,$ECHO_C,;t t
|
|
+s,@ECHO_N@,$ECHO_N,;t t
|
|
+s,@ECHO_T@,$ECHO_T,;t t
|
|
+s,@LIBS@,$LIBS,;t t
|
|
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
|
|
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
|
|
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
|
|
+s,@CYGPATH_W@,$CYGPATH_W,;t t
|
|
+s,@PACKAGE@,$PACKAGE,;t t
|
|
+s,@VERSION@,$VERSION,;t t
|
|
+s,@ACLOCAL@,$ACLOCAL,;t t
|
|
+s,@AUTOCONF@,$AUTOCONF,;t t
|
|
+s,@AUTOMAKE@,$AUTOMAKE,;t t
|
|
+s,@AUTOHEADER@,$AUTOHEADER,;t t
|
|
+s,@MAKEINFO@,$MAKEINFO,;t t
|
|
+s,@install_sh@,$install_sh,;t t
|
|
+s,@STRIP@,$STRIP,;t t
|
|
+s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
|
|
+s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
|
|
+s,@mkdir_p@,$mkdir_p,;t t
|
|
+s,@AWK@,$AWK,;t t
|
|
+s,@SET_MAKE@,$SET_MAKE,;t t
|
|
+s,@am__leading_dot@,$am__leading_dot,;t t
|
|
+s,@AMTAR@,$AMTAR,;t t
|
|
+s,@am__tar@,$am__tar,;t t
|
|
+s,@am__untar@,$am__untar,;t t
|
|
+s,@BASH@,$BASH,;t t
|
|
+s,@CC@,$CC,;t t
|
|
+s,@CFLAGS@,$CFLAGS,;t t
|
|
+s,@LDFLAGS@,$LDFLAGS,;t t
|
|
+s,@CPPFLAGS@,$CPPFLAGS,;t t
|
|
+s,@ac_ct_CC@,$ac_ct_CC,;t t
|
|
+s,@EXEEXT@,$EXEEXT,;t t
|
|
+s,@OBJEXT@,$OBJEXT,;t t
|
|
+s,@DEPDIR@,$DEPDIR,;t t
|
|
+s,@am__include@,$am__include,;t t
|
|
+s,@am__quote@,$am__quote,;t t
|
|
+s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t
|
|
+s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t
|
|
+s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
|
|
+s,@CCDEPMODE@,$CCDEPMODE,;t t
|
|
+s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
|
|
+s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
|
|
+s,@RANLIB@,$RANLIB,;t t
|
|
+s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
|
|
+s,@CPP@,$CPP,;t t
|
|
+s,@EGREP@,$EGREP,;t t
|
|
+s,@ENDIAN@,$ENDIAN,;t t
|
|
+s,@build@,$build,;t t
|
|
+s,@build_cpu@,$build_cpu,;t t
|
|
+s,@build_vendor@,$build_vendor,;t t
|
|
+s,@build_os@,$build_os,;t t
|
|
+s,@host@,$host,;t t
|
|
+s,@host_cpu@,$host_cpu,;t t
|
|
+s,@host_vendor@,$host_vendor,;t t
|
|
+s,@host_os@,$host_os,;t t
|
|
+s,@SED@,$SED,;t t
|
|
+s,@LN_S@,$LN_S,;t t
|
|
+s,@ECHO@,$ECHO,;t t
|
|
+s,@AR@,$AR,;t t
|
|
+s,@ac_ct_AR@,$ac_ct_AR,;t t
|
|
+s,@CXX@,$CXX,;t t
|
|
+s,@CXXFLAGS@,$CXXFLAGS,;t t
|
|
+s,@ac_ct_CXX@,$ac_ct_CXX,;t t
|
|
+s,@CXXDEPMODE@,$CXXDEPMODE,;t t
|
|
+s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t
|
|
+s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t
|
|
+s,@CXXCPP@,$CXXCPP,;t t
|
|
+s,@F77@,$F77,;t t
|
|
+s,@FFLAGS@,$FFLAGS,;t t
|
|
+s,@ac_ct_F77@,$ac_ct_F77,;t t
|
|
+s,@LIBTOOL@,$LIBTOOL,;t t
|
|
+s,@DEBUG_TRUE@,$DEBUG_TRUE,;t t
|
|
+s,@DEBUG_FALSE@,$DEBUG_FALSE,;t t
|
|
+s,@LIBOBJS@,$LIBOBJS,;t t
|
|
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
|
|
+CEOF
|
|
+
|
|
+_ACEOF
|
|
+
|
|
+ cat >>$CONFIG_STATUS <<\_ACEOF
|
|
+ # Split the substitutions into bite-sized pieces for seds with
|
|
+ # small command number limits, like on Digital OSF/1 and HP-UX.
|
|
+ ac_max_sed_lines=48
|
|
+ ac_sed_frag=1 # Number of current file.
|
|
+ ac_beg=1 # First line for current file.
|
|
+ ac_end=$ac_max_sed_lines # Line after last line for current file.
|
|
+ ac_more_lines=:
|
|
+ ac_sed_cmds=
|
|
+ while $ac_more_lines; do
|
|
+ if test $ac_beg -gt 1; then
|
|
+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
|
|
+ else
|
|
+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
|
|
+ fi
|
|
+ if test ! -s $tmp/subs.frag; then
|
|
+ ac_more_lines=false
|
|
+ else
|
|
+ # The purpose of the label and of the branching condition is to
|
|
+ # speed up the sed processing (if there are no `@' at all, there
|
|
+ # is no need to browse any of the substitutions).
|
|
+ # These are the two extra sed commands mentioned above.
|
|
+ (echo ':t
|
|
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
|
|
+ if test -z "$ac_sed_cmds"; then
|
|
+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
|
|
+ else
|
|
+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
|
|
+ fi
|
|
+ ac_sed_frag=`expr $ac_sed_frag + 1`
|
|
+ ac_beg=$ac_end
|
|
+ ac_end=`expr $ac_end + $ac_max_sed_lines`
|
|
+ fi
|
|
+ done
|
|
+ if test -z "$ac_sed_cmds"; then
|
|
+ ac_sed_cmds=cat
|
|
+ fi
|
|
+fi # test -n "$CONFIG_FILES"
|
|
+
|
|
+_ACEOF
|
|
+cat >>$CONFIG_STATUS <<\_ACEOF
|
|
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
|
|
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
|
|
+ case $ac_file in
|
|
+ - | *:- | *:-:* ) # input from stdin
|
|
+ cat >$tmp/stdin
|
|
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
|
|
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
|
|
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
|
|
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
|
|
+ * ) ac_file_in=$ac_file.in ;;
|
|
+ esac
|
|
+
|
|
+ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
|
|
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
|
|
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
|
+ X"$ac_file" : 'X\(//\)[^/]' \| \
|
|
+ X"$ac_file" : 'X\(//\)$' \| \
|
|
+ X"$ac_file" : 'X\(/\)' \| \
|
|
+ . : '\(.\)' 2>/dev/null ||
|
|
+echo X"$ac_file" |
|
|
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)$/{ s//\1/; q; }
|
|
+ /^X\(\/\).*/{ s//\1/; q; }
|
|
+ s/.*/./; q'`
|
|
+ { if $as_mkdir_p; then
|
|
+ mkdir -p "$ac_dir"
|
|
+ else
|
|
+ as_dir="$ac_dir"
|
|
+ as_dirs=
|
|
+ while test ! -d "$as_dir"; do
|
|
+ as_dirs="$as_dir $as_dirs"
|
|
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
|
|
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
|
+ X"$as_dir" : 'X\(//\)[^/]' \| \
|
|
+ X"$as_dir" : 'X\(//\)$' \| \
|
|
+ X"$as_dir" : 'X\(/\)' \| \
|
|
+ . : '\(.\)' 2>/dev/null ||
|
|
+echo X"$as_dir" |
|
|
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)$/{ s//\1/; q; }
|
|
+ /^X\(\/\).*/{ s//\1/; q; }
|
|
+ s/.*/./; q'`
|
|
+ done
|
|
+ test ! -n "$as_dirs" || mkdir $as_dirs
|
|
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
|
|
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
|
|
+ { (exit 1); exit 1; }; }; }
|
|
+
|
|
+ ac_builddir=.
|
|
+
|
|
+if test "$ac_dir" != .; then
|
|
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
|
|
+ # A "../" for each directory in $ac_dir_suffix.
|
|
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
|
|
+else
|
|
+ ac_dir_suffix= ac_top_builddir=
|
|
+fi
|
|
+
|
|
+case $srcdir in
|
|
+ .) # No --srcdir option. We are building in place.
|
|
+ ac_srcdir=.
|
|
+ if test -z "$ac_top_builddir"; then
|
|
+ ac_top_srcdir=.
|
|
+ else
|
|
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
|
|
+ fi ;;
|
|
+ [\\/]* | ?:[\\/]* ) # Absolute path.
|
|
+ ac_srcdir=$srcdir$ac_dir_suffix;
|
|
+ ac_top_srcdir=$srcdir ;;
|
|
+ *) # Relative path.
|
|
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
|
|
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
|
|
+esac
|
|
+
|
|
+# Do not use `cd foo && pwd` to compute absolute paths, because
|
|
+# the directories may not exist.
|
|
+case `pwd` in
|
|
+.) ac_abs_builddir="$ac_dir";;
|
|
+*)
|
|
+ case "$ac_dir" in
|
|
+ .) ac_abs_builddir=`pwd`;;
|
|
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
|
|
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
|
|
+ esac;;
|
|
+esac
|
|
+case $ac_abs_builddir in
|
|
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
|
|
+*)
|
|
+ case ${ac_top_builddir}. in
|
|
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
|
|
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
|
|
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
|
|
+ esac;;
|
|
+esac
|
|
+case $ac_abs_builddir in
|
|
+.) ac_abs_srcdir=$ac_srcdir;;
|
|
+*)
|
|
+ case $ac_srcdir in
|
|
+ .) ac_abs_srcdir=$ac_abs_builddir;;
|
|
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
|
|
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
|
|
+ esac;;
|
|
+esac
|
|
+case $ac_abs_builddir in
|
|
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
|
|
+*)
|
|
+ case $ac_top_srcdir in
|
|
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
|
|
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
|
|
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
|
|
+ esac;;
|
|
+esac
|
|
+
|
|
+
|
|
+ case $INSTALL in
|
|
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
|
|
+ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
|
|
+ esac
|
|
+
|
|
+ if test x"$ac_file" != x-; then
|
|
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
|
|
+echo "$as_me: creating $ac_file" >&6;}
|
|
+ rm -f "$ac_file"
|
|
+ fi
|
|
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
|
|
+ # use $as_me), people would be surprised to read:
|
|
+ # /* config.h. Generated by config.status. */
|
|
+ if test x"$ac_file" = x-; then
|
|
+ configure_input=
|
|
+ else
|
|
+ configure_input="$ac_file. "
|
|
+ fi
|
|
+ configure_input=$configure_input"Generated from `echo $ac_file_in |
|
|
+ sed 's,.*/,,'` by configure."
|
|
+
|
|
+ # First look for the input files in the build tree, otherwise in the
|
|
+ # src tree.
|
|
+ ac_file_inputs=`IFS=:
|
|
+ for f in $ac_file_in; do
|
|
+ case $f in
|
|
+ -) echo $tmp/stdin ;;
|
|
+ [\\/$]*)
|
|
+ # Absolute (can't be DOS-style, as IFS=:)
|
|
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
|
|
+echo "$as_me: error: cannot find input file: $f" >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+ echo "$f";;
|
|
+ *) # Relative
|
|
+ if test -f "$f"; then
|
|
+ # Build tree
|
|
+ echo "$f"
|
|
+ elif test -f "$srcdir/$f"; then
|
|
+ # Source tree
|
|
+ echo "$srcdir/$f"
|
|
+ else
|
|
+ # /dev/null tree
|
|
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
|
|
+echo "$as_me: error: cannot find input file: $f" >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+ fi;;
|
|
+ esac
|
|
+ done` || { (exit 1); exit 1; }
|
|
+_ACEOF
|
|
+cat >>$CONFIG_STATUS <<_ACEOF
|
|
+ sed "$ac_vpsub
|
|
+$extrasub
|
|
+_ACEOF
|
|
+cat >>$CONFIG_STATUS <<\_ACEOF
|
|
+:t
|
|
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
|
|
+s,@configure_input@,$configure_input,;t t
|
|
+s,@srcdir@,$ac_srcdir,;t t
|
|
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
|
|
+s,@top_srcdir@,$ac_top_srcdir,;t t
|
|
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
|
|
+s,@builddir@,$ac_builddir,;t t
|
|
+s,@abs_builddir@,$ac_abs_builddir,;t t
|
|
+s,@top_builddir@,$ac_top_builddir,;t t
|
|
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
|
|
+s,@INSTALL@,$ac_INSTALL,;t t
|
|
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
|
|
+ rm -f $tmp/stdin
|
|
+ if test x"$ac_file" != x-; then
|
|
+ mv $tmp/out $ac_file
|
|
+ else
|
|
+ cat $tmp/out
|
|
+ rm -f $tmp/out
|
|
+ fi
|
|
+
|
|
+done
|
|
+_ACEOF
|
|
+cat >>$CONFIG_STATUS <<\_ACEOF
|
|
+
|
|
+#
|
|
+# CONFIG_HEADER section.
|
|
+#
|
|
+
|
|
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
|
|
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
|
|
+#
|
|
+# ac_d sets the value in "#define NAME VALUE" lines.
|
|
+ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
|
|
+ac_dB='[ ].*$,\1#\2'
|
|
+ac_dC=' '
|
|
+ac_dD=',;t'
|
|
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
|
|
+ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
|
|
+ac_uB='$,\1#\2define\3'
|
|
+ac_uC=' '
|
|
+ac_uD=',;t'
|
|
+
|
|
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
|
|
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
|
|
+ case $ac_file in
|
|
+ - | *:- | *:-:* ) # input from stdin
|
|
+ cat >$tmp/stdin
|
|
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
|
|
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
|
|
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
|
|
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
|
|
+ * ) ac_file_in=$ac_file.in ;;
|
|
+ esac
|
|
+
|
|
+ test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
|
|
+echo "$as_me: creating $ac_file" >&6;}
|
|
+
|
|
+ # First look for the input files in the build tree, otherwise in the
|
|
+ # src tree.
|
|
+ ac_file_inputs=`IFS=:
|
|
+ for f in $ac_file_in; do
|
|
+ case $f in
|
|
+ -) echo $tmp/stdin ;;
|
|
+ [\\/$]*)
|
|
+ # Absolute (can't be DOS-style, as IFS=:)
|
|
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
|
|
+echo "$as_me: error: cannot find input file: $f" >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+ # Do quote $f, to prevent DOS paths from being IFS'd.
|
|
+ echo "$f";;
|
|
+ *) # Relative
|
|
+ if test -f "$f"; then
|
|
+ # Build tree
|
|
+ echo "$f"
|
|
+ elif test -f "$srcdir/$f"; then
|
|
+ # Source tree
|
|
+ echo "$srcdir/$f"
|
|
+ else
|
|
+ # /dev/null tree
|
|
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
|
|
+echo "$as_me: error: cannot find input file: $f" >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+ fi;;
|
|
+ esac
|
|
+ done` || { (exit 1); exit 1; }
|
|
+ # Remove the trailing spaces.
|
|
+ sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
|
|
+
|
|
+_ACEOF
|
|
+
|
|
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
|
|
+# `conftest.undefs', that substitutes the proper values into
|
|
+# config.h.in to produce config.h. The first handles `#define'
|
|
+# templates, and the second `#undef' templates.
|
|
+# And first: Protect against being on the right side of a sed subst in
|
|
+# config.status. Protect against being in an unquoted here document
|
|
+# in config.status.
|
|
+rm -f conftest.defines conftest.undefs
|
|
+# Using a here document instead of a string reduces the quoting nightmare.
|
|
+# Putting comments in sed scripts is not portable.
|
|
+#
|
|
+# `end' is used to avoid that the second main sed command (meant for
|
|
+# 0-ary CPP macros) applies to n-ary macro definitions.
|
|
+# See the Autoconf documentation for `clear'.
|
|
+cat >confdef2sed.sed <<\_ACEOF
|
|
+s/[\\&,]/\\&/g
|
|
+s,[\\$`],\\&,g
|
|
+t clear
|
|
+: clear
|
|
+s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
|
|
+t end
|
|
+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
|
|
+: end
|
|
+_ACEOF
|
|
+# If some macros were called several times there might be several times
|
|
+# the same #defines, which is useless. Nevertheless, we may not want to
|
|
+# sort them, since we want the *last* AC-DEFINE to be honored.
|
|
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
|
|
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
|
|
+rm -f confdef2sed.sed
|
|
+
|
|
+# This sed command replaces #undef with comments. This is necessary, for
|
|
+# example, in the case of _POSIX_SOURCE, which is predefined and required
|
|
+# on some systems where configure will not decide to define it.
|
|
+cat >>conftest.undefs <<\_ACEOF
|
|
+s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
|
|
+_ACEOF
|
|
+
|
|
+# Break up conftest.defines because some shells have a limit on the size
|
|
+# of here documents, and old seds have small limits too (100 cmds).
|
|
+echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
|
|
+echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
|
|
+echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
|
|
+echo ' :' >>$CONFIG_STATUS
|
|
+rm -f conftest.tail
|
|
+while grep . conftest.defines >/dev/null
|
|
+do
|
|
+ # Write a limited-size here document to $tmp/defines.sed.
|
|
+ echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
|
|
+ # Speed up: don't consider the non `#define' lines.
|
|
+ echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
|
|
+ # Work around the forget-to-reset-the-flag bug.
|
|
+ echo 't clr' >>$CONFIG_STATUS
|
|
+ echo ': clr' >>$CONFIG_STATUS
|
|
+ sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
|
|
+ echo 'CEOF
|
|
+ sed -f $tmp/defines.sed $tmp/in >$tmp/out
|
|
+ rm -f $tmp/in
|
|
+ mv $tmp/out $tmp/in
|
|
+' >>$CONFIG_STATUS
|
|
+ sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
|
|
+ rm -f conftest.defines
|
|
+ mv conftest.tail conftest.defines
|
|
+done
|
|
+rm -f conftest.defines
|
|
+echo ' fi # grep' >>$CONFIG_STATUS
|
|
+echo >>$CONFIG_STATUS
|
|
+
|
|
+# Break up conftest.undefs because some shells have a limit on the size
|
|
+# of here documents, and old seds have small limits too (100 cmds).
|
|
+echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
|
|
+rm -f conftest.tail
|
|
+while grep . conftest.undefs >/dev/null
|
|
+do
|
|
+ # Write a limited-size here document to $tmp/undefs.sed.
|
|
+ echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
|
|
+ # Speed up: don't consider the non `#undef'
|
|
+ echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
|
|
+ # Work around the forget-to-reset-the-flag bug.
|
|
+ echo 't clr' >>$CONFIG_STATUS
|
|
+ echo ': clr' >>$CONFIG_STATUS
|
|
+ sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
|
|
+ echo 'CEOF
|
|
+ sed -f $tmp/undefs.sed $tmp/in >$tmp/out
|
|
+ rm -f $tmp/in
|
|
+ mv $tmp/out $tmp/in
|
|
+' >>$CONFIG_STATUS
|
|
+ sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
|
|
+ rm -f conftest.undefs
|
|
+ mv conftest.tail conftest.undefs
|
|
+done
|
|
+rm -f conftest.undefs
|
|
+
|
|
+cat >>$CONFIG_STATUS <<\_ACEOF
|
|
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
|
|
+ # use $as_me), people would be surprised to read:
|
|
+ # /* config.h. Generated by config.status. */
|
|
+ if test x"$ac_file" = x-; then
|
|
+ echo "/* Generated by configure. */" >$tmp/config.h
|
|
+ else
|
|
+ echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
|
|
+ fi
|
|
+ cat $tmp/in >>$tmp/config.h
|
|
+ rm -f $tmp/in
|
|
+ if test x"$ac_file" != x-; then
|
|
+ if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
|
|
+ { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
|
|
+echo "$as_me: $ac_file is unchanged" >&6;}
|
|
+ else
|
|
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
|
|
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
|
+ X"$ac_file" : 'X\(//\)[^/]' \| \
|
|
+ X"$ac_file" : 'X\(//\)$' \| \
|
|
+ X"$ac_file" : 'X\(/\)' \| \
|
|
+ . : '\(.\)' 2>/dev/null ||
|
|
+echo X"$ac_file" |
|
|
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)$/{ s//\1/; q; }
|
|
+ /^X\(\/\).*/{ s//\1/; q; }
|
|
+ s/.*/./; q'`
|
|
+ { if $as_mkdir_p; then
|
|
+ mkdir -p "$ac_dir"
|
|
+ else
|
|
+ as_dir="$ac_dir"
|
|
+ as_dirs=
|
|
+ while test ! -d "$as_dir"; do
|
|
+ as_dirs="$as_dir $as_dirs"
|
|
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
|
|
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
|
+ X"$as_dir" : 'X\(//\)[^/]' \| \
|
|
+ X"$as_dir" : 'X\(//\)$' \| \
|
|
+ X"$as_dir" : 'X\(/\)' \| \
|
|
+ . : '\(.\)' 2>/dev/null ||
|
|
+echo X"$as_dir" |
|
|
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)$/{ s//\1/; q; }
|
|
+ /^X\(\/\).*/{ s//\1/; q; }
|
|
+ s/.*/./; q'`
|
|
+ done
|
|
+ test ! -n "$as_dirs" || mkdir $as_dirs
|
|
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
|
|
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
|
|
+ { (exit 1); exit 1; }; }; }
|
|
+
|
|
+ rm -f $ac_file
|
|
+ mv $tmp/config.h $ac_file
|
|
+ fi
|
|
+ else
|
|
+ cat $tmp/config.h
|
|
+ rm -f $tmp/config.h
|
|
+ fi
|
|
+# Compute $ac_file's index in $config_headers.
|
|
+_am_stamp_count=1
|
|
+for _am_header in $config_headers :; do
|
|
+ case $_am_header in
|
|
+ $ac_file | $ac_file:* )
|
|
+ break ;;
|
|
+ * )
|
|
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
|
|
+ esac
|
|
+done
|
|
+echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
|
|
+$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
|
+ X$ac_file : 'X\(//\)[^/]' \| \
|
|
+ X$ac_file : 'X\(//\)$' \| \
|
|
+ X$ac_file : 'X\(/\)' \| \
|
|
+ . : '\(.\)' 2>/dev/null ||
|
|
+echo X$ac_file |
|
|
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)$/{ s//\1/; q; }
|
|
+ /^X\(\/\).*/{ s//\1/; q; }
|
|
+ s/.*/./; q'`/stamp-h$_am_stamp_count
|
|
+done
|
|
+_ACEOF
|
|
+cat >>$CONFIG_STATUS <<\_ACEOF
|
|
+
|
|
+#
|
|
+# CONFIG_COMMANDS section.
|
|
+#
|
|
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
|
|
+ ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
|
|
+ ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
|
|
+ ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
|
|
+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
|
+ X"$ac_dest" : 'X\(//\)[^/]' \| \
|
|
+ X"$ac_dest" : 'X\(//\)$' \| \
|
|
+ X"$ac_dest" : 'X\(/\)' \| \
|
|
+ . : '\(.\)' 2>/dev/null ||
|
|
+echo X"$ac_dest" |
|
|
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)$/{ s//\1/; q; }
|
|
+ /^X\(\/\).*/{ s//\1/; q; }
|
|
+ s/.*/./; q'`
|
|
+ { if $as_mkdir_p; then
|
|
+ mkdir -p "$ac_dir"
|
|
+ else
|
|
+ as_dir="$ac_dir"
|
|
+ as_dirs=
|
|
+ while test ! -d "$as_dir"; do
|
|
+ as_dirs="$as_dir $as_dirs"
|
|
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
|
|
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
|
+ X"$as_dir" : 'X\(//\)[^/]' \| \
|
|
+ X"$as_dir" : 'X\(//\)$' \| \
|
|
+ X"$as_dir" : 'X\(/\)' \| \
|
|
+ . : '\(.\)' 2>/dev/null ||
|
|
+echo X"$as_dir" |
|
|
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)$/{ s//\1/; q; }
|
|
+ /^X\(\/\).*/{ s//\1/; q; }
|
|
+ s/.*/./; q'`
|
|
+ done
|
|
+ test ! -n "$as_dirs" || mkdir $as_dirs
|
|
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
|
|
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
|
|
+ { (exit 1); exit 1; }; }; }
|
|
+
|
|
+ ac_builddir=.
|
|
+
|
|
+if test "$ac_dir" != .; then
|
|
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
|
|
+ # A "../" for each directory in $ac_dir_suffix.
|
|
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
|
|
+else
|
|
+ ac_dir_suffix= ac_top_builddir=
|
|
+fi
|
|
+
|
|
+case $srcdir in
|
|
+ .) # No --srcdir option. We are building in place.
|
|
+ ac_srcdir=.
|
|
+ if test -z "$ac_top_builddir"; then
|
|
+ ac_top_srcdir=.
|
|
+ else
|
|
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
|
|
+ fi ;;
|
|
+ [\\/]* | ?:[\\/]* ) # Absolute path.
|
|
+ ac_srcdir=$srcdir$ac_dir_suffix;
|
|
+ ac_top_srcdir=$srcdir ;;
|
|
+ *) # Relative path.
|
|
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
|
|
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
|
|
+esac
|
|
+
|
|
+# Do not use `cd foo && pwd` to compute absolute paths, because
|
|
+# the directories may not exist.
|
|
+case `pwd` in
|
|
+.) ac_abs_builddir="$ac_dir";;
|
|
+*)
|
|
+ case "$ac_dir" in
|
|
+ .) ac_abs_builddir=`pwd`;;
|
|
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
|
|
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
|
|
+ esac;;
|
|
+esac
|
|
+case $ac_abs_builddir in
|
|
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
|
|
+*)
|
|
+ case ${ac_top_builddir}. in
|
|
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
|
|
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
|
|
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
|
|
+ esac;;
|
|
+esac
|
|
+case $ac_abs_builddir in
|
|
+.) ac_abs_srcdir=$ac_srcdir;;
|
|
+*)
|
|
+ case $ac_srcdir in
|
|
+ .) ac_abs_srcdir=$ac_abs_builddir;;
|
|
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
|
|
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
|
|
+ esac;;
|
|
+esac
|
|
+case $ac_abs_builddir in
|
|
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
|
|
+*)
|
|
+ case $ac_top_srcdir in
|
|
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
|
|
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
|
|
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
|
|
+ esac;;
|
|
+esac
|
|
+
|
|
+
|
|
+ { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
|
|
+echo "$as_me: executing $ac_dest commands" >&6;}
|
|
+ case $ac_dest in
|
|
+ depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
|
|
+ # Strip MF so we end up with the name of the file.
|
|
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
|
|
+ # Check whether this is an Automake generated Makefile or not.
|
|
+ # We used to match only the files named `Makefile.in', but
|
|
+ # some people rename them; so instead we look at the file content.
|
|
+ # Grep'ing the first line is not enough: some people post-process
|
|
+ # each Makefile.in and add a new line on top of each file to say so.
|
|
+ # So let's grep whole file.
|
|
+ if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
|
|
+ dirpart=`(dirname "$mf") 2>/dev/null ||
|
|
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
|
+ X"$mf" : 'X\(//\)[^/]' \| \
|
|
+ X"$mf" : 'X\(//\)$' \| \
|
|
+ X"$mf" : 'X\(/\)' \| \
|
|
+ . : '\(.\)' 2>/dev/null ||
|
|
+echo X"$mf" |
|
|
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)$/{ s//\1/; q; }
|
|
+ /^X\(\/\).*/{ s//\1/; q; }
|
|
+ s/.*/./; q'`
|
|
+ else
|
|
+ continue
|
|
+ fi
|
|
+ # Extract the definition of DEPDIR, am__include, and am__quote
|
|
+ # from the Makefile without running `make'.
|
|
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
|
|
+ test -z "$DEPDIR" && continue
|
|
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
|
|
+ test -z "am__include" && continue
|
|
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
|
|
+ # When using ansi2knr, U may be empty or an underscore; expand it
|
|
+ U=`sed -n 's/^U = //p' < "$mf"`
|
|
+ # Find all dependency output files, they are included files with
|
|
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
|
|
+ # simplest approach to changing $(DEPDIR) to its actual value in the
|
|
+ # expansion.
|
|
+ for file in `sed -n "
|
|
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
|
|
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
|
|
+ # Make sure the directory exists.
|
|
+ test -f "$dirpart/$file" && continue
|
|
+ fdir=`(dirname "$file") 2>/dev/null ||
|
|
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
|
+ X"$file" : 'X\(//\)[^/]' \| \
|
|
+ X"$file" : 'X\(//\)$' \| \
|
|
+ X"$file" : 'X\(/\)' \| \
|
|
+ . : '\(.\)' 2>/dev/null ||
|
|
+echo X"$file" |
|
|
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)$/{ s//\1/; q; }
|
|
+ /^X\(\/\).*/{ s//\1/; q; }
|
|
+ s/.*/./; q'`
|
|
+ { if $as_mkdir_p; then
|
|
+ mkdir -p $dirpart/$fdir
|
|
+ else
|
|
+ as_dir=$dirpart/$fdir
|
|
+ as_dirs=
|
|
+ while test ! -d "$as_dir"; do
|
|
+ as_dirs="$as_dir $as_dirs"
|
|
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
|
|
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
|
+ X"$as_dir" : 'X\(//\)[^/]' \| \
|
|
+ X"$as_dir" : 'X\(//\)$' \| \
|
|
+ X"$as_dir" : 'X\(/\)' \| \
|
|
+ . : '\(.\)' 2>/dev/null ||
|
|
+echo X"$as_dir" |
|
|
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
|
|
+ /^X\(\/\/\)$/{ s//\1/; q; }
|
|
+ /^X\(\/\).*/{ s//\1/; q; }
|
|
+ s/.*/./; q'`
|
|
+ done
|
|
+ test ! -n "$as_dirs" || mkdir $as_dirs
|
|
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
|
|
+echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
|
|
+ { (exit 1); exit 1; }; }; }
|
|
+
|
|
+ # echo "creating $dirpart/$file"
|
|
+ echo '# dummy' > "$dirpart/$file"
|
|
+ done
|
|
+done
|
|
+ ;;
|
|
+ default ) echo 'char *build_date ="'`date`'";' > src/unix/build_date.c && echo 'char *build_date; '> src/unix/build_date.h ;;
|
|
+ esac
|
|
+done
|
|
+_ACEOF
|
|
+
|
|
+cat >>$CONFIG_STATUS <<\_ACEOF
|
|
+
|
|
+{ (exit 0); exit 0; }
|
|
+_ACEOF
|
|
+chmod +x $CONFIG_STATUS
|
|
+ac_clean_files=$ac_clean_files_save
|
|
+
|
|
+
|
|
+# configure is writing to config.log, and then calls config.status.
|
|
+# config.status does its own redirection, appending to config.log.
|
|
+# Unfortunately, on DOS this fails, as config.log is still kept open
|
|
+# by configure, so config.status won't be able to write to it; its
|
|
+# output is simply discarded. So we exec the FD to /dev/null,
|
|
+# effectively closing config.log, so it can be properly (re)opened and
|
|
+# appended to by config.status. When coming back to configure, we
|
|
+# need to make the FD available again.
|
|
+if test "$no_create" != yes; then
|
|
+ ac_cs_success=:
|
|
+ ac_config_status_args=
|
|
+ test "$silent" = yes &&
|
|
+ ac_config_status_args="$ac_config_status_args --quiet"
|
|
+ exec 5>/dev/null
|
|
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
|
|
+ exec 5>>config.log
|
|
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
|
|
+ # would make configure fail if this is the last instruction.
|
|
+ $ac_cs_success || { (exit 1); exit 1; }
|
|
+fi
|
|
+
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/configure.ac open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/configure.ac
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/configure.ac 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/configure.ac 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,92 @@
|
|
+dnl iscsiuio uIP user space stack configure.ac file
|
|
+dnl
|
|
+dnl Copyright (c) 2004-2011 Broadcom Corporation
|
|
+dnl
|
|
+dnl This program is free software; you can redistribute it and/or modify
|
|
+dnl it under the terms of the GNU General Public License as published by
|
|
+dnl the Free Software Foundation.
|
|
+dnl
|
|
+dnl Written by: Benjamin Li (benli@broadcom.com)
|
|
+dnl Maintained by: Eddie Wai (eddie.wai@broadcom.com)
|
|
+dnl
|
|
+
|
|
+PACKAGE=iscsiuio
|
|
+VERSION=0.7.2.1
|
|
+
|
|
+AC_INIT(iscsiuio, 0.7.2.1, eddie.wai@broadcom.com)
|
|
+
|
|
+AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
|
|
+AC_CONFIG_HEADER(config.h)
|
|
+AC_PATH_PROGS(BASH, bash)
|
|
+
|
|
+AC_PROG_CC
|
|
+AM_PROG_CC_C_O
|
|
+
|
|
+AC_PROG_RANLIB
|
|
+
|
|
+AC_GNU_SOURCE
|
|
+AC_PROG_INSTALL
|
|
+AC_PROG_GCC_TRADITIONAL
|
|
+
|
|
+# Checks for typedefs, structures, and compiler characteristics.
|
|
+AC_C_CONST
|
|
+AC_C_INLINE
|
|
+AC_TYPE_OFF_T
|
|
+AC_TYPE_SIZE_T
|
|
+AC_CHECK_TYPES(int8_t)
|
|
+AC_CHECK_TYPES(uint8_t)
|
|
+AC_CHECK_TYPES(int16_t)
|
|
+AC_CHECK_TYPES(uint16_t)
|
|
+AC_CHECK_TYPES(int32_t)
|
|
+AC_CHECK_TYPES(uint32_t)
|
|
+AC_CHECK_TYPES(int64_t)
|
|
+AC_CHECK_TYPES(uint64_t)
|
|
+AC_CHECK_SIZEOF(short, 2)
|
|
+AC_CHECK_SIZEOF(int, 4)
|
|
+AC_CHECK_SIZEOF(long, 4)
|
|
+
|
|
+AC_C_BIGENDIAN(AC_SUBST([ENDIAN],[BIG]),AC_SUBST([ENDIAN],[LITTLE]))
|
|
+
|
|
+AC_LIBTOOL_DLOPEN
|
|
+
|
|
+# libtool stuff
|
|
+AC_PROG_LIBTOOL
|
|
+
|
|
+CFLAGS="-O2 -Wall"
|
|
+## check for --enable-debug first before checking CFLAGS before
|
|
+## so that we don't mix -O and -g
|
|
+AC_ARG_ENABLE(debug,
|
|
+[ --enable-debug Turn on compiler debugging information (default=no)],
|
|
+ [if eval "test x$enable_debug = xyes"; then
|
|
+ CFLAGS="${CFLAGS} -g -O0"
|
|
+ fi])
|
|
+AM_CONDITIONAL([DEBUG], [test x$debug = xtrue])
|
|
+
|
|
+ISCSID_VERSION_DEFAULT="871"
|
|
+ISCSID_VERSION=$ISCSID_VERSION_DEFAULT
|
|
+which iscsid 2>&1 > /dev/null
|
|
+if [ test $? -eq 0 ]; then
|
|
+ ISCSID_VERSION=`iscsid -v | awk '{ print $3 }' | awk -F- '{ print $2 }'`
|
|
+ echo "Detected iscsid version $ISCSID_VERSION"
|
|
+fi
|
|
+
|
|
+AC_ARG_WITH(iscsid-version,
|
|
+[ --with-iscsid-version Compile against a certain version of iscsid (default="$ISCSID_VERSION_DEFAULT")],
|
|
+ ISCSID_VERSION=$withval)
|
|
+
|
|
+echo "ISCSID_VERSION: $ISCSID_VERSION"
|
|
+CFLAGS="${CFLAGS} -DISCSID_VERSION=$ISCSID_VERSION"
|
|
+AC_SUBST(CFLAGS, ${CFLAGS})
|
|
+
|
|
+AC_CONFIG_COMMANDS([default],[[ echo 'char *build_date ="'`date`'";' > src/unix/build_date.c && echo 'char *build_date; '> src/unix/build_date.h]],[[]])
|
|
+
|
|
+AC_PREFIX_DEFAULT()
|
|
+
|
|
+AC_OUTPUT([Makefile
|
|
+src/Makefile
|
|
+src/apps/Makefile
|
|
+src/apps/dhcpc/Makefile
|
|
+src/apps/brcm-iscsi/Makefile
|
|
+src/uip/Makefile
|
|
+src/unix/Makefile
|
|
+src/unix/libs/Makefile])
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/COPYING open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/COPYING
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/COPYING 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/COPYING 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,674 @@
|
|
+ GNU GENERAL PUBLIC LICENSE
|
|
+ Version 3, 29 June 2007
|
|
+
|
|
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
|
+ Everyone is permitted to copy and distribute verbatim copies
|
|
+ of this license document, but changing it is not allowed.
|
|
+
|
|
+ Preamble
|
|
+
|
|
+ The GNU General Public License is a free, copyleft license for
|
|
+software and other kinds of works.
|
|
+
|
|
+ The licenses for most software and other practical works are designed
|
|
+to take away your freedom to share and change the works. By contrast,
|
|
+the GNU General Public License is intended to guarantee your freedom to
|
|
+share and change all versions of a program--to make sure it remains free
|
|
+software for all its users. We, the Free Software Foundation, use the
|
|
+GNU General Public License for most of our software; it applies also to
|
|
+any other work released this way by its authors. You can apply it to
|
|
+your programs, too.
|
|
+
|
|
+ When we speak of free software, we are referring to freedom, not
|
|
+price. Our General Public Licenses are designed to make sure that you
|
|
+have the freedom to distribute copies of free software (and charge for
|
|
+them if you wish), that you receive source code or can get it if you
|
|
+want it, that you can change the software or use pieces of it in new
|
|
+free programs, and that you know you can do these things.
|
|
+
|
|
+ To protect your rights, we need to prevent others from denying you
|
|
+these rights or asking you to surrender the rights. Therefore, you have
|
|
+certain responsibilities if you distribute copies of the software, or if
|
|
+you modify it: responsibilities to respect the freedom of others.
|
|
+
|
|
+ For example, if you distribute copies of such a program, whether
|
|
+gratis or for a fee, you must pass on to the recipients the same
|
|
+freedoms that you received. You must make sure that they, too, receive
|
|
+or can get the source code. And you must show them these terms so they
|
|
+know their rights.
|
|
+
|
|
+ Developers that use the GNU GPL protect your rights with two steps:
|
|
+(1) assert copyright on the software, and (2) offer you this License
|
|
+giving you legal permission to copy, distribute and/or modify it.
|
|
+
|
|
+ For the developers' and authors' protection, the GPL clearly explains
|
|
+that there is no warranty for this free software. For both users' and
|
|
+authors' sake, the GPL requires that modified versions be marked as
|
|
+changed, so that their problems will not be attributed erroneously to
|
|
+authors of previous versions.
|
|
+
|
|
+ Some devices are designed to deny users access to install or run
|
|
+modified versions of the software inside them, although the manufacturer
|
|
+can do so. This is fundamentally incompatible with the aim of
|
|
+protecting users' freedom to change the software. The systematic
|
|
+pattern of such abuse occurs in the area of products for individuals to
|
|
+use, which is precisely where it is most unacceptable. Therefore, we
|
|
+have designed this version of the GPL to prohibit the practice for those
|
|
+products. If such problems arise substantially in other domains, we
|
|
+stand ready to extend this provision to those domains in future versions
|
|
+of the GPL, as needed to protect the freedom of users.
|
|
+
|
|
+ Finally, every program is threatened constantly by software patents.
|
|
+States should not allow patents to restrict development and use of
|
|
+software on general-purpose computers, but in those that do, we wish to
|
|
+avoid the special danger that patents applied to a free program could
|
|
+make it effectively proprietary. To prevent this, the GPL assures that
|
|
+patents cannot be used to render the program non-free.
|
|
+
|
|
+ The precise terms and conditions for copying, distribution and
|
|
+modification follow.
|
|
+
|
|
+ TERMS AND CONDITIONS
|
|
+
|
|
+ 0. Definitions.
|
|
+
|
|
+ "This License" refers to version 3 of the GNU General Public License.
|
|
+
|
|
+ "Copyright" also means copyright-like laws that apply to other kinds of
|
|
+works, such as semiconductor masks.
|
|
+
|
|
+ "The Program" refers to any copyrightable work licensed under this
|
|
+License. Each licensee is addressed as "you". "Licensees" and
|
|
+"recipients" may be individuals or organizations.
|
|
+
|
|
+ To "modify" a work means to copy from or adapt all or part of the work
|
|
+in a fashion requiring copyright permission, other than the making of an
|
|
+exact copy. The resulting work is called a "modified version" of the
|
|
+earlier work or a work "based on" the earlier work.
|
|
+
|
|
+ A "covered work" means either the unmodified Program or a work based
|
|
+on the Program.
|
|
+
|
|
+ To "propagate" a work means to do anything with it that, without
|
|
+permission, would make you directly or secondarily liable for
|
|
+infringement under applicable copyright law, except executing it on a
|
|
+computer or modifying a private copy. Propagation includes copying,
|
|
+distribution (with or without modification), making available to the
|
|
+public, and in some countries other activities as well.
|
|
+
|
|
+ To "convey" a work means any kind of propagation that enables other
|
|
+parties to make or receive copies. Mere interaction with a user through
|
|
+a computer network, with no transfer of a copy, is not conveying.
|
|
+
|
|
+ An interactive user interface displays "Appropriate Legal Notices"
|
|
+to the extent that it includes a convenient and prominently visible
|
|
+feature that (1) displays an appropriate copyright notice, and (2)
|
|
+tells the user that there is no warranty for the work (except to the
|
|
+extent that warranties are provided), that licensees may convey the
|
|
+work under this License, and how to view a copy of this License. If
|
|
+the interface presents a list of user commands or options, such as a
|
|
+menu, a prominent item in the list meets this criterion.
|
|
+
|
|
+ 1. Source Code.
|
|
+
|
|
+ The "source code" for a work means the preferred form of the work
|
|
+for making modifications to it. "Object code" means any non-source
|
|
+form of a work.
|
|
+
|
|
+ A "Standard Interface" means an interface that either is an official
|
|
+standard defined by a recognized standards body, or, in the case of
|
|
+interfaces specified for a particular programming language, one that
|
|
+is widely used among developers working in that language.
|
|
+
|
|
+ The "System Libraries" of an executable work include anything, other
|
|
+than the work as a whole, that (a) is included in the normal form of
|
|
+packaging a Major Component, but which is not part of that Major
|
|
+Component, and (b) serves only to enable use of the work with that
|
|
+Major Component, or to implement a Standard Interface for which an
|
|
+implementation is available to the public in source code form. A
|
|
+"Major Component", in this context, means a major essential component
|
|
+(kernel, window system, and so on) of the specific operating system
|
|
+(if any) on which the executable work runs, or a compiler used to
|
|
+produce the work, or an object code interpreter used to run it.
|
|
+
|
|
+ The "Corresponding Source" for a work in object code form means all
|
|
+the source code needed to generate, install, and (for an executable
|
|
+work) run the object code and to modify the work, including scripts to
|
|
+control those activities. However, it does not include the work's
|
|
+System Libraries, or general-purpose tools or generally available free
|
|
+programs which are used unmodified in performing those activities but
|
|
+which are not part of the work. For example, Corresponding Source
|
|
+includes interface definition files associated with source files for
|
|
+the work, and the source code for shared libraries and dynamically
|
|
+linked subprograms that the work is specifically designed to require,
|
|
+such as by intimate data communication or control flow between those
|
|
+subprograms and other parts of the work.
|
|
+
|
|
+ The Corresponding Source need not include anything that users
|
|
+can regenerate automatically from other parts of the Corresponding
|
|
+Source.
|
|
+
|
|
+ The Corresponding Source for a work in source code form is that
|
|
+same work.
|
|
+
|
|
+ 2. Basic Permissions.
|
|
+
|
|
+ All rights granted under this License are granted for the term of
|
|
+copyright on the Program, and are irrevocable provided the stated
|
|
+conditions are met. This License explicitly affirms your unlimited
|
|
+permission to run the unmodified Program. The output from running a
|
|
+covered work is covered by this License only if the output, given its
|
|
+content, constitutes a covered work. This License acknowledges your
|
|
+rights of fair use or other equivalent, as provided by copyright law.
|
|
+
|
|
+ You may make, run and propagate covered works that you do not
|
|
+convey, without conditions so long as your license otherwise remains
|
|
+in force. You may convey covered works to others for the sole purpose
|
|
+of having them make modifications exclusively for you, or provide you
|
|
+with facilities for running those works, provided that you comply with
|
|
+the terms of this License in conveying all material for which you do
|
|
+not control copyright. Those thus making or running the covered works
|
|
+for you must do so exclusively on your behalf, under your direction
|
|
+and control, on terms that prohibit them from making any copies of
|
|
+your copyrighted material outside their relationship with you.
|
|
+
|
|
+ Conveying under any other circumstances is permitted solely under
|
|
+the conditions stated below. Sublicensing is not allowed; section 10
|
|
+makes it unnecessary.
|
|
+
|
|
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
|
+
|
|
+ No covered work shall be deemed part of an effective technological
|
|
+measure under any applicable law fulfilling obligations under article
|
|
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
|
+similar laws prohibiting or restricting circumvention of such
|
|
+measures.
|
|
+
|
|
+ When you convey a covered work, you waive any legal power to forbid
|
|
+circumvention of technological measures to the extent such circumvention
|
|
+is effected by exercising rights under this License with respect to
|
|
+the covered work, and you disclaim any intention to limit operation or
|
|
+modification of the work as a means of enforcing, against the work's
|
|
+users, your or third parties' legal rights to forbid circumvention of
|
|
+technological measures.
|
|
+
|
|
+ 4. Conveying Verbatim Copies.
|
|
+
|
|
+ You may convey verbatim copies of the Program's source code as you
|
|
+receive it, in any medium, provided that you conspicuously and
|
|
+appropriately publish on each copy an appropriate copyright notice;
|
|
+keep intact all notices stating that this License and any
|
|
+non-permissive terms added in accord with section 7 apply to the code;
|
|
+keep intact all notices of the absence of any warranty; and give all
|
|
+recipients a copy of this License along with the Program.
|
|
+
|
|
+ You may charge any price or no price for each copy that you convey,
|
|
+and you may offer support or warranty protection for a fee.
|
|
+
|
|
+ 5. Conveying Modified Source Versions.
|
|
+
|
|
+ You may convey a work based on the Program, or the modifications to
|
|
+produce it from the Program, in the form of source code under the
|
|
+terms of section 4, provided that you also meet all of these conditions:
|
|
+
|
|
+ a) The work must carry prominent notices stating that you modified
|
|
+ it, and giving a relevant date.
|
|
+
|
|
+ b) The work must carry prominent notices stating that it is
|
|
+ released under this License and any conditions added under section
|
|
+ 7. This requirement modifies the requirement in section 4 to
|
|
+ "keep intact all notices".
|
|
+
|
|
+ c) You must license the entire work, as a whole, under this
|
|
+ License to anyone who comes into possession of a copy. This
|
|
+ License will therefore apply, along with any applicable section 7
|
|
+ additional terms, to the whole of the work, and all its parts,
|
|
+ regardless of how they are packaged. This License gives no
|
|
+ permission to license the work in any other way, but it does not
|
|
+ invalidate such permission if you have separately received it.
|
|
+
|
|
+ d) If the work has interactive user interfaces, each must display
|
|
+ Appropriate Legal Notices; however, if the Program has interactive
|
|
+ interfaces that do not display Appropriate Legal Notices, your
|
|
+ work need not make them do so.
|
|
+
|
|
+ A compilation of a covered work with other separate and independent
|
|
+works, which are not by their nature extensions of the covered work,
|
|
+and which are not combined with it such as to form a larger program,
|
|
+in or on a volume of a storage or distribution medium, is called an
|
|
+"aggregate" if the compilation and its resulting copyright are not
|
|
+used to limit the access or legal rights of the compilation's users
|
|
+beyond what the individual works permit. Inclusion of a covered work
|
|
+in an aggregate does not cause this License to apply to the other
|
|
+parts of the aggregate.
|
|
+
|
|
+ 6. Conveying Non-Source Forms.
|
|
+
|
|
+ You may convey a covered work in object code form under the terms
|
|
+of sections 4 and 5, provided that you also convey the
|
|
+machine-readable Corresponding Source under the terms of this License,
|
|
+in one of these ways:
|
|
+
|
|
+ a) Convey the object code in, or embodied in, a physical product
|
|
+ (including a physical distribution medium), accompanied by the
|
|
+ Corresponding Source fixed on a durable physical medium
|
|
+ customarily used for software interchange.
|
|
+
|
|
+ b) Convey the object code in, or embodied in, a physical product
|
|
+ (including a physical distribution medium), accompanied by a
|
|
+ written offer, valid for at least three years and valid for as
|
|
+ long as you offer spare parts or customer support for that product
|
|
+ model, to give anyone who possesses the object code either (1) a
|
|
+ copy of the Corresponding Source for all the software in the
|
|
+ product that is covered by this License, on a durable physical
|
|
+ medium customarily used for software interchange, for a price no
|
|
+ more than your reasonable cost of physically performing this
|
|
+ conveying of source, or (2) access to copy the
|
|
+ Corresponding Source from a network server at no charge.
|
|
+
|
|
+ c) Convey individual copies of the object code with a copy of the
|
|
+ written offer to provide the Corresponding Source. This
|
|
+ alternative is allowed only occasionally and noncommercially, and
|
|
+ only if you received the object code with such an offer, in accord
|
|
+ with subsection 6b.
|
|
+
|
|
+ d) Convey the object code by offering access from a designated
|
|
+ place (gratis or for a charge), and offer equivalent access to the
|
|
+ Corresponding Source in the same way through the same place at no
|
|
+ further charge. You need not require recipients to copy the
|
|
+ Corresponding Source along with the object code. If the place to
|
|
+ copy the object code is a network server, the Corresponding Source
|
|
+ may be on a different server (operated by you or a third party)
|
|
+ that supports equivalent copying facilities, provided you maintain
|
|
+ clear directions next to the object code saying where to find the
|
|
+ Corresponding Source. Regardless of what server hosts the
|
|
+ Corresponding Source, you remain obligated to ensure that it is
|
|
+ available for as long as needed to satisfy these requirements.
|
|
+
|
|
+ e) Convey the object code using peer-to-peer transmission, provided
|
|
+ you inform other peers where the object code and Corresponding
|
|
+ Source of the work are being offered to the general public at no
|
|
+ charge under subsection 6d.
|
|
+
|
|
+ A separable portion of the object code, whose source code is excluded
|
|
+from the Corresponding Source as a System Library, need not be
|
|
+included in conveying the object code work.
|
|
+
|
|
+ A "User Product" is either (1) a "consumer product", which means any
|
|
+tangible personal property which is normally used for personal, family,
|
|
+or household purposes, or (2) anything designed or sold for incorporation
|
|
+into a dwelling. In determining whether a product is a consumer product,
|
|
+doubtful cases shall be resolved in favor of coverage. For a particular
|
|
+product received by a particular user, "normally used" refers to a
|
|
+typical or common use of that class of product, regardless of the status
|
|
+of the particular user or of the way in which the particular user
|
|
+actually uses, or expects or is expected to use, the product. A product
|
|
+is a consumer product regardless of whether the product has substantial
|
|
+commercial, industrial or non-consumer uses, unless such uses represent
|
|
+the only significant mode of use of the product.
|
|
+
|
|
+ "Installation Information" for a User Product means any methods,
|
|
+procedures, authorization keys, or other information required to install
|
|
+and execute modified versions of a covered work in that User Product from
|
|
+a modified version of its Corresponding Source. The information must
|
|
+suffice to ensure that the continued functioning of the modified object
|
|
+code is in no case prevented or interfered with solely because
|
|
+modification has been made.
|
|
+
|
|
+ If you convey an object code work under this section in, or with, or
|
|
+specifically for use in, a User Product, and the conveying occurs as
|
|
+part of a transaction in which the right of possession and use of the
|
|
+User Product is transferred to the recipient in perpetuity or for a
|
|
+fixed term (regardless of how the transaction is characterized), the
|
|
+Corresponding Source conveyed under this section must be accompanied
|
|
+by the Installation Information. But this requirement does not apply
|
|
+if neither you nor any third party retains the ability to install
|
|
+modified object code on the User Product (for example, the work has
|
|
+been installed in ROM).
|
|
+
|
|
+ The requirement to provide Installation Information does not include a
|
|
+requirement to continue to provide support service, warranty, or updates
|
|
+for a work that has been modified or installed by the recipient, or for
|
|
+the User Product in which it has been modified or installed. Access to a
|
|
+network may be denied when the modification itself materially and
|
|
+adversely affects the operation of the network or violates the rules and
|
|
+protocols for communication across the network.
|
|
+
|
|
+ Corresponding Source conveyed, and Installation Information provided,
|
|
+in accord with this section must be in a format that is publicly
|
|
+documented (and with an implementation available to the public in
|
|
+source code form), and must require no special password or key for
|
|
+unpacking, reading or copying.
|
|
+
|
|
+ 7. Additional Terms.
|
|
+
|
|
+ "Additional permissions" are terms that supplement the terms of this
|
|
+License by making exceptions from one or more of its conditions.
|
|
+Additional permissions that are applicable to the entire Program shall
|
|
+be treated as though they were included in this License, to the extent
|
|
+that they are valid under applicable law. If additional permissions
|
|
+apply only to part of the Program, that part may be used separately
|
|
+under those permissions, but the entire Program remains governed by
|
|
+this License without regard to the additional permissions.
|
|
+
|
|
+ When you convey a copy of a covered work, you may at your option
|
|
+remove any additional permissions from that copy, or from any part of
|
|
+it. (Additional permissions may be written to require their own
|
|
+removal in certain cases when you modify the work.) You may place
|
|
+additional permissions on material, added by you to a covered work,
|
|
+for which you have or can give appropriate copyright permission.
|
|
+
|
|
+ Notwithstanding any other provision of this License, for material you
|
|
+add to a covered work, you may (if authorized by the copyright holders of
|
|
+that material) supplement the terms of this License with terms:
|
|
+
|
|
+ a) Disclaiming warranty or limiting liability differently from the
|
|
+ terms of sections 15 and 16 of this License; or
|
|
+
|
|
+ b) Requiring preservation of specified reasonable legal notices or
|
|
+ author attributions in that material or in the Appropriate Legal
|
|
+ Notices displayed by works containing it; or
|
|
+
|
|
+ c) Prohibiting misrepresentation of the origin of that material, or
|
|
+ requiring that modified versions of such material be marked in
|
|
+ reasonable ways as different from the original version; or
|
|
+
|
|
+ d) Limiting the use for publicity purposes of names of licensors or
|
|
+ authors of the material; or
|
|
+
|
|
+ e) Declining to grant rights under trademark law for use of some
|
|
+ trade names, trademarks, or service marks; or
|
|
+
|
|
+ f) Requiring indemnification of licensors and authors of that
|
|
+ material by anyone who conveys the material (or modified versions of
|
|
+ it) with contractual assumptions of liability to the recipient, for
|
|
+ any liability that these contractual assumptions directly impose on
|
|
+ those licensors and authors.
|
|
+
|
|
+ All other non-permissive additional terms are considered "further
|
|
+restrictions" within the meaning of section 10. If the Program as you
|
|
+received it, or any part of it, contains a notice stating that it is
|
|
+governed by this License along with a term that is a further
|
|
+restriction, you may remove that term. If a license document contains
|
|
+a further restriction but permits relicensing or conveying under this
|
|
+License, you may add to a covered work material governed by the terms
|
|
+of that license document, provided that the further restriction does
|
|
+not survive such relicensing or conveying.
|
|
+
|
|
+ If you add terms to a covered work in accord with this section, you
|
|
+must place, in the relevant source files, a statement of the
|
|
+additional terms that apply to those files, or a notice indicating
|
|
+where to find the applicable terms.
|
|
+
|
|
+ Additional terms, permissive or non-permissive, may be stated in the
|
|
+form of a separately written license, or stated as exceptions;
|
|
+the above requirements apply either way.
|
|
+
|
|
+ 8. Termination.
|
|
+
|
|
+ You may not propagate or modify a covered work except as expressly
|
|
+provided under this License. Any attempt otherwise to propagate or
|
|
+modify it is void, and will automatically terminate your rights under
|
|
+this License (including any patent licenses granted under the third
|
|
+paragraph of section 11).
|
|
+
|
|
+ However, if you cease all violation of this License, then your
|
|
+license from a particular copyright holder is reinstated (a)
|
|
+provisionally, unless and until the copyright holder explicitly and
|
|
+finally terminates your license, and (b) permanently, if the copyright
|
|
+holder fails to notify you of the violation by some reasonable means
|
|
+prior to 60 days after the cessation.
|
|
+
|
|
+ Moreover, your license from a particular copyright holder is
|
|
+reinstated permanently if the copyright holder notifies you of the
|
|
+violation by some reasonable means, this is the first time you have
|
|
+received notice of violation of this License (for any work) from that
|
|
+copyright holder, and you cure the violation prior to 30 days after
|
|
+your receipt of the notice.
|
|
+
|
|
+ Termination of your rights under this section does not terminate the
|
|
+licenses of parties who have received copies or rights from you under
|
|
+this License. If your rights have been terminated and not permanently
|
|
+reinstated, you do not qualify to receive new licenses for the same
|
|
+material under section 10.
|
|
+
|
|
+ 9. Acceptance Not Required for Having Copies.
|
|
+
|
|
+ You are not required to accept this License in order to receive or
|
|
+run a copy of the Program. Ancillary propagation of a covered work
|
|
+occurring solely as a consequence of using peer-to-peer transmission
|
|
+to receive a copy likewise does not require acceptance. However,
|
|
+nothing other than this License grants you permission to propagate or
|
|
+modify any covered work. These actions infringe copyright if you do
|
|
+not accept this License. Therefore, by modifying or propagating a
|
|
+covered work, you indicate your acceptance of this License to do so.
|
|
+
|
|
+ 10. Automatic Licensing of Downstream Recipients.
|
|
+
|
|
+ Each time you convey a covered work, the recipient automatically
|
|
+receives a license from the original licensors, to run, modify and
|
|
+propagate that work, subject to this License. You are not responsible
|
|
+for enforcing compliance by third parties with this License.
|
|
+
|
|
+ An "entity transaction" is a transaction transferring control of an
|
|
+organization, or substantially all assets of one, or subdividing an
|
|
+organization, or merging organizations. If propagation of a covered
|
|
+work results from an entity transaction, each party to that
|
|
+transaction who receives a copy of the work also receives whatever
|
|
+licenses to the work the party's predecessor in interest had or could
|
|
+give under the previous paragraph, plus a right to possession of the
|
|
+Corresponding Source of the work from the predecessor in interest, if
|
|
+the predecessor has it or can get it with reasonable efforts.
|
|
+
|
|
+ You may not impose any further restrictions on the exercise of the
|
|
+rights granted or affirmed under this License. For example, you may
|
|
+not impose a license fee, royalty, or other charge for exercise of
|
|
+rights granted under this License, and you may not initiate litigation
|
|
+(including a cross-claim or counterclaim in a lawsuit) alleging that
|
|
+any patent claim is infringed by making, using, selling, offering for
|
|
+sale, or importing the Program or any portion of it.
|
|
+
|
|
+ 11. Patents.
|
|
+
|
|
+ A "contributor" is a copyright holder who authorizes use under this
|
|
+License of the Program or a work on which the Program is based. The
|
|
+work thus licensed is called the contributor's "contributor version".
|
|
+
|
|
+ A contributor's "essential patent claims" are all patent claims
|
|
+owned or controlled by the contributor, whether already acquired or
|
|
+hereafter acquired, that would be infringed by some manner, permitted
|
|
+by this License, of making, using, or selling its contributor version,
|
|
+but do not include claims that would be infringed only as a
|
|
+consequence of further modification of the contributor version. For
|
|
+purposes of this definition, "control" includes the right to grant
|
|
+patent sublicenses in a manner consistent with the requirements of
|
|
+this License.
|
|
+
|
|
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
|
|
+patent license under the contributor's essential patent claims, to
|
|
+make, use, sell, offer for sale, import and otherwise run, modify and
|
|
+propagate the contents of its contributor version.
|
|
+
|
|
+ In the following three paragraphs, a "patent license" is any express
|
|
+agreement or commitment, however denominated, not to enforce a patent
|
|
+(such as an express permission to practice a patent or covenant not to
|
|
+sue for patent infringement). To "grant" such a patent license to a
|
|
+party means to make such an agreement or commitment not to enforce a
|
|
+patent against the party.
|
|
+
|
|
+ If you convey a covered work, knowingly relying on a patent license,
|
|
+and the Corresponding Source of the work is not available for anyone
|
|
+to copy, free of charge and under the terms of this License, through a
|
|
+publicly available network server or other readily accessible means,
|
|
+then you must either (1) cause the Corresponding Source to be so
|
|
+available, or (2) arrange to deprive yourself of the benefit of the
|
|
+patent license for this particular work, or (3) arrange, in a manner
|
|
+consistent with the requirements of this License, to extend the patent
|
|
+license to downstream recipients. "Knowingly relying" means you have
|
|
+actual knowledge that, but for the patent license, your conveying the
|
|
+covered work in a country, or your recipient's use of the covered work
|
|
+in a country, would infringe one or more identifiable patents in that
|
|
+country that you have reason to believe are valid.
|
|
+
|
|
+ If, pursuant to or in connection with a single transaction or
|
|
+arrangement, you convey, or propagate by procuring conveyance of, a
|
|
+covered work, and grant a patent license to some of the parties
|
|
+receiving the covered work authorizing them to use, propagate, modify
|
|
+or convey a specific copy of the covered work, then the patent license
|
|
+you grant is automatically extended to all recipients of the covered
|
|
+work and works based on it.
|
|
+
|
|
+ A patent license is "discriminatory" if it does not include within
|
|
+the scope of its coverage, prohibits the exercise of, or is
|
|
+conditioned on the non-exercise of one or more of the rights that are
|
|
+specifically granted under this License. You may not convey a covered
|
|
+work if you are a party to an arrangement with a third party that is
|
|
+in the business of distributing software, under which you make payment
|
|
+to the third party based on the extent of your activity of conveying
|
|
+the work, and under which the third party grants, to any of the
|
|
+parties who would receive the covered work from you, a discriminatory
|
|
+patent license (a) in connection with copies of the covered work
|
|
+conveyed by you (or copies made from those copies), or (b) primarily
|
|
+for and in connection with specific products or compilations that
|
|
+contain the covered work, unless you entered into that arrangement,
|
|
+or that patent license was granted, prior to 28 March 2007.
|
|
+
|
|
+ Nothing in this License shall be construed as excluding or limiting
|
|
+any implied license or other defenses to infringement that may
|
|
+otherwise be available to you under applicable patent law.
|
|
+
|
|
+ 12. No Surrender of Others' Freedom.
|
|
+
|
|
+ If conditions are imposed on you (whether by court order, agreement or
|
|
+otherwise) that contradict the conditions of this License, they do not
|
|
+excuse you from the conditions of this License. If you cannot convey a
|
|
+covered work so as to satisfy simultaneously your obligations under this
|
|
+License and any other pertinent obligations, then as a consequence you may
|
|
+not convey it at all. For example, if you agree to terms that obligate you
|
|
+to collect a royalty for further conveying from those to whom you convey
|
|
+the Program, the only way you could satisfy both those terms and this
|
|
+License would be to refrain entirely from conveying the Program.
|
|
+
|
|
+ 13. Use with the GNU Affero General Public License.
|
|
+
|
|
+ Notwithstanding any other provision of this License, you have
|
|
+permission to link or combine any covered work with a work licensed
|
|
+under version 3 of the GNU Affero General Public License into a single
|
|
+combined work, and to convey the resulting work. The terms of this
|
|
+License will continue to apply to the part which is the covered work,
|
|
+but the special requirements of the GNU Affero General Public License,
|
|
+section 13, concerning interaction through a network will apply to the
|
|
+combination as such.
|
|
+
|
|
+ 14. Revised Versions of this License.
|
|
+
|
|
+ The Free Software Foundation may publish revised and/or new versions of
|
|
+the GNU General Public License from time to time. Such new versions will
|
|
+be similar in spirit to the present version, but may differ in detail to
|
|
+address new problems or concerns.
|
|
+
|
|
+ Each version is given a distinguishing version number. If the
|
|
+Program specifies that a certain numbered version of the GNU General
|
|
+Public License "or any later version" applies to it, you have the
|
|
+option of following the terms and conditions either of that numbered
|
|
+version or of any later version published by the Free Software
|
|
+Foundation. If the Program does not specify a version number of the
|
|
+GNU General Public License, you may choose any version ever published
|
|
+by the Free Software Foundation.
|
|
+
|
|
+ If the Program specifies that a proxy can decide which future
|
|
+versions of the GNU General Public License can be used, that proxy's
|
|
+public statement of acceptance of a version permanently authorizes you
|
|
+to choose that version for the Program.
|
|
+
|
|
+ Later license versions may give you additional or different
|
|
+permissions. However, no additional obligations are imposed on any
|
|
+author or copyright holder as a result of your choosing to follow a
|
|
+later version.
|
|
+
|
|
+ 15. Disclaimer of Warranty.
|
|
+
|
|
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
|
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
|
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
|
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
|
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
|
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
|
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
+
|
|
+ 16. Limitation of Liability.
|
|
+
|
|
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
|
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
|
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
|
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
|
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
|
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
|
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
|
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
|
+SUCH DAMAGES.
|
|
+
|
|
+ 17. Interpretation of Sections 15 and 16.
|
|
+
|
|
+ If the disclaimer of warranty and limitation of liability provided
|
|
+above cannot be given local legal effect according to their terms,
|
|
+reviewing courts shall apply local law that most closely approximates
|
|
+an absolute waiver of all civil liability in connection with the
|
|
+Program, unless a warranty or assumption of liability accompanies a
|
|
+copy of the Program in return for a fee.
|
|
+
|
|
+ END OF TERMS AND CONDITIONS
|
|
+
|
|
+ How to Apply These Terms to Your New Programs
|
|
+
|
|
+ If you develop a new program, and you want it to be of the greatest
|
|
+possible use to the public, the best way to achieve this is to make it
|
|
+free software which everyone can redistribute and change under these terms.
|
|
+
|
|
+ To do so, attach the following notices to the program. It is safest
|
|
+to attach them to the start of each source file to most effectively
|
|
+state the exclusion of warranty; and each file should have at least
|
|
+the "copyright" line and a pointer to where the full notice is found.
|
|
+
|
|
+ <one line to give the program's name and a brief idea of what it does.>
|
|
+ Copyright (C) <year> <name of author>
|
|
+
|
|
+ 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 3 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/>.
|
|
+
|
|
+Also add information on how to contact you by electronic and paper mail.
|
|
+
|
|
+ If the program does terminal interaction, make it output a short
|
|
+notice like this when it starts in an interactive mode:
|
|
+
|
|
+ <program> Copyright (C) <year> <name of author>
|
|
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
|
+ This is free software, and you are welcome to redistribute it
|
|
+ under certain conditions; type `show c' for details.
|
|
+
|
|
+The hypothetical commands `show w' and `show c' should show the appropriate
|
|
+parts of the General Public License. Of course, your program's commands
|
|
+might be different; for a GUI interface, you would use an "about box".
|
|
+
|
|
+ You should also get your employer (if you work as a programmer) or school,
|
|
+if any, to sign a "copyright disclaimer" for the program, if necessary.
|
|
+For more information on this, and how to apply and follow the GNU GPL, see
|
|
+<http://www.gnu.org/licenses/>.
|
|
+
|
|
+ The GNU General Public License does not permit incorporating your program
|
|
+into proprietary programs. If your program is a subroutine library, you
|
|
+may consider it more useful to permit linking proprietary applications with
|
|
+the library. If this is what you want to do, use the GNU Lesser General
|
|
+Public License instead of this License. But first, please read
|
|
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/depcomp open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/depcomp
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/depcomp 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/depcomp 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,589 @@
|
|
+#! /bin/sh
|
|
+# depcomp - compile a program generating dependencies as side-effects
|
|
+
|
|
+scriptversion=2007-03-29.01
|
|
+
|
|
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 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
|
|
+# the Free Software Foundation; either version 2, 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.
|
|
+
|
|
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
|
+
|
|
+case $1 in
|
|
+ '')
|
|
+ echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
|
+ exit 1;
|
|
+ ;;
|
|
+ -h | --h*)
|
|
+ cat <<\EOF
|
|
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
|
|
+
|
|
+Run PROGRAMS ARGS to compile a file, generating dependencies
|
|
+as side-effects.
|
|
+
|
|
+Environment variables:
|
|
+ depmode Dependency tracking mode.
|
|
+ source Source file read by `PROGRAMS ARGS'.
|
|
+ object Object file output by `PROGRAMS ARGS'.
|
|
+ DEPDIR directory where to store dependencies.
|
|
+ depfile Dependency file to output.
|
|
+ tmpdepfile Temporary file to use when outputing dependencies.
|
|
+ libtool Whether libtool is used (yes/no).
|
|
+
|
|
+Report bugs to <bug-automake@gnu.org>.
|
|
+EOF
|
|
+ exit $?
|
|
+ ;;
|
|
+ -v | --v*)
|
|
+ echo "depcomp $scriptversion"
|
|
+ exit $?
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
|
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
|
+ exit 1
|
|
+fi
|
|
+
|
|
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
|
|
+depfile=${depfile-`echo "$object" |
|
|
+ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
|
|
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
|
+
|
|
+rm -f "$tmpdepfile"
|
|
+
|
|
+# Some modes work just like other modes, but use different flags. We
|
|
+# parameterize here, but still list the modes in the big case below,
|
|
+# to make depend.m4 easier to write. Note that we *cannot* use a case
|
|
+# here, because this file can only contain one case statement.
|
|
+if test "$depmode" = hp; then
|
|
+ # HP compiler uses -M and no extra arg.
|
|
+ gccflag=-M
|
|
+ depmode=gcc
|
|
+fi
|
|
+
|
|
+if test "$depmode" = dashXmstdout; then
|
|
+ # This is just like dashmstdout with a different argument.
|
|
+ dashmflag=-xM
|
|
+ depmode=dashmstdout
|
|
+fi
|
|
+
|
|
+case "$depmode" in
|
|
+gcc3)
|
|
+## gcc 3 implements dependency tracking that does exactly what
|
|
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
|
+## it if -MD -MP comes after the -MF stuff. Hmm.
|
|
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
|
|
+## the command line argument order; so add the flags where they
|
|
+## appear in depend2.am. Note that the slowdown incurred here
|
|
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
|
|
+ for arg
|
|
+ do
|
|
+ case $arg in
|
|
+ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
|
|
+ *) set fnord "$@" "$arg" ;;
|
|
+ esac
|
|
+ shift # fnord
|
|
+ shift # $arg
|
|
+ done
|
|
+ "$@"
|
|
+ stat=$?
|
|
+ if test $stat -eq 0; then :
|
|
+ else
|
|
+ rm -f "$tmpdepfile"
|
|
+ exit $stat
|
|
+ fi
|
|
+ mv "$tmpdepfile" "$depfile"
|
|
+ ;;
|
|
+
|
|
+gcc)
|
|
+## There are various ways to get dependency output from gcc. Here's
|
|
+## why we pick this rather obscure method:
|
|
+## - Don't want to use -MD because we'd like the dependencies to end
|
|
+## up in a subdir. Having to rename by hand is ugly.
|
|
+## (We might end up doing this anyway to support other compilers.)
|
|
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
|
|
+## -MM, not -M (despite what the docs say).
|
|
+## - Using -M directly means running the compiler twice (even worse
|
|
+## than renaming).
|
|
+ if test -z "$gccflag"; then
|
|
+ gccflag=-MD,
|
|
+ fi
|
|
+ "$@" -Wp,"$gccflag$tmpdepfile"
|
|
+ stat=$?
|
|
+ if test $stat -eq 0; then :
|
|
+ else
|
|
+ rm -f "$tmpdepfile"
|
|
+ exit $stat
|
|
+ fi
|
|
+ rm -f "$depfile"
|
|
+ echo "$object : \\" > "$depfile"
|
|
+ alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
|
|
+## The second -e expression handles DOS-style file names with drive letters.
|
|
+ sed -e 's/^[^:]*: / /' \
|
|
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
|
+## This next piece of magic avoids the `deleted header file' problem.
|
|
+## The problem is that when a header file which appears in a .P file
|
|
+## is deleted, the dependency causes make to die (because there is
|
|
+## typically no way to rebuild the header). We avoid this by adding
|
|
+## dummy dependencies for each header file. Too bad gcc doesn't do
|
|
+## this for us directly.
|
|
+ tr ' ' '
|
|
+' < "$tmpdepfile" |
|
|
+## Some versions of gcc put a space before the `:'. On the theory
|
|
+## that the space means something, we add a space to the output as
|
|
+## well.
|
|
+## Some versions of the HPUX 10.20 sed can't process this invocation
|
|
+## correctly. Breaking it into two sed invocations is a workaround.
|
|
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
|
+ rm -f "$tmpdepfile"
|
|
+ ;;
|
|
+
|
|
+hp)
|
|
+ # 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
|
|
+ ;;
|
|
+
|
|
+sgi)
|
|
+ if test "$libtool" = yes; then
|
|
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
|
|
+ else
|
|
+ "$@" -MDupdate "$tmpdepfile"
|
|
+ fi
|
|
+ stat=$?
|
|
+ if test $stat -eq 0; then :
|
|
+ else
|
|
+ rm -f "$tmpdepfile"
|
|
+ exit $stat
|
|
+ fi
|
|
+ rm -f "$depfile"
|
|
+
|
|
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
|
|
+ echo "$object : \\" > "$depfile"
|
|
+
|
|
+ # Clip off the initial element (the dependent). Don't try to be
|
|
+ # clever and replace this with sed code, as IRIX sed won't handle
|
|
+ # lines with more than a fixed number of characters (4096 in
|
|
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
|
|
+ # the IRIX cc adds comments like `#:fec' to the end of the
|
|
+ # dependency line.
|
|
+ tr ' ' '
|
|
+' < "$tmpdepfile" \
|
|
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
|
|
+ tr '
|
|
+' ' ' >> $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
|
|
+ else
|
|
+ # The sourcefile does not contain any dependencies, so just
|
|
+ # store a dummy comment line, to avoid errors with the Makefile
|
|
+ # "include basename.Plo" scheme.
|
|
+ echo "#dummy" > "$depfile"
|
|
+ fi
|
|
+ rm -f "$tmpdepfile"
|
|
+ ;;
|
|
+
|
|
+aix)
|
|
+ # The C for AIX Compiler uses -M and outputs the dependencies
|
|
+ # in a .u file. In older versions, this file always lives in the
|
|
+ # 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.
|
|
+ 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 $stat -eq 0; then :
|
|
+ else
|
|
+ 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
|
|
+ # 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,^.*\.[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
|
|
+ # "include basename.Plo" scheme.
|
|
+ echo "#dummy" > "$depfile"
|
|
+ fi
|
|
+ rm -f "$tmpdepfile"
|
|
+ ;;
|
|
+
|
|
+icc)
|
|
+ # Intel's C compiler understands `-MD -MF file'. However on
|
|
+ # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
|
|
+ # ICC 7.0 will fill foo.d with something like
|
|
+ # foo.o: sub/foo.c
|
|
+ # foo.o: sub/foo.h
|
|
+ # which is wrong. We want:
|
|
+ # sub/foo.o: sub/foo.c
|
|
+ # sub/foo.o: sub/foo.h
|
|
+ # sub/foo.c:
|
|
+ # sub/foo.h:
|
|
+ # ICC 7.1 will output
|
|
+ # foo.o: sub/foo.c sub/foo.h
|
|
+ # and will wrap long lines using \ :
|
|
+ # foo.o: sub/foo.c ... \
|
|
+ # sub/foo.h ... \
|
|
+ # ...
|
|
+
|
|
+ "$@" -MD -MF "$tmpdepfile"
|
|
+ stat=$?
|
|
+ if test $stat -eq 0; then :
|
|
+ else
|
|
+ rm -f "$tmpdepfile"
|
|
+ exit $stat
|
|
+ fi
|
|
+ rm -f "$depfile"
|
|
+ # Each line is of the form `foo.o: dependent.h',
|
|
+ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
|
|
+ # Do two passes, one to just change these to
|
|
+ # `$object: dependent.h' and one to simply `dependent.h:'.
|
|
+ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
|
|
+ # Some versions of the HPUX 10.20 sed can't process this invocation
|
|
+ # correctly. Breaking it into two sed invocations is a workaround.
|
|
+ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
|
|
+ sed -e 's/$/ :/' >> "$depfile"
|
|
+ rm -f "$tmpdepfile"
|
|
+ ;;
|
|
+
|
|
+hp2)
|
|
+ # The "hp" stanza above does not work with aCC (C++) and HP's ia64
|
|
+ # compilers, which have integrated preprocessors. The correct option
|
|
+ # to use with these is +Maked; it writes dependencies to a file named
|
|
+ # 'foo.d', which lands next to the object file, wherever that
|
|
+ # happens to be.
|
|
+ # Much of this is similar to the tru64 case; see comments there.
|
|
+ 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.d
|
|
+ tmpdepfile2=$dir.libs/$base.d
|
|
+ "$@" -Wc,+Maked
|
|
+ else
|
|
+ tmpdepfile1=$dir$base.d
|
|
+ tmpdepfile2=$dir$base.d
|
|
+ "$@" +Maked
|
|
+ fi
|
|
+ stat=$?
|
|
+ if test $stat -eq 0; then :
|
|
+ else
|
|
+ rm -f "$tmpdepfile1" "$tmpdepfile2"
|
|
+ exit $stat
|
|
+ fi
|
|
+
|
|
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
|
|
+ do
|
|
+ test -f "$tmpdepfile" && break
|
|
+ done
|
|
+ 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"
|
|
+ else
|
|
+ echo "#dummy" > "$depfile"
|
|
+ fi
|
|
+ rm -f "$tmpdepfile" "$tmpdepfile2"
|
|
+ ;;
|
|
+
|
|
+tru64)
|
|
+ # The Tru64 compiler uses -MD to generate dependencies as a side
|
|
+ # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
|
|
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
|
|
+ # dependencies in `foo.d' instead, so we check for that too.
|
|
+ # Subdirectories are respected.
|
|
+ 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
|
|
+ # With Tru64 cc, shared objects can also be used to make a
|
|
+ # static library. This mechanism is used in libtool 1.4 series to
|
|
+ # handle both shared and static libraries in a single compilation.
|
|
+ # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
|
|
+ #
|
|
+ # With libtool 1.5 this exception was removed, and libtool now
|
|
+ # generates 2 separate objects for the 2 libraries. These two
|
|
+ # compilations output dependencies in $dir.libs/$base.o.d and
|
|
+ # in $dir$base.o.d. We have to check for both files, because
|
|
+ # one of the two compilations can be disabled. We should prefer
|
|
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
|
|
+ # automatically cleaned when .libs/ is deleted, while ignoring
|
|
+ # the former would cause a distcleancheck panic.
|
|
+ tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
|
|
+ tmpdepfile2=$dir$base.o.d # libtool 1.5
|
|
+ tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
|
|
+ tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
|
|
+ "$@" -Wc,-MD
|
|
+ else
|
|
+ tmpdepfile1=$dir$base.o.d
|
|
+ tmpdepfile2=$dir$base.d
|
|
+ tmpdepfile3=$dir$base.d
|
|
+ tmpdepfile4=$dir$base.d
|
|
+ "$@" -MD
|
|
+ fi
|
|
+
|
|
+ stat=$?
|
|
+ if test $stat -eq 0; then :
|
|
+ else
|
|
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
|
+ exit $stat
|
|
+ fi
|
|
+
|
|
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
|
+ do
|
|
+ test -f "$tmpdepfile" && break
|
|
+ done
|
|
+ if test -f "$tmpdepfile"; then
|
|
+ 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
|
|
+ echo "#dummy" > "$depfile"
|
|
+ fi
|
|
+ rm -f "$tmpdepfile"
|
|
+ ;;
|
|
+
|
|
+#nosideeffect)
|
|
+ # This comment above is used by automake to tell side-effect
|
|
+ # dependency tracking mechanisms from slower ones.
|
|
+
|
|
+dashmstdout)
|
|
+ # Important note: in order to support this mode, a compiler *must*
|
|
+ # always write the preprocessed file to stdout, regardless of -o.
|
|
+ "$@" || exit $?
|
|
+
|
|
+ # Remove the call to Libtool.
|
|
+ if test "$libtool" = yes; then
|
|
+ while test $1 != '--mode=compile'; do
|
|
+ shift
|
|
+ done
|
|
+ shift
|
|
+ fi
|
|
+
|
|
+ # Remove `-o $object'.
|
|
+ IFS=" "
|
|
+ for arg
|
|
+ do
|
|
+ case $arg in
|
|
+ -o)
|
|
+ shift
|
|
+ ;;
|
|
+ $object)
|
|
+ shift
|
|
+ ;;
|
|
+ *)
|
|
+ set fnord "$@" "$arg"
|
|
+ shift # fnord
|
|
+ shift # $arg
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+
|
|
+ test -z "$dashmflag" && dashmflag=-M
|
|
+ # Require at least two characters before searching for `:'
|
|
+ # in the target name. This is to cope with DOS-style filenames:
|
|
+ # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
|
|
+ "$@" $dashmflag |
|
|
+ sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
|
|
+ rm -f "$depfile"
|
|
+ cat < "$tmpdepfile" > "$depfile"
|
|
+ tr ' ' '
|
|
+' < "$tmpdepfile" | \
|
|
+## Some versions of the HPUX 10.20 sed can't process this invocation
|
|
+## correctly. Breaking it into two sed invocations is a workaround.
|
|
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
|
+ rm -f "$tmpdepfile"
|
|
+ ;;
|
|
+
|
|
+dashXmstdout)
|
|
+ # This case only exists to satisfy depend.m4. It is never actually
|
|
+ # run, as this mode is specially recognized in the preamble.
|
|
+ exit 1
|
|
+ ;;
|
|
+
|
|
+makedepend)
|
|
+ "$@" || exit $?
|
|
+ # Remove any Libtool call
|
|
+ if test "$libtool" = yes; then
|
|
+ while test $1 != '--mode=compile'; do
|
|
+ shift
|
|
+ done
|
|
+ shift
|
|
+ fi
|
|
+ # X makedepend
|
|
+ shift
|
|
+ cleared=no
|
|
+ for arg in "$@"; do
|
|
+ case $cleared in
|
|
+ no)
|
|
+ set ""; shift
|
|
+ cleared=yes ;;
|
|
+ esac
|
|
+ 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.
|
|
+ -*|$object)
|
|
+ ;;
|
|
+ *)
|
|
+ set fnord "$@" "$arg"; shift ;;
|
|
+ esac
|
|
+ done
|
|
+ obj_suffix="`echo $object | sed 's/^.*\././'`"
|
|
+ touch "$tmpdepfile"
|
|
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
|
|
+ rm -f "$depfile"
|
|
+ cat < "$tmpdepfile" > "$depfile"
|
|
+ sed '1,2d' "$tmpdepfile" | tr ' ' '
|
|
+' | \
|
|
+## Some versions of the HPUX 10.20 sed can't process this invocation
|
|
+## correctly. Breaking it into two sed invocations is a workaround.
|
|
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
|
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
|
|
+ ;;
|
|
+
|
|
+cpp)
|
|
+ # Important note: in order to support this mode, a compiler *must*
|
|
+ # always write the preprocessed file to stdout.
|
|
+ "$@" || exit $?
|
|
+
|
|
+ # Remove the call to Libtool.
|
|
+ if test "$libtool" = yes; then
|
|
+ while test $1 != '--mode=compile'; do
|
|
+ shift
|
|
+ done
|
|
+ shift
|
|
+ fi
|
|
+
|
|
+ # Remove `-o $object'.
|
|
+ IFS=" "
|
|
+ for arg
|
|
+ do
|
|
+ case $arg in
|
|
+ -o)
|
|
+ shift
|
|
+ ;;
|
|
+ $object)
|
|
+ shift
|
|
+ ;;
|
|
+ *)
|
|
+ set fnord "$@" "$arg"
|
|
+ shift # fnord
|
|
+ shift # $arg
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+
|
|
+ "$@" -E |
|
|
+ sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
|
|
+ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
|
|
+ sed '$ s: \\$::' > "$tmpdepfile"
|
|
+ rm -f "$depfile"
|
|
+ echo "$object : \\" > "$depfile"
|
|
+ cat < "$tmpdepfile" >> "$depfile"
|
|
+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
|
|
+ rm -f "$tmpdepfile"
|
|
+ ;;
|
|
+
|
|
+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.
|
|
+ "$@" || exit $?
|
|
+ IFS=" "
|
|
+ for arg
|
|
+ do
|
|
+ case "$arg" in
|
|
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
|
|
+ set fnord "$@"
|
|
+ shift
|
|
+ shift
|
|
+ ;;
|
|
+ *)
|
|
+ set fnord "$@" "$arg"
|
|
+ shift
|
|
+ shift
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+ "$@" -E |
|
|
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
|
|
+ rm -f "$depfile"
|
|
+ echo "$object : \\" > "$depfile"
|
|
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
|
|
+ echo " " >> "$depfile"
|
|
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
|
|
+ rm -f "$tmpdepfile"
|
|
+ ;;
|
|
+
|
|
+none)
|
|
+ exec "$@"
|
|
+ ;;
|
|
+
|
|
+*)
|
|
+ echo "Unknown depmode $depmode" 1>&2
|
|
+ exit 1
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+exit 0
|
|
+
|
|
+# Local Variables:
|
|
+# mode: shell-script
|
|
+# sh-indentation: 2
|
|
+# eval: (add-hook 'write-file-hooks 'time-stamp)
|
|
+# time-stamp-start: "scriptversion="
|
|
+# time-stamp-format: "%:y-%02m-%02d.%02H"
|
|
+# time-stamp-end: "$"
|
|
+# End:
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/docs/iscsiuio.8 open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/docs/iscsiuio.8
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/docs/iscsiuio.8 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/docs/iscsiuio.8 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,77 @@
|
|
+.\" Copyright (c) 2010-2012 Broadcom Corporation
|
|
+.\" This is free documentation; you can redistribute it and/or
|
|
+.\" modify it under the terms of the GNU General Public License as
|
|
+.\" published by the Free Software Foundation.
|
|
+.\"
|
|
+.\" bnx2.4,v 0.7.2.1
|
|
+.\"
|
|
+.TH iscsiuio 8 "03/05/2012" "Broadcom Corporation"
|
|
+.\"
|
|
+.\" NAME part
|
|
+.\"
|
|
+.SH NAME
|
|
+iscsiuio \- iSCSI UserSpace I/O driver
|
|
+.\"
|
|
+.\" SYNOPSIS part
|
|
+.\"
|
|
+.SH SYNOPSIS
|
|
+.B iscsiuio
|
|
+.RB [ -d -f -v ]
|
|
+.PP
|
|
+.\"
|
|
+.\" DESCRIPTION part
|
|
+.\"
|
|
+.SH DESCRIPTION
|
|
+iscsiuio is the UserSpace I/O driver for the Broadcom NetXtreme II
|
|
+BCM5706/5708/5709 series PCI/PCI-X Gigabit Ethernet Network Interface Card
|
|
+(NIC) and for the Broadcom NetXtreme II BCM57710/57711/57712/57800/57810/57840
|
|
+series PCI-E 10 Gigabit Ethernet Network Interface Card.
|
|
+The driver has been tested on 2.6.28 kernels and above.
|
|
+.PP
|
|
+Refer to the README.TXT from the driver package on how to
|
|
+compile and install the driver.
|
|
+.PP
|
|
+Refer to various Linux documentations
|
|
+on how to configure network protocol and address.
|
|
+.\"
|
|
+.\" DRIVER DEPENDENCIES part
|
|
+.\"
|
|
+.SH DRIVER DEPENDENCIES
|
|
+
|
|
+.\"
|
|
+.\" PARAMETER part
|
|
+.\"
|
|
+.SH PARAMETERS
|
|
+There are very few parameters when running this application.
|
|
+.TP
|
|
+.BI -d <debug level>
|
|
+This is to enable debug mode where debug messages will be sent to stdout
|
|
+The following debug modes are supported
|
|
+.P
|
|
+.RS
|
|
+DEBUG 4 - Print all messages
|
|
+.P
|
|
+INFO 3 - Print messages needed to follow the uIP code (default)
|
|
+.P
|
|
+WARN 2 - Print warning messages
|
|
+.P
|
|
+ERROR 1 - Only print critical errors
|
|
+.RE
|
|
+.PP
|
|
+.TP
|
|
+.TP
|
|
+.BI -f
|
|
+This is to enable forground mode so that this application doesn't get sent
|
|
+into the background.
|
|
+.PP
|
|
+.TP
|
|
+.BI -v
|
|
+This is to print the version.
|
|
+
|
|
+.\"
|
|
+.\" AUTHOR part
|
|
+.\"
|
|
+.SH AUTHOR
|
|
+Benjamin Li \- benli@broadcom.com
|
|
+.P
|
|
+Eddie Wai \- eddie.wai@broadcom.com
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/include/config.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/include/config.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/include/config.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/include/config.h 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,76 @@
|
|
+/*
|
|
+ * iSCSI Configuration
|
|
+ *
|
|
+ * Copyright (C) 2002 Cisco Systems, Inc.
|
|
+ * maintained by linux-iscsi-devel@lists.sourceforge.net
|
|
+ *
|
|
+ * 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.
|
|
+ *
|
|
+ * See the file COPYING included with this distribution for more details.
|
|
+ */
|
|
+
|
|
+#ifndef CONFIG_H
|
|
+#define CONFIG_H
|
|
+
|
|
+#include <netdb.h>
|
|
+#include "list.h"
|
|
+#include "iscsi_net_util.h"
|
|
+
|
|
+/* ISIDs now have a typed naming authority in them. We use an OUI */
|
|
+#define DRIVER_ISID_0 0x00
|
|
+#define DRIVER_ISID_1 0x02
|
|
+#define DRIVER_ISID_2 0x3D
|
|
+
|
|
+/* max len of interface */
|
|
+#define ISCSI_MAX_IFACE_LEN 65
|
|
+
|
|
+#define ISCSI_HWADDRESS_BUF_SIZE 18
|
|
+#define ISCSI_TRANSPORT_NAME_MAXLEN 16
|
|
+#define ISCSI_MAX_STR_LEN 80
|
|
+
|
|
+typedef struct iface_rec {
|
|
+ struct list_head list;
|
|
+ /* iscsi iface record name */
|
|
+ char name[ISCSI_MAX_IFACE_LEN];
|
|
+ uint32_t iface_num;
|
|
+ /* network layer iface name (eth0) */
|
|
+ char netdev[IFNAMSIZ];
|
|
+ char ipaddress[NI_MAXHOST];
|
|
+ char subnet_mask[NI_MAXHOST];
|
|
+ char gateway[NI_MAXHOST];
|
|
+ char bootproto[ISCSI_MAX_STR_LEN];
|
|
+ char ipv6_linklocal[NI_MAXHOST];
|
|
+ char ipv6_router[NI_MAXHOST];
|
|
+ char ipv6_autocfg[NI_MAXHOST];
|
|
+ char linklocal_autocfg[NI_MAXHOST];
|
|
+ char router_autocfg[NI_MAXHOST];
|
|
+ uint16_t vlan_id;
|
|
+ uint8_t vlan_priority;
|
|
+ char vlan_state[ISCSI_MAX_STR_LEN];
|
|
+ char state[ISCSI_MAX_STR_LEN]; /* 0 = disable,
|
|
+ * 1 = enable */
|
|
+ uint16_t mtu;
|
|
+ uint16_t port;
|
|
+ /*
|
|
+ * TODO: we may have to make this bigger and interconnect
|
|
+ * specific for infinniband
|
|
+ */
|
|
+ char hwaddress[ISCSI_HWADDRESS_BUF_SIZE];
|
|
+ char transport_name[ISCSI_TRANSPORT_NAME_MAXLEN];
|
|
+ /*
|
|
+ * This is only used for boot now, but the iser guys
|
|
+ * can use this for their virtualization idea.
|
|
+ */
|
|
+ char alias[TARGET_NAME_MAXLEN + 1];
|
|
+ char iname[TARGET_NAME_MAXLEN + 1];
|
|
+} iface_rec_t;
|
|
+
|
|
+#endif /* CONFIG_H */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/include/fw_context.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/include/fw_context.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/include/fw_context.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/include/fw_context.h 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,64 @@
|
|
+/*
|
|
+ * 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
|
|
+ *
|
|
+ * Copyright (C) IBM Corporation. 2007
|
|
+ * Author: Doug Maxey <dwm@austin.ibm.com>
|
|
+ * "Prasanna Mumbai" <mumbai.prasanna@gmail.com>
|
|
+ *
|
|
+ */
|
|
+#ifndef FWPARAM_CONTEXT_H_
|
|
+#define FWPARAM_CONTEXT_H_
|
|
+
|
|
+#include <net/if.h>
|
|
+
|
|
+#include "iscsi_proto.h"
|
|
+#include "list.h"
|
|
+#include "auth.h"
|
|
+
|
|
+struct boot_context {
|
|
+ struct list_head list;
|
|
+
|
|
+ /* target settings */
|
|
+ int target_port;
|
|
+ char targetname[TARGET_NAME_MAXLEN + 1];
|
|
+ char target_ipaddr[32];
|
|
+ char chap_name[AUTH_STR_MAX_LEN];
|
|
+ char chap_password[AUTH_STR_MAX_LEN];
|
|
+ char chap_name_in[AUTH_STR_MAX_LEN];
|
|
+ char chap_password_in[AUTH_STR_MAX_LEN];
|
|
+
|
|
+ /* initiator settings */
|
|
+ char isid[10];
|
|
+ char initiatorname[TARGET_NAME_MAXLEN + 1];
|
|
+
|
|
+ /* network settings */
|
|
+ char dhcp[18];
|
|
+ char iface[IF_NAMESIZE];
|
|
+ char mac[18];
|
|
+ char ipaddr[18];
|
|
+ char gateway[18];
|
|
+ char primary_dns[18];
|
|
+ char secondary_dns[18];
|
|
+ char mask[18];
|
|
+ char lun[17];
|
|
+ char vlan[15];
|
|
+};
|
|
+
|
|
+extern int fw_get_entry(struct boot_context *context);
|
|
+extern void fw_print_entry(struct boot_context *context);
|
|
+extern int fw_get_targets(struct list_head *list);
|
|
+extern void fw_free_targets(struct list_head *list);
|
|
+
|
|
+#endif /* FWPARAM_CONTEXT_H_ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/include/iscsi_if.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/include/iscsi_if.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/include/iscsi_if.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/include/iscsi_if.h 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,473 @@
|
|
+/*
|
|
+ * iSCSI User/Kernel Shares (Defines, Constants, Protocol definitions, etc)
|
|
+ *
|
|
+ * Copyright (C) 2005 Dmitry Yusupov
|
|
+ * Copyright (C) 2005 Alex Aizman
|
|
+ * maintained by open-iscsi@googlegroups.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.
|
|
+ *
|
|
+ * See the file COPYING included with this distribution for more details.
|
|
+ */
|
|
+
|
|
+#ifndef ISCSI_IF_H
|
|
+#define ISCSI_IF_H
|
|
+
|
|
+#include "iscsi_proto.h"
|
|
+#include <netinet/in.h>
|
|
+//#include <linux/in6.h>
|
|
+
|
|
+#define ISCSI_NL_GRP_ISCSID 1
|
|
+#define ISCSI_NL_GRP_UIP 2
|
|
+
|
|
+#define UEVENT_BASE 10
|
|
+#define KEVENT_BASE 100
|
|
+#define ISCSI_ERR_BASE 1000
|
|
+
|
|
+enum iscsi_uevent_e {
|
|
+ ISCSI_UEVENT_UNKNOWN = 0,
|
|
+
|
|
+ /* down events */
|
|
+ ISCSI_UEVENT_CREATE_SESSION = UEVENT_BASE + 1,
|
|
+ ISCSI_UEVENT_DESTROY_SESSION = UEVENT_BASE + 2,
|
|
+ ISCSI_UEVENT_CREATE_CONN = UEVENT_BASE + 3,
|
|
+ ISCSI_UEVENT_DESTROY_CONN = UEVENT_BASE + 4,
|
|
+ ISCSI_UEVENT_BIND_CONN = UEVENT_BASE + 5,
|
|
+ ISCSI_UEVENT_SET_PARAM = UEVENT_BASE + 6,
|
|
+ ISCSI_UEVENT_START_CONN = UEVENT_BASE + 7,
|
|
+ ISCSI_UEVENT_STOP_CONN = UEVENT_BASE + 8,
|
|
+ ISCSI_UEVENT_SEND_PDU = UEVENT_BASE + 9,
|
|
+ ISCSI_UEVENT_GET_STATS = UEVENT_BASE + 10,
|
|
+ ISCSI_UEVENT_GET_PARAM = UEVENT_BASE + 11,
|
|
+
|
|
+ ISCSI_UEVENT_TRANSPORT_EP_CONNECT = UEVENT_BASE + 12,
|
|
+ ISCSI_UEVENT_TRANSPORT_EP_POLL = UEVENT_BASE + 13,
|
|
+ ISCSI_UEVENT_TRANSPORT_EP_DISCONNECT = UEVENT_BASE + 14,
|
|
+
|
|
+ ISCSI_UEVENT_TGT_DSCVR = UEVENT_BASE + 15,
|
|
+ ISCSI_UEVENT_SET_HOST_PARAM = UEVENT_BASE + 16,
|
|
+ ISCSI_UEVENT_UNBIND_SESSION = UEVENT_BASE + 17,
|
|
+ ISCSI_UEVENT_CREATE_BOUND_SESSION = UEVENT_BASE + 18,
|
|
+ ISCSI_UEVENT_TRANSPORT_EP_CONNECT_THROUGH_HOST = UEVENT_BASE + 19,
|
|
+
|
|
+ ISCSI_UEVENT_PATH_UPDATE = UEVENT_BASE + 20,
|
|
+
|
|
+ /* up events */
|
|
+ ISCSI_KEVENT_RECV_PDU = KEVENT_BASE + 1,
|
|
+ ISCSI_KEVENT_CONN_ERROR = KEVENT_BASE + 2,
|
|
+ ISCSI_KEVENT_IF_ERROR = KEVENT_BASE + 3,
|
|
+ ISCSI_KEVENT_DESTROY_SESSION = KEVENT_BASE + 4,
|
|
+ ISCSI_KEVENT_UNBIND_SESSION = KEVENT_BASE + 5,
|
|
+ ISCSI_KEVENT_CREATE_SESSION = KEVENT_BASE + 6,
|
|
+
|
|
+ ISCSI_KEVENT_PATH_REQ = KEVENT_BASE + 7,
|
|
+ ISCSI_KEVENT_IF_DOWN = KEVENT_BASE + 8,
|
|
+};
|
|
+
|
|
+enum iscsi_tgt_dscvr {
|
|
+ ISCSI_TGT_DSCVR_SEND_TARGETS = 1,
|
|
+ ISCSI_TGT_DSCVR_ISNS = 2,
|
|
+ ISCSI_TGT_DSCVR_SLP = 3,
|
|
+};
|
|
+
|
|
+struct iscsi_uevent {
|
|
+ uint32_t type; /* k/u events type */
|
|
+ uint32_t iferror; /* carries interface or resource errors */
|
|
+ uint64_t transport_handle;
|
|
+
|
|
+ union {
|
|
+ /* messages u -> k */
|
|
+ struct msg_create_session {
|
|
+ uint32_t initial_cmdsn;
|
|
+ uint16_t cmds_max;
|
|
+ uint16_t queue_depth;
|
|
+ } c_session;
|
|
+ struct msg_create_bound_session {
|
|
+ uint64_t ep_handle;
|
|
+ uint32_t initial_cmdsn;
|
|
+ uint16_t cmds_max;
|
|
+ uint16_t queue_depth;
|
|
+ } c_bound_session;
|
|
+ struct msg_destroy_session {
|
|
+ uint32_t sid;
|
|
+ } d_session;
|
|
+ struct msg_create_conn {
|
|
+ uint32_t sid;
|
|
+ uint32_t cid;
|
|
+ } c_conn;
|
|
+ struct msg_bind_conn {
|
|
+ uint32_t sid;
|
|
+ uint32_t cid;
|
|
+ uint64_t transport_eph;
|
|
+ uint32_t is_leading;
|
|
+ } b_conn;
|
|
+ struct msg_destroy_conn {
|
|
+ uint32_t sid;
|
|
+ uint32_t cid;
|
|
+ } d_conn;
|
|
+ struct msg_send_pdu {
|
|
+ uint32_t sid;
|
|
+ uint32_t cid;
|
|
+ uint32_t hdr_size;
|
|
+ uint32_t data_size;
|
|
+ } send_pdu;
|
|
+ struct msg_set_param {
|
|
+ uint32_t sid;
|
|
+ uint32_t cid;
|
|
+ uint32_t param; /* enum iscsi_param */
|
|
+ uint32_t len;
|
|
+ } set_param;
|
|
+ struct msg_start_conn {
|
|
+ uint32_t sid;
|
|
+ uint32_t cid;
|
|
+ } start_conn;
|
|
+ struct msg_stop_conn {
|
|
+ uint32_t sid;
|
|
+ uint32_t cid;
|
|
+ uint64_t conn_handle;
|
|
+ uint32_t flag;
|
|
+ } stop_conn;
|
|
+ struct msg_get_stats {
|
|
+ uint32_t sid;
|
|
+ uint32_t cid;
|
|
+ } get_stats;
|
|
+ struct msg_transport_connect {
|
|
+ uint32_t non_blocking;
|
|
+ } ep_connect;
|
|
+ struct msg_transport_connect_through_host {
|
|
+ uint32_t host_no;
|
|
+ uint32_t non_blocking;
|
|
+ } ep_connect_through_host;
|
|
+ struct msg_transport_poll {
|
|
+ uint64_t ep_handle;
|
|
+ uint32_t timeout_ms;
|
|
+ } ep_poll;
|
|
+ struct msg_transport_disconnect {
|
|
+ uint64_t ep_handle;
|
|
+ } ep_disconnect;
|
|
+ struct msg_tgt_dscvr {
|
|
+ enum iscsi_tgt_dscvr type;
|
|
+ uint32_t host_no;
|
|
+ /*
|
|
+ * enable = 1 to establish a new connection
|
|
+ * with the server. enable = 0 to disconnect
|
|
+ * from the server. Used primarily to switch
|
|
+ * from one iSNS server to another.
|
|
+ */
|
|
+ uint32_t enable;
|
|
+ } tgt_dscvr;
|
|
+ struct msg_set_host_param {
|
|
+ uint32_t host_no;
|
|
+ uint32_t param; /* enum iscsi_host_param */
|
|
+ uint32_t len;
|
|
+ } set_host_param;
|
|
+ struct msg_set_path {
|
|
+ uint32_t host_no;
|
|
+ } set_path;
|
|
+ } u;
|
|
+ union {
|
|
+ /* messages k -> u */
|
|
+ int retcode;
|
|
+ struct msg_create_session_ret {
|
|
+ uint32_t sid;
|
|
+ uint32_t host_no;
|
|
+ } c_session_ret;
|
|
+ struct msg_create_conn_ret {
|
|
+ uint32_t sid;
|
|
+ uint32_t cid;
|
|
+ } c_conn_ret;
|
|
+ struct msg_unbind_session {
|
|
+ uint32_t sid;
|
|
+ uint32_t host_no;
|
|
+ } unbind_session;
|
|
+ struct msg_recv_req {
|
|
+ uint32_t sid;
|
|
+ uint32_t cid;
|
|
+ uint64_t recv_handle;
|
|
+ } recv_req;
|
|
+ struct msg_conn_error {
|
|
+ uint32_t sid;
|
|
+ uint32_t cid;
|
|
+ uint32_t error; /* enum iscsi_err */
|
|
+ } connerror;
|
|
+ struct msg_session_destroyed {
|
|
+ uint32_t host_no;
|
|
+ uint32_t sid;
|
|
+ } d_session;
|
|
+ struct msg_transport_connect_ret {
|
|
+ uint64_t handle;
|
|
+ } ep_connect_ret;
|
|
+ struct msg_req_path {
|
|
+ uint32_t host_no;
|
|
+ } req_path;
|
|
+ struct msg_notify_if_down {
|
|
+ uint32_t host_no;
|
|
+ } notify_if_down;
|
|
+ } r;
|
|
+} __attribute__ ((aligned (sizeof(uint64_t))));
|
|
+
|
|
+/*
|
|
+ * To keep the struct iscsi_uevent size the same for userspace code
|
|
+ * compatibility, the main structure for ISCSI_UEVENT_PATH_UPDATE and
|
|
+ * ISCSI_KEVENT_PATH_REQ is defined separately and comes after the
|
|
+ * struct iscsi_uevent in the NETLINK_ISCSI message.
|
|
+ */
|
|
+struct iscsi_path {
|
|
+ uint64_t handle;
|
|
+ uint8_t mac_addr[6];
|
|
+ uint8_t mac_addr_old[6];
|
|
+ uint32_t ip_addr_len; /* 4 or 16 */
|
|
+ union {
|
|
+ struct in_addr v4_addr;
|
|
+ struct in6_addr v6_addr;
|
|
+ } src;
|
|
+ union {
|
|
+ struct in_addr v4_addr;
|
|
+ struct in6_addr v6_addr;
|
|
+ } dst;
|
|
+ uint16_t vlan_id;
|
|
+ uint16_t pmtu;
|
|
+} __attribute__ ((aligned (sizeof(uint64_t))));
|
|
+
|
|
+
|
|
+/*
|
|
+ * Common error codes
|
|
+ */
|
|
+enum iscsi_err {
|
|
+ ISCSI_OK = 0,
|
|
+
|
|
+ ISCSI_ERR_DATASN = ISCSI_ERR_BASE + 1,
|
|
+ ISCSI_ERR_DATA_OFFSET = ISCSI_ERR_BASE + 2,
|
|
+ ISCSI_ERR_MAX_CMDSN = ISCSI_ERR_BASE + 3,
|
|
+ ISCSI_ERR_EXP_CMDSN = ISCSI_ERR_BASE + 4,
|
|
+ ISCSI_ERR_BAD_OPCODE = ISCSI_ERR_BASE + 5,
|
|
+ ISCSI_ERR_DATALEN = ISCSI_ERR_BASE + 6,
|
|
+ ISCSI_ERR_AHSLEN = ISCSI_ERR_BASE + 7,
|
|
+ ISCSI_ERR_PROTO = ISCSI_ERR_BASE + 8,
|
|
+ ISCSI_ERR_LUN = ISCSI_ERR_BASE + 9,
|
|
+ ISCSI_ERR_BAD_ITT = ISCSI_ERR_BASE + 10,
|
|
+ ISCSI_ERR_CONN_FAILED = ISCSI_ERR_BASE + 11,
|
|
+ ISCSI_ERR_R2TSN = ISCSI_ERR_BASE + 12,
|
|
+ ISCSI_ERR_SESSION_FAILED = ISCSI_ERR_BASE + 13,
|
|
+ ISCSI_ERR_HDR_DGST = ISCSI_ERR_BASE + 14,
|
|
+ ISCSI_ERR_DATA_DGST = ISCSI_ERR_BASE + 15,
|
|
+ ISCSI_ERR_PARAM_NOT_FOUND = ISCSI_ERR_BASE + 16,
|
|
+ ISCSI_ERR_NO_SCSI_CMD = ISCSI_ERR_BASE + 17,
|
|
+ ISCSI_ERR_INVALID_HOST = ISCSI_ERR_BASE + 18,
|
|
+ ISCSI_ERR_XMIT_FAILED = ISCSI_ERR_BASE + 19,
|
|
+};
|
|
+
|
|
+/*
|
|
+ * iSCSI Parameters (RFC3720)
|
|
+ */
|
|
+enum iscsi_param {
|
|
+ /* passed in using netlink set param */
|
|
+ ISCSI_PARAM_MAX_RECV_DLENGTH,
|
|
+ ISCSI_PARAM_MAX_XMIT_DLENGTH,
|
|
+ ISCSI_PARAM_HDRDGST_EN,
|
|
+ ISCSI_PARAM_DATADGST_EN,
|
|
+ ISCSI_PARAM_INITIAL_R2T_EN,
|
|
+ ISCSI_PARAM_MAX_R2T,
|
|
+ ISCSI_PARAM_IMM_DATA_EN,
|
|
+ ISCSI_PARAM_FIRST_BURST,
|
|
+ ISCSI_PARAM_MAX_BURST,
|
|
+ ISCSI_PARAM_PDU_INORDER_EN,
|
|
+ ISCSI_PARAM_DATASEQ_INORDER_EN,
|
|
+ ISCSI_PARAM_ERL,
|
|
+ ISCSI_PARAM_IFMARKER_EN,
|
|
+ ISCSI_PARAM_OFMARKER_EN,
|
|
+ ISCSI_PARAM_EXP_STATSN,
|
|
+ ISCSI_PARAM_TARGET_NAME,
|
|
+ ISCSI_PARAM_TPGT,
|
|
+ ISCSI_PARAM_PERSISTENT_ADDRESS,
|
|
+ ISCSI_PARAM_PERSISTENT_PORT,
|
|
+ ISCSI_PARAM_SESS_RECOVERY_TMO,
|
|
+
|
|
+ /* pased in through bind conn using transport_fd */
|
|
+ ISCSI_PARAM_CONN_PORT,
|
|
+ ISCSI_PARAM_CONN_ADDRESS,
|
|
+
|
|
+ ISCSI_PARAM_USERNAME,
|
|
+ ISCSI_PARAM_USERNAME_IN,
|
|
+ ISCSI_PARAM_PASSWORD,
|
|
+ ISCSI_PARAM_PASSWORD_IN,
|
|
+
|
|
+ ISCSI_PARAM_FAST_ABORT,
|
|
+ ISCSI_PARAM_ABORT_TMO,
|
|
+ ISCSI_PARAM_LU_RESET_TMO,
|
|
+ ISCSI_PARAM_HOST_RESET_TMO,
|
|
+
|
|
+ ISCSI_PARAM_PING_TMO,
|
|
+ ISCSI_PARAM_RECV_TMO,
|
|
+
|
|
+ ISCSI_PARAM_IFACE_NAME,
|
|
+ ISCSI_PARAM_ISID,
|
|
+ ISCSI_PARAM_INITIATOR_NAME,
|
|
+ /* must always be last */
|
|
+ ISCSI_PARAM_MAX,
|
|
+};
|
|
+
|
|
+#define ISCSI_MAX_RECV_DLENGTH (1ULL << ISCSI_PARAM_MAX_RECV_DLENGTH)
|
|
+#define ISCSI_MAX_XMIT_DLENGTH (1ULL << ISCSI_PARAM_MAX_XMIT_DLENGTH)
|
|
+#define ISCSI_HDRDGST_EN (1ULL << ISCSI_PARAM_HDRDGST_EN)
|
|
+#define ISCSI_DATADGST_EN (1ULL << ISCSI_PARAM_DATADGST_EN)
|
|
+#define ISCSI_INITIAL_R2T_EN (1ULL << ISCSI_PARAM_INITIAL_R2T_EN)
|
|
+#define ISCSI_MAX_R2T (1ULL << ISCSI_PARAM_MAX_R2T)
|
|
+#define ISCSI_IMM_DATA_EN (1ULL << ISCSI_PARAM_IMM_DATA_EN)
|
|
+#define ISCSI_FIRST_BURST (1ULL << ISCSI_PARAM_FIRST_BURST)
|
|
+#define ISCSI_MAX_BURST (1ULL << ISCSI_PARAM_MAX_BURST)
|
|
+#define ISCSI_PDU_INORDER_EN (1ULL << ISCSI_PARAM_PDU_INORDER_EN)
|
|
+#define ISCSI_DATASEQ_INORDER_EN (1ULL << ISCSI_PARAM_DATASEQ_INORDER_EN)
|
|
+#define ISCSI_ERL (1ULL << ISCSI_PARAM_ERL)
|
|
+#define ISCSI_IFMARKER_EN (1ULL << ISCSI_PARAM_IFMARKER_EN)
|
|
+#define ISCSI_OFMARKER_EN (1ULL << ISCSI_PARAM_OFMARKER_EN)
|
|
+#define ISCSI_EXP_STATSN (1ULL << ISCSI_PARAM_EXP_STATSN)
|
|
+#define ISCSI_TARGET_NAME (1ULL << ISCSI_PARAM_TARGET_NAME)
|
|
+#define ISCSI_TPGT (1ULL << ISCSI_PARAM_TPGT)
|
|
+#define ISCSI_PERSISTENT_ADDRESS (1ULL << ISCSI_PARAM_PERSISTENT_ADDRESS)
|
|
+#define ISCSI_PERSISTENT_PORT (1ULL << ISCSI_PARAM_PERSISTENT_PORT)
|
|
+#define ISCSI_SESS_RECOVERY_TMO (1ULL << ISCSI_PARAM_SESS_RECOVERY_TMO)
|
|
+#define ISCSI_CONN_PORT (1ULL << ISCSI_PARAM_CONN_PORT)
|
|
+#define ISCSI_CONN_ADDRESS (1ULL << ISCSI_PARAM_CONN_ADDRESS)
|
|
+#define ISCSI_USERNAME (1ULL << ISCSI_PARAM_USERNAME)
|
|
+#define ISCSI_USERNAME_IN (1ULL << ISCSI_PARAM_USERNAME_IN)
|
|
+#define ISCSI_PASSWORD (1ULL << ISCSI_PARAM_PASSWORD)
|
|
+#define ISCSI_PASSWORD_IN (1ULL << ISCSI_PARAM_PASSWORD_IN)
|
|
+#define ISCSI_FAST_ABORT (1ULL << ISCSI_PARAM_FAST_ABORT)
|
|
+#define ISCSI_ABORT_TMO (1ULL << ISCSI_PARAM_ABORT_TMO)
|
|
+#define ISCSI_LU_RESET_TMO (1ULL << ISCSI_PARAM_LU_RESET_TMO)
|
|
+#define ISCSI_HOST_RESET_TMO (1ULL << ISCSI_PARAM_HOST_RESET_TMO)
|
|
+#define ISCSI_PING_TMO (1ULL << ISCSI_PARAM_PING_TMO)
|
|
+#define ISCSI_RECV_TMO (1ULL << ISCSI_PARAM_RECV_TMO)
|
|
+#define ISCSI_IFACE_NAME (1ULL << ISCSI_PARAM_IFACE_NAME)
|
|
+#define ISCSI_ISID (1ULL << ISCSI_PARAM_ISID)
|
|
+#define ISCSI_INITIATOR_NAME (1ULL << ISCSI_PARAM_INITIATOR_NAME)
|
|
+
|
|
+/* iSCSI HBA params */
|
|
+enum iscsi_host_param {
|
|
+ ISCSI_HOST_PARAM_HWADDRESS,
|
|
+ ISCSI_HOST_PARAM_INITIATOR_NAME,
|
|
+ ISCSI_HOST_PARAM_NETDEV_NAME,
|
|
+ ISCSI_HOST_PARAM_IPADDRESS,
|
|
+ ISCSI_HOST_PARAM_MAX,
|
|
+};
|
|
+
|
|
+#define ISCSI_HOST_HWADDRESS (1ULL << ISCSI_HOST_PARAM_HWADDRESS)
|
|
+#define ISCSI_HOST_INITIATOR_NAME (1ULL << ISCSI_HOST_PARAM_INITIATOR_NAME)
|
|
+#define ISCSI_HOST_NETDEV_NAME (1ULL << ISCSI_HOST_PARAM_NETDEV_NAME)
|
|
+#define ISCSI_HOST_IPADDRESS (1ULL << ISCSI_HOST_PARAM_IPADDRESS)
|
|
+
|
|
+#define iscsi_ptr(_handle) ((void*)(unsigned long)_handle)
|
|
+#define iscsi_handle(_ptr) ((uint64_t)(unsigned long)_ptr)
|
|
+
|
|
+/*
|
|
+ * These flags presents iSCSI Data-Path capabilities.
|
|
+ */
|
|
+#define CAP_RECOVERY_L0 0x1
|
|
+#define CAP_RECOVERY_L1 0x2
|
|
+#define CAP_RECOVERY_L2 0x4
|
|
+#define CAP_MULTI_R2T 0x8
|
|
+#define CAP_HDRDGST 0x10
|
|
+#define CAP_DATADGST 0x20
|
|
+#define CAP_MULTI_CONN 0x40
|
|
+#define CAP_TEXT_NEGO 0x80
|
|
+#define CAP_MARKERS 0x100
|
|
+#define CAP_FW_DB 0x200
|
|
+#define CAP_SENDTARGETS_OFFLOAD 0x400 /* offload discovery process */
|
|
+#define CAP_DATA_PATH_OFFLOAD 0x800 /* offload entire IO path */
|
|
+#define CAP_DIGEST_OFFLOAD 0x1000 /* offload hdr and data digests */
|
|
+#define CAP_PADDING_OFFLOAD 0x2000 /* offload padding insertion, removal,
|
|
+ and verification */
|
|
+
|
|
+/*
|
|
+ * These flags describes reason of stop_conn() call
|
|
+ */
|
|
+#define STOP_CONN_TERM 0x1
|
|
+#define STOP_CONN_SUSPEND 0x2
|
|
+#define STOP_CONN_RECOVER 0x3
|
|
+
|
|
+#define ISCSI_STATS_CUSTOM_MAX 32
|
|
+#define ISCSI_STATS_CUSTOM_DESC_MAX 64
|
|
+struct iscsi_stats_custom {
|
|
+ char desc[ISCSI_STATS_CUSTOM_DESC_MAX];
|
|
+ uint64_t value;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * struct iscsi_stats - iSCSI Statistics (iSCSI MIB)
|
|
+ *
|
|
+ * Note: this structure contains counters collected on per-connection basis.
|
|
+ */
|
|
+struct iscsi_stats {
|
|
+ /* octets */
|
|
+ uint64_t txdata_octets;
|
|
+ uint64_t rxdata_octets;
|
|
+
|
|
+ /* xmit pdus */
|
|
+ uint32_t noptx_pdus;
|
|
+ uint32_t scsicmd_pdus;
|
|
+ uint32_t tmfcmd_pdus;
|
|
+ uint32_t login_pdus;
|
|
+ uint32_t text_pdus;
|
|
+ uint32_t dataout_pdus;
|
|
+ uint32_t logout_pdus;
|
|
+ uint32_t snack_pdus;
|
|
+
|
|
+ /* recv pdus */
|
|
+ uint32_t noprx_pdus;
|
|
+ uint32_t scsirsp_pdus;
|
|
+ uint32_t tmfrsp_pdus;
|
|
+ uint32_t textrsp_pdus;
|
|
+ uint32_t datain_pdus;
|
|
+ uint32_t logoutrsp_pdus;
|
|
+ uint32_t r2t_pdus;
|
|
+ uint32_t async_pdus;
|
|
+ uint32_t rjt_pdus;
|
|
+
|
|
+ /* errors */
|
|
+ uint32_t digest_err;
|
|
+ uint32_t timeout_err;
|
|
+
|
|
+ /*
|
|
+ * iSCSI Custom Statistics support, i.e. Transport could
|
|
+ * extend existing MIB statistics with its own specific statistics
|
|
+ * up to ISCSI_STATS_CUSTOM_MAX
|
|
+ */
|
|
+ uint32_t custom_length;
|
|
+ struct iscsi_stats_custom custom[0]
|
|
+ __attribute__ ((aligned (sizeof(uint64_t))));
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Network interface configuration
|
|
+ */
|
|
+enum iscsi_net_param {
|
|
+ ISCSI_NET_PARAM_UNKNOWN = 0x00,
|
|
+ ISCSI_NET_PARAM_MAC_ADDR = ISCSI_NET_PARAM_UNKNOWN + 1,
|
|
+ ISCSI_NET_PARAM_IPV4_ADDR = ISCSI_NET_PARAM_UNKNOWN + 2,
|
|
+ ISCSI_NET_PARAM_IPV6_ADDR = ISCSI_NET_PARAM_UNKNOWN + 3,
|
|
+ ISCSI_NET_PARAM_IPV4_NETMASK = ISCSI_NET_PARAM_UNKNOWN + 4,
|
|
+ ISCSI_NET_PARAM_IPV6_NETMASK = ISCSI_NET_PARAM_UNKNOWN + 5,
|
|
+ ISCSI_NET_PARAM_IPV4_GATEWAY = ISCSI_NET_PARAM_UNKNOWN + 6,
|
|
+ ISCSI_NET_PARAM_IPV6_GATEWAY = ISCSI_NET_PARAM_UNKNOWN + 7,
|
|
+ ISCSI_NET_PARAM_BOOTPROTO = ISCSI_NET_PARAM_UNKNOWN + 8,
|
|
+ ISCSI_NET_PARAM_IPV6_AUTO_PARAM = ISCSI_NET_PARAM_UNKNOWN + 9,
|
|
+ ISCSI_NET_PARAM_MTU = ISCSI_NET_PARAM_UNKNOWN + 10,
|
|
+ ISCSI_NET_PARAM_VLAN = ISCSI_NET_PARAM_UNKNOWN + 11,
|
|
+};
|
|
+
|
|
+struct iscsi_net_config {
|
|
+ uint32_t param;
|
|
+ uint32_t length;
|
|
+ uint8_t value[1];
|
|
+};
|
|
+
|
|
+#endif
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/include/iscsi_net_util.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/include/iscsi_net_util.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/include/iscsi_net_util.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/include/iscsi_net_util.h 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,11 @@
|
|
+#ifndef __ISCSI_NET_UTIL_h__
|
|
+#define __ISCSI_NET_UTIL_h__
|
|
+
|
|
+#define ISCSI_HWADDRESS_BUF_SIZE 18
|
|
+
|
|
+extern int net_get_transport_name_from_netdev(char *netdev, char *transport);
|
|
+extern int net_get_netdev_from_hwaddress(char *hwaddress, char *netdev);
|
|
+extern int net_setup_netdev(char *netdev, char *local_ip, char *mask,
|
|
+ char *gateway, char *remote_ip, int needs_bringup);
|
|
+
|
|
+#endif
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/include/iscsi_proto.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/include/iscsi_proto.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/include/iscsi_proto.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/include/iscsi_proto.h 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,637 @@
|
|
+/*
|
|
+ * RFC 3720 (iSCSI) protocol data types
|
|
+ *
|
|
+ * Copyright (C) 2005 Dmitry Yusupov
|
|
+ * Copyright (C) 2005 Alex Aizman
|
|
+ * maintained by open-iscsi@googlegroups.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.
|
|
+ *
|
|
+ * See the file COPYING included with this distribution for more details.
|
|
+ */
|
|
+
|
|
+#ifndef ISCSI_PROTO_H
|
|
+#define ISCSI_PROTO_H
|
|
+
|
|
+#ifndef __KERNEL__
|
|
+#include <stdint.h>
|
|
+#endif
|
|
+#include <linux/types.h>
|
|
+
|
|
+#define ISCSI_DRAFT20_VERSION 0x00
|
|
+
|
|
+/* default iSCSI listen port for incoming connections */
|
|
+#define ISCSI_LISTEN_PORT 3260
|
|
+
|
|
+/* Padding word length */
|
|
+#define ISCSI_PAD_LEN 4
|
|
+
|
|
+/*
|
|
+ * useful common(control and data pathes) macro
|
|
+ */
|
|
+#define ntoh24(p) (((p)[0] << 16) | ((p)[1] << 8) | ((p)[2]))
|
|
+#define hton24(p, v) { \
|
|
+ p[0] = (((v) >> 16) & 0xFF); \
|
|
+ p[1] = (((v) >> 8) & 0xFF); \
|
|
+ p[2] = ((v) & 0xFF); \
|
|
+}
|
|
+#define zero_data(p) {p[0]=0;p[1]=0;p[2]=0;}
|
|
+
|
|
+/*
|
|
+ * If running svn modules we may need to define these.
|
|
+ * This should not go upstream since this is already properly defined there
|
|
+ */
|
|
+#ifdef __CHECKER__
|
|
+#define __bitwise__ __attribute__((bitwise))
|
|
+#else
|
|
+#define __bitwise__
|
|
+#endif
|
|
+#ifdef __CHECK_ENDIAN__
|
|
+#define __bitwise __bitwise__
|
|
+#else
|
|
+#define __bitwise
|
|
+#endif
|
|
+
|
|
+/* initiator tags; opaque for target */
|
|
+typedef uint32_t __bitwise__ itt_t;
|
|
+/* below makes sense only for initiator that created this tag */
|
|
+#define build_itt(itt, age) ((__force itt_t)\
|
|
+ ((itt) | ((age) << ISCSI_AGE_SHIFT)))
|
|
+#define get_itt(itt) ((__force uint32_t)(itt_t)(itt) & ISCSI_ITT_MASK)
|
|
+#define RESERVED_ITT ((__force itt_t)0xffffffff)
|
|
+
|
|
+/*
|
|
+ * iSCSI Template Message Header
|
|
+ */
|
|
+struct iscsi_hdr {
|
|
+ uint8_t opcode;
|
|
+ uint8_t flags; /* Final bit */
|
|
+ uint8_t rsvd2[2];
|
|
+ uint8_t hlength; /* AHSs total length */
|
|
+ uint8_t dlength[3]; /* Data length */
|
|
+ uint8_t lun[8];
|
|
+ itt_t itt; /* Initiator Task Tag, opaque for target */
|
|
+ __be32 ttt; /* Target Task Tag */
|
|
+ __be32 statsn;
|
|
+ __be32 exp_statsn;
|
|
+ __be32 max_statsn;
|
|
+ uint8_t other[12];
|
|
+};
|
|
+
|
|
+/************************* RFC 3720 Begin *****************************/
|
|
+
|
|
+#define ISCSI_RESERVED_TAG 0xffffffff
|
|
+
|
|
+/* Opcode encoding bits */
|
|
+#define ISCSI_OP_RETRY 0x80
|
|
+#define ISCSI_OP_IMMEDIATE 0x40
|
|
+#define ISCSI_OPCODE_MASK 0x3F
|
|
+
|
|
+/* Initiator Opcode values */
|
|
+#define ISCSI_OP_NOOP_OUT 0x00
|
|
+#define ISCSI_OP_SCSI_CMD 0x01
|
|
+#define ISCSI_OP_SCSI_TMFUNC 0x02
|
|
+#define ISCSI_OP_LOGIN 0x03
|
|
+#define ISCSI_OP_TEXT 0x04
|
|
+#define ISCSI_OP_SCSI_DATA_OUT 0x05
|
|
+#define ISCSI_OP_LOGOUT 0x06
|
|
+#define ISCSI_OP_SNACK 0x10
|
|
+
|
|
+#define ISCSI_OP_VENDOR1_CMD 0x1c
|
|
+#define ISCSI_OP_VENDOR2_CMD 0x1d
|
|
+#define ISCSI_OP_VENDOR3_CMD 0x1e
|
|
+#define ISCSI_OP_VENDOR4_CMD 0x1f
|
|
+
|
|
+/* Target Opcode values */
|
|
+#define ISCSI_OP_NOOP_IN 0x20
|
|
+#define ISCSI_OP_SCSI_CMD_RSP 0x21
|
|
+#define ISCSI_OP_SCSI_TMFUNC_RSP 0x22
|
|
+#define ISCSI_OP_LOGIN_RSP 0x23
|
|
+#define ISCSI_OP_TEXT_RSP 0x24
|
|
+#define ISCSI_OP_SCSI_DATA_IN 0x25
|
|
+#define ISCSI_OP_LOGOUT_RSP 0x26
|
|
+#define ISCSI_OP_R2T 0x31
|
|
+#define ISCSI_OP_ASYNC_EVENT 0x32
|
|
+#define ISCSI_OP_REJECT 0x3f
|
|
+
|
|
+struct iscsi_ahs_hdr {
|
|
+ __be16 ahslength;
|
|
+ uint8_t ahstype;
|
|
+ uint8_t ahspec[5];
|
|
+};
|
|
+
|
|
+#define ISCSI_AHSTYPE_CDB 1
|
|
+#define ISCSI_AHSTYPE_RLENGTH 2
|
|
+#define ISCSI_CDB_SIZE 16
|
|
+
|
|
+/* iSCSI PDU Header */
|
|
+struct iscsi_cmd {
|
|
+ uint8_t opcode;
|
|
+ uint8_t flags;
|
|
+ __be16 rsvd2;
|
|
+ uint8_t hlength;
|
|
+ uint8_t dlength[3];
|
|
+ uint8_t lun[8];
|
|
+ itt_t itt; /* Initiator Task Tag */
|
|
+ __be32 data_length;
|
|
+ __be32 cmdsn;
|
|
+ __be32 exp_statsn;
|
|
+ uint8_t cdb[ISCSI_CDB_SIZE]; /* SCSI Command Block */
|
|
+ /* Additional Data (Command Dependent) */
|
|
+};
|
|
+
|
|
+/* Command PDU flags */
|
|
+#define ISCSI_FLAG_CMD_FINAL 0x80
|
|
+#define ISCSI_FLAG_CMD_READ 0x40
|
|
+#define ISCSI_FLAG_CMD_WRITE 0x20
|
|
+#define ISCSI_FLAG_CMD_ATTR_MASK 0x07 /* 3 bits */
|
|
+
|
|
+/* SCSI Command Attribute values */
|
|
+#define ISCSI_ATTR_UNTAGGED 0
|
|
+#define ISCSI_ATTR_SIMPLE 1
|
|
+#define ISCSI_ATTR_ORDERED 2
|
|
+#define ISCSI_ATTR_HEAD_OF_QUEUE 3
|
|
+#define ISCSI_ATTR_ACA 4
|
|
+
|
|
+struct iscsi_rlength_ahdr {
|
|
+ __be16 ahslength;
|
|
+ uint8_t ahstype;
|
|
+ uint8_t reserved;
|
|
+ __be32 read_length;
|
|
+};
|
|
+
|
|
+/* Extended CDB AHS */
|
|
+struct iscsi_ecdb_ahdr {
|
|
+ __be16 ahslength; /* CDB length - 15, including reserved byte */
|
|
+ uint8_t ahstype;
|
|
+ uint8_t reserved;
|
|
+ /* 4-byte aligned extended CDB spillover */
|
|
+ uint8_t ecdb[260 - ISCSI_CDB_SIZE];
|
|
+};
|
|
+
|
|
+/* SCSI Response Header */
|
|
+struct iscsi_cmd_rsp {
|
|
+ uint8_t opcode;
|
|
+ uint8_t flags;
|
|
+ uint8_t response;
|
|
+ uint8_t cmd_status;
|
|
+ uint8_t hlength;
|
|
+ uint8_t dlength[3];
|
|
+ uint8_t rsvd[8];
|
|
+ itt_t itt; /* Initiator Task Tag */
|
|
+ __be32 rsvd1;
|
|
+ __be32 statsn;
|
|
+ __be32 exp_cmdsn;
|
|
+ __be32 max_cmdsn;
|
|
+ __be32 exp_datasn;
|
|
+ __be32 bi_residual_count;
|
|
+ __be32 residual_count;
|
|
+ /* Response or Sense Data (optional) */
|
|
+};
|
|
+
|
|
+/* Command Response PDU flags */
|
|
+#define ISCSI_FLAG_CMD_BIDI_OVERFLOW 0x10
|
|
+#define ISCSI_FLAG_CMD_BIDI_UNDERFLOW 0x08
|
|
+#define ISCSI_FLAG_CMD_OVERFLOW 0x04
|
|
+#define ISCSI_FLAG_CMD_UNDERFLOW 0x02
|
|
+
|
|
+/* iSCSI Status values. Valid if Rsp Selector bit is not set */
|
|
+#define ISCSI_STATUS_CMD_COMPLETED 0
|
|
+#define ISCSI_STATUS_TARGET_FAILURE 1
|
|
+#define ISCSI_STATUS_SUBSYS_FAILURE 2
|
|
+
|
|
+/* Asynchronous Event Header */
|
|
+struct iscsi_async {
|
|
+ uint8_t opcode;
|
|
+ uint8_t flags;
|
|
+ uint8_t rsvd2[2];
|
|
+ uint8_t rsvd3;
|
|
+ uint8_t dlength[3];
|
|
+ uint8_t lun[8];
|
|
+ uint8_t rsvd4[8];
|
|
+ __be32 statsn;
|
|
+ __be32 exp_cmdsn;
|
|
+ __be32 max_cmdsn;
|
|
+ uint8_t async_event;
|
|
+ uint8_t async_vcode;
|
|
+ __be16 param1;
|
|
+ __be16 param2;
|
|
+ __be16 param3;
|
|
+ uint8_t rsvd5[4];
|
|
+};
|
|
+
|
|
+/* iSCSI Event Codes */
|
|
+#define ISCSI_ASYNC_MSG_SCSI_EVENT 0
|
|
+#define ISCSI_ASYNC_MSG_REQUEST_LOGOUT 1
|
|
+#define ISCSI_ASYNC_MSG_DROPPING_CONNECTION 2
|
|
+#define ISCSI_ASYNC_MSG_DROPPING_ALL_CONNECTIONS 3
|
|
+#define ISCSI_ASYNC_MSG_PARAM_NEGOTIATION 4
|
|
+#define ISCSI_ASYNC_MSG_VENDOR_SPECIFIC 255
|
|
+
|
|
+/* NOP-Out Message */
|
|
+struct iscsi_nopout {
|
|
+ uint8_t opcode;
|
|
+ uint8_t flags;
|
|
+ __be16 rsvd2;
|
|
+ uint8_t rsvd3;
|
|
+ uint8_t dlength[3];
|
|
+ uint8_t lun[8];
|
|
+ itt_t itt; /* Initiator Task Tag */
|
|
+ __be32 ttt; /* Target Transfer Tag */
|
|
+ __be32 cmdsn;
|
|
+ __be32 exp_statsn;
|
|
+ uint8_t rsvd4[16];
|
|
+};
|
|
+
|
|
+/* NOP-In Message */
|
|
+struct iscsi_nopin {
|
|
+ uint8_t opcode;
|
|
+ uint8_t flags;
|
|
+ __be16 rsvd2;
|
|
+ uint8_t rsvd3;
|
|
+ uint8_t dlength[3];
|
|
+ uint8_t lun[8];
|
|
+ itt_t itt; /* Initiator Task Tag */
|
|
+ __be32 ttt; /* Target Transfer Tag */
|
|
+ __be32 statsn;
|
|
+ __be32 exp_cmdsn;
|
|
+ __be32 max_cmdsn;
|
|
+ uint8_t rsvd4[12];
|
|
+};
|
|
+
|
|
+/* SCSI Task Management Message Header */
|
|
+struct iscsi_tm {
|
|
+ uint8_t opcode;
|
|
+ uint8_t flags;
|
|
+ uint8_t rsvd1[2];
|
|
+ uint8_t hlength;
|
|
+ uint8_t dlength[3];
|
|
+ uint8_t lun[8];
|
|
+ itt_t itt; /* Initiator Task Tag */
|
|
+ itt_t rtt; /* Reference Task Tag */
|
|
+ __be32 cmdsn;
|
|
+ __be32 exp_statsn;
|
|
+ __be32 refcmdsn;
|
|
+ __be32 exp_datasn;
|
|
+ uint8_t rsvd2[8];
|
|
+};
|
|
+
|
|
+#define ISCSI_FLAG_TM_FUNC_MASK 0x7F
|
|
+
|
|
+/* Function values */
|
|
+#define ISCSI_TM_FUNC_ABORT_TASK 1
|
|
+#define ISCSI_TM_FUNC_ABORT_TASK_SET 2
|
|
+#define ISCSI_TM_FUNC_CLEAR_ACA 3
|
|
+#define ISCSI_TM_FUNC_CLEAR_TASK_SET 4
|
|
+#define ISCSI_TM_FUNC_LOGICAL_UNIT_RESET 5
|
|
+#define ISCSI_TM_FUNC_TARGET_WARM_RESET 6
|
|
+#define ISCSI_TM_FUNC_TARGET_COLD_RESET 7
|
|
+#define ISCSI_TM_FUNC_TASK_REASSIGN 8
|
|
+
|
|
+/* SCSI Task Management Response Header */
|
|
+struct iscsi_tm_rsp {
|
|
+ uint8_t opcode;
|
|
+ uint8_t flags;
|
|
+ uint8_t response; /* see Response values below */
|
|
+ uint8_t qualifier;
|
|
+ uint8_t hlength;
|
|
+ uint8_t dlength[3];
|
|
+ uint8_t rsvd2[8];
|
|
+ itt_t itt; /* Initiator Task Tag */
|
|
+ itt_t rtt; /* Reference Task Tag */
|
|
+ __be32 statsn;
|
|
+ __be32 exp_cmdsn;
|
|
+ __be32 max_cmdsn;
|
|
+ uint8_t rsvd3[12];
|
|
+};
|
|
+
|
|
+/* Response values */
|
|
+#define ISCSI_TMF_RSP_COMPLETE 0x00
|
|
+#define ISCSI_TMF_RSP_NO_TASK 0x01
|
|
+#define ISCSI_TMF_RSP_NO_LUN 0x02
|
|
+#define ISCSI_TMF_RSP_TASK_ALLEGIANT 0x03
|
|
+#define ISCSI_TMF_RSP_NO_FAILOVER 0x04
|
|
+#define ISCSI_TMF_RSP_NOT_SUPPORTED 0x05
|
|
+#define ISCSI_TMF_RSP_AUTH_FAILED 0x06
|
|
+#define ISCSI_TMF_RSP_REJECTED 0xff
|
|
+
|
|
+/* Ready To Transfer Header */
|
|
+struct iscsi_r2t_rsp {
|
|
+ uint8_t opcode;
|
|
+ uint8_t flags;
|
|
+ uint8_t rsvd2[2];
|
|
+ uint8_t hlength;
|
|
+ uint8_t dlength[3];
|
|
+ uint8_t lun[8];
|
|
+ itt_t itt; /* Initiator Task Tag */
|
|
+ __be32 ttt; /* Target Transfer Tag */
|
|
+ __be32 statsn;
|
|
+ __be32 exp_cmdsn;
|
|
+ __be32 max_cmdsn;
|
|
+ __be32 r2tsn;
|
|
+ __be32 data_offset;
|
|
+ __be32 data_length;
|
|
+};
|
|
+
|
|
+/* SCSI Data Hdr */
|
|
+struct iscsi_data {
|
|
+ uint8_t opcode;
|
|
+ uint8_t flags;
|
|
+ uint8_t rsvd2[2];
|
|
+ uint8_t rsvd3;
|
|
+ uint8_t dlength[3];
|
|
+ uint8_t lun[8];
|
|
+ itt_t itt;
|
|
+ __be32 ttt;
|
|
+ __be32 rsvd4;
|
|
+ __be32 exp_statsn;
|
|
+ __be32 rsvd5;
|
|
+ __be32 datasn;
|
|
+ __be32 offset;
|
|
+ __be32 rsvd6;
|
|
+ /* Payload */
|
|
+};
|
|
+
|
|
+/* SCSI Data Response Hdr */
|
|
+struct iscsi_data_rsp {
|
|
+ uint8_t opcode;
|
|
+ uint8_t flags;
|
|
+ uint8_t rsvd2;
|
|
+ uint8_t cmd_status;
|
|
+ uint8_t hlength;
|
|
+ uint8_t dlength[3];
|
|
+ uint8_t lun[8];
|
|
+ itt_t itt;
|
|
+ __be32 ttt;
|
|
+ __be32 statsn;
|
|
+ __be32 exp_cmdsn;
|
|
+ __be32 max_cmdsn;
|
|
+ __be32 datasn;
|
|
+ __be32 offset;
|
|
+ __be32 residual_count;
|
|
+};
|
|
+
|
|
+/* Data Response PDU flags */
|
|
+#define ISCSI_FLAG_DATA_ACK 0x40
|
|
+#define ISCSI_FLAG_DATA_OVERFLOW 0x04
|
|
+#define ISCSI_FLAG_DATA_UNDERFLOW 0x02
|
|
+#define ISCSI_FLAG_DATA_STATUS 0x01
|
|
+
|
|
+/* Text Header */
|
|
+struct iscsi_text {
|
|
+ uint8_t opcode;
|
|
+ uint8_t flags;
|
|
+ uint8_t rsvd2[2];
|
|
+ uint8_t hlength;
|
|
+ uint8_t dlength[3];
|
|
+ uint8_t rsvd4[8];
|
|
+ itt_t itt;
|
|
+ __be32 ttt;
|
|
+ __be32 cmdsn;
|
|
+ __be32 exp_statsn;
|
|
+ uint8_t rsvd5[16];
|
|
+ /* Text - key=value pairs */
|
|
+};
|
|
+
|
|
+#define ISCSI_FLAG_TEXT_CONTINUE 0x40
|
|
+
|
|
+/* Text Response Header */
|
|
+struct iscsi_text_rsp {
|
|
+ uint8_t opcode;
|
|
+ uint8_t flags;
|
|
+ uint8_t rsvd2[2];
|
|
+ uint8_t hlength;
|
|
+ uint8_t dlength[3];
|
|
+ uint8_t rsvd4[8];
|
|
+ itt_t itt;
|
|
+ __be32 ttt;
|
|
+ __be32 statsn;
|
|
+ __be32 exp_cmdsn;
|
|
+ __be32 max_cmdsn;
|
|
+ uint8_t rsvd5[12];
|
|
+ /* Text Response - key:value pairs */
|
|
+};
|
|
+
|
|
+/* Login Header */
|
|
+struct iscsi_login {
|
|
+ uint8_t opcode;
|
|
+ uint8_t flags;
|
|
+ uint8_t max_version; /* Max. version supported */
|
|
+ uint8_t min_version; /* Min. version supported */
|
|
+ uint8_t hlength;
|
|
+ uint8_t dlength[3];
|
|
+ uint8_t isid[6]; /* Initiator Session ID */
|
|
+ __be16 tsih; /* Target Session Handle */
|
|
+ itt_t itt; /* Initiator Task Tag */
|
|
+ __be16 cid;
|
|
+ __be16 rsvd3;
|
|
+ __be32 cmdsn;
|
|
+ __be32 exp_statsn;
|
|
+ uint8_t rsvd5[16];
|
|
+};
|
|
+
|
|
+/* Login PDU flags */
|
|
+#define ISCSI_FLAG_LOGIN_TRANSIT 0x80
|
|
+#define ISCSI_FLAG_LOGIN_CONTINUE 0x40
|
|
+#define ISCSI_FLAG_LOGIN_CURRENT_STAGE_MASK 0x0C /* 2 bits */
|
|
+#define ISCSI_FLAG_LOGIN_NEXT_STAGE_MASK 0x03 /* 2 bits */
|
|
+
|
|
+#define ISCSI_LOGIN_CURRENT_STAGE(flags) \
|
|
+ ((flags & ISCSI_FLAG_LOGIN_CURRENT_STAGE_MASK) >> 2)
|
|
+#define ISCSI_LOGIN_NEXT_STAGE(flags) \
|
|
+ (flags & ISCSI_FLAG_LOGIN_NEXT_STAGE_MASK)
|
|
+
|
|
+/* Login Response Header */
|
|
+struct iscsi_login_rsp {
|
|
+ uint8_t opcode;
|
|
+ uint8_t flags;
|
|
+ uint8_t max_version; /* Max. version supported */
|
|
+ uint8_t active_version; /* Active version */
|
|
+ uint8_t hlength;
|
|
+ uint8_t dlength[3];
|
|
+ uint8_t isid[6]; /* Initiator Session ID */
|
|
+ __be16 tsih; /* Target Session Handle */
|
|
+ itt_t itt; /* Initiator Task Tag */
|
|
+ __be32 rsvd3;
|
|
+ __be32 statsn;
|
|
+ __be32 exp_cmdsn;
|
|
+ __be32 max_cmdsn;
|
|
+ uint8_t status_class; /* see Login RSP ststus classes below */
|
|
+ uint8_t status_detail; /* see Login RSP Status details below */
|
|
+ uint8_t rsvd4[10];
|
|
+};
|
|
+
|
|
+/* Login stage (phase) codes for CSG, NSG */
|
|
+#define ISCSI_INITIAL_LOGIN_STAGE -1
|
|
+#define ISCSI_SECURITY_NEGOTIATION_STAGE 0
|
|
+#define ISCSI_OP_PARMS_NEGOTIATION_STAGE 1
|
|
+#define ISCSI_FULL_FEATURE_PHASE 3
|
|
+
|
|
+/* Login Status response classes */
|
|
+#define ISCSI_STATUS_CLS_SUCCESS 0x00
|
|
+#define ISCSI_STATUS_CLS_REDIRECT 0x01
|
|
+#define ISCSI_STATUS_CLS_INITIATOR_ERR 0x02
|
|
+#define ISCSI_STATUS_CLS_TARGET_ERR 0x03
|
|
+
|
|
+/* Login Status response detail codes */
|
|
+/* Class-0 (Success) */
|
|
+#define ISCSI_LOGIN_STATUS_ACCEPT 0x00
|
|
+
|
|
+/* Class-1 (Redirection) */
|
|
+#define ISCSI_LOGIN_STATUS_TGT_MOVED_TEMP 0x01
|
|
+#define ISCSI_LOGIN_STATUS_TGT_MOVED_PERM 0x02
|
|
+
|
|
+/* Class-2 (Initiator Error) */
|
|
+#define ISCSI_LOGIN_STATUS_INIT_ERR 0x00
|
|
+#define ISCSI_LOGIN_STATUS_AUTH_FAILED 0x01
|
|
+#define ISCSI_LOGIN_STATUS_TGT_FORBIDDEN 0x02
|
|
+#define ISCSI_LOGIN_STATUS_TGT_NOT_FOUND 0x03
|
|
+#define ISCSI_LOGIN_STATUS_TGT_REMOVED 0x04
|
|
+#define ISCSI_LOGIN_STATUS_NO_VERSION 0x05
|
|
+#define ISCSI_LOGIN_STATUS_ISID_ERROR 0x06
|
|
+#define ISCSI_LOGIN_STATUS_MISSING_FIELDS 0x07
|
|
+#define ISCSI_LOGIN_STATUS_CONN_ADD_FAILED 0x08
|
|
+#define ISCSI_LOGIN_STATUS_NO_SESSION_TYPE 0x09
|
|
+#define ISCSI_LOGIN_STATUS_NO_SESSION 0x0a
|
|
+#define ISCSI_LOGIN_STATUS_INVALID_REQUEST 0x0b
|
|
+
|
|
+/* Class-3 (Target Error) */
|
|
+#define ISCSI_LOGIN_STATUS_TARGET_ERROR 0x00
|
|
+#define ISCSI_LOGIN_STATUS_SVC_UNAVAILABLE 0x01
|
|
+#define ISCSI_LOGIN_STATUS_NO_RESOURCES 0x02
|
|
+
|
|
+/* Logout Header */
|
|
+struct iscsi_logout {
|
|
+ uint8_t opcode;
|
|
+ uint8_t flags;
|
|
+ uint8_t rsvd1[2];
|
|
+ uint8_t hlength;
|
|
+ uint8_t dlength[3];
|
|
+ uint8_t rsvd2[8];
|
|
+ itt_t itt; /* Initiator Task Tag */
|
|
+ __be16 cid;
|
|
+ uint8_t rsvd3[2];
|
|
+ __be32 cmdsn;
|
|
+ __be32 exp_statsn;
|
|
+ uint8_t rsvd4[16];
|
|
+};
|
|
+
|
|
+/* Logout PDU flags */
|
|
+#define ISCSI_FLAG_LOGOUT_REASON_MASK 0x7F
|
|
+
|
|
+/* logout reason_code values */
|
|
+
|
|
+#define ISCSI_LOGOUT_REASON_CLOSE_SESSION 0
|
|
+#define ISCSI_LOGOUT_REASON_CLOSE_CONNECTION 1
|
|
+#define ISCSI_LOGOUT_REASON_RECOVERY 2
|
|
+#define ISCSI_LOGOUT_REASON_AEN_REQUEST 3
|
|
+
|
|
+/* Logout Response Header */
|
|
+struct iscsi_logout_rsp {
|
|
+ uint8_t opcode;
|
|
+ uint8_t flags;
|
|
+ uint8_t response; /* see Logout response values below */
|
|
+ uint8_t rsvd2;
|
|
+ uint8_t hlength;
|
|
+ uint8_t dlength[3];
|
|
+ uint8_t rsvd3[8];
|
|
+ itt_t itt; /* Initiator Task Tag */
|
|
+ __be32 rsvd4;
|
|
+ __be32 statsn;
|
|
+ __be32 exp_cmdsn;
|
|
+ __be32 max_cmdsn;
|
|
+ __be32 rsvd5;
|
|
+ __be16 t2wait;
|
|
+ __be16 t2retain;
|
|
+ __be32 rsvd6;
|
|
+};
|
|
+
|
|
+/* logout response status values */
|
|
+
|
|
+#define ISCSI_LOGOUT_SUCCESS 0
|
|
+#define ISCSI_LOGOUT_CID_NOT_FOUND 1
|
|
+#define ISCSI_LOGOUT_RECOVERY_UNSUPPORTED 2
|
|
+#define ISCSI_LOGOUT_CLEANUP_FAILED 3
|
|
+
|
|
+/* SNACK Header */
|
|
+struct iscsi_snack {
|
|
+ uint8_t opcode;
|
|
+ uint8_t flags;
|
|
+ uint8_t rsvd2[14];
|
|
+ itt_t itt;
|
|
+ __be32 begrun;
|
|
+ __be32 runlength;
|
|
+ __be32 exp_statsn;
|
|
+ __be32 rsvd3;
|
|
+ __be32 exp_datasn;
|
|
+ uint8_t rsvd6[8];
|
|
+};
|
|
+
|
|
+/* SNACK PDU flags */
|
|
+#define ISCSI_FLAG_SNACK_TYPE_MASK 0x0F /* 4 bits */
|
|
+
|
|
+/* Reject Message Header */
|
|
+struct iscsi_reject {
|
|
+ uint8_t opcode;
|
|
+ uint8_t flags;
|
|
+ uint8_t reason;
|
|
+ uint8_t rsvd2;
|
|
+ uint8_t hlength;
|
|
+ uint8_t dlength[3];
|
|
+ uint8_t rsvd3[8];
|
|
+ __be32 ffffffff;
|
|
+ uint8_t rsvd4[4];
|
|
+ __be32 statsn;
|
|
+ __be32 exp_cmdsn;
|
|
+ __be32 max_cmdsn;
|
|
+ __be32 datasn;
|
|
+ uint8_t rsvd5[8];
|
|
+ /* Text - Rejected hdr */
|
|
+};
|
|
+
|
|
+/* Reason for Reject */
|
|
+#define ISCSI_REASON_CMD_BEFORE_LOGIN 1
|
|
+#define ISCSI_REASON_DATA_DIGEST_ERROR 2
|
|
+#define ISCSI_REASON_DATA_SNACK_REJECT 3
|
|
+#define ISCSI_REASON_PROTOCOL_ERROR 4
|
|
+#define ISCSI_REASON_CMD_NOT_SUPPORTED 5
|
|
+#define ISCSI_REASON_IMM_CMD_REJECT 6
|
|
+#define ISCSI_REASON_TASK_IN_PROGRESS 7
|
|
+#define ISCSI_REASON_INVALID_SNACK 8
|
|
+#define ISCSI_REASON_BOOKMARK_INVALID 9
|
|
+#define ISCSI_REASON_BOOKMARK_NO_RESOURCES 10
|
|
+#define ISCSI_REASON_NEGOTIATION_RESET 11
|
|
+
|
|
+/* Max. number of Key=Value pairs in a text message */
|
|
+#define MAX_KEY_VALUE_PAIRS 8192
|
|
+
|
|
+/* maximum length for text keys/values */
|
|
+#define KEY_MAXLEN 64
|
|
+#define VALUE_MAXLEN 255
|
|
+#define TARGET_NAME_MAXLEN VALUE_MAXLEN
|
|
+
|
|
+#define ISCSI_DEF_MAX_RECV_SEG_LEN 8192
|
|
+#define ISCSI_MIN_MAX_RECV_SEG_LEN 512
|
|
+#define ISCSI_MAX_MAX_RECV_SEG_LEN 16777215
|
|
+
|
|
+#define ISCSI_DEF_FIRST_BURST_LEN 65536
|
|
+#define ISCSI_MIN_FIRST_BURST_LEN 512
|
|
+#define ISCSI_MAX_FIRST_BURST_LEN 16777215
|
|
+
|
|
+#define ISCSI_DEF_MAX_BURST_LEN 262144
|
|
+#define ISCSI_MIN_MAX_BURST_LEN 512
|
|
+#define ISCSI_MAX_MAX_BURST_LEN 16777215
|
|
+
|
|
+#define ISCSI_DEF_TIME2WAIT 2
|
|
+
|
|
+/************************* RFC 3720 End *****************************/
|
|
+
|
|
+#endif /* ISCSI_PROTO_H */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/include/list.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/include/list.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/include/list.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/include/list.h 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,93 @@
|
|
+#ifndef __LIST_H__
|
|
+#define __LIST_H__
|
|
+
|
|
+#include <stddef.h>
|
|
+/* taken from linux kernel */
|
|
+
|
|
+#undef offsetof
|
|
+#ifdef __compiler_offsetof
|
|
+#define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER)
|
|
+#else
|
|
+#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
|
|
+#endif
|
|
+
|
|
+#define container_of(ptr, type, member) ({ \
|
|
+ const typeof( ((type *)0)->member ) *__mptr = (ptr); \
|
|
+ (type *)( (char *)__mptr - offsetof(type,member) );})
|
|
+
|
|
+struct list_head {
|
|
+ struct list_head *next, *prev;
|
|
+};
|
|
+
|
|
+#define LIST_HEAD_INIT(name) { &(name), &(name) }
|
|
+
|
|
+#define LIST_HEAD(name) \
|
|
+ struct list_head name = LIST_HEAD_INIT(name)
|
|
+
|
|
+static inline void INIT_LIST_HEAD(struct list_head *list)
|
|
+{
|
|
+ list->next = list;
|
|
+ list->prev = list;
|
|
+}
|
|
+
|
|
+static inline int list_empty(const struct list_head *head)
|
|
+{
|
|
+ return head->next == head;
|
|
+}
|
|
+
|
|
+#define list_entry(ptr, type, member) \
|
|
+ container_of(ptr, type, member)
|
|
+
|
|
+#define list_for_each(pos, head) \
|
|
+ for (pos = (head)->next; pos != (head); pos = pos->next)
|
|
+
|
|
+#define list_for_each_entry(pos, head, member) \
|
|
+ for (pos = list_entry((head)->next, typeof(*pos), member); \
|
|
+ &pos->member != (head); \
|
|
+ pos = list_entry(pos->member.next, typeof(*pos), member))
|
|
+
|
|
+#define list_for_each_entry_safe(pos, n, head, member) \
|
|
+ for (pos = list_entry((head)->next, typeof(*pos), member), \
|
|
+ n = list_entry(pos->member.next, typeof(*pos), member); \
|
|
+ &pos->member != (head); \
|
|
+ pos = n, n = list_entry(n->member.next, typeof(*n), member))
|
|
+
|
|
+static inline void __list_add(struct list_head *new,
|
|
+ struct list_head *prev,
|
|
+ struct list_head *next)
|
|
+{
|
|
+ next->prev = new;
|
|
+ new->next = next;
|
|
+ new->prev = prev;
|
|
+ prev->next = new;
|
|
+}
|
|
+
|
|
+static inline void list_add(struct list_head *new, struct list_head *head)
|
|
+{
|
|
+ __list_add(new, head, head->next);
|
|
+}
|
|
+
|
|
+static inline void list_add_tail(struct list_head *new, struct list_head *head)
|
|
+{
|
|
+ __list_add(new, head->prev, head);
|
|
+}
|
|
+
|
|
+static inline void __list_del(struct list_head * prev, struct list_head * next)
|
|
+{
|
|
+ next->prev = prev;
|
|
+ prev->next = next;
|
|
+}
|
|
+
|
|
+static inline void list_del(struct list_head *entry)
|
|
+{
|
|
+ __list_del(entry->prev, entry->next);
|
|
+ entry->next = entry->prev = NULL;
|
|
+}
|
|
+
|
|
+static inline void list_del_init(struct list_head *entry)
|
|
+{
|
|
+ __list_del(entry->prev, entry->next);
|
|
+ INIT_LIST_HEAD(entry);
|
|
+}
|
|
+
|
|
+#endif
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/include/mgmt_ipc.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/include/mgmt_ipc.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/include/mgmt_ipc.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/include/mgmt_ipc.h 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,147 @@
|
|
+/*
|
|
+ * iSCSI Daemon/Admin Management IPC
|
|
+ *
|
|
+ * Copyright (C) 2004 Dmitry Yusupov, Alex Aizman
|
|
+ * maintained by open-iscsi@googlegroups.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.
|
|
+ *
|
|
+ * See the file COPYING included with this distribution for more details.
|
|
+ */
|
|
+#ifndef MGMT_IPC_H
|
|
+#define MGMT_IPC_H
|
|
+
|
|
+//#include "types.h"
|
|
+#include "iscsi_if.h"
|
|
+#include "config.h"
|
|
+
|
|
+#define ISCSIADM_NAMESPACE "ISCSIADM_ABSTRACT_NAMESPACE"
|
|
+#define PEERUSER_MAX 64
|
|
+
|
|
+typedef enum mgmt_ipc_err {
|
|
+ MGMT_IPC_OK = 0,
|
|
+ MGMT_IPC_ERR = 1,
|
|
+ MGMT_IPC_ERR_NOT_FOUND = 2,
|
|
+ MGMT_IPC_ERR_NOMEM = 3,
|
|
+ MGMT_IPC_ERR_TRANS_FAILURE = 4,
|
|
+ MGMT_IPC_ERR_LOGIN_FAILURE = 5,
|
|
+ MGMT_IPC_ERR_IDBM_FAILURE = 6,
|
|
+ MGMT_IPC_ERR_INVAL = 7,
|
|
+ MGMT_IPC_ERR_TRANS_TIMEOUT = 8,
|
|
+ MGMT_IPC_ERR_INTERNAL = 9,
|
|
+ MGMT_IPC_ERR_LOGOUT_FAILURE = 10,
|
|
+ MGMT_IPC_ERR_PDU_TIMEOUT = 11,
|
|
+ MGMT_IPC_ERR_TRANS_NOT_FOUND = 12,
|
|
+ MGMT_IPC_ERR_ACCESS = 13,
|
|
+ MGMT_IPC_ERR_TRANS_CAPS = 14,
|
|
+ MGMT_IPC_ERR_EXISTS = 15,
|
|
+ MGMT_IPC_ERR_INVALID_REQ = 16,
|
|
+ MGMT_IPC_ERR_ISNS_UNAVAILABLE = 17,
|
|
+ MGMT_IPC_ERR_ISCSID_COMM_ERR = 18,
|
|
+ MGMT_IPC_ERR_FATAL_LOGIN_FAILURE = 19,
|
|
+ MGMT_IPC_ERR_ISCSID_NOTCONN = 20,
|
|
+} mgmt_ipc_err_e;
|
|
+
|
|
+typedef enum iscsiadm_cmd {
|
|
+ MGMT_IPC_UNKNOWN = 0,
|
|
+ MGMT_IPC_SESSION_LOGIN = 1,
|
|
+ MGMT_IPC_SESSION_LOGOUT = 2,
|
|
+ MGMT_IPC_SESSION_ACTIVESTAT = 4,
|
|
+ MGMT_IPC_CONN_ADD = 5,
|
|
+ MGMT_IPC_CONN_REMOVE = 6,
|
|
+ MGMT_IPC_SESSION_STATS = 7,
|
|
+ MGMT_IPC_CONFIG_INAME = 8,
|
|
+ MGMT_IPC_CONFIG_IALIAS = 9,
|
|
+ MGMT_IPC_CONFIG_FILE = 10,
|
|
+ MGMT_IPC_IMMEDIATE_STOP = 11,
|
|
+ MGMT_IPC_SESSION_SYNC = 12,
|
|
+ MGMT_IPC_SESSION_INFO = 13,
|
|
+ MGMT_IPC_ISNS_DEV_ATTR_QUERY = 14,
|
|
+ MGMT_IPC_SEND_TARGETS = 15,
|
|
+ MGMT_IPC_SET_HOST_PARAM = 16,
|
|
+ MGMT_IPC_NOTIFY_ADD_NODE = 17,
|
|
+ MGMT_IPC_NOTIFY_DEL_NODE = 18,
|
|
+ MGMT_IPC_NOTIFY_ADD_PORTAL = 19,
|
|
+ MGMT_IPC_NOTIFY_DEL_PORTAL = 20,
|
|
+ MGMT_IPC_GET_IPADDR = 21,
|
|
+
|
|
+ __MGMT_IPC_MAX_COMMAND
|
|
+} iscsiadm_cmd_e;
|
|
+
|
|
+/* IPC Request */
|
|
+typedef struct iscsiadm_req {
|
|
+ iscsiadm_cmd_e command;
|
|
+ uint32_t payload_len;
|
|
+
|
|
+ union {
|
|
+ /* messages */
|
|
+ struct ipc_msg_session {
|
|
+ int sid;
|
|
+// node_rec_t rec;
|
|
+ } session;
|
|
+ struct ipc_msg_conn {
|
|
+ int sid;
|
|
+ int cid;
|
|
+ } conn;
|
|
+ struct ipc_msg_send_targets {
|
|
+ int host_no;
|
|
+ int do_login;
|
|
+ struct sockaddr_storage ss;
|
|
+ } st;
|
|
+ struct ipc_msg_set_host_param {
|
|
+ int host_no;
|
|
+ int param;
|
|
+ /* TODO: make this variable len to support */
|
|
+ char value[IFNAMSIZ + 1];
|
|
+
|
|
+ } set_host_param;
|
|
+ } u;
|
|
+} iscsiadm_req_t;
|
|
+
|
|
+/* IPC Response */
|
|
+typedef struct iscsiadm_rsp {
|
|
+ iscsiadm_cmd_e command;
|
|
+ mgmt_ipc_err_e err;
|
|
+
|
|
+ union {
|
|
+#define MGMT_IPC_GETSTATS_BUF_MAX (sizeof(struct iscsi_uevent) + \
|
|
+ sizeof(struct iscsi_stats) + \
|
|
+ sizeof(struct iscsi_stats_custom) * \
|
|
+ ISCSI_STATS_CUSTOM_MAX)
|
|
+ struct ipc_msg_getstats {
|
|
+ struct iscsi_uevent ev;
|
|
+ struct iscsi_stats stats;
|
|
+ char custom[sizeof(struct iscsi_stats_custom) *
|
|
+ ISCSI_STATS_CUSTOM_MAX];
|
|
+ } getstats;
|
|
+ struct ipc_msg_config {
|
|
+ char var[VALUE_MAXLEN];
|
|
+ } config;
|
|
+ struct ipc_msg_session_state {
|
|
+ int session_state;
|
|
+ int conn_state;
|
|
+ } session_state;
|
|
+ struct ipc_msg_get_ipaddr {
|
|
+ int addr;
|
|
+ } get_ipaddr;
|
|
+ } u;
|
|
+} iscsiadm_rsp_t;
|
|
+
|
|
+struct queue_task;
|
|
+typedef mgmt_ipc_err_e mgmt_ipc_fn_t(struct queue_task *);
|
|
+
|
|
+struct queue_task;
|
|
+void mgmt_ipc_write_rsp(struct queue_task *qtask, mgmt_ipc_err_e err);
|
|
+int mgmt_ipc_listen(void);
|
|
+void mgmt_ipc_close(int fd);
|
|
+void mgmt_ipc_handle(int accept_fd);
|
|
+
|
|
+#endif /* MGMT_IPC_H */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/include/sysdeps.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/include/sysdeps.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/include/sysdeps.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/include/sysdeps.h 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,27 @@
|
|
+/*
|
|
+ * wrapping of libc features and kernel interfaces
|
|
+ *
|
|
+ * Copyright (C) 2005-2006 Kay Sievers <kay.sievers@vrfy.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 version 2 of the License.
|
|
+ *
|
|
+ * 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.
|
|
+ *
|
|
+ */
|
|
+
|
|
+#ifndef _SYSDEPS_H_
|
|
+#define _SYSDEPS_H_
|
|
+
|
|
+extern size_t strlcpy(char *dst, const char *src, size_t size);
|
|
+extern size_t strlcat(char *dst, const char *src, size_t size);
|
|
+
|
|
+#endif
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/include/uip_mgmt_ipc.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/include/uip_mgmt_ipc.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/include/uip_mgmt_ipc.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/include/uip_mgmt_ipc.h 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,66 @@
|
|
+/*
|
|
+ * uIP iSCSI Daemon/Admin Management IPC
|
|
+ *
|
|
+ * 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.
|
|
+ *
|
|
+ * See the file COPYING included with this distribution for more details.
|
|
+ */
|
|
+#ifndef UIP_MGMT_IPC_H
|
|
+#define UIP_MGMT_IPC_H
|
|
+
|
|
+//#include "types.h"
|
|
+#include "iscsi_if.h"
|
|
+#include "config.h"
|
|
+#include "mgmt_ipc.h"
|
|
+
|
|
+#define ISCSID_UIP_NAMESPACE "ISCSID_UIP_ABSTRACT_NAMESPACE"
|
|
+
|
|
+typedef enum iscsid_uip_cmd {
|
|
+ ISCSID_UIP_IPC_UNKNOWN = 0,
|
|
+ ISCSID_UIP_IPC_GET_IFACE = 1,
|
|
+
|
|
+ __ISCSID_UIP_IPC_MAX_COMMAND
|
|
+} iscsid_uip_cmd_e;
|
|
+
|
|
+
|
|
+typedef struct iscsid_uip_broadcast_header {
|
|
+ iscsid_uip_cmd_e command;
|
|
+ uint32_t payload_len;
|
|
+} iscsid_uip_broadcast_header_t;
|
|
+
|
|
+/* IPC Request */
|
|
+typedef struct iscsid_uip_broadcast {
|
|
+ struct iscsid_uip_broadcast_header header;
|
|
+
|
|
+ union {
|
|
+ /* messages */
|
|
+ struct ipc_broadcast_iface_rec {
|
|
+ struct iface_rec rec;
|
|
+ } iface_rec;
|
|
+ } u;
|
|
+} iscsid_uip_broadcast_t;
|
|
+
|
|
+typedef enum iscsid_uip_mgmt_ipc_err {
|
|
+ ISCSID_UIP_MGMT_IPC_OK = 0,
|
|
+ ISCSID_UIP_MGMT_IPC_ERR = 1,
|
|
+ ISCSID_UIP_MGMT_IPC_ERR_NOT_FOUND = 2,
|
|
+ ISCSID_UIP_MGMT_IPC_ERR_NOMEM = 3,
|
|
+ ISCSID_UIP_MGMT_IPC_DEVICE_UP = 4,
|
|
+ ISCSID_UIP_MGMT_IPC_DEVICE_INITIALIZING = 5,
|
|
+} iscsid_uip_mgmt_ipc_err_e;
|
|
+
|
|
+/* IPC Response */
|
|
+typedef struct iscsid_uip_mgmt_rsp {
|
|
+ iscsid_uip_cmd_e command;
|
|
+ iscsid_uip_mgmt_ipc_err_e err;
|
|
+} iscsid_uip_rsp_t;
|
|
+
|
|
+#endif /* UIP_MGMT_IPC_H */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/INSTALL open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/INSTALL
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/INSTALL 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/INSTALL 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,291 @@
|
|
+Installation Instructions
|
|
+*************************
|
|
+
|
|
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
|
|
+2006, 2007, 2008 Free Software Foundation, Inc.
|
|
+
|
|
+ This file is free documentation; the Free Software Foundation gives
|
|
+unlimited permission to copy, distribute and modify it.
|
|
+
|
|
+Basic Installation
|
|
+==================
|
|
+
|
|
+ Briefly, the shell commands `./configure; make; make install' should
|
|
+configure, build, and install this package. The following
|
|
+more-detailed instructions are generic; see the `README' file for
|
|
+instructions specific to this package.
|
|
+
|
|
+ The `configure' shell script attempts to guess correct values for
|
|
+various system-dependent variables used during compilation. It uses
|
|
+those values to create a `Makefile' in each directory of the package.
|
|
+It may also create one or more `.h' files containing system-dependent
|
|
+definitions. Finally, it creates a shell script `config.status' that
|
|
+you can run in the future to recreate the current configuration, and a
|
|
+file `config.log' containing compiler output (useful mainly for
|
|
+debugging `configure').
|
|
+
|
|
+ It can also use an optional file (typically called `config.cache'
|
|
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
|
|
+the results of its tests to speed up reconfiguring. Caching is
|
|
+disabled by default to prevent problems with accidental use of stale
|
|
+cache files.
|
|
+
|
|
+ If you need to do unusual things to compile the package, please try
|
|
+to figure out how `configure' could check whether to do them, and mail
|
|
+diffs or instructions to the address given in the `README' so they can
|
|
+be considered for the next release. If you are using the cache, and at
|
|
+some point `config.cache' contains results you don't want to keep, you
|
|
+may remove or edit it.
|
|
+
|
|
+ The file `configure.ac' (or `configure.in') is used to create
|
|
+`configure' by a program called `autoconf'. You need `configure.ac' if
|
|
+you want to change it or regenerate `configure' using a newer version
|
|
+of `autoconf'.
|
|
+
|
|
+The simplest way to compile this package is:
|
|
+
|
|
+ 1. `cd' to the directory containing the package's source code and type
|
|
+ `./configure' to configure the package for your system.
|
|
+
|
|
+ Running `configure' might take a while. While running, it prints
|
|
+ some messages telling which features it is checking for.
|
|
+
|
|
+ 2. Type `make' to compile the package.
|
|
+
|
|
+ 3. Optionally, type `make check' to run any self-tests that come with
|
|
+ the package.
|
|
+
|
|
+ 4. Type `make install' to install the programs and any data files and
|
|
+ documentation.
|
|
+
|
|
+ 5. You can remove the program binaries and object files from the
|
|
+ source code directory by typing `make clean'. To also remove the
|
|
+ files that `configure' created (so you can compile the package for
|
|
+ a different kind of computer), type `make distclean'. There is
|
|
+ also a `make maintainer-clean' target, but that is intended mainly
|
|
+ for the package's developers. If you use it, you may have to get
|
|
+ all sorts of other programs in order to regenerate files that came
|
|
+ with the distribution.
|
|
+
|
|
+ 6. Often, you can also type `make uninstall' to remove the installed
|
|
+ files again.
|
|
+
|
|
+Compilers and Options
|
|
+=====================
|
|
+
|
|
+ Some systems require unusual options for compilation or linking that
|
|
+the `configure' script does not know about. Run `./configure --help'
|
|
+for details on some of the pertinent environment variables.
|
|
+
|
|
+ You can give `configure' initial values for configuration parameters
|
|
+by setting variables in the command line or in the environment. Here
|
|
+is an example:
|
|
+
|
|
+ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
|
|
+
|
|
+ *Note Defining Variables::, for more details.
|
|
+
|
|
+Compiling For Multiple Architectures
|
|
+====================================
|
|
+
|
|
+ You can compile the package for more than one kind of computer at the
|
|
+same time, by placing the object files for each architecture in their
|
|
+own directory. To do this, you can use GNU `make'. `cd' to the
|
|
+directory where you want the object files and executables to go and run
|
|
+the `configure' script. `configure' automatically checks for the
|
|
+source code in the directory that `configure' is in and in `..'.
|
|
+
|
|
+ With a non-GNU `make', it is safer to compile the package for one
|
|
+architecture at a time in the source code directory. After you have
|
|
+installed the package for one architecture, use `make distclean' before
|
|
+reconfiguring for another architecture.
|
|
+
|
|
+ On MacOS X 10.5 and later systems, you can create libraries and
|
|
+executables that work on multiple system types--known as "fat" or
|
|
+"universal" binaries--by specifying multiple `-arch' options to the
|
|
+compiler but only a single `-arch' option to the preprocessor. Like
|
|
+this:
|
|
+
|
|
+ ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
|
|
+ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
|
|
+ CPP="gcc -E" CXXCPP="g++ -E"
|
|
+
|
|
+ This is not guaranteed to produce working output in all cases, you
|
|
+may have to build one architecture at a time and combine the results
|
|
+using the `lipo' tool if you have problems.
|
|
+
|
|
+Installation Names
|
|
+==================
|
|
+
|
|
+ By default, `make install' installs the package's commands under
|
|
+`/usr/local/bin', include files under `/usr/local/include', etc. You
|
|
+can specify an installation prefix other than `/usr/local' by giving
|
|
+`configure' the option `--prefix=PREFIX'.
|
|
+
|
|
+ You can specify separate installation prefixes for
|
|
+architecture-specific files and architecture-independent files. If you
|
|
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
|
|
+PREFIX as the prefix for installing programs and libraries.
|
|
+Documentation and other data files still use the regular prefix.
|
|
+
|
|
+ In addition, if you use an unusual directory layout you can give
|
|
+options like `--bindir=DIR' to specify different values for particular
|
|
+kinds of files. Run `configure --help' for a list of the directories
|
|
+you can set and what kinds of files go in them.
|
|
+
|
|
+ If the package supports it, you can cause programs to be installed
|
|
+with an extra prefix or suffix on their names by giving `configure' the
|
|
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
|
|
+
|
|
+Optional Features
|
|
+=================
|
|
+
|
|
+ Some packages pay attention to `--enable-FEATURE' options to
|
|
+`configure', where FEATURE indicates an optional part of the package.
|
|
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
|
+is something like `gnu-as' or `x' (for the X Window System). The
|
|
+`README' should mention any `--enable-' and `--with-' options that the
|
|
+package recognizes.
|
|
+
|
|
+ For packages that use the X Window System, `configure' can usually
|
|
+find the X include and library files automatically, but if it doesn't,
|
|
+you can use the `configure' options `--x-includes=DIR' and
|
|
+`--x-libraries=DIR' to specify their locations.
|
|
+
|
|
+Particular systems
|
|
+==================
|
|
+
|
|
+ On HP-UX, the default C compiler is not ANSI C compatible. If GNU
|
|
+CC is not installed, it is recommended to use the following options in
|
|
+order to use an ANSI C compiler:
|
|
+
|
|
+ ./configure CC="cc -Ae"
|
|
+
|
|
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
|
|
+
|
|
+ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
|
|
+parse its `<wchar.h>' header file. The option `-nodtk' can be used as
|
|
+a workaround. If GNU CC is not installed, it is therefore recommended
|
|
+to try
|
|
+
|
|
+ ./configure CC="cc"
|
|
+
|
|
+and if that doesn't work, try
|
|
+
|
|
+ ./configure CC="cc -nodtk"
|
|
+
|
|
+Specifying the System Type
|
|
+==========================
|
|
+
|
|
+ There may be some features `configure' cannot figure out
|
|
+automatically, but needs to determine by the type of machine the package
|
|
+will run on. Usually, assuming the package is built to be run on the
|
|
+_same_ architectures, `configure' can figure that out, but if it prints
|
|
+a message saying it cannot guess the machine type, give it the
|
|
+`--build=TYPE' option. TYPE can either be a short name for the system
|
|
+type, such as `sun4', or a canonical name which has the form:
|
|
+
|
|
+ CPU-COMPANY-SYSTEM
|
|
+
|
|
+where SYSTEM can have one of these forms:
|
|
+
|
|
+ OS KERNEL-OS
|
|
+
|
|
+ See the file `config.sub' for the possible values of each field. If
|
|
+`config.sub' isn't included in this package, then this package doesn't
|
|
+need to know the machine type.
|
|
+
|
|
+ If you are _building_ compiler tools for cross-compiling, you should
|
|
+use the option `--target=TYPE' to select the type of system they will
|
|
+produce code for.
|
|
+
|
|
+ If you want to _use_ a cross compiler, that generates code for a
|
|
+platform different from the build platform, you should specify the
|
|
+"host" platform (i.e., that on which the generated programs will
|
|
+eventually be run) with `--host=TYPE'.
|
|
+
|
|
+Sharing Defaults
|
|
+================
|
|
+
|
|
+ If you want to set default values for `configure' scripts to share,
|
|
+you can create a site shell script called `config.site' that gives
|
|
+default values for variables like `CC', `cache_file', and `prefix'.
|
|
+`configure' looks for `PREFIX/share/config.site' if it exists, then
|
|
+`PREFIX/etc/config.site' if it exists. Or, you can set the
|
|
+`CONFIG_SITE' environment variable to the location of the site script.
|
|
+A warning: not all `configure' scripts look for a site script.
|
|
+
|
|
+Defining Variables
|
|
+==================
|
|
+
|
|
+ Variables not defined in a site shell script can be set in the
|
|
+environment passed to `configure'. However, some packages may run
|
|
+configure again during the build, and the customized values of these
|
|
+variables may be lost. In order to avoid this problem, you should set
|
|
+them in the `configure' command line, using `VAR=value'. For example:
|
|
+
|
|
+ ./configure CC=/usr/local2/bin/gcc
|
|
+
|
|
+causes the specified `gcc' to be used as the C compiler (unless it is
|
|
+overridden in the site shell script).
|
|
+
|
|
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
|
|
+an Autoconf bug. Until the bug is fixed you can use this workaround:
|
|
+
|
|
+ CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
|
|
+
|
|
+`configure' Invocation
|
|
+======================
|
|
+
|
|
+ `configure' recognizes the following options to control how it
|
|
+operates.
|
|
+
|
|
+`--help'
|
|
+`-h'
|
|
+ Print a summary of all of the options to `configure', and exit.
|
|
+
|
|
+`--help=short'
|
|
+`--help=recursive'
|
|
+ Print a summary of the options unique to this package's
|
|
+ `configure', and exit. The `short' variant lists options used
|
|
+ only in the top level, while the `recursive' variant lists options
|
|
+ also present in any nested packages.
|
|
+
|
|
+`--version'
|
|
+`-V'
|
|
+ Print the version of Autoconf used to generate the `configure'
|
|
+ script, and exit.
|
|
+
|
|
+`--cache-file=FILE'
|
|
+ Enable the cache: use and save the results of the tests in FILE,
|
|
+ traditionally `config.cache'. FILE defaults to `/dev/null' to
|
|
+ disable caching.
|
|
+
|
|
+`--config-cache'
|
|
+`-C'
|
|
+ Alias for `--cache-file=config.cache'.
|
|
+
|
|
+`--quiet'
|
|
+`--silent'
|
|
+`-q'
|
|
+ Do not print messages saying which checks are being made. To
|
|
+ suppress all normal output, redirect it to `/dev/null' (any error
|
|
+ messages will still be shown).
|
|
+
|
|
+`--srcdir=DIR'
|
|
+ Look for the package's source code in directory DIR. Usually
|
|
+ `configure' can determine that directory automatically.
|
|
+
|
|
+`--prefix=DIR'
|
|
+ Use DIR as the installation prefix. *Note Installation Names::
|
|
+ for more details, including other options available for fine-tuning
|
|
+ the installation locations.
|
|
+
|
|
+`--no-create'
|
|
+`-n'
|
|
+ Run the configure checks, but stop before creating any output
|
|
+ files.
|
|
+
|
|
+`configure' also accepts some other, not widely useful, options. Run
|
|
+`configure --help' for more details.
|
|
+
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/install-sh open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/install-sh
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/install-sh 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/install-sh 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,519 @@
|
|
+#!/bin/sh
|
|
+# install - install a program, script, or datafile
|
|
+
|
|
+scriptversion=2006-12-25.00
|
|
+
|
|
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
|
+# later released in X11R6 (xc/config/util/install.sh) with the
|
|
+# following copyright and license.
|
|
+#
|
|
+# Copyright (C) 1994 X Consortium
|
|
+#
|
|
+# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
+# of this software and associated documentation files (the "Software"), to
|
|
+# deal in the Software without restriction, including without limitation the
|
|
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
+# sell copies of the Software, and to permit persons to whom the Software is
|
|
+# furnished to do so, subject to the following conditions:
|
|
+#
|
|
+# The above copyright notice and this permission notice shall be included in
|
|
+# all copies or substantial portions of the Software.
|
|
+#
|
|
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
|
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
|
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
+#
|
|
+# Except as contained in this notice, the name of the X Consortium shall not
|
|
+# be used in advertising or otherwise to promote the sale, use or other deal-
|
|
+# ings in this Software without prior written authorization from the X Consor-
|
|
+# tium.
|
|
+#
|
|
+#
|
|
+# FSF changes to this file are in the public domain.
|
|
+#
|
|
+# Calling this script install-sh is preferred over install.sh, to prevent
|
|
+# `make' implicit rules from creating a file called install from it
|
|
+# when there is no Makefile.
|
|
+#
|
|
+# This script is compatible with the BSD install script, but was written
|
|
+# from scratch.
|
|
+
|
|
+nl='
|
|
+'
|
|
+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-}
|
|
+if test -z "$doit"; then
|
|
+ doit_exec=exec
|
|
+else
|
|
+ doit_exec=$doit
|
|
+fi
|
|
+
|
|
+# Put in absolute file names if you don't have them in your path;
|
|
+# or use environment vars.
|
|
+
|
|
+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_mkdir=
|
|
+
|
|
+# Desired mode of installed file.
|
|
+mode=0755
|
|
+
|
|
+chgrpcmd=
|
|
+chmodcmd=$chmodprog
|
|
+chowncmd=
|
|
+mvcmd=$mvprog
|
|
+rmcmd="$rmprog -f"
|
|
+stripcmd=
|
|
+
|
|
+src=
|
|
+dst=
|
|
+dir_arg=
|
|
+dst_arg=
|
|
+
|
|
+copy_on_change=false
|
|
+no_target_directory=
|
|
+
|
|
+usage="\
|
|
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
|
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
|
|
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
|
|
+ or: $0 [OPTION]... -d DIRECTORIES...
|
|
+
|
|
+In the 1st form, copy SRCFILE to DSTFILE.
|
|
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
|
|
+In the 4th, create DIRECTORIES.
|
|
+
|
|
+Options:
|
|
+ --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 CMPPROG CPPROG MKDIRPROG MVPROG
|
|
+ RMPROG STRIPPROG
|
|
+"
|
|
+
|
|
+while test $# -ne 0; do
|
|
+ case $1 in
|
|
+ -c) ;;
|
|
+
|
|
+ -C) copy_on_change=true;;
|
|
+
|
|
+ -d) dir_arg=true;;
|
|
+
|
|
+ -g) chgrpcmd="$chgrpprog $2"
|
|
+ shift;;
|
|
+
|
|
+ --help) echo "$usage"; exit $?;;
|
|
+
|
|
+ -m) mode=$2
|
|
+ case $mode in
|
|
+ *' '* | *' '* | *'
|
|
+'* | *'*'* | *'?'* | *'['*)
|
|
+ echo "$0: invalid mode: $mode" >&2
|
|
+ exit 1;;
|
|
+ esac
|
|
+ shift;;
|
|
+
|
|
+ -o) chowncmd="$chownprog $2"
|
|
+ shift;;
|
|
+
|
|
+ -s) stripcmd=$stripprog;;
|
|
+
|
|
+ -t) dst_arg=$2
|
|
+ shift;;
|
|
+
|
|
+ -T) no_target_directory=true;;
|
|
+
|
|
+ --version) echo "$0 $scriptversion"; exit $?;;
|
|
+
|
|
+ --) shift
|
|
+ break;;
|
|
+
|
|
+ -*) echo "$0: invalid option: $1" >&2
|
|
+ exit 1;;
|
|
+
|
|
+ *) break;;
|
|
+ esac
|
|
+ shift
|
|
+done
|
|
+
|
|
+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 "$dst_arg"; then
|
|
+ # $@ is not empty: it contains at least $arg.
|
|
+ set fnord "$@" "$dst_arg"
|
|
+ shift # fnord
|
|
+ fi
|
|
+ shift # arg
|
|
+ dst_arg=$arg
|
|
+ done
|
|
+fi
|
|
+
|
|
+if test $# -eq 0; then
|
|
+ if test -z "$dir_arg"; then
|
|
+ echo "$0: no input file specified." >&2
|
|
+ exit 1
|
|
+ fi
|
|
+ # It's OK to call `install-sh -d' without argument.
|
|
+ # This can happen when creating conditional directories.
|
|
+ exit 0
|
|
+fi
|
|
+
|
|
+if test -z "$dir_arg"; then
|
|
+ trap '(exit $?); exit' 1 2 13 15
|
|
+
|
|
+ # Set umask so as not to create temps with too-generous modes.
|
|
+ # However, 'strip' requires both read and write access to temps.
|
|
+ case $mode in
|
|
+ # Optimize common cases.
|
|
+ *644) cp_umask=133;;
|
|
+ *755) cp_umask=22;;
|
|
+
|
|
+ *[0-7])
|
|
+ if test -z "$stripcmd"; then
|
|
+ u_plus_rw=
|
|
+ else
|
|
+ u_plus_rw='% 200'
|
|
+ fi
|
|
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
|
|
+ *)
|
|
+ if test -z "$stripcmd"; then
|
|
+ u_plus_rw=
|
|
+ else
|
|
+ u_plus_rw=,u+rw
|
|
+ fi
|
|
+ cp_umask=$mode$u_plus_rw;;
|
|
+ esac
|
|
+fi
|
|
+
|
|
+for src
|
|
+do
|
|
+ # Protect names starting with `-'.
|
|
+ case $src in
|
|
+ -*) src=./$src;;
|
|
+ esac
|
|
+
|
|
+ if test -n "$dir_arg"; then
|
|
+ dst=$src
|
|
+ dstdir=$dst
|
|
+ test -d "$dstdir"
|
|
+ dstdir_status=$?
|
|
+ else
|
|
+
|
|
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
|
+ # might cause directories to be created, which would be especially bad
|
|
+ # if $src (and thus $dsttmp) contains '*'.
|
|
+ if test ! -f "$src" && test ! -d "$src"; then
|
|
+ echo "$0: $src does not exist." >&2
|
|
+ exit 1
|
|
+ fi
|
|
+
|
|
+ if test -z "$dst_arg"; then
|
|
+ echo "$0: no destination specified." >&2
|
|
+ exit 1
|
|
+ fi
|
|
+
|
|
+ dst=$dst_arg
|
|
+ # Protect names starting with `-'.
|
|
+ case $dst in
|
|
+ -*) 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: $dst_arg: Is a directory" >&2
|
|
+ exit 1
|
|
+ fi
|
|
+ dstdir=$dst
|
|
+ dst=$dstdir/`basename "$src"`
|
|
+ dstdir_status=0
|
|
+ else
|
|
+ # Prefer dirname, but fall back on a substitute if dirname fails.
|
|
+ dstdir=`
|
|
+ (dirname "$dst") 2>/dev/null ||
|
|
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
|
+ X"$dst" : 'X\(//\)[^/]' \| \
|
|
+ X"$dst" : 'X\(//\)$' \| \
|
|
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
|
|
+ echo X"$dst" |
|
|
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
|
|
+ s//\1/
|
|
+ q
|
|
+ }
|
|
+ /^X\(\/\/\)[^/].*/{
|
|
+ s//\1/
|
|
+ q
|
|
+ }
|
|
+ /^X\(\/\/\)$/{
|
|
+ s//\1/
|
|
+ q
|
|
+ }
|
|
+ /^X\(\/\).*/{
|
|
+ s//\1/
|
|
+ q
|
|
+ }
|
|
+ s/.*/./; q'
|
|
+ `
|
|
+
|
|
+ test -d "$dstdir"
|
|
+ dstdir_status=$?
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ obsolete_mkdir_used=false
|
|
+
|
|
+ if test $dstdir_status != 0; then
|
|
+ case $posix_mkdir in
|
|
+ '')
|
|
+ # Create intermediate dirs using mode 755 as modified by the umask.
|
|
+ # This is like FreeBSD 'install' as of 1997-10-28.
|
|
+ umask=`umask`
|
|
+ case $stripcmd.$umask in
|
|
+ # Optimize common cases.
|
|
+ *[2367][2367]) mkdir_umask=$umask;;
|
|
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
|
|
+
|
|
+ *[0-7])
|
|
+ mkdir_umask=`expr $umask + 22 \
|
|
+ - $umask % 100 % 40 + $umask % 20 \
|
|
+ - $umask % 10 % 4 + $umask % 2
|
|
+ `;;
|
|
+ *) mkdir_umask=$umask,go-w;;
|
|
+ esac
|
|
+
|
|
+ # With -d, create the new directory with the user-specified mode.
|
|
+ # Otherwise, rely on $mkdir_umask.
|
|
+ if test -n "$dir_arg"; then
|
|
+ mkdir_mode=-m$mode
|
|
+ else
|
|
+ mkdir_mode=
|
|
+ fi
|
|
+
|
|
+ posix_mkdir=false
|
|
+ case $umask in
|
|
+ *[123567][0-7][0-7])
|
|
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
|
|
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
|
|
+ ;;
|
|
+ *)
|
|
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
|
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
|
|
+
|
|
+ if (umask $mkdir_umask &&
|
|
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
|
|
+ then
|
|
+ if test -z "$dir_arg" || {
|
|
+ # Check for POSIX incompatibilities with -m.
|
|
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
|
+ # other-writeable bit of parent directory when it shouldn't.
|
|
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
|
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
|
|
+ case $ls_ld_tmpdir in
|
|
+ d????-?r-*) different_mode=700;;
|
|
+ d????-?--*) different_mode=755;;
|
|
+ *) false;;
|
|
+ esac &&
|
|
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
|
|
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
|
|
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
|
+ }
|
|
+ }
|
|
+ then posix_mkdir=:
|
|
+ fi
|
|
+ rmdir "$tmpdir/d" "$tmpdir"
|
|
+ else
|
|
+ # Remove any dirs left behind by ancient mkdir implementations.
|
|
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
|
|
+ fi
|
|
+ trap '' 0;;
|
|
+ esac;;
|
|
+ esac
|
|
+
|
|
+ if
|
|
+ $posix_mkdir && (
|
|
+ umask $mkdir_umask &&
|
|
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
|
|
+ )
|
|
+ then :
|
|
+ else
|
|
+
|
|
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
|
|
+ # or it failed possibly due to a race condition. Create the
|
|
+ # directory the slow way, step by step, checking for races as we go.
|
|
+
|
|
+ case $dstdir in
|
|
+ /*) prefix='/';;
|
|
+ -*) prefix='./';;
|
|
+ *) prefix='';;
|
|
+ esac
|
|
+
|
|
+ eval "$initialize_posix_glob"
|
|
+
|
|
+ oIFS=$IFS
|
|
+ IFS=/
|
|
+ $posix_glob set -f
|
|
+ set fnord $dstdir
|
|
+ shift
|
|
+ $posix_glob set +f
|
|
+ IFS=$oIFS
|
|
+
|
|
+ prefixes=
|
|
+
|
|
+ for d
|
|
+ do
|
|
+ test -z "$d" && continue
|
|
+
|
|
+ prefix=$prefix$d
|
|
+ if test -d "$prefix"; then
|
|
+ prefixes=
|
|
+ else
|
|
+ if $posix_mkdir; then
|
|
+ (umask=$mkdir_umask &&
|
|
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
|
+ # Don't fail if two instances are running concurrently.
|
|
+ test -d "$prefix" || exit 1
|
|
+ else
|
|
+ case $prefix in
|
|
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
|
|
+ *) qprefix=$prefix;;
|
|
+ esac
|
|
+ prefixes="$prefixes '$qprefix'"
|
|
+ fi
|
|
+ fi
|
|
+ prefix=$prefix/
|
|
+ done
|
|
+
|
|
+ if test -n "$prefixes"; then
|
|
+ # Don't fail if two instances are running concurrently.
|
|
+ (umask $mkdir_umask &&
|
|
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
|
|
+ test -d "$dstdir" || exit 1
|
|
+ obsolete_mkdir_used=true
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ if test -n "$dir_arg"; then
|
|
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
|
|
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
|
|
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
|
|
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
|
|
+ else
|
|
+
|
|
+ # Make a couple of temp file names in the proper directory.
|
|
+ dsttmp=$dstdir/_inst.$$_
|
|
+ rmtmp=$dstdir/_rm.$$_
|
|
+
|
|
+ # Trap to clean up those temp files at exit.
|
|
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
|
+
|
|
+ # Copy the file name to the temp name.
|
|
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
|
|
+
|
|
+ # and set any options; do chmod last to preserve setuid bits.
|
|
+ #
|
|
+ # If any of these fail, we abort the whole thing. If we want to
|
|
+ # 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"; } &&
|
|
+
|
|
+ # 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
|
|
+done
|
|
+
|
|
+# Local variables:
|
|
+# eval: (add-hook 'write-file-hooks 'time-stamp)
|
|
+# time-stamp-start: "scriptversion="
|
|
+# time-stamp-format: "%:y-%02m-%02d.%02H"
|
|
+# time-stamp-end: "$"
|
|
+# End:
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/iscsiuiolog open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/iscsiuiolog
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/iscsiuiolog 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/iscsiuiolog 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,11 @@
|
|
+/var/log/iscsiuio.log {
|
|
+ weekly
|
|
+ missingok
|
|
+ notifempty
|
|
+ rotate 4
|
|
+ sharedscripts
|
|
+ postrotate
|
|
+ pkill -USR1 iscsiuio 2> /dev/null || true
|
|
+ endscript
|
|
+}
|
|
+
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/ltmain.sh open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/ltmain.sh
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/ltmain.sh 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/ltmain.sh 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,6911 @@
|
|
+# ltmain.sh - Provide generalized library-building support services.
|
|
+# NOTE: Changing this file will not affect anything until you rerun configure.
|
|
+#
|
|
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
|
|
+# 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
|
|
+# 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.
|
|
+
|
|
+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"
|
|
+
|
|
+# The name of this program:
|
|
+progname=`echo "$progpath" | $SED $basename`
|
|
+modename="$progname"
|
|
+
|
|
+# Global variables:
|
|
+EXIT_SUCCESS=0
|
|
+EXIT_FAILURE=1
|
|
+
|
|
+PROGRAM=ltmain.sh
|
|
+PACKAGE=libtool
|
|
+VERSION=1.5.22
|
|
+TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)"
|
|
+
|
|
+# 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
|
|
+
|
|
+# 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
|
|
+
|
|
+# 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.
|
|
+for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
|
|
+do
|
|
+ eval "if test \"\${$lt_var+set}\" = set; then
|
|
+ save_$lt_var=\$$lt_var
|
|
+ $lt_var=C
|
|
+ export $lt_var
|
|
+ fi"
|
|
+done
|
|
+
|
|
+# 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
|
|
+
|
|
+# 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
|
|
+
|
|
+#####################################
|
|
+# 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
|
|
+# libtool processes, and avoids race conditions if possible. If
|
|
+# given, STRING is the basename for that directory.
|
|
+func_mktempdir ()
|
|
+{
|
|
+ my_template="${TMPDIR-/tmp}/${1-$progname}"
|
|
+
|
|
+ if test "$run" = ":"; then
|
|
+ # Return a directory name, but don't create it in dry-run mode
|
|
+ my_tmpdir="${my_template}-$$"
|
|
+ else
|
|
+
|
|
+ # If mktemp works, use that first and foremost
|
|
+ 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}$$"
|
|
+
|
|
+ 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
|
|
+ }
|
|
+ fi
|
|
+
|
|
+ $echo "X$my_tmpdir" | $Xsed
|
|
+}
|
|
+
|
|
+
|
|
+# 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 ()
|
|
+{
|
|
+ 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
|
|
+ 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_infer_tag arg
|
|
+# Infer tagged configuration to use if any are available and
|
|
+# if one wasn't chosen via the "--tag" command line option.
|
|
+# Only attempt this if the compiler in the base compile
|
|
+# command doesn't match the default compiler.
|
|
+# arg is usually of the form 'gcc ...'
|
|
+func_infer_tag ()
|
|
+{
|
|
+ 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"
|
|
+ done
|
|
+ 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` "*) ;;
|
|
+ # 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
|
|
+ # 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
|
|
+ case "$@ " in
|
|
+ " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*)
|
|
+ # The compiler in the base compile command matches
|
|
+ # the one in the tagged configuration.
|
|
+ # Assume this is the tagged configuration we want.
|
|
+ tagname=$z
|
|
+ break
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ done
|
|
+ # If $tagname still isn't set, then no tagged configuration
|
|
+ # 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"
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+}
|
|
+
|
|
+
|
|
+# func_extract_an_archive dir oldlib
|
|
+func_extract_an_archive ()
|
|
+{
|
|
+ f_ex_an_ar_dir="$1"; shift
|
|
+ f_ex_an_ar_oldlib="$1"
|
|
+
|
|
+ $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
|
|
+ :
|
|
+ else
|
|
+ $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2
|
|
+ exit $EXIT_FAILURE
|
|
+ fi
|
|
+}
|
|
+
|
|
+# func_extract_archives gentop oldlib ...
|
|
+func_extract_archives ()
|
|
+{
|
|
+ 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
|
|
+ fi
|
|
+
|
|
+ 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
|
|
+ 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"
|
|
+}
|
|
+# End of Shell function definitions
|
|
+#####################################
|
|
+
|
|
+# Darwin sucks
|
|
+eval std_shrext=\"$shrext_cmds\"
|
|
+
|
|
+disable_libs=no
|
|
+
|
|
+# 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= ;;
|
|
+ esac
|
|
+
|
|
+ # 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
|
|
+ ;;
|
|
+ *)
|
|
+ eval "$prev=\$arg"
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ prev=
|
|
+ prevopt=
|
|
+ continue
|
|
+ fi
|
|
+
|
|
+ # Have we seen a non-optional argument yet?
|
|
+ case $arg in
|
|
+ --help)
|
|
+ show_help=yes
|
|
+ ;;
|
|
+
|
|
+ --version)
|
|
+ $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
|
|
+ $echo
|
|
+ $echo "Copyright (C) 2005 Free Software Foundation, Inc."
|
|
+ $echo "This is free software; see the source for copying conditions. There is NO"
|
|
+ $echo "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 $?
|
|
+ ;;
|
|
+
|
|
+ --debug)
|
|
+ $echo "$progname: enabling shell trace mode"
|
|
+ set -x
|
|
+ preserve_args="$preserve_args $arg"
|
|
+ ;;
|
|
+
|
|
+ --dry-run | -n)
|
|
+ run=:
|
|
+ ;;
|
|
+
|
|
+ --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" ;;
|
|
+
|
|
+ --mode) prevopt="--mode" prev=mode ;;
|
|
+ --mode=*) mode="$optarg" ;;
|
|
+
|
|
+ --preserve-dup-deps) duplicate_deps="yes" ;;
|
|
+
|
|
+ --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"
|
|
+ ;;
|
|
+
|
|
+ -dlopen)
|
|
+ prevopt="-dlopen"
|
|
+ prev=execute_dlfiles
|
|
+ ;;
|
|
+
|
|
+ -*)
|
|
+ $echo "$modename: unrecognized option \`$arg'" 1>&2
|
|
+ $echo "$help" 1>&2
|
|
+ exit $EXIT_FAILURE
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ 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
|
|
+
|
|
+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=
|
|
+
|
|
+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
|
|
+
|
|
+ # 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
|
|
+ fi
|
|
+
|
|
+ # 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
|
|
+ fi
|
|
+
|
|
+ # 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"
|
|
+ # Get the compilation command and the source file.
|
|
+ base_compile=
|
|
+ srcfile="$nonopt" # always keep a non-empty value in "srcfile"
|
|
+ suppress_opt=yes
|
|
+ suppress_output=
|
|
+ arg_mode=normal
|
|
+ libobj=
|
|
+ later=
|
|
+
|
|
+ for arg
|
|
+ do
|
|
+ case $arg_mode in
|
|
+ arg )
|
|
+ # do not "continue". Instead, add this to base_compile
|
|
+ lastarg="$arg"
|
|
+ arg_mode=normal
|
|
+ ;;
|
|
+
|
|
+ target )
|
|
+ libobj="$arg"
|
|
+ arg_mode=normal
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ normal )
|
|
+ # 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
|
|
+ arg_mode=target
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -static | -prefer-pic | -prefer-non-pic)
|
|
+ later="$later $arg"
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -no-suppress)
|
|
+ suppress_opt=no
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -Xcompiler)
|
|
+ arg_mode=arg # the next one goes into the "base_compile" arg list
|
|
+ continue # The current "srcfile" will either be retained or
|
|
+ ;; # replaced later. I would guess that would be a bug.
|
|
+
|
|
+ -Wc,*)
|
|
+ args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
|
|
+ lastarg=
|
|
+ save_ifs="$IFS"; IFS=','
|
|
+ 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"
|
|
+ done
|
|
+ IFS="$save_ifs"
|
|
+ lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
|
|
+
|
|
+ # Add the arguments to base_compile.
|
|
+ base_compile="$base_compile $lastarg"
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ * )
|
|
+ # Accept the current argument as the source file.
|
|
+ # The previous "srcfile" becomes the current argument.
|
|
+ #
|
|
+ lastarg="$srcfile"
|
|
+ srcfile="$arg"
|
|
+ ;;
|
|
+ esac # case $arg
|
|
+ ;;
|
|
+ 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"
|
|
+ done # for arg
|
|
+
|
|
+ case $arg_mode in
|
|
+ arg)
|
|
+ $echo "$modename: you must specify an argument for -Xcompile"
|
|
+ exit $EXIT_FAILURE
|
|
+ ;;
|
|
+ target)
|
|
+ $echo "$modename: you must specify a target with \`-o'" 1>&2
|
|
+ exit $EXIT_FAILURE
|
|
+ ;;
|
|
+ *)
|
|
+ # Get the name of the library object.
|
|
+ [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
|
|
+ ;;
|
|
+ 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 ;;
|
|
+ *.f90) xform=f90 ;;
|
|
+ *.for) xform=for ;;
|
|
+ *.java) xform=java ;;
|
|
+ *.obj) xform=obj ;;
|
|
+ esac
|
|
+
|
|
+ libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
|
|
+
|
|
+ case $libobj in
|
|
+ *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
|
|
+ *)
|
|
+ $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
|
|
+ exit $EXIT_FAILURE
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ func_infer_tag $base_compile
|
|
+
|
|
+ for arg in $later; do
|
|
+ case $arg in
|
|
+ -static)
|
|
+ build_old_libs=yes
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -prefer-pic)
|
|
+ pic_mode=yes
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -prefer-non-pic)
|
|
+ pic_mode=no
|
|
+ continue
|
|
+ ;;
|
|
+ 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
|
|
+ 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
|
|
+
|
|
+ # Delete any leftover library objects.
|
|
+ if test "$build_old_libs" = yes; then
|
|
+ removelist="$obj $lobj $libobj ${libobj}T"
|
|
+ else
|
|
+ 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*)
|
|
+ pic_mode=default
|
|
+ ;;
|
|
+ esac
|
|
+ if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
|
|
+ # non-PIC code in shared libraries is not supported
|
|
+ pic_mode=default
|
|
+ fi
|
|
+
|
|
+ # 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}
|
|
+ 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
|
|
+ lockfile=
|
|
+ fi
|
|
+
|
|
+ # 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"
|
|
+ sleep 2
|
|
+ done
|
|
+ elif test "$need_locks" = warn; then
|
|
+ if test -f "$lockfile"; then
|
|
+ $echo "\
|
|
+*** ERROR, $lockfile exists and contains:
|
|
+`cat $lockfile 2>/dev/null`
|
|
+
|
|
+This indicates that another process is trying to use the same
|
|
+temporary object file, and libtool could not work around it because
|
|
+your compiler does not support \`-c' and \`-o' together. If you
|
|
+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
|
|
+ exit $EXIT_FAILURE
|
|
+ fi
|
|
+ $echo "$srcfile" > "$lockfile"
|
|
+ fi
|
|
+
|
|
+ if test -n "$fix_srcfile_path"; then
|
|
+ eval srcfile=\"$fix_srcfile_path\"
|
|
+ fi
|
|
+ qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"`
|
|
+ case $qsrcfile in
|
|
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
|
|
+ qsrcfile="\"$qsrcfile\"" ;;
|
|
+ esac
|
|
+
|
|
+ $run $rm "$libobj" "${libobj}T"
|
|
+
|
|
+ # 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
|
|
+
|
|
+ # Only build a PIC object if we are building libtool libraries.
|
|
+ if test "$build_libtool_libs" = yes; then
|
|
+ # Without this assignment, base_compile gets emptied.
|
|
+ fbsd_hideous_sh_bug=$base_compile
|
|
+
|
|
+ if test "$pic_mode" != no; then
|
|
+ command="$base_compile $qsrcfile $pic_flag"
|
|
+ else
|
|
+ # Don't build PIC code
|
|
+ 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
|
|
+
|
|
+ if test -z "$output_obj"; then
|
|
+ # Place PIC objects in $objdir
|
|
+ command="$command -o $lobj"
|
|
+ fi
|
|
+
|
|
+ $run $rm "$lobj" "$output_obj"
|
|
+
|
|
+ $show "$command"
|
|
+ if $run eval "$command"; then :
|
|
+ else
|
|
+ test -n "$output_obj" && $run $rm $removelist
|
|
+ exit $EXIT_FAILURE
|
|
+ fi
|
|
+
|
|
+ if test "$need_locks" = warn &&
|
|
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
|
|
+ $echo "\
|
|
+*** ERROR, $lockfile contains:
|
|
+`cat $lockfile 2>/dev/null`
|
|
+
|
|
+but it should contain:
|
|
+$srcfile
|
|
+
|
|
+This indicates that another process is trying to use the same
|
|
+temporary object file, and libtool could not work around it because
|
|
+your compiler does not support \`-c' and \`-o' together. If you
|
|
+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
|
|
+ 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
|
|
+ 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'
|
|
+ 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"
|
|
+ else
|
|
+ command="$base_compile $qsrcfile $pic_flag"
|
|
+ fi
|
|
+ if test "$compiler_c_o" = yes; then
|
|
+ command="$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 "$command"; then :
|
|
+ else
|
|
+ $run $rm $removelist
|
|
+ exit $EXIT_FAILURE
|
|
+ fi
|
|
+
|
|
+ if test "$need_locks" = warn &&
|
|
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
|
|
+ $echo "\
|
|
+*** ERROR, $lockfile contains:
|
|
+`cat $lockfile 2>/dev/null`
|
|
+
|
|
+but it should contain:
|
|
+$srcfile
|
|
+
|
|
+This indicates that another process is trying to use the same
|
|
+temporary object file, and libtool could not work around it because
|
|
+your compiler does not support \`-c' and \`-o' together. If you
|
|
+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
|
|
+ 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 :
|
|
+ else
|
|
+ error=$?
|
|
+ $run $rm $removelist
|
|
+ exit $error
|
|
+ fi
|
|
+ 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'
|
|
+
|
|
+EOF
|
|
+ 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
|
|
+
|
|
+EOF
|
|
+ fi
|
|
+
|
|
+ $run $mv "${libobj}T" "${libobj}"
|
|
+
|
|
+ # Unlock the critical section if it was locked
|
|
+ if test "$need_locks" != no; then
|
|
+ $run $rm "$lockfile"
|
|
+ fi
|
|
+
|
|
+ exit $EXIT_SUCCESS
|
|
+ ;;
|
|
+
|
|
+ # libtool link mode
|
|
+ link | relink)
|
|
+ modename="$modename: link"
|
|
+ case $host in
|
|
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
|
|
+ # 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
|
|
+ # flag for every libtool invocation.
|
|
+ # allow_undefined=no
|
|
+
|
|
+ # FIXME: Unfortunately, there are problems with the above when trying
|
|
+ # to make a dll which has undefined symbols, in which case not
|
|
+ # even a static library is built. For now, we need to specify
|
|
+ # -no-undefined on the libtool link line when we can be certain
|
|
+ # that all symbols are satisfied, otherwise we get a static library.
|
|
+ allow_undefined=yes
|
|
+ ;;
|
|
+ *)
|
|
+ allow_undefined=yes
|
|
+ ;;
|
|
+ esac
|
|
+ libtool_args="$nonopt"
|
|
+ base_compile="$nonopt $@"
|
|
+ compile_command="$nonopt"
|
|
+ finalize_command="$nonopt"
|
|
+
|
|
+ compile_rpath=
|
|
+ finalize_rpath=
|
|
+ compile_shlibpath=
|
|
+ finalize_shlibpath=
|
|
+ convenience=
|
|
+ old_convenience=
|
|
+ deplibs=
|
|
+ old_deplibs=
|
|
+ compiler_flags=
|
|
+ linker_flags=
|
|
+ dllsearchpath=
|
|
+ lib_search_path=`pwd`
|
|
+ inst_prefix_dir=
|
|
+
|
|
+ avoid_version=no
|
|
+ dlfiles=
|
|
+ dlprefiles=
|
|
+ dlself=no
|
|
+ export_dynamic=no
|
|
+ export_symbols=
|
|
+ export_symbols_regex=
|
|
+ generated=
|
|
+ libobjs=
|
|
+ ltlibs=
|
|
+ module=no
|
|
+ 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
|
|
+ prev=
|
|
+ prevarg=
|
|
+ release=
|
|
+ rpath=
|
|
+ xrpath=
|
|
+ perm_rpath=
|
|
+ temp_rpath=
|
|
+ thread_safe=no
|
|
+ vinfo=
|
|
+ vinfo_number=no
|
|
+
|
|
+ func_infer_tag $base_compile
|
|
+
|
|
+ # We need to know -static, to get the right output filenames.
|
|
+ for arg
|
|
+ do
|
|
+ case $arg in
|
|
+ -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
|
|
+ fi
|
|
+ if test -n "$link_static_flag"; then
|
|
+ dlopen_self=$dlopen_self_static
|
|
+ fi
|
|
+ prefer_static_libs=yes
|
|
+ ;;
|
|
+ -static)
|
|
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
|
|
+ dlopen_self=$dlopen_self_static
|
|
+ fi
|
|
+ prefer_static_libs=built
|
|
+ ;;
|
|
+ -static-libtool-libs)
|
|
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
|
|
+ dlopen_self=$dlopen_self_static
|
|
+ fi
|
|
+ prefer_static_libs=yes
|
|
+ ;;
|
|
+ esac
|
|
+ build_libtool_libs=no
|
|
+ build_old_libs=yes
|
|
+ break
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+
|
|
+ # See if our shared archives depend on static archives.
|
|
+ test -n "$old_archive_from_new_cmds" && build_old_libs=yes
|
|
+
|
|
+ # Go through the arguments, transforming them on the way.
|
|
+ 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"
|
|
+
|
|
+ # 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@"
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ case $prev in
|
|
+ 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@"
|
|
+ preload=yes
|
|
+ fi
|
|
+ case $arg in
|
|
+ *.la | *.lo) ;; # We handle these cases below.
|
|
+ force)
|
|
+ if test "$dlself" = no; then
|
|
+ dlself=needless
|
|
+ export_dynamic=yes
|
|
+ fi
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ self)
|
|
+ if test "$prev" = dlprefiles; then
|
|
+ dlself=yes
|
|
+ elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
|
|
+ dlself=yes
|
|
+ else
|
|
+ dlself=needless
|
|
+ export_dynamic=yes
|
|
+ fi
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ *)
|
|
+ if test "$prev" = dlfiles; then
|
|
+ dlfiles="$dlfiles $arg"
|
|
+ else
|
|
+ dlprefiles="$dlprefiles $arg"
|
|
+ fi
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ expsyms)
|
|
+ export_symbols="$arg"
|
|
+ if test ! -f "$arg"; then
|
|
+ $echo "$modename: symbol file \`$arg' does not exist"
|
|
+ exit $EXIT_FAILURE
|
|
+ fi
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ expsyms_regex)
|
|
+ export_symbols_regex="$arg"
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ inst_prefix)
|
|
+ inst_prefix_dir="$arg"
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ precious_regex)
|
|
+ precious_files_regex="$arg"
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ release)
|
|
+ release="-$arg"
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ objectlist)
|
|
+ if test -f "$arg"; then
|
|
+ save_arg=$arg
|
|
+ moreargs=
|
|
+ for fil in `cat $save_arg`
|
|
+ do
|
|
+# moreargs="$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
|
|
+ pic_object=
|
|
+ non_pic_object=
|
|
+
|
|
+ # Read the .lo file
|
|
+ # If there is no directory component, then add one.
|
|
+ case $arg in
|
|
+ */* | *\\*) . $arg ;;
|
|
+ *) . ./$arg ;;
|
|
+ esac
|
|
+
|
|
+ if test -z "$pic_object" || \
|
|
+ test -z "$non_pic_object" ||
|
|
+ test "$pic_object" = none && \
|
|
+ test "$non_pic_object" = none; then
|
|
+ $echo "$modename: cannot find name of object for \`$arg'" 1>&2
|
|
+ exit $EXIT_FAILURE
|
|
+ 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
|
|
+
|
|
+ if test "$pic_object" != none; then
|
|
+ # Prepend the subdirectory the object is found in.
|
|
+ pic_object="$xdir$pic_object"
|
|
+
|
|
+ if test "$prev" = dlfiles; then
|
|
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
|
|
+ dlfiles="$dlfiles $pic_object"
|
|
+ prev=
|
|
+ continue
|
|
+ else
|
|
+ # If libtool objects are unsupported, then we need to preload.
|
|
+ prev=dlprefiles
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ # CHECK ME: I think I busted this. -Ossama
|
|
+ if test "$prev" = dlprefiles; then
|
|
+ # Preload the old-style object.
|
|
+ dlprefiles="$dlprefiles $pic_object"
|
|
+ prev=
|
|
+ fi
|
|
+
|
|
+ # A PIC object.
|
|
+ libobjs="$libobjs $pic_object"
|
|
+ arg="$pic_object"
|
|
+ fi
|
|
+
|
|
+ # Non-PIC object.
|
|
+ if test "$non_pic_object" != none; then
|
|
+ # Prepend the subdirectory the object is found in.
|
|
+ non_pic_object="$xdir$non_pic_object"
|
|
+
|
|
+ # A standard non-PIC object
|
|
+ non_pic_objects="$non_pic_objects $non_pic_object"
|
|
+ if test -z "$pic_object" || test "$pic_object" = none ; then
|
|
+ arg="$non_pic_object"
|
|
+ fi
|
|
+ else
|
|
+ # 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"
|
|
+ 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.
|
|
+
|
|
+ # 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"
|
|
+ fi
|
|
+ fi
|
|
+ done
|
|
+ else
|
|
+ $echo "$modename: link input file \`$save_arg' does not exist"
|
|
+ exit $EXIT_FAILURE
|
|
+ fi
|
|
+ arg=$save_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
|
|
+ ;;
|
|
+ esac
|
|
+ if test "$prev" = rpath; then
|
|
+ case "$rpath " in
|
|
+ *" $arg "*) ;;
|
|
+ *) rpath="$rpath $arg" ;;
|
|
+ esac
|
|
+ else
|
|
+ case "$xrpath " in
|
|
+ *" $arg "*) ;;
|
|
+ *) xrpath="$xrpath $arg" ;;
|
|
+ esac
|
|
+ fi
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ xcompiler)
|
|
+ compiler_flags="$compiler_flags $qarg"
|
|
+ prev=
|
|
+ compile_command="$compile_command $qarg"
|
|
+ finalize_command="$finalize_command $qarg"
|
|
+ continue
|
|
+ ;;
|
|
+ xlinker)
|
|
+ linker_flags="$linker_flags $qarg"
|
|
+ compiler_flags="$compiler_flags $wl$qarg"
|
|
+ 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"
|
|
+ prev=
|
|
+ compile_command="$compile_command $qarg"
|
|
+ finalize_command="$finalize_command $qarg"
|
|
+ continue
|
|
+ ;;
|
|
+ shrext)
|
|
+ shrext_cmds="$arg"
|
|
+ prev=
|
|
+ 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"
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ *)
|
|
+ eval "$prev=\"\$arg\""
|
|
+ prev=
|
|
+ continue
|
|
+ ;;
|
|
+ esac
|
|
+ fi # test -n "$prev"
|
|
+
|
|
+ prevarg="$arg"
|
|
+
|
|
+ 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"
|
|
+ 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
|
|
+ ;;
|
|
+
|
|
+ -avoid-version)
|
|
+ avoid_version=yes
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -dlopen)
|
|
+ prev=dlfiles
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -dlpreopen)
|
|
+ prev=dlprefiles
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -export-dynamic)
|
|
+ export_dynamic=yes
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -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
|
|
+ fi
|
|
+ if test "X$arg" = "X-export-symbols"; then
|
|
+ prev=expsyms
|
|
+ else
|
|
+ prev=expsyms_regex
|
|
+ fi
|
|
+ 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"
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -inst-prefix-dir)
|
|
+ prev=inst_prefix
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
|
|
+ # so, if we see these flags be careful not to treat them like -L
|
|
+ -L[A-Z][A-Z]*:*)
|
|
+ case $with_gcc/$host in
|
|
+ no/*-*-irix* | /*-*-irix*)
|
|
+ compile_command="$compile_command $arg"
|
|
+ finalize_command="$finalize_command $arg"
|
|
+ ;;
|
|
+ esac
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -L*)
|
|
+ dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
|
|
+ # 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
|
|
+ dir="$absdir"
|
|
+ ;;
|
|
+ esac
|
|
+ case "$deplibs " in
|
|
+ *" -L$dir "*) ;;
|
|
+ *)
|
|
+ deplibs="$deplibs -L$dir"
|
|
+ lib_search_path="$lib_search_path $dir"
|
|
+ ;;
|
|
+ esac
|
|
+ case $host in
|
|
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
|
|
+ testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'`
|
|
+ case :$dllsearchpath: in
|
|
+ *":$dir:"*) ;;
|
|
+ *) dllsearchpath="$dllsearchpath:$dir";;
|
|
+ esac
|
|
+ case :$dllsearchpath: in
|
|
+ *":$testbindir:"*) ;;
|
|
+ *) dllsearchpath="$dllsearchpath:$testbindir";;
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -l*)
|
|
+ if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
|
|
+ case $host in
|
|
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*)
|
|
+ # These systems don't actually have a C or math library (as such)
|
|
+ continue
|
|
+ ;;
|
|
+ *-*-os2*)
|
|
+ # These systems don't actually have a C library (as such)
|
|
+ test "X$arg" = "X-lc" && continue
|
|
+ ;;
|
|
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
|
|
+ # Do not include libc due to us having libc/libc_r.
|
|
+ test "X$arg" = "X-lc" && continue
|
|
+ ;;
|
|
+ *-*-rhapsody* | *-*-darwin1.[012])
|
|
+ # Rhapsody C and math libraries are in the System framework
|
|
+ deplibs="$deplibs -framework System"
|
|
+ continue
|
|
+ ;;
|
|
+ *-*-sco3.2v5* | *-*-sco5v6*)
|
|
+ # Causes problems with __ctype
|
|
+ test "X$arg" = "X-lc" && continue
|
|
+ ;;
|
|
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
|
|
+ # Compiler inserts libc in the correct place for threads to work
|
|
+ test "X$arg" = "X-lc" && continue
|
|
+ ;;
|
|
+ esac
|
|
+ elif test "X$arg" = "X-lc_r"; then
|
|
+ case $host in
|
|
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
|
|
+ # Do not include libc_r directly, use -pthread flag.
|
|
+ continue
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ deplibs="$deplibs $arg"
|
|
+ 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"
|
|
+ prev=xcompiler
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
|
|
+ compiler_flags="$compiler_flags $arg"
|
|
+ compile_command="$compile_command $arg"
|
|
+ finalize_command="$finalize_command $arg"
|
|
+ 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
|
|
+ # -pg pass through profiling flag for GCC
|
|
+ # @file GCC response files
|
|
+ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \
|
|
+ -t[45]*|-txscale*|@*)
|
|
+
|
|
+ # 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
|
|
+ ;;
|
|
+
|
|
+ -no-install)
|
|
+ case $host in
|
|
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
|
|
+ # The PATH hackery in wrapper scripts is required on Windows
|
|
+ # 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
|
|
+ fast_install=no
|
|
+ ;;
|
|
+ *) no_install=yes ;;
|
|
+ esac
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -no-undefined)
|
|
+ allow_undefined=no
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -objectlist)
|
|
+ prev=objectlist
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -o) prev=output ;;
|
|
+
|
|
+ -precious-files-regex)
|
|
+ prev=precious_regex
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -release)
|
|
+ prev=release
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -rpath)
|
|
+ prev=rpath
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -R)
|
|
+ prev=xrpath
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -R*)
|
|
+ dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
|
|
+ # We need an absolute path.
|
|
+ case $dir in
|
|
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
|
|
+ *)
|
|
+ $echo "$modename: only absolute run-paths are allowed" 1>&2
|
|
+ exit $EXIT_FAILURE
|
|
+ ;;
|
|
+ esac
|
|
+ case "$xrpath " in
|
|
+ *" $dir "*) ;;
|
|
+ *) xrpath="$xrpath $dir" ;;
|
|
+ esac
|
|
+ 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
|
|
+ # didn't have a PIC flag, but the assumption that the effects
|
|
+ # would be equivalent was wrong. It would break on at least
|
|
+ # Digital Unix and AIX.
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -thread-safe)
|
|
+ thread_safe=yes
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -version-info)
|
|
+ prev=vinfo
|
|
+ continue
|
|
+ ;;
|
|
+ -version-number)
|
|
+ prev=vinfo
|
|
+ vinfo_number=yes
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -Wc,*)
|
|
+ args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
|
|
+ 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"
|
|
+ done
|
|
+ IFS="$save_ifs"
|
|
+ arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
|
|
+ ;;
|
|
+
|
|
+ -Wl,*)
|
|
+ args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
|
|
+ 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"
|
|
+ done
|
|
+ IFS="$save_ifs"
|
|
+ arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
|
|
+ ;;
|
|
+
|
|
+ -Xcompiler)
|
|
+ prev=xcompiler
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -Xlinker)
|
|
+ prev=xlinker
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ -XCClinker)
|
|
+ prev=xcclinker
|
|
+ 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
|
|
+ ;;
|
|
+
|
|
+ *.$objext)
|
|
+ # A standard object.
|
|
+ objs="$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
|
|
+ pic_object=
|
|
+ non_pic_object=
|
|
+
|
|
+ # Read the .lo file
|
|
+ # If there is no directory component, then add one.
|
|
+ case $arg in
|
|
+ */* | *\\*) . $arg ;;
|
|
+ *) . ./$arg ;;
|
|
+ esac
|
|
+
|
|
+ if test -z "$pic_object" || \
|
|
+ test -z "$non_pic_object" ||
|
|
+ test "$pic_object" = none && \
|
|
+ test "$non_pic_object" = none; then
|
|
+ $echo "$modename: cannot find name of object for \`$arg'" 1>&2
|
|
+ exit $EXIT_FAILURE
|
|
+ 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
|
|
+
|
|
+ if test "$pic_object" != none; then
|
|
+ # Prepend the subdirectory the object is found in.
|
|
+ pic_object="$xdir$pic_object"
|
|
+
|
|
+ if test "$prev" = dlfiles; then
|
|
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
|
|
+ dlfiles="$dlfiles $pic_object"
|
|
+ prev=
|
|
+ continue
|
|
+ else
|
|
+ # If libtool objects are unsupported, then we need to preload.
|
|
+ prev=dlprefiles
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ # CHECK ME: I think I busted this. -Ossama
|
|
+ if test "$prev" = dlprefiles; then
|
|
+ # Preload the old-style object.
|
|
+ dlprefiles="$dlprefiles $pic_object"
|
|
+ prev=
|
|
+ fi
|
|
+
|
|
+ # A PIC object.
|
|
+ libobjs="$libobjs $pic_object"
|
|
+ arg="$pic_object"
|
|
+ fi
|
|
+
|
|
+ # Non-PIC object.
|
|
+ if test "$non_pic_object" != none; then
|
|
+ # Prepend the subdirectory the object is found in.
|
|
+ non_pic_object="$xdir$non_pic_object"
|
|
+
|
|
+ # A standard non-PIC object
|
|
+ non_pic_objects="$non_pic_objects $non_pic_object"
|
|
+ if test -z "$pic_object" || test "$pic_object" = none ; then
|
|
+ arg="$non_pic_object"
|
|
+ fi
|
|
+ else
|
|
+ # 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"
|
|
+ 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.
|
|
+
|
|
+ # 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"
|
|
+ fi
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ *.$libext)
|
|
+ # An archive.
|
|
+ deplibs="$deplibs $arg"
|
|
+ old_deplibs="$old_deplibs $arg"
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ *.la)
|
|
+ # A libtool-controlled library.
|
|
+
|
|
+ if test "$prev" = dlfiles; then
|
|
+ # This library was specified with -dlopen.
|
|
+ dlfiles="$dlfiles $arg"
|
|
+ prev=
|
|
+ elif test "$prev" = dlprefiles; then
|
|
+ # The library was specified with -dlpreopen.
|
|
+ dlprefiles="$dlprefiles $arg"
|
|
+ prev=
|
|
+ else
|
|
+ deplibs="$deplibs $arg"
|
|
+ fi
|
|
+ continue
|
|
+ ;;
|
|
+
|
|
+ # Some other compiler argument.
|
|
+ *)
|
|
+ # 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
|
|
+ ;;
|
|
+ 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"
|
|
+ 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
|
|
+
|
|
+ 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"
|
|
+ fi
|
|
+
|
|
+ oldlibs=
|
|
+ # calculate the name of the file, without its directory
|
|
+ outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
|
|
+ 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\'\`
|
|
+ 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
|
|
+ # 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
|
|
+
|
|
+ # 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
|
|
+ ;;
|
|
+ *.$libext) linkmode=oldlib ;;
|
|
+ *.lo | *.$objext) linkmode=obj ;;
|
|
+ *.la) linkmode=lib ;;
|
|
+ *) 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
|
|
+ case "$libs " in
|
|
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
|
|
+ esac
|
|
+ fi
|
|
+ libs="$libs $deplib"
|
|
+ done
|
|
+
|
|
+ if test "$linkmode" = lib; then
|
|
+ libs="$predeps $libs $compiler_lib_search_path $postdeps"
|
|
+
|
|
+ # Compute libraries that are listed more than once in $predeps
|
|
+ # $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
|
|
+ for pre_post_dep in $predeps $postdeps; do
|
|
+ case "$pre_post_deps " in
|
|
+ *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
|
|
+ esac
|
|
+ pre_post_deps="$pre_post_deps $pre_post_dep"
|
|
+ done
|
|
+ fi
|
|
+ pre_post_deps=
|
|
+ fi
|
|
+
|
|
+ deplibs=
|
|
+ newdependency_libs=
|
|
+ newlib_search_path=
|
|
+ need_relink=no # whether we're linking any uninstalled libtool libraries
|
|
+ notinst_deplibs= # not-installed libtool libraries
|
|
+ case $linkmode in
|
|
+ lib)
|
|
+ passes="conv 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
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+ ;;
|
|
+ prog)
|
|
+ compile_deplibs=
|
|
+ finalize_deplibs=
|
|
+ alldeplibs=no
|
|
+ newdlfiles=
|
|
+ newdlprefiles=
|
|
+ passes="conv scan dlopen dlpreopen link"
|
|
+ ;;
|
|
+ *) passes="conv"
|
|
+ ;;
|
|
+ esac
|
|
+ for pass in $passes; do
|
|
+ if test "$linkmode,$pass" = "lib,link" ||
|
|
+ test "$linkmode,$pass" = "prog,scan"; then
|
|
+ libs="$deplibs"
|
|
+ deplibs=
|
|
+ fi
|
|
+ if test "$linkmode" = prog; then
|
|
+ case $pass in
|
|
+ dlopen) libs="$dlfiles" ;;
|
|
+ dlpreopen) libs="$dlprefiles" ;;
|
|
+ link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
|
|
+ esac
|
|
+ fi
|
|
+ if test "$pass" = dlopen; then
|
|
+ # Collect dlpreopened libraries
|
|
+ save_deplibs="$deplibs"
|
|
+ deplibs=
|
|
+ fi
|
|
+ for deplib in $libs; do
|
|
+ lib=
|
|
+ found=no
|
|
+ case $deplib in
|
|
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
|
|
+ if test "$linkmode,$pass" = "prog,link"; then
|
|
+ compile_deplibs="$deplib $compile_deplibs"
|
|
+ finalize_deplibs="$deplib $finalize_deplibs"
|
|
+ else
|
|
+ compiler_flags="$compiler_flags $deplib"
|
|
+ fi
|
|
+ continue
|
|
+ ;;
|
|
+ -l*)
|
|
+ if test "$linkmode" != lib && test "$linkmode" != prog; then
|
|
+ $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2
|
|
+ continue
|
|
+ fi
|
|
+ name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
|
|
+ for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
|
|
+ for search_ext in .la $std_shrext .so .a; do
|
|
+ # Search the libtool library
|
|
+ lib="$searchdir/lib${name}${search_ext}"
|
|
+ if test -f "$lib"; then
|
|
+ if test "$search_ext" = ".la"; then
|
|
+ found=yes
|
|
+ else
|
|
+ found=no
|
|
+ fi
|
|
+ break 2
|
|
+ fi
|
|
+ done
|
|
+ done
|
|
+ if test "$found" != yes; then
|
|
+ # deplib doesn't seem to be a libtool library
|
|
+ if test "$linkmode,$pass" = "prog,link"; then
|
|
+ compile_deplibs="$deplib $compile_deplibs"
|
|
+ finalize_deplibs="$deplib $finalize_deplibs"
|
|
+ else
|
|
+ deplibs="$deplib $deplibs"
|
|
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
|
|
+ fi
|
|
+ continue
|
|
+ else # deplib is a libtool library
|
|
+ # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
|
|
+ # We need to do some special things here, and not later.
|
|
+ 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
|
|
+ library_names=
|
|
+ old_library=
|
|
+ case $lib in
|
|
+ */* | *\\*) . $lib ;;
|
|
+ *) . ./$lib ;;
|
|
+ esac
|
|
+ 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="."
|
|
+ lib=$ladir/$old_library
|
|
+ if test "$linkmode,$pass" = "prog,link"; then
|
|
+ compile_deplibs="$deplib $compile_deplibs"
|
|
+ finalize_deplibs="$deplib $finalize_deplibs"
|
|
+ else
|
|
+ deplibs="$deplib $deplibs"
|
|
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
|
|
+ fi
|
|
+ continue
|
|
+ fi
|
|
+ fi
|
|
+ ;;
|
|
+ *) ;;
|
|
+ esac
|
|
+ fi
|
|
+ fi
|
|
+ ;; # -l
|
|
+ -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//'`
|
|
+ ;;
|
|
+ prog)
|
|
+ if test "$pass" = conv; then
|
|
+ deplibs="$deplib $deplibs"
|
|
+ continue
|
|
+ fi
|
|
+ if test "$pass" = scan; then
|
|
+ deplibs="$deplib $deplibs"
|
|
+ else
|
|
+ compile_deplibs="$deplib $compile_deplibs"
|
|
+ finalize_deplibs="$deplib $finalize_deplibs"
|
|
+ fi
|
|
+ newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
|
|
+ ;;
|
|
+ *)
|
|
+ $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2
|
|
+ ;;
|
|
+ esac # linkmode
|
|
+ continue
|
|
+ ;; # -L
|
|
+ -R*)
|
|
+ if test "$pass" = link; then
|
|
+ dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
|
|
+ # Make sure the xrpath contains only unique directories.
|
|
+ case "$xrpath " in
|
|
+ *" $dir "*) ;;
|
|
+ *) xrpath="$xrpath $dir" ;;
|
|
+ esac
|
|
+ fi
|
|
+ deplibs="$deplib $deplibs"
|
|
+ continue
|
|
+ ;;
|
|
+ *.la) lib="$deplib" ;;
|
|
+ *.$libext)
|
|
+ if test "$pass" = conv; then
|
|
+ deplibs="$deplib $deplibs"
|
|
+ continue
|
|
+ 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 \
|
|
+ | $EGREP "$match_pattern_regex" > /dev/null; then
|
|
+ valid_a_lib=yes
|
|
+ fi
|
|
+ ;;
|
|
+ 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
|
|
+ continue
|
|
+ ;;
|
|
+ prog)
|
|
+ if test "$pass" != link; then
|
|
+ deplibs="$deplib $deplibs"
|
|
+ else
|
|
+ compile_deplibs="$deplib $compile_deplibs"
|
|
+ finalize_deplibs="$deplib $finalize_deplibs"
|
|
+ fi
|
|
+ continue
|
|
+ ;;
|
|
+ esac # linkmode
|
|
+ ;; # *.$libext
|
|
+ *.lo | *.$objext)
|
|
+ if test "$pass" = conv; then
|
|
+ deplibs="$deplib $deplibs"
|
|
+ elif test "$linkmode" = prog; then
|
|
+ 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"
|
|
+ compile_deplibs="$deplib $compile_deplibs"
|
|
+ finalize_deplibs="$deplib $finalize_deplibs"
|
|
+ else
|
|
+ newdlfiles="$newdlfiles $deplib"
|
|
+ fi
|
|
+ fi
|
|
+ continue
|
|
+ ;;
|
|
+ %DEPLIBS%)
|
|
+ alldeplibs=yes
|
|
+ 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
|
|
+ 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
|
|
+
|
|
+ ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
|
|
+ test "X$ladir" = "X$lib" && ladir="."
|
|
+
|
|
+ dlname=
|
|
+ dlopen=
|
|
+ dlpreopen=
|
|
+ libdir=
|
|
+ library_names=
|
|
+ old_library=
|
|
+ # If the library was installed with an old release of libtool,
|
|
+ # it will not redefine variables installed, or shouldnotlink
|
|
+ installed=yes
|
|
+ shouldnotlink=no
|
|
+ avoidtemprpath=
|
|
+
|
|
+
|
|
+ # Read the .la file
|
|
+ case $lib in
|
|
+ */* | *\\*) . $lib ;;
|
|
+ *) . ./$lib ;;
|
|
+ esac
|
|
+
|
|
+ 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"
|
|
+ fi
|
|
+
|
|
+ if test "$pass" = conv; then
|
|
+ # Only check for convenience libraries
|
|
+ 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
|
|
+ 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
|
|
+ elif test "$linkmode" != prog && test "$linkmode" != lib; then
|
|
+ $echo "$modename: \`$lib' is not a convenience library" 1>&2
|
|
+ exit $EXIT_FAILURE
|
|
+ fi
|
|
+ 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 -z "$linklib"; then
|
|
+ $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
|
|
+ exit $EXIT_FAILURE
|
|
+ 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
|
|
+ fi
|
|
+ if test -z "$dlname" ||
|
|
+ test "$dlopen_support" != yes ||
|
|
+ test "$build_libtool_libs" = no; then
|
|
+ # If there is no dlname, no dlopen support or we're linking
|
|
+ # 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"
|
|
+ else
|
|
+ newdlfiles="$newdlfiles $lib"
|
|
+ fi
|
|
+ continue
|
|
+ fi # $pass = dlopen
|
|
+
|
|
+ # We need an absolute path.
|
|
+ case $ladir in
|
|
+ [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
|
|
+ *)
|
|
+ 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
|
|
+ abs_ladir="$ladir"
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
|
|
+
|
|
+ # 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
|
|
+ dir="$ladir"
|
|
+ absdir="$abs_ladir"
|
|
+ libdir="$abs_ladir"
|
|
+ else
|
|
+ dir="$libdir"
|
|
+ absdir="$libdir"
|
|
+ fi
|
|
+ test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
|
|
+ else
|
|
+ if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
|
|
+ dir="$ladir"
|
|
+ absdir="$abs_ladir"
|
|
+ # Remove this search path later
|
|
+ notinst_path="$notinst_path $abs_ladir"
|
|
+ else
|
|
+ dir="$ladir/$objdir"
|
|
+ absdir="$abs_ladir/$objdir"
|
|
+ # Remove this search path later
|
|
+ notinst_path="$notinst_path $abs_ladir"
|
|
+ fi
|
|
+ fi # $installed = yes
|
|
+ name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
|
|
+
|
|
+ # 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"
|
|
+ fi
|
|
+ fi # $pass = dlpreopen
|
|
+
|
|
+ if test -z "$libdir"; then
|
|
+ # Link the convenience library
|
|
+ if test "$linkmode" = lib; then
|
|
+ deplibs="$dir/$old_library $deplibs"
|
|
+ elif test "$linkmode,$pass" = "prog,link"; then
|
|
+ compile_deplibs="$dir/$old_library $compile_deplibs"
|
|
+ finalize_deplibs="$dir/$old_library $finalize_deplibs"
|
|
+ else
|
|
+ deplibs="$lib $deplibs" # used for prog,scan pass
|
|
+ fi
|
|
+ continue
|
|
+ fi
|
|
+
|
|
+
|
|
+ if test "$linkmode" = prog && test "$pass" != link; then
|
|
+ newlib_search_path="$newlib_search_path $ladir"
|
|
+ deplibs="$lib $deplibs"
|
|
+
|
|
+ linkalldeplibs=no
|
|
+ if test "$link_all_deplibs" != no || test -z "$library_names" ||
|
|
+ test "$build_libtool_libs" = no; then
|
|
+ linkalldeplibs=yes
|
|
+ fi
|
|
+
|
|
+ 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
|
|
+ esac
|
|
+ # Need to link against all dependency_libs?
|
|
+ if test "$linkalldeplibs" = yes; then
|
|
+ deplibs="$deplib $deplibs"
|
|
+ else
|
|
+ # Need to hardcode shared library paths
|
|
+ # or/and link against static libraries
|
|
+ newdependency_libs="$deplib $newdependency_libs"
|
|
+ fi
|
|
+ if test "X$duplicate_deps" = "Xyes" ; then
|
|
+ case "$tmp_libs " in
|
|
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
|
|
+ esac
|
|
+ fi
|
|
+ tmp_libs="$tmp_libs $deplib"
|
|
+ done # for deplib
|
|
+ continue
|
|
+ fi # $linkmode = prog...
|
|
+
|
|
+ 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 -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" ;;
|
|
+ esac
|
|
+ fi
|
|
+
|
|
+ # Hardcode the library path.
|
|
+ # Skip directories that are in the system default run-time
|
|
+ # search path.
|
|
+ case " $sys_lib_dlsearch_path " in
|
|
+ *" $absdir "*) ;;
|
|
+ *)
|
|
+ case "$compile_rpath " in
|
|
+ *" $absdir "*) ;;
|
|
+ *) compile_rpath="$compile_rpath $absdir"
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ case " $sys_lib_dlsearch_path " in
|
|
+ *" $libdir "*) ;;
|
|
+ *)
|
|
+ case "$finalize_rpath " in
|
|
+ *" $libdir "*) ;;
|
|
+ *) finalize_rpath="$finalize_rpath $libdir"
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ fi # $linkmode,$pass = prog,link...
|
|
+
|
|
+ if test "$alldeplibs" = yes &&
|
|
+ { test "$deplibs_check_method" = pass_all ||
|
|
+ { test "$build_libtool_libs" = yes &&
|
|
+ test -n "$library_names"; }; }; then
|
|
+ # We only need to search for static libraries
|
|
+ continue
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ 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
|
|
+ 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
|
|
+ # 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
|
|
+ if test "$linkmode" = prog; then
|
|
+ $echo "*** Warning: Linking the executable $output against the loadable module"
|
|
+ else
|
|
+ $echo "*** Warning: Linking the shared library $output against the loadable module"
|
|
+ fi
|
|
+ $echo "*** $linklib is not portable!"
|
|
+ fi
|
|
+ if test "$linkmode" = lib &&
|
|
+ test "$hardcode_into_libs" = yes; then
|
|
+ # Hardcode the library path.
|
|
+ # Skip directories that are in the system default run-time
|
|
+ # search path.
|
|
+ case " $sys_lib_dlsearch_path " in
|
|
+ *" $absdir "*) ;;
|
|
+ *)
|
|
+ case "$compile_rpath " in
|
|
+ *" $absdir "*) ;;
|
|
+ *) compile_rpath="$compile_rpath $absdir"
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ case " $sys_lib_dlsearch_path " in
|
|
+ *" $libdir "*) ;;
|
|
+ *)
|
|
+ case "$finalize_rpath " in
|
|
+ *" $libdir "*) ;;
|
|
+ *) finalize_rpath="$finalize_rpath $libdir"
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+
|
|
+ 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\"`
|
|
+ # 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`
|
|
+ versuffix="-$major"
|
|
+ ;;
|
|
+ esac
|
|
+ eval soname=\"$soname_spec\"
|
|
+ else
|
|
+ soname="$realname"
|
|
+ fi
|
|
+
|
|
+ # 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"
|
|
+
|
|
+ # 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"
|
|
+ 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"
|
|
+ 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
|
|
+ add_shlibpath=
|
|
+ add_dir=
|
|
+ add=
|
|
+ lib_linked=yes
|
|
+ case $hardcode_action in
|
|
+ immediate | unsupported)
|
|
+ if test "$hardcode_direct" = no; then
|
|
+ add="$dir/$linklib"
|
|
+ case $host in
|
|
+ *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
|
|
+ *-*-sysv4*uw2*) add_dir="-L$dir" ;;
|
|
+ *-*-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 /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"
|
|
+ fi
|
|
+ fi
|
|
+ esac
|
|
+ elif test "$hardcode_minus_L" = no; then
|
|
+ case $host in
|
|
+ *-*-sunos*) add_shlibpath="$dir" ;;
|
|
+ esac
|
|
+ add_dir="-L$dir"
|
|
+ add="-l$name"
|
|
+ elif test "$hardcode_shlibpath_var" = no; then
|
|
+ add_shlibpath="$dir"
|
|
+ add="-l$name"
|
|
+ else
|
|
+ lib_linked=no
|
|
+ fi
|
|
+ ;;
|
|
+ relink)
|
|
+ if test "$hardcode_direct" = yes; then
|
|
+ add="$dir/$linklib"
|
|
+ elif test "$hardcode_minus_L" = yes; then
|
|
+ add_dir="-L$dir"
|
|
+ # Try looking first in the location we're being installed to.
|
|
+ if test -n "$inst_prefix_dir"; then
|
|
+ case $libdir in
|
|
+ [\\/]*)
|
|
+ add_dir="$add_dir -L$inst_prefix_dir$libdir"
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ add="-l$name"
|
|
+ elif test "$hardcode_shlibpath_var" = yes; then
|
|
+ add_shlibpath="$dir"
|
|
+ add="-l$name"
|
|
+ else
|
|
+ lib_linked=no
|
|
+ fi
|
|
+ ;;
|
|
+ *) lib_linked=no ;;
|
|
+ esac
|
|
+
|
|
+ if test "$lib_linked" != yes; then
|
|
+ $echo "$modename: configuration error: unsupported hardcode properties"
|
|
+ exit $EXIT_FAILURE
|
|
+ fi
|
|
+
|
|
+ if test -n "$add_shlibpath"; then
|
|
+ case :$compile_shlibpath: in
|
|
+ *":$add_shlibpath:"*) ;;
|
|
+ *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
|
|
+ esac
|
|
+ fi
|
|
+ if test "$linkmode" = prog; then
|
|
+ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
|
|
+ test -n "$add" && compile_deplibs="$add $compile_deplibs"
|
|
+ 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 && \
|
|
+ test "$hardcode_shlibpath_var" = yes; then
|
|
+ case :$finalize_shlibpath: in
|
|
+ *":$libdir:"*) ;;
|
|
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
|
|
+ esac
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ if test "$linkmode" = prog || test "$mode" = relink; then
|
|
+ add_shlibpath=
|
|
+ add_dir=
|
|
+ add=
|
|
+ # Finalize command for both is simple: just hardcode it.
|
|
+ if test "$hardcode_direct" = yes; then
|
|
+ add="$libdir/$linklib"
|
|
+ elif test "$hardcode_minus_L" = yes; then
|
|
+ add_dir="-L$libdir"
|
|
+ add="-l$name"
|
|
+ elif test "$hardcode_shlibpath_var" = yes; then
|
|
+ case :$finalize_shlibpath: in
|
|
+ *":$libdir:"*) ;;
|
|
+ *) finalize_shlibpath="$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"
|
|
+ else
|
|
+ add="$libdir/$linklib"
|
|
+ fi
|
|
+ else
|
|
+ # We cannot seem to hardcode it, guess we'll fake it.
|
|
+ add_dir="-L$libdir"
|
|
+ # Try looking first in the location we're being installed to.
|
|
+ if test -n "$inst_prefix_dir"; then
|
|
+ case $libdir in
|
|
+ [\\/]*)
|
|
+ add_dir="$add_dir -L$inst_prefix_dir$libdir"
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ add="-l$name"
|
|
+ fi
|
|
+
|
|
+ if test "$linkmode" = prog; then
|
|
+ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
|
|
+ test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
|
|
+ else
|
|
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
|
|
+ test -n "$add" && deplibs="$add $deplibs"
|
|
+ fi
|
|
+ fi
|
|
+ elif test "$linkmode" = prog; then
|
|
+ # Here we assume that one of hardcode_direct or hardcode_minus_L
|
|
+ # is not unsupported. This is valid on all known static and
|
|
+ # shared platforms.
|
|
+ if test "$hardcode_direct" != unsupported; then
|
|
+ test -n "$old_library" && linklib="$old_library"
|
|
+ compile_deplibs="$dir/$linklib $compile_deplibs"
|
|
+ finalize_deplibs="$dir/$linklib $finalize_deplibs"
|
|
+ else
|
|
+ compile_deplibs="-l$name -L$dir $compile_deplibs"
|
|
+ finalize_deplibs="-l$name -L$dir $finalize_deplibs"
|
|
+ fi
|
|
+ elif test "$build_libtool_libs" = yes; then
|
|
+ # Not a shared library
|
|
+ if test "$deplibs_check_method" != pass_all; then
|
|
+ # We're trying link a shared library against a static one
|
|
+ # but the system doesn't support it.
|
|
+
|
|
+ # 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."
|
|
+ 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."
|
|
+ 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."
|
|
+ fi
|
|
+ if test "$build_old_libs" = no; then
|
|
+ build_libtool_libs=module
|
|
+ build_old_libs=yes
|
|
+ else
|
|
+ build_libtool_libs=no
|
|
+ fi
|
|
+ fi
|
|
+ else
|
|
+ deplibs="$dir/$old_library $deplibs"
|
|
+ link_static=yes
|
|
+ fi
|
|
+ fi # link shared/static library?
|
|
+
|
|
+ if test "$linkmode" = lib; then
|
|
+ if test -n "$dependency_libs" &&
|
|
+ { test "$hardcode_into_libs" != yes ||
|
|
+ test "$build_old_libs" = yes ||
|
|
+ test "$link_static" = yes; }; then
|
|
+ # Extract -R from dependency_libs
|
|
+ temp_deplibs=
|
|
+ for libdir in $dependency_libs; do
|
|
+ case $libdir in
|
|
+ -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
|
|
+ case " $xrpath " in
|
|
+ *" $temp_xrpath "*) ;;
|
|
+ *) xrpath="$xrpath $temp_xrpath";;
|
|
+ esac;;
|
|
+ *) temp_deplibs="$temp_deplibs $libdir";;
|
|
+ esac
|
|
+ done
|
|
+ dependency_libs="$temp_deplibs"
|
|
+ fi
|
|
+
|
|
+ newlib_search_path="$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 "$tmp_libs " in
|
|
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
|
|
+ esac
|
|
+ fi
|
|
+ tmp_libs="$tmp_libs $deplib"
|
|
+ done
|
|
+
|
|
+ if test "$link_all_deplibs" != no; then
|
|
+ # Add the search paths of all dependency libraries
|
|
+ for deplib in $dependency_libs; do
|
|
+ case $deplib in
|
|
+ -L*) path="$deplib" ;;
|
|
+ *.la)
|
|
+ dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
|
|
+ test "X$dir" = "X$deplib" && dir="."
|
|
+ # 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
|
|
+ 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=
|
|
+ case $host in
|
|
+ *-*-darwin*)
|
|
+ # we do not want to link against static libs,
|
|
+ # but need to link against shared
|
|
+ eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
|
|
+ if test -n "$deplibrary_names" ; then
|
|
+ for tmp in $deplibrary_names ; do
|
|
+ depdepl=$tmp
|
|
+ done
|
|
+ if test -f "$path/$depdepl" ; then
|
|
+ depdepl="$path/$depdepl"
|
|
+ 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"
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ -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
|
|
+ dependency_libs="$newdependency_libs"
|
|
+ if test "$pass" = dlpreopen; then
|
|
+ # Link the dlpreopened libraries before other libraries
|
|
+ for deplib in $save_deplibs; do
|
|
+ deplibs="$deplib $deplibs"
|
|
+ done
|
|
+ fi
|
|
+ if test "$pass" != dlopen; then
|
|
+ if test "$pass" != conv; then
|
|
+ # Make sure lib_search_path contains only unique directories.
|
|
+ lib_search_path=
|
|
+ for dir in $newlib_search_path; do
|
|
+ case "$lib_search_path " in
|
|
+ *" $dir "*) ;;
|
|
+ *) lib_search_path="$lib_search_path $dir" ;;
|
|
+ esac
|
|
+ done
|
|
+ newlib_search_path=
|
|
+ fi
|
|
+
|
|
+ if test "$linkmode,$pass" != "prog,link"; then
|
|
+ vars="deplibs"
|
|
+ else
|
|
+ vars="compile_deplibs finalize_deplibs"
|
|
+ fi
|
|
+ for var in $vars dependency_libs; do
|
|
+ # Add libraries to $var in reverse order
|
|
+ eval tmp_libs=\"\$$var\"
|
|
+ new_libs=
|
|
+ for deplib in $tmp_libs; do
|
|
+ # FIXME: Pedantically, this is the right thing to do, so
|
|
+ # that some nasty dependency loop isn't accidentally
|
|
+ # broken:
|
|
+ #new_libs="$deplib $new_libs"
|
|
+ # Pragmatically, this seems to cause very few problems in
|
|
+ # practice:
|
|
+ case $deplib in
|
|
+ -L*) new_libs="$deplib $new_libs" ;;
|
|
+ -R*) ;;
|
|
+ *)
|
|
+ # And here is the reason: when a library appears more
|
|
+ # than once as an explicit dependence of a library, or
|
|
+ # is implicitly linked in more than once by the
|
|
+ # compiler, it is considered special, and multiple
|
|
+ # occurrences thereof are not removed. Compare this
|
|
+ # with having the same library being listed as a
|
|
+ # dependency of multiple other libraries: in this case,
|
|
+ # we know (pedantically, we assume) the library does not
|
|
+ # need to be listed more than once, so we keep only the
|
|
+ # last copy. This is not always right, but it is rare
|
|
+ # enough that we require users that really mean to play
|
|
+ # such unportable linking tricks to link the library
|
|
+ # using -Wl,-lname, so that libtool does not consider it
|
|
+ # for duplicate removal.
|
|
+ case " $specialdeplibs " in
|
|
+ *" $deplib "*) new_libs="$deplib $new_libs" ;;
|
|
+ *)
|
|
+ case " $new_libs " in
|
|
+ *" $deplib "*) ;;
|
|
+ *) new_libs="$deplib $new_libs" ;;
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+ tmp_libs=
|
|
+ for deplib in $new_libs; do
|
|
+ case $deplib in
|
|
+ -L*)
|
|
+ case " $tmp_libs " in
|
|
+ *" $deplib "*) ;;
|
|
+ *) tmp_libs="$tmp_libs $deplib" ;;
|
|
+ esac
|
|
+ ;;
|
|
+ *) tmp_libs="$tmp_libs $deplib" ;;
|
|
+ esac
|
|
+ done
|
|
+ eval $var=\"$tmp_libs\"
|
|
+ done # for var
|
|
+ fi
|
|
+ # Last step: remove runtime libs from dependency_libs
|
|
+ # (they stay in deplibs)
|
|
+ tmp_libs=
|
|
+ for i in $dependency_libs ; do
|
|
+ case " $predeps $postdeps $compiler_lib_search_path " in
|
|
+ *" $i "*)
|
|
+ i=""
|
|
+ ;;
|
|
+ esac
|
|
+ if test -n "$i" ; then
|
|
+ tmp_libs="$tmp_libs $i"
|
|
+ fi
|
|
+ done
|
|
+ dependency_libs=$tmp_libs
|
|
+ done # for pass
|
|
+ if test "$linkmode" = prog; then
|
|
+ dlfiles="$newdlfiles"
|
|
+ dlprefiles="$newdlprefiles"
|
|
+ fi
|
|
+
|
|
+ case $linkmode in
|
|
+ oldlib)
|
|
+ if test -n "$deplibs"; then
|
|
+ $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
|
|
+ fi
|
|
+
|
|
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
|
|
+ $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
|
|
+ fi
|
|
+
|
|
+ if test -n "$rpath"; then
|
|
+ $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
|
|
+ fi
|
|
+
|
|
+ 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
|
|
+
|
|
+ if test -n "$release"; then
|
|
+ $echo "$modename: warning: \`-release' is ignored for archives" 1>&2
|
|
+ fi
|
|
+
|
|
+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
|
|
+ $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
|
|
+ fi
|
|
+
|
|
+ # Now set the variables for building old libraries.
|
|
+ build_libtool_libs=no
|
|
+ oldlibs="$output"
|
|
+ objs="$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//'`
|
|
+ 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
|
|
+ if test "$need_lib_prefix" != no; then
|
|
+ # Add the "lib" prefix for modules if required
|
|
+ name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
|
|
+ eval shared_ext=\"$shrext_cmds\"
|
|
+ eval libname=\"$libname_spec\"
|
|
+ else
|
|
+ libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
|
|
+ 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
|
|
+ else
|
|
+ $echo
|
|
+ $echo "*** Warning: Linking the shared library $output against the non-libtool"
|
|
+ $echo "*** objects $objs is not portable!"
|
|
+ libobjs="$libobjs $objs"
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ if test "$dlself" != no; then
|
|
+ $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
|
|
+ fi
|
|
+
|
|
+ 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"
|
|
+
|
|
+ oldlibs=
|
|
+ if test -z "$rpath"; then
|
|
+ if test "$build_libtool_libs" = yes; then
|
|
+ # Building a libtool convenience library.
|
|
+ # Some compilers have problems with a `.al' extension so
|
|
+ # convenience libraries should have the same extension an
|
|
+ # archive normally would.
|
|
+ oldlibs="$output_objdir/$libname.$libext $oldlibs"
|
|
+ build_libtool_libs=convenience
|
|
+ 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
|
|
+
|
|
+ if test -n "$release"; then
|
|
+ $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
|
|
+ fi
|
|
+ else
|
|
+
|
|
+ # Parse the version information argument.
|
|
+ save_ifs="$IFS"; IFS=':'
|
|
+ set dummy $vinfo 0 0 0
|
|
+ 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
|
|
+
|
|
+ # convert absolute version numbers to libtool ages
|
|
+ # this retains compatibility with .la files and attempts
|
|
+ # to make the code below a bit more comprehensible
|
|
+
|
|
+ case $vinfo_number in
|
|
+ yes)
|
|
+ number_major="$2"
|
|
+ number_minor="$3"
|
|
+ number_revision="$4"
|
|
+ #
|
|
+ # There are really only two kinds -- those that
|
|
+ # use the current revision as the major version
|
|
+ # and those that subtract age and use age as
|
|
+ # a minor version. But, then there is irix
|
|
+ # which has an extra 1 added just for fun
|
|
+ #
|
|
+ case $version_type in
|
|
+ darwin|linux|osf|windows|none)
|
|
+ current=`expr $number_major + $number_minor`
|
|
+ age="$number_minor"
|
|
+ revision="$number_revision"
|
|
+ ;;
|
|
+ freebsd-aout|freebsd-elf|sunos)
|
|
+ current="$number_major"
|
|
+ revision="$number_minor"
|
|
+ age="0"
|
|
+ ;;
|
|
+ irix|nonstopux)
|
|
+ current=`expr $number_major + $number_minor - 1`
|
|
+ age="$number_minor"
|
|
+ revision="$number_minor"
|
|
+ ;;
|
|
+ esac
|
|
+ ;;
|
|
+ no)
|
|
+ current="$2"
|
|
+ revision="$3"
|
|
+ age="$4"
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # Check that each of the things are valid numbers.
|
|
+ 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
|
|
+ ;;
|
|
+ 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
|
|
+ ;;
|
|
+ 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
|
|
+ ;;
|
|
+ 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
|
|
+ fi
|
|
+
|
|
+ # Calculate the version variables.
|
|
+ major=
|
|
+ versuffix=
|
|
+ verstring=
|
|
+ case $version_type in
|
|
+ none) ;;
|
|
+
|
|
+ darwin)
|
|
+ # Like Linux, but with the current version available in
|
|
+ # verstring for coding it into the library header
|
|
+ major=.`expr $current - $age`
|
|
+ versuffix="$major.$age.$revision"
|
|
+ # Darwin ld doesn't like 0 for these options...
|
|
+ minor_current=`expr $current + 1`
|
|
+ verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
|
|
+ ;;
|
|
+
|
|
+ freebsd-aout)
|
|
+ major=".$current"
|
|
+ versuffix=".$current.$revision";
|
|
+ ;;
|
|
+
|
|
+ freebsd-elf)
|
|
+ major=".$current"
|
|
+ versuffix=".$current";
|
|
+ ;;
|
|
+
|
|
+ irix | nonstopux)
|
|
+ major=`expr $current - $age + 1`
|
|
+
|
|
+ case $version_type in
|
|
+ nonstopux) verstring_prefix=nonstopux ;;
|
|
+ *) verstring_prefix=sgi ;;
|
|
+ esac
|
|
+ verstring="$verstring_prefix$major.$revision"
|
|
+
|
|
+ # 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`
|
|
+ verstring="$verstring_prefix$major.$iface:$verstring"
|
|
+ done
|
|
+
|
|
+ # Before this point, $major must not contain `.'.
|
|
+ major=.$major
|
|
+ versuffix="$major.$revision"
|
|
+ ;;
|
|
+
|
|
+ linux)
|
|
+ major=.`expr $current - $age`
|
|
+ versuffix="$major.$age.$revision"
|
|
+ ;;
|
|
+
|
|
+ osf)
|
|
+ major=.`expr $current - $age`
|
|
+ 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`
|
|
+ verstring="$verstring:${iface}.0"
|
|
+ done
|
|
+
|
|
+ # Make executables depend on our current version.
|
|
+ verstring="$verstring:${current}.0"
|
|
+ ;;
|
|
+
|
|
+ sunos)
|
|
+ major=".$current"
|
|
+ versuffix=".$current.$revision"
|
|
+ ;;
|
|
+
|
|
+ windows)
|
|
+ # Use '-' rather than '.', since we only want one
|
|
+ # extension on DOS 8.3 filesystems.
|
|
+ major=`expr $current - $age`
|
|
+ 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
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # Clear the version info if we defaulted, and they specified a release.
|
|
+ if test -z "$vinfo" && test -n "$release"; then
|
|
+ major=
|
|
+ case $version_type in
|
|
+ darwin)
|
|
+ # we can't check for "0.0" in archive_cmds due to quoting
|
|
+ # problems, so we reset it completely
|
|
+ verstring=
|
|
+ ;;
|
|
+ *)
|
|
+ verstring="0.0"
|
|
+ ;;
|
|
+ esac
|
|
+ if test "$need_version" = no; then
|
|
+ versuffix=
|
|
+ else
|
|
+ versuffix=".0.0"
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ # Remove version info from name if versioning should be avoided
|
|
+ if test "$avoid_version" = yes && test "$need_version" = no; then
|
|
+ major=
|
|
+ versuffix=
|
|
+ verstring=""
|
|
+ fi
|
|
+
|
|
+ # 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
|
|
+ build_libtool_libs=no
|
|
+ build_old_libs=yes
|
|
+ fi
|
|
+ else
|
|
+ # Don't allow undefined symbols.
|
|
+ allow_undefined_flag="$no_undefined_flag"
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ if test "$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/*"`
|
|
+ for p in $tempremovelist; do
|
|
+ case $p in
|
|
+ *.$objext)
|
|
+ ;;
|
|
+ $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
|
|
+ continue
|
|
+ fi
|
|
+ fi
|
|
+ removelist="$removelist $p"
|
|
+ ;;
|
|
+ *) ;;
|
|
+ esac
|
|
+ done
|
|
+ if test -n "$removelist"; then
|
|
+ $show "${rm}r $removelist"
|
|
+ $run ${rm}r $removelist
|
|
+ fi
|
|
+ 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"
|
|
+
|
|
+ # Transform .lo files to .o files.
|
|
+ oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$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"`
|
|
+# 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"
|
|
+ case "$finalize_rpath " in
|
|
+ *" $libdir "*) ;;
|
|
+ *) finalize_rpath="$finalize_rpath $libdir" ;;
|
|
+ esac
|
|
+ done
|
|
+ if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
|
|
+ dependency_libs="$temp_xrpath $dependency_libs"
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ # Make sure dlfiles contains only unique files that won't be dlpreopened
|
|
+ old_dlfiles="$dlfiles"
|
|
+ dlfiles=
|
|
+ for lib in $old_dlfiles; do
|
|
+ case " $dlprefiles $dlfiles " in
|
|
+ *" $lib "*) ;;
|
|
+ *) dlfiles="$dlfiles $lib" ;;
|
|
+ esac
|
|
+ done
|
|
+
|
|
+ # Make sure dlprefiles contains only unique files
|
|
+ old_dlprefiles="$dlprefiles"
|
|
+ dlprefiles=
|
|
+ for lib in $old_dlprefiles; do
|
|
+ case "$dlprefiles " in
|
|
+ *" $lib "*) ;;
|
|
+ *) dlprefiles="$dlprefiles $lib" ;;
|
|
+ esac
|
|
+ done
|
|
+
|
|
+ if test "$build_libtool_libs" = yes; then
|
|
+ if test -n "$rpath"; then
|
|
+ case $host in
|
|
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
|
|
+ # 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"
|
|
+ ;;
|
|
+ *-*-netbsd*)
|
|
+ # Don't link with libc until the a.out ld.so is fixed.
|
|
+ ;;
|
|
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
|
|
+ # Do not include libc due to us having libc/libc_r.
|
|
+ ;;
|
|
+ *-*-sco3.2v5* | *-*-sco5v6*)
|
|
+ # Causes problems with __ctype
|
|
+ ;;
|
|
+ *-*-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"
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+
|
|
+ # Transform deplibs into only deplibs that can be linked in shared.
|
|
+ name_save=$name
|
|
+ libname_save=$libname
|
|
+ release_save=$release
|
|
+ versuffix_save=$versuffix
|
|
+ major_save=$major
|
|
+ # I'm not sure if I'm treating the release correctly. I think
|
|
+ # release should show up in the -l (ie -lgmp5) so we don't want to
|
|
+ # add it in twice. Is that correct?
|
|
+ release=""
|
|
+ versuffix=""
|
|
+ major=""
|
|
+ newdeplibs=
|
|
+ droppeddeps=no
|
|
+ case $deplibs_check_method in
|
|
+ pass_all)
|
|
+ # Don't check for shared/static. Everything works.
|
|
+ # This might be a little naive. We might want to check
|
|
+ # whether the library exists or not. But this is on
|
|
+ # osf3 & osf4 and I'm not really sure... Just
|
|
+ # implementing what was already the behavior.
|
|
+ newdeplibs=$deplibs
|
|
+ ;;
|
|
+ test_compile)
|
|
+ # This code stresses the "libraries are programs" paradigm to its
|
|
+ # 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
|
|
+ cat > conftest.c <<EOF
|
|
+ int main() { return 0; }
|
|
+EOF
|
|
+ $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
|
|
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
|
|
+ case " $predeps $postdeps " in
|
|
+ *" $i "*)
|
|
+ newdeplibs="$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
|
|
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
|
|
+ newdeplibs="$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."
|
|
+ fi
|
|
+ fi
|
|
+ else
|
|
+ newdeplibs="$newdeplibs $i"
|
|
+ fi
|
|
+ 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
|
|
+ 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"
|
|
+ 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
|
|
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
|
|
+ newdeplibs="$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."
|
|
+ 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."
|
|
+ fi
|
|
+ else
|
|
+ newdeplibs="$newdeplibs $i"
|
|
+ fi
|
|
+ done
|
|
+ fi
|
|
+ ;;
|
|
+ file_magic*)
|
|
+ set dummy $deplibs_check_method
|
|
+ file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
|
|
+ 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
|
|
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
|
|
+ case " $predeps $postdeps " in
|
|
+ *" $a_deplib "*)
|
|
+ newdeplibs="$newdeplibs $a_deplib"
|
|
+ a_deplib=""
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ if test -n "$a_deplib" ; then
|
|
+ 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
|
|
+ # Follow soft links.
|
|
+ if ls -lLd "$potent_lib" 2>/dev/null \
|
|
+ | grep " -> " >/dev/null; then
|
|
+ continue
|
|
+ fi
|
|
+ # The statement above tries to avoid entering an
|
|
+ # endless loop below, in case of cyclic links.
|
|
+ # We might still enter an endless loop, since a link
|
|
+ # loop can be closed while we follow links,
|
|
+ # but so what?
|
|
+ potlib="$potent_lib"
|
|
+ while test -h "$potlib" 2>/dev/null; do
|
|
+ potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
|
|
+ case $potliblink in
|
|
+ [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
|
|
+ *) potlib=`$echo "X$potlib" | $Xsed -e '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"
|
|
+ a_deplib=""
|
|
+ break 2
|
|
+ fi
|
|
+ done
|
|
+ done
|
|
+ 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"
|
|
+ if test -z "$potlib" ; then
|
|
+ $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"
|
|
+ fi
|
|
+ fi
|
|
+ else
|
|
+ # Add a -L argument.
|
|
+ newdeplibs="$newdeplibs $a_deplib"
|
|
+ fi
|
|
+ done # Gone through all deplibs.
|
|
+ ;;
|
|
+ match_pattern*)
|
|
+ set dummy $deplibs_check_method
|
|
+ match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
|
|
+ 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
|
|
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
|
|
+ case " $predeps $postdeps " in
|
|
+ *" $a_deplib "*)
|
|
+ newdeplibs="$newdeplibs $a_deplib"
|
|
+ a_deplib=""
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ if test -n "$a_deplib" ; then
|
|
+ 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"
|
|
+ a_deplib=""
|
|
+ break 2
|
|
+ fi
|
|
+ done
|
|
+ done
|
|
+ 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"
|
|
+ if test -z "$potlib" ; then
|
|
+ $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"
|
|
+ fi
|
|
+ fi
|
|
+ else
|
|
+ # Add a -L argument.
|
|
+ newdeplibs="$newdeplibs $a_deplib"
|
|
+ fi
|
|
+ done # Gone through all deplibs.
|
|
+ ;;
|
|
+ none | unknown | *)
|
|
+ newdeplibs=""
|
|
+ tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
|
|
+ -e '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,,"`
|
|
+ done
|
|
+ fi
|
|
+ if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \
|
|
+ | grep . >/dev/null; then
|
|
+ $echo
|
|
+ if test "X$deplibs_check_method" = "Xnone"; then
|
|
+ $echo "*** Warning: inter-library dependencies are not supported in this platform."
|
|
+ else
|
|
+ $echo "*** Warning: inter-library dependencies are not known to be supported."
|
|
+ fi
|
|
+ $echo "*** All declared inter-library dependencies are being dropped."
|
|
+ droppeddeps=yes
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ versuffix=$versuffix_save
|
|
+ major=$major_save
|
|
+ release=$release_save
|
|
+ libname=$libname_save
|
|
+ name=$name_save
|
|
+
|
|
+ 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 /'`
|
|
+ ;;
|
|
+ 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."
|
|
+ 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."
|
|
+ fi
|
|
+ if test "$build_old_libs" = no; then
|
|
+ oldlibs="$output_objdir/$libname.$libext"
|
|
+ build_libtool_libs=module
|
|
+ build_old_libs=yes
|
|
+ else
|
|
+ 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."
|
|
+
|
|
+ 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."
|
|
+ if test "$build_old_libs" = no; then
|
|
+ oldlibs="$output_objdir/$libname.$libext"
|
|
+ build_libtool_libs=module
|
|
+ build_old_libs=yes
|
|
+ else
|
|
+ build_libtool_libs=no
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ # Done checking deplibs!
|
|
+ deplibs=$newdeplibs
|
|
+ fi
|
|
+
|
|
+
|
|
+ # move library search paths that coincide with paths to not yet
|
|
+ # installed libraries to the beginning of the library search list
|
|
+ new_libs=
|
|
+ for path in $notinst_path; do
|
|
+ case " $new_libs " in
|
|
+ *" -L$path/$objdir "*) ;;
|
|
+ *)
|
|
+ case " $deplibs " in
|
|
+ *" -L$path/$objdir "*)
|
|
+ new_libs="$new_libs -L$path/$objdir" ;;
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+ for deplib in $deplibs; do
|
|
+ case $deplib in
|
|
+ -L*)
|
|
+ case " $new_libs " in
|
|
+ *" $deplib "*) ;;
|
|
+ *) new_libs="$new_libs $deplib" ;;
|
|
+ esac
|
|
+ ;;
|
|
+ *) new_libs="$new_libs $deplib" ;;
|
|
+ esac
|
|
+ done
|
|
+ deplibs="$new_libs"
|
|
+
|
|
+
|
|
+ # All the library-specific variables (install_libdir is set above).
|
|
+ library_names=
|
|
+ old_library=
|
|
+ dlname=
|
|
+
|
|
+ # Test again, we may have decided not to build it any more
|
|
+ if test "$build_libtool_libs" = yes; then
|
|
+ if test "$hardcode_into_libs" = yes; then
|
|
+ # Hardcode the library paths
|
|
+ hardcode_libdirs=
|
|
+ dep_rpath=
|
|
+ rpath="$finalize_rpath"
|
|
+ test "$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
|
|
+ if test -z "$hardcode_libdirs"; then
|
|
+ hardcode_libdirs="$libdir"
|
|
+ else
|
|
+ # Just accumulate the unique libdirs.
|
|
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
|
|
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
|
|
+ ;;
|
|
+ *)
|
|
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ else
|
|
+ eval flag=\"$hardcode_libdir_flag_spec\"
|
|
+ dep_rpath="$dep_rpath $flag"
|
|
+ fi
|
|
+ elif test -n "$runpath_var"; then
|
|
+ case "$perm_rpath " in
|
|
+ *" $libdir "*) ;;
|
|
+ *) perm_rpath="$perm_rpath $libdir" ;;
|
|
+ esac
|
|
+ fi
|
|
+ done
|
|
+ # Substitute the hardcoded libdirs into the rpath.
|
|
+ if test -n "$hardcode_libdir_separator" &&
|
|
+ test -n "$hardcode_libdirs"; then
|
|
+ libdir="$hardcode_libdirs"
|
|
+ if test -n "$hardcode_libdir_flag_spec_ld"; then
|
|
+ eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
|
|
+ else
|
|
+ eval dep_rpath=\"$hardcode_libdir_flag_spec\"
|
|
+ fi
|
|
+ fi
|
|
+ if test -n "$runpath_var" && test -n "$perm_rpath"; then
|
|
+ # We should set the runpath_var.
|
|
+ rpath=
|
|
+ for dir in $perm_rpath; do
|
|
+ rpath="$rpath$dir:"
|
|
+ done
|
|
+ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
|
|
+ fi
|
|
+ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
|
|
+ fi
|
|
+
|
|
+ shlibpath="$finalize_shlibpath"
|
|
+ test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
|
|
+ if test -n "$shlibpath"; then
|
|
+ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
|
|
+ fi
|
|
+
|
|
+ # Get the real and link names of the library.
|
|
+ eval shared_ext=\"$shrext_cmds\"
|
|
+ eval library_names=\"$library_names_spec\"
|
|
+ set dummy $library_names
|
|
+ realname="$2"
|
|
+ shift; shift
|
|
+
|
|
+ if test -n "$soname_spec"; then
|
|
+ eval soname=\"$soname_spec\"
|
|
+ else
|
|
+ soname="$realname"
|
|
+ fi
|
|
+ if test -z "$dlname"; then
|
|
+ dlname=$soname
|
|
+ fi
|
|
+
|
|
+ lib="$output_objdir/$realname"
|
|
+ linknames=
|
|
+ for link
|
|
+ do
|
|
+ linknames="$linknames $link"
|
|
+ done
|
|
+
|
|
+ # Use standard objects if they are pic
|
|
+ test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
|
|
+
|
|
+ # 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'"
|
|
+ export_symbols="$output_objdir/$libname.exp"
|
|
+ $run $rm $export_symbols
|
|
+ cmds=$export_symbols_cmds
|
|
+ save_ifs="$IFS"; IFS='~'
|
|
+ for cmd 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
|
|
+ else
|
|
+ # The command line is too long to execute in one step.
|
|
+ $show "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"'
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
|
|
+ $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
|
|
+ fi
|
|
+
|
|
+ tmp_deplibs=
|
|
+ for test_deplib in $deplibs; do
|
|
+ case " $convenience " in
|
|
+ *" $test_deplib "*) ;;
|
|
+ *)
|
|
+ tmp_deplibs="$tmp_deplibs $test_deplib"
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+ deplibs="$tmp_deplibs"
|
|
+
|
|
+ if test -n "$convenience"; then
|
|
+ if test -n "$whole_archive_flag_spec"; then
|
|
+ save_libobjs=$libobjs
|
|
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
|
|
+ else
|
|
+ gentop="$output_objdir/${outputname}x"
|
|
+ generated="$generated $gentop"
|
|
+
|
|
+ func_extract_archives $gentop $convenience
|
|
+ libobjs="$libobjs $func_extract_archives_result"
|
|
+ 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"
|
|
+ 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 $?
|
|
+ fi
|
|
+
|
|
+ # Do each of the archive commands.
|
|
+ if test "$module" = yes && test -n "$module_cmds" ; then
|
|
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
|
|
+ eval test_cmds=\"$module_expsym_cmds\"
|
|
+ cmds=$module_expsym_cmds
|
|
+ else
|
|
+ eval test_cmds=\"$module_cmds\"
|
|
+ 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
|
|
+ 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
|
|
+ :
|
|
+ else
|
|
+ # The command line is too long to link in one step, link piecewise.
|
|
+ $echo "creating reloadable object files..."
|
|
+
|
|
+ # Save the value of $output and $libobjs because we want to
|
|
+ # use them later. If we have whole_archive_flag_spec, we
|
|
+ # want to use save_libobjs as it was before
|
|
+ # whole_archive_flag_spec was expanded, because we can't
|
|
+ # assume the linker understands whole_archive_flag_spec.
|
|
+ # This may have to be revisited, in case too many
|
|
+ # convenience libraries get linked in and end up exceeding
|
|
+ # the spec.
|
|
+ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
|
|
+ save_libobjs=$libobjs
|
|
+ fi
|
|
+ save_output=$output
|
|
+ output_la=`$echo "X$output" | $Xsed -e "$basename"`
|
|
+
|
|
+ # 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"
|
|
+ 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\"
|
|
+ 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"
|
|
+
|
|
+ # Loop through the commands generated above and execute them.
|
|
+ save_ifs="$IFS"; IFS='~'
|
|
+ for cmd in $concat_cmds; do
|
|
+ IFS="$save_ifs"
|
|
+ $show "$cmd"
|
|
+ $run eval "$cmd" || exit $?
|
|
+ done
|
|
+ IFS="$save_ifs"
|
|
+
|
|
+ libobjs=$output
|
|
+ # Restore the value of output.
|
|
+ output=$save_output
|
|
+
|
|
+ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
|
|
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
|
|
+ fi
|
|
+ # Expand the library linking commands again to reset the
|
|
+ # value of $libobjs for piecewise linking.
|
|
+
|
|
+ # Do each of the archive commands.
|
|
+ if test "$module" = yes && test -n "$module_cmds" ; then
|
|
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
|
|
+ cmds=$module_expsym_cmds
|
|
+ else
|
|
+ cmds=$module_cmds
|
|
+ fi
|
|
+ else
|
|
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
|
|
+ cmds=$archive_expsym_cmds
|
|
+ else
|
|
+ cmds=$archive_cmds
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ # Append the command to remove the reloadable object files
|
|
+ # to the just-reset $cmds.
|
|
+ eval cmds=\"\$cmds~\$rm $delfiles\"
|
|
+ fi
|
|
+ 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"
|
|
+
|
|
+ # 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 -n "$convenience"; then
|
|
+ if test -z "$whole_archive_flag_spec"; then
|
|
+ $show "${rm}r $gentop"
|
|
+ $run ${rm}r "$gentop"
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ exit $EXIT_SUCCESS
|
|
+ fi
|
|
+
|
|
+ # 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 $?
|
|
+ fi
|
|
+ done
|
|
+
|
|
+ # If -module or -export-dynamic was specified, set the dlname.
|
|
+ if test "$module" = yes || test "$export_dynamic" = yes; then
|
|
+ # On all known operating systems, these are identical.
|
|
+ dlname="$soname"
|
|
+ fi
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ obj)
|
|
+ if test -n "$deplibs"; then
|
|
+ $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
|
|
+ fi
|
|
+
|
|
+ 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
|
|
+
|
|
+ if test -n "$xrpath"; then
|
|
+ $echo "$modename: warning: \`-R' is ignored for objects" 1>&2
|
|
+ fi
|
|
+
|
|
+ if test -n "$vinfo"; then
|
|
+ $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
|
|
+ fi
|
|
+
|
|
+ if test -n "$release"; then
|
|
+ $echo "$modename: warning: \`-release' is ignored for objects" 1>&2
|
|
+ fi
|
|
+
|
|
+ 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"`
|
|
+ ;;
|
|
+ *)
|
|
+ libobj=
|
|
+ obj="$output"
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ # Delete the old objects.
|
|
+ $run $rm $obj $libobj
|
|
+
|
|
+ # Objects from convenience libraries. This assumes
|
|
+ # single-version convenience libraries. Whenever we create
|
|
+ # different ones for PIC/non-PIC, this we'll have to duplicate
|
|
+ # the extraction.
|
|
+ reload_conv_objs=
|
|
+ gentop=
|
|
+ # reload_cmds runs $LD directly, so let us get rid of
|
|
+ # -Wl from whole_archive_flag_spec and hope we can get by with
|
|
+ # turning comma into space..
|
|
+ wl=
|
|
+
|
|
+ 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'`
|
|
+ else
|
|
+ gentop="$output_objdir/${obj}x"
|
|
+ generated="$generated $gentop"
|
|
+
|
|
+ func_extract_archives $gentop $convenience
|
|
+ reload_conv_objs="$reload_objs $func_extract_archives_result"
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ # 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
|
|
+
|
|
+ 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"
|
|
+
|
|
+ # 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
|
|
+ fi
|
|
+
|
|
+ exit $EXIT_SUCCESS
|
|
+ fi
|
|
+
|
|
+ if test "$build_libtool_libs" != yes; then
|
|
+ if test -n "$gentop"; then
|
|
+ $show "${rm}r $gentop"
|
|
+ $run ${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 $?
|
|
+ exit $EXIT_SUCCESS
|
|
+ fi
|
|
+
|
|
+ if test -n "$pic_flag" || test "$pic_mode" != default; then
|
|
+ # 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"
|
|
+ fi
|
|
+
|
|
+ if test -n "$gentop"; then
|
|
+ $show "${rm}r $gentop"
|
|
+ $run ${rm}r $gentop
|
|
+ fi
|
|
+
|
|
+ exit $EXIT_SUCCESS
|
|
+ ;;
|
|
+
|
|
+ prog)
|
|
+ case $host in
|
|
+ *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
|
|
+ esac
|
|
+ if test -n "$vinfo"; then
|
|
+ $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
|
|
+ fi
|
|
+
|
|
+ if test -n "$release"; then
|
|
+ $echo "$modename: warning: \`-release' is ignored for programs" 1>&2
|
|
+ fi
|
|
+
|
|
+ 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
|
|
+
|
|
+ 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 /'`
|
|
+ ;;
|
|
+ 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
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+
|
|
+ # move library search paths that coincide with paths to not yet
|
|
+ # installed libraries to the beginning of the library search list
|
|
+ new_libs=
|
|
+ for path in $notinst_path; do
|
|
+ case " $new_libs " in
|
|
+ *" -L$path/$objdir "*) ;;
|
|
+ *)
|
|
+ case " $compile_deplibs " in
|
|
+ *" -L$path/$objdir "*)
|
|
+ new_libs="$new_libs -L$path/$objdir" ;;
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+ for deplib in $compile_deplibs; do
|
|
+ case $deplib in
|
|
+ -L*)
|
|
+ case " $new_libs " in
|
|
+ *" $deplib "*) ;;
|
|
+ *) new_libs="$new_libs $deplib" ;;
|
|
+ esac
|
|
+ ;;
|
|
+ *) new_libs="$new_libs $deplib" ;;
|
|
+ esac
|
|
+ done
|
|
+ compile_deplibs="$new_libs"
|
|
+
|
|
+
|
|
+ compile_command="$compile_command $compile_deplibs"
|
|
+ finalize_command="$finalize_command $finalize_deplibs"
|
|
+
|
|
+ if test -n "$rpath$xrpath"; then
|
|
+ # If the user specified any rpath flags, then add them.
|
|
+ for libdir in $rpath $xrpath; do
|
|
+ # This is the magic to use -rpath.
|
|
+ case "$finalize_rpath " in
|
|
+ *" $libdir "*) ;;
|
|
+ *) finalize_rpath="$finalize_rpath $libdir" ;;
|
|
+ esac
|
|
+ done
|
|
+ fi
|
|
+
|
|
+ # Now hardcode the library paths
|
|
+ rpath=
|
|
+ hardcode_libdirs=
|
|
+ for libdir in $compile_rpath $finalize_rpath; do
|
|
+ if test -n "$hardcode_libdir_flag_spec"; then
|
|
+ if test -n "$hardcode_libdir_separator"; then
|
|
+ if test -z "$hardcode_libdirs"; then
|
|
+ hardcode_libdirs="$libdir"
|
|
+ else
|
|
+ # Just accumulate the unique libdirs.
|
|
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
|
|
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
|
|
+ ;;
|
|
+ *)
|
|
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ else
|
|
+ eval flag=\"$hardcode_libdir_flag_spec\"
|
|
+ rpath="$rpath $flag"
|
|
+ fi
|
|
+ elif test -n "$runpath_var"; then
|
|
+ case "$perm_rpath " in
|
|
+ *" $libdir "*) ;;
|
|
+ *) perm_rpath="$perm_rpath $libdir" ;;
|
|
+ esac
|
|
+ fi
|
|
+ case $host in
|
|
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
|
|
+ testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'`
|
|
+ case :$dllsearchpath: in
|
|
+ *":$libdir:"*) ;;
|
|
+ *) dllsearchpath="$dllsearchpath:$libdir";;
|
|
+ esac
|
|
+ case :$dllsearchpath: in
|
|
+ *":$testbindir:"*) ;;
|
|
+ *) dllsearchpath="$dllsearchpath:$testbindir";;
|
|
+ esac
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+ # Substitute the hardcoded libdirs into the rpath.
|
|
+ if test -n "$hardcode_libdir_separator" &&
|
|
+ test -n "$hardcode_libdirs"; then
|
|
+ libdir="$hardcode_libdirs"
|
|
+ eval rpath=\" $hardcode_libdir_flag_spec\"
|
|
+ fi
|
|
+ compile_rpath="$rpath"
|
|
+
|
|
+ rpath=
|
|
+ hardcode_libdirs=
|
|
+ for libdir in $finalize_rpath; do
|
|
+ if test -n "$hardcode_libdir_flag_spec"; then
|
|
+ if test -n "$hardcode_libdir_separator"; then
|
|
+ if test -z "$hardcode_libdirs"; then
|
|
+ hardcode_libdirs="$libdir"
|
|
+ else
|
|
+ # Just accumulate the unique libdirs.
|
|
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
|
|
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
|
|
+ ;;
|
|
+ *)
|
|
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ else
|
|
+ eval flag=\"$hardcode_libdir_flag_spec\"
|
|
+ rpath="$rpath $flag"
|
|
+ fi
|
|
+ elif test -n "$runpath_var"; then
|
|
+ case "$finalize_perm_rpath " in
|
|
+ *" $libdir "*) ;;
|
|
+ *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
|
|
+ esac
|
|
+ fi
|
|
+ done
|
|
+ # Substitute the hardcoded libdirs into the rpath.
|
|
+ if test -n "$hardcode_libdir_separator" &&
|
|
+ test -n "$hardcode_libdirs"; then
|
|
+ libdir="$hardcode_libdirs"
|
|
+ eval rpath=\" $hardcode_libdir_flag_spec\"
|
|
+ fi
|
|
+ finalize_rpath="$rpath"
|
|
+
|
|
+ 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`
|
|
+ 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"
|
|
+
|
|
+ # 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`
|
|
+ fi
|
|
+
|
|
+ if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
|
|
+ # Replace the output file specification.
|
|
+ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$output"'%g' | $NL2SP`
|
|
+ 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=$?
|
|
+
|
|
+ # Delete the generated files.
|
|
+ if test -n "$dlsyms"; then
|
|
+ $show "$rm $output_objdir/${outputname}S.${objext}"
|
|
+ $run $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
|
|
+ if test -n "$finalize_shlibpath"; then
|
|
+ finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
|
|
+ fi
|
|
+
|
|
+ compile_var=
|
|
+ finalize_var=
|
|
+ if test -n "$runpath_var"; then
|
|
+ if test -n "$perm_rpath"; then
|
|
+ # We should set the runpath_var.
|
|
+ rpath=
|
|
+ for dir in $perm_rpath; do
|
|
+ rpath="$rpath$dir:"
|
|
+ done
|
|
+ compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
|
|
+ fi
|
|
+ if test -n "$finalize_perm_rpath"; then
|
|
+ # We should set the runpath_var.
|
|
+ rpath=
|
|
+ for dir in $finalize_perm_rpath; do
|
|
+ rpath="$rpath$dir:"
|
|
+ done
|
|
+ finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ if test "$no_install" = yes; then
|
|
+ # 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'`
|
|
+ # Delete the old output file.
|
|
+ $run $rm $output
|
|
+ # Link the executable and exit
|
|
+ $show "$link_command"
|
|
+ $run eval "$link_command" || exit $?
|
|
+ exit $EXIT_SUCCESS
|
|
+ fi
|
|
+
|
|
+ if test "$hardcode_action" = relink; then
|
|
+ # Fast installation is not supported
|
|
+ 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
|
|
+ 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`
|
|
+ else
|
|
+ # fast_install is set to needless
|
|
+ relink_command=
|
|
+ fi
|
|
+ else
|
|
+ link_command="$compile_var$compile_command$compile_rpath"
|
|
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ # Replace the output file specification.
|
|
+ link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
|
|
+
|
|
+ # Delete the old output files.
|
|
+ $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
|
|
+
|
|
+ $show "$link_command"
|
|
+ $run eval "$link_command" || exit $?
|
|
+
|
|
+ # Now create the wrapper script.
|
|
+ $show "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"
|
|
+ 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"
|
|
+ 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"`
|
|
+ fi
|
|
+
|
|
+ # Only actually do things if our run command is non-null.
|
|
+ if test -z "$run"; then
|
|
+ # 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$,,'` ;;
|
|
+ esac
|
|
+ # test for cygwin because mv fails w/o .exe extensions
|
|
+ case $host in
|
|
+ *cygwin*)
|
|
+ exeext=.exe
|
|
+ outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;;
|
|
+ *) 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
|
|
+
|
|
+# 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
|
|
+
|
|
+ $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+\"\$@\"}
|
|
+"
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ $echo >> $output "\
|
|
+ exec \"\$progdir/\$program\" \${1+\"\$@\"}
|
|
+"
|
|
+ ;;
|
|
+ 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
|
|
+
|
|
+ # See if we need to build an old-fashioned archive.
|
|
+ for oldlib in $oldlibs; do
|
|
+
|
|
+ if test "$build_libtool_libs" = convenience; then
|
|
+ oldobjs="$libobjs_save"
|
|
+ addlibs="$convenience"
|
|
+ build_libtool_libs=no
|
|
+ else
|
|
+ if test "$build_libtool_libs" = module; then
|
|
+ oldobjs="$libobjs_save"
|
|
+ build_libtool_libs=no
|
|
+ else
|
|
+ oldobjs="$old_deplibs $non_pic_objects"
|
|
+ fi
|
|
+ addlibs="$old_convenience"
|
|
+ fi
|
|
+
|
|
+ if test -n "$addlibs"; then
|
|
+ gentop="$output_objdir/${outputname}x"
|
|
+ generated="$generated $gentop"
|
|
+
|
|
+ func_extract_archives $gentop $addlibs
|
|
+ oldobjs="$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
|
|
+ else
|
|
+ # 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
|
|
+ # static archive out of a convenience library, or when linking
|
|
+ # the entirety of a libtool archive into another (currently
|
|
+ # not supported by libtool).
|
|
+ if (for obj in $oldobjs
|
|
+ do
|
|
+ $echo "X$obj" | $Xsed -e 's%^.*/%%'
|
|
+ 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
|
|
+
|
|
+ save_oldobjs=$oldobjs
|
|
+ oldobjs=
|
|
+ counter=1
|
|
+ for obj in $save_oldobjs
|
|
+ do
|
|
+ objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
|
|
+ case " $oldobjs " in
|
|
+ " ") oldobjs=$obj ;;
|
|
+ *[\ /]"$objbase "*)
|
|
+ while :; do
|
|
+ # Make sure we don't pick an alternate name that also
|
|
+ # overlaps.
|
|
+ newobj=lt$counter-$objbase
|
|
+ counter=`expr $counter + 1`
|
|
+ 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"
|
|
+ ;;
|
|
+ *) oldobjs="$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
|
|
+ cmds=$old_archive_cmds
|
|
+ else
|
|
+ # the command line is too long to link in one step, link in parts
|
|
+ $echo "using piecewise archive linking..."
|
|
+ save_RANLIB=$RANLIB
|
|
+ RANLIB=:
|
|
+ objlist=
|
|
+ concat_cmds=
|
|
+ save_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
|
|
+ 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
|
|
+ :
|
|
+ else
|
|
+ # the above command should be used before it gets too long
|
|
+ oldobjs=$objlist
|
|
+ if test "$obj" = "$last_oldobj" ; then
|
|
+ RANLIB=$save_RANLIB
|
|
+ fi
|
|
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
|
|
+ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
|
|
+ objlist=
|
|
+ fi
|
|
+ done
|
|
+ RANLIB=$save_RANLIB
|
|
+ oldobjs=$objlist
|
|
+ if test "X$oldobjs" = "X" ; then
|
|
+ eval cmds=\"\$concat_cmds\"
|
|
+ else
|
|
+ eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
|
|
+ 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"
|
|
+ done
|
|
+
|
|
+ if test -n "$generated"; then
|
|
+ $show "${rm}r$generated"
|
|
+ $run ${rm}r$generated
|
|
+ fi
|
|
+
|
|
+ # Now create the libtool archive.
|
|
+ case $output in
|
|
+ *.la)
|
|
+ old_library=
|
|
+ test "$build_old_libs" = yes && old_library="$libname.$libext"
|
|
+ $show "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"
|
|
+ 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"
|
|
+ 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`
|
|
+ if test "$hardcode_automatic" = yes ; then
|
|
+ relink_command=
|
|
+ fi
|
|
+
|
|
+
|
|
+ # Only create the output if not a dry run.
|
|
+ if test -z "$run"; then
|
|
+ for installed in no yes; do
|
|
+ if test "$installed" = yes; then
|
|
+ if test -z "$install_libdir"; then
|
|
+ break
|
|
+ fi
|
|
+ output="$output_objdir/$outputname"i
|
|
+ # Replace all uninstalled libtool libraries with the installed ones
|
|
+ newdependency_libs=
|
|
+ for deplib in $dependency_libs; do
|
|
+ case $deplib in
|
|
+ *.la)
|
|
+ name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
|
|
+ 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"
|
|
+ ;;
|
|
+ *) newdependency_libs="$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"
|
|
+ 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"
|
|
+ done
|
|
+ dlprefiles="$newdlprefiles"
|
|
+ else
|
|
+ newdlfiles=
|
|
+ for lib in $dlfiles; do
|
|
+ case $lib in
|
|
+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
|
|
+ *) abs=`pwd`"/$lib" ;;
|
|
+ esac
|
|
+ newdlfiles="$newdlfiles $abs"
|
|
+ done
|
|
+ dlfiles="$newdlfiles"
|
|
+ newdlprefiles=
|
|
+ for lib in $dlprefiles; do
|
|
+ case $lib in
|
|
+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
|
|
+ *) abs=`pwd`"/$lib" ;;
|
|
+ esac
|
|
+ newdlprefiles="$newdlprefiles $abs"
|
|
+ done
|
|
+ dlprefiles="$newdlprefiles"
|
|
+ fi
|
|
+ $rm $output
|
|
+ # place dlname in correct position for cygwin
|
|
+ tdlname=$dlname
|
|
+ case $host,$output,$installed,$module,$dlname in
|
|
+ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
|
|
+ esac
|
|
+ $echo > $output "\
|
|
+# $outputname - a libtool library file
|
|
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
|
|
+#
|
|
+# Please DO NOT delete this file!
|
|
+# It is necessary for linking the library.
|
|
+
|
|
+# The name that we can dlopen(3).
|
|
+dlname='$tdlname'
|
|
+
|
|
+# Names of this library.
|
|
+library_names='$library_names'
|
|
+
|
|
+# The name of the static archive.
|
|
+old_library='$old_library'
|
|
+
|
|
+# Libraries that this one depends upon.
|
|
+dependency_libs='$dependency_libs'
|
|
+
|
|
+# Version information for $libname.
|
|
+current=$current
|
|
+age=$age
|
|
+revision=$revision
|
|
+
|
|
+# Is this an already installed library?
|
|
+installed=$installed
|
|
+
|
|
+# Should we warn about portability when linking against -modules?
|
|
+shouldnotlink=$module
|
|
+
|
|
+# Files to dlopen/dlpreopen
|
|
+dlopen='$dlfiles'
|
|
+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 "\
|
|
+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
|
|
+ ;;
|
|
+ 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
|
|
+ $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
|
|
+ exit $EXIT_FAILURE
|
|
+ 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
|
|
+
|
|
+ # Restore saved environment variables
|
|
+ for lt_var in LANG 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
|
|
+ ;;
|
|
+
|
|
+ # libtool clean and uninstall mode
|
|
+ clean | uninstall)
|
|
+ modename="$modename: $mode"
|
|
+ rm="$nonopt"
|
|
+ files=
|
|
+ rmforce=
|
|
+ exit_status=0
|
|
+
|
|
+ # This variable tells wrapper scripts just to set variables rather
|
|
+ # than running their programs.
|
|
+ libtool_install_magic="$magic"
|
|
+
|
|
+ for arg
|
|
+ do
|
|
+ case $arg in
|
|
+ -f) rm="$rm $arg"; rmforce=yes ;;
|
|
+ -*) rm="$rm $arg" ;;
|
|
+ *) files="$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
|
|
+
|
|
+ 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"
|
|
+ else
|
|
+ objdir="$dir/$origobjdir"
|
|
+ fi
|
|
+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
|
|
+ test "$mode" = uninstall && objdir="$dir"
|
|
+
|
|
+ # Remember objdir for removal later, being careful to avoid duplicates
|
|
+ if test "$mode" = clean; then
|
|
+ case " $rmdirs " in
|
|
+ *" $objdir "*) ;;
|
|
+ *) rmdirs="$rmdirs $objdir" ;;
|
|
+ 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
|
|
+ :
|
|
+ elif test -d "$file"; then
|
|
+ exit_status=1
|
|
+ continue
|
|
+ elif test "$rmforce" = yes; then
|
|
+ continue
|
|
+ fi
|
|
+
|
|
+ rmfiles="$file"
|
|
+
|
|
+ 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
|
|
+
|
|
+ # Delete the libtool libraries and symlinks.
|
|
+ for n in $library_names; do
|
|
+ rmfiles="$rmfiles $objdir/$n"
|
|
+ done
|
|
+ test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
|
|
+
|
|
+ case "$mode" in
|
|
+ clean)
|
|
+ case " $library_names " in
|
|
+ # " " in the beginning catches empty $dlname
|
|
+ *" $dlname "*) ;;
|
|
+ *) rmfiles="$rmfiles $objdir/$dlname" ;;
|
|
+ esac
|
|
+ test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${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"
|
|
+ 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"
|
|
+ fi
|
|
+ # FIXME: should reinstall the best remaining shared library.
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ *.lo)
|
|
+ # Possibly a libtool object, so verify it.
|
|
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
|
|
+
|
|
+ # Read the .lo file
|
|
+ . $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"
|
|
+ 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"
|
|
+ fi
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ if test "$mode" = clean ; then
|
|
+ noexename=$name
|
|
+ case $file in
|
|
+ *.exe)
|
|
+ file=`$echo $file|${SED} 's,.exe$,,'`
|
|
+ noexename=`$echo $name|${SED} 's,.exe$,,'`
|
|
+ # $file with .exe has already been added to rmfiles,
|
|
+ # add $file without .exe
|
|
+ rmfiles="$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
|
|
+
|
|
+ # 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}"
|
|
+ if test "$fast_install" = yes && test -n "$relink_command"; then
|
|
+ rmfiles="$rmfiles $objdir/lt-$name"
|
|
+ fi
|
|
+ if test "X$noexename" != "X$name" ; then
|
|
+ rmfiles="$rmfiles $objdir/lt-${noexename}.c"
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ $show "$rm $rmfiles"
|
|
+ $run $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
|
|
+ fi
|
|
+ done
|
|
+
|
|
+ exit $exit_status
|
|
+ ;;
|
|
+
|
|
+ "")
|
|
+ $echo "$modename: you must specify a MODE" 1>&2
|
|
+ $echo "$generic_help" 1>&2
|
|
+ exit $EXIT_FAILURE
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ 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"
|
|
+
|
|
+if test -n "$exec_cmd"; then
|
|
+ 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.
|
|
+
|
|
+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
|
|
+# choices, we go for a static library, that is the most portable,
|
|
+# since we can't tell whether shared libraries were disabled because
|
|
+# the user asked for that or because the platform doesn't support
|
|
+# them. This is particularly important on AIX, because we don't
|
|
+# support having both static and shared libraries enabled at the same
|
|
+# time on that platform, so we default to a shared-only configuration.
|
|
+# If a disable-shared tag is given, we'll fallback to a static-only
|
|
+# configuration. But we'll never go from static-only to shared-only.
|
|
+
|
|
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
|
|
+disable_libs=shared
|
|
+# ### END LIBTOOL TAG CONFIG: disable-shared
|
|
+
|
|
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
|
|
+disable_libs=static
|
|
+# ### END LIBTOOL TAG CONFIG: disable-static
|
|
+
|
|
+# Local Variables:
|
|
+# mode:shell-script
|
|
+# sh-indentation:2
|
|
+# End:
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/Makefile.am open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/Makefile.am
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/Makefile.am 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/Makefile.am 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,25 @@
|
|
+SUBDIRS= src
|
|
+
|
|
+EXTRA_DIST = build_date
|
|
+
|
|
+build_date:
|
|
+ echo 'char *build_date ="'`date`'";' > build_date.c
|
|
+ echo 'char *build_date; '> build_date.h
|
|
+
|
|
+manprefix = /usr/share
|
|
+mandir = ${manprefix}/man
|
|
+logdir = /etc/logrotate.d
|
|
+
|
|
+install-am: all-am
|
|
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install-man install-log install-brcm
|
|
+
|
|
+install-man:
|
|
+ cat docs/iscsiuio.8 | GZIP=$(GZIP_ENV) gzip -c > iscsiuio.8.gz
|
|
+ $(INSTALL_PROGRAM) iscsiuio.8.gz $(mandir)/man8
|
|
+
|
|
+install-log:
|
|
+ $(INSTALL_PROGRAM) iscsiuiolog $(logdir)
|
|
+
|
|
+install-brcm:
|
|
+ -rm -f $(sbindir)/brcm_iscsiuio
|
|
+ -ln -s $(sbindir)/iscsiuio $(sbindir)/brcm_iscsiuio
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/Makefile.in open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/Makefile.in
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/Makefile.in 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/Makefile.in 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,629 @@
|
|
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
|
+# @configure_input@
|
|
+
|
|
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
|
+# 2003, 2004, 2005 Free Software Foundation, Inc.
|
|
+# This Makefile.in 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.
|
|
+
|
|
+# This program is distributed in the hope that it will be useful,
|
|
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
|
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
+# PARTICULAR PURPOSE.
|
|
+
|
|
+@SET_MAKE@
|
|
+srcdir = @srcdir@
|
|
+top_srcdir = @top_srcdir@
|
|
+VPATH = @srcdir@
|
|
+pkgdatadir = $(datadir)/@PACKAGE@
|
|
+pkglibdir = $(libdir)/@PACKAGE@
|
|
+pkgincludedir = $(includedir)/@PACKAGE@
|
|
+top_builddir = .
|
|
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
|
+INSTALL = @INSTALL@
|
|
+install_sh_DATA = $(install_sh) -c -m 644
|
|
+install_sh_PROGRAM = $(install_sh) -c
|
|
+install_sh_SCRIPT = $(install_sh) -c
|
|
+INSTALL_HEADER = $(INSTALL_DATA)
|
|
+transform = $(program_transform_name)
|
|
+NORMAL_INSTALL = :
|
|
+PRE_INSTALL = :
|
|
+POST_INSTALL = :
|
|
+NORMAL_UNINSTALL = :
|
|
+PRE_UNINSTALL = :
|
|
+POST_UNINSTALL = :
|
|
+build_triplet = @build@
|
|
+host_triplet = @host@
|
|
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
|
|
+ $(srcdir)/Makefile.in $(srcdir)/config.h.in \
|
|
+ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
|
|
+ TODO compile config.guess config.sub depcomp install-sh \
|
|
+ ltmain.sh missing
|
|
+subdir = .
|
|
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
|
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
|
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
|
+ $(ACLOCAL_M4)
|
|
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
|
+ configure.lineno configure.status.lineno
|
|
+mkinstalldirs = $(install_sh) -d
|
|
+CONFIG_HEADER = config.h
|
|
+CONFIG_CLEAN_FILES =
|
|
+SOURCES =
|
|
+DIST_SOURCES =
|
|
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
|
+ html-recursive info-recursive install-data-recursive \
|
|
+ install-exec-recursive install-info-recursive \
|
|
+ install-recursive installcheck-recursive installdirs-recursive \
|
|
+ pdf-recursive ps-recursive uninstall-info-recursive \
|
|
+ uninstall-recursive
|
|
+ETAGS = etags
|
|
+CTAGS = ctags
|
|
+DIST_SUBDIRS = $(SUBDIRS)
|
|
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
|
+distdir = $(PACKAGE)-$(VERSION)
|
|
+top_distdir = $(distdir)
|
|
+am__remove_distdir = \
|
|
+ { test ! -d $(distdir) \
|
|
+ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
|
|
+ && rm -fr $(distdir); }; }
|
|
+DIST_ARCHIVES = $(distdir).tar.gz
|
|
+GZIP_ENV = --best
|
|
+distuninstallcheck_listfiles = find . -type f -print
|
|
+distcleancheck_listfiles = find . -type f -print
|
|
+ACLOCAL = @ACLOCAL@
|
|
+AMDEP_FALSE = @AMDEP_FALSE@
|
|
+AMDEP_TRUE = @AMDEP_TRUE@
|
|
+AMTAR = @AMTAR@
|
|
+AR = @AR@
|
|
+AUTOCONF = @AUTOCONF@
|
|
+AUTOHEADER = @AUTOHEADER@
|
|
+AUTOMAKE = @AUTOMAKE@
|
|
+AWK = @AWK@
|
|
+BASH = @BASH@
|
|
+CC = @CC@
|
|
+CCDEPMODE = @CCDEPMODE@
|
|
+CFLAGS = @CFLAGS@
|
|
+CPP = @CPP@
|
|
+CPPFLAGS = @CPPFLAGS@
|
|
+CXX = @CXX@
|
|
+CXXCPP = @CXXCPP@
|
|
+CXXDEPMODE = @CXXDEPMODE@
|
|
+CXXFLAGS = @CXXFLAGS@
|
|
+CYGPATH_W = @CYGPATH_W@
|
|
+DEBUG_FALSE = @DEBUG_FALSE@
|
|
+DEBUG_TRUE = @DEBUG_TRUE@
|
|
+DEFS = @DEFS@
|
|
+DEPDIR = @DEPDIR@
|
|
+ECHO = @ECHO@
|
|
+ECHO_C = @ECHO_C@
|
|
+ECHO_N = @ECHO_N@
|
|
+ECHO_T = @ECHO_T@
|
|
+EGREP = @EGREP@
|
|
+ENDIAN = @ENDIAN@
|
|
+EXEEXT = @EXEEXT@
|
|
+F77 = @F77@
|
|
+FFLAGS = @FFLAGS@
|
|
+INSTALL_DATA = @INSTALL_DATA@
|
|
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
|
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
|
+LDFLAGS = @LDFLAGS@
|
|
+LIBOBJS = @LIBOBJS@
|
|
+LIBS = @LIBS@
|
|
+LIBTOOL = @LIBTOOL@
|
|
+LN_S = @LN_S@
|
|
+LTLIBOBJS = @LTLIBOBJS@
|
|
+MAKEINFO = @MAKEINFO@
|
|
+OBJEXT = @OBJEXT@
|
|
+PACKAGE = @PACKAGE@
|
|
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
|
+PACKAGE_NAME = @PACKAGE_NAME@
|
|
+PACKAGE_STRING = @PACKAGE_STRING@
|
|
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
|
+PACKAGE_VERSION = @PACKAGE_VERSION@
|
|
+PATH_SEPARATOR = @PATH_SEPARATOR@
|
|
+RANLIB = @RANLIB@
|
|
+SED = @SED@
|
|
+SET_MAKE = @SET_MAKE@
|
|
+SHELL = @SHELL@
|
|
+STRIP = @STRIP@
|
|
+VERSION = @VERSION@
|
|
+ac_ct_AR = @ac_ct_AR@
|
|
+ac_ct_CC = @ac_ct_CC@
|
|
+ac_ct_CXX = @ac_ct_CXX@
|
|
+ac_ct_F77 = @ac_ct_F77@
|
|
+ac_ct_RANLIB = @ac_ct_RANLIB@
|
|
+ac_ct_STRIP = @ac_ct_STRIP@
|
|
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
|
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
|
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
|
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
|
+am__include = @am__include@
|
|
+am__leading_dot = @am__leading_dot@
|
|
+am__quote = @am__quote@
|
|
+am__tar = @am__tar@
|
|
+am__untar = @am__untar@
|
|
+bindir = @bindir@
|
|
+build = @build@
|
|
+build_alias = @build_alias@
|
|
+build_cpu = @build_cpu@
|
|
+build_os = @build_os@
|
|
+build_vendor = @build_vendor@
|
|
+datadir = @datadir@
|
|
+exec_prefix = @exec_prefix@
|
|
+host = @host@
|
|
+host_alias = @host_alias@
|
|
+host_cpu = @host_cpu@
|
|
+host_os = @host_os@
|
|
+host_vendor = @host_vendor@
|
|
+includedir = @includedir@
|
|
+infodir = @infodir@
|
|
+install_sh = @install_sh@
|
|
+libdir = @libdir@
|
|
+libexecdir = @libexecdir@
|
|
+localstatedir = @localstatedir@
|
|
+mandir = ${manprefix}/man
|
|
+mkdir_p = @mkdir_p@
|
|
+oldincludedir = @oldincludedir@
|
|
+prefix = @prefix@
|
|
+program_transform_name = @program_transform_name@
|
|
+sbindir = @sbindir@
|
|
+sharedstatedir = @sharedstatedir@
|
|
+sysconfdir = @sysconfdir@
|
|
+target_alias = @target_alias@
|
|
+SUBDIRS = src
|
|
+EXTRA_DIST = build_date
|
|
+manprefix = /usr/share
|
|
+logdir = /etc/logrotate.d
|
|
+all: config.h
|
|
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
|
|
+
|
|
+.SUFFIXES:
|
|
+am--refresh:
|
|
+ @:
|
|
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
|
+ @for dep in $?; do \
|
|
+ case '$(am__configure_deps)' in \
|
|
+ *$$dep*) \
|
|
+ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
|
|
+ cd $(srcdir) && $(AUTOMAKE) --gnu \
|
|
+ && exit 0; \
|
|
+ exit 1;; \
|
|
+ esac; \
|
|
+ done; \
|
|
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
|
|
+ cd $(top_srcdir) && \
|
|
+ $(AUTOMAKE) --gnu Makefile
|
|
+.PRECIOUS: Makefile
|
|
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
|
+ @case '$?' in \
|
|
+ *config.status*) \
|
|
+ echo ' $(SHELL) ./config.status'; \
|
|
+ $(SHELL) ./config.status;; \
|
|
+ *) \
|
|
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
|
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
|
+ esac;
|
|
+
|
|
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
|
+ $(SHELL) ./config.status --recheck
|
|
+
|
|
+$(top_srcdir)/configure: $(am__configure_deps)
|
|
+ cd $(srcdir) && $(AUTOCONF)
|
|
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
|
+ cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
|
+
|
|
+config.h: stamp-h1
|
|
+ @if test ! -f $@; then \
|
|
+ rm -f stamp-h1; \
|
|
+ $(MAKE) stamp-h1; \
|
|
+ else :; fi
|
|
+
|
|
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
|
|
+ @rm -f stamp-h1
|
|
+ cd $(top_builddir) && $(SHELL) ./config.status config.h
|
|
+$(srcdir)/config.h.in: $(am__configure_deps)
|
|
+ cd $(top_srcdir) && $(AUTOHEADER)
|
|
+ rm -f stamp-h1
|
|
+ touch $@
|
|
+
|
|
+distclean-hdr:
|
|
+ -rm -f config.h stamp-h1
|
|
+
|
|
+mostlyclean-libtool:
|
|
+ -rm -f *.lo
|
|
+
|
|
+clean-libtool:
|
|
+ -rm -rf .libs _libs
|
|
+
|
|
+distclean-libtool:
|
|
+ -rm -f libtool
|
|
+uninstall-info-am:
|
|
+
|
|
+# This directory's subdirectories are mostly independent; you can cd
|
|
+# into them and run `make' without going through this Makefile.
|
|
+# To change the values of `make' variables: instead of editing Makefiles,
|
|
+# (1) if the variable is set in `config.status', edit `config.status'
|
|
+# (which will cause the Makefiles to be regenerated when you run `make');
|
|
+# (2) otherwise, pass the desired values on the `make' command line.
|
|
+$(RECURSIVE_TARGETS):
|
|
+ @failcom='exit 1'; \
|
|
+ for f in x $$MAKEFLAGS; do \
|
|
+ case $$f in \
|
|
+ *=* | --[!k]*);; \
|
|
+ *k*) failcom='fail=yes';; \
|
|
+ esac; \
|
|
+ done; \
|
|
+ dot_seen=no; \
|
|
+ target=`echo $@ | sed s/-recursive//`; \
|
|
+ list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
+ echo "Making $$target in $$subdir"; \
|
|
+ if test "$$subdir" = "."; then \
|
|
+ dot_seen=yes; \
|
|
+ local_target="$$target-am"; \
|
|
+ else \
|
|
+ local_target="$$target"; \
|
|
+ fi; \
|
|
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
|
+ || eval $$failcom; \
|
|
+ done; \
|
|
+ if test "$$dot_seen" = "no"; then \
|
|
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
|
+ fi; test -z "$$fail"
|
|
+
|
|
+mostlyclean-recursive clean-recursive distclean-recursive \
|
|
+maintainer-clean-recursive:
|
|
+ @failcom='exit 1'; \
|
|
+ for f in x $$MAKEFLAGS; do \
|
|
+ case $$f in \
|
|
+ *=* | --[!k]*);; \
|
|
+ *k*) failcom='fail=yes';; \
|
|
+ esac; \
|
|
+ done; \
|
|
+ dot_seen=no; \
|
|
+ case "$@" in \
|
|
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
|
+ *) list='$(SUBDIRS)' ;; \
|
|
+ esac; \
|
|
+ rev=''; for subdir in $$list; do \
|
|
+ if test "$$subdir" = "."; then :; else \
|
|
+ rev="$$subdir $$rev"; \
|
|
+ fi; \
|
|
+ done; \
|
|
+ rev="$$rev ."; \
|
|
+ target=`echo $@ | sed s/-recursive//`; \
|
|
+ for subdir in $$rev; do \
|
|
+ echo "Making $$target in $$subdir"; \
|
|
+ if test "$$subdir" = "."; then \
|
|
+ local_target="$$target-am"; \
|
|
+ else \
|
|
+ local_target="$$target"; \
|
|
+ fi; \
|
|
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
|
+ || eval $$failcom; \
|
|
+ done && test -z "$$fail"
|
|
+tags-recursive:
|
|
+ list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
|
+ done
|
|
+ctags-recursive:
|
|
+ list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
|
+ done
|
|
+
|
|
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ mkid -fID $$unique
|
|
+tags: TAGS
|
|
+
|
|
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
|
+ $(TAGS_FILES) $(LISP)
|
|
+ tags=; \
|
|
+ here=`pwd`; \
|
|
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
|
+ include_option=--etags-include; \
|
|
+ empty_fix=.; \
|
|
+ else \
|
|
+ include_option=--include; \
|
|
+ empty_fix=; \
|
|
+ fi; \
|
|
+ list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
+ if test "$$subdir" = .; then :; else \
|
|
+ test ! -f $$subdir/TAGS || \
|
|
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
|
+ fi; \
|
|
+ done; \
|
|
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
|
+ test -n "$$unique" || unique=$$empty_fix; \
|
|
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
|
+ $$tags $$unique; \
|
|
+ fi
|
|
+ctags: CTAGS
|
|
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
|
+ $(TAGS_FILES) $(LISP)
|
|
+ tags=; \
|
|
+ here=`pwd`; \
|
|
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
|
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
|
+ $$tags $$unique
|
|
+
|
|
+GTAGS:
|
|
+ here=`$(am__cd) $(top_builddir) && pwd` \
|
|
+ && cd $(top_srcdir) \
|
|
+ && gtags -i $(GTAGS_ARGS) $$here
|
|
+
|
|
+distclean-tags:
|
|
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
|
+
|
|
+distdir: $(DISTFILES)
|
|
+ $(am__remove_distdir)
|
|
+ mkdir $(distdir)
|
|
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
|
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
|
+ list='$(DISTFILES)'; for file in $$list; do \
|
|
+ case $$file in \
|
|
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
|
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
|
+ esac; \
|
|
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
|
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
|
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
|
+ dir="/$$dir"; \
|
|
+ $(mkdir_p) "$(distdir)$$dir"; \
|
|
+ else \
|
|
+ dir=''; \
|
|
+ fi; \
|
|
+ if test -d $$d/$$file; then \
|
|
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
|
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
|
+ fi; \
|
|
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
|
+ else \
|
|
+ test -f $(distdir)/$$file \
|
|
+ || cp -p $$d/$$file $(distdir)/$$file \
|
|
+ || exit 1; \
|
|
+ fi; \
|
|
+ done
|
|
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
|
+ if test "$$subdir" = .; then :; else \
|
|
+ test -d "$(distdir)/$$subdir" \
|
|
+ || $(mkdir_p) "$(distdir)/$$subdir" \
|
|
+ || exit 1; \
|
|
+ distdir=`$(am__cd) $(distdir) && pwd`; \
|
|
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
|
+ (cd $$subdir && \
|
|
+ $(MAKE) $(AM_MAKEFLAGS) \
|
|
+ top_distdir="$$top_distdir" \
|
|
+ distdir="$$distdir/$$subdir" \
|
|
+ distdir) \
|
|
+ || exit 1; \
|
|
+ fi; \
|
|
+ done
|
|
+ -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
|
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
|
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
|
+ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|
|
+ || chmod -R a+r $(distdir)
|
|
+dist-gzip: distdir
|
|
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
|
+ $(am__remove_distdir)
|
|
+
|
|
+dist-bzip2: distdir
|
|
+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
|
|
+ $(am__remove_distdir)
|
|
+
|
|
+dist-tarZ: distdir
|
|
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
|
+ $(am__remove_distdir)
|
|
+
|
|
+dist-shar: distdir
|
|
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
|
+ $(am__remove_distdir)
|
|
+
|
|
+dist-zip: distdir
|
|
+ -rm -f $(distdir).zip
|
|
+ zip -rq $(distdir).zip $(distdir)
|
|
+ $(am__remove_distdir)
|
|
+
|
|
+dist dist-all: distdir
|
|
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
|
+ $(am__remove_distdir)
|
|
+
|
|
+# This target untars the dist file and tries a VPATH configuration. Then
|
|
+# it guarantees that the distribution is self-contained by making another
|
|
+# tarfile.
|
|
+distcheck: dist
|
|
+ case '$(DIST_ARCHIVES)' in \
|
|
+ *.tar.gz*) \
|
|
+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
|
|
+ *.tar.bz2*) \
|
|
+ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
|
|
+ *.tar.Z*) \
|
|
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
|
+ *.shar.gz*) \
|
|
+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
|
|
+ *.zip*) \
|
|
+ unzip $(distdir).zip ;;\
|
|
+ esac
|
|
+ chmod -R a-w $(distdir); chmod a+w $(distdir)
|
|
+ mkdir $(distdir)/_build
|
|
+ mkdir $(distdir)/_inst
|
|
+ chmod a-w $(distdir)
|
|
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
|
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
|
+ && cd $(distdir)/_build \
|
|
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
|
+ $(DISTCHECK_CONFIGURE_FLAGS) \
|
|
+ && $(MAKE) $(AM_MAKEFLAGS) \
|
|
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
|
|
+ && $(MAKE) $(AM_MAKEFLAGS) check \
|
|
+ && $(MAKE) $(AM_MAKEFLAGS) install \
|
|
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
|
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
|
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
|
+ distuninstallcheck \
|
|
+ && chmod -R a-w "$$dc_install_base" \
|
|
+ && ({ \
|
|
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
|
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
|
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
|
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
|
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
|
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
|
|
+ && rm -rf "$$dc_destdir" \
|
|
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
|
|
+ && rm -rf $(DIST_ARCHIVES) \
|
|
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
|
|
+ $(am__remove_distdir)
|
|
+ @(echo "$(distdir) archives ready for distribution: "; \
|
|
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
|
+ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
|
|
+distuninstallcheck:
|
|
+ @cd $(distuninstallcheck_dir) \
|
|
+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|
|
+ || { echo "ERROR: files left after uninstall:" ; \
|
|
+ if test -n "$(DESTDIR)"; then \
|
|
+ echo " (check DESTDIR support)"; \
|
|
+ fi ; \
|
|
+ $(distuninstallcheck_listfiles) ; \
|
|
+ exit 1; } >&2
|
|
+distcleancheck: distclean
|
|
+ @if test '$(srcdir)' = . ; then \
|
|
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
|
+ exit 1 ; \
|
|
+ fi
|
|
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
|
+ || { echo "ERROR: files left in build directory after distclean:" ; \
|
|
+ $(distcleancheck_listfiles) ; \
|
|
+ exit 1; } >&2
|
|
+check-am: all-am
|
|
+check: check-recursive
|
|
+all-am: Makefile config.h
|
|
+installdirs: installdirs-recursive
|
|
+installdirs-am:
|
|
+install: install-recursive
|
|
+install-exec: install-exec-recursive
|
|
+install-data: install-data-recursive
|
|
+uninstall: uninstall-recursive
|
|
+
|
|
+installcheck: installcheck-recursive
|
|
+install-strip:
|
|
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
|
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
|
+ `test -z '$(STRIP)' || \
|
|
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
|
+mostlyclean-generic:
|
|
+
|
|
+clean-generic:
|
|
+
|
|
+distclean-generic:
|
|
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
|
+
|
|
+maintainer-clean-generic:
|
|
+ @echo "This command is intended for maintainers to use"
|
|
+ @echo "it deletes files that may require special tools to rebuild."
|
|
+clean: clean-recursive
|
|
+
|
|
+clean-am: clean-generic clean-libtool mostlyclean-am
|
|
+
|
|
+distclean: distclean-recursive
|
|
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
|
+ -rm -f Makefile
|
|
+distclean-am: clean-am distclean-generic distclean-hdr \
|
|
+ distclean-libtool distclean-tags
|
|
+
|
|
+dvi: dvi-recursive
|
|
+
|
|
+dvi-am:
|
|
+
|
|
+html: html-recursive
|
|
+
|
|
+info: info-recursive
|
|
+
|
|
+info-am:
|
|
+
|
|
+install-data-am:
|
|
+
|
|
+install-exec-am:
|
|
+
|
|
+install-info: install-info-recursive
|
|
+
|
|
+installcheck-am:
|
|
+
|
|
+maintainer-clean: maintainer-clean-recursive
|
|
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
|
+ -rm -rf $(top_srcdir)/autom4te.cache
|
|
+ -rm -f Makefile
|
|
+maintainer-clean-am: distclean-am maintainer-clean-generic
|
|
+
|
|
+mostlyclean: mostlyclean-recursive
|
|
+
|
|
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
|
+
|
|
+pdf: pdf-recursive
|
|
+
|
|
+pdf-am:
|
|
+
|
|
+ps: ps-recursive
|
|
+
|
|
+ps-am:
|
|
+
|
|
+uninstall-am: uninstall-info-am
|
|
+
|
|
+uninstall-info: uninstall-info-recursive
|
|
+
|
|
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
|
|
+ check-am clean clean-generic clean-libtool clean-recursive \
|
|
+ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
|
|
+ dist-shar dist-tarZ dist-zip distcheck distclean \
|
|
+ distclean-generic distclean-hdr distclean-libtool \
|
|
+ distclean-recursive distclean-tags distcleancheck distdir \
|
|
+ distuninstallcheck dvi dvi-am html html-am info info-am \
|
|
+ install install-am install-data install-data-am install-exec \
|
|
+ install-exec-am install-info install-info-am install-man \
|
|
+ install-strip installcheck installcheck-am installdirs \
|
|
+ installdirs-am maintainer-clean maintainer-clean-generic \
|
|
+ maintainer-clean-recursive mostlyclean mostlyclean-generic \
|
|
+ mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
|
|
+ tags tags-recursive uninstall uninstall-am uninstall-info-am
|
|
+
|
|
+
|
|
+build_date:
|
|
+ echo 'char *build_date ="'`date`'";' > build_date.c
|
|
+ echo 'char *build_date; '> build_date.h
|
|
+
|
|
+install-am: all-am
|
|
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install-man install-log install-brcm
|
|
+
|
|
+install-man:
|
|
+ cat docs/iscsiuio.8 | GZIP=$(GZIP_ENV) gzip -c > iscsiuio.8.gz
|
|
+ $(INSTALL_PROGRAM) iscsiuio.8.gz $(mandir)/man8
|
|
+
|
|
+install-log:
|
|
+ $(INSTALL_PROGRAM) iscsiuiolog $(logdir)
|
|
+
|
|
+install-brcm:
|
|
+ -rm -f $(sbindir)/brcm_iscsiuio
|
|
+ -ln -s $(sbindir)/iscsiuio $(sbindir)/brcm_iscsiuio
|
|
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
|
+# Otherwise a system limit (for SysV at least) may be exceeded.
|
|
+.NOEXPORT:
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/missing open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/missing
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/missing 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/missing 2012-04-09 21:52:14.000000000 -0500
|
|
@@ -0,0 +1,367 @@
|
|
+#! /bin/sh
|
|
+# Common stub for a few missing GNU programs while installing.
|
|
+
|
|
+scriptversion=2006-05-10.23
|
|
+
|
|
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
|
|
+# 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
|
|
+# it under the terms of the GNU General Public License as published by
|
|
+# the Free Software Foundation; either version 2, 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.
|
|
+
|
|
+if test $# -eq 0; then
|
|
+ echo 1>&2 "Try \`$0 --help' for more information"
|
|
+ exit 1
|
|
+fi
|
|
+
|
|
+run=:
|
|
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
|
|
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
|
|
+
|
|
+# In the cases where this matters, `missing' is being run in the
|
|
+# srcdir already.
|
|
+if test -f configure.ac; then
|
|
+ configure_ac=configure.ac
|
|
+else
|
|
+ configure_ac=configure.in
|
|
+fi
|
|
+
|
|
+msg="missing on your system"
|
|
+
|
|
+case $1 in
|
|
+--run)
|
|
+ # Try to run requested program, and just exit if it succeeds.
|
|
+ run=
|
|
+ shift
|
|
+ "$@" && exit 0
|
|
+ # Exit code 63 means version mismatch. This often happens
|
|
+ # when the user try to use an ancient version of a tool on
|
|
+ # a file that requires a minimum version. In this case we
|
|
+ # we should proceed has if the program had been absent, or
|
|
+ # if --run hadn't been passed.
|
|
+ if test $? = 63; then
|
|
+ run=:
|
|
+ msg="probably too old"
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ -h|--h|--he|--hel|--help)
|
|
+ echo "\
|
|
+$0 [OPTION]... PROGRAM [ARGUMENT]...
|
|
+
|
|
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
|
|
+error status if there is no known handling for PROGRAM.
|
|
+
|
|
+Options:
|
|
+ -h, --help display this help and exit
|
|
+ -v, --version output version information and exit
|
|
+ --run try to run the given command, and emulate it if it fails
|
|
+
|
|
+Supported PROGRAM values:
|
|
+ aclocal touch file \`aclocal.m4'
|
|
+ autoconf touch file \`configure'
|
|
+ autoheader touch file \`config.h.in'
|
|
+ autom4te touch the output file, or create a stub one
|
|
+ automake touch all \`Makefile.in' files
|
|
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
|
|
+ flex create \`lex.yy.c', if possible, from existing .c
|
|
+ help2man touch the output file
|
|
+ lex create \`lex.yy.c', if possible, from existing .c
|
|
+ makeinfo touch the output file
|
|
+ tar try tar, gnutar, gtar, then tar without non-portable flags
|
|
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]
|
|
+
|
|
+Send bug reports to <bug-automake@gnu.org>."
|
|
+ exit $?
|
|
+ ;;
|
|
+
|
|
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
|
+ echo "missing $scriptversion (GNU Automake)"
|
|
+ exit $?
|
|
+ ;;
|
|
+
|
|
+ -*)
|
|
+ echo 1>&2 "$0: Unknown \`$1' option"
|
|
+ echo 1>&2 "Try \`$0 --help' for more information"
|
|
+ exit 1
|
|
+ ;;
|
|
+
|
|
+esac
|
|
+
|
|
+# 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).
|
|
+case $1 in
|
|
+ lex|yacc)
|
|
+ # Not GNU programs, they don't have --version.
|
|
+ ;;
|
|
+
|
|
+ tar)
|
|
+ if test -n "$run"; then
|
|
+ echo 1>&2 "ERROR: \`tar' requires --run"
|
|
+ exit 1
|
|
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
|
+ exit 1
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
|
+ # We have it, but it failed.
|
|
+ exit 1
|
|
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
|
+ # Could not run --version or --help. This is probably someone
|
|
+ # running `$TOOL --version' or `$TOOL --help' to check whether
|
|
+ # $TOOL exists and not knowing $TOOL uses missing.
|
|
+ exit 1
|
|
+ fi
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+# If it does not exist, or fails to run (possibly an outdated version),
|
|
+# try to emulate it.
|
|
+case $1 in
|
|
+ aclocal*)
|
|
+ echo 1>&2 "\
|
|
+WARNING: \`$1' is $msg. You should only need it if
|
|
+ you modified \`acinclude.m4' or \`${configure_ac}'. You might want
|
|
+ to install the \`Automake' and \`Perl' packages. Grab them from
|
|
+ any GNU archive site."
|
|
+ touch aclocal.m4
|
|
+ ;;
|
|
+
|
|
+ autoconf)
|
|
+ echo 1>&2 "\
|
|
+WARNING: \`$1' is $msg. You should only need it if
|
|
+ you modified \`${configure_ac}'. You might want to install the
|
|
+ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
|
|
+ archive site."
|
|
+ touch configure
|
|
+ ;;
|
|
+
|
|
+ autoheader)
|
|
+ echo 1>&2 "\
|
|
+WARNING: \`$1' is $msg. You should only need it if
|
|
+ you modified \`acconfig.h' or \`${configure_ac}'. You might want
|
|
+ to install the \`Autoconf' and \`GNU m4' packages. Grab them
|
|
+ from any GNU archive site."
|
|
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
|
|
+ test -z "$files" && files="config.h"
|
|
+ touch_files=
|
|
+ for f in $files; do
|
|
+ case $f in
|
|
+ *:*) touch_files="$touch_files "`echo "$f" |
|
|
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
|
|
+ *) touch_files="$touch_files $f.in";;
|
|
+ esac
|
|
+ done
|
|
+ touch $touch_files
|
|
+ ;;
|
|
+
|
|
+ automake*)
|
|
+ echo 1>&2 "\
|
|
+WARNING: \`$1' is $msg. You should only need it if
|
|
+ you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
|
|
+ You might want to install the \`Automake' and \`Perl' packages.
|
|
+ Grab them from any GNU archive site."
|
|
+ find . -type f -name Makefile.am -print |
|
|
+ sed 's/\.am$/.in/' |
|
|
+ while read f; do touch "$f"; done
|
|
+ ;;
|
|
+
|
|
+ autom4te)
|
|
+ echo 1>&2 "\
|
|
+WARNING: \`$1' is needed, but is $msg.
|
|
+ You might have modified some files without having the
|
|
+ proper tools for further handling them.
|
|
+ You can get \`$1' as part of \`Autoconf' from any GNU
|
|
+ archive site."
|
|
+
|
|
+ file=`echo "$*" | sed -n "$sed_output"`
|
|
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
|
+ if test -f "$file"; then
|
|
+ touch $file
|
|
+ else
|
|
+ test -z "$file" || exec >$file
|
|
+ echo "#! /bin/sh"
|
|
+ echo "# Created by GNU Automake missing as a replacement of"
|
|
+ echo "# $ $@"
|
|
+ echo "exit 0"
|
|
+ chmod +x $file
|
|
+ exit 1
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ 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
|
|
+ in order for those modifications to take effect. You can get
|
|
+ \`Bison' from any GNU archive site."
|
|
+ rm -f y.tab.c y.tab.h
|
|
+ if test $# -ne 1; then
|
|
+ eval LASTARG="\${$#}"
|
|
+ case $LASTARG in
|
|
+ *.y)
|
|
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
|
|
+ if test -f "$SRCFILE"; then
|
|
+ cp "$SRCFILE" y.tab.c
|
|
+ fi
|
|
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
|
|
+ if test -f "$SRCFILE"; then
|
|
+ cp "$SRCFILE" y.tab.h
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ if test ! -f y.tab.h; then
|
|
+ echo >y.tab.h
|
|
+ fi
|
|
+ if test ! -f y.tab.c; then
|
|
+ echo 'main() { return 0; }' >y.tab.c
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ 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
|
|
+ in order for those modifications to take effect. You can get
|
|
+ \`Flex' from any GNU archive site."
|
|
+ rm -f lex.yy.c
|
|
+ if test $# -ne 1; then
|
|
+ eval LASTARG="\${$#}"
|
|
+ case $LASTARG in
|
|
+ *.l)
|
|
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
|
|
+ if test -f "$SRCFILE"; then
|
|
+ cp "$SRCFILE" lex.yy.c
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ if test ! -f lex.yy.c; then
|
|
+ echo 'main() { return 0; }' >lex.yy.c
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ 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
|
|
+ \`Help2man' package in order for those modifications to take
|
|
+ effect. You can get \`Help2man' from any GNU archive site."
|
|
+
|
|
+ file=`echo "$*" | sed -n "$sed_output"`
|
|
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
|
+ if test -f "$file"; then
|
|
+ touch $file
|
|
+ else
|
|
+ test -z "$file" || exec >$file
|
|
+ echo ".ab help2man is required to generate this page"
|
|
+ exit 1
|
|
+ fi
|
|
+ ;;
|
|
+
|
|
+ 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
|
|
+ indirectly affecting the aspect of the manual. The spurious
|
|
+ call might also be the consequence of using a buggy \`make' (AIX,
|
|
+ DU, IRIX). You might want to install the \`Texinfo' package or
|
|
+ the \`GNU make' package. Grab either from any GNU archive site."
|
|
+ # The file to touch is that specified with -o ...
|
|
+ file=`echo "$*" | sed -n "$sed_output"`
|
|
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
|
+ if test -z "$file"; then
|
|
+ # ... or it is the one specified with @setfilename ...
|
|
+ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
|
|
+ file=`sed -n '
|
|
+ /^@setfilename/{
|
|
+ s/.* \([^ ]*\) *$/\1/
|
|
+ p
|
|
+ q
|
|
+ }' $infile`
|
|
+ # ... or it is derived from the source name (dir/f.texi becomes f.info)
|
|
+ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
|
|
+ fi
|
|
+ # If the file does not exist, the user really needs makeinfo;
|
|
+ # let's fail without touching anything.
|
|
+ test -f $file || exit 1
|
|
+ touch $file
|
|
+ ;;
|
|
+
|
|
+ tar)
|
|
+ shift
|
|
+
|
|
+ # We have already tried tar in the generic part.
|
|
+ # Look for gnutar/gtar before invocation to avoid ugly error
|
|
+ # messages.
|
|
+ if (gnutar --version > /dev/null 2>&1); then
|
|
+ gnutar "$@" && exit 0
|
|
+ fi
|
|
+ if (gtar --version > /dev/null 2>&1); then
|
|
+ gtar "$@" && exit 0
|
|
+ fi
|
|
+ firstarg="$1"
|
|
+ if shift; then
|
|
+ case $firstarg in
|
|
+ *o*)
|
|
+ firstarg=`echo "$firstarg" | sed s/o//`
|
|
+ tar "$firstarg" "$@" && exit 0
|
|
+ ;;
|
|
+ esac
|
|
+ case $firstarg in
|
|
+ *h*)
|
|
+ firstarg=`echo "$firstarg" | sed s/h//`
|
|
+ tar "$firstarg" "$@" && exit 0
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+
|
|
+ echo 1>&2 "\
|
|
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
|
|
+ You may want to install GNU tar or Free paxutils, or check the
|
|
+ command line arguments."
|
|
+ exit 1
|
|
+ ;;
|
|
+
|
|
+ *)
|
|
+ echo 1>&2 "\
|
|
+WARNING: \`$1' is needed, and is $msg.
|
|
+ You might have modified some files without having the
|
|
+ proper tools for further handling them. Check the \`README' file,
|
|
+ it often tells you about the needed prerequisites for installing
|
|
+ this package. You may also peek at any GNU archive site, in case
|
|
+ some other package would contain this missing \`$1' program."
|
|
+ exit 1
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+exit 0
|
|
+
|
|
+# Local variables:
|
|
+# eval: (add-hook 'write-file-hooks 'time-stamp)
|
|
+# time-stamp-start: "scriptversion="
|
|
+# time-stamp-format: "%:y-%02m-%02d.%02H"
|
|
+# time-stamp-end: "$"
|
|
+# End:
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/README open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/README
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/README 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/README 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,224 @@
|
|
+Iscsiuio Userspace Tool
|
|
+Version 0.7.2.1
|
|
+Mar 05, 2012
|
|
+------------------------------------------------------
|
|
+
|
|
+This tool is to be used in conjunction with the Broadcom NetXtreme II Linux
|
|
+driver (Kernel module name: 'bnx2' and 'bnx2x'), Broadcom CNIC driver,
|
|
+and the Broadcom iSCSI driver (Kernel module name: 'bnx2i').
|
|
+This user space tool is used in conjunction with the following
|
|
+Broadcom Network Controllers:
|
|
+ bnx2: BCM5706, BCM5708, BCM5709 devices
|
|
+ bnx2x: BCM57710, BCM57711, BCM57711E, BCM57712, BCM57712E,
|
|
+ BCM57800, BCM57810, BCM57840 devices
|
|
+
|
|
+This utility will provide the ARP and DHCP functionality for the iSCSI offload.
|
|
+The communication to the driver is done via Userspace I/O (Kernel module name
|
|
+'uio').
|
|
+
|
|
+There is one component to this application:
|
|
+
|
|
+1. 'iscsiuio' - This is the daemon which aids in creating iSCSI offloaded
|
|
+ connections.
|
|
+
|
|
+Dependencies:
|
|
+=======================================
|
|
+
|
|
+Linux Kernel Dependencies:
|
|
+1. Broadcom CNIC driver (cnic)
|
|
+1. Broadcom iSCSI offload driver (bnx2i)
|
|
+2. Userspace I/O driver (uio)
|
|
+
|
|
+Directory Structure of this Package:
|
|
+=======================================
|
|
+
|
|
+<root>
|
|
+ |
|
|
+ +-doc (documentation directory: man pages)
|
|
+ |
|
|
+ +-src
|
|
+ |
|
|
+ +- uip - the uIP stack
|
|
+ |
|
|
+ +- unix - iscsiuio source
|
|
+
|
|
+
|
|
+
|
|
+Compiling / Installing
|
|
+=======================================
|
|
+
|
|
+1. Please untar the tarball.
|
|
+2. Run the configure script. This will create the Makefiles and proper
|
|
+ header files needed for the build.
|
|
+3. Run 'make'. This will create the binary, 'iscsiuio'
|
|
+4. Run 'make install' to place the binaries in their installed location.
|
|
+ (The default location is '/sbin')
|
|
+
|
|
+iscsid IFACE Configuration File:
|
|
+=======================================
|
|
+The network interface configuration files are driven by the iscsid iface
|
|
+files. The configuration data is parsed by iscsid and passed to the uIP
|
|
+stack when the connection is established.
|
|
+
|
|
+One can use the following iscsiadm commands to create/set the configuration
|
|
+using the iface files:
|
|
+
|
|
+1. Create the iface file:
|
|
+
|
|
+ iscsiadm -m iface -I <iface name> --op=new
|
|
+
|
|
+2. Discover the targets associated with the new iface
|
|
+
|
|
+ iscsiadm -m discovery -t st -p <iSCSI target IP address> -I <iface name>
|
|
+
|
|
+3. Update the iface file:
|
|
+
|
|
+ To use a static IPv4 address:
|
|
+ iscsiadm -m iface -I <iface name> --op=update --name=iface.ipaddress --value=<static IPv4 address ie: 192.168.0.1>
|
|
+
|
|
+ To use a DHCP address:
|
|
+ iscsiadm -m iface -I <iface name> --op=update --name=iface.ipaddress --value=0.0.0.0
|
|
+
|
|
+ The following values are required.
|
|
+
|
|
+ To specify the bnx2i as the transport:
|
|
+ iscsiadm -m iface -I <iface name> --op=update --name=iface.transport_name --value=bnx2i
|
|
+
|
|
+ To specify the network interface to offload with:
|
|
+
|
|
+ a. Specify the physical network interface name <ie. eth0, eth1, eth2 ...>
|
|
+ iscsiadm -m iface -I <iface name> --op=update --name=iface.net_ifacename --value=<network interface name>
|
|
+
|
|
+ b. Specify the iSCSI MAC address of the iSCSI HBA
|
|
+ iscsiadm -m iface -I <iface name> --op=update --name=iface.hwaddress --value=<MAC address of the iSCSI HBA>
|
|
+
|
|
+4. Now all the settings should be set so that one could connect to their
|
|
+ desired iSCSI target.
|
|
+
|
|
+ iscsiadm -m node -p <iSCSI target IP address> -T <target name> -I <iface name> --login
|
|
+
|
|
+bnx2 Limitations:
|
|
+=======================================
|
|
+* RX iSCSI ring:
|
|
+ * default ring size is 3 entries
|
|
+ * default buffer size is 0x400 bytes
|
|
+* TX iSCSI ring:
|
|
+ * default ring size of 1 entry
|
|
+ * default buffer size is 0x400 bytes
|
|
+
|
|
+bnx2x Limitations:
|
|
+=======================================
|
|
+* RX iSCSI ring:
|
|
+ * default ring size is 15 entries
|
|
+ * default buffer size is 0x400 bytes
|
|
+* TX iSCSI ring:
|
|
+ * default ring size of 1 entry
|
|
+ * default buffer size is 0x400 bytes
|
|
+
|
|
+Other Limiations:
|
|
+
|
|
+Any packets larger then the buffer size will not be sent/received by the
|
|
+hardware and will be dropped.
|
|
+
|
|
+IPv6 support:
|
|
+
|
|
+IPv6 NDP (neighbor discovery protocol), DHCPv6 and Static IPv6 are now
|
|
+supported. The IPv6 address used for the connection will be matched against
|
|
+the DHCPv6/static IPv6 address, the RA (router advertise) address, and the
|
|
+assigned link local address.
|
|
+
|
|
+VLAN support:
|
|
+
|
|
+VLAN support is only supported when using static IP addresses.
|
|
+Also, currently only 1 VLAN is supported per physical network interface.
|
|
+Either non-VLAN offloaded traffic is allowed or VLAN offloaded traffic
|
|
+is allowed. The current implementation does not support both at the
|
|
+same time.
|
|
+
|
|
+Currently there is no explicit VLAN attributes in the iface file.
|
|
+To configure the VLAN offload, the iface.hwaddress attribute or
|
|
+physical net_ifacename (without the VLAN identifier) must be used
|
|
+to specify the HBA device. For the proper CNIC routing, the
|
|
+corresponding L2 interface which has the associated VLAN interface must
|
|
+have an IP address on the same subnet.
|
|
+
|
|
+The following attributes need to be filled when offloading via the
|
|
+VLAN interface:
|
|
+
|
|
+ iface.iscsi_ifacename = <name of this iface file>
|
|
+ iface.hwaddress = XX:XX:XX:XX:XX:XX
|
|
+ iface.ipaddress = XX.XX.XX.XX
|
|
+ iface.transport_name = bnx2i
|
|
+
|
|
+Setting IP address:
|
|
+
|
|
+On RHEL5.4, RHEL5.5+, RHEL6.0+, and SLES11SP1 distributions,
|
|
+discovery login is done over the Linux TCP/IP stack and L2 network
|
|
+interface. The ethx interface corresponding to the HBA must
|
|
+therefore be in the same IP subnet in order to reach the iSCSI
|
|
+target during discovery. However, the HBA's IP address should not
|
|
+be the same as the L2 ethx's IP address.
|
|
+
|
|
+Starting with RHEL6.1 and all other newer distributions, discovery
|
|
+using SendTargets is done over the HBA interface, so there is no
|
|
+need for the HBA and L2 network to be on the same subnet. However,
|
|
+if VLAN is used on the HBA, they still have to be on the same subnet
|
|
+as described above.
|
|
+
|
|
+
|
|
+Setting Netmask and Gateway addresses:
|
|
+
|
|
+With the current limitations of the iface file, there are no entries
|
|
+to allow the user to enter a netmask or gateway IP address.
|
|
+
|
|
+The only way to explicitly configure these options is to use DHCP
|
|
+addressing. Then the netmask/gateway are set on the DHCP server.
|
|
+These settings are then sent to uIP via the DHCPOFFERs.
|
|
+
|
|
+If the netmask is not defined then the netmask are automatically
|
|
+generated depending on the destination IP address.
|
|
+
|
|
+Debugging:
|
|
+=======================================
|
|
+
|
|
+By default, the iscsiuio daemon does not output any messages to the log file,
|
|
+'/var/log/iscsiuio.log'. Message logging is only enabled when the daemon is
|
|
+run under debug mode.
|
|
+
|
|
+To run the daemon in debug mode please pass the parameter '-d <debug level>'
|
|
+
|
|
+where the following debug levels are defined:
|
|
+
|
|
+DEBUG 4 - Print all messages
|
|
+INFO 3 - Print messages needed to follow the uIP code (default)
|
|
+WARN 2 - Print warning messages
|
|
+ERROR 1 - Only print critical errors
|
|
+
|
|
+A sample banner message:
|
|
+
|
|
+INFO [Mon Jun 20 11:23:14 2011]Started iSCSI uio stack: Ver 0.7.0.6
|
|
+INFO [Mon Jun 20 11:23:14 2011]Build date: Mon Jun 20 11:22:05 PDT 2011
|
|
+INFO [Mon Jun 20 11:23:14 2011]Debug mode enabled
|
|
+
|
|
+These messages can be used to help debug any issues.
|
|
+
|
|
+When debugging issues like the iscsid, the iscsiuio daemon can be run
|
|
+in the foreground and the maximum debugging level should be used.
|
|
+
|
|
+To place the daemon in foreground mode please pass the parameter '-f'
|
|
+
|
|
+Note: The messages to the log file are not flushed unless debugging is enabled.
|
|
+
|
|
+Note: If the daemon iscsiuio is running, one will not be able to
|
|
+ trample over the existing binary. One might see the following message:
|
|
+
|
|
+ 'cannot create regular file `/sbin/iscsiuio': Text file busy'
|
|
+
|
|
+ The solve this, please stop the iscsid service and then install.
|
|
+
|
|
+Warning: If full debug is enabled, this may quickly fill the partition
|
|
+containing the iscsiuio logs. This is because full debugging will log
|
|
+packet activity which on a busy network will quickly fill the logs.
|
|
+
|
|
+Note: If the bnx2i and cnic drivers are unloaded, then iscsiuio will also
|
|
+need to be restarted so that it can determine the iscsid version.
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/RELEASE.TXT open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/RELEASE.TXT
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/RELEASE.TXT 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/RELEASE.TXT 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,1545 @@
|
|
+ Release Notes
|
|
+ Broadcom uIP Linux Driver
|
|
+ Version 0.7.2.1
|
|
+ 03/05/2012
|
|
+
|
|
+ Broadcom Corporation
|
|
+ 5300 California Avenue,
|
|
+ Irvine, CA 92617
|
|
+
|
|
+ Copyright (c) 2004 - 2012 Broadcom Corporation
|
|
+ All rights reserved
|
|
+
|
|
+uIP v0.7.2.1 (Mar 05, 2012)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Cont00060368 - segfault observed after failing both
|
|
+ mpio paths
|
|
+ Change: Various memory leaks were identified and resolved in
|
|
+ the nic cleanup path
|
|
+ Impact: All
|
|
+
|
|
+ 2. Problem: Cont00060734 - ifupdown-mtu change stress with active
|
|
+ session causes iscsiuio to fail
|
|
+ Change: Fixed a race condition between the nic enable thread
|
|
+ and when DHCP fails
|
|
+ Impact: All
|
|
+
|
|
+ 3. Problem: Cont00061459 - MC assert observed when logging into
|
|
+ iSCSI target (NPAR BW change)
|
|
+ Cause: The if_down message from one NIC was flushed upon
|
|
+ the reception of another if_down message from another
|
|
+ NIC
|
|
+ Change: Fixed the if_down handling on the global netlink queue
|
|
+ flush.
|
|
+ Impact: All
|
|
+
|
|
+ 4. Problem: Cont00061708 - Unable to log into target after running
|
|
+ driver load/unload
|
|
+ Cause: A bug was introduced in the previous bug fix (CQ61459)
|
|
+ where a pthread_cond_broadcast call was erroneously
|
|
+ enabled
|
|
+ Change: Restored this back
|
|
+ Impact: All
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+ 1. Change: Default iscsiuio logging to off. Use the '-d'
|
|
+ option to enable
|
|
+ 2. Change: Disable HP SD mode
|
|
+ 3. Change: Updated README
|
|
+
|
|
+
|
|
+uIP v0.7.0.14 (Oct 25, 2011)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Cont00057840 - RHEL6.2 inbox: Unable to connect to
|
|
+ targets with 5709
|
|
+ Cause: For cases when the bnx2/bnx2x driver gets removed, the
|
|
+ uio database that was built by cnic would have the device
|
|
+ ->net reference removed. This has caused an unnecessary
|
|
+ timeout of 5s for each stale uio entry in the database.
|
|
+ Change: Adjusted the routine which seeks the device->net entry
|
|
+ to include more logic instead of hard waiting for 5s.
|
|
+
|
|
+ 2. Problem: Cont00058256 - Sessions fail after loginstress to via
|
|
+ simultaneous ipv4 and ipv6 dhcp
|
|
+ Cause: Switching between DHCPv4/v6 coupled with VLAN exposed
|
|
+ a drawback in our nic_iface architecture design where
|
|
+ VLAN is not specified by iscsid.
|
|
+ Change: The code was optimized and improved the performance when
|
|
+ switching between DHCPv4/v6+VLAN. However, the ultimate
|
|
+ fix is to make use of the net config parameters introduced
|
|
+ in the newer open-iscsi util which will identify the
|
|
+ specific VLAN nic_iface to use.
|
|
+
|
|
+ 3. Problem: Cont00058602 - Can't iboot using IPv6 offload path
|
|
+ Cause: The bug was exposed by a fix in 0.7.0.14c where the
|
|
+ IPv6 router solicitation timeout exceeded the nic
|
|
+ enable thread timeout.
|
|
+ Change: The IPv6 router solicitation timeout has been adjusted
|
|
+
|
|
+ 4. Problem: Cont00058678 - Can not iboot target from ipv6 path
|
|
+ using VLAN
|
|
+ Cause: A bug was found in the path request path where the vlan
|
|
+ iface's protocol family was not used correctly in the
|
|
+ iface search
|
|
+ Change: This has been corrected
|
|
+
|
|
+ 5. Problem: Cont00058994 - DOS vulnerability in uip during UDP flood
|
|
+ Cause: The warning messages from the UDP handler was logging
|
|
+ at a rate faster than the log file logrotate rate
|
|
+ Therefore, the system's OOM eventually got kicked in to
|
|
+ start terminating running processes which includes iscsiuio
|
|
+ Change: Moved several UDP warning messages from the default log
|
|
+ level to the debug log level
|
|
+ Impact: All (minor)
|
|
+
|
|
+ 6. Problem: Cont00059288 - Show segfault w/ Xen kernel
|
|
+ Cause: The bnx2x chip_id was not read correctly from the PCIe BAR1
|
|
+ under the Xen kernel. The error was in the mmap area.
|
|
+ Change: Corrected the mmapping of the PCI MMIO space.
|
|
+ Impact: Xen kernels
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+ 1. Change: Added support for RHEL6.2 for out-of-box release
|
|
+ 2. Change: Updated the man page with -h and -p info
|
|
+ 3. Change: Updated the -h info
|
|
+ 4. Change: Added support for bnx2x-1.71.00
|
|
+ 5. Change: Changed the log file open error to a warning and let
|
|
+ the daemon progress
|
|
+ 6. Change: Added oom_adjust call to prevent OOM Killer from killing
|
|
+ iscsiuio when memory is low
|
|
+ 7. Change: Added mlockall setting to prevent page swap
|
|
+
|
|
+
|
|
+uIP v0.7.0.13 (Aug 10, 2011)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Cont00057768 - iscsiuio logrotate causes daemon failure
|
|
+ Cause: The logrotate script will send a SIGUSR1 signal to notify
|
|
+ the iscsiuio daemon of such action. However, the daemon
|
|
+ wasn't programmed to catch this signal.
|
|
+ Change: Restored the catching of this signal
|
|
+
|
|
+
|
|
+uIP v0.7.0.12 (Aug 04, 2011)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Cont00050634 - brcm_iscsiuio Tainted: running IoZone,
|
|
+ Iometer and receiving a UDP flood on 3260
|
|
+ Cause: Upon iscsiuio termination, because of the UDP flood,
|
|
+ the nic thread will be busy servicing those UDP packets
|
|
+ while the signal handling thread will free up all nic
|
|
+ resources. The two threads were not in sync.
|
|
+ Change: Added a nic_remove_all routine to destroy all nic threads
|
|
+ before the nic resources get freed.
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+ 1. Change: Fixed all warnings as reported by RHELS' Coverity testing.
|
|
+
|
|
+
|
|
+uIP v0.7.0.11 (Aug 02, 2011)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Erroneous VLAN tag was being passed by iscsid for connect
|
|
+ request
|
|
+ Cause: The iscsid's iface_rec_t ipc message does not contain this
|
|
+ vlan field. This field was added in uIP for future vlan
|
|
+ support. Since the buffer allocated to receive such message
|
|
+ in uIP didn't get initialized, therefore, garbled up VLAN
|
|
+ tag was getting used.
|
|
+ Change: Added the initialization of this buffer.
|
|
+
|
|
+
|
|
+uIP v0.7.0.10 (Jul 26, 2011)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Can't offload when switching from Static to DHCP then back to
|
|
+ Static IPv4 when connecting through a VLAN interface
|
|
+ Cause: The VLAN processing code did not reinstall the IP address
|
|
+ from the default nic_iface to the associated VLAN nic_iface.
|
|
+ This was only done on the very first time when the VLAN
|
|
+ interface was created and not on subsequent instances.
|
|
+ Change: Added code to mirror the default nic_iface IP/netmask/ip_config
|
|
+ on the VLAN nic_iface on every new connection request.
|
|
+
|
|
+
|
|
+uIP v0.7.0.9 (Jul 19, 2011)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Can't offload to 57810 NPAR NIC
|
|
+ Cause: The MF/VF variant of the PCI IDs were not supported previously
|
|
+ Change: Added support for the MF/VF variants for 57800/57810/57840
|
|
+
|
|
+
|
|
+uIP v0.7.0.8 (Jun 30, 2011)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Cont00056522 - Unable to connect to iSCSI target using
|
|
+ netxtreme2 package 7.0.9
|
|
+ Cause: The iSCSI L2 ring's CID has changed from 17 to 49
|
|
+ Change: The code now gets L2 iSCSI ring CID from the l2_buf directly.
|
|
+ This will work with any version of the cnic driver because
|
|
+ the location is a zero before this change.
|
|
+
|
|
+
|
|
+uIP v0.7.0.7 (Jun 23, 2011)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Cont00056460 - iSCSI Offload boot RHEL5u5 x64 dropped tagged
|
|
+ packets with iSCSI Offload Boot with untagged
|
|
+ Cause: The ICMP echo replies to the target was corrupted in both
|
|
+ 1g and 10g mode
|
|
+ Change: The code will now handle both VLAN stripped and no VLAN stripped
|
|
+ incoming packets correctly. Also modified the transmit routine
|
|
+ to strip out any inline VLAN tag before setting up the hw to
|
|
+ insert VLAN tag.
|
|
+
|
|
+
|
|
+uIP v0.7.0.6 (Jun 21, 2011)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Cont00056231 - DHCPv4 not working with iSCSI HBA w/
|
|
+ linux-nx2 v7.0.7
|
|
+ Cause: The 10g L2 FW HSI has been modified for PCIe performance
|
|
+ enhancement in the 7.0.7 package (FW 1.70.20) which uIP
|
|
+ has not adapted to.
|
|
+ Change: The eth_rx_cqe size has been increased from 32B to 64B.
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+ 1. Change: The utility name has changed from brcm_iscsiuio to iscsiuio
|
|
+ as preparation for upstream submission.
|
|
+ 2. Change: Updated README
|
|
+
|
|
+
|
|
+uIP v0.7.0.5 (Jun 02, 2011)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Cont00055915 - iSCSI does not connect on 57800 in 4-port mode
|
|
+ Cause: The 4-port mode was not being determined correctly
|
|
+ Change: Fixed the PORT4MODE register offset and the QZONE_ID macros
|
|
+
|
|
+
|
|
+uIP v0.7.0.4 (May 24, 2011)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Cont00055832 - linux iscsiboot can not login to target using
|
|
+ offload path (57800)
|
|
+ Cause: The device ID comparison routine did not take care of the case
|
|
+ when one device ID is bitwise superset of another.
|
|
+ Change: Fixed the device ID comparison routine.
|
|
+
|
|
+
|
|
+uIP v0.7.0.3 (May. 19, 2011)
|
|
+=======================================================
|
|
+ Enhancements
|
|
+ ------------
|
|
+ 1. Change: Updated all fixes to match the released uIP 0.6.4.17
|
|
+
|
|
+ 2. Change: Modified source and Copyright info as preparation for upstream
|
|
+ submission
|
|
+
|
|
+
|
|
+uIP v0.7.0.2 (May. 03, 2011)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Cont00048972 - brcm-iscsi.log has no max size and would grow
|
|
+ to consume all free space on hard disk
|
|
+ Cause: There was no mechanism to rotate the log
|
|
+ Change: Added logrotate entry and SIGUSR1 signal handling for log rotate
|
|
+ action
|
|
+
|
|
+ 2. Problem: Cont00054996 - Multi-session, multi-protocol mtu stress
|
|
+ does not recover all sessions
|
|
+ Cause: A segfault was observed during the load/unload module. The
|
|
+ problem was caused by an illegal dereference of a pointer
|
|
+ when IPv6 couldn't find the longest match address from
|
|
+ the ARP (Neighbor) table.
|
|
+ Change: Fixed the dereferencing error
|
|
+
|
|
+ 3. Problem: Cont00054900 - Linux uIP - Please add ability to connect
|
|
+ to routed target with static iface IPv6
|
|
+ Cause: Static IPv6 never runs the IPv6 NDP router sol/adv engine.
|
|
+ Change: IPv6 NDP router sol/adv has now been added to static IPv6
|
|
+ operation.
|
|
+
|
|
+ 4. Problem: Cont00054996 - Multi-session, multi-protocol mtu stress
|
|
+ does not recover all sessions
|
|
+ Cause: Segfaults were observed caused by the accessing of the IPv6
|
|
+ NDP structure while the nic is undergoing a reset either
|
|
+ due to a DHCPv4 request from iscsid or the handling of
|
|
+ if_down due to the NL handler from CNIC.
|
|
+ Change: The fix involves the following:
|
|
+ - Fixed the handling of staggered IPv4/v6 DHCP/static requests
|
|
+ - Fixed memory leak due to reallocation of IPv4 and IPv6
|
|
+ DHCP structs
|
|
+ - Fixed the pthread join stuck problem in the handling
|
|
+ of the if_down NL message
|
|
+
|
|
+ 5. Problem: Cont00054810 - Linux NMI - bnx2x_init_hw_common:PXP2 CFG
|
|
+ failed running iSCSI MTU stress test
|
|
+ Cause: This only happens in DHCPv4 mode. The problem was caused
|
|
+ by contention between the elongated window of performing
|
|
+ DHCP in the enable_nic thread while receiving the asynchronous
|
|
+ if_down NL message (from the MTU change event) from the
|
|
+ CNIC NL thread. The problem occurs when the enable_nic
|
|
+ thread tries to call bnx2x_open while the other thread
|
|
+ calls the bnx2x_close routine.
|
|
+ Change: Fixed mutex lock bugs for the enable_nic thread. Also
|
|
+ extended the nic_disable timeout to 10s to compensate for
|
|
+ the DHCP operation.
|
|
+
|
|
+ 6. Problem: Cont00054818 - RH6.0 - Unable to logout of iSCSI session
|
|
+ after running PQA baseline scripts
|
|
+ Cause: This was caused by the call to cancel the enable_nic
|
|
+ thread when disabling the nic but failed to unlock the
|
|
+ nic mutex that the enable_nic thread held.
|
|
+ Change: Wake up the enable_nic thread and wait for it to complete
|
|
+ instead of canceling it in the nic_disable path.
|
|
+
|
|
+ 7. Problem: Cont00054725 - Previous static HBA IP will be used after
|
|
+ a new static HBA IP has been created
|
|
+ Cause: There was an assumption in the code where if the same
|
|
+ nic_iface structure was found based on the nic/vlan pair,
|
|
+ the specified IP address would not be used. Instead, it
|
|
+ will continue to use the previous defined IP address.
|
|
+ Change: The previous IP address will now be compared against the
|
|
+ the specified IP address before finishing the parce
|
|
+ iface request from iscsid. If different, the current
|
|
+ nic will be disabled and then re-enabled with the newly
|
|
+ specified IP address.
|
|
+
|
|
+ 8. Problem: Cont00054571 - Unable to connect to routed ipv6 target
|
|
+ with RA address and iface DHCPv6
|
|
+ Cause: The default router address was not being employed for
|
|
+ the IPv6 neighbor negotiation. Additionally, the return
|
|
+ address of our neighbor advertisement was incorrect as
|
|
+ it should use the best matched src address instead.
|
|
+ Change: Fixed both the IPv6 neighbor solicitation and advertisement
|
|
+ transmission and handling.
|
|
+
|
|
+ 9. Problem: Cont00054510 - fails to login to 32 session with blanket
|
|
+ login IPv6
|
|
+ Cause: A bug was introduced in uIP 0.6.4.6 where the NIC_RUNNING
|
|
+ flag might not be set when entering the main loop under
|
|
+ certain situations depending on the nic bring up.
|
|
+ Change: A new NIC_STARTED_RUNNING flag is now defined to fix CQ53511.
|
|
+
|
|
+ 10. Problem: Cont00053807 - RA and link local are unable to connect if DHCPv6
|
|
+ fails
|
|
+ Cause: The host link local address was not being searched as one of
|
|
+ the host address to be replied to CNIC for the connect request.
|
|
+ Change: The path reply now includes the search of host link local
|
|
+ address as well.
|
|
+
|
|
+ 11. Problem: Cont00054236 - iSCSI service must be restarted before an IPv6
|
|
+ connection can be made to the Equalogic target
|
|
+ Cause: The problem was intermittent as it depends on which IPv6 address
|
|
+ the target was redirecting to. Since uIP was only extracting
|
|
+ the target's IPv6 address + MAC from the target's neighbor
|
|
+ advertisement packet itself and not from the ICMPv6 option, so
|
|
+ the wrong or no MAC address will get send down to CNIC for the
|
|
+ connection establishment; hence the no connect.
|
|
+ Change: Added the updating of the neighbor discovery table to also use
|
|
+ the Target IPv6 address + MAC specified in the incoming neighbor
|
|
+ advertisement's ICMPv6 option field.
|
|
+
|
|
+ 12. Problem: Cont00053255 - bnx2x panic dump logging into multiple
|
|
+ discovered IPv6 nodes (Equalogic IPv6 target)
|
|
+ Cause: The bnx2x panic was fixed in the 10g fw 6.4.29.
|
|
+ A IPv6 connectivity issue was then found and led to different
|
|
+ kernel/uIP crashes. This was caused by the same IPv6
|
|
+ connectivity problem mentioned above.
|
|
+ Change: Same as above
|
|
+
|
|
+ 13. Problem: Cont00053728 - Sessions never recover after doing initiator-side
|
|
+ cable pull test with IPv6 traffic against Equalogic targets
|
|
+ Cause: It was discovered that the Equalogic would send out periodic
|
|
+ neighbor solicitation to maintain the connection to the
|
|
+ initiator. Since uIP was responding with the assigned IPv6
|
|
+ link local address in the neighbor advertisement
|
|
+ unconditionally, the target was observed to stop transmitting on
|
|
+ the connection specified.
|
|
+ Change: The neighbor advertisement generated will now use the dst IPv6
|
|
+ address from the input neighbor solicitation packet instead of
|
|
+ the assigned IPv6 link local address for both the packet and the
|
|
+ ICMPv6 source IPv6 address.
|
|
+
|
|
+ 14. Problem: Compile error under 32-bit OS
|
|
+ Cause: A bug was introduced in the previous release 0.6.4.6 which
|
|
+ caused a compilation error in 32-bit OS (64-bit compiles
|
|
+ fine)
|
|
+ Change: Fixed the bug
|
|
+
|
|
+ 15. Problem: Cont00053807 - RA and Link local are unable to connect if dhcpv6
|
|
+ fails
|
|
+ Cause: There was a bug in the nl reply where the RA address will never
|
|
+ be sent back to CNIC for the connection request
|
|
+ Change: The best matched address to the dst will now be sent back to
|
|
+ CNIC in the path rsp.
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+ 1. Change: Updated README to remove the 57713/E references
|
|
+
|
|
+ 2. Change: Allow the ICMP option field in the IPv6 Neighbor Advertisement
|
|
+ response to be included without discrimination. This fixes
|
|
+ an issue connecting against the EQL via RA for DHCPv6.
|
|
+
|
|
+ 3. Change: Updated README for the IPv6 operation, VLAN, and discovery.
|
|
+
|
|
+
|
|
+uIP v0.7.0.1 (Mar. 29, 2011)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Cont00053511 - bnx2x panic dump during ifup/down stress with
|
|
+ iSCSI traffic
|
|
+ Cause: The panic dump was resolved by the driver's rq dbell size fix.
|
|
+ After that, uIP crashed due to the asynchronous if_down event
|
|
+ that took the chip resources away while the nic thread is still
|
|
+ continuing to try to send DHCP request.
|
|
+ Change: Added synchronization between the two threads so proper clean up
|
|
+ of the threads can occur.
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+ 1. Change: Added support for E3 (57800, 57810, and 57840)
|
|
+
|
|
+
|
|
+uIP v0.6.4.5 (Mar. 23, 2011)
|
|
+=======================================================
|
|
+ Enhancements
|
|
+ ------------
|
|
+ 1. Change: Optimized the double VLAN fix of CQ53870 to match
|
|
+ what will be submitted for RHELS5.7 and RHELS6.1 inbox
|
|
+
|
|
+
|
|
+uIP v0.6.4.4 (Mar. 17, 2011)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Cont00053870 - Unable to login to iSCSI target via offload
|
|
+ through a Nexus 5020 switch with DCBx enabled
|
|
+ Cause: Double VLAN tagging was observed due to DCBx enabled.
|
|
+ The chip actually adds a VLAN tag if the txbd does not have
|
|
+ VLAN tag enabled under the DCBx environment for PRI setting.
|
|
+ Since uIP does not make use of hw assisted VLAN tagging,
|
|
+ 2 VLAN tag was observed in the data stream.
|
|
+ Change: Enabled hw assisted VLAN tagging in uIP for both 1g and 10g.
|
|
+
|
|
+ 2. Problem: Cont00053792 - maxconnections intermittently fail and
|
|
+ recover using iface DHCPv4
|
|
+ Cause: The DHCPv4 engine erroneously keeps on requesting for a
|
|
+ new lease which tremendously hamper normal path_req
|
|
+ operation. The problem is that the lease time parameter
|
|
+ has overflowed when converted to ticks count.
|
|
+ Change: Expanded the lease timer ticks count parameter from 16 to
|
|
+ 32 bits.
|
|
+
|
|
+ 3. Problem: Cont00053807 - RA and link local are unable to connect if
|
|
+ DHCPv6 fails
|
|
+ Cause: The DHCPv6 engine does not have the failover to use RA
|
|
+ mechanism
|
|
+ Change: Expanded to use best match address instead regardless of
|
|
+ DHCPv6 success or not, or using static v6.
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+ 1. Change: Cont00051823 - Added man page for brcm_iscsiuio
|
|
+
|
|
+
|
|
+uIP v0.6.4.3 (Mar. 15, 2011)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Cont00053719 - intermittent logging into targets that
|
|
+ are not in the same subnet as defined in the iface
|
|
+ Cause: The default route was used erroneously due to a miscompare
|
|
+ Change: Fixed this comparison so if the requested dst is not in
|
|
+ in the same subnet, uIP would not even ARP out.
|
|
+
|
|
+ 2. Problem: Cont00053580 - Unable to do iSCSI boot into Linux OS using
|
|
+ 57710 adapters
|
|
+ Cause: The E1 iro USTORM_RX_PROD_OFFSET doesn't match the t6.4 fw
|
|
+ Change: This is now fixed
|
|
+
|
|
+
|
|
+uIP v0.6.4.2 (Feb. 24, 2011)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Cont00050343 - HBA does not follow RFC2131 spec for IPv4
|
|
+ DHCP lease expiration
|
|
+ Cause: The dhcp engine did not have this feature implemented
|
|
+ Change: Added lease time tracking and renewal
|
|
+
|
|
+ 2. Problem: Cont00050801 - Unable to connect to target after switching
|
|
+ between DHCPv4 to static v4
|
|
+ Cause: The configuration flags got corrupted when switching between
|
|
+ dhcp and static or vice versa.
|
|
+ Change: Fixed the flag handling. Also needed to zero out the static
|
|
+ ip address in the host memory when switching to dhcp.
|
|
+ Otherwise, the static ip address will get used mistakenly.
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+ 1. Change: Cont00051936 - Added IPv6 NDP and DHCPv6 support.
|
|
+
|
|
+
|
|
+uIP v0.6.4.1 (Jan. 27, 2011)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Cont00049766 - segfault seen while stopping iscsi service
|
|
+ Cause: The logger output routine was accessing the log resource
|
|
+ while another thread calls fini_logger to free the same
|
|
+ resources
|
|
+ Change: Added pthread mutex lock to the logger routine to exclude
|
|
+ the initializer, user, and finisher
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+ 1. Change: Added new t6.4 HSI and 57713 support.
|
|
+
|
|
+
|
|
+uIP v0.6.2.13 (Jan. 04, 2011)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Cont00049665 - iscsiboot:linux failed to boot into iscsi
|
|
+ boot image in offload path after 5 iterations
|
|
+ Cause: The hw consumer index for the uIP ring got out of sync
|
|
+ with the producer index. This has led to the xmit mutex
|
|
+ lock be held forever so subsequent ARP requests will not
|
|
+ get transmitted to the wire
|
|
+ Change: Added this out of sync detection and rescue the xmit mutex
|
|
+ lock
|
|
+
|
|
+uIP v0.6.2.12 (Dec. 21, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Cont00051820 - Session fails to reconnect after gateway
|
|
+ fallback
|
|
+ Cause: Under the HSRP test scenario, it was found that an ARP
|
|
+ request from the SUT is required in order for the HSRP
|
|
+ router to begin sending packets downstream to the SUT.
|
|
+ The default ARP age was originally set to 20 minutes
|
|
+ before a new ARP request will get sent,
|
|
+ Change: Changed the ARP age default to Linux default at 5 minutes
|
|
+
|
|
+uIP v0.6.2.11 (Dec. 17, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: For IPv4, the gateway route was not being utilized
|
|
+ when the subnet mask given or calculated does not
|
|
+ match. This resulted in many unwanted connection
|
|
+ attempts.
|
|
+ Cause: A bug was found in the default gateway calculation
|
|
+ logic which prevented the gateway address from being
|
|
+ used.
|
|
+ Change: Fixed the default gateway logic
|
|
+
|
|
+ 2. Problem: For IPv6, there are scenarios where it won't connect
|
|
+ Cause: The IPv6 subnet mask as extracted from the CIDR
|
|
+ format might contain garbage data. This garbage data
|
|
+ was then used as part of the subnet mask which would
|
|
+ prevent the correct address mask.
|
|
+ Change: Fixed the subnet mask
|
|
+
|
|
+uIP v0.6.2.10 (Dec. 15, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: IPv6 does not connect for non-CIDR iface.ipaddress
|
|
+ specification
|
|
+ Cause: A bug where all ones was used as the IPv6 netmask
|
|
+ instead of all zeroes. This prevented all IPv6
|
|
+ path requests from being honored
|
|
+ Change: Fixed the subnet mask used
|
|
+
|
|
+uIP v0.6.2.9 (Dec. 14, 2010)
|
|
+=======================================================
|
|
+ Enhancements
|
|
+ ------------
|
|
+ 1. Change: Added IP address CIDR notation support for the
|
|
+ iface.ipaddress field in the iface file.
|
|
+ This will allow subnet mask to be defined and used.
|
|
+
|
|
+uIP v0.6.2.8 (Dec. 9, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: ipv6 + ifup/down fails to reconnect
|
|
+
|
|
+ Cause: There were 2 problems found:
|
|
+ - the xmit_mutex lock was being held indefinitely
|
|
+ - the nl_process_if_down flag for 10g doorbell ringing
|
|
+ did not get reinitialized
|
|
+
|
|
+ Change: Fixed the xmit_mutex deadlock via trylock
|
|
+ Added nl_process_if_down initialization in the IF_DOWN
|
|
+ process
|
|
+
|
|
+ 2. Problem: Added fix for the NPAR disabled for 57712
|
|
+
|
|
+ Cause: The mac address was not handled correctly
|
|
+
|
|
+ Change: Fixed the mac address handling. Also requires corresponding
|
|
+ kernel component for the complete fix
|
|
+
|
|
+uIP v0.6.2.7 (Dec. 7, 2010)
|
|
+=======================================================
|
|
+ Enhancements
|
|
+ ------------
|
|
+ 1. Change: Use the gateway address from the DHCP server the
|
|
+ destination IP address is not in the current subnet.
|
|
+
|
|
+uIP v0.6.2.6 (Nov. 16, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Warning message seen in the kernel logs,
|
|
+ "uio uio2: uevent: unsupported action string"
|
|
+
|
|
+ Cause: The improper string was echo'ed into the UIO trigger
|
|
+ field. With an improper string, this message would
|
|
+ appear in the kernel logs.
|
|
+
|
|
+ Change: uIP will now write the string "online" to the UIO
|
|
+ trigger field. This is the string expected by the
|
|
+ Linux kernel base driver.
|
|
+
|
|
+ 2. Problem: uIP would segfault during a heavily login/logout
|
|
+ iSCSI subsystem reset senario
|
|
+
|
|
+ Cause: A double free occurred in the logging portion of the
|
|
+ uIP code, but this was root cause to a double free when
|
|
+ manipulating the NetLink buffers.
|
|
+
|
|
+ Change: Properly look at the return code from the routine which
|
|
+ will read NetLink messages. Also only free buffers
|
|
+ if they are allocated.
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+ 1. Change: Add ability to print kernel version and machine
|
|
+ architecture to further help debug problems.
|
|
+
|
|
+ 2. Change: Apply the netmask from DHCP if provided.
|
|
+
|
|
+uIP v0.6.2.5 (Nov. 10, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: iscsid would try to conenct with unintended iSCSI
|
|
+ targets
|
|
+
|
|
+ Cause: uIP would blindly return the iSCSI target MAC address
|
|
+ regardless if the iSCSI target is reachable via the
|
|
+ given port.
|
|
+
|
|
+ Change: uIP will try to filter the requests coming from CNIC
|
|
+ by automatically generating a network mask based off
|
|
+ the configured IP addressed. Then this netmask is
|
|
+ masked with the destination IP address. If there is
|
|
+ a match, then the path_req is allowed through.
|
|
+
|
|
+ 2. Problem: Problems reconnecting back to the target when running
|
|
+ MTU stress tests.
|
|
+
|
|
+ Cause: cnic/bnx2i and uIP could possibly get out of sync when
|
|
+ an if_down message is sent.
|
|
+
|
|
+ Change: uIP will now immediately react to the if_down message,
|
|
+ and flush all the path req's and then to process to
|
|
+ if_close.
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+ 1. Change: Fix compile warnings for src/unix/nic_nl.c,
|
|
+ and src/unix/main.c
|
|
+
|
|
+uIP v0.6.2.4 (Nov. 4, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: iSCSI HBA: brcm_iscsiuio segfault during ifdown
|
|
+ with many active sessions
|
|
+
|
|
+ Cause: uIP will segfault when traversing the error path when
|
|
+ an iSCSI connection is starting but the sysfs entries
|
|
+ have not been created yet.
|
|
+
|
|
+ Change: Use the errno value rather then the one from the file
|
|
+ descriptor because the file descriptor will be NULL and
|
|
+ the NULL dereference will cause a segfault.
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+ 1. Change: Added initial changes for iSCSI multi-function support for
|
|
+ 10G NIC's.
|
|
+ 2. Change: Add more detailed messages for error pathes in nic_utils
|
|
+
|
|
+uIP v0.6.2.3 (October 28, 2010)
|
|
+=======================================================
|
|
+ Enhancements
|
|
+ ------------
|
|
+ 1. Change: Add support for bnx2x-1.62.x drivers
|
|
+
|
|
+uIP v0.6.2.2 (October 18, 2010)
|
|
+=======================================================
|
|
+ Enhancements
|
|
+ ------------
|
|
+ 1. Change: Only allow iSCSI connections with known bnx2x HSI's.
|
|
+
|
|
+uIP v0.6.2.1 (October 7, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: After multiple MTU changes, the ethtool IOCTL used to
|
|
+ determine the bnx2x driver version fails and eventually
|
|
+ iSCSI connections would not reconnect.
|
|
+
|
|
+ Cause: The socket file descriptor used during the ethtool IOCTL
|
|
+ call was never closed and leaked.
|
|
+
|
|
+ Change: On the error path when calling the ethtool IOCTL, the
|
|
+ file descriptor is now properly closed.
|
|
+
|
|
+uIP v0.5.39 (September 15, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Could not offload IPv4 VLAN connection when the target tries
|
|
+ to ARP the iSCSI initiator
|
|
+
|
|
+ Cause: In the ARP reply, the ether field was incorrect.
|
|
+
|
|
+ Change: Properly set the ether field to 802.1Q type (0x8100)
|
|
+
|
|
+uIP v0.5.38 (September 14, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: uIP would cause a panic dump when the NIC was going down
|
|
+
|
|
+ Cause: uIP and CNIC where not synchonized on NIC state
|
|
+
|
|
+ Change: Check if the RX BD's which are zero'ed by CNIC when the
|
|
+ NIC is going down. If the BD addresses are zero, then
|
|
+ uIP will drop the TX packets.
|
|
+
|
|
+uIP v0.5.37 (August 21, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: uIP would segfault on ifup/ifdown stress test when using
|
|
+ DHCP to determine local IP address.
|
|
+
|
|
+ Cause: The uIP would use a NULL buffer during data transmission.
|
|
+
|
|
+ Change: Drop packets when there are no buffer avaliable.
|
|
+
|
|
+uIP v0.5.36 (August 21, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: iSCSI boot would not completely login after the pivot
|
|
+ root operation.
|
|
+
|
|
+ Cause: The uIP would not properly start the NIC interface.
|
|
+
|
|
+ Change: uIP should only check the NIC state to determine whether
|
|
+ to start the NIC thread or not.
|
|
+
|
|
+ 2. Problem: uIP would segfault during if'up if'down testing.
|
|
+
|
|
+ Cause: The uIP would improperly start 2 NIC threads for the
|
|
+ same NIC interface.
|
|
+
|
|
+ Change: uIP should properly lock the NIC list when disabling/removing
|
|
+ the NIC threads.
|
|
+
|
|
+
|
|
+uIP v0.5.35 (August 20, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Sessions would hang with ethtool self-test
|
|
+
|
|
+ Cause: The uIP would hang because the socket layer was stuck
|
|
+ because there is much contention for that socket. This
|
|
+ would hang the CNIC thread.
|
|
+
|
|
+ Change: Remove any IOCTL calls in uIP which may colide with
|
|
+ the ethtool self test. The driver version is only
|
|
+ capture during uIP initialization.
|
|
+
|
|
+ 2. Problem: There were session recovery issue when using DHCP
|
|
+ if up/down tests.
|
|
+
|
|
+ Cause: The uIP would hang because the DHCP requests would
|
|
+ timeout if the network interface is downed which would
|
|
+ hang all the other uIP threads.
|
|
+
|
|
+ Change: Ensure that the DHCP state machine had exit points
|
|
+ if the network interface was down'ed.
|
|
+
|
|
+
|
|
+uIP v0.5.34 (August 18, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Sessions would not recover with ethtool self-test
|
|
+
|
|
+ Cause: The uIP would hang because either the NetLink buffer is
|
|
+ full or that any socket operations used to manipulate
|
|
+ multicast addresses would block.
|
|
+
|
|
+ Change: Ensure that the socket used for multicast addressing is
|
|
+ set to nonblocking. Drain the NetLink buffer without
|
|
+ using the eventing, but with a more aggressive poll routine.
|
|
+
|
|
+ 2. Problem: Sessions would not recover with L2 driver load/unload on
|
|
+ RHEL 6.0 SS9
|
|
+
|
|
+ Cause: The uIP would close the NIC thread too early and would
|
|
+ deadlock on cloing the NIC thread.
|
|
+
|
|
+ Change: Ensure that the NIC thread is canceled/closed only in one
|
|
+ location, in the NIC remove routine.
|
|
+
|
|
+
|
|
+uIP v0.5.33 (August 17, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Error message seen from the uIP stack for valid packets.
|
|
+
|
|
+ Cause: The uIP was incorrectly marking logging messages for valid
|
|
+ packets as errors because it didn't know how to parase them.
|
|
+
|
|
+ Change: Changed the following from error to debug message
|
|
+ ipv6: invalid version
|
|
+ ipv4: invalid version or header length.
|
|
+ icmpv6: unknown ICMP message.
|
|
+ ip: neither tcp nor icmp
|
|
+ Changed the following from error to warn message
|
|
+ udp: bad checksum
|
|
+ tcp: bad checksum
|
|
+ tcp: got reset, aborting connection.
|
|
+
|
|
+ 2. Problem: After multiple iterations the loading and unloading of
|
|
+ the Broadcom Linux drivers with active connections
|
|
+ would not cause the sessions to recover on RHEL 6.0
|
|
+ snapshot 9.
|
|
+
|
|
+ Cause: There was a deadlock in the nic mutex
|
|
+
|
|
+ Change: Lock ordering for the nic mutex and nic list mutex must
|
|
+ be inforced.
|
|
+
|
|
+ 3. Problem: After multiple iterations of running the ethtool selftest
|
|
+ the Broadcom Linux drivers with active connections
|
|
+ would not cause the sessions to recover on RHEL 5.5.
|
|
+
|
|
+ Cause: The Netlink buffer between uIP and CNIC would get full.
|
|
+
|
|
+ Change: Poll more regularly for packets in the Netlink buffer
|
|
+ from 4 times a second to 100 times a 1 second.
|
|
+ Drain packets during the PATH_REQ packet pull.
|
|
+
|
|
+
|
|
+uIP v0.5.32 (August 14, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Error message 'nic eth0: Didn't find type 0xaa bb' seen.
|
|
+
|
|
+ Cause: Valid non-DIX Ethernet packets as being passed to the
|
|
+ uIP. uIP will drop these packets but should be logged
|
|
+ correctly.
|
|
+
|
|
+ Change: These packets are valid, and should only be logged for
|
|
+ debugging purposes.
|
|
+
|
|
+ 2. Problem: Error message 'Dropped previous transmitted packet' seen.
|
|
+
|
|
+ Cause: The TX ring is full, and here uIP is trying to transmit a
|
|
+ packet which will be dropped. This is a valid state but
|
|
+ the log message is marked incorrectly
|
|
+
|
|
+ Change: These messages are not warnings and should be logging when
|
|
+ debugging is enabled.
|
|
+
|
|
+ 3. Problem: Error message: "iscsi_ipc eth0 Transport name is not
|
|
+ equal expected: got: bnx2i" seen.
|
|
+
|
|
+ Cause: The iface_rec structure is different between iscsid version.
|
|
+ For RHEL 5.5, iscsid is versioned 871, for RHEL 6.0 is
|
|
+ versioned 872.
|
|
+
|
|
+ Change: Allow uIP to compile against a different version of iscsid.
|
|
+
|
|
+
|
|
+uIP v0.5.31 (August 12, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Softlock would occur showing that the NetLink table
|
|
+ lock was taken but never released.
|
|
+
|
|
+ Cause: NetLink socket buffer would fill with constant PATH_REQ
|
|
+ messages preventing PATH_REQ response from libiscsi
|
|
+
|
|
+ Change: Now uIP will drain the NetLink buffer while looking for
|
|
+ a response.
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+ 1. Change: Add documentation for VLAN configuration and restrictions.
|
|
+
|
|
+
|
|
+uIP v0.5.30 (August 6, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: iscsid thread will stall if closing the uio files nodes
|
|
+ is stuck
|
|
+
|
|
+ Cause: uIP would indefinitely block waiting for the mutex shared
|
|
+ by the close routine.
|
|
+
|
|
+ Change: Now uIP will try and poll a bit for the mutex. If it can't
|
|
+ get this mutex in the iscsid thread then an error is return
|
|
+ rather then hold the thread.
|
|
+
|
|
+ 2. Problem: IPv6 Unicast Neighbor Adveriserments would have the
|
|
+ ICMPv6 option header specifying a MAC.
|
|
+
|
|
+ Cause: uIP should use the source IPv6 address to detmine whether
|
|
+ to strip the option header or not and not the target address
|
|
+ in the ICMPv6 field.
|
|
+
|
|
+ Change: The uIP stack return a unicast IPv6 Neighbor Advertisement
|
|
+ without the ICMPv6 option as a response to unicast
|
|
+ IPv6 Neighbor Solicitations.
|
|
+
|
|
+ 3. Problem: There would be TCP SYN packets with improper MAC address.
|
|
+
|
|
+ Cause: A zero'ed MAC address was not passed to CNIC to indicate an
|
|
+ error or if the IP address didn't resolve.
|
|
+
|
|
+ Change: The uIP stack will now return a zero'ed MAC address if it
|
|
+ can't find any entries.
|
|
+
|
|
+
|
|
+uIP v0.5.29 (August 6, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: "uip udp: no matching connection found: lport: 35072"
|
|
+ seen numerous times in the brcm_iscsiuio log file
|
|
+
|
|
+ Cause: This message was incorrectly marked as an error
|
|
+
|
|
+ Change: These messages are valid log entries especially if the
|
|
+ packet was a broadcast UDP packet not destined for the SUT
|
|
+ I will change the code to mark these logs entries as debug.
|
|
+
|
|
+
|
|
+uIP v0.5.28 (August 5, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Can't login into a redirected Equilogic Target
|
|
+
|
|
+ Cause: The Equilogic Target uses a unicast IPv6 Neighbor
|
|
+ Solicitation to test if the host is up. The uIP stack
|
|
+ would return a Neighbor Advertisement with an unneeded
|
|
+ ICMPv6 option.
|
|
+
|
|
+ Change: Only have the uIP stack return a unicast IPv6 Neighbor
|
|
+ Advertisement without the ICMPv6 option.
|
|
+
|
|
+ 2. Problem: With older bnx2/bnx2x/cnic/bnx2i driver combinations
|
|
+ uIP would segfault when these drivers were unloaded.
|
|
+
|
|
+ Cause: When the older drivers were removed, the underlying uio
|
|
+ instance was removed causing uIP to have a stale file handle.
|
|
+ When uIP finally closes using this stale file handle, either
|
|
+ uIP would segfault, or there would be an error in the
|
|
+ uio_release() path.
|
|
+
|
|
+ Change: Only have the uIP close if the UIO file node exists.
|
|
+
|
|
+
|
|
+uIP v0.5.27 (July 31, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: iSCSI HBA: Unable to use DHCP address for iSCSI interface
|
|
+ if a connection was previously made with a static address
|
|
+ on bnx2 devices.
|
|
+
|
|
+ Cause: Because the device is closed and reopen'ed the TX consumer
|
|
+ indexes were not persisted
|
|
+
|
|
+ Change: Only discard the TX consumer indexes only when the devices
|
|
+ will be discarded or closed
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+ 1. Change: Change CNIC references to bnx2 in the bnx2 user space
|
|
+ driver.
|
|
+
|
|
+
|
|
+uIP v0.5.26 (July 30, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: iSCSI HBA: Unable to use DHCP address for iSCSI interface
|
|
+ if a connection was previously made with a static address on
|
|
+ bnx2x devices.
|
|
+
|
|
+ Cause: Because the device is closed and reopen'ed the TX consumer
|
|
+ indexes were not persisted
|
|
+
|
|
+ Change: Only discard the TX consumer indexes only when the devices
|
|
+ will be discarded
|
|
+
|
|
+ 2. Problem: IPv6 using VLAN's didn't login
|
|
+
|
|
+ Cause: The uIP code used to determine if the packet was an IPv6
|
|
+ or not was not working. This VLAN packets for IPv6 were
|
|
+ being mis-interpreted.
|
|
+
|
|
+ Change: Make the function is_ipv6() VLAN aware
|
|
+
|
|
+ 3. Problem: Persistant targets was not loggin in during boot
|
|
+
|
|
+ Cause: If udev was slow and the /dev/uio* were creatly slowly
|
|
+ uIP would fail.
|
|
+
|
|
+ Change: Poll uIP waiting for /dev/uio* file nodes.
|
|
+
|
|
+uIP v0.5.25 (July 27, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: When using IPv4 DHCP, there are no initial DHCP Discover
|
|
+ packets were not seen on the wire.
|
|
+
|
|
+ Cause: Packets generated from the app handler from the uIP stack
|
|
+ were not placed on the wire.
|
|
+
|
|
+ Change: Packets originating from the uIP stack are now always placed
|
|
+ on the wire.
|
|
+
|
|
+uIP v0.5.24 (July 25, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: One would see invalid packet packets flow through the
|
|
+ uIP stack, where the logs would indicate there is a packet
|
|
+ with an invalid length
|
|
+
|
|
+ Cause: The BD and CQE consumer indexes were not properly incremented
|
|
+ and masked.
|
|
+
|
|
+ Change: The BD index is now properly masked. The CQE index is not
|
|
+ incremented using the CQE index rather the mistaken BD index.
|
|
+
|
|
+ Impact: 10G only
|
|
+
|
|
+ 2. Problem: uIP would segfault during the booting of the machine.
|
|
+
|
|
+ Cause: uIP was using a NULL data pointer because there was an
|
|
+ incorrect packet passed to the stack.
|
|
+
|
|
+ Change: Only allow uIP to process data if the packet exists.
|
|
+
|
|
+ 3. Problem: uIP would stop processing packets
|
|
+
|
|
+ Cause: The uIP code would not properly drain the CQE ring causing
|
|
+ it to eventually be full
|
|
+
|
|
+ Change: Consume all the CQE elements even if they are ethernet types
|
|
+ or not.
|
|
+
|
|
+ Impact: 10G only
|
|
+
|
|
+ 4. Problem: uIP would stop after if/down of the network interface.
|
|
+
|
|
+ Cause: uIP was not kick starting the NIC loop thread properly.
|
|
+
|
|
+ Change: Ensure that the NIC loop thread is started by when iscsid
|
|
+ request that the interface start the offload. Mark the NIC
|
|
+ only if the thread is truly canceled.
|
|
+
|
|
+
|
|
+uIP v0.5.23 (July 20, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Segfault during brcm_iscsiuio initialization
|
|
+
|
|
+ Cause: uIP was using a NULL data pointer, because a different
|
|
+ thread re-initialized the uIP stack
|
|
+
|
|
+ Change: Properly synchronize the initialization of the stack
|
|
+
|
|
+ 2. Problem: Deadlock during the printing of heavy debug messages
|
|
+
|
|
+ Cause: The variable macro structures would point to invalid
|
|
+ data
|
|
+
|
|
+ Change: With each invocation of va_copy() a corresponding
|
|
+ invocation of va_end() in the same function for the proper
|
|
+ cleanup
|
|
+
|
|
+ 3. Problem: uIP would hang when the interface could go up/down
|
|
+
|
|
+ Cause: uIP would get out of sync with the state of the network
|
|
+ interface
|
|
+
|
|
+ Change: Instead of detriving state from the UIO file nodes, uIP
|
|
+ will take direction from iscsid on when interfaces will be
|
|
+ started.
|
|
+
|
|
+uIP v0.5.22 (July 15, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Unable to reconnect via iSCSI offload after
|
|
+ ifup/ifdown
|
|
+
|
|
+ Cause: uIP was stuck on the thread when closing the NIC main
|
|
+ loop
|
|
+
|
|
+ Change: Properly synchronize the NetLink CNIC and uevent threads
|
|
+
|
|
+ 2. Problem: uIP would crash during boot up.
|
|
+
|
|
+ Cause: uIP would overwrite a memory location which was already
|
|
+ freed during nic_remove().
|
|
+
|
|
+ Change: Since the NIC is freed there is no need to write to
|
|
+ update the NIC flags
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+
|
|
+ 1. Change: Added IPv6 Link Local support
|
|
+
|
|
+
|
|
+uIP v0.5.21 (July 5, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Unable to connect via iSCSI offload after
|
|
+ changing L2 address
|
|
+
|
|
+ Cause: uIP didn't notice the network inferface going down
|
|
+
|
|
+ Change: Allow uIP to persist the stack's IP address after
|
|
+ a reset
|
|
+
|
|
+ 2. Problem: Unable to connect via IPv4 and IPv6 concurrently
|
|
+
|
|
+ Cause: uIP didn't notice the network inferface going down
|
|
+
|
|
+ Change: Allow uIP to persist the stack's IP address after
|
|
+ a reset and properly bring up the interface
|
|
+
|
|
+ 3. Problem: Unable to connect via VLAN
|
|
+
|
|
+ Cause: IP address was no persisted after a device reset
|
|
+
|
|
+ Change: When CNIC requests a path request, uIP will use the
|
|
+ VLAN passed by the CNIC.
|
|
+
|
|
+
|
|
+uIP v0.5.20 (June 24, 2010)
|
|
+
|
|
+
|
|
+uIP v0.5.20 (June 24, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Certain IPv6 addresses are not repsonded to by
|
|
+ the target.
|
|
+
|
|
+ Cause: The MAC was generated from the target's IPv6
|
|
+ address not the deterived multicast IPv6 address.
|
|
+
|
|
+ Change: The destination MAC address should be deterived
|
|
+ from the packet's destination IPv6 address and
|
|
+ not the target.
|
|
+
|
|
+ 2. Problem: brcm_iscsiuio would segfault when L2 interface is
|
|
+ bought up and down after being logged into
|
|
+
|
|
+ Cause: The NIC thread was not stopped properly
|
|
+
|
|
+ Change: When the UIO device is remove and when the
|
|
+ cooresponding NIC tracked by brcm_iscsiuio, the
|
|
+ daemon would properly wait for the NIC thread to
|
|
+ stop.
|
|
+
|
|
+
|
|
+uIP v0.5.19 (June 22, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Can't login after boot
|
|
+
|
|
+ Cause: If NIC interfaces are brough up and down quickly
|
|
+ uIP wait on an invalid NIC thread
|
|
+
|
|
+ Change: Only wait for the NIC thread if the NIC thread
|
|
+ exists.
|
|
+
|
|
+uIP v0.5.18 (June 21, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Does not compile on SLES 11 SP1
|
|
+
|
|
+ Cause: Automake cached files were included as part of the
|
|
+ uIP-0.5.17 package
|
|
+
|
|
+ Change: Remove automake cached files, and allow these files
|
|
+ to be generated each time the source is compiled
|
|
+
|
|
+ 2. Problem: Does not always receive multicast packets
|
|
+
|
|
+ Cause: Multicast bit was not set in SORT USER 2 register
|
|
+
|
|
+ Change: brcm_iscsiuio will now set the SORT USER 2 registers
|
|
+ with both the broadcast and multicast bits.
|
|
+
|
|
+ 3. Problem: Existing iSCSI connections do not reconnect after
|
|
+ operations which require equivalent driver
|
|
+ load/unload operations
|
|
+
|
|
+ Cause: Multiple path requests would trample NIC configurations
|
|
+
|
|
+ Change: Allow only one path request at a time
|
|
+
|
|
+uIP v0.5.17 (June 16, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: IPv6 neighbor solicitations from brcm_iscsiuio could
|
|
+ not be responded to
|
|
+
|
|
+ Cause: The IPv6 neighbor solicitation packet had an invalid
|
|
+ multicast MAC address
|
|
+
|
|
+ Change: Properly set the MAC address multicast bit and OR
|
|
+ with the IPv6 destination address
|
|
+
|
|
+ 2. Problem: NIC state was not properly synchronized and noticed
|
|
+ by Shyam Iyer <shiyer@redhat.com>
|
|
+
|
|
+ Change: Properly lock the NIC device when changing state
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+
|
|
+ 1. Change: Listen for iscsid before daemonizing to close a timing
|
|
+ gap which might allow iscsid to start before uIP is
|
|
+ completely initialized.
|
|
+
|
|
+uIP v0.5.16 (June 2, 2010)
|
|
+=======================================================
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+
|
|
+ 1. Change: Formally add IPv6 support. Only a static IPv6 address
|
|
+ is supported.
|
|
+
|
|
+uIP v0.5.15 (May 20, 2010)
|
|
+=======================================================
|
|
+
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: brcm_iscsiuio would echo packets off the wire
|
|
+
|
|
+ Cause: Stale packets from the uIP stack could potentially
|
|
+ make it onto the wire causing a network flood
|
|
+
|
|
+ Change: Only place on the wire packets uIP intended to place
|
|
+ on the wire. Drop all other packets.
|
|
+
|
|
+uIP v0.5.14 (May 18, 2010)
|
|
+=======================================================
|
|
+
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: brcm_iscsiuio would crash when offloading using a
|
|
+ bnx2x device /dev/mem could not be
|
|
+ opened, (ie. SE Linux enabled)
|
|
+
|
|
+ Cause: /dev/mem could not be opened, (ie. SE Linux enabled)
|
|
+ and then the NIC would be improperly initialized.
|
|
+
|
|
+ Change: If /dev/mem is not able to be opened, then the device
|
|
+ is closed
|
|
+
|
|
+ 2. Problem: brcm_iscsiuio would crash when brcm_iscsiuio is
|
|
+ being shutdown
|
|
+
|
|
+ Cause: The NIC mutex was deferenced imporperly when the NIC
|
|
+ is being closed
|
|
+
|
|
+ Change: Take the NIC mutex lock only when the NIC is closed.
|
|
+
|
|
+uIP v0.5.13 (May 16, 2010)
|
|
+=======================================================
|
|
+
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: brcm_iscsiuio would crash with heavy traffic directed
|
|
+ at the iSCSI traffic
|
|
+
|
|
+ Cause: Packets which are sized between 1006-1024 bytes would
|
|
+ crash brcm_iscsiuio because brcm_iscsiuio is not sized
|
|
+ to handle such large packets
|
|
+
|
|
+ Change: Drop large packets, properly hold the NIC mutex lock
|
|
+ for the duration when NIC fields are being used.
|
|
+
|
|
+
|
|
+uIP v0.5.12 (May 13, 2010)
|
|
+=======================================================
|
|
+
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: brcm_iscsiuio could crash on when L2 interface is
|
|
+ ifdown'ed
|
|
+
|
|
+ Cause: The local NIC pointer was not initialized properly
|
|
+ in the routine parse_iface()
|
|
+
|
|
+ Change: Properly initialize the NIC pointer
|
|
+
|
|
+ 2. Problem: Documentation referred to older admin_client which
|
|
+ doesn't exist any more because brcm_iscsiuio uses
|
|
+ the iscsid iface file
|
|
+
|
|
+ Change: Remove the stale references
|
|
+
|
|
+
|
|
+uIP v0.5.11 (May 11, 2010)
|
|
+=======================================================
|
|
+
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: brcm_iscsiuio could crash on invalid packet sizes
|
|
+
|
|
+ Cause: The hardware BD could be a large value because of a
|
|
+ hardware error
|
|
+
|
|
+ Change: Limit the size of the packet dumped to the MTU size
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+
|
|
+ 1. Change: During the running of the configure script now
|
|
+ the script will check for ar and ranlib binaries
|
|
+
|
|
+
|
|
+uIP v0.5.10 (May 03, 2010)
|
|
+=======================================================
|
|
+
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: BCM57712 not recognized
|
|
+
|
|
+ Cause: The PCI ID's in the bnx2x file were missing.
|
|
+
|
|
+ Change: Added proper BCM57712, BCM57712E, BCM57713, BCM57713E
|
|
+ PCI ID's
|
|
+
|
|
+ 2. Problem: (CQ 47481) brcm_iscsiuio not installed in correct location
|
|
+
|
|
+ Cause: Default install path for autoconf is /usr/local
|
|
+
|
|
+ Change: Change the default prefix to '/' so the brcm_iscsiuio
|
|
+ binary is installed to /sbin/
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+
|
|
+ 1. Change: Remove dependency on Yacc and Lex
|
|
+
|
|
+
|
|
+uIP v0.5.9 (April 28, 2010)
|
|
+=======================================================
|
|
+
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: bnx2x T6.0 driver would not login
|
|
+
|
|
+ Cause: The bnx2x code was not using the T6.0 HSI offsets
|
|
+
|
|
+ Change: Determine to bnx2x driver version eariler to properly use the
|
|
+ T4.8 or T6.0 HSI
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+
|
|
+ 1. Change: Collapse all the various locks to use the NIC lock to shrink
|
|
+ memory footprint
|
|
+
|
|
+ 2. Change: Consolidate upper layer checksumming code
|
|
+
|
|
+
|
|
+uIP v0.5.5 (March 02, 2010)
|
|
+=======================================================
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+
|
|
+ 1. Change: Add support for T6.0 bnx2x HSI and 57712.
|
|
+
|
|
+ 2. Change: Initial support for IPv6
|
|
+
|
|
+uIP v0.5.8 (April 22, 2010)
|
|
+=======================================================
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+
|
|
+ 1. Change: Add support for T6.0 bnx2x HSI and 57712.
|
|
+
|
|
+ 2. Change: Initial support for IPv6
|
|
+
|
|
+uIP v0.5.7 (March 17, 2010)
|
|
+=======================================================
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+
|
|
+ 1. Change: Add to documentation on discovering on a particular
|
|
+ iface before logging in
|
|
+
|
|
+uIP v0.5.6 (Mar 05, 2009)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: bnx2x panic dump would be seen when sending
|
|
+ traffic to uIP
|
|
+
|
|
+ Cause: The TX producer index was not properly
|
|
+ incrementing when the wrapping occured
|
|
+
|
|
+ Change: Do not skip the last TX producer index like the
|
|
+ TX BD's
|
|
+
|
|
+ Impact: None.
|
|
+
|
|
+uIP v0.5.5 (March 02, 2010)
|
|
+=======================================================
|
|
+ Initial release
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+
|
|
+ 1. Change: Add to documentation on debugging/logging for uIP
|
|
+
|
|
+
|
|
+uIP v0.5.4 (Feb 22, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Compile error where 'ETHERTYPE_VLAN' define
|
|
+ is missing
|
|
+
|
|
+ Cause: Certain distributions do not define 'ETHERTYPE_VLAN'
|
|
+ in the header file "net/ethernet.h".
|
|
+
|
|
+ Change: Added proper defines for ETHERTYPE_VLAN when necessary
|
|
+
|
|
+ Impact: None.
|
|
+
|
|
+
|
|
+uIP v0.5.3 (Feb 18, 2010)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Using VLAN's on offloaded iSCSI connections
|
|
+
|
|
+ Cause: (CQ45983) VLAN tags were not being properly inserted
|
|
+ when sending the ARP request packets
|
|
+
|
|
+ Change: Added VLAN tags when sending ARP request packets
|
|
+
|
|
+ Impact: None.
|
|
+
|
|
+
|
|
+uIP v0.5.2 (Dec 10, 2009)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: Switching between 10G and 1G iSCSI offloaded
|
|
+ devices caused login connectivity problems
|
|
+
|
|
+ Cause: The NIC devices within uIP were not cleanup
|
|
+ properly.
|
|
+
|
|
+ Change: The NIC structure is not re-initialized and the
|
|
+ NIC thread is destroyed when the host network
|
|
+ interface is brought down.
|
|
+
|
|
+ Impact: None.
|
|
+
|
|
+
|
|
+uIP v0.5.1 (Dec 9, 2009)
|
|
+=======================================================
|
|
+ Fixes
|
|
+ -----
|
|
+ 1. Problem: 10G devices behind PCI bridges would not collect
|
|
+
|
|
+ Cause: PCI bus:slot.func string was parsed incorrectly
|
|
+ because the bridge string was used
|
|
+
|
|
+ Change: Parse the proper PCI bus:slot.func string.
|
|
+
|
|
+ Impact: None.
|
|
+
|
|
+
|
|
+uIP v0.5.0b (Nov 24, 2009)
|
|
+=======================================================
|
|
+ Initial release
|
|
+
|
|
+ Enhancements
|
|
+ ------------
|
|
+
|
|
+ 1. Change: Add Broadcom 10G iSCSI offload support
|
|
+
|
|
+ Impact: Linux
|
|
+
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/brcm-iscsi/brcm_iscsi.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/brcm-iscsi/brcm_iscsi.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/brcm-iscsi/brcm_iscsi.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/brcm-iscsi/brcm_iscsi.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,88 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li <benli@broadcom.com>
|
|
+ * Based on code example from Adam Dunkels
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ */
|
|
+/**
|
|
+ * \addtogroup brcm-iscsi
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \file
|
|
+ * An example of how to write uIP applications
|
|
+ * with protosockets
|
|
+ * \author
|
|
+ * Benjamin Li <benli@broadcom.com>
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * This is a short example of how to write uIP applications using
|
|
+ * protosockets.
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * We define the application state (struct hello_world_state) in the
|
|
+ * hello-world.h file, so we need to include it here. We also include
|
|
+ * uip.h (since this cannot be included in hello-world.h) and
|
|
+ * <string.h>, since we use the memcpy() function in the code.
|
|
+ */
|
|
+#include "brcm_iscsi.h"
|
|
+#include "uip.h"
|
|
+#include <string.h>
|
|
+#include <stdio.h>
|
|
+
|
|
+#include "uip_arp.h"
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+/*
|
|
+ * The initialization function. We must explicitly call this function
|
|
+ * from the system initialization code, some time after uip_init() is
|
|
+ * called.
|
|
+ */
|
|
+void brcm_iscsi_init(void)
|
|
+{
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+/*
|
|
+ * In hello-world.h we have defined the UIP_APPCALL macro to
|
|
+ * hello_world_appcall so that this funcion is uIP's application
|
|
+ * function. This function is called whenever an uIP event occurs
|
|
+ * (e.g. when a new connection is established, new data arrives, sent
|
|
+ * data is acknowledged, data needs to be retransmitted, etc.).
|
|
+ */
|
|
+void brcm_iscsi_appcall(struct uip_stack *ustack)
|
|
+{
|
|
+}
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/brcm-iscsi/brcm_iscsi.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/brcm-iscsi/brcm_iscsi.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/brcm-iscsi/brcm_iscsi.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/brcm-iscsi/brcm_iscsi.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,90 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li <benli@broadcom.com>
|
|
+ * Based on code example from Adam Dunkels
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ */
|
|
+/**
|
|
+ * \addtogroup apps
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \defgroup helloworld Hello, world
|
|
+ * @{
|
|
+ *
|
|
+ * A small example showing how to write applications with
|
|
+ * \ref psock "protosockets".
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \file
|
|
+ * Header file for an example of how to write uIP applications
|
|
+ * with protosockets.
|
|
+ * \author
|
|
+ * Benjamin Li <benli@broadcom.com>
|
|
+ */
|
|
+
|
|
+#ifndef __BRCM_ISCSI_H__
|
|
+#define __BRCM_ISCSI_H__
|
|
+
|
|
+/* Since this file will be included by uip.h, we cannot include uip.h
|
|
+ here. But we might need to include uipopt.h if we need the u8_t and
|
|
+ u16_t datatypes. */
|
|
+#include "uipopt.h"
|
|
+#include "uip.h"
|
|
+#include "psock.h"
|
|
+
|
|
+/* Next, we define the uip_tcp_appstate_t datatype. This is the state
|
|
+ of our application, and the memory required for this state is
|
|
+ allocated together with each TCP connection. One application state
|
|
+ for each TCP connection. */
|
|
+typedef struct hello_world_state {
|
|
+ struct psock p;
|
|
+ u8_t inputbuffer[32];
|
|
+ u8_t name[40];
|
|
+
|
|
+ struct uip_udp_conn *conn;
|
|
+} uip_tcp_appstate_t;
|
|
+
|
|
+/* Finally we define the application function to be called by uIP. */
|
|
+void brcm_iscsi_appcall(struct uip_stack *ustack);
|
|
+#ifndef UIP_APPCALL
|
|
+#define UIP_APPCALL brcm_iscsi_appcall
|
|
+#endif /* UIP_APPCALL */
|
|
+
|
|
+void brcm_iscsi_init(void);
|
|
+
|
|
+#endif /* __BRCM_ISCSI_H__ */
|
|
+/** @} */
|
|
+/** @} */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/brcm-iscsi/Makefile.am open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/brcm-iscsi/Makefile.am
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/brcm-iscsi/Makefile.am 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/brcm-iscsi/Makefile.am 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,12 @@
|
|
+INCLUDES = -I${top_srcdir}/src/unix \
|
|
+ -I${top_srcdir}/src/uip \
|
|
+ -I${top_srcdir}/src/apps/dhcpc \
|
|
+ -I${top_srcdir}/src/apps/brcm-iscsi \
|
|
+ -I${top_srcdir}/include
|
|
+
|
|
+noinst_LIBRARIES = lib_apps_brcm_iscsi.a
|
|
+
|
|
+lib_apps_brcm_iscsi_a_SOURCES = brcm_iscsi.c
|
|
+
|
|
+lib_apps_brcm_iscsi_a_CFLAGS = $(AM_CFLAGS) \
|
|
+ -DBYTE_ORDER=@ENDIAN@
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/brcm-iscsi/Makefile.brcm-iscsi open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/brcm-iscsi/Makefile.brcm-iscsi
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/brcm-iscsi/Makefile.brcm-iscsi 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/brcm-iscsi/Makefile.brcm-iscsi 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1 @@
|
|
+APP_SOURCES += brcm-iscsi.c
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/brcm-iscsi/Makefile.in open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/brcm-iscsi/Makefile.in
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/brcm-iscsi/Makefile.in 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/brcm-iscsi/Makefile.in 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,445 @@
|
|
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
|
+# @configure_input@
|
|
+
|
|
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
|
+# 2003, 2004, 2005 Free Software Foundation, Inc.
|
|
+# This Makefile.in 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.
|
|
+
|
|
+# This program is distributed in the hope that it will be useful,
|
|
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
|
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
+# PARTICULAR PURPOSE.
|
|
+
|
|
+@SET_MAKE@
|
|
+
|
|
+srcdir = @srcdir@
|
|
+top_srcdir = @top_srcdir@
|
|
+VPATH = @srcdir@
|
|
+pkgdatadir = $(datadir)/@PACKAGE@
|
|
+pkglibdir = $(libdir)/@PACKAGE@
|
|
+pkgincludedir = $(includedir)/@PACKAGE@
|
|
+top_builddir = ../../..
|
|
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
|
+INSTALL = @INSTALL@
|
|
+install_sh_DATA = $(install_sh) -c -m 644
|
|
+install_sh_PROGRAM = $(install_sh) -c
|
|
+install_sh_SCRIPT = $(install_sh) -c
|
|
+INSTALL_HEADER = $(INSTALL_DATA)
|
|
+transform = $(program_transform_name)
|
|
+NORMAL_INSTALL = :
|
|
+PRE_INSTALL = :
|
|
+POST_INSTALL = :
|
|
+NORMAL_UNINSTALL = :
|
|
+PRE_UNINSTALL = :
|
|
+POST_UNINSTALL = :
|
|
+build_triplet = @build@
|
|
+host_triplet = @host@
|
|
+subdir = src/apps/brcm-iscsi
|
|
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
|
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
|
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
|
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
|
+ $(ACLOCAL_M4)
|
|
+mkinstalldirs = $(install_sh) -d
|
|
+CONFIG_HEADER = $(top_builddir)/config.h
|
|
+CONFIG_CLEAN_FILES =
|
|
+LIBRARIES = $(noinst_LIBRARIES)
|
|
+ARFLAGS = cru
|
|
+lib_apps_brcm_iscsi_a_AR = $(AR) $(ARFLAGS)
|
|
+lib_apps_brcm_iscsi_a_LIBADD =
|
|
+am_lib_apps_brcm_iscsi_a_OBJECTS = \
|
|
+ lib_apps_brcm_iscsi_a-brcm_iscsi.$(OBJEXT)
|
|
+lib_apps_brcm_iscsi_a_OBJECTS = $(am_lib_apps_brcm_iscsi_a_OBJECTS)
|
|
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
|
+depcomp = $(SHELL) $(top_srcdir)/depcomp
|
|
+am__depfiles_maybe = depfiles
|
|
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
|
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
|
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
|
|
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
|
+ $(AM_CFLAGS) $(CFLAGS)
|
|
+CCLD = $(CC)
|
|
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
|
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
|
+SOURCES = $(lib_apps_brcm_iscsi_a_SOURCES)
|
|
+DIST_SOURCES = $(lib_apps_brcm_iscsi_a_SOURCES)
|
|
+ETAGS = etags
|
|
+CTAGS = ctags
|
|
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
|
+ACLOCAL = @ACLOCAL@
|
|
+AMDEP_FALSE = @AMDEP_FALSE@
|
|
+AMDEP_TRUE = @AMDEP_TRUE@
|
|
+AMTAR = @AMTAR@
|
|
+AR = @AR@
|
|
+AUTOCONF = @AUTOCONF@
|
|
+AUTOHEADER = @AUTOHEADER@
|
|
+AUTOMAKE = @AUTOMAKE@
|
|
+AWK = @AWK@
|
|
+BASH = @BASH@
|
|
+CC = @CC@
|
|
+CCDEPMODE = @CCDEPMODE@
|
|
+CFLAGS = @CFLAGS@
|
|
+CPP = @CPP@
|
|
+CPPFLAGS = @CPPFLAGS@
|
|
+CXX = @CXX@
|
|
+CXXCPP = @CXXCPP@
|
|
+CXXDEPMODE = @CXXDEPMODE@
|
|
+CXXFLAGS = @CXXFLAGS@
|
|
+CYGPATH_W = @CYGPATH_W@
|
|
+DEBUG_FALSE = @DEBUG_FALSE@
|
|
+DEBUG_TRUE = @DEBUG_TRUE@
|
|
+DEFS = @DEFS@
|
|
+DEPDIR = @DEPDIR@
|
|
+ECHO = @ECHO@
|
|
+ECHO_C = @ECHO_C@
|
|
+ECHO_N = @ECHO_N@
|
|
+ECHO_T = @ECHO_T@
|
|
+EGREP = @EGREP@
|
|
+ENDIAN = @ENDIAN@
|
|
+EXEEXT = @EXEEXT@
|
|
+F77 = @F77@
|
|
+FFLAGS = @FFLAGS@
|
|
+INSTALL_DATA = @INSTALL_DATA@
|
|
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
|
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
|
+LDFLAGS = @LDFLAGS@
|
|
+LIBOBJS = @LIBOBJS@
|
|
+LIBS = @LIBS@
|
|
+LIBTOOL = @LIBTOOL@
|
|
+LN_S = @LN_S@
|
|
+LTLIBOBJS = @LTLIBOBJS@
|
|
+MAKEINFO = @MAKEINFO@
|
|
+OBJEXT = @OBJEXT@
|
|
+PACKAGE = @PACKAGE@
|
|
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
|
+PACKAGE_NAME = @PACKAGE_NAME@
|
|
+PACKAGE_STRING = @PACKAGE_STRING@
|
|
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
|
+PACKAGE_VERSION = @PACKAGE_VERSION@
|
|
+PATH_SEPARATOR = @PATH_SEPARATOR@
|
|
+RANLIB = @RANLIB@
|
|
+SED = @SED@
|
|
+SET_MAKE = @SET_MAKE@
|
|
+SHELL = @SHELL@
|
|
+STRIP = @STRIP@
|
|
+VERSION = @VERSION@
|
|
+ac_ct_AR = @ac_ct_AR@
|
|
+ac_ct_CC = @ac_ct_CC@
|
|
+ac_ct_CXX = @ac_ct_CXX@
|
|
+ac_ct_F77 = @ac_ct_F77@
|
|
+ac_ct_RANLIB = @ac_ct_RANLIB@
|
|
+ac_ct_STRIP = @ac_ct_STRIP@
|
|
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
|
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
|
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
|
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
|
+am__include = @am__include@
|
|
+am__leading_dot = @am__leading_dot@
|
|
+am__quote = @am__quote@
|
|
+am__tar = @am__tar@
|
|
+am__untar = @am__untar@
|
|
+bindir = @bindir@
|
|
+build = @build@
|
|
+build_alias = @build_alias@
|
|
+build_cpu = @build_cpu@
|
|
+build_os = @build_os@
|
|
+build_vendor = @build_vendor@
|
|
+datadir = @datadir@
|
|
+exec_prefix = @exec_prefix@
|
|
+host = @host@
|
|
+host_alias = @host_alias@
|
|
+host_cpu = @host_cpu@
|
|
+host_os = @host_os@
|
|
+host_vendor = @host_vendor@
|
|
+includedir = @includedir@
|
|
+infodir = @infodir@
|
|
+install_sh = @install_sh@
|
|
+libdir = @libdir@
|
|
+libexecdir = @libexecdir@
|
|
+localstatedir = @localstatedir@
|
|
+mandir = @mandir@
|
|
+mkdir_p = @mkdir_p@
|
|
+oldincludedir = @oldincludedir@
|
|
+prefix = @prefix@
|
|
+program_transform_name = @program_transform_name@
|
|
+sbindir = @sbindir@
|
|
+sharedstatedir = @sharedstatedir@
|
|
+sysconfdir = @sysconfdir@
|
|
+target_alias = @target_alias@
|
|
+INCLUDES = -I${top_srcdir}/src/unix \
|
|
+ -I${top_srcdir}/src/uip \
|
|
+ -I${top_srcdir}/src/apps/dhcpc \
|
|
+ -I${top_srcdir}/src/apps/brcm-iscsi \
|
|
+ -I${top_srcdir}/include
|
|
+
|
|
+noinst_LIBRARIES = lib_apps_brcm_iscsi.a
|
|
+lib_apps_brcm_iscsi_a_SOURCES = brcm_iscsi.c
|
|
+lib_apps_brcm_iscsi_a_CFLAGS = $(AM_CFLAGS) \
|
|
+ -DBYTE_ORDER=@ENDIAN@
|
|
+
|
|
+all: all-am
|
|
+
|
|
+.SUFFIXES:
|
|
+.SUFFIXES: .c .lo .o .obj
|
|
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
|
+ @for dep in $?; do \
|
|
+ case '$(am__configure_deps)' in \
|
|
+ *$$dep*) \
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
|
+ && exit 0; \
|
|
+ exit 1;; \
|
|
+ esac; \
|
|
+ done; \
|
|
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/apps/brcm-iscsi/Makefile'; \
|
|
+ cd $(top_srcdir) && \
|
|
+ $(AUTOMAKE) --gnu src/apps/brcm-iscsi/Makefile
|
|
+.PRECIOUS: Makefile
|
|
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
|
+ @case '$?' in \
|
|
+ *config.status*) \
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
|
+ *) \
|
|
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
|
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
|
+ esac;
|
|
+
|
|
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+
|
|
+$(top_srcdir)/configure: $(am__configure_deps)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+
|
|
+clean-noinstLIBRARIES:
|
|
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
|
|
+lib_apps_brcm_iscsi.a: $(lib_apps_brcm_iscsi_a_OBJECTS) $(lib_apps_brcm_iscsi_a_DEPENDENCIES)
|
|
+ -rm -f lib_apps_brcm_iscsi.a
|
|
+ $(lib_apps_brcm_iscsi_a_AR) lib_apps_brcm_iscsi.a $(lib_apps_brcm_iscsi_a_OBJECTS) $(lib_apps_brcm_iscsi_a_LIBADD)
|
|
+ $(RANLIB) lib_apps_brcm_iscsi.a
|
|
+
|
|
+mostlyclean-compile:
|
|
+ -rm -f *.$(OBJEXT)
|
|
+
|
|
+distclean-compile:
|
|
+ -rm -f *.tab.c
|
|
+
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_apps_brcm_iscsi_a-brcm_iscsi.Po@am__quote@
|
|
+
|
|
+.c.o:
|
|
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
|
|
+
|
|
+.c.obj:
|
|
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
|
|
+
|
|
+.c.lo:
|
|
+@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
|
|
+
|
|
+lib_apps_brcm_iscsi_a-brcm_iscsi.o: brcm_iscsi.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_apps_brcm_iscsi_a_CFLAGS) $(CFLAGS) -MT lib_apps_brcm_iscsi_a-brcm_iscsi.o -MD -MP -MF "$(DEPDIR)/lib_apps_brcm_iscsi_a-brcm_iscsi.Tpo" -c -o lib_apps_brcm_iscsi_a-brcm_iscsi.o `test -f 'brcm_iscsi.c' || echo '$(srcdir)/'`brcm_iscsi.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_apps_brcm_iscsi_a-brcm_iscsi.Tpo" "$(DEPDIR)/lib_apps_brcm_iscsi_a-brcm_iscsi.Po"; else rm -f "$(DEPDIR)/lib_apps_brcm_iscsi_a-brcm_iscsi.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='brcm_iscsi.c' object='lib_apps_brcm_iscsi_a-brcm_iscsi.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_apps_brcm_iscsi_a_CFLAGS) $(CFLAGS) -c -o lib_apps_brcm_iscsi_a-brcm_iscsi.o `test -f 'brcm_iscsi.c' || echo '$(srcdir)/'`brcm_iscsi.c
|
|
+
|
|
+lib_apps_brcm_iscsi_a-brcm_iscsi.obj: brcm_iscsi.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_apps_brcm_iscsi_a_CFLAGS) $(CFLAGS) -MT lib_apps_brcm_iscsi_a-brcm_iscsi.obj -MD -MP -MF "$(DEPDIR)/lib_apps_brcm_iscsi_a-brcm_iscsi.Tpo" -c -o lib_apps_brcm_iscsi_a-brcm_iscsi.obj `if test -f 'brcm_iscsi.c'; then $(CYGPATH_W) 'brcm_iscsi.c'; else $(CYGPATH_W) '$(srcdir)/brcm_iscsi.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_apps_brcm_iscsi_a-brcm_iscsi.Tpo" "$(DEPDIR)/lib_apps_brcm_iscsi_a-brcm_iscsi.Po"; else rm -f "$(DEPDIR)/lib_apps_brcm_iscsi_a-brcm_iscsi.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='brcm_iscsi.c' object='lib_apps_brcm_iscsi_a-brcm_iscsi.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_apps_brcm_iscsi_a_CFLAGS) $(CFLAGS) -c -o lib_apps_brcm_iscsi_a-brcm_iscsi.obj `if test -f 'brcm_iscsi.c'; then $(CYGPATH_W) 'brcm_iscsi.c'; else $(CYGPATH_W) '$(srcdir)/brcm_iscsi.c'; fi`
|
|
+
|
|
+mostlyclean-libtool:
|
|
+ -rm -f *.lo
|
|
+
|
|
+clean-libtool:
|
|
+ -rm -rf .libs _libs
|
|
+
|
|
+distclean-libtool:
|
|
+ -rm -f libtool
|
|
+uninstall-info-am:
|
|
+
|
|
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ mkid -fID $$unique
|
|
+tags: TAGS
|
|
+
|
|
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
|
+ $(TAGS_FILES) $(LISP)
|
|
+ tags=; \
|
|
+ here=`pwd`; \
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
|
+ test -n "$$unique" || unique=$$empty_fix; \
|
|
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
|
+ $$tags $$unique; \
|
|
+ fi
|
|
+ctags: CTAGS
|
|
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
|
+ $(TAGS_FILES) $(LISP)
|
|
+ tags=; \
|
|
+ here=`pwd`; \
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
|
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
|
+ $$tags $$unique
|
|
+
|
|
+GTAGS:
|
|
+ here=`$(am__cd) $(top_builddir) && pwd` \
|
|
+ && cd $(top_srcdir) \
|
|
+ && gtags -i $(GTAGS_ARGS) $$here
|
|
+
|
|
+distclean-tags:
|
|
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
|
+
|
|
+distdir: $(DISTFILES)
|
|
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
|
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
|
+ list='$(DISTFILES)'; for file in $$list; do \
|
|
+ case $$file in \
|
|
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
|
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
|
+ esac; \
|
|
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
|
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
|
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
|
+ dir="/$$dir"; \
|
|
+ $(mkdir_p) "$(distdir)$$dir"; \
|
|
+ else \
|
|
+ dir=''; \
|
|
+ fi; \
|
|
+ if test -d $$d/$$file; then \
|
|
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
|
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
|
+ fi; \
|
|
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
|
+ else \
|
|
+ test -f $(distdir)/$$file \
|
|
+ || cp -p $$d/$$file $(distdir)/$$file \
|
|
+ || exit 1; \
|
|
+ fi; \
|
|
+ done
|
|
+check-am: all-am
|
|
+check: check-am
|
|
+all-am: Makefile $(LIBRARIES)
|
|
+installdirs:
|
|
+install: install-am
|
|
+install-exec: install-exec-am
|
|
+install-data: install-data-am
|
|
+uninstall: uninstall-am
|
|
+
|
|
+install-am: all-am
|
|
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
|
+
|
|
+installcheck: installcheck-am
|
|
+install-strip:
|
|
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
|
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
|
+ `test -z '$(STRIP)' || \
|
|
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
|
+mostlyclean-generic:
|
|
+
|
|
+clean-generic:
|
|
+
|
|
+distclean-generic:
|
|
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
|
+
|
|
+maintainer-clean-generic:
|
|
+ @echo "This command is intended for maintainers to use"
|
|
+ @echo "it deletes files that may require special tools to rebuild."
|
|
+clean: clean-am
|
|
+
|
|
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
|
|
+ mostlyclean-am
|
|
+
|
|
+distclean: distclean-am
|
|
+ -rm -rf ./$(DEPDIR)
|
|
+ -rm -f Makefile
|
|
+distclean-am: clean-am distclean-compile distclean-generic \
|
|
+ distclean-libtool distclean-tags
|
|
+
|
|
+dvi: dvi-am
|
|
+
|
|
+dvi-am:
|
|
+
|
|
+html: html-am
|
|
+
|
|
+info: info-am
|
|
+
|
|
+info-am:
|
|
+
|
|
+install-data-am:
|
|
+
|
|
+install-exec-am:
|
|
+
|
|
+install-info: install-info-am
|
|
+
|
|
+install-man:
|
|
+
|
|
+installcheck-am:
|
|
+
|
|
+maintainer-clean: maintainer-clean-am
|
|
+ -rm -rf ./$(DEPDIR)
|
|
+ -rm -f Makefile
|
|
+maintainer-clean-am: distclean-am maintainer-clean-generic
|
|
+
|
|
+mostlyclean: mostlyclean-am
|
|
+
|
|
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
|
+ mostlyclean-libtool
|
|
+
|
|
+pdf: pdf-am
|
|
+
|
|
+pdf-am:
|
|
+
|
|
+ps: ps-am
|
|
+
|
|
+ps-am:
|
|
+
|
|
+uninstall-am: uninstall-info-am
|
|
+
|
|
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
|
+ clean-libtool clean-noinstLIBRARIES ctags distclean \
|
|
+ distclean-compile distclean-generic distclean-libtool \
|
|
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
|
|
+ install install-am install-data install-data-am install-exec \
|
|
+ install-exec-am install-info install-info-am install-man \
|
|
+ install-strip installcheck installcheck-am installdirs \
|
|
+ maintainer-clean maintainer-clean-generic mostlyclean \
|
|
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
|
|
+ pdf pdf-am ps ps-am tags uninstall uninstall-am \
|
|
+ uninstall-info-am
|
|
+
|
|
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
|
+# Otherwise a system limit (for SysV at least) may be exceeded.
|
|
+.NOEXPORT:
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/dhcpc/dhcpc.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/dhcpc/dhcpc.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/dhcpc/dhcpc.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/dhcpc/dhcpc.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,423 @@
|
|
+/*
|
|
+ * Copyright (c) 2005, Swedish Institute of Computer Science
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. Neither the name of the Institute nor the names of its contributors
|
|
+ * may be used to endorse or promote products derived from this software
|
|
+ * without specific prior written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
|
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
|
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
+ * SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack
|
|
+ *
|
|
+ * @(#)$Id: dhcpc.c,v 1.2 2006/06/11 21:46:37 adam Exp $
|
|
+ */
|
|
+
|
|
+#include <errno.h>
|
|
+#include <pthread.h>
|
|
+#include <stdio.h>
|
|
+#include <string.h>
|
|
+#include <stdlib.h>
|
|
+#include <arpa/inet.h>
|
|
+
|
|
+#include "uip.h"
|
|
+#include "dhcpc.h"
|
|
+#include "timer.h"
|
|
+#include "pt.h"
|
|
+
|
|
+#include "debug.h"
|
|
+#include "logger.h"
|
|
+#include "nic.h"
|
|
+#include "nic_utils.h"
|
|
+
|
|
+struct __attribute__ ((__packed__)) dhcp_msg {
|
|
+ u8_t op, htype, hlen, hops;
|
|
+ u8_t xid[4];
|
|
+ u16_t secs, flags;
|
|
+ u8_t ciaddr[4];
|
|
+ u8_t yiaddr[4];
|
|
+ u8_t siaddr[4];
|
|
+ u8_t giaddr[4];
|
|
+ u8_t chaddr[16];
|
|
+#ifndef UIP_CONF_DHCP_LIGHT
|
|
+ u8_t sname[64];
|
|
+ u8_t file[128];
|
|
+#endif
|
|
+ u8_t options[312];
|
|
+};
|
|
+
|
|
+#define BOOTP_BROADCAST 0x8000
|
|
+
|
|
+#define DHCP_REQUEST 1
|
|
+#define DHCP_REPLY 2
|
|
+#define DHCP_HTYPE_ETHERNET 1
|
|
+#define DHCP_HLEN_ETHERNET 6
|
|
+#define DHCP_MSG_LEN 236
|
|
+
|
|
+#define DHCPC_SERVER_PORT 67
|
|
+#define DHCPC_CLIENT_PORT 68
|
|
+
|
|
+#define DHCPDISCOVER 1
|
|
+#define DHCPOFFER 2
|
|
+#define DHCPREQUEST 3
|
|
+#define DHCPDECLINE 4
|
|
+#define DHCPACK 5
|
|
+#define DHCPNAK 6
|
|
+#define DHCPRELEASE 7
|
|
+
|
|
+#define DHCP_OPTION_SUBNET_MASK 1
|
|
+#define DHCP_OPTION_ROUTER 3
|
|
+#define DHCP_OPTION_DNS_SERVER 6
|
|
+#define DHCP_OPTION_REQ_IPADDR 50
|
|
+#define DHCP_OPTION_LEASE_TIME 51
|
|
+#define DHCP_OPTION_MSG_TYPE 53
|
|
+#define DHCP_OPTION_SERVER_ID 54
|
|
+#define DHCP_OPTION_REQ_LIST 55
|
|
+#define DHCP_OPTION_END 255
|
|
+
|
|
+static u8_t xid[4] = { 0xad, 0xde, 0x12, 0x23 };
|
|
+static const u8_t magic_cookie[4] = { 99, 130, 83, 99 };
|
|
+
|
|
+struct dhcpc_options dhcpc_opt = {
|
|
+ .enable_random_xid = 1,
|
|
+};
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static u8_t *add_msg_type(u8_t * optptr, u8_t type)
|
|
+{
|
|
+ *optptr++ = DHCP_OPTION_MSG_TYPE;
|
|
+ *optptr++ = 1;
|
|
+ *optptr++ = type;
|
|
+ return optptr;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static u8_t *add_server_id(struct dhcpc_state *s, u8_t * optptr)
|
|
+{
|
|
+ *optptr++ = DHCP_OPTION_SERVER_ID;
|
|
+ *optptr++ = 4;
|
|
+ memcpy(optptr, s->serverid, 4);
|
|
+ return optptr + 4;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static u8_t *add_req_ipaddr(struct dhcpc_state *s, u8_t * optptr)
|
|
+{
|
|
+ *optptr++ = DHCP_OPTION_REQ_IPADDR;
|
|
+ *optptr++ = 4;
|
|
+ memcpy(optptr, s->ipaddr, 4);
|
|
+ return optptr + 4;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static u8_t *add_req_options(u8_t * optptr)
|
|
+{
|
|
+ *optptr++ = DHCP_OPTION_REQ_LIST;
|
|
+ *optptr++ = 3;
|
|
+ *optptr++ = DHCP_OPTION_SUBNET_MASK;
|
|
+ *optptr++ = DHCP_OPTION_ROUTER;
|
|
+ *optptr++ = DHCP_OPTION_DNS_SERVER;
|
|
+ return optptr;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static u8_t *add_end(u8_t * optptr)
|
|
+{
|
|
+ *optptr++ = DHCP_OPTION_END;
|
|
+ return optptr;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static void create_msg(struct dhcpc_state *s, struct dhcp_msg *m)
|
|
+{
|
|
+ m->op = DHCP_REQUEST;
|
|
+ m->htype = DHCP_HTYPE_ETHERNET;
|
|
+ m->hlen = s->mac_len;
|
|
+ m->hops = 0;
|
|
+ memcpy(m->xid, xid, sizeof(m->xid));
|
|
+ m->secs = 0;
|
|
+ m->flags = const_htons(BOOTP_BROADCAST); /* Broadcast bit. */
|
|
+ /* uip_ipaddr_copy(m->ciaddr, uip_hostaddr); */
|
|
+ memcpy(m->ciaddr, s->ustack->hostaddr, sizeof(m->ciaddr));
|
|
+ memset(m->yiaddr, 0, sizeof(m->yiaddr));
|
|
+ memset(m->siaddr, 0, sizeof(m->siaddr));
|
|
+ memset(m->giaddr, 0, sizeof(m->giaddr));
|
|
+ memcpy(m->chaddr, s->mac_addr, s->mac_len);
|
|
+ memset(&m->chaddr[s->mac_len], 0, sizeof(m->chaddr) - s->mac_len);
|
|
+#ifndef UIP_CONF_DHCP_LIGHT
|
|
+ memset(m->sname, 0, sizeof(m->sname));
|
|
+ memset(m->file, 0, sizeof(m->file));
|
|
+#endif
|
|
+
|
|
+ memcpy(m->options, magic_cookie, sizeof(magic_cookie));
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static void send_discover(struct dhcpc_state *s)
|
|
+{
|
|
+ u8_t *end;
|
|
+ struct dhcp_msg *m = (struct dhcp_msg *)s->ustack->uip_appdata;
|
|
+
|
|
+ create_msg(s, m);
|
|
+
|
|
+ end = add_msg_type(&m->options[4], DHCPDISCOVER);
|
|
+ end = add_req_options(end);
|
|
+ end = add_end(end);
|
|
+
|
|
+ uip_appsend(s->ustack, s->ustack->uip_appdata,
|
|
+ end - (u8_t *) s->ustack->uip_appdata);
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static void send_request(struct dhcpc_state *s)
|
|
+{
|
|
+ u8_t *end;
|
|
+ struct dhcp_msg *m = (struct dhcp_msg *)s->ustack->uip_appdata;
|
|
+
|
|
+ create_msg(s, m);
|
|
+
|
|
+ end = add_msg_type(&m->options[4], DHCPREQUEST);
|
|
+ end = add_server_id(s, end);
|
|
+ end = add_req_ipaddr(s, end);
|
|
+ end = add_end(end);
|
|
+
|
|
+ uip_appsend(s->ustack, s->ustack->uip_appdata,
|
|
+ end - (u8_t *) s->ustack->uip_appdata);
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static u8_t parse_options(struct dhcpc_state *s, u8_t * optptr, int len)
|
|
+{
|
|
+ u8_t *end = optptr + len;
|
|
+ u8_t type = 0;
|
|
+
|
|
+ while (optptr < end) {
|
|
+ switch (*optptr) {
|
|
+ case DHCP_OPTION_SUBNET_MASK:
|
|
+ memcpy(s->netmask, optptr + 2, 4);
|
|
+ break;
|
|
+ case DHCP_OPTION_ROUTER:
|
|
+ memcpy(s->default_router, optptr + 2, 4);
|
|
+ break;
|
|
+ case DHCP_OPTION_DNS_SERVER:
|
|
+ memcpy(s->dnsaddr, optptr + 2, 4);
|
|
+ break;
|
|
+ case DHCP_OPTION_MSG_TYPE:
|
|
+ type = *(optptr + 2);
|
|
+ break;
|
|
+ case DHCP_OPTION_SERVER_ID:
|
|
+ memcpy(s->serverid, optptr + 2, 4);
|
|
+ break;
|
|
+ case DHCP_OPTION_LEASE_TIME:
|
|
+ memcpy(s->lease_time, optptr + 2, 4);
|
|
+ break;
|
|
+ case DHCP_OPTION_END:
|
|
+ return type;
|
|
+ }
|
|
+
|
|
+ optptr += optptr[1] + 2;
|
|
+ }
|
|
+ return type;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static u8_t parse_msg(struct dhcpc_state *s)
|
|
+{
|
|
+ struct dhcp_msg *m = (struct dhcp_msg *)s->ustack->uip_appdata;
|
|
+
|
|
+ if (m->op == DHCP_REPLY &&
|
|
+ memcmp(m->xid, xid, sizeof(xid)) == 0 &&
|
|
+ memcmp(m->chaddr, s->mac_addr, s->mac_len) == 0) {
|
|
+ memcpy(s->ipaddr, m->yiaddr, 4);
|
|
+ return parse_options(s, &m->options[4], uip_datalen(s->ustack));
|
|
+ }
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static PT_THREAD(handle_dhcp(struct uip_stack *ustack))
|
|
+{
|
|
+ struct dhcpc_state *s;
|
|
+ s = ustack->dhcpc;
|
|
+
|
|
+ if (s == NULL) {
|
|
+ LOG_WARN("Could not find dhcpc state");
|
|
+ return PT_ENDED;
|
|
+ }
|
|
+
|
|
+ PT_BEGIN(&s->pt);
|
|
+
|
|
+ /* try_again: */
|
|
+ s->state = STATE_SENDING;
|
|
+ s->ticks = CLOCK_SECOND;
|
|
+
|
|
+ do {
|
|
+ send_discover(s);
|
|
+ timer_set(&s->timer, s->ticks);
|
|
+ PT_WAIT_UNTIL(&s->pt, uip_newdata(s->ustack)
|
|
+ || timer_expired(&s->timer));
|
|
+
|
|
+ if (uip_newdata(s->ustack) && parse_msg(s) == DHCPOFFER) {
|
|
+ s->state = STATE_OFFER_RECEIVED;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ if (s->ticks < CLOCK_SECOND * 60) {
|
|
+ s->ticks += CLOCK_SECOND;
|
|
+ } else {
|
|
+ PT_RESTART(&s->pt);
|
|
+ }
|
|
+ } while (s->state != STATE_OFFER_RECEIVED);
|
|
+
|
|
+ s->ticks = CLOCK_SECOND;
|
|
+
|
|
+ do {
|
|
+ send_request(s);
|
|
+ timer_set(&s->timer, s->ticks);
|
|
+ s->ustack->uip_flags &= ~UIP_NEWDATA;
|
|
+ PT_WAIT_UNTIL(&s->pt, uip_newdata(s->ustack)
|
|
+ || timer_expired(&s->timer));
|
|
+
|
|
+ if (uip_newdata(s->ustack) && parse_msg(s) == DHCPACK) {
|
|
+ s->state = STATE_CONFIG_RECEIVED;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ if (s->ticks <= CLOCK_SECOND * 10) {
|
|
+ s->ticks += CLOCK_SECOND;
|
|
+ } else {
|
|
+ PT_RESTART(&s->pt);
|
|
+ }
|
|
+ } while (s->state != STATE_CONFIG_RECEIVED);
|
|
+
|
|
+ LOG_INFO("Got IP address %d.%d.%d.%d",
|
|
+ uip_ipaddr1(s->ipaddr), uip_ipaddr2(s->ipaddr),
|
|
+ uip_ipaddr3(s->ipaddr), uip_ipaddr4(s->ipaddr));
|
|
+ LOG_INFO("Got netmask %d.%d.%d.%d",
|
|
+ uip_ipaddr1(s->netmask), uip_ipaddr2(s->netmask),
|
|
+ uip_ipaddr3(s->netmask), uip_ipaddr4(s->netmask));
|
|
+ LOG_INFO("Got DNS server %d.%d.%d.%d",
|
|
+ uip_ipaddr1(s->dnsaddr), uip_ipaddr2(s->dnsaddr),
|
|
+ uip_ipaddr3(s->dnsaddr), uip_ipaddr4(s->dnsaddr));
|
|
+ LOG_INFO("Got default router %d.%d.%d.%d",
|
|
+ uip_ipaddr1(s->default_router), uip_ipaddr2(s->default_router),
|
|
+ uip_ipaddr3(s->default_router),
|
|
+ uip_ipaddr4(s->default_router));
|
|
+ s->lease_time_nl32 =
|
|
+ ntohs(s->lease_time[0]) * 65536ul + ntohs(s->lease_time[1]);
|
|
+ LOG_INFO("Lease expires in %ld seconds", s->lease_time_nl32);
|
|
+
|
|
+ s->last_update = time(NULL);
|
|
+
|
|
+ set_uip_stack(s->ustack,
|
|
+ (uip_ip4addr_t *) s->ipaddr,
|
|
+ (uip_ip4addr_t *) s->netmask,
|
|
+ (uip_ip4addr_t *) s->default_router,
|
|
+ (uint8_t *) s->mac_addr);
|
|
+
|
|
+ /* Put the stack thread back into a long sleep */
|
|
+ s->nic->state |= NIC_LONG_SLEEP;
|
|
+
|
|
+ /* timer_stop(&s.timer); */
|
|
+
|
|
+ /* Handle DHCP lease expiration */
|
|
+ s->ticks = CLOCK_SECOND * s->lease_time_nl32;
|
|
+ timer_set(&s->timer, s->ticks);
|
|
+ PT_WAIT_UNTIL(&s->pt, timer_expired(&s->timer));
|
|
+ LOG_INFO("Lease expired, re-acquire IP address");
|
|
+ s->nic->state &= ~NIC_LONG_SLEEP;
|
|
+ PT_RESTART(&s->pt);
|
|
+
|
|
+ /*
|
|
+ * PT_END restarts the thread so we do this instead. Eventually we
|
|
+ * should reacquire expired leases here.
|
|
+ */
|
|
+
|
|
+ while (1) {
|
|
+ PT_YIELD(&s->pt);
|
|
+ }
|
|
+
|
|
+ PT_END(&(s->pt));
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+int dhcpc_init(nic_t * nic, struct uip_stack *ustack,
|
|
+ const void *mac_addr, int mac_len)
|
|
+{
|
|
+ uip_ip4addr_t addr;
|
|
+ struct dhcpc_state *s = ustack->dhcpc;
|
|
+
|
|
+ if (s) {
|
|
+ LOG_DEBUG("DHCP: DHCP context already allocated");
|
|
+ return -EALREADY;
|
|
+ }
|
|
+ s = malloc(sizeof(*s));
|
|
+ if (s == NULL) {
|
|
+ LOG_ERR("Couldn't allocate size for dhcpc info");
|
|
+ return -ENOMEM;
|
|
+ }
|
|
+
|
|
+ memset(s, 0, sizeof(*s));
|
|
+ s->nic = nic;
|
|
+ s->ustack = ustack;
|
|
+ s->mac_addr = mac_addr;
|
|
+ s->mac_len = mac_len;
|
|
+ s->state = STATE_INITIAL;
|
|
+
|
|
+ /* Initialize XID to randomly */
|
|
+ if (dhcpc_opt.enable_random_xid == 1) {
|
|
+ u32_t gen_xid;
|
|
+ gen_xid = random();
|
|
+ memcpy(xid, &gen_xid, sizeof(gen_xid));
|
|
+ }
|
|
+ uip_ipaddr(addr, 255, 255, 255, 255);
|
|
+ s->conn = uip_udp_new(ustack, &addr, const_htons(DHCPC_SERVER_PORT));
|
|
+ if (s->conn != NULL) {
|
|
+ uip_udp_bind(s->conn, const_htons(DHCPC_CLIENT_PORT));
|
|
+ }
|
|
+
|
|
+ ustack->dhcpc = s;
|
|
+
|
|
+ /* Let the RX poll value take over */
|
|
+ nic->state &= ~NIC_LONG_SLEEP;
|
|
+
|
|
+ PT_INIT(&s->pt);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+void dhcpc_appcall(struct uip_stack *ustack)
|
|
+{
|
|
+ handle_dhcp(ustack);
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+void dhcpc_request(struct uip_stack *ustack)
|
|
+{
|
|
+ struct dhcpc_state *s = ustack->dhcpc;
|
|
+
|
|
+ if (s != NULL && s->state == STATE_INITIAL) {
|
|
+ handle_dhcp(ustack);
|
|
+ }
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/dhcpc/dhcpc.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/dhcpc/dhcpc.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/dhcpc/dhcpc.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/dhcpc/dhcpc.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,88 @@
|
|
+/*
|
|
+ * Copyright (c) 2005, Swedish Institute of Computer Science
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. Neither the name of the Institute nor the names of its contributors
|
|
+ * may be used to endorse or promote products derived from this software
|
|
+ * without specific prior written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
|
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
|
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
+ * SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack
|
|
+ *
|
|
+ * @(#)$Id: dhcpc.h,v 1.3 2006/06/11 21:46:37 adam Exp $
|
|
+ */
|
|
+#ifndef __DHCPC_H__
|
|
+#define __DHCPC_H__
|
|
+
|
|
+#include <time.h>
|
|
+
|
|
+#include "nic.h"
|
|
+#include "timer.h"
|
|
+#include "pt.h"
|
|
+#include "uip.h"
|
|
+
|
|
+#define STATE_INITIAL 0
|
|
+#define STATE_SENDING 1
|
|
+#define STATE_OFFER_RECEIVED 2
|
|
+#define STATE_CONFIG_RECEIVED 3
|
|
+
|
|
+struct dhcpc_state {
|
|
+ struct pt pt;
|
|
+
|
|
+ nic_t *nic;
|
|
+ struct uip_stack *ustack;
|
|
+ char state;
|
|
+ struct uip_udp_conn *conn;
|
|
+ struct timer timer;
|
|
+ u32_t ticks;
|
|
+ const void *mac_addr;
|
|
+ int mac_len;
|
|
+
|
|
+ u8_t serverid[4];
|
|
+
|
|
+ u16_t lease_time[2];
|
|
+ u32_t lease_time_nl32;
|
|
+ u16_t ipaddr[2];
|
|
+ u16_t netmask[2];
|
|
+ u16_t dnsaddr[2];
|
|
+ u16_t default_router[2];
|
|
+
|
|
+ time_t last_update;
|
|
+};
|
|
+
|
|
+struct dhcpc_options {
|
|
+ u8_t enable_random_xid;
|
|
+ u8_t xid[4];
|
|
+};
|
|
+
|
|
+int dhcpc_init(nic_t * nic, struct uip_stack *ustack,
|
|
+ const void *mac_addr, int mac_len);
|
|
+void dhcpc_request(struct uip_stack *ustack);
|
|
+
|
|
+void dhcpc_appcall(struct uip_stack *ustack);
|
|
+
|
|
+void dhcpc_configured(const struct dhcpc_state *s);
|
|
+
|
|
+typedef struct dhcpc_state uip_udp_appstate_t;
|
|
+#define UIP_UDP_APPCALL dhcpc_appcall
|
|
+
|
|
+#endif /* __DHCPC_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/dhcpc/dhcpv6.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/dhcpc/dhcpv6.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/dhcpc/dhcpv6.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/dhcpc/dhcpv6.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,515 @@
|
|
+/*
|
|
+ * Copyright (c) 2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Eddie Wai <eddie.wai@broadcom.com>
|
|
+ * Based on code from Kevin Tran's iSCSI boot code
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * dhcpv6.c - DHCPv6 engine
|
|
+ *
|
|
+ */
|
|
+#include <stdio.h>
|
|
+#include <string.h>
|
|
+
|
|
+#include "ipv6.h"
|
|
+#include "ipv6_pkt.h"
|
|
+#include "dhcpv6.h"
|
|
+#include "logger.h"
|
|
+
|
|
+/* Local function prototypes */
|
|
+STATIC int dhcpv6_send_solicit_packet(pDHCPV6_CONTEXT dhcpv6_context);
|
|
+STATIC int dhcpv6_send_request_packet(pDHCPV6_CONTEXT dhcpv6_context);
|
|
+STATIC u16_t dhcpv6_init_packet(pDHCPV6_CONTEXT dhcpv6_context, u8_t type);
|
|
+STATIC void dhcpv6_init_dhcpv6_server_addr(pIPV6_ADDR addr);
|
|
+//STATIC int dhcpv6_wait_for_dhcp_done(pPACKET_IPV6 pkt,int timeout);
|
|
+STATIC void dhcpv6_handle_advertise(pDHCPV6_CONTEXT dhcpv6_context,
|
|
+ u16_t dhcpv6_len);
|
|
+STATIC void dhcpv6_handle_reply(pDHCPV6_CONTEXT dhcpv6_context,
|
|
+ u16_t dhcpv6_len);
|
|
+STATIC int dhcpv6_process_opt_ia_na(pDHCPV6_CONTEXT dhcpv6_context,
|
|
+ pDHCPV6_OPT_HDR opt_hdr);
|
|
+STATIC void dhcpv6_process_opt_dns_servers(pDHCPV6_CONTEXT dhcpv6_context,
|
|
+ pDHCPV6_OPT_HDR opt_hdr);
|
|
+STATIC void dhcpv6_parse_vendor_option(pDHCPV6_CONTEXT dhcpv6_context,
|
|
+ u8_t * option, int len);
|
|
+
|
|
+void dhcpv6_init(pDHCPV6_CONTEXT dhcpv6_context)
|
|
+{
|
|
+ dhcpv6_context->seconds = 0;
|
|
+ dhcpv6_context->our_mac_addr =
|
|
+ ipv6_get_link_addr(dhcpv6_context->ipv6_context);
|
|
+
|
|
+ /* Use the last four bytes of MAC address as base of the transaction
|
|
+ ID */
|
|
+ dhcpv6_context->dhcpv6_transaction_id =
|
|
+ *((u32_t *) & dhcpv6_context->our_mac_addr->addr[2]) & 0xffffffL;
|
|
+
|
|
+ dhcpv6_context->dhcpv6_done = FALSE;
|
|
+ strcpy(dhcpv6_context->dhcp_vendor_id, "BRCM ISAN");
|
|
+}
|
|
+
|
|
+int dhcpv6_do_discovery(pDHCPV6_CONTEXT dhcpv6_context)
|
|
+{
|
|
+ int retc = ISCSI_FAILURE;
|
|
+
|
|
+ dhcpv6_context->eth =
|
|
+ (pETH_HDR) dhcpv6_context->ipv6_context->ustack->data_link_layer;
|
|
+ dhcpv6_context->ipv6 =
|
|
+ (pIPV6_HDR) dhcpv6_context->ipv6_context->ustack->network_layer;
|
|
+ dhcpv6_context->udp =
|
|
+ (pUDP_HDR) ((u8_t *) dhcpv6_context->ipv6 + sizeof(IPV6_HDR));
|
|
+ LOG_INFO("dhcpv6: ipv6c=%p, ustack=%p eth=%p ipv6=%p udp=%p",
|
|
+ dhcpv6_context->ipv6_context,
|
|
+ dhcpv6_context->ipv6_context->ustack, dhcpv6_context->eth,
|
|
+ dhcpv6_context->ipv6, dhcpv6_context->udp);
|
|
+
|
|
+ /* Send out DHCPv6 Solicit packet. */
|
|
+ dhcpv6_send_solicit_packet(dhcpv6_context);
|
|
+
|
|
+ return retc;
|
|
+}
|
|
+
|
|
+STATIC int dhcpv6_send_solicit_packet(pDHCPV6_CONTEXT dhcpv6_context)
|
|
+{
|
|
+ u16_t packet_len;
|
|
+
|
|
+ LOG_DEBUG("DHCPV6: Send solicit");
|
|
+ packet_len = dhcpv6_init_packet(dhcpv6_context, DHCPV6_SOLICIT);
|
|
+ dhcpv6_context->dhcpv6_state = DHCPV6_STATE_SOLICIT_SENT;
|
|
+ ipv6_send_udp_packet(dhcpv6_context->ipv6_context, packet_len);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+STATIC int dhcpv6_send_request_packet(pDHCPV6_CONTEXT dhcpv6_context)
|
|
+{
|
|
+ u16_t packet_len;
|
|
+
|
|
+ LOG_DEBUG("DHCPV6: Send request");
|
|
+ packet_len = dhcpv6_init_packet(dhcpv6_context, DHCPV6_REQUEST);
|
|
+
|
|
+ dhcpv6_context->dhcpv6_state = DHCPV6_STATE_REQ_SENT;
|
|
+ ipv6_send_udp_packet(dhcpv6_context->ipv6_context, packet_len);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+STATIC u16_t dhcpv6_init_packet(pDHCPV6_CONTEXT dhcpv6_context, u8_t type)
|
|
+{
|
|
+ u16_t pkt_len;
|
|
+ UDP_HDR *udp = dhcpv6_context->udp;
|
|
+ pDHCPV6_HDR dhcpv6;
|
|
+ pDHCPV6_OPTION opt;
|
|
+ u16_t len;
|
|
+
|
|
+ /* Initialize dest IP with well-known DHCP server address */
|
|
+ dhcpv6_init_dhcpv6_server_addr(&dhcpv6_context->ipv6->ipv6_dst);
|
|
+ /* Initialize dest MAC based on MC dest IP */
|
|
+ ipv6_mc_init_dest_mac(dhcpv6_context->eth, dhcpv6_context->ipv6);
|
|
+
|
|
+ /* Initialize UDP header */
|
|
+ udp->src_port = HOST_TO_NET16(DHCPV6_CLIENT_PORT);
|
|
+ udp->dest_port = HOST_TO_NET16(DHCPV6_SERVER_PORT);
|
|
+
|
|
+ /*
|
|
+ * DHCPv6 section has the following format per RFC 3315
|
|
+ *
|
|
+ * 0 1 2 3
|
|
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
|
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
+ * | msg-type | transaction-id |
|
|
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
+ * | |
|
|
+ * . options .
|
|
+ * . (variable) .
|
|
+ * | |
|
|
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
+ */
|
|
+ dhcpv6 = (pDHCPV6_HDR) ((u8_t *) udp + sizeof(UDP_HDR));
|
|
+
|
|
+ if (dhcpv6->dhcpv6_type != type) {
|
|
+ dhcpv6_context->dhcpv6_transaction_id++;
|
|
+ }
|
|
+
|
|
+ dhcpv6->dhcpv6_trans_id = dhcpv6_context->dhcpv6_transaction_id;
|
|
+ dhcpv6->dhcpv6_type = type;
|
|
+
|
|
+ /* Keep track of length of all DHCP options. */
|
|
+ pkt_len = sizeof(DHCPV6_HDR);
|
|
+
|
|
+ if (dhcpv6->dhcpv6_type == DHCPV6_REQUEST) {
|
|
+ /* We will send back whatever DHCPv6 sent us */
|
|
+ return ((u8_t *) udp - (u8_t *) dhcpv6_context->eth +
|
|
+ NET_TO_HOST16(udp->length));
|
|
+ }
|
|
+
|
|
+ opt = (pDHCPV6_OPTION) ((u8_t *) dhcpv6 + sizeof(DHCPV6_HDR));
|
|
+ /* Add client ID option */
|
|
+ opt->hdr.type = HOST_TO_NET16(DHCPV6_OPT_CLIENTID);
|
|
+ opt->hdr.length = HOST_TO_NET16(sizeof(DHCPV6_OPT_CLIENT_ID));
|
|
+ opt->type.client_id.duid_type =
|
|
+ HOST_TO_NET16(DHCPV6_DUID_TYPE_LINK_LAYER);
|
|
+ opt->type.client_id.hw_type = HOST_TO_NET16(DHCPV6_HW_TYPE_ETHERNET);
|
|
+ memcpy((char __FAR__ *)&opt->type.client_id.link_layer_addr,
|
|
+ (char __FAR__ *)dhcpv6_context->our_mac_addr, sizeof(MAC_ADDR));
|
|
+ pkt_len += sizeof(DHCPV6_OPT_CLIENT_ID) + sizeof(DHCPV6_OPT_HDR);
|
|
+ opt = (pDHCPV6_OPTION) ((u8_t *) opt + sizeof(DHCPV6_OPT_CLIENT_ID) +
|
|
+ sizeof(DHCPV6_OPT_HDR));
|
|
+
|
|
+ /* Add Vendor Class option if it's configured */
|
|
+ if ((len = strlen(dhcpv6_context->dhcp_vendor_id)) > 0) {
|
|
+ opt->hdr.type = HOST_TO_NET16(DHCPV6_OPT_VENDOR_CLASS);
|
|
+ opt->hdr.length = HOST_TO_NET16(sizeof(DHCPV6_VENDOR_CLASS) +
|
|
+ len - 1);
|
|
+ opt->type.vendor_class.enterprise_number =
|
|
+ HOST_TO_NET32(IANA_ENTERPRISE_NUM_BROADCOM);
|
|
+ opt->type.vendor_class.vendor_class_length = HOST_TO_NET16(len);
|
|
+ memcpy((char __FAR__ *)&opt->type.vendor_class.
|
|
+ vendor_class_data[0],
|
|
+ (char __FAR__ *)dhcpv6_context->dhcp_vendor_id, len);
|
|
+ pkt_len +=
|
|
+ sizeof(DHCPV6_VENDOR_CLASS) - 1 + len +
|
|
+ sizeof(DHCPV6_OPT_HDR);
|
|
+ opt =
|
|
+ (pDHCPV6_OPTION) ((u8_t *) opt +
|
|
+ sizeof(DHCPV6_VENDOR_CLASS) - 1 + len +
|
|
+ sizeof(DHCPV6_OPT_HDR));
|
|
+ }
|
|
+
|
|
+ /* Add IA_NA option */
|
|
+ opt->hdr.type = HOST_TO_NET16(DHCPV6_OPT_IA_NA);
|
|
+ opt->hdr.length = HOST_TO_NET16(sizeof(DHCPV6_OPT_ID_ASSOC_NA));
|
|
+ opt->type.ida_na.iaid =
|
|
+ htonl(*((u32_t *) & dhcpv6_context->our_mac_addr->addr[2]));
|
|
+ opt->type.ida_na.t1 = 0;
|
|
+ opt->type.ida_na.t2 = 0;
|
|
+ pkt_len += sizeof(DHCPV6_OPT_ID_ASSOC_NA) + sizeof(DHCPV6_OPT_HDR);
|
|
+ opt = (pDHCPV6_OPTION) ((u8_t *) opt + sizeof(DHCPV6_OPT_ID_ASSOC_NA) +
|
|
+ sizeof(DHCPV6_OPT_HDR));
|
|
+ /* Add Elapsed Time option */
|
|
+ opt->hdr.type = HOST_TO_NET16(DHCPV6_OPT_ELAPSED_TIME);
|
|
+ opt->hdr.length = HOST_TO_NET16(sizeof(DHCPV6_OPT_ELAPSE_TIME));
|
|
+ opt->type.elapsed_time.time = HOST_TO_NET16(dhcpv6_context->seconds);
|
|
+ pkt_len += sizeof(DHCPV6_OPT_ELAPSE_TIME) + sizeof(DHCPV6_OPT_HDR);
|
|
+
|
|
+ /* Add Option Request List */
|
|
+ opt = (pDHCPV6_OPTION) ((u8_t *) opt + sizeof(DHCPV6_OPT_ELAPSE_TIME) +
|
|
+ sizeof(DHCPV6_OPT_HDR));
|
|
+ opt->hdr.type = HOST_TO_NET16(DHCPV6_OPT_ORO);
|
|
+ opt->hdr.length = HOST_TO_NET16(3 * sizeof(DHCPV6_OPT_REQUEST_LIST));
|
|
+ opt->type.list.request_code[0] = HOST_TO_NET16(DHCPV6_OPT_VENDOR_CLASS);
|
|
+ opt->type.list.request_code[1] = HOST_TO_NET16(DHCPV6_OPT_VENDOR_OPTS);
|
|
+ opt->type.list.request_code[2] = HOST_TO_NET16(DHCPV6_OPT_DNS_SERVERS);
|
|
+ pkt_len += 3 * sizeof(DHCPV6_OPT_REQUEST_LIST) + sizeof(DHCPV6_OPT_HDR);
|
|
+
|
|
+ udp->length = HOST_TO_NET16(sizeof(UDP_HDR) + pkt_len);
|
|
+
|
|
+ pkt_len +=
|
|
+ ((u8_t *) udp - (u8_t *) dhcpv6_context->eth) + sizeof(UDP_HDR);
|
|
+
|
|
+ return pkt_len;
|
|
+}
|
|
+
|
|
+STATIC void dhcpv6_init_dhcpv6_server_addr(pIPV6_ADDR addr)
|
|
+{
|
|
+ /* Well-known DHCPv6 server address is ff02::1:2 */
|
|
+ memset((char __FAR__ *)addr, 0, sizeof(IPV6_ADDR));
|
|
+ addr->addr8[0] = 0xff;
|
|
+ addr->addr8[1] = 0x02;
|
|
+ addr->addr8[13] = 0x01;
|
|
+ addr->addr8[15] = 0x02;
|
|
+}
|
|
+
|
|
+void ipv6_udp_handle_dhcp(pDHCPV6_CONTEXT dhcpv6_context)
|
|
+{
|
|
+ pDHCPV6_HDR dhcpv6;
|
|
+ u16_t dhcpv6_len;
|
|
+
|
|
+ if (dhcpv6_context->dhcpv6_done == TRUE)
|
|
+ return;
|
|
+
|
|
+ dhcpv6 = (pDHCPV6_HDR) ((u8_t *) dhcpv6_context->udp + sizeof(UDP_HDR));
|
|
+
|
|
+ if (dhcpv6->dhcpv6_trans_id != dhcpv6_context->dhcpv6_transaction_id)
|
|
+ return;
|
|
+
|
|
+ dhcpv6_len =
|
|
+ NET_TO_HOST16(dhcpv6_context->udp->length) - sizeof(UDP_HDR);
|
|
+
|
|
+ switch (dhcpv6->dhcpv6_type) {
|
|
+ case DHCPV6_ADVERTISE:
|
|
+ dhcpv6_handle_advertise(dhcpv6_context, dhcpv6_len);
|
|
+ break;
|
|
+
|
|
+ case DHCPV6_REPLY:
|
|
+ dhcpv6_handle_reply(dhcpv6_context, dhcpv6_len);
|
|
+ break;
|
|
+
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
+}
|
|
+
|
|
+STATIC void dhcpv6_handle_advertise(pDHCPV6_CONTEXT dhcpv6_context,
|
|
+ u16_t dhcpv6_len)
|
|
+{
|
|
+ pDHCPV6_HDR dhcpv6 =
|
|
+ (pDHCPV6_HDR) ((u8_t *) dhcpv6_context->udp + sizeof(UDP_HDR));
|
|
+ pDHCPV6_OPT_HDR opt;
|
|
+ u16_t type;
|
|
+ int i;
|
|
+ int opt_len;
|
|
+ u8_t *vendor_id = NULL;
|
|
+ u16_t vendor_id_len = 0;
|
|
+ u8_t *vendor_opt_data = NULL;
|
|
+ int vendor_opt_len = 0;
|
|
+ int addr_cnt = 0;
|
|
+
|
|
+ /* We only handle DHCPv6 advertise if we recently sent DHCPv6 solicit */
|
|
+ if (dhcpv6_context->dhcpv6_state != DHCPV6_STATE_SOLICIT_SENT)
|
|
+ return;
|
|
+
|
|
+ LOG_DEBUG("DHCPV6: handle advertise");
|
|
+ dhcpv6_context->dhcpv6_state = DHCPV6_STATE_ADV_RCVD;
|
|
+
|
|
+ i = 0;
|
|
+ while (i < (dhcpv6_len - sizeof(DHCPV6_HDR))) {
|
|
+ opt =
|
|
+ (pDHCPV6_OPT_HDR) ((u8_t *) dhcpv6 + sizeof(DHCPV6_HDR) +
|
|
+ i);
|
|
+ opt_len = NET_TO_HOST16(opt->length);
|
|
+
|
|
+ type = NET_TO_HOST16(opt->type);
|
|
+
|
|
+ /* We only care about some of the options */
|
|
+ switch (type) {
|
|
+ case DHCPV6_OPT_IA_NA:
|
|
+ if (dhcpv6_context->
|
|
+ dhcpv6_task & DHCPV6_TASK_GET_IP_ADDRESS) {
|
|
+ addr_cnt +=
|
|
+ dhcpv6_process_opt_ia_na(dhcpv6_context,
|
|
+ opt);
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ case DHCPV6_OPT_VENDOR_CLASS:
|
|
+ vendor_id_len =
|
|
+ NET_TO_HOST16(((pDHCPV6_OPTION) opt)->type.
|
|
+ vendor_class.vendor_class_length);
|
|
+ vendor_id =
|
|
+ &((pDHCPV6_OPTION) opt)->type.vendor_class.
|
|
+ vendor_class_data[0];
|
|
+ break;
|
|
+
|
|
+ case DHCPV6_OPT_VENDOR_OPTS:
|
|
+ vendor_opt_len = opt_len - 4;
|
|
+ vendor_opt_data =
|
|
+ &((pDHCPV6_OPTION) opt)->type.vendor_opts.
|
|
+ vendor_opt_data[0];
|
|
+ break;
|
|
+
|
|
+ case DHCPV6_OPT_DNS_SERVERS:
|
|
+ if (dhcpv6_context->
|
|
+ dhcpv6_task & DHCPV6_TASK_GET_OTHER_PARAMS)
|
|
+ dhcpv6_process_opt_dns_servers(dhcpv6_context,
|
|
+ opt);
|
|
+ break;
|
|
+
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ i += NET_TO_HOST16(opt->length) + sizeof(DHCPV6_OPT_HDR);
|
|
+ }
|
|
+
|
|
+ if (dhcpv6_context->dhcpv6_task & DHCPV6_TASK_GET_OTHER_PARAMS) {
|
|
+ if ((vendor_id_len > 0) &&
|
|
+ (strncmp((char __FAR__ *)vendor_id,
|
|
+ (char __FAR__ *)dhcpv6_context->dhcp_vendor_id,
|
|
+ vendor_id_len) == 0)) {
|
|
+ dhcpv6_parse_vendor_option(dhcpv6_context,
|
|
+ vendor_opt_data,
|
|
+ vendor_opt_len);
|
|
+ dhcpv6_context->dhcpv6_done = TRUE;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (dhcpv6_context->dhcpv6_task & DHCPV6_TASK_GET_IP_ADDRESS) {
|
|
+ if (addr_cnt > 0) {
|
|
+ /*
|
|
+ * If we need to acquire IP address from the server,
|
|
+ * we need to send Request to server to confirm.
|
|
+ */
|
|
+ dhcpv6_send_request_packet(dhcpv6_context);
|
|
+ dhcpv6_context->dhcpv6_done = TRUE;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (dhcpv6_context->dhcpv6_done) {
|
|
+ /* Keep track of IPv6 address of DHCHv6 server */
|
|
+ memcpy((char __FAR__ *)&dhcpv6_context->dhcp_server,
|
|
+ (char __FAR__ *)&dhcpv6_context->ipv6->ipv6_src,
|
|
+ sizeof(IPV6_ADDR));
|
|
+ }
|
|
+}
|
|
+
|
|
+STATIC int dhcpv6_process_opt_ia_na(pDHCPV6_CONTEXT dhcpv6_context,
|
|
+ pDHCPV6_OPT_HDR opt_hdr)
|
|
+{
|
|
+ int i;
|
|
+ int opt_len;
|
|
+ pDHCPV6_OPTION opt;
|
|
+ int len;
|
|
+ int addr_cnt;
|
|
+ opt_len =
|
|
+ NET_TO_HOST16(opt_hdr->length) - sizeof(DHCPV6_OPT_ID_ASSOC_NA);
|
|
+
|
|
+ i = 0;
|
|
+ addr_cnt = 0;
|
|
+ while (i < opt_len) {
|
|
+ opt =
|
|
+ (pDHCPV6_OPTION) ((u8_t *) opt_hdr +
|
|
+ sizeof(DHCPV6_OPT_HDR) +
|
|
+ sizeof(DHCPV6_OPT_ID_ASSOC_NA) + i);
|
|
+
|
|
+ len = NET_TO_HOST16(opt->hdr.length);
|
|
+ switch (NET_TO_HOST16(opt->hdr.type)) {
|
|
+ case DHCPV6_OPT_IAADDR:
|
|
+ if (len >
|
|
+ (sizeof(DHCPV6_OPT_HDR) +
|
|
+ sizeof(DHCPV6_OPT_IAA_ADDR))) {
|
|
+ pDHCPV6_OPTION in_opt;
|
|
+
|
|
+ in_opt =
|
|
+ (pDHCPV6_OPTION) ((u8_t *) opt +
|
|
+ sizeof(DHCPV6_OPT_HDR) +
|
|
+ sizeof
|
|
+ (DHCPV6_OPT_IAA_ADDR));
|
|
+ if (in_opt->hdr.type ==
|
|
+ HOST_TO_NET16(DHCPV6_OPT_STATUS_CODE)) {
|
|
+ /* This entry has error! */
|
|
+ if (in_opt->type.sts.status != 0)
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+ LOG_INFO("DHCPv6: Got IP Addr");
|
|
+ /* Status is OK, let's add this addr to our address
|
|
+ list */
|
|
+ ipv6_add_prefix_entry(dhcpv6_context->ipv6_context,
|
|
+ &opt->type.iaa_addr.addr, 64);
|
|
+
|
|
+ /* Add multicast address for this address */
|
|
+ ipv6_add_solit_node_address(dhcpv6_context->
|
|
+ ipv6_context,
|
|
+ &opt->type.iaa_addr.addr);
|
|
+ addr_cnt++;
|
|
+ break;
|
|
+
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ i += len + sizeof(DHCPV6_OPT_HDR);
|
|
+ }
|
|
+
|
|
+ return addr_cnt;
|
|
+}
|
|
+
|
|
+STATIC void dhcpv6_process_opt_dns_servers(pDHCPV6_CONTEXT dhcpv6_context,
|
|
+ pDHCPV6_OPT_HDR opt_hdr)
|
|
+{
|
|
+ int opt_len;
|
|
+
|
|
+ opt_len = NET_TO_HOST16(opt_hdr->length);
|
|
+
|
|
+ if (opt_len >= sizeof(IPV6_ADDR)) {
|
|
+ memcpy((char __FAR__ *)&dhcpv6_context->primary_dns_server,
|
|
+ (char __FAR__ *)&((pDHCPV6_OPTION) opt_hdr)->type.dns.
|
|
+ primary_addr, sizeof(IPV6_ADDR));
|
|
+ }
|
|
+
|
|
+ if (opt_len >= 2 * sizeof(IPV6_ADDR)) {
|
|
+ memcpy((char __FAR__ *)&dhcpv6_context->secondary_dns_server,
|
|
+ (char __FAR__ *)&((pDHCPV6_OPTION) opt_hdr)->type.dns.
|
|
+ secondary_addr, sizeof(IPV6_ADDR));
|
|
+ }
|
|
+}
|
|
+
|
|
+STATIC void dhcpv6_handle_reply(pDHCPV6_CONTEXT dhcpv6_context,
|
|
+ u16_t dhcpv6_len)
|
|
+{
|
|
+ if (dhcpv6_context->dhcpv6_state != DHCPV6_STATE_REQ_SENT)
|
|
+ return;
|
|
+
|
|
+ dhcpv6_context->dhcpv6_done = TRUE;
|
|
+}
|
|
+
|
|
+STATIC void dhcpv6_parse_vendor_option(pDHCPV6_CONTEXT dhcpv6_context,
|
|
+ u8_t * option, int len)
|
|
+{
|
|
+ pDHCPV6_OPTION opt;
|
|
+ u16_t type;
|
|
+ int opt_len;
|
|
+ int data_len;
|
|
+ int i;
|
|
+ u8_t *data;
|
|
+
|
|
+ for (i = 0; i < len; i += opt_len + sizeof(DHCPV6_OPT_HDR)) {
|
|
+ opt = (pDHCPV6_OPTION) ((u8_t *) option + i);
|
|
+ type = HOST_TO_NET16(opt->hdr.type);
|
|
+ opt_len = HOST_TO_NET16(opt->hdr.length);
|
|
+ data = &opt->type.data[0];
|
|
+ data_len = strlen((char *)data);
|
|
+
|
|
+ switch (type) {
|
|
+ case 201:
|
|
+ /* iSCSI target 1 */
|
|
+// iscsiAddiScsiTargetInfo(data,0);
|
|
+ break;
|
|
+
|
|
+ case 202:
|
|
+ /* iSCSI target 2 */
|
|
+// iscsiAddiScsiTargetInfo(data,1);
|
|
+ break;
|
|
+
|
|
+ case 203:
|
|
+ if (data_len > ISCSI_MAX_ISCSI_NAME_LENGTH)
|
|
+ data_len = ISCSI_MAX_ISCSI_NAME_LENGTH;
|
|
+ data[data_len] = '\0';
|
|
+ strcpy(dhcpv6_context->initiatorName, (char *)data);
|
|
+// itolowerstr(dhcpv6_context->initiatorName);
|
|
+ break;
|
|
+
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+}
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/dhcpc/dhcpv6.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/dhcpc/dhcpv6.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/dhcpc/dhcpv6.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/dhcpc/dhcpv6.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,263 @@
|
|
+/*
|
|
+ * Copyright (c) 2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Eddie Wai <eddie.wai@broadcom.com>
|
|
+ * Based on code from Kevin Tran's iSCSI boot code
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * dhcpv6.h - DHCPv6 engine header
|
|
+ *
|
|
+ */
|
|
+#ifndef __IDHCPV6_H__
|
|
+#define __IDHCPV6_H__
|
|
+
|
|
+#include "ipv6_ndpc.h"
|
|
+#include "ipv6.h"
|
|
+
|
|
+#ifdef PACK_DATA_STRUCTURE
|
|
+#pragma pack(push,1)
|
|
+#endif
|
|
+
|
|
+#define ISCSI_MAX_ISCSI_NAME_LENGTH 128
|
|
+/* DHCPv6 Message types. */
|
|
+#define DHCPV6_SOLICIT 1
|
|
+#define DHCPV6_ADVERTISE 2
|
|
+#define DHCPV6_REQUEST 3
|
|
+#define DHCPV6_CONFIRM 4
|
|
+#define DHCPV6_RENEW 5
|
|
+#define DHCPV6_REBIND 6
|
|
+#define DHCPV6_REPLY 7
|
|
+#define DHCPV6_RELEASE 8
|
|
+#define DHCPV6_DECLINE 9
|
|
+#define DHCPV6_RECONFIGURE 10
|
|
+#define DHCPV6_INFO_REQUEST 11
|
|
+#define DHCPV6_RELAY_FORW 12
|
|
+#define DHCPV6_RELAY_REPL 13
|
|
+
|
|
+/* Option codes. */
|
|
+#define DHCPV6_OPT_CLIENTID 1 /* Client ID option - built by stack */
|
|
+#define DHCPV6_OPT_SERVERID 2 /* Server ID option - built by stack */
|
|
+#define DHCPV6_OPT_IA_NA 3 /* IA_NA option - built by user */
|
|
+#define DHCPV6_OPT_IA_TA 4 /* IA_TA option - not supported */
|
|
+#define DHCPV6_OPT_IAADDR 5 /* IA_ADDR option - built by user */
|
|
+#define DHCPV6_OPT_ORO 6 /* Option Request Option - built by
|
|
+ stack */
|
|
+#define DHCPV6_OPT_PREFERENCE 7 /* Preference option - built by server
|
|
+ */
|
|
+#define DHCPV6_OPT_ELAPSED_TIME 8 /* Elapsed Time option - built by stack
|
|
+ */
|
|
+#define DHCPV6_OPT_RELAY_MSG 9 /* Relay Message option - not supported
|
|
+ */
|
|
+#define DHCPV6_OPT_AUTH 11 /* Authentication option - built by
|
|
+ stack */
|
|
+#define DHCPV6_OPT_UNICAST 12 /* Server Unicast option - built by
|
|
+ server */
|
|
+#define DHCPV6_OPT_STATUS_CODE 13 /* Status Code option - built by stack
|
|
+ */
|
|
+#define DHCPV6_OPT_RAPID_COMMIT 14 /* Rapid Commit option - built by user
|
|
+ */
|
|
+#define DHCPV6_OPT_USER_CLASS 15 /* User Class option - built by user */
|
|
+#define DHCPV6_OPT_VENDOR_CLASS 16 /* Vendor Class option - built by user
|
|
+ */
|
|
+#define DHCPV6_OPT_VENDOR_OPTS 17 /* Vendor-Specific Information option -
|
|
+ build by user */
|
|
+#define DHCPV6_OPT_INTERFACE_ID 18 /* Interface ID option - not supported
|
|
+ */
|
|
+#define DHCPV6_OPT_RECONF_MSG 19 /* Reconfigure Message option - built
|
|
+ by server */
|
|
+#define DHCPV6_OPT_RECONF_ACCEPT 20 /* Reconfigure Accept option - built by
|
|
+ user */
|
|
+#define DHCPV6_OPT_SIP_SERVER_D 21 /* NOT SUPPORTED - included for
|
|
+ completeness only */
|
|
+#define DHCPV6_OPT_SIP_SERVER_A 22 /* NOT SUPPORTED - included for
|
|
+ completeness only */
|
|
+#define DHCPV6_OPT_DNS_SERVERS 23 /* DNS Recursive Name Server option -
|
|
+ built by server */
|
|
+#define DHCPV6_OPT_DOMAIN_LIST 24 /* Domain Search List option - not
|
|
+ supported */
|
|
+#define DHCPV6_MAX_OPT_CODES 25 /* This will be the count + 1 since
|
|
+ the parsing array starts
|
|
+ at [1] instead of [0] */
|
|
+
|
|
+/* Authentication protocol types. */
|
|
+#define DHCPV6_DELAYED_AUTH_PROT 2 /* Delayed Authentication protocol. */
|
|
+#define DHCPV6_RECON_KEY_AUTH_PROT 3 /* Reconfigure Key Authentication
|
|
+ protocol. */
|
|
+
|
|
+typedef struct DHCPV6_CONTEXT {
|
|
+#define DHCP_VENDOR_ID_LEN 128
|
|
+ char dhcp_vendor_id[DHCP_VENDOR_ID_LEN];
|
|
+ MAC_ADDRESS *our_mac_addr;
|
|
+ u32_t dhcpv6_transaction_id;
|
|
+ u16_t seconds;
|
|
+ int timeout;
|
|
+ int dhcpv6_done;
|
|
+
|
|
+#define DHCPV6_STATE_UNKNOWN 0
|
|
+#define DHCPV6_STATE_SOLICIT_SENT 1
|
|
+#define DHCPV6_STATE_ADV_RCVD 2
|
|
+#define DHCPV6_STATE_REQ_SENT 3
|
|
+#define DHCPV6_STATE_CONFIRM_SENT 4
|
|
+ int dhcpv6_state;
|
|
+ u16_t dhcpv6_task;
|
|
+ pIPV6_CONTEXT ipv6_context;
|
|
+ pETH_HDR eth;
|
|
+ pIPV6_HDR ipv6;
|
|
+ pUDP_HDR udp;
|
|
+
|
|
+ char initiatorName[ISCSI_MAX_ISCSI_NAME_LENGTH];
|
|
+ IPV6_ADDR dhcp_server;
|
|
+ IPV6_ADDR primary_dns_server;
|
|
+ IPV6_ADDR secondary_dns_server;
|
|
+
|
|
+} DHCPV6_CONTEXT, *pDHCPV6_CONTEXT;
|
|
+
|
|
+typedef union DHCPV6_HDR {
|
|
+ struct {
|
|
+ u32_t type:8;
|
|
+ u32_t trans_id:24;
|
|
+ } field;
|
|
+
|
|
+ u32_t type_transaction;
|
|
+} DHCPV6_HDR, *pDHCPV6_HDR;
|
|
+
|
|
+#define dhcpv6_type field.type
|
|
+#define dhcpv6_trans_id field.trans_id
|
|
+
|
|
+typedef struct DHCPV6_OPT_HDR {
|
|
+ u16_t type;
|
|
+ u16_t length;
|
|
+} DHCPV6_OPT_HDR, *pDHCPV6_OPT_HDR;
|
|
+
|
|
+typedef struct DHCPV6_OPT_CLIENT_ID {
|
|
+ u16_t duid_type;
|
|
+#define DHCPV6_DUID_TYPE_LINK_LAYER_AND_TIME 1
|
|
+#define DHCPV6_DUID_TYPE_VENDOR_BASED 2
|
|
+#define DHCPV6_DUID_TYPE_LINK_LAYER 3
|
|
+ u16_t hw_type;
|
|
+#define DHCPV6_HW_TYPE_ETHERNET 1
|
|
+// u32_t time;
|
|
+ MAC_ADDR link_layer_addr;
|
|
+} DHCPV6_OPT_CLIENT_ID, *pDHCPV6_OPT_CLIENT_ID;
|
|
+
|
|
+typedef struct DHCPV6_OPT_ID_ASSOC_NA {
|
|
+ u32_t iaid;
|
|
+#define DHCPV6_OPT_IA_NA_IAID 0x306373L
|
|
+ u32_t t1;
|
|
+ u32_t t2;
|
|
+} DHCPV6_OPT_ID_ASSOC_NA, *pDHCPV6_OPT_ID_ASSOC_NA;
|
|
+
|
|
+typedef struct DHCPV6_OPT_ELAPSE_TIME {
|
|
+ u16_t time;
|
|
+} DHCPV6_OPT_ELAPSE_TIME, *pDHCPV6_OPT_ELAPSE_TIME;
|
|
+
|
|
+typedef struct DHCPV6_OPT_IAA_ADDR {
|
|
+ IPV6_ADDR addr;
|
|
+ u32_t preferred_lifetime;
|
|
+ u32_t valid_lifetime;
|
|
+} DHCPV6_OPT_IAA_ADDR, *pDHCPV6_OPT_IAA_ADDR;
|
|
+
|
|
+typedef struct DHCPV6_OPT_STATUS {
|
|
+ u16_t status;
|
|
+} DHCPV6_OPT_STATUS, *pDHCPV6_OPT_STATUS;
|
|
+
|
|
+typedef struct DHCPV6_OPT_REQUEST_LIST {
|
|
+ u16_t request_code[1];
|
|
+} DHCPV6_OPT_REQUEST_LIST, *pDHCPV6_OPT_REQUEST_LIST;
|
|
+
|
|
+typedef struct DHCPV6_OPT_DNS {
|
|
+ IPV6_ADDR primary_addr;
|
|
+ IPV6_ADDR secondary_addr;
|
|
+} DHCPV6_OPT_DNS, *pDHCPV6_OPT_DNS;
|
|
+
|
|
+typedef struct DHCPV6_VENDOR_CLASS {
|
|
+ u32_t enterprise_number;
|
|
+ u16_t vendor_class_length;
|
|
+ u8_t vendor_class_data[1];
|
|
+} DHCPV6_VENDOR_CLASS, *pDHCPV6_VENDOR_CLASS;
|
|
+
|
|
+typedef struct DHCPV6_VENDOR_OPTS {
|
|
+ u32_t enterprise_number;
|
|
+ u8_t vendor_opt_data[1];
|
|
+} DHCPV6_VENDOR_OPTS, *pDHCPV6_VENDOR_OPTS;
|
|
+
|
|
+typedef struct DHCPV6_OPTION {
|
|
+ DHCPV6_OPT_HDR hdr;
|
|
+ union {
|
|
+ DHCPV6_VENDOR_OPTS vendor_opts;
|
|
+ DHCPV6_VENDOR_CLASS vendor_class;
|
|
+ DHCPV6_OPT_CLIENT_ID client_id;
|
|
+ DHCPV6_OPT_ID_ASSOC_NA ida_na;
|
|
+ DHCPV6_OPT_ELAPSE_TIME elapsed_time;
|
|
+ DHCPV6_OPT_IAA_ADDR iaa_addr;
|
|
+ DHCPV6_OPT_STATUS sts;
|
|
+ DHCPV6_OPT_REQUEST_LIST list;
|
|
+ DHCPV6_OPT_DNS dns;
|
|
+ u8_t data[1];
|
|
+ } type;
|
|
+
|
|
+} DHCPV6_OPTION, *pDHCPV6_OPTION;
|
|
+
|
|
+#ifdef PACK_DATA_STRUCTURE
|
|
+#pragma pack(pop)
|
|
+#endif
|
|
+
|
|
+#define DHCPV6_NUM_OF_RETRY 4
|
|
+
|
|
+#define DHCPV6_ACK_TIMEOUT 2
|
|
+
|
|
+#define IANA_ENTERPRISE_NUM_BROADCOM 0x113d
|
|
+
|
|
+/* Broadcom Extended DHCP options used in iSCSI boot */
|
|
+#define DHCPV6_TAG_FIRST_ISCSI_TARGET_NAME 201
|
|
+#define DHCPV6_TAG_SECOND_ISCSI_TARGET_NAME 202
|
|
+#define DHCPV6_TAG_ISCSI_INITIATOR_NAME 203
|
|
+
|
|
+#define MAX_DHCP_RX_OFFERS 4
|
|
+#define MAX_DHCP_OPTION43_LENGTH 1024
|
|
+
|
|
+#define DHCPV6_TASK_GET_IP_ADDRESS 0x1
|
|
+#define DHCPV6_TASK_GET_OTHER_PARAMS 0x2
|
|
+
|
|
+enum {
|
|
+ ISCSI_FAILURE,
|
|
+ ISCSI_USER_ABORT,
|
|
+ ISCSI_SUCCESS
|
|
+};
|
|
+
|
|
+//const int dhcpv6_retry_timeout[DHCPV6_NUM_OF_RETRY] = {1,2,4,8};
|
|
+
|
|
+/* Function prototypes */
|
|
+int dhcpv6_do_discovery(pDHCPV6_CONTEXT dhcpv6_context);
|
|
+void ipv6_udp_handle_dhcp(pDHCPV6_CONTEXT dhcpv6_context);
|
|
+void dhcpv6_init(pDHCPV6_CONTEXT dhcpv6_context);
|
|
+
|
|
+#endif /* __IDHCPV6_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/dhcpc/Makefile.am open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/dhcpc/Makefile.am
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/dhcpc/Makefile.am 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/dhcpc/Makefile.am 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,14 @@
|
|
+INCLUDES = -I${top_srcdir}/src/unix \
|
|
+ -I${top_srcdir}/src/uip \
|
|
+ -I${top_srcdir}/src/apps/dhcpc \
|
|
+ -I${top_srcdir}/src/apps/brcm-iscsi \
|
|
+ -I${top_srcdir}/include
|
|
+
|
|
+noinst_LIBRARIES = lib_apps_dhcpc.a
|
|
+
|
|
+lib_apps_dhcpc_a_SOURCES = dhcpc.c dhcpv6.c
|
|
+
|
|
+lib_apps_dhcpc_a_CFLAGS = $(AM_CFLAGS) \
|
|
+ -DBYTE_ORDER=@ENDIAN@
|
|
+
|
|
+
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/dhcpc/Makefile.dhcpc open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/dhcpc/Makefile.dhcpc
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/dhcpc/Makefile.dhcpc 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/dhcpc/Makefile.dhcpc 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1 @@
|
|
+APP_SOURCES += dhcpc.c timer.c
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/dhcpc/Makefile.in open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/dhcpc/Makefile.in
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/dhcpc/Makefile.in 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/dhcpc/Makefile.in 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,460 @@
|
|
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
|
+# @configure_input@
|
|
+
|
|
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
|
+# 2003, 2004, 2005 Free Software Foundation, Inc.
|
|
+# This Makefile.in 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.
|
|
+
|
|
+# This program is distributed in the hope that it will be useful,
|
|
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
|
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
+# PARTICULAR PURPOSE.
|
|
+
|
|
+@SET_MAKE@
|
|
+
|
|
+srcdir = @srcdir@
|
|
+top_srcdir = @top_srcdir@
|
|
+VPATH = @srcdir@
|
|
+pkgdatadir = $(datadir)/@PACKAGE@
|
|
+pkglibdir = $(libdir)/@PACKAGE@
|
|
+pkgincludedir = $(includedir)/@PACKAGE@
|
|
+top_builddir = ../../..
|
|
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
|
+INSTALL = @INSTALL@
|
|
+install_sh_DATA = $(install_sh) -c -m 644
|
|
+install_sh_PROGRAM = $(install_sh) -c
|
|
+install_sh_SCRIPT = $(install_sh) -c
|
|
+INSTALL_HEADER = $(INSTALL_DATA)
|
|
+transform = $(program_transform_name)
|
|
+NORMAL_INSTALL = :
|
|
+PRE_INSTALL = :
|
|
+POST_INSTALL = :
|
|
+NORMAL_UNINSTALL = :
|
|
+PRE_UNINSTALL = :
|
|
+POST_UNINSTALL = :
|
|
+build_triplet = @build@
|
|
+host_triplet = @host@
|
|
+subdir = src/apps/dhcpc
|
|
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
|
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
|
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
|
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
|
+ $(ACLOCAL_M4)
|
|
+mkinstalldirs = $(install_sh) -d
|
|
+CONFIG_HEADER = $(top_builddir)/config.h
|
|
+CONFIG_CLEAN_FILES =
|
|
+LIBRARIES = $(noinst_LIBRARIES)
|
|
+ARFLAGS = cru
|
|
+lib_apps_dhcpc_a_AR = $(AR) $(ARFLAGS)
|
|
+lib_apps_dhcpc_a_LIBADD =
|
|
+am_lib_apps_dhcpc_a_OBJECTS = lib_apps_dhcpc_a-dhcpc.$(OBJEXT) \
|
|
+ lib_apps_dhcpc_a-dhcpv6.$(OBJEXT)
|
|
+lib_apps_dhcpc_a_OBJECTS = $(am_lib_apps_dhcpc_a_OBJECTS)
|
|
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
|
+depcomp = $(SHELL) $(top_srcdir)/depcomp
|
|
+am__depfiles_maybe = depfiles
|
|
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
|
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
|
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
|
|
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
|
+ $(AM_CFLAGS) $(CFLAGS)
|
|
+CCLD = $(CC)
|
|
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
|
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
|
+SOURCES = $(lib_apps_dhcpc_a_SOURCES)
|
|
+DIST_SOURCES = $(lib_apps_dhcpc_a_SOURCES)
|
|
+ETAGS = etags
|
|
+CTAGS = ctags
|
|
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
|
+ACLOCAL = @ACLOCAL@
|
|
+AMDEP_FALSE = @AMDEP_FALSE@
|
|
+AMDEP_TRUE = @AMDEP_TRUE@
|
|
+AMTAR = @AMTAR@
|
|
+AR = @AR@
|
|
+AUTOCONF = @AUTOCONF@
|
|
+AUTOHEADER = @AUTOHEADER@
|
|
+AUTOMAKE = @AUTOMAKE@
|
|
+AWK = @AWK@
|
|
+BASH = @BASH@
|
|
+CC = @CC@
|
|
+CCDEPMODE = @CCDEPMODE@
|
|
+CFLAGS = @CFLAGS@
|
|
+CPP = @CPP@
|
|
+CPPFLAGS = @CPPFLAGS@
|
|
+CXX = @CXX@
|
|
+CXXCPP = @CXXCPP@
|
|
+CXXDEPMODE = @CXXDEPMODE@
|
|
+CXXFLAGS = @CXXFLAGS@
|
|
+CYGPATH_W = @CYGPATH_W@
|
|
+DEBUG_FALSE = @DEBUG_FALSE@
|
|
+DEBUG_TRUE = @DEBUG_TRUE@
|
|
+DEFS = @DEFS@
|
|
+DEPDIR = @DEPDIR@
|
|
+ECHO = @ECHO@
|
|
+ECHO_C = @ECHO_C@
|
|
+ECHO_N = @ECHO_N@
|
|
+ECHO_T = @ECHO_T@
|
|
+EGREP = @EGREP@
|
|
+ENDIAN = @ENDIAN@
|
|
+EXEEXT = @EXEEXT@
|
|
+F77 = @F77@
|
|
+FFLAGS = @FFLAGS@
|
|
+INSTALL_DATA = @INSTALL_DATA@
|
|
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
|
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
|
+LDFLAGS = @LDFLAGS@
|
|
+LIBOBJS = @LIBOBJS@
|
|
+LIBS = @LIBS@
|
|
+LIBTOOL = @LIBTOOL@
|
|
+LN_S = @LN_S@
|
|
+LTLIBOBJS = @LTLIBOBJS@
|
|
+MAKEINFO = @MAKEINFO@
|
|
+OBJEXT = @OBJEXT@
|
|
+PACKAGE = @PACKAGE@
|
|
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
|
+PACKAGE_NAME = @PACKAGE_NAME@
|
|
+PACKAGE_STRING = @PACKAGE_STRING@
|
|
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
|
+PACKAGE_VERSION = @PACKAGE_VERSION@
|
|
+PATH_SEPARATOR = @PATH_SEPARATOR@
|
|
+RANLIB = @RANLIB@
|
|
+SED = @SED@
|
|
+SET_MAKE = @SET_MAKE@
|
|
+SHELL = @SHELL@
|
|
+STRIP = @STRIP@
|
|
+VERSION = @VERSION@
|
|
+ac_ct_AR = @ac_ct_AR@
|
|
+ac_ct_CC = @ac_ct_CC@
|
|
+ac_ct_CXX = @ac_ct_CXX@
|
|
+ac_ct_F77 = @ac_ct_F77@
|
|
+ac_ct_RANLIB = @ac_ct_RANLIB@
|
|
+ac_ct_STRIP = @ac_ct_STRIP@
|
|
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
|
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
|
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
|
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
|
+am__include = @am__include@
|
|
+am__leading_dot = @am__leading_dot@
|
|
+am__quote = @am__quote@
|
|
+am__tar = @am__tar@
|
|
+am__untar = @am__untar@
|
|
+bindir = @bindir@
|
|
+build = @build@
|
|
+build_alias = @build_alias@
|
|
+build_cpu = @build_cpu@
|
|
+build_os = @build_os@
|
|
+build_vendor = @build_vendor@
|
|
+datadir = @datadir@
|
|
+exec_prefix = @exec_prefix@
|
|
+host = @host@
|
|
+host_alias = @host_alias@
|
|
+host_cpu = @host_cpu@
|
|
+host_os = @host_os@
|
|
+host_vendor = @host_vendor@
|
|
+includedir = @includedir@
|
|
+infodir = @infodir@
|
|
+install_sh = @install_sh@
|
|
+libdir = @libdir@
|
|
+libexecdir = @libexecdir@
|
|
+localstatedir = @localstatedir@
|
|
+mandir = @mandir@
|
|
+mkdir_p = @mkdir_p@
|
|
+oldincludedir = @oldincludedir@
|
|
+prefix = @prefix@
|
|
+program_transform_name = @program_transform_name@
|
|
+sbindir = @sbindir@
|
|
+sharedstatedir = @sharedstatedir@
|
|
+sysconfdir = @sysconfdir@
|
|
+target_alias = @target_alias@
|
|
+INCLUDES = -I${top_srcdir}/src/unix \
|
|
+ -I${top_srcdir}/src/uip \
|
|
+ -I${top_srcdir}/src/apps/dhcpc \
|
|
+ -I${top_srcdir}/src/apps/brcm-iscsi \
|
|
+ -I${top_srcdir}/include
|
|
+
|
|
+noinst_LIBRARIES = lib_apps_dhcpc.a
|
|
+lib_apps_dhcpc_a_SOURCES = dhcpc.c dhcpv6.c
|
|
+lib_apps_dhcpc_a_CFLAGS = $(AM_CFLAGS) \
|
|
+ -DBYTE_ORDER=@ENDIAN@
|
|
+
|
|
+all: all-am
|
|
+
|
|
+.SUFFIXES:
|
|
+.SUFFIXES: .c .lo .o .obj
|
|
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
|
+ @for dep in $?; do \
|
|
+ case '$(am__configure_deps)' in \
|
|
+ *$$dep*) \
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
|
+ && exit 0; \
|
|
+ exit 1;; \
|
|
+ esac; \
|
|
+ done; \
|
|
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/apps/dhcpc/Makefile'; \
|
|
+ cd $(top_srcdir) && \
|
|
+ $(AUTOMAKE) --gnu src/apps/dhcpc/Makefile
|
|
+.PRECIOUS: Makefile
|
|
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
|
+ @case '$?' in \
|
|
+ *config.status*) \
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
|
+ *) \
|
|
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
|
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
|
+ esac;
|
|
+
|
|
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+
|
|
+$(top_srcdir)/configure: $(am__configure_deps)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+
|
|
+clean-noinstLIBRARIES:
|
|
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
|
|
+lib_apps_dhcpc.a: $(lib_apps_dhcpc_a_OBJECTS) $(lib_apps_dhcpc_a_DEPENDENCIES)
|
|
+ -rm -f lib_apps_dhcpc.a
|
|
+ $(lib_apps_dhcpc_a_AR) lib_apps_dhcpc.a $(lib_apps_dhcpc_a_OBJECTS) $(lib_apps_dhcpc_a_LIBADD)
|
|
+ $(RANLIB) lib_apps_dhcpc.a
|
|
+
|
|
+mostlyclean-compile:
|
|
+ -rm -f *.$(OBJEXT)
|
|
+
|
|
+distclean-compile:
|
|
+ -rm -f *.tab.c
|
|
+
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_apps_dhcpc_a-dhcpc.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_apps_dhcpc_a-dhcpv6.Po@am__quote@
|
|
+
|
|
+.c.o:
|
|
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
|
|
+
|
|
+.c.obj:
|
|
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
|
|
+
|
|
+.c.lo:
|
|
+@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
|
|
+
|
|
+lib_apps_dhcpc_a-dhcpc.o: dhcpc.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_apps_dhcpc_a_CFLAGS) $(CFLAGS) -MT lib_apps_dhcpc_a-dhcpc.o -MD -MP -MF "$(DEPDIR)/lib_apps_dhcpc_a-dhcpc.Tpo" -c -o lib_apps_dhcpc_a-dhcpc.o `test -f 'dhcpc.c' || echo '$(srcdir)/'`dhcpc.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_apps_dhcpc_a-dhcpc.Tpo" "$(DEPDIR)/lib_apps_dhcpc_a-dhcpc.Po"; else rm -f "$(DEPDIR)/lib_apps_dhcpc_a-dhcpc.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dhcpc.c' object='lib_apps_dhcpc_a-dhcpc.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_apps_dhcpc_a_CFLAGS) $(CFLAGS) -c -o lib_apps_dhcpc_a-dhcpc.o `test -f 'dhcpc.c' || echo '$(srcdir)/'`dhcpc.c
|
|
+
|
|
+lib_apps_dhcpc_a-dhcpc.obj: dhcpc.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_apps_dhcpc_a_CFLAGS) $(CFLAGS) -MT lib_apps_dhcpc_a-dhcpc.obj -MD -MP -MF "$(DEPDIR)/lib_apps_dhcpc_a-dhcpc.Tpo" -c -o lib_apps_dhcpc_a-dhcpc.obj `if test -f 'dhcpc.c'; then $(CYGPATH_W) 'dhcpc.c'; else $(CYGPATH_W) '$(srcdir)/dhcpc.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_apps_dhcpc_a-dhcpc.Tpo" "$(DEPDIR)/lib_apps_dhcpc_a-dhcpc.Po"; else rm -f "$(DEPDIR)/lib_apps_dhcpc_a-dhcpc.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dhcpc.c' object='lib_apps_dhcpc_a-dhcpc.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_apps_dhcpc_a_CFLAGS) $(CFLAGS) -c -o lib_apps_dhcpc_a-dhcpc.obj `if test -f 'dhcpc.c'; then $(CYGPATH_W) 'dhcpc.c'; else $(CYGPATH_W) '$(srcdir)/dhcpc.c'; fi`
|
|
+
|
|
+lib_apps_dhcpc_a-dhcpv6.o: dhcpv6.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_apps_dhcpc_a_CFLAGS) $(CFLAGS) -MT lib_apps_dhcpc_a-dhcpv6.o -MD -MP -MF "$(DEPDIR)/lib_apps_dhcpc_a-dhcpv6.Tpo" -c -o lib_apps_dhcpc_a-dhcpv6.o `test -f 'dhcpv6.c' || echo '$(srcdir)/'`dhcpv6.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_apps_dhcpc_a-dhcpv6.Tpo" "$(DEPDIR)/lib_apps_dhcpc_a-dhcpv6.Po"; else rm -f "$(DEPDIR)/lib_apps_dhcpc_a-dhcpv6.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dhcpv6.c' object='lib_apps_dhcpc_a-dhcpv6.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_apps_dhcpc_a_CFLAGS) $(CFLAGS) -c -o lib_apps_dhcpc_a-dhcpv6.o `test -f 'dhcpv6.c' || echo '$(srcdir)/'`dhcpv6.c
|
|
+
|
|
+lib_apps_dhcpc_a-dhcpv6.obj: dhcpv6.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_apps_dhcpc_a_CFLAGS) $(CFLAGS) -MT lib_apps_dhcpc_a-dhcpv6.obj -MD -MP -MF "$(DEPDIR)/lib_apps_dhcpc_a-dhcpv6.Tpo" -c -o lib_apps_dhcpc_a-dhcpv6.obj `if test -f 'dhcpv6.c'; then $(CYGPATH_W) 'dhcpv6.c'; else $(CYGPATH_W) '$(srcdir)/dhcpv6.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_apps_dhcpc_a-dhcpv6.Tpo" "$(DEPDIR)/lib_apps_dhcpc_a-dhcpv6.Po"; else rm -f "$(DEPDIR)/lib_apps_dhcpc_a-dhcpv6.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dhcpv6.c' object='lib_apps_dhcpc_a-dhcpv6.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_apps_dhcpc_a_CFLAGS) $(CFLAGS) -c -o lib_apps_dhcpc_a-dhcpv6.obj `if test -f 'dhcpv6.c'; then $(CYGPATH_W) 'dhcpv6.c'; else $(CYGPATH_W) '$(srcdir)/dhcpv6.c'; fi`
|
|
+
|
|
+mostlyclean-libtool:
|
|
+ -rm -f *.lo
|
|
+
|
|
+clean-libtool:
|
|
+ -rm -rf .libs _libs
|
|
+
|
|
+distclean-libtool:
|
|
+ -rm -f libtool
|
|
+uninstall-info-am:
|
|
+
|
|
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ mkid -fID $$unique
|
|
+tags: TAGS
|
|
+
|
|
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
|
+ $(TAGS_FILES) $(LISP)
|
|
+ tags=; \
|
|
+ here=`pwd`; \
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
|
+ test -n "$$unique" || unique=$$empty_fix; \
|
|
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
|
+ $$tags $$unique; \
|
|
+ fi
|
|
+ctags: CTAGS
|
|
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
|
+ $(TAGS_FILES) $(LISP)
|
|
+ tags=; \
|
|
+ here=`pwd`; \
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
|
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
|
+ $$tags $$unique
|
|
+
|
|
+GTAGS:
|
|
+ here=`$(am__cd) $(top_builddir) && pwd` \
|
|
+ && cd $(top_srcdir) \
|
|
+ && gtags -i $(GTAGS_ARGS) $$here
|
|
+
|
|
+distclean-tags:
|
|
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
|
+
|
|
+distdir: $(DISTFILES)
|
|
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
|
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
|
+ list='$(DISTFILES)'; for file in $$list; do \
|
|
+ case $$file in \
|
|
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
|
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
|
+ esac; \
|
|
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
|
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
|
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
|
+ dir="/$$dir"; \
|
|
+ $(mkdir_p) "$(distdir)$$dir"; \
|
|
+ else \
|
|
+ dir=''; \
|
|
+ fi; \
|
|
+ if test -d $$d/$$file; then \
|
|
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
|
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
|
+ fi; \
|
|
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
|
+ else \
|
|
+ test -f $(distdir)/$$file \
|
|
+ || cp -p $$d/$$file $(distdir)/$$file \
|
|
+ || exit 1; \
|
|
+ fi; \
|
|
+ done
|
|
+check-am: all-am
|
|
+check: check-am
|
|
+all-am: Makefile $(LIBRARIES)
|
|
+installdirs:
|
|
+install: install-am
|
|
+install-exec: install-exec-am
|
|
+install-data: install-data-am
|
|
+uninstall: uninstall-am
|
|
+
|
|
+install-am: all-am
|
|
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
|
+
|
|
+installcheck: installcheck-am
|
|
+install-strip:
|
|
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
|
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
|
+ `test -z '$(STRIP)' || \
|
|
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
|
+mostlyclean-generic:
|
|
+
|
|
+clean-generic:
|
|
+
|
|
+distclean-generic:
|
|
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
|
+
|
|
+maintainer-clean-generic:
|
|
+ @echo "This command is intended for maintainers to use"
|
|
+ @echo "it deletes files that may require special tools to rebuild."
|
|
+clean: clean-am
|
|
+
|
|
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
|
|
+ mostlyclean-am
|
|
+
|
|
+distclean: distclean-am
|
|
+ -rm -rf ./$(DEPDIR)
|
|
+ -rm -f Makefile
|
|
+distclean-am: clean-am distclean-compile distclean-generic \
|
|
+ distclean-libtool distclean-tags
|
|
+
|
|
+dvi: dvi-am
|
|
+
|
|
+dvi-am:
|
|
+
|
|
+html: html-am
|
|
+
|
|
+info: info-am
|
|
+
|
|
+info-am:
|
|
+
|
|
+install-data-am:
|
|
+
|
|
+install-exec-am:
|
|
+
|
|
+install-info: install-info-am
|
|
+
|
|
+install-man:
|
|
+
|
|
+installcheck-am:
|
|
+
|
|
+maintainer-clean: maintainer-clean-am
|
|
+ -rm -rf ./$(DEPDIR)
|
|
+ -rm -f Makefile
|
|
+maintainer-clean-am: distclean-am maintainer-clean-generic
|
|
+
|
|
+mostlyclean: mostlyclean-am
|
|
+
|
|
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
|
+ mostlyclean-libtool
|
|
+
|
|
+pdf: pdf-am
|
|
+
|
|
+pdf-am:
|
|
+
|
|
+ps: ps-am
|
|
+
|
|
+ps-am:
|
|
+
|
|
+uninstall-am: uninstall-info-am
|
|
+
|
|
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
|
+ clean-libtool clean-noinstLIBRARIES ctags distclean \
|
|
+ distclean-compile distclean-generic distclean-libtool \
|
|
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
|
|
+ install install-am install-data install-data-am install-exec \
|
|
+ install-exec-am install-info install-info-am install-man \
|
|
+ install-strip installcheck installcheck-am installdirs \
|
|
+ maintainer-clean maintainer-clean-generic mostlyclean \
|
|
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
|
|
+ pdf pdf-am ps ps-am tags uninstall uninstall-am \
|
|
+ uninstall-info-am
|
|
+
|
|
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
|
+# Otherwise a system limit (for SysV at least) may be exceeded.
|
|
+.NOEXPORT:
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/Makefile.am open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/Makefile.am
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/Makefile.am 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/Makefile.am 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1 @@
|
|
+SUBDIRS = dhcpc brcm-iscsi
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/Makefile.in open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/Makefile.in
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/Makefile.in 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/Makefile.in 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,471 @@
|
|
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
|
+# @configure_input@
|
|
+
|
|
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
|
+# 2003, 2004, 2005 Free Software Foundation, Inc.
|
|
+# This Makefile.in 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.
|
|
+
|
|
+# This program is distributed in the hope that it will be useful,
|
|
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
|
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
+# PARTICULAR PURPOSE.
|
|
+
|
|
+@SET_MAKE@
|
|
+srcdir = @srcdir@
|
|
+top_srcdir = @top_srcdir@
|
|
+VPATH = @srcdir@
|
|
+pkgdatadir = $(datadir)/@PACKAGE@
|
|
+pkglibdir = $(libdir)/@PACKAGE@
|
|
+pkgincludedir = $(includedir)/@PACKAGE@
|
|
+top_builddir = ../..
|
|
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
|
+INSTALL = @INSTALL@
|
|
+install_sh_DATA = $(install_sh) -c -m 644
|
|
+install_sh_PROGRAM = $(install_sh) -c
|
|
+install_sh_SCRIPT = $(install_sh) -c
|
|
+INSTALL_HEADER = $(INSTALL_DATA)
|
|
+transform = $(program_transform_name)
|
|
+NORMAL_INSTALL = :
|
|
+PRE_INSTALL = :
|
|
+POST_INSTALL = :
|
|
+NORMAL_UNINSTALL = :
|
|
+PRE_UNINSTALL = :
|
|
+POST_UNINSTALL = :
|
|
+build_triplet = @build@
|
|
+host_triplet = @host@
|
|
+subdir = src/apps
|
|
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
|
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
|
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
|
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
|
+ $(ACLOCAL_M4)
|
|
+mkinstalldirs = $(install_sh) -d
|
|
+CONFIG_HEADER = $(top_builddir)/config.h
|
|
+CONFIG_CLEAN_FILES =
|
|
+SOURCES =
|
|
+DIST_SOURCES =
|
|
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
|
+ html-recursive info-recursive install-data-recursive \
|
|
+ install-exec-recursive install-info-recursive \
|
|
+ install-recursive installcheck-recursive installdirs-recursive \
|
|
+ pdf-recursive ps-recursive uninstall-info-recursive \
|
|
+ uninstall-recursive
|
|
+ETAGS = etags
|
|
+CTAGS = ctags
|
|
+DIST_SUBDIRS = $(SUBDIRS)
|
|
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
|
+ACLOCAL = @ACLOCAL@
|
|
+AMDEP_FALSE = @AMDEP_FALSE@
|
|
+AMDEP_TRUE = @AMDEP_TRUE@
|
|
+AMTAR = @AMTAR@
|
|
+AR = @AR@
|
|
+AUTOCONF = @AUTOCONF@
|
|
+AUTOHEADER = @AUTOHEADER@
|
|
+AUTOMAKE = @AUTOMAKE@
|
|
+AWK = @AWK@
|
|
+BASH = @BASH@
|
|
+CC = @CC@
|
|
+CCDEPMODE = @CCDEPMODE@
|
|
+CFLAGS = @CFLAGS@
|
|
+CPP = @CPP@
|
|
+CPPFLAGS = @CPPFLAGS@
|
|
+CXX = @CXX@
|
|
+CXXCPP = @CXXCPP@
|
|
+CXXDEPMODE = @CXXDEPMODE@
|
|
+CXXFLAGS = @CXXFLAGS@
|
|
+CYGPATH_W = @CYGPATH_W@
|
|
+DEBUG_FALSE = @DEBUG_FALSE@
|
|
+DEBUG_TRUE = @DEBUG_TRUE@
|
|
+DEFS = @DEFS@
|
|
+DEPDIR = @DEPDIR@
|
|
+ECHO = @ECHO@
|
|
+ECHO_C = @ECHO_C@
|
|
+ECHO_N = @ECHO_N@
|
|
+ECHO_T = @ECHO_T@
|
|
+EGREP = @EGREP@
|
|
+ENDIAN = @ENDIAN@
|
|
+EXEEXT = @EXEEXT@
|
|
+F77 = @F77@
|
|
+FFLAGS = @FFLAGS@
|
|
+INSTALL_DATA = @INSTALL_DATA@
|
|
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
|
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
|
+LDFLAGS = @LDFLAGS@
|
|
+LIBOBJS = @LIBOBJS@
|
|
+LIBS = @LIBS@
|
|
+LIBTOOL = @LIBTOOL@
|
|
+LN_S = @LN_S@
|
|
+LTLIBOBJS = @LTLIBOBJS@
|
|
+MAKEINFO = @MAKEINFO@
|
|
+OBJEXT = @OBJEXT@
|
|
+PACKAGE = @PACKAGE@
|
|
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
|
+PACKAGE_NAME = @PACKAGE_NAME@
|
|
+PACKAGE_STRING = @PACKAGE_STRING@
|
|
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
|
+PACKAGE_VERSION = @PACKAGE_VERSION@
|
|
+PATH_SEPARATOR = @PATH_SEPARATOR@
|
|
+RANLIB = @RANLIB@
|
|
+SED = @SED@
|
|
+SET_MAKE = @SET_MAKE@
|
|
+SHELL = @SHELL@
|
|
+STRIP = @STRIP@
|
|
+VERSION = @VERSION@
|
|
+ac_ct_AR = @ac_ct_AR@
|
|
+ac_ct_CC = @ac_ct_CC@
|
|
+ac_ct_CXX = @ac_ct_CXX@
|
|
+ac_ct_F77 = @ac_ct_F77@
|
|
+ac_ct_RANLIB = @ac_ct_RANLIB@
|
|
+ac_ct_STRIP = @ac_ct_STRIP@
|
|
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
|
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
|
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
|
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
|
+am__include = @am__include@
|
|
+am__leading_dot = @am__leading_dot@
|
|
+am__quote = @am__quote@
|
|
+am__tar = @am__tar@
|
|
+am__untar = @am__untar@
|
|
+bindir = @bindir@
|
|
+build = @build@
|
|
+build_alias = @build_alias@
|
|
+build_cpu = @build_cpu@
|
|
+build_os = @build_os@
|
|
+build_vendor = @build_vendor@
|
|
+datadir = @datadir@
|
|
+exec_prefix = @exec_prefix@
|
|
+host = @host@
|
|
+host_alias = @host_alias@
|
|
+host_cpu = @host_cpu@
|
|
+host_os = @host_os@
|
|
+host_vendor = @host_vendor@
|
|
+includedir = @includedir@
|
|
+infodir = @infodir@
|
|
+install_sh = @install_sh@
|
|
+libdir = @libdir@
|
|
+libexecdir = @libexecdir@
|
|
+localstatedir = @localstatedir@
|
|
+mandir = @mandir@
|
|
+mkdir_p = @mkdir_p@
|
|
+oldincludedir = @oldincludedir@
|
|
+prefix = @prefix@
|
|
+program_transform_name = @program_transform_name@
|
|
+sbindir = @sbindir@
|
|
+sharedstatedir = @sharedstatedir@
|
|
+sysconfdir = @sysconfdir@
|
|
+target_alias = @target_alias@
|
|
+SUBDIRS = dhcpc brcm-iscsi
|
|
+all: all-recursive
|
|
+
|
|
+.SUFFIXES:
|
|
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
|
+ @for dep in $?; do \
|
|
+ case '$(am__configure_deps)' in \
|
|
+ *$$dep*) \
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
|
+ && exit 0; \
|
|
+ exit 1;; \
|
|
+ esac; \
|
|
+ done; \
|
|
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/apps/Makefile'; \
|
|
+ cd $(top_srcdir) && \
|
|
+ $(AUTOMAKE) --gnu src/apps/Makefile
|
|
+.PRECIOUS: Makefile
|
|
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
|
+ @case '$?' in \
|
|
+ *config.status*) \
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
|
+ *) \
|
|
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
|
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
|
+ esac;
|
|
+
|
|
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+
|
|
+$(top_srcdir)/configure: $(am__configure_deps)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+
|
|
+mostlyclean-libtool:
|
|
+ -rm -f *.lo
|
|
+
|
|
+clean-libtool:
|
|
+ -rm -rf .libs _libs
|
|
+
|
|
+distclean-libtool:
|
|
+ -rm -f libtool
|
|
+uninstall-info-am:
|
|
+
|
|
+# This directory's subdirectories are mostly independent; you can cd
|
|
+# into them and run `make' without going through this Makefile.
|
|
+# To change the values of `make' variables: instead of editing Makefiles,
|
|
+# (1) if the variable is set in `config.status', edit `config.status'
|
|
+# (which will cause the Makefiles to be regenerated when you run `make');
|
|
+# (2) otherwise, pass the desired values on the `make' command line.
|
|
+$(RECURSIVE_TARGETS):
|
|
+ @failcom='exit 1'; \
|
|
+ for f in x $$MAKEFLAGS; do \
|
|
+ case $$f in \
|
|
+ *=* | --[!k]*);; \
|
|
+ *k*) failcom='fail=yes';; \
|
|
+ esac; \
|
|
+ done; \
|
|
+ dot_seen=no; \
|
|
+ target=`echo $@ | sed s/-recursive//`; \
|
|
+ list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
+ echo "Making $$target in $$subdir"; \
|
|
+ if test "$$subdir" = "."; then \
|
|
+ dot_seen=yes; \
|
|
+ local_target="$$target-am"; \
|
|
+ else \
|
|
+ local_target="$$target"; \
|
|
+ fi; \
|
|
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
|
+ || eval $$failcom; \
|
|
+ done; \
|
|
+ if test "$$dot_seen" = "no"; then \
|
|
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
|
+ fi; test -z "$$fail"
|
|
+
|
|
+mostlyclean-recursive clean-recursive distclean-recursive \
|
|
+maintainer-clean-recursive:
|
|
+ @failcom='exit 1'; \
|
|
+ for f in x $$MAKEFLAGS; do \
|
|
+ case $$f in \
|
|
+ *=* | --[!k]*);; \
|
|
+ *k*) failcom='fail=yes';; \
|
|
+ esac; \
|
|
+ done; \
|
|
+ dot_seen=no; \
|
|
+ case "$@" in \
|
|
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
|
+ *) list='$(SUBDIRS)' ;; \
|
|
+ esac; \
|
|
+ rev=''; for subdir in $$list; do \
|
|
+ if test "$$subdir" = "."; then :; else \
|
|
+ rev="$$subdir $$rev"; \
|
|
+ fi; \
|
|
+ done; \
|
|
+ rev="$$rev ."; \
|
|
+ target=`echo $@ | sed s/-recursive//`; \
|
|
+ for subdir in $$rev; do \
|
|
+ echo "Making $$target in $$subdir"; \
|
|
+ if test "$$subdir" = "."; then \
|
|
+ local_target="$$target-am"; \
|
|
+ else \
|
|
+ local_target="$$target"; \
|
|
+ fi; \
|
|
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
|
+ || eval $$failcom; \
|
|
+ done && test -z "$$fail"
|
|
+tags-recursive:
|
|
+ list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
|
+ done
|
|
+ctags-recursive:
|
|
+ list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
|
+ done
|
|
+
|
|
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ mkid -fID $$unique
|
|
+tags: TAGS
|
|
+
|
|
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
|
+ $(TAGS_FILES) $(LISP)
|
|
+ tags=; \
|
|
+ here=`pwd`; \
|
|
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
|
+ include_option=--etags-include; \
|
|
+ empty_fix=.; \
|
|
+ else \
|
|
+ include_option=--include; \
|
|
+ empty_fix=; \
|
|
+ fi; \
|
|
+ list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
+ if test "$$subdir" = .; then :; else \
|
|
+ test ! -f $$subdir/TAGS || \
|
|
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
|
+ fi; \
|
|
+ done; \
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
|
+ test -n "$$unique" || unique=$$empty_fix; \
|
|
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
|
+ $$tags $$unique; \
|
|
+ fi
|
|
+ctags: CTAGS
|
|
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
|
+ $(TAGS_FILES) $(LISP)
|
|
+ tags=; \
|
|
+ here=`pwd`; \
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
|
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
|
+ $$tags $$unique
|
|
+
|
|
+GTAGS:
|
|
+ here=`$(am__cd) $(top_builddir) && pwd` \
|
|
+ && cd $(top_srcdir) \
|
|
+ && gtags -i $(GTAGS_ARGS) $$here
|
|
+
|
|
+distclean-tags:
|
|
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
|
+
|
|
+distdir: $(DISTFILES)
|
|
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
|
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
|
+ list='$(DISTFILES)'; for file in $$list; do \
|
|
+ case $$file in \
|
|
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
|
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
|
+ esac; \
|
|
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
|
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
|
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
|
+ dir="/$$dir"; \
|
|
+ $(mkdir_p) "$(distdir)$$dir"; \
|
|
+ else \
|
|
+ dir=''; \
|
|
+ fi; \
|
|
+ if test -d $$d/$$file; then \
|
|
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
|
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
|
+ fi; \
|
|
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
|
+ else \
|
|
+ test -f $(distdir)/$$file \
|
|
+ || cp -p $$d/$$file $(distdir)/$$file \
|
|
+ || exit 1; \
|
|
+ fi; \
|
|
+ done
|
|
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
|
+ if test "$$subdir" = .; then :; else \
|
|
+ test -d "$(distdir)/$$subdir" \
|
|
+ || $(mkdir_p) "$(distdir)/$$subdir" \
|
|
+ || exit 1; \
|
|
+ distdir=`$(am__cd) $(distdir) && pwd`; \
|
|
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
|
+ (cd $$subdir && \
|
|
+ $(MAKE) $(AM_MAKEFLAGS) \
|
|
+ top_distdir="$$top_distdir" \
|
|
+ distdir="$$distdir/$$subdir" \
|
|
+ distdir) \
|
|
+ || exit 1; \
|
|
+ fi; \
|
|
+ done
|
|
+check-am: all-am
|
|
+check: check-recursive
|
|
+all-am: Makefile
|
|
+installdirs: installdirs-recursive
|
|
+installdirs-am:
|
|
+install: install-recursive
|
|
+install-exec: install-exec-recursive
|
|
+install-data: install-data-recursive
|
|
+uninstall: uninstall-recursive
|
|
+
|
|
+install-am: all-am
|
|
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
|
+
|
|
+installcheck: installcheck-recursive
|
|
+install-strip:
|
|
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
|
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
|
+ `test -z '$(STRIP)' || \
|
|
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
|
+mostlyclean-generic:
|
|
+
|
|
+clean-generic:
|
|
+
|
|
+distclean-generic:
|
|
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
|
+
|
|
+maintainer-clean-generic:
|
|
+ @echo "This command is intended for maintainers to use"
|
|
+ @echo "it deletes files that may require special tools to rebuild."
|
|
+clean: clean-recursive
|
|
+
|
|
+clean-am: clean-generic clean-libtool mostlyclean-am
|
|
+
|
|
+distclean: distclean-recursive
|
|
+ -rm -f Makefile
|
|
+distclean-am: clean-am distclean-generic distclean-libtool \
|
|
+ distclean-tags
|
|
+
|
|
+dvi: dvi-recursive
|
|
+
|
|
+dvi-am:
|
|
+
|
|
+html: html-recursive
|
|
+
|
|
+info: info-recursive
|
|
+
|
|
+info-am:
|
|
+
|
|
+install-data-am:
|
|
+
|
|
+install-exec-am:
|
|
+
|
|
+install-info: install-info-recursive
|
|
+
|
|
+install-man:
|
|
+
|
|
+installcheck-am:
|
|
+
|
|
+maintainer-clean: maintainer-clean-recursive
|
|
+ -rm -f Makefile
|
|
+maintainer-clean-am: distclean-am maintainer-clean-generic
|
|
+
|
|
+mostlyclean: mostlyclean-recursive
|
|
+
|
|
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
|
+
|
|
+pdf: pdf-recursive
|
|
+
|
|
+pdf-am:
|
|
+
|
|
+ps: ps-recursive
|
|
+
|
|
+ps-am:
|
|
+
|
|
+uninstall-am: uninstall-info-am
|
|
+
|
|
+uninstall-info: uninstall-info-recursive
|
|
+
|
|
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
|
|
+ clean clean-generic clean-libtool clean-recursive ctags \
|
|
+ ctags-recursive distclean distclean-generic distclean-libtool \
|
|
+ distclean-recursive distclean-tags distdir dvi dvi-am html \
|
|
+ html-am info info-am install install-am install-data \
|
|
+ install-data-am install-exec install-exec-am install-info \
|
|
+ install-info-am install-man install-strip installcheck \
|
|
+ installcheck-am installdirs installdirs-am maintainer-clean \
|
|
+ maintainer-clean-generic maintainer-clean-recursive \
|
|
+ mostlyclean mostlyclean-generic mostlyclean-libtool \
|
|
+ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
|
|
+ uninstall uninstall-am uninstall-info-am
|
|
+
|
|
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
|
+# Otherwise a system limit (for SysV at least) may be exceeded.
|
|
+.NOEXPORT:
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/README open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/README
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/apps/README 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/apps/README 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,2 @@
|
|
+This directory contains a few example applications. They are not all
|
|
+heavily tested, however.
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/Makefile.am open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/Makefile.am
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/Makefile.am 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/Makefile.am 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1 @@
|
|
+SUBDIRS = apps uip unix
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/Makefile.in open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/Makefile.in
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/Makefile.in 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/Makefile.in 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,471 @@
|
|
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
|
+# @configure_input@
|
|
+
|
|
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
|
+# 2003, 2004, 2005 Free Software Foundation, Inc.
|
|
+# This Makefile.in 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.
|
|
+
|
|
+# This program is distributed in the hope that it will be useful,
|
|
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
|
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
+# PARTICULAR PURPOSE.
|
|
+
|
|
+@SET_MAKE@
|
|
+srcdir = @srcdir@
|
|
+top_srcdir = @top_srcdir@
|
|
+VPATH = @srcdir@
|
|
+pkgdatadir = $(datadir)/@PACKAGE@
|
|
+pkglibdir = $(libdir)/@PACKAGE@
|
|
+pkgincludedir = $(includedir)/@PACKAGE@
|
|
+top_builddir = ..
|
|
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
|
+INSTALL = @INSTALL@
|
|
+install_sh_DATA = $(install_sh) -c -m 644
|
|
+install_sh_PROGRAM = $(install_sh) -c
|
|
+install_sh_SCRIPT = $(install_sh) -c
|
|
+INSTALL_HEADER = $(INSTALL_DATA)
|
|
+transform = $(program_transform_name)
|
|
+NORMAL_INSTALL = :
|
|
+PRE_INSTALL = :
|
|
+POST_INSTALL = :
|
|
+NORMAL_UNINSTALL = :
|
|
+PRE_UNINSTALL = :
|
|
+POST_UNINSTALL = :
|
|
+build_triplet = @build@
|
|
+host_triplet = @host@
|
|
+subdir = src
|
|
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
|
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
|
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
|
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
|
+ $(ACLOCAL_M4)
|
|
+mkinstalldirs = $(install_sh) -d
|
|
+CONFIG_HEADER = $(top_builddir)/config.h
|
|
+CONFIG_CLEAN_FILES =
|
|
+SOURCES =
|
|
+DIST_SOURCES =
|
|
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
|
+ html-recursive info-recursive install-data-recursive \
|
|
+ install-exec-recursive install-info-recursive \
|
|
+ install-recursive installcheck-recursive installdirs-recursive \
|
|
+ pdf-recursive ps-recursive uninstall-info-recursive \
|
|
+ uninstall-recursive
|
|
+ETAGS = etags
|
|
+CTAGS = ctags
|
|
+DIST_SUBDIRS = $(SUBDIRS)
|
|
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
|
+ACLOCAL = @ACLOCAL@
|
|
+AMDEP_FALSE = @AMDEP_FALSE@
|
|
+AMDEP_TRUE = @AMDEP_TRUE@
|
|
+AMTAR = @AMTAR@
|
|
+AR = @AR@
|
|
+AUTOCONF = @AUTOCONF@
|
|
+AUTOHEADER = @AUTOHEADER@
|
|
+AUTOMAKE = @AUTOMAKE@
|
|
+AWK = @AWK@
|
|
+BASH = @BASH@
|
|
+CC = @CC@
|
|
+CCDEPMODE = @CCDEPMODE@
|
|
+CFLAGS = @CFLAGS@
|
|
+CPP = @CPP@
|
|
+CPPFLAGS = @CPPFLAGS@
|
|
+CXX = @CXX@
|
|
+CXXCPP = @CXXCPP@
|
|
+CXXDEPMODE = @CXXDEPMODE@
|
|
+CXXFLAGS = @CXXFLAGS@
|
|
+CYGPATH_W = @CYGPATH_W@
|
|
+DEBUG_FALSE = @DEBUG_FALSE@
|
|
+DEBUG_TRUE = @DEBUG_TRUE@
|
|
+DEFS = @DEFS@
|
|
+DEPDIR = @DEPDIR@
|
|
+ECHO = @ECHO@
|
|
+ECHO_C = @ECHO_C@
|
|
+ECHO_N = @ECHO_N@
|
|
+ECHO_T = @ECHO_T@
|
|
+EGREP = @EGREP@
|
|
+ENDIAN = @ENDIAN@
|
|
+EXEEXT = @EXEEXT@
|
|
+F77 = @F77@
|
|
+FFLAGS = @FFLAGS@
|
|
+INSTALL_DATA = @INSTALL_DATA@
|
|
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
|
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
|
+LDFLAGS = @LDFLAGS@
|
|
+LIBOBJS = @LIBOBJS@
|
|
+LIBS = @LIBS@
|
|
+LIBTOOL = @LIBTOOL@
|
|
+LN_S = @LN_S@
|
|
+LTLIBOBJS = @LTLIBOBJS@
|
|
+MAKEINFO = @MAKEINFO@
|
|
+OBJEXT = @OBJEXT@
|
|
+PACKAGE = @PACKAGE@
|
|
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
|
+PACKAGE_NAME = @PACKAGE_NAME@
|
|
+PACKAGE_STRING = @PACKAGE_STRING@
|
|
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
|
+PACKAGE_VERSION = @PACKAGE_VERSION@
|
|
+PATH_SEPARATOR = @PATH_SEPARATOR@
|
|
+RANLIB = @RANLIB@
|
|
+SED = @SED@
|
|
+SET_MAKE = @SET_MAKE@
|
|
+SHELL = @SHELL@
|
|
+STRIP = @STRIP@
|
|
+VERSION = @VERSION@
|
|
+ac_ct_AR = @ac_ct_AR@
|
|
+ac_ct_CC = @ac_ct_CC@
|
|
+ac_ct_CXX = @ac_ct_CXX@
|
|
+ac_ct_F77 = @ac_ct_F77@
|
|
+ac_ct_RANLIB = @ac_ct_RANLIB@
|
|
+ac_ct_STRIP = @ac_ct_STRIP@
|
|
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
|
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
|
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
|
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
|
+am__include = @am__include@
|
|
+am__leading_dot = @am__leading_dot@
|
|
+am__quote = @am__quote@
|
|
+am__tar = @am__tar@
|
|
+am__untar = @am__untar@
|
|
+bindir = @bindir@
|
|
+build = @build@
|
|
+build_alias = @build_alias@
|
|
+build_cpu = @build_cpu@
|
|
+build_os = @build_os@
|
|
+build_vendor = @build_vendor@
|
|
+datadir = @datadir@
|
|
+exec_prefix = @exec_prefix@
|
|
+host = @host@
|
|
+host_alias = @host_alias@
|
|
+host_cpu = @host_cpu@
|
|
+host_os = @host_os@
|
|
+host_vendor = @host_vendor@
|
|
+includedir = @includedir@
|
|
+infodir = @infodir@
|
|
+install_sh = @install_sh@
|
|
+libdir = @libdir@
|
|
+libexecdir = @libexecdir@
|
|
+localstatedir = @localstatedir@
|
|
+mandir = @mandir@
|
|
+mkdir_p = @mkdir_p@
|
|
+oldincludedir = @oldincludedir@
|
|
+prefix = @prefix@
|
|
+program_transform_name = @program_transform_name@
|
|
+sbindir = @sbindir@
|
|
+sharedstatedir = @sharedstatedir@
|
|
+sysconfdir = @sysconfdir@
|
|
+target_alias = @target_alias@
|
|
+SUBDIRS = apps uip unix
|
|
+all: all-recursive
|
|
+
|
|
+.SUFFIXES:
|
|
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
|
+ @for dep in $?; do \
|
|
+ case '$(am__configure_deps)' in \
|
|
+ *$$dep*) \
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
|
+ && exit 0; \
|
|
+ exit 1;; \
|
|
+ esac; \
|
|
+ done; \
|
|
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
|
|
+ cd $(top_srcdir) && \
|
|
+ $(AUTOMAKE) --gnu src/Makefile
|
|
+.PRECIOUS: Makefile
|
|
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
|
+ @case '$?' in \
|
|
+ *config.status*) \
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
|
+ *) \
|
|
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
|
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
|
+ esac;
|
|
+
|
|
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+
|
|
+$(top_srcdir)/configure: $(am__configure_deps)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+
|
|
+mostlyclean-libtool:
|
|
+ -rm -f *.lo
|
|
+
|
|
+clean-libtool:
|
|
+ -rm -rf .libs _libs
|
|
+
|
|
+distclean-libtool:
|
|
+ -rm -f libtool
|
|
+uninstall-info-am:
|
|
+
|
|
+# This directory's subdirectories are mostly independent; you can cd
|
|
+# into them and run `make' without going through this Makefile.
|
|
+# To change the values of `make' variables: instead of editing Makefiles,
|
|
+# (1) if the variable is set in `config.status', edit `config.status'
|
|
+# (which will cause the Makefiles to be regenerated when you run `make');
|
|
+# (2) otherwise, pass the desired values on the `make' command line.
|
|
+$(RECURSIVE_TARGETS):
|
|
+ @failcom='exit 1'; \
|
|
+ for f in x $$MAKEFLAGS; do \
|
|
+ case $$f in \
|
|
+ *=* | --[!k]*);; \
|
|
+ *k*) failcom='fail=yes';; \
|
|
+ esac; \
|
|
+ done; \
|
|
+ dot_seen=no; \
|
|
+ target=`echo $@ | sed s/-recursive//`; \
|
|
+ list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
+ echo "Making $$target in $$subdir"; \
|
|
+ if test "$$subdir" = "."; then \
|
|
+ dot_seen=yes; \
|
|
+ local_target="$$target-am"; \
|
|
+ else \
|
|
+ local_target="$$target"; \
|
|
+ fi; \
|
|
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
|
+ || eval $$failcom; \
|
|
+ done; \
|
|
+ if test "$$dot_seen" = "no"; then \
|
|
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
|
+ fi; test -z "$$fail"
|
|
+
|
|
+mostlyclean-recursive clean-recursive distclean-recursive \
|
|
+maintainer-clean-recursive:
|
|
+ @failcom='exit 1'; \
|
|
+ for f in x $$MAKEFLAGS; do \
|
|
+ case $$f in \
|
|
+ *=* | --[!k]*);; \
|
|
+ *k*) failcom='fail=yes';; \
|
|
+ esac; \
|
|
+ done; \
|
|
+ dot_seen=no; \
|
|
+ case "$@" in \
|
|
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
|
+ *) list='$(SUBDIRS)' ;; \
|
|
+ esac; \
|
|
+ rev=''; for subdir in $$list; do \
|
|
+ if test "$$subdir" = "."; then :; else \
|
|
+ rev="$$subdir $$rev"; \
|
|
+ fi; \
|
|
+ done; \
|
|
+ rev="$$rev ."; \
|
|
+ target=`echo $@ | sed s/-recursive//`; \
|
|
+ for subdir in $$rev; do \
|
|
+ echo "Making $$target in $$subdir"; \
|
|
+ if test "$$subdir" = "."; then \
|
|
+ local_target="$$target-am"; \
|
|
+ else \
|
|
+ local_target="$$target"; \
|
|
+ fi; \
|
|
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
|
+ || eval $$failcom; \
|
|
+ done && test -z "$$fail"
|
|
+tags-recursive:
|
|
+ list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
|
+ done
|
|
+ctags-recursive:
|
|
+ list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
|
+ done
|
|
+
|
|
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ mkid -fID $$unique
|
|
+tags: TAGS
|
|
+
|
|
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
|
+ $(TAGS_FILES) $(LISP)
|
|
+ tags=; \
|
|
+ here=`pwd`; \
|
|
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
|
+ include_option=--etags-include; \
|
|
+ empty_fix=.; \
|
|
+ else \
|
|
+ include_option=--include; \
|
|
+ empty_fix=; \
|
|
+ fi; \
|
|
+ list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
+ if test "$$subdir" = .; then :; else \
|
|
+ test ! -f $$subdir/TAGS || \
|
|
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
|
+ fi; \
|
|
+ done; \
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
|
+ test -n "$$unique" || unique=$$empty_fix; \
|
|
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
|
+ $$tags $$unique; \
|
|
+ fi
|
|
+ctags: CTAGS
|
|
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
|
+ $(TAGS_FILES) $(LISP)
|
|
+ tags=; \
|
|
+ here=`pwd`; \
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
|
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
|
+ $$tags $$unique
|
|
+
|
|
+GTAGS:
|
|
+ here=`$(am__cd) $(top_builddir) && pwd` \
|
|
+ && cd $(top_srcdir) \
|
|
+ && gtags -i $(GTAGS_ARGS) $$here
|
|
+
|
|
+distclean-tags:
|
|
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
|
+
|
|
+distdir: $(DISTFILES)
|
|
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
|
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
|
+ list='$(DISTFILES)'; for file in $$list; do \
|
|
+ case $$file in \
|
|
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
|
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
|
+ esac; \
|
|
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
|
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
|
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
|
+ dir="/$$dir"; \
|
|
+ $(mkdir_p) "$(distdir)$$dir"; \
|
|
+ else \
|
|
+ dir=''; \
|
|
+ fi; \
|
|
+ if test -d $$d/$$file; then \
|
|
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
|
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
|
+ fi; \
|
|
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
|
+ else \
|
|
+ test -f $(distdir)/$$file \
|
|
+ || cp -p $$d/$$file $(distdir)/$$file \
|
|
+ || exit 1; \
|
|
+ fi; \
|
|
+ done
|
|
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
|
+ if test "$$subdir" = .; then :; else \
|
|
+ test -d "$(distdir)/$$subdir" \
|
|
+ || $(mkdir_p) "$(distdir)/$$subdir" \
|
|
+ || exit 1; \
|
|
+ distdir=`$(am__cd) $(distdir) && pwd`; \
|
|
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
|
+ (cd $$subdir && \
|
|
+ $(MAKE) $(AM_MAKEFLAGS) \
|
|
+ top_distdir="$$top_distdir" \
|
|
+ distdir="$$distdir/$$subdir" \
|
|
+ distdir) \
|
|
+ || exit 1; \
|
|
+ fi; \
|
|
+ done
|
|
+check-am: all-am
|
|
+check: check-recursive
|
|
+all-am: Makefile
|
|
+installdirs: installdirs-recursive
|
|
+installdirs-am:
|
|
+install: install-recursive
|
|
+install-exec: install-exec-recursive
|
|
+install-data: install-data-recursive
|
|
+uninstall: uninstall-recursive
|
|
+
|
|
+install-am: all-am
|
|
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
|
+
|
|
+installcheck: installcheck-recursive
|
|
+install-strip:
|
|
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
|
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
|
+ `test -z '$(STRIP)' || \
|
|
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
|
+mostlyclean-generic:
|
|
+
|
|
+clean-generic:
|
|
+
|
|
+distclean-generic:
|
|
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
|
+
|
|
+maintainer-clean-generic:
|
|
+ @echo "This command is intended for maintainers to use"
|
|
+ @echo "it deletes files that may require special tools to rebuild."
|
|
+clean: clean-recursive
|
|
+
|
|
+clean-am: clean-generic clean-libtool mostlyclean-am
|
|
+
|
|
+distclean: distclean-recursive
|
|
+ -rm -f Makefile
|
|
+distclean-am: clean-am distclean-generic distclean-libtool \
|
|
+ distclean-tags
|
|
+
|
|
+dvi: dvi-recursive
|
|
+
|
|
+dvi-am:
|
|
+
|
|
+html: html-recursive
|
|
+
|
|
+info: info-recursive
|
|
+
|
|
+info-am:
|
|
+
|
|
+install-data-am:
|
|
+
|
|
+install-exec-am:
|
|
+
|
|
+install-info: install-info-recursive
|
|
+
|
|
+install-man:
|
|
+
|
|
+installcheck-am:
|
|
+
|
|
+maintainer-clean: maintainer-clean-recursive
|
|
+ -rm -f Makefile
|
|
+maintainer-clean-am: distclean-am maintainer-clean-generic
|
|
+
|
|
+mostlyclean: mostlyclean-recursive
|
|
+
|
|
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
|
+
|
|
+pdf: pdf-recursive
|
|
+
|
|
+pdf-am:
|
|
+
|
|
+ps: ps-recursive
|
|
+
|
|
+ps-am:
|
|
+
|
|
+uninstall-am: uninstall-info-am
|
|
+
|
|
+uninstall-info: uninstall-info-recursive
|
|
+
|
|
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
|
|
+ clean clean-generic clean-libtool clean-recursive ctags \
|
|
+ ctags-recursive distclean distclean-generic distclean-libtool \
|
|
+ distclean-recursive distclean-tags distdir dvi dvi-am html \
|
|
+ html-am info info-am install install-am install-data \
|
|
+ install-data-am install-exec install-exec-am install-info \
|
|
+ install-info-am install-man install-strip installcheck \
|
|
+ installcheck-am installdirs installdirs-am maintainer-clean \
|
|
+ maintainer-clean-generic maintainer-clean-recursive \
|
|
+ mostlyclean mostlyclean-generic mostlyclean-libtool \
|
|
+ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
|
|
+ uninstall uninstall-am uninstall-info-am
|
|
+
|
|
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
|
+# Otherwise a system limit (for SysV at least) may be exceeded.
|
|
+.NOEXPORT:
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/README open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/README
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/README 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/README 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,13 @@
|
|
+uIP is a very small implementation of the TCP/IP stack that is written
|
|
+by Adam Dunkels <adam@sics.se>. More information can be obtained
|
|
+at the uIP homepage at http://www.sics.se/~adam/uip/.
|
|
+
|
|
+This is version $Name: uip-1-0 $.
|
|
+
|
|
+The directory structure look as follows:
|
|
+
|
|
+apps/ - Example applications
|
|
+doc/ - Documentation
|
|
+lib/ - Library code used by some applications
|
|
+uip/ - uIP TCP/IP stack code
|
|
+unix/ - uIP as a user space process under FreeBSD or Linux
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/clock.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/clock.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/clock.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/clock.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,88 @@
|
|
+/**
|
|
+ * \defgroup clock Clock interface
|
|
+ *
|
|
+ * The clock interface is the interface between the \ref timer "timer library"
|
|
+ * and the platform specific clock functionality. The clock
|
|
+ * interface must be implemented for each platform that uses the \ref
|
|
+ * timer "timer library".
|
|
+ *
|
|
+ * The clock interface does only one this: it measures time. The clock
|
|
+ * interface provides a macro, CLOCK_SECOND, which corresponds to one
|
|
+ * second of system time.
|
|
+ *
|
|
+ * \sa \ref timer "Timer library"
|
|
+ *
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * Copyright (c) 2004, Swedish Institute of Computer Science.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. Neither the name of the Institute nor the names of its contributors
|
|
+ * may be used to endorse or promote products derived from this software
|
|
+ * without specific prior written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
|
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
|
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
+ * SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack
|
|
+ *
|
|
+ * Author: Adam Dunkels <adam@sics.se>
|
|
+ *
|
|
+ * $Id: clock.h,v 1.3 2006/06/11 21:46:39 adam Exp $
|
|
+ */
|
|
+#ifndef __CLOCK_H__
|
|
+#define __CLOCK_H__
|
|
+
|
|
+#include "clock-arch.h"
|
|
+
|
|
+/**
|
|
+ * Initialize the clock library.
|
|
+ *
|
|
+ * This function initializes the clock library and should be called
|
|
+ * from the main() function of the system.
|
|
+ *
|
|
+ */
|
|
+void clock_init(void);
|
|
+
|
|
+/**
|
|
+ * Get the current clock time.
|
|
+ *
|
|
+ * This function returns the current system clock time.
|
|
+ *
|
|
+ * \return The current clock time, measured in system ticks.
|
|
+ */
|
|
+clock_time_t clock_time(void);
|
|
+
|
|
+/**
|
|
+ * A second, measured in system clock time.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#ifdef CLOCK_CONF_SECOND
|
|
+#define CLOCK_SECOND CLOCK_CONF_SECOND
|
|
+#else
|
|
+#define CLOCK_SECOND (clock_time_t)32
|
|
+#endif
|
|
+
|
|
+#endif /* __CLOCK_H__ */
|
|
+
|
|
+/** @} */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/debug.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/debug.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/debug.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/debug.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,9 @@
|
|
+#ifndef __DEBUG_H__
|
|
+#define __DEBUG_H__
|
|
+
|
|
+#ifdef DEBUG
|
|
+#define UIP_DEBUG(args...) fprintf(stdout, args); fflush(stdout)
|
|
+#else
|
|
+#endif
|
|
+
|
|
+#endif
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/icmpv6.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/icmpv6.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/icmpv6.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/icmpv6.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,312 @@
|
|
+/*
|
|
+ * Copyright (c) 2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Eddie Wai (eddie.wai@broadcom.com)
|
|
+ * Based on Kevin Tran's iSCSI boot code
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * icmpv6.h - This file contains macro definitions pertaining to ICMPv6
|
|
+ *
|
|
+ * RFC 2463 : ICMPv6 Specification
|
|
+ * RFC 2461 : Neighbor Discovery for IPv6
|
|
+ *
|
|
+ */
|
|
+#ifndef __ICMPV6_H__
|
|
+#define __ICMPV6_H__
|
|
+
|
|
+#define __FAR__
|
|
+
|
|
+#ifdef PACK_DATA_STRUCTURE
|
|
+#pragma pack(push,1)
|
|
+#endif
|
|
+
|
|
+/* Base ICMP Header sizes */
|
|
+#define IPV6_RTR_SOL_HDR_SIZE 8
|
|
+#define IPV6_RTR_ADV_HDR_SIZE 16
|
|
+#define IPV6_NEIGH_SOL_HDR_SIZE 24
|
|
+#define IPV6_NEIGH_ADV_HDR_SIZE 24
|
|
+#define IPV6_LINK_LAYER_OPT_SIZE 2
|
|
+#define IPV6_LINK_LAYER_OPT_LENGTH 8
|
|
+#define IPV6_MTU_OPT_SIZE 8
|
|
+#define IPV6_PREFIX_OPT_SIZE 32
|
|
+#define IPV6_ECHO_REQUEST_HDR_SIZE 8
|
|
+#define IPV6_ECHO_REPLY_HDR_SIZE 8
|
|
+#define IPV6_REDIRECT_SIZE 40
|
|
+#define IPV6_DHAAD_REQ_HDR_SIZE 8
|
|
+#define IPV6_DHAAD_REPLY_HDR_SIZE 8
|
|
+#define IPV6_PRFXSOL_HDR_SIZE 8
|
|
+#define IPV6_PRFXADV_HDR_SIZE 8
|
|
+#define IPV6_RTR_ADV_INT_OPT_SIZE 8
|
|
+
|
|
+/* ICMP Message Types */
|
|
+/* Error messages are always less than 128 */
|
|
+#define ICMPV6_DST_UNREACH 1 /* Destination Unreachable */
|
|
+#define ICMPV6_PACKET_TOO_BIG 2 /* Packet Too Big */
|
|
+#define ICMPV6_TIME_EXCEEDED 3 /* Time Exceeded */
|
|
+#define ICMPV6_PARAM_PROB 4 /* Parameter Problem */
|
|
+
|
|
+#define ICMPV6_RTR_SOL 133 /* Router Solicitation */
|
|
+#define ICMPV6_RTR_ADV 134 /* Router Advertisement */
|
|
+#define ICMPV6_NEIGH_SOL 135 /* Neighbor Solicitation */
|
|
+#define ICMPV6_NEIGH_ADV 136 /* Neighbor Advertisement */
|
|
+#define ICMPV6_REDIRECT 137 /* Redirect */
|
|
+#define ICMPV6_ECHO_REQUEST 128 /* Echo Request */
|
|
+#define ICMPV6_ECHO_REPLY 129 /* Echo Reply */
|
|
+#define ICMPV6_WRUREQUEST 139 /* Who Are You Request */
|
|
+#define ICMPV6_WRUREPLY 140 /* Who Are You Reply */
|
|
+#define ICMPV6_ROUTER_RENUMBERING 138 /* Router Renumbering */
|
|
+#define ICMPV6_HA_ADDR_DISC_REQ 144 /* Dynamic Home Agent Address
|
|
+ Discovery Request */
|
|
+#define ICMPV6_HA_ADDR_DISC_REPLY 145 /* Dynamic Home Agent Address
|
|
+ Discovery Reply */
|
|
+#define ICMPV6_MP_SOLICIT 146 /* Mobile Prefix Solicitation */
|
|
+#define ICMPV6_MP_ADV 147 /* Mobile Prefix Reply */
|
|
+
|
|
+/* Destination Unreachable Codes */
|
|
+#define ICMPV6_DST_UNREACH_NOROUTE 0
|
|
+#define ICMPV6_DST_UNREACH_ADMIN 1
|
|
+#define ICMPV6_DST_UNREACH_ADDRESS 3
|
|
+#define ICMPV6_DST_UNREACH_PORT 4
|
|
+
|
|
+/* Time Exceeded Codes */
|
|
+#define ICMPV6_TIME_EXCD_HPLMT 0 /* Hop Limit exceeded in transit */
|
|
+#define ICMPV6_TIME_EXCD_REASM 1 /* Fragment reassembly time exceeded */
|
|
+
|
|
+/* Parameter Problem Codes */
|
|
+#define ICMPV6_PARM_PROB_HEADER 0
|
|
+#define ICMPV6_PARM_PROB_NEXT_HDR 1
|
|
+#define ICMPV6_PARM_PROB_OPTION 2
|
|
+
|
|
+/* ICMP Option Types */
|
|
+#define IPV6_ICMP_OPTION_SRC_ADDR 1 /* Source Link-Layer Address */
|
|
+#define IPV6_ICMP_OPTION_TAR_ADDR 2 /* Target Link-Layer Address */
|
|
+#define IPV6_ICMP_OPTION_PREFIX 3 /* Prefix */
|
|
+#define IPV6_ICMP_OPTION_RED_HDR 4 /* Redirect Header */
|
|
+#define IPV6_ICMP_OPTION_MTU 5 /* Link MTU */
|
|
+#define IPV6_ICMP_OPTION_RTR_ADV_INT 7 /* Rtr Advertisement Interval */
|
|
+
|
|
+/* ICMP Offsets */
|
|
+#define IPV6_ICMP_TYPE_OFFSET 0
|
|
+#define IPV6_ICMP_CODE_OFFSET 1
|
|
+#define IPV6_ICMP_CKSUM_OFFSET 2
|
|
+#define IPV6_ICMP_RESERVED_OFFSET 4
|
|
+#define IPV6_ICMP_DATA_OFFSET 8
|
|
+
|
|
+/* ICMP Router Solicitation Offsets */
|
|
+#define IPV6_ICMP_RTR_SOL_RES_OFFSET 4
|
|
+#define IPV6_ICMP_RTR_SOL_OPTIONS_OFFSET 8
|
|
+
|
|
+/* ICMP Router Advertisement Offsets */
|
|
+#define IPV6_ICMP_RTR_ADV_CURHOPLMT_OFFSET 4
|
|
+#define IPV6_ICMP_RTR_ADV_MGDANDCFG_BIT_OFFSET 5
|
|
+#define IPV6_ICMP_RTR_ADV_RTR_LIFETIME_OFFSET 6
|
|
+#define IPV6_ICMP_RTR_ADV_RCHBL_TIME_OFFSET 8
|
|
+#define IPV6_ICMP_RTR_ADV_RTRNS_TMR_OFFSET 12
|
|
+#define IPV6_ICMP_RTR_ADV_OPTIONS_OFFSET 16
|
|
+
|
|
+/* ICMP Neighbor Solicitation Offsets */
|
|
+#define IPV6_ICMP_NEIGH_SOL_RES_OFFSET 4
|
|
+#define IPV6_ICMP_NEIGH_SOL_TRGT_ADDRS_OFFSET 8
|
|
+#define IPV6_ICMP_NEIGH_SOL_OPTIONS_OFFSET 24
|
|
+
|
|
+/* ICMP Neighbor Advertisement Offsets */
|
|
+#define IPV6_ICMP_NEIGH_ADV_FLAG_OFFSET 4
|
|
+#define IPV6_ICMP_NEIGH_ADV_TRGT_ADDRS_OFFSET 8
|
|
+#define IPV6_ICMP_NEIGH_ADV_OPTIONS_OFFSET 24
|
|
+
|
|
+/* ICMP Redirect Offsets */
|
|
+#define IPV6_ICMP_REDIRECT_TRGT_ADDRS_OFFSET 8
|
|
+#define IPV6_ICMP_REDIRECT_DEST_ADDRS_OFFSET 24
|
|
+#define IPV6_ICMP_REDIRECT_OPTIONS_OFFSET 40
|
|
+
|
|
+/* ICMP Option Offsets */
|
|
+#define IPV6_ICMP_OPTION_TYPE_OFFSET 0
|
|
+#define IPV6_ICMP_OPTION_LENGTH_OFFSET 1
|
|
+
|
|
+/* ICMP Link-Layer Address Option Offsets */
|
|
+#define IPV6_ICMP_LL_OPTION_ADDRESS_OFFSET 2
|
|
+
|
|
+/* ICMP Prefix Option Offsets */
|
|
+#define IPV6_ICMP_PREFIX_PRE_LENGTH_OFFSET 2
|
|
+#define IPV6_ICMP_PREFIX_FLAG_OFFSET 3
|
|
+#define IPV6_ICMP_PREFIX_VALID_LIFETIME_OFFSET 4
|
|
+#define IPV6_ICMP_PREFIX_PREF_LIFETIME_OFFSET 8
|
|
+#define IPV6_ICMP_PREFIX_RES2_OFFSET 12
|
|
+#define IPV6_ICMP_PREFIX_PREFIX_OFFSET 16
|
|
+
|
|
+/* ICMP Redirected Header Option Offsets */
|
|
+#define IPV6_ICMP_RED_OPTION_TYPE_OFFSET 0
|
|
+#define IPV6_ICMP_RED_OPTION_LEN_OFFSET 1
|
|
+#define IPV6_ICMP_RED_OPTION_RES1_OFFSET 2
|
|
+#define IPV6_ICMP_RED_OPTION_RES2_OFFSET 4
|
|
+#define IPV6_ICMP_RED_OPTION_DATA_OFFSET 8
|
|
+
|
|
+/* ICMP MTU Option Offsets */
|
|
+#define IPV6_ICMP_MTU_RESERVED_OFFSET 2
|
|
+#define IPV6_ICMP_MTU_OFFSET 4
|
|
+
|
|
+/* ICMP Echo Request Offsets */
|
|
+#define IPV6_ICMP_ECHO_ID 4
|
|
+#define IPV6_ICMP_ECHO_SEQ 6
|
|
+#define IPV6_ICMP_ECHO_DATA 8
|
|
+
|
|
+/* ICMP Destination Unreachable Offsets */
|
|
+#define IPV6_DST_UNREACH_UNUSED 4
|
|
+#define IPV6_DST_UNREACH_DATA 8
|
|
+
|
|
+/* ICMP Parameter Problem Offsets */
|
|
+#define IPV6_PARAM_PROB_PTR 4
|
|
+#define IPV6_PARAM_PROT_DATA 8
|
|
+
|
|
+/* ICMP Time Exceeded Offsets */
|
|
+#define IPV6_TIME_EXCEEDED_DATA 8
|
|
+
|
|
+/* ICMP Packet Too Big Offsets */
|
|
+#define IPV6_PKT_TOO_BIG_MTU 4
|
|
+#define IPV6_PKT_TOO_BIG_DATA 8
|
|
+
|
|
+/* Home Agent Address Discovery Request Header Offsets */
|
|
+#define ICMPV6_HA_ADDR_DISC_REQ_ID_OFFSET 4
|
|
+#define ICMPV6_HA_ADDR_DISC_REQ_RSVD_OFFSET 6
|
|
+
|
|
+/* Home Agent Address Discovery Reply Header Offsets */
|
|
+#define ICMPV6_HA_ADDR_DISC_REPLY_ID_OFFSET 4
|
|
+#define ICMPV6_HA_ADDR_DISC_REPLY_RSVD_OFFSET 6
|
|
+#define ICMPV6_HA_ADDR_DISC_REPLY_HA_ADDR_OFFSET 8
|
|
+
|
|
+/* Mobile Prefix Solicitation Header Offsets */
|
|
+#define ICMPV6_MP_SOLICIT_ID_OFFSET 4
|
|
+#define ICMPV6_MP_SOLICIT_RSVD_OFFSET 6
|
|
+
|
|
+/* Mobile Prefix Advertisement Header Offsets */
|
|
+#define ICMPV6_MP_ADV_ID_OFFSET 4
|
|
+#define ICMPV6_MP_ADV_MGDANDCFG_BIT_OFFSET 6
|
|
+#define ICMPV6_MP_ADV_OPT_OFFSET 8
|
|
+
|
|
+/* Advertisement Interval Option Header Offsets */
|
|
+#define ICMPV6_ADV_INT_TYPE_OFFSET 0
|
|
+#define ICMPV6_ADV_INT_LEN_OFFSET 1
|
|
+#define ICMPV6_ADV_INT_RSVD_OFFSET 2
|
|
+#define ICMPV6_ADV_INT_ADV_INT_OFFSET 4
|
|
+
|
|
+#define ICMPV6_HEADER_LEN 4
|
|
+
|
|
+#define IPV6_PREFIX_FLAG_ONLINK 0x80
|
|
+#define IPV6_PREFIX_FLAG_AUTO 0x40
|
|
+#define IPV6_PREFIX_FLAG_ROUTER 0x20
|
|
+
|
|
+#define IPV6_NA_FLAG_ROUTER 0x80
|
|
+#define IPV6_NA_FLAG_SOLICITED 0x40
|
|
+#define IPV6_NA_FLAG_OVERRIDE 0x20
|
|
+
|
|
+/* Router Advertisement Flags */
|
|
+#define IPV6_RA_MANAGED_FLAG 0x80
|
|
+#define IPV6_RA_CONFIG_FLAG 0x40
|
|
+
|
|
+/* Mobile Prefix Advertisement Flags */
|
|
+#define IPV6_PA_MANAGED_FLAG 0x80
|
|
+#define IPV6_PA_CONFIG_FLAG 0x40
|
|
+
|
|
+/* Validation Values */
|
|
+#define ICMPV6_VALID_HOP_LIMIT 255 /* Valid Hop Limit */
|
|
+#define ICMPV6_VALID_CODE 0 /* Valid Code */
|
|
+#define ICMPV6_RTRSOL_MIN_LENGTH 8 /* Minimum valid length for
|
|
+ Router Solicitation */
|
|
+#define ICMPV6_RTRADV_MIN_LENGTH 16 /* Minimum valid length for
|
|
+ Router Advertisement */
|
|
+#define ICMPV6_NEIGHSOL_MIN_LENGTH 24 /* Minimum valid length for
|
|
+ Neighbor Solicitation */
|
|
+#define ICMPV6_NEIGHADV_MIN_LENGTH 24 /* Minimum valid length for
|
|
+ Neighbor Advertisement */
|
|
+#define ICMPV6_REDIRECT_MIN_LENGTH 40 /* Minimum valid length for
|
|
+ Neighbor Advertisement */
|
|
+
|
|
+/* ICMPV6 Header */
|
|
+typedef struct ICMPV6_HDR {
|
|
+ u8_t icmpv6_type; /* type field */
|
|
+ u8_t icmpv6_code; /* code field */
|
|
+ u16_t icmpv6_cksum; /* checksum field */
|
|
+ union {
|
|
+ u32_t icmpv6_un_data32[1]; /* type-specific field */
|
|
+ u16_t icmpv6_un_data16[2]; /* type-specific field */
|
|
+ u8_t icmpv6_un_data8[4]; /* type-specific field */
|
|
+ } data;
|
|
+} ICMPV6_HDR, __FAR__ * pICMPV6_HDR;
|
|
+
|
|
+#define icmpv6_data data.icmpv6_un_data32[0]
|
|
+
|
|
+typedef struct ICMPV6_OPT_HDR {
|
|
+ u8_t type;
|
|
+ u8_t len;
|
|
+} ICMPV6_OPT_HDR, __FAR__ * pICMPV6_OPT_HDR;
|
|
+
|
|
+typedef struct ICMPV6_OPT_LINK_ADDR {
|
|
+ ICMPV6_OPT_HDR hdr;
|
|
+ u8_t link_addr[6];
|
|
+} ICMPV6_OPT_LINK_ADDR, *pICMPV6_OPT_LINK_ADDR;
|
|
+
|
|
+typedef struct ICMPV6_OPT_PREFIX {
|
|
+ ICMPV6_OPT_HDR hdr;
|
|
+ u8_t prefix_len;
|
|
+ u8_t flags;
|
|
+#define ICMPV6_OPT_PREFIX_FLAG_ON_LINK (1 << 7)
|
|
+#define ICMPV6_OPT_PREFIX_FLAG_BIT_A (1 << 6)
|
|
+ u32_t valid_lifetime;
|
|
+ u32_t preferred_lifetime;
|
|
+ u32_t reserved;
|
|
+ IPV6_ADDR prefix;
|
|
+} ICMPV6_OPT_PREFIX, __FAR__ * pICMPV6_OPT_PREFIX;
|
|
+
|
|
+/* Neighbor Solicitation */
|
|
+typedef struct ICMPV6_ND_SOLICIT {
|
|
+ ICMPV6_HDR nd_ns_hdr;
|
|
+ //struct id_struct nd_ns_target; /*target address */
|
|
+} ICMPV6_ND_SOLICIT, *pICMPV6_ND_SOLICIT;
|
|
+
|
|
+/* Router Advertisement */
|
|
+typedef struct ICMPV6_ROUTER_ADVERT {
|
|
+ ICMPV6_HDR header;
|
|
+ u32_t reachable_time;
|
|
+ u32_t retransmit_timer;
|
|
+} ICMPV6_ROUTER_ADVERT, __FAR__ * pICMPV6_ROUTER_ADVERT;
|
|
+
|
|
+#define nd_ra_type header.icmpv6_type
|
|
+#define nd_ra_code header.icmpv6_code
|
|
+#define nd_ra_cksum header.icmpv6_cksum
|
|
+#define nd_ra_curhoplimit header.data.icmpv6_un_data8[0]
|
|
+#define nd_ra_flags_reserved header.data.icmpv6_un_data8[1]
|
|
+#define nd_ra_router_lifetime header.data.icmpv6_un_data16[1]
|
|
+
|
|
+#ifdef PACK_DATA_STRUCTURE
|
|
+#pragma pack(pop)
|
|
+#endif
|
|
+
|
|
+#endif /* __ICMPV6_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/ipv6.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/ipv6.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/ipv6.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/ipv6.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,1269 @@
|
|
+/*
|
|
+ * Copyright (c) 2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Eddie Wai (eddie.wai@broadcom.com)
|
|
+ * Based on Kevin Tran's iSCSI boot code
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * ipv6.c - This file contains simplifed IPv6 processing code.
|
|
+ *
|
|
+ */
|
|
+#include <stdio.h>
|
|
+#include <string.h>
|
|
+#include "logger.h"
|
|
+#include "uip.h"
|
|
+#include "ipv6.h"
|
|
+#include "ipv6_pkt.h"
|
|
+#include "icmpv6.h"
|
|
+#include "uipopt.h"
|
|
+#include "dhcpv6.h"
|
|
+
|
|
+inline int best_match_bufcmp(u8_t * a, u8_t * b, int len)
|
|
+{
|
|
+ int i;
|
|
+
|
|
+ for (i = 0; i < len; i++) {
|
|
+ if (a[i] != b[i])
|
|
+ break;
|
|
+ }
|
|
+ return i;
|
|
+}
|
|
+
|
|
+/* Local function prototypes */
|
|
+STATIC int ipv6_is_it_our_address(pIPV6_CONTEXT ipv6_context,
|
|
+ IPV6_ADDR __FAR__ * ipv6_addr);
|
|
+STATIC void ipv6_insert_protocol_chksum(pIPV6_HDR ipv6);
|
|
+STATIC void ipv6_update_arp_table(pIPV6_CONTEXT ipv6_context,
|
|
+ IPV6_ADDR __FAR__ * ip_addr,
|
|
+ MAC_ADDR __FAR__ * mac_addr);
|
|
+STATIC void ipv6_icmp_init_link_option(pIPV6_CONTEXT ipv6_context,
|
|
+ pICMPV6_OPT_LINK_ADDR link_opt,
|
|
+ u8_t type);
|
|
+STATIC void ipv6_icmp_rx(pIPV6_CONTEXT ipv6_context);
|
|
+STATIC void ipv6_icmp_handle_nd_adv(pIPV6_CONTEXT ipv6_context);
|
|
+STATIC void ipv6_icmp_handle_nd_sol(pIPV6_CONTEXT ipv6_context);
|
|
+STATIC void ipv6_icmp_handle_echo_request(pIPV6_CONTEXT ipv6_context);
|
|
+STATIC void ipv6_icmp_handle_router_adv(pIPV6_CONTEXT ipv6_context);
|
|
+STATIC void ipv6_icmp_process_prefix(pIPV6_CONTEXT ipv6_context,
|
|
+ pICMPV6_OPT_PREFIX icmp_prefix);
|
|
+STATIC void ipv6_udp_rx(pIPV6_CONTEXT ipv6_context);
|
|
+
|
|
+int iscsiL2Send(pIPV6_CONTEXT ipv6_context, int pkt_len)
|
|
+{
|
|
+ LOG_DEBUG("IPV6: iscsiL2Send");
|
|
+ uip_send(ipv6_context->ustack,
|
|
+ (void *)ipv6_context->ustack->data_link_layer, pkt_len);
|
|
+
|
|
+ return pkt_len;
|
|
+}
|
|
+
|
|
+int iscsiL2AddMcAddr(pIPV6_CONTEXT ipv6_context, MAC_ADDR * new_mc_addr)
|
|
+{
|
|
+ int i;
|
|
+ MAC_ADDR *mc_addr;
|
|
+ const MAC_ADDR all_zeroes_mc = { 0, 0, 0, 0, 0, 0 };
|
|
+
|
|
+ mc_addr = ipv6_context->mc_addr;
|
|
+ for (i = 0; i < MAX_MCADDR_TABLE; i++, mc_addr++)
|
|
+ if (!memcmp((char __FAR__ *)mc_addr,
|
|
+ (char __FAR__ *)new_mc_addr, sizeof(MAC_ADDR)))
|
|
+ return TRUE; /* Already in the mc table */
|
|
+
|
|
+ mc_addr = ipv6_context->mc_addr;
|
|
+ for (i = 0; i < MAX_MCADDR_TABLE; i++, mc_addr++)
|
|
+ if (!memcmp((char __FAR__ *)mc_addr,
|
|
+ (char __FAR__ *)&all_zeroes_mc, sizeof(MAC_ADDR))) {
|
|
+ memcpy((char __FAR__ *)mc_addr,
|
|
+ (char __FAR__ *)new_mc_addr, sizeof(MAC_ADDR));
|
|
+ LOG_DEBUG("IPV6: mc_addr added %x:%x:%x:%x:%x:%x",
|
|
+ *(u8_t *) new_mc_addr,
|
|
+ *((u8_t *) new_mc_addr + 1),
|
|
+ *((u8_t *) new_mc_addr + 2),
|
|
+ *((u8_t *) new_mc_addr + 3),
|
|
+ *((u8_t *) new_mc_addr + 4),
|
|
+ *((u8_t *) new_mc_addr + 5));
|
|
+ return TRUE;
|
|
+ }
|
|
+ return FALSE;
|
|
+}
|
|
+
|
|
+int iscsiL2IsOurMcAddr(pIPV6_CONTEXT ipv6_context, pMAC_ADDRESS dest_mac)
|
|
+{
|
|
+ int i;
|
|
+ MAC_ADDR *mc_addr;
|
|
+
|
|
+ mc_addr = ipv6_context->mc_addr;
|
|
+ for (i = 0; i < MAX_MCADDR_TABLE; i++, mc_addr++)
|
|
+ if (!memcmp((char __FAR__ *)mc_addr,
|
|
+ (char __FAR__ *)dest_mac->addr, sizeof(MAC_ADDR)))
|
|
+ return TRUE;
|
|
+ return FALSE;
|
|
+}
|
|
+
|
|
+void ipv6_init(struct ndpc_state *ndp, int cfg)
|
|
+{
|
|
+ int i;
|
|
+ pIPV6_CONTEXT ipv6_context = (pIPV6_CONTEXT) ndp->ipv6_context;
|
|
+ u8_t *mac_addr = (u8_t *) ndp->mac_addr;
|
|
+ pIPV6_ARP_ENTRY ipv6_arp_table;
|
|
+ pIPV6_PREFIX_ENTRY ipv6_prefix_table;
|
|
+ MAC_ADDR mc_addr;
|
|
+
|
|
+ if (ipv6_context == NULL) {
|
|
+ LOG_ERR("IPV6: INIT ipv6_context is NULL");
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ memset((char __FAR__ *)ipv6_context, 0, sizeof(IPV6_CONTEXT));
|
|
+
|
|
+ /* Associate the nic_iface's ustack to this ipv6_context */
|
|
+ ipv6_context->ustack = ndp->ustack;
|
|
+
|
|
+ ipv6_arp_table = &ipv6_context->ipv6_arp_table[0];
|
|
+ ipv6_prefix_table = &ipv6_context->ipv6_prefix_table[0];
|
|
+
|
|
+ memset((char __FAR__ *)ipv6_arp_table, 0, sizeof(ipv6_arp_table));
|
|
+ memset((char __FAR__ *)ipv6_prefix_table, 0, sizeof(ipv6_prefix_table));
|
|
+ memcpy((char __FAR__ *)&ipv6_context->mac_addr,
|
|
+ (char __FAR__ *)mac_addr, sizeof(MAC_ADDR));
|
|
+ /*
|
|
+ * Per RFC 2373.
|
|
+ * There are two types of local-use unicast addresses defined. These
|
|
+ * are Link-Local and Site-Local. The Link-Local is for use on a single
|
|
+ * link and the Site-Local is for use in a single site. Link-Local
|
|
+ * addresses have the following format:
|
|
+ *
|
|
+ * | 10 |
|
|
+ * | bits | 54 bits | 64 bits |
|
|
+ * +----------+-------------------------+----------------------------+
|
|
+ * |1111111010| 0 | interface ID |
|
|
+ * +----------+-------------------------+----------------------------+
|
|
+ */
|
|
+ ipv6_context->link_local_addr.addr8[0] = 0xfe;
|
|
+ ipv6_context->link_local_addr.addr8[1] = 0x80;
|
|
+ /* Bit 1 is 1 to indicate universal scope. */
|
|
+ ipv6_context->link_local_addr.addr8[8] = mac_addr[0] | 0x2;
|
|
+ ipv6_context->link_local_addr.addr8[9] = mac_addr[1];
|
|
+ ipv6_context->link_local_addr.addr8[10] = mac_addr[2];
|
|
+ ipv6_context->link_local_addr.addr8[11] = 0xff;
|
|
+ ipv6_context->link_local_addr.addr8[12] = 0xfe;
|
|
+ ipv6_context->link_local_addr.addr8[13] = mac_addr[3];
|
|
+ ipv6_context->link_local_addr.addr8[14] = mac_addr[4];
|
|
+ ipv6_context->link_local_addr.addr8[15] = mac_addr[5];
|
|
+
|
|
+ ipv6_context->link_local_multi.addr8[0] = 0xff;
|
|
+ ipv6_context->link_local_multi.addr8[1] = 0x02;
|
|
+ ipv6_context->link_local_multi.addr8[11] = 0x01;
|
|
+ ipv6_context->link_local_multi.addr8[12] = 0xff;
|
|
+ ipv6_context->link_local_multi.addr8[13] |=
|
|
+ ipv6_context->link_local_addr.addr8[13];
|
|
+ ipv6_context->link_local_multi.addr16[7] =
|
|
+ ipv6_context->link_local_addr.addr16[7];
|
|
+
|
|
+ /* Default Prefix length is 64 */
|
|
+ /* Add Link local address to the head of the ipv6 address
|
|
+ list */
|
|
+ ipv6_add_prefix_entry(ipv6_context,
|
|
+ &ipv6_context->link_local_addr, 64);
|
|
+
|
|
+ /*
|
|
+ * Convert Multicast IP address to Multicast MAC adress per
|
|
+ * RFC 2464: Transmission of IPv6 Packets over Ethernet Networks
|
|
+ *
|
|
+ * An IPv6 packet with a multicast destination address DST, consisting
|
|
+ * of the sixteen octets DST[1] through DST[16], is transmitted to the
|
|
+ * Ethernet multicast address whose first two octets are the value 3333
|
|
+ * hexadecimal and whose last four octets are the last four octets of
|
|
+ * DST.
|
|
+ *
|
|
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
+ * |0 0 1 1 0 0 1 1|0 0 1 1 0 0 1 1|
|
|
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
+ * | DST[13] | DST[14] |
|
|
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
+ * | DST[15] | DST[16] |
|
|
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
+ *
|
|
+ * IPv6 requires the following Multicast IP addresses setup per node.
|
|
+ */
|
|
+ for (i = 0; i < 3; i++) {
|
|
+ mc_addr[0] = 0x33;
|
|
+ mc_addr[1] = 0x33;
|
|
+ mc_addr[2] = 0x0;
|
|
+ mc_addr[3] = 0x0;
|
|
+ mc_addr[4] = 0x0;
|
|
+
|
|
+ switch (i) {
|
|
+ case 0:
|
|
+ /* All Nodes Multicast IPv6 address : ff02::1 */
|
|
+ mc_addr[5] = 0x1;
|
|
+ break;
|
|
+
|
|
+ case 1:
|
|
+ /* All Host Multicast IPv6 address : ff02::3 */
|
|
+ mc_addr[5] = 0x3;
|
|
+ break;
|
|
+
|
|
+ case 2:
|
|
+ /* Solicited Node Multicast Address: ff02::01:ffxx:yyzz
|
|
+ */
|
|
+ mc_addr[2] = 0xff;
|
|
+ mc_addr[3] = mac_addr[3];
|
|
+ mc_addr[4] = mac_addr[4];
|
|
+ mc_addr[5] = mac_addr[5];
|
|
+ break;
|
|
+
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
+ iscsiL2AddMcAddr(ipv6_context, &mc_addr);
|
|
+ }
|
|
+
|
|
+ /* Default HOP number */
|
|
+ ipv6_context->hop_limit = IPV6_HOP_LIMIT;
|
|
+}
|
|
+
|
|
+int ipv6_add_prefix_entry(pIPV6_CONTEXT ipv6_context,
|
|
+ IPV6_ADDR * ipv6_addr, u8_t prefix_len)
|
|
+{
|
|
+ int i;
|
|
+ pIPV6_PREFIX_ENTRY prefix_entry;
|
|
+ pIPV6_PREFIX_ENTRY ipv6_prefix_table = ipv6_context->ipv6_prefix_table;
|
|
+
|
|
+ /* Check if there is an valid entry already. */
|
|
+ for (i = 0; i < IPV6_NUM_OF_ADDRESS_ENTRY; i++) {
|
|
+ prefix_entry = &ipv6_prefix_table[i];
|
|
+
|
|
+ if (prefix_entry->prefix_len != 0) {
|
|
+ if (memcmp((char __FAR__ *)&prefix_entry->address,
|
|
+ (char __FAR__ *)ipv6_addr,
|
|
+ sizeof(IPV6_ADDR)) == 0) {
|
|
+ /* We already initialize on this interface.
|
|
+ There is nothing to do */
|
|
+ return 0;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /* Find an unused entry */
|
|
+ for (i = 0; i < IPV6_NUM_OF_ADDRESS_ENTRY; i++) {
|
|
+ prefix_entry = &ipv6_prefix_table[i];
|
|
+
|
|
+ if (prefix_entry->prefix_len == 0) {
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (prefix_entry->prefix_len != 0)
|
|
+ return -1;
|
|
+
|
|
+ prefix_entry->prefix_len = prefix_len / 8;
|
|
+
|
|
+ memcpy((char __FAR__ *)&prefix_entry->address,
|
|
+ (char __FAR__ *)ipv6_addr, sizeof(IPV6_ADDR));
|
|
+
|
|
+
|
|
+ LOG_DEBUG("IPV6: add prefix ip addr "
|
|
+ "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x "
|
|
+ "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
|
|
+ prefix_entry->address.addr8[0], prefix_entry->address.addr8[1],
|
|
+ prefix_entry->address.addr8[2], prefix_entry->address.addr8[3],
|
|
+ prefix_entry->address.addr8[4], prefix_entry->address.addr8[5],
|
|
+ prefix_entry->address.addr8[6], prefix_entry->address.addr8[7],
|
|
+ prefix_entry->address.addr8[8], prefix_entry->address.addr8[9],
|
|
+ prefix_entry->address.addr8[10], prefix_entry->address.addr8[11],
|
|
+ prefix_entry->address.addr8[12], prefix_entry->address.addr8[13],
|
|
+ prefix_entry->address.addr8[14], prefix_entry->address.addr8[15]);
|
|
+
|
|
+ /* Put it on the list on head of the list. */
|
|
+ if (ipv6_context->addr_list != NULL) {
|
|
+ prefix_entry->next = ipv6_context->addr_list;
|
|
+ } else {
|
|
+ prefix_entry->next = NULL;
|
|
+ }
|
|
+
|
|
+ ipv6_context->addr_list = prefix_entry;
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+void ipv6_rx_packet(pIPV6_CONTEXT ipv6_context, u16_t len)
|
|
+{
|
|
+ pIPV6_HDR ipv6;
|
|
+ u16_t protocol;
|
|
+
|
|
+ if (!ipv6_context->ustack) {
|
|
+ LOG_WARN("ipv6 rx pkt ipv6_context=%p ustack=%p", ipv6_context,
|
|
+ ipv6_context->ustack);
|
|
+ return;
|
|
+ }
|
|
+ ipv6 = (pIPV6_HDR) ipv6_context->ustack->network_layer;
|
|
+ /* Make sure it's an IPv6 packet */
|
|
+ if ((ipv6->ipv6_version_fc & 0xf0) != IPV6_VERSION) {
|
|
+ /* It's not an IPv6 packet. Drop it. */
|
|
+ LOG_WARN("IPv6 version 0x%x not IPv6", ipv6->ipv6_version_fc);
|
|
+ return;
|
|
+ }
|
|
+ protocol = ipv6_process_rx(ipv6);
|
|
+
|
|
+ switch (protocol) {
|
|
+ case IPPROTO_ICMPV6:
|
|
+ ipv6_icmp_rx(ipv6_context);
|
|
+ break;
|
|
+
|
|
+ case IPPROTO_UDP:
|
|
+ /* Indicate to UDP processing code */
|
|
+ ipv6_udp_rx(ipv6_context);
|
|
+ break;
|
|
+
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
+}
|
|
+
|
|
+void ipv6_mc_init_dest_mac(pETH_HDR eth, pIPV6_HDR ipv6)
|
|
+{
|
|
+ int i;
|
|
+ /*
|
|
+ * Initialize address mapping of IPV6 Multicast to multicast MAC
|
|
+ * address per RFC 2464.
|
|
+ *
|
|
+ * An IPv6 packet with a multicast destination address DST, consisting
|
|
+ * of the sixteen octets DST[1] through DST[16], is transmitted to the
|
|
+ * Ethernet multicast address whose first two octets are the value 3333
|
|
+ * hexadecimal and whose last four octets are the last four octets of
|
|
+ * DST.
|
|
+ *
|
|
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
+ * |0 0 1 1 0 0 1 1|0 0 1 1 0 0 1 1|
|
|
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
+ * | DST[13] | DST[14] |
|
|
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
+ * | DST[15] | DST[16] |
|
|
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
+ */
|
|
+ eth->dest_mac[0] = 0x33;
|
|
+ eth->dest_mac[1] = 0x33;
|
|
+ for (i = 0; i < 4; i++)
|
|
+ eth->dest_mac[2 + i] = ipv6->ipv6_dst.addr8[12 + i];
|
|
+}
|
|
+
|
|
+int ipv6_autoconfig(pIPV6_CONTEXT ipv6_context)
|
|
+{
|
|
+ return ipv6_discover_address(ipv6_context);
|
|
+}
|
|
+
|
|
+int ipv6_discover_address(pIPV6_CONTEXT ipv6_context)
|
|
+{
|
|
+ pETH_HDR eth = (pETH_HDR) ipv6_context->ustack->data_link_layer;
|
|
+ pIPV6_HDR ipv6 = (pIPV6_HDR) ipv6_context->ustack->network_layer;
|
|
+ pICMPV6_HDR icmp = (pICMPV6_HDR) ((u8_t *) ipv6 + sizeof(IPV6_HDR));
|
|
+ int rc = 0;
|
|
+
|
|
+ /* Retrieve tx buffer */
|
|
+ if (eth == NULL || ipv6 == NULL) {
|
|
+ return -EAGAIN;
|
|
+ }
|
|
+
|
|
+ /* Setup IPv6 All Routers Multicast address : ff02::2 */
|
|
+ memset((char __FAR__ *)&ipv6->ipv6_dst, 0, sizeof(IPV6_ADDR));
|
|
+ ipv6->ipv6_dst.addr8[0] = 0xff;
|
|
+ ipv6->ipv6_dst.addr8[1] = 0x02;
|
|
+ ipv6->ipv6_dst.addr8[15] = 0x02;
|
|
+ ipv6->ipv6_hop_limit = 255;
|
|
+
|
|
+ /* Initialize MAC header based on destination MAC address */
|
|
+ ipv6_mc_init_dest_mac(eth, ipv6);
|
|
+ ipv6->ipv6_nxt_hdr = IPPROTO_ICMPV6;
|
|
+
|
|
+ icmp->icmpv6_type = ICMPV6_RTR_SOL;
|
|
+ icmp->icmpv6_code = 0;
|
|
+ icmp->icmpv6_data = 0;
|
|
+ icmp->icmpv6_cksum = 0;
|
|
+ ipv6_icmp_init_link_option(ipv6_context,
|
|
+ (pICMPV6_OPT_LINK_ADDR) ((u8_t *) icmp +
|
|
+ sizeof(ICMPV6_HDR)),
|
|
+ IPV6_ICMP_OPTION_SRC_ADDR);
|
|
+ ipv6->ipv6_plen =
|
|
+ HOST_TO_NET16((sizeof(ICMPV6_HDR) + sizeof(ICMPV6_OPT_LINK_ADDR)));
|
|
+ memcpy((char __FAR__ *)&ipv6->ipv6_src,
|
|
+ (char __FAR__ *)&ipv6_context->link_local_addr,
|
|
+ sizeof(IPV6_ADDR));
|
|
+
|
|
+ icmp->icmpv6_cksum = 0;
|
|
+ LOG_DEBUG("IPV6: Send rtr sol");
|
|
+ ipv6_send(ipv6_context, (u8_t *) icmp - (u8_t *) eth +
|
|
+ sizeof(ICMPV6_HDR) + sizeof(ICMPV6_OPT_LINK_ADDR));
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+u16_t ipv6_process_rx(pIPV6_HDR ipv6)
|
|
+{
|
|
+ return ipv6->ipv6_nxt_hdr;
|
|
+}
|
|
+
|
|
+int ipv6_send(pIPV6_CONTEXT ipv6_context, u16_t packet_len)
|
|
+{
|
|
+ pETH_HDR eth = (pETH_HDR) ipv6_context->ustack->data_link_layer;
|
|
+ pIPV6_HDR ipv6 = (pIPV6_HDR) ipv6_context->ustack->network_layer;
|
|
+
|
|
+ ipv6_setup_hdrs(ipv6_context, eth, ipv6, packet_len);
|
|
+
|
|
+ return iscsiL2Send(ipv6_context, packet_len);
|
|
+}
|
|
+
|
|
+void ipv6_send_udp_packet(pIPV6_CONTEXT ipv6_context, u16_t packet_len)
|
|
+{
|
|
+ pETH_HDR eth = (pETH_HDR) ipv6_context->ustack->data_link_layer;
|
|
+ pIPV6_HDR ipv6 = (pIPV6_HDR) ipv6_context->ustack->network_layer;
|
|
+ pUDP_HDR udp = (pUDP_HDR) ((u8_t *) ipv6 + sizeof(IPV6_HDR));
|
|
+
|
|
+ ipv6->ipv6_nxt_hdr = IPPROTO_UDP;
|
|
+ ipv6->ipv6_plen =
|
|
+ HOST_TO_NET16(packet_len - ((u8_t *) udp - (u8_t *) eth));
|
|
+
|
|
+ udp->chksum = 0;
|
|
+
|
|
+ /*
|
|
+ * We only use UDP packet for DHCPv6. The source address is always
|
|
+ * link-local address.
|
|
+ */
|
|
+ ipv6->ipv6_src.addr[0] = 0;
|
|
+
|
|
+ /* Hop limit is always 1 for DHCPv6 packet. */
|
|
+ ipv6->ipv6_hop_limit = 1;
|
|
+
|
|
+ ipv6_send(ipv6_context, packet_len);
|
|
+}
|
|
+
|
|
+void ipv6_setup_hdrs(pIPV6_CONTEXT ipv6_context, pETH_HDR eth, pIPV6_HDR ipv6,
|
|
+ u16_t packet_len)
|
|
+{
|
|
+ pIPV6_ADDR our_address;
|
|
+
|
|
+ /* VLAN will be taken cared of in the nic layer */
|
|
+ eth->len_type = HOST_TO_NET16(LAYER2_TYPE_IPV6);
|
|
+ memcpy((char __FAR__ *)ð->src_mac,
|
|
+ (char __FAR__ *)&ipv6_context->mac_addr, sizeof(MAC_ADDR));
|
|
+
|
|
+ /* Put the traffic class into the packet. */
|
|
+ memset(&ipv6->ipv6_version_fc, 0, sizeof(u32_t));
|
|
+ ipv6->ipv6_version_fc = IPV6_VERSION;
|
|
+ if (ipv6->ipv6_hop_limit == 0)
|
|
+ ipv6->ipv6_hop_limit = ipv6_context->hop_limit;
|
|
+
|
|
+ if (ipv6->ipv6_src.addr[0] == 0) {
|
|
+ /* Need to initialize source IP address. */
|
|
+ if ((our_address = ipv6_our_address(ipv6_context)) != NULL) {
|
|
+ /* Assume that caller has filled in the destination
|
|
+ IP address */
|
|
+ memcpy((char __FAR__ *)&ipv6->ipv6_src,
|
|
+ (char __FAR__ *)our_address, sizeof(IPV6_ADDR));
|
|
+ }
|
|
+ }
|
|
+
|
|
+ ipv6_insert_protocol_chksum(ipv6);
|
|
+}
|
|
+
|
|
+STATIC void ipv6_insert_protocol_chksum(pIPV6_HDR ipv6)
|
|
+{
|
|
+ u32_t sum;
|
|
+ u16_t *ptr;
|
|
+ u16_t *protocol_data_ptr;
|
|
+ int i;
|
|
+ u16_t protocol_data_len;
|
|
+ u16_t checksum;
|
|
+
|
|
+ /*
|
|
+ * This routine assumes that there is no extension header. This driver
|
|
+ * doesn't user extension header to keep driver small and simple.
|
|
+ *
|
|
+ * Pseudo check consists of the following:
|
|
+ * SRC IP, DST IP, Protocol Data Length, and Next Header.
|
|
+ */
|
|
+ sum = 0;
|
|
+ ptr = (u16_t *) & ipv6->ipv6_src;
|
|
+
|
|
+ for (i = 0; i < sizeof(IPV6_ADDR); i++) {
|
|
+ sum += HOST_TO_NET16(*ptr);
|
|
+ ptr++;
|
|
+ }
|
|
+
|
|
+ /* Keep track where the layer header is */
|
|
+ protocol_data_ptr = ptr;
|
|
+
|
|
+ protocol_data_len = HOST_TO_NET16(ipv6->ipv6_plen);
|
|
+ sum += protocol_data_len;
|
|
+ sum += ipv6->ipv6_nxt_hdr;
|
|
+ /* Sum now contains sum of IPv6 pseudo header. Let's add the data
|
|
+ streams. */
|
|
+ if (protocol_data_len & 1) {
|
|
+ /* Length of data is odd */
|
|
+ *((u8_t *) ptr + protocol_data_len) = 0;
|
|
+ protocol_data_len++;
|
|
+ }
|
|
+
|
|
+ for (i = 0; i < protocol_data_len / 2; i++) {
|
|
+ sum += HOST_TO_NET16(*ptr);
|
|
+ ptr++;
|
|
+ }
|
|
+
|
|
+ sum = (sum >> 16) + (sum & 0xffff);
|
|
+ sum += (sum >> 16);
|
|
+ sum &= 0xffff;
|
|
+ checksum = (u16_t) (~sum);
|
|
+ checksum = HOST_TO_NET16(checksum);
|
|
+
|
|
+ switch (ipv6->ipv6_nxt_hdr) {
|
|
+ case IPPROTO_ICMPV6:
|
|
+ /* Insert correct ICMPv6 checksum */
|
|
+ ((pICMPV6_HDR) (protocol_data_ptr))->icmpv6_cksum = checksum;
|
|
+ break;
|
|
+ case IPPROTO_UDP:
|
|
+ /* Insert correct UDP checksum */
|
|
+ ((pUDP_HDR) protocol_data_ptr)->chksum = checksum;
|
|
+ break;
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
+}
|
|
+
|
|
+int ipv6_is_it_our_link_local_address(pIPV6_CONTEXT ipv6_context,
|
|
+ IPV6_ADDR __FAR__ * ipv6_addr)
|
|
+{
|
|
+ u8_t *test_adddr = (u8_t *) ipv6_addr->addr8;
|
|
+ u8_t test_remainder;
|
|
+
|
|
+ if (test_adddr[0] != ipv6_context->link_local_addr.addr8[0])
|
|
+ return FALSE;
|
|
+
|
|
+ test_remainder = (test_adddr[1] & 0xC0) >> 6;
|
|
+ if (test_remainder != 2)
|
|
+ return FALSE;
|
|
+
|
|
+ return TRUE;
|
|
+}
|
|
+
|
|
+STATIC int ipv6_is_it_our_address(pIPV6_CONTEXT ipv6_context,
|
|
+ IPV6_ADDR __FAR__ * ipv6_addr)
|
|
+{
|
|
+ pIPV6_PREFIX_ENTRY ipv6_prefix;
|
|
+
|
|
+ for (ipv6_prefix = ipv6_context->addr_list; ipv6_prefix != NULL;
|
|
+ ipv6_prefix = ipv6_prefix->next) {
|
|
+ if (IPV6_ARE_ADDR_EQUAL(&ipv6_prefix->address, ipv6_addr))
|
|
+ return TRUE;
|
|
+ }
|
|
+
|
|
+ return FALSE;
|
|
+}
|
|
+
|
|
+pIPV6_ADDR ipv6_our_address(pIPV6_CONTEXT ipv6_context)
|
|
+{
|
|
+ return &ipv6_context->link_local_addr;
|
|
+}
|
|
+
|
|
+int ipv6_ip_in_arp_table(pIPV6_CONTEXT ipv6_context, pIPV6_ADDR ipv6_addr,
|
|
+ MAC_ADDR * mac_addr)
|
|
+{
|
|
+ pIPV6_ARP_ENTRY arp_entry;
|
|
+ int i;
|
|
+
|
|
+ for (i = 0; i < UIP_ARPTAB_SIZE; i++) {
|
|
+ arp_entry = &ipv6_context->ipv6_arp_table[i];
|
|
+
|
|
+ if (IPV6_ARE_ADDR_EQUAL(&arp_entry->ip_addr, ipv6_addr)) {
|
|
+ memcpy((char *)mac_addr, &arp_entry->mac_addr,
|
|
+ sizeof(MAC_ADDR));
|
|
+ return 1;
|
|
+ }
|
|
+ }
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+pIPV6_ADDR ipv6_find_longest_match(pIPV6_CONTEXT ipv6_context,
|
|
+ pIPV6_ADDR ip_addr)
|
|
+{
|
|
+ pIPV6_PREFIX_ENTRY ipv6_prefix;
|
|
+ pIPV6_PREFIX_ENTRY best_match = NULL;
|
|
+ int longest_len = -1;
|
|
+ int len;
|
|
+
|
|
+ for (ipv6_prefix = ipv6_context->addr_list; ipv6_prefix != NULL;
|
|
+ ipv6_prefix = ipv6_prefix->next) {
|
|
+ if (!IPV6_IS_ADDR_LINKLOCAL(&ipv6_prefix->address)) {
|
|
+ len = best_match_bufcmp((u8_t *) & ipv6_prefix->address,
|
|
+ (u8_t *) ip_addr,
|
|
+ sizeof(IPV6_ADDR));
|
|
+ if (len > longest_len) {
|
|
+ best_match = ipv6_prefix;
|
|
+ longest_len = len;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (best_match)
|
|
+ return &best_match->address;
|
|
+
|
|
+ return NULL;
|
|
+}
|
|
+
|
|
+void ipv6_arp_out(pIPV6_CONTEXT ipv6_context, int *uip_len)
|
|
+{
|
|
+ /* Empty routine */
|
|
+}
|
|
+
|
|
+
|
|
+STATIC void ipv6_update_arp_table(pIPV6_CONTEXT ipv6_context,
|
|
+ IPV6_ADDR __FAR__ * ip_addr,
|
|
+ MAC_ADDR __FAR__ * mac_addr)
|
|
+{
|
|
+ pIPV6_ARP_ENTRY arp_entry;
|
|
+ int i;
|
|
+ pIPV6_ARP_ENTRY ipv6_arp_table = ipv6_context->ipv6_arp_table;
|
|
+
|
|
+ LOG_DEBUG("IPV6: ARP update");
|
|
+ /*
|
|
+ * Walk through the ARP mapping table and try to find an entry to
|
|
+ * update. If none is found, the IP -> MAC address mapping is
|
|
+ * inserted in the ARP table.
|
|
+ */
|
|
+ for (i = 0; i < UIP_ARPTAB_SIZE; i++) {
|
|
+ arp_entry = &ipv6_arp_table[i];
|
|
+
|
|
+ /* Only check those entries that are actually in use. */
|
|
+ if (arp_entry->ip_addr.addr[0] != 0) {
|
|
+ /*
|
|
+ * Check if the source IP address of the incoming
|
|
+ * packet matches the IP address in this ARP table
|
|
+ * entry.
|
|
+ */
|
|
+ if (IPV6_ARE_ADDR_EQUAL(&arp_entry->ip_addr, ip_addr)) {
|
|
+ /* An old entry found, update this and return */
|
|
+ memcpy((char __FAR__ *)&arp_entry->mac_addr,
|
|
+ (char __FAR__ *)mac_addr,
|
|
+ sizeof(MAC_ADDR));
|
|
+ arp_entry->time = ipv6_context->arptime;
|
|
+ return;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * If we get here, no existing ARP table entry was found, so we
|
|
+ * create one.
|
|
+ *
|
|
+ * First, we try to find an unused entry in the ARP table.
|
|
+ */
|
|
+ for (i = 0; i < UIP_ARPTAB_SIZE; i++) {
|
|
+ arp_entry = &ipv6_arp_table[i];
|
|
+
|
|
+ if (arp_entry->ip_addr.addr[0] == 0)
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ if (i == UIP_ARPTAB_SIZE)
|
|
+ return;
|
|
+
|
|
+ /* Index j is the entry that is least used */
|
|
+ arp_entry = &ipv6_arp_table[i];
|
|
+ memcpy((char __FAR__ *)&arp_entry->ip_addr, (char __FAR__ *)ip_addr,
|
|
+ sizeof(IPV6_ADDR));
|
|
+ memcpy((char __FAR__ *)&arp_entry->mac_addr,
|
|
+ (char __FAR__ *)mac_addr, sizeof(MAC_ADDR));
|
|
+
|
|
+ arp_entry->time = ipv6_context->arptime;
|
|
+}
|
|
+
|
|
+/* DestIP is intact */
|
|
+int ipv6_send_nd_solicited_packet(pIPV6_CONTEXT ipv6_context, pETH_HDR eth,
|
|
+ pIPV6_HDR ipv6)
|
|
+{
|
|
+ pICMPV6_HDR icmp;
|
|
+ int pkt_len = 0;
|
|
+ pIPV6_ADDR longest_match_addr;
|
|
+
|
|
+ ipv6->ipv6_nxt_hdr = IPPROTO_ICMPV6;
|
|
+
|
|
+ /* Depending on the IPv6 address of the target, we'll need to determine
|
|
+ whether we use the assigned IPv6 address/RA or the link local address
|
|
+ */
|
|
+ /* Use Link-local as source address */
|
|
+ if (ipv6_is_it_our_link_local_address(ipv6_context, &ipv6->ipv6_dst) ==
|
|
+ TRUE) {
|
|
+ LOG_DEBUG("IPV6: NS using link local");
|
|
+ memcpy((char __FAR__ *)&ipv6->ipv6_src,
|
|
+ (char __FAR__ *)&ipv6_context->link_local_addr,
|
|
+ sizeof(IPV6_ADDR));
|
|
+ } else {
|
|
+ longest_match_addr =
|
|
+ ipv6_find_longest_match(ipv6_context, &ipv6->ipv6_dst);
|
|
+ if (longest_match_addr) {
|
|
+ LOG_DEBUG("IPV6: NS using longest match addr");
|
|
+ memcpy((char __FAR__ *)&ipv6->ipv6_src,
|
|
+ (char __FAR__ *)longest_match_addr,
|
|
+ sizeof(IPV6_ADDR));
|
|
+ } else {
|
|
+ LOG_DEBUG("IPV6: NS using link local instead");
|
|
+ memcpy((char __FAR__ *)&ipv6->ipv6_src,
|
|
+ (char __FAR__ *)&ipv6_context->link_local_addr,
|
|
+ sizeof(IPV6_ADDR));
|
|
+ }
|
|
+ }
|
|
+ icmp = (pICMPV6_HDR) ((u8_t *) ipv6 + sizeof(IPV6_HDR));
|
|
+
|
|
+ LOG_DEBUG
|
|
+ ("IPV6: NS host ip addr %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x"
|
|
+ " %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
|
|
+ ipv6->ipv6_src.addr8[0], ipv6->ipv6_src.addr8[1],
|
|
+ ipv6->ipv6_src.addr8[2], ipv6->ipv6_src.addr8[3],
|
|
+ ipv6->ipv6_src.addr8[4], ipv6->ipv6_src.addr8[5],
|
|
+ ipv6->ipv6_src.addr8[6], ipv6->ipv6_src.addr8[7],
|
|
+ ipv6->ipv6_src.addr8[8], ipv6->ipv6_src.addr8[9],
|
|
+ ipv6->ipv6_src.addr8[10], ipv6->ipv6_src.addr8[11],
|
|
+ ipv6->ipv6_src.addr8[12], ipv6->ipv6_src.addr8[13],
|
|
+ ipv6->ipv6_src.addr8[14], ipv6->ipv6_src.addr8[15]);
|
|
+ /*
|
|
+ * Destination IP address to be resolved is after the ICMPv6
|
|
+ * header.
|
|
+ */
|
|
+ memcpy((char __FAR__ *)((u8_t *) icmp + sizeof(ICMPV6_HDR)),
|
|
+ (char __FAR__ *)&ipv6->ipv6_dst, sizeof(IPV6_ADDR));
|
|
+
|
|
+ /*
|
|
+ * Destination IP in the IPv6 header contains solicited-node multicast
|
|
+ * address corresponding to the target address.
|
|
+ *
|
|
+ * ff02::01:ffxx:yyzz. Where xyz are least
|
|
+ * significant of 24-bit MAC address.
|
|
+ */
|
|
+ memset((char __FAR__ *)&ipv6->ipv6_dst, 0, sizeof(IPV6_ADDR) - 3);
|
|
+ ipv6->ipv6_dst.addr8[0] = 0xff;
|
|
+ ipv6->ipv6_dst.addr8[1] = 0x02;
|
|
+ ipv6->ipv6_dst.addr8[11] = 0x01;
|
|
+ ipv6->ipv6_dst.addr8[12] = 0xff;
|
|
+ ipv6_mc_init_dest_mac(eth, ipv6);
|
|
+ ipv6->ipv6_hop_limit = 255;
|
|
+
|
|
+ icmp->icmpv6_type = ICMPV6_NEIGH_SOL;
|
|
+ icmp->icmpv6_code = 0;
|
|
+ icmp->icmpv6_data = 0;
|
|
+ icmp->icmpv6_cksum = 0;
|
|
+ ipv6_icmp_init_link_option(ipv6_context,
|
|
+ (pICMPV6_OPT_LINK_ADDR) ((u8_t *) icmp +
|
|
+ sizeof(ICMPV6_HDR) +
|
|
+ sizeof(IPV6_ADDR)),
|
|
+ IPV6_ICMP_OPTION_SRC_ADDR);
|
|
+ ipv6->ipv6_plen =
|
|
+ HOST_TO_NET16((sizeof(ICMPV6_HDR) + sizeof(ICMPV6_OPT_LINK_ADDR) +
|
|
+ sizeof(IPV6_ADDR)));
|
|
+ /* Total packet size */
|
|
+ pkt_len = (u8_t *) icmp - (u8_t *) eth +
|
|
+ sizeof(ICMPV6_HDR) +
|
|
+ sizeof(ICMPV6_OPT_LINK_ADDR) + sizeof(IPV6_ADDR);
|
|
+ ipv6_setup_hdrs(ipv6_context, eth, ipv6, pkt_len);
|
|
+ return pkt_len;
|
|
+}
|
|
+
|
|
+STATIC void ipv6_icmp_init_link_option(pIPV6_CONTEXT ipv6_context,
|
|
+ pICMPV6_OPT_LINK_ADDR link_opt,
|
|
+ u8_t type)
|
|
+{
|
|
+ link_opt->hdr.type = type;
|
|
+ link_opt->hdr.len = sizeof(ICMPV6_OPT_LINK_ADDR) / 8;
|
|
+ memcpy((char __FAR__ *)&link_opt->link_addr,
|
|
+ (char __FAR__ *)&ipv6_context->mac_addr, sizeof(MAC_ADDRESS));
|
|
+}
|
|
+
|
|
+STATIC void ipv6_icmp_rx(pIPV6_CONTEXT ipv6_context)
|
|
+{
|
|
+ pIPV6_HDR ipv6 = (pIPV6_HDR) ipv6_context->ustack->network_layer;
|
|
+ pICMPV6_HDR icmp = (pICMPV6_HDR) ((u8_t *) ipv6 + sizeof(IPV6_HDR));
|
|
+
|
|
+ switch (icmp->icmpv6_type) {
|
|
+ case ICMPV6_RTR_ADV:
|
|
+ ipv6_icmp_handle_router_adv(ipv6_context);
|
|
+ break;
|
|
+
|
|
+ case ICMPV6_NEIGH_SOL:
|
|
+ ipv6_icmp_handle_nd_sol(ipv6_context);
|
|
+ break;
|
|
+
|
|
+ case ICMPV6_NEIGH_ADV:
|
|
+ ipv6_icmp_handle_nd_adv(ipv6_context);
|
|
+ break;
|
|
+
|
|
+ case ICMPV6_ECHO_REQUEST:
|
|
+ /* Response with ICMP reply */
|
|
+ ipv6_icmp_handle_echo_request(ipv6_context);
|
|
+ break;
|
|
+
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
+}
|
|
+
|
|
+STATIC void ipv6_icmp_handle_router_adv(pIPV6_CONTEXT ipv6_context)
|
|
+{
|
|
+ pIPV6_HDR ipv6 = (pIPV6_HDR) ipv6_context->ustack->network_layer;
|
|
+ pICMPV6_ROUTER_ADVERT icmp =
|
|
+ (pICMPV6_ROUTER_ADVERT) ((u8_t *) ipv6 + sizeof(IPV6_HDR));
|
|
+ pICMPV6_OPT_HDR icmp_opt;
|
|
+ u16_t opt_len;
|
|
+ u16_t len;
|
|
+
|
|
+ if (ipv6_context->flags & IPV6_FLAGS_ROUTER_ADV_RECEIVED)
|
|
+ return;
|
|
+
|
|
+ opt_len = HOST_TO_NET16(ipv6->ipv6_plen) - sizeof(ICMPV6_ROUTER_ADVERT);
|
|
+
|
|
+ icmp_opt = (pICMPV6_OPT_HDR) ((u8_t __FAR__ *) icmp +
|
|
+ sizeof(ICMPV6_ROUTER_ADVERT));
|
|
+ len = 0;
|
|
+ while (len < opt_len) {
|
|
+ icmp_opt = (pICMPV6_OPT_HDR) ((u8_t __FAR__ *) icmp +
|
|
+ sizeof(ICMPV6_ROUTER_ADVERT) +
|
|
+ len);
|
|
+
|
|
+ switch (icmp_opt->type) {
|
|
+ case IPV6_ICMP_OPTION_PREFIX:
|
|
+ ipv6_icmp_process_prefix(ipv6_context,
|
|
+ (pICMPV6_OPT_PREFIX) icmp_opt);
|
|
+ ipv6_context->flags |= IPV6_FLAGS_ROUTER_ADV_RECEIVED;
|
|
+ break;
|
|
+
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ len += icmp_opt->len * 8;
|
|
+ }
|
|
+
|
|
+ if (ipv6_context->flags & IPV6_FLAGS_ROUTER_ADV_RECEIVED) {
|
|
+ LOG_DEBUG("IPV6: RTR ADV nd_ra_flags=0x%x",
|
|
+ icmp->nd_ra_flags_reserved);
|
|
+ if (icmp->nd_ra_curhoplimit > 0)
|
|
+ ipv6_context->hop_limit = icmp->nd_ra_curhoplimit;
|
|
+
|
|
+ if (icmp->nd_ra_flags_reserved & IPV6_RA_MANAGED_FLAG)
|
|
+ ipv6_context->flags |= IPV6_FLAGS_MANAGED_ADDR_CONFIG;
|
|
+
|
|
+ if (icmp->nd_ra_flags_reserved & IPV6_RA_CONFIG_FLAG)
|
|
+ ipv6_context->flags |= IPV6_FLAGS_OTHER_STATEFUL_CONFIG;
|
|
+
|
|
+ if (icmp->nd_ra_router_lifetime != 0) {
|
|
+ /* This is a default router. */
|
|
+ memcpy((char __FAR__ *)&ipv6_context->default_router,
|
|
+ (char __FAR__ *)&ipv6->ipv6_src,
|
|
+ sizeof(IPV6_ADDR));
|
|
+ LOG_DEBUG("IPV6: def router "
|
|
+ "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x "
|
|
+ "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
|
|
+ ipv6->ipv6_src.addr8[0], ipv6->ipv6_src.addr8[1],
|
|
+ ipv6->ipv6_src.addr8[2], ipv6->ipv6_src.addr8[3],
|
|
+ ipv6->ipv6_src.addr8[4], ipv6->ipv6_src.addr8[5],
|
|
+ ipv6->ipv6_src.addr8[6], ipv6->ipv6_src.addr8[7],
|
|
+ ipv6->ipv6_src.addr8[8], ipv6->ipv6_src.addr8[9],
|
|
+ ipv6->ipv6_src.addr8[10], ipv6->ipv6_src.addr8[11],
|
|
+ ipv6->ipv6_src.addr8[12], ipv6->ipv6_src.addr8[13],
|
|
+ ipv6->ipv6_src.addr8[14], ipv6->ipv6_src.addr8[15]);
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+STATIC void ipv6_icmp_process_prefix(pIPV6_CONTEXT ipv6_context,
|
|
+ pICMPV6_OPT_PREFIX icmp_prefix)
|
|
+{
|
|
+ IPV6_ADDR addr;
|
|
+
|
|
+ /* we only process on-link address info */
|
|
+ if (!(icmp_prefix->flags & ICMPV6_OPT_PREFIX_FLAG_ON_LINK))
|
|
+ return;
|
|
+
|
|
+ /*
|
|
+ * We only process prefix length of 64 since our Identifier is 64-bit
|
|
+ */
|
|
+ if (icmp_prefix->prefix_len == 64) {
|
|
+ /* Copy 64-bit from the local-link address to create IPv6 address */
|
|
+ memcpy((char __FAR__ *)&addr,
|
|
+ (char __FAR__ *)&icmp_prefix->prefix, 8);
|
|
+ memcpy((char __FAR__ *)&addr.addr8[8],
|
|
+ &ipv6_context->link_local_addr.addr8[8], 8);
|
|
+ ipv6_add_prefix_entry(ipv6_context, &addr, 64);
|
|
+ }
|
|
+}
|
|
+
|
|
+STATIC void ipv6_icmp_handle_nd_adv(pIPV6_CONTEXT ipv6_context)
|
|
+{
|
|
+ pETH_HDR eth = (pETH_HDR) ipv6_context->ustack->data_link_layer;
|
|
+ pIPV6_HDR ipv6 = (pIPV6_HDR) ipv6_context->ustack->network_layer;
|
|
+ pICMPV6_HDR icmp = (pICMPV6_HDR) ((u8_t *) ipv6 + sizeof(IPV6_HDR));
|
|
+ pICMPV6_OPT_LINK_ADDR link_opt = (pICMPV6_OPT_LINK_ADDR)((u8_t *)icmp +
|
|
+ sizeof(ICMPV6_HDR) + sizeof(IPV6_ADDR));
|
|
+ pIPV6_ADDR tar_addr6;
|
|
+
|
|
+ /* Added the multicast check for ARP table update */
|
|
+ /* Should we qualify for only our host's multicast and our
|
|
+ link_local_multicast?? */
|
|
+ LOG_DEBUG("IPV6: Handle nd adv");
|
|
+ if ((ipv6_is_it_our_address(ipv6_context, &ipv6->ipv6_dst) == TRUE) ||
|
|
+ (memcmp((char __FAR__ *)&ipv6_context->link_local_multi,
|
|
+ (char __FAR__ *)&ipv6->ipv6_dst, sizeof(IPV6_ADDR)) == 0) ||
|
|
+ (memcmp((char __FAR__ *)&ipv6_context->multi,
|
|
+ (char __FAR__ *)&ipv6->ipv6_dst, sizeof(IPV6_ADDR)) == 0)) {
|
|
+ /*
|
|
+ * This is an ARP reply for our addresses. Let's update the
|
|
+ * ARP table.
|
|
+ */
|
|
+ ipv6_update_arp_table(ipv6_context, &ipv6->ipv6_src,
|
|
+ ð->src_mac);
|
|
+
|
|
+ /* Now check for the target address option and update that as
|
|
+ well */
|
|
+ if (link_opt->hdr.type == IPV6_ICMP_OPTION_TAR_ADDR) {
|
|
+ tar_addr6 = (pIPV6_ADDR)((u8_t *)icmp +
|
|
+ sizeof(ICMPV6_HDR));
|
|
+ LOG_DEBUG("IPV6: tar mac %x:%x:%x:%x:%x:%x",
|
|
+ link_opt->link_addr[0], link_opt->link_addr[1],
|
|
+ link_opt->link_addr[2], link_opt->link_addr[3],
|
|
+ link_opt->link_addr[4], link_opt->link_addr[5]);
|
|
+ LOG_DEBUG("IPV6: tar addr "
|
|
+ "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x "
|
|
+ "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
|
|
+ tar_addr6->addr8[0], tar_addr6->addr8[1],
|
|
+ tar_addr6->addr8[2], tar_addr6->addr8[3],
|
|
+ tar_addr6->addr8[4], tar_addr6->addr8[5],
|
|
+ tar_addr6->addr8[6], tar_addr6->addr8[7],
|
|
+ tar_addr6->addr8[8], tar_addr6->addr8[9],
|
|
+ tar_addr6->addr8[10], tar_addr6->addr8[11],
|
|
+ tar_addr6->addr8[12], tar_addr6->addr8[13],
|
|
+ tar_addr6->addr8[14], tar_addr6->addr8[15]);
|
|
+ ipv6_update_arp_table(ipv6_context, tar_addr6,
|
|
+ (MAC_ADDR *)link_opt->link_addr);
|
|
+ }
|
|
+
|
|
+ }
|
|
+}
|
|
+
|
|
+STATIC void ipv6_icmp_handle_nd_sol(pIPV6_CONTEXT ipv6_context)
|
|
+{
|
|
+ pETH_HDR eth = (pETH_HDR) ipv6_context->ustack->data_link_layer;
|
|
+ pIPV6_HDR ipv6 = (pIPV6_HDR) ipv6_context->ustack->network_layer;
|
|
+ pICMPV6_HDR icmp = (pICMPV6_HDR) ((u8_t *) ipv6 + sizeof(IPV6_HDR));
|
|
+ pICMPV6_OPT_LINK_ADDR link_opt = (pICMPV6_OPT_LINK_ADDR)((u8_t *)icmp +
|
|
+ sizeof(ICMPV6_HDR) + sizeof(IPV6_ADDR));
|
|
+ int icmpv6_opt_len = 0;
|
|
+ IPV6_ADDR tmp;
|
|
+ pIPV6_ADDR longest_match_addr;
|
|
+ pIPV6_ADDR tar_addr6;
|
|
+
|
|
+ LOG_DEBUG("IPV6: Handle nd sol");
|
|
+
|
|
+ if ((memcmp((char __FAR__ *)&ipv6_context->mac_addr,
|
|
+ (char __FAR__ *)eth->dest_mac, sizeof(MAC_ADDR)) != 0) &&
|
|
+ (iscsiL2IsOurMcAddr(ipv6_context, (pMAC_ADDRESS) & eth->dest_mac) ==
|
|
+ FALSE)) {
|
|
+ /* This packet is not for us to handle */
|
|
+ LOG_DEBUG("IPV6: MAC not addressed to us %x:%x:%x:%x:%x:%x",
|
|
+ eth->dest_mac[0], eth->dest_mac[1],
|
|
+ eth->dest_mac[2], eth->dest_mac[3],
|
|
+ eth->dest_mac[4], eth->dest_mac[5]);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ /* Also check for the icmpv6_data before generating the reply */
|
|
+ if (ipv6_is_it_our_address(ipv6_context,
|
|
+ (IPV6_ADDR *) ((u8_t *) icmp +
|
|
+ sizeof(ICMPV6_HDR)))
|
|
+ == FALSE) {
|
|
+ /* This packet is not for us to handle */
|
|
+ LOG_DEBUG("IPV6: IP not addressed to us");
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ /* Copy source MAC to Destination MAC */
|
|
+ memcpy((char __FAR__ *)ð->dest_mac,
|
|
+ (char __FAR__ *)ð->src_mac, sizeof(MAC_ADDR));
|
|
+
|
|
+ /* Dest IP contains source IP */
|
|
+ memcpy((char __FAR__ *)&tmp,
|
|
+ (char __FAR__ *)&ipv6->ipv6_dst, sizeof(IPV6_ADDR));
|
|
+ memcpy((char __FAR__ *)&ipv6->ipv6_dst,
|
|
+ (char __FAR__ *)&ipv6->ipv6_src, sizeof(IPV6_ADDR));
|
|
+
|
|
+ /* Examine the Neighbor Solicitation ICMPv6 target address field.
|
|
+ If target address exist, use that to find best match src address
|
|
+ for the reply */
|
|
+ if (link_opt->hdr.type == IPV6_ICMP_OPTION_SRC_ADDR) {
|
|
+ tar_addr6 = (pIPV6_ADDR)((u8_t *)icmp + sizeof(ICMPV6_HDR));
|
|
+ if (ipv6_is_it_our_link_local_address(ipv6_context, tar_addr6)
|
|
+ == TRUE) {
|
|
+ LOG_DEBUG("IPV6: NA using link local");
|
|
+ memcpy((char __FAR__ *)&ipv6->ipv6_src,
|
|
+ (char __FAR__ *)&ipv6_context->link_local_addr,
|
|
+ sizeof(IPV6_ADDR));
|
|
+ } else {
|
|
+ longest_match_addr =
|
|
+ ipv6_find_longest_match(ipv6_context, tar_addr6);
|
|
+ if (longest_match_addr) {
|
|
+ LOG_DEBUG("IPV6: NA using longest match addr");
|
|
+ memcpy((char __FAR__ *)&ipv6->ipv6_src,
|
|
+ (char __FAR__ *)longest_match_addr,
|
|
+ sizeof(IPV6_ADDR));
|
|
+ } else {
|
|
+ LOG_DEBUG("IPV6: NA using link local instead");
|
|
+ memcpy((char __FAR__ *)&ipv6->ipv6_src,
|
|
+ (char __FAR__ *)&ipv6_context->link_local_addr,
|
|
+ sizeof(IPV6_ADDR));
|
|
+ }
|
|
+ }
|
|
+ } else {
|
|
+ /* No target link address, just use whatever it sent to us */
|
|
+ LOG_DEBUG("IPV6: NA use dst addr");
|
|
+ memcpy((char __FAR__ *)&ipv6->ipv6_src,
|
|
+ (char __FAR__ *)&tmp,
|
|
+ sizeof(IPV6_ADDR));
|
|
+ }
|
|
+ ipv6->ipv6_hop_limit = 255;
|
|
+ icmp->icmpv6_type = ICMPV6_NEIGH_ADV;
|
|
+ icmp->icmpv6_code = 0;
|
|
+ icmp->icmpv6_data = 0;
|
|
+ icmp->icmpv6_cksum = 0;
|
|
+ icmp->data.icmpv6_un_data8[0] =
|
|
+ IPV6_NA_FLAG_SOLICITED | IPV6_NA_FLAG_OVERRIDE;
|
|
+ memcpy((char __FAR__ *)((u8_t *) icmp + sizeof(ICMPV6_HDR)),
|
|
+ (char __FAR__ *)&ipv6->ipv6_src,
|
|
+ sizeof(IPV6_ADDR));
|
|
+
|
|
+ /* Add the target link address option only for all solicitation */
|
|
+/*
|
|
+ if ((memcmp((char __FAR__ *)&ipv6_context->multi_dest,
|
|
+ (char __FAR__ *)&tmp, sizeof(IPV6_ADDR)) == 0) ||
|
|
+ (memcmp((char __FAR__ *)&ipv6_context->link_local_multi,
|
|
+ (char __FAR__ *)&tmp, sizeof(IPV6_ADDR)) == 0)) {
|
|
+*/
|
|
+ ipv6_icmp_init_link_option(ipv6_context,
|
|
+ (pICMPV6_OPT_LINK_ADDR) ((u8_t *)
|
|
+ icmp +
|
|
+ sizeof
|
|
+ (ICMPV6_HDR)
|
|
+ +
|
|
+ sizeof
|
|
+ (IPV6_ADDR)),
|
|
+ IPV6_ICMP_OPTION_TAR_ADDR);
|
|
+ icmpv6_opt_len = sizeof(ICMPV6_OPT_LINK_ADDR);
|
|
+/*
|
|
+ }
|
|
+*/
|
|
+ ipv6->ipv6_plen = HOST_TO_NET16((sizeof(ICMPV6_HDR) +
|
|
+ icmpv6_opt_len + sizeof(IPV6_ADDR)));
|
|
+ LOG_DEBUG("IPV6: Send nd adv");
|
|
+ ipv6_send(ipv6_context,
|
|
+ (u8_t *) icmp - (u8_t *) eth +
|
|
+ sizeof(ICMPV6_HDR) +
|
|
+ sizeof(ICMPV6_OPT_LINK_ADDR) + sizeof(IPV6_ADDR));
|
|
+ return;
|
|
+}
|
|
+
|
|
+STATIC void ipv6_icmp_handle_echo_request(pIPV6_CONTEXT ipv6_context)
|
|
+{
|
|
+ pETH_HDR eth = (pETH_HDR) ipv6_context->ustack->data_link_layer;
|
|
+ pIPV6_HDR ipv6 = (pIPV6_HDR) ipv6_context->ustack->network_layer;
|
|
+ pICMPV6_HDR icmp = (pICMPV6_HDR) ((u8_t *) ipv6 + sizeof(IPV6_HDR));
|
|
+ IPV6_ADDR temp;
|
|
+
|
|
+ /* Copy source MAC to Destination MAC */
|
|
+ memcpy((char __FAR__ *)ð->dest_mac,
|
|
+ (char __FAR__ *)ð->src_mac, sizeof(MAC_ADDR));
|
|
+
|
|
+ memcpy((char __FAR__ *)&temp,
|
|
+ (char __FAR__ *)&ipv6->ipv6_dst, sizeof(IPV6_ADDR));
|
|
+
|
|
+ /* Dest IP contains source IP */
|
|
+ memcpy((char __FAR__ *)&ipv6->ipv6_dst,
|
|
+ (char __FAR__ *)&ipv6->ipv6_src, sizeof(IPV6_ADDR));
|
|
+ /* Use Link-local as source address */
|
|
+ memcpy((char __FAR__ *)&ipv6->ipv6_src,
|
|
+ (char __FAR__ *)&temp, sizeof(IPV6_ADDR));
|
|
+
|
|
+ ipv6->ipv6_hop_limit = ipv6_context->hop_limit;
|
|
+ icmp->icmpv6_type = ICMPV6_ECHO_REPLY;
|
|
+ icmp->icmpv6_code = 0;
|
|
+ icmp->icmpv6_cksum = 0;
|
|
+ LOG_DEBUG("IPV6: Send echo reply");
|
|
+ ipv6_send(ipv6_context, (u8_t *) icmp - (u8_t *) eth +
|
|
+ sizeof(IPV6_HDR) + HOST_TO_NET16(ipv6->ipv6_plen));
|
|
+ return;
|
|
+}
|
|
+
|
|
+void ipv6_set_ip_params(pIPV6_CONTEXT ipv6_context,
|
|
+ pIPV6_ADDR src_ip, u8_t prefix_len,
|
|
+ pIPV6_ADDR default_gateway)
|
|
+{
|
|
+ if (!(IPV6_IS_ADDR_UNSPECIFIED(src_ip))) {
|
|
+ ipv6_add_prefix_entry(ipv6_context, src_ip, prefix_len);
|
|
+ /* Create the multi_dest address */
|
|
+ memset(&ipv6_context->multi_dest, 0, sizeof(IPV6_ADDR));
|
|
+ ipv6_context->multi_dest.addr8[0] = 0xff;
|
|
+ ipv6_context->multi_dest.addr8[1] = 0x02;
|
|
+ ipv6_context->multi_dest.addr8[11] = 0x01;
|
|
+ ipv6_context->multi_dest.addr8[12] = 0xff;
|
|
+ ipv6_context->multi_dest.addr8[13] = src_ip->addr8[13];
|
|
+ ipv6_context->multi_dest.addr16[7] = src_ip->addr16[7];
|
|
+ /* Create the multi address */
|
|
+ memset(&ipv6_context->multi, 0, sizeof(IPV6_ADDR));
|
|
+ ipv6_context->multi.addr8[0] = 0xfc;
|
|
+ ipv6_context->multi.addr8[2] = 0x02;
|
|
+ ipv6_context->multi.addr16[7] = src_ip->addr16[7];
|
|
+ }
|
|
+
|
|
+ if (!(IPV6_IS_ADDR_UNSPECIFIED(default_gateway))) {
|
|
+ /* This is a default router. */
|
|
+ memcpy((char __FAR__ *)&ipv6_context->default_router,
|
|
+ (char __FAR__ *)default_gateway, sizeof(IPV6_ADDR));
|
|
+ }
|
|
+}
|
|
+
|
|
+int ipv6_get_source_ip_addrs(pIPV6_CONTEXT ipv6_context,
|
|
+ pIPV6_ADDR_ENTRY addr_list)
|
|
+{
|
|
+ pIPV6_PREFIX_ENTRY ipv6_prefix;
|
|
+ int i;
|
|
+
|
|
+ for (i = 0, ipv6_prefix = ipv6_context->addr_list; ipv6_prefix != NULL;
|
|
+ ipv6_prefix = ipv6_prefix->next) {
|
|
+ memcpy((char __FAR__ *)&addr_list->address,
|
|
+ (char __FAR__ *)&ipv6_prefix->address,
|
|
+ sizeof(IPV6_ADDR));
|
|
+ addr_list->prefix_len = ipv6_prefix->prefix_len * 8;
|
|
+
|
|
+ i++;
|
|
+ addr_list++;
|
|
+ }
|
|
+
|
|
+ return i;
|
|
+}
|
|
+
|
|
+int ipv6_get_default_router_ip_addrs(pIPV6_CONTEXT ipv6_context,
|
|
+ pIPV6_ADDR ip_addr)
|
|
+{
|
|
+ /* This is a default router. */
|
|
+ memcpy((char __FAR__ *)ip_addr,
|
|
+ (char __FAR__ *)&ipv6_context->default_router,
|
|
+ sizeof(IPV6_ADDR));
|
|
+
|
|
+ return 1;
|
|
+}
|
|
+
|
|
+STATIC void ipv6_udp_rx(pIPV6_CONTEXT ipv6_context)
|
|
+{
|
|
+ pETH_HDR eth = (pETH_HDR) ipv6_context->ustack->data_link_layer;
|
|
+ pIPV6_HDR ipv6 = (pIPV6_HDR) ipv6_context->ustack->network_layer;
|
|
+ UDP_HDR __FAR__ *udp = (pUDP_HDR) ((u8_t *) ipv6 + sizeof(IPV6_HDR));
|
|
+ pDHCPV6_CONTEXT dhcpv6c;
|
|
+
|
|
+ /*
|
|
+ * We only care about DHCPv6 packets from the DHCPv6 server. We drop
|
|
+ * all others.
|
|
+ */
|
|
+ if (!(ipv6_context->flags & IPV6_FLAGS_DISABLE_DHCPV6)) {
|
|
+ if ((udp->src_port == HOST_TO_NET16(DHCPV6_SERVER_PORT)) &&
|
|
+ (udp->dest_port == HOST_TO_NET16(DHCPV6_CLIENT_PORT))) {
|
|
+ dhcpv6c = ipv6_context->dhcpv6_context;
|
|
+ dhcpv6c->eth = eth;
|
|
+ dhcpv6c->ipv6 = ipv6;
|
|
+ dhcpv6c->udp = udp;
|
|
+ ipv6_udp_handle_dhcp(dhcpv6c);
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+MAC_ADDRESS *ipv6_get_link_addr(pIPV6_CONTEXT ipv6_context)
|
|
+{
|
|
+ return &ipv6_context->mac_addr;
|
|
+}
|
|
+
|
|
+u16_t ipv6_do_stateful_dhcpv6(pIPV6_CONTEXT ipv6_context, u32_t flags)
|
|
+{
|
|
+ u16_t task = 0;
|
|
+ u16_t ra_flags;
|
|
+
|
|
+ ra_flags = ipv6_context->flags &
|
|
+ (IPV6_FLAGS_MANAGED_ADDR_CONFIG | IPV6_FLAGS_OTHER_STATEFUL_CONFIG);
|
|
+
|
|
+ if (!(ipv6_context->flags & IPV6_FLAGS_ROUTER_ADV_RECEIVED)) {
|
|
+ LOG_DEBUG("IPV6: There is no IPv6 router on the network");
|
|
+ ra_flags |=
|
|
+ (IPV6_FLAGS_MANAGED_ADDR_CONFIG |
|
|
+ IPV6_FLAGS_OTHER_STATEFUL_CONFIG);
|
|
+ }
|
|
+
|
|
+ if ((flags & ISCSI_FLAGS_DHCP_TCPIP_CONFIG) &&
|
|
+ (ra_flags & IPV6_FLAGS_MANAGED_ADDR_CONFIG))
|
|
+ task |= DHCPV6_TASK_GET_IP_ADDRESS;
|
|
+
|
|
+ if ((flags & ISCSI_FLAGS_DHCP_ISCSI_CONFIG) &&
|
|
+ (ra_flags & IPV6_FLAGS_OTHER_STATEFUL_CONFIG))
|
|
+ task |= DHCPV6_TASK_GET_OTHER_PARAMS;
|
|
+
|
|
+ LOG_DEBUG("IPV6: Stateful flags=0x%x, ra_flags=0x%x, task=0x%x", flags,
|
|
+ ra_flags, task);
|
|
+
|
|
+ return task;
|
|
+}
|
|
+
|
|
+void ipv6_add_solit_node_address(pIPV6_CONTEXT ipv6_context, pIPV6_ADDR ip_addr)
|
|
+{
|
|
+ MAC_ADDRESS mac_addr;
|
|
+
|
|
+ /*
|
|
+ * Add Solicited Node Multicast Address for statically configured IPv6
|
|
+ * address.
|
|
+ */
|
|
+ mac_addr.addr[0] = 0x33;
|
|
+ mac_addr.addr[1] = 0x33;
|
|
+ mac_addr.addr[2] = 0xff;
|
|
+ mac_addr.addr[3] = ip_addr->addr8[13];
|
|
+ mac_addr.addr[4] = ip_addr->addr8[14];
|
|
+ mac_addr.addr[5] = ip_addr->addr8[15];
|
|
+ iscsiL2AddMcAddr(ipv6_context, (MAC_ADDR *) & mac_addr);
|
|
+}
|
|
+
|
|
+void ipv6_cfg_link_local_addr(pIPV6_CONTEXT ipv6_context, pIPV6_ADDR ip_addr)
|
|
+{
|
|
+ memcpy((char __FAR__ *)&ipv6_context->link_local_addr,
|
|
+ (char __FAR__ *)ip_addr, sizeof(IPV6_ADDR));
|
|
+}
|
|
+
|
|
+void ipv6_disable_dhcpv6(pIPV6_CONTEXT ipv6_context)
|
|
+{
|
|
+ ipv6_context->flags |= IPV6_FLAGS_DISABLE_DHCPV6;
|
|
+}
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/ipv6.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/ipv6.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/ipv6.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/ipv6.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,366 @@
|
|
+/*
|
|
+ * Copyright (c) 2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Eddie Wai (eddie.wai@broadcom.com)
|
|
+ * Based on Kevin Tran's iSCSI boot code
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * ipv6.h - This file contains macro definitions pertaining to IPv6.
|
|
+ *
|
|
+ * RFC 2460 : IPv6 Specification
|
|
+ * RFC 2373 : IPv6 Addressing Architecture.
|
|
+ * RFC 2462 : IPv6 Stateless Address Autoconfiguration.
|
|
+ * RFC 2464 : Transmission of IPv6 Packets over Ethernet Networks.
|
|
+ *
|
|
+ */
|
|
+#ifndef __IPV6_H__
|
|
+#define __IPV6_H__
|
|
+
|
|
+#include "ipv6_ndpc.h"
|
|
+
|
|
+#define PACK_DATA_STRUCTURE 1
|
|
+
|
|
+#ifdef PACK_DATA_STRUCTURE
|
|
+#pragma pack(push,1)
|
|
+#endif
|
|
+
|
|
+#define STATIC static
|
|
+
|
|
+#define __FAR__
|
|
+#define FALSE 0
|
|
+#define TRUE 1
|
|
+
|
|
+#ifdef ROM_DRIVER
|
|
+#define memcpy imemcpy
|
|
+#define memset imemset
|
|
+#define memcmp istrncmp
|
|
+#define system_get_ticks iscsiGetTicks
|
|
+#endif
|
|
+
|
|
+#define LINK_LOCAL_PREFIX_LENGTH 2
|
|
+#define LAYER2_HEADER_LENGTH 14
|
|
+#define LAYER2_VLAN_HEADER_LENGTH 16
|
|
+#define LAYER2_TYPE_IPV6 0x86dd
|
|
+
|
|
+typedef struct IPV6_ADDR {
|
|
+ union {
|
|
+ u8_t addr8[16];
|
|
+ u16_t addr16[8];
|
|
+ u32_t addr[4];
|
|
+ };
|
|
+} IPV6_ADDR, *pIPV6_ADDR;
|
|
+
|
|
+typedef struct UDP_HDR {
|
|
+ u16_t src_port;
|
|
+ u16_t dest_port;
|
|
+ u16_t length;
|
|
+ u16_t chksum;
|
|
+} UDP_HDR, *pUDP_HDR;
|
|
+
|
|
+typedef struct MAC_ADDRESS {
|
|
+ u8_t addr[6];
|
|
+} MAC_ADDRESS, *pMAC_ADDRESS;
|
|
+
|
|
+typedef u8_t MAC_ADDR[6];
|
|
+
|
|
+#define HOST_TO_NET16(a) htons(a)
|
|
+#define HOST_TO_NET32(a) htonl(a)
|
|
+#define NET_TO_HOST16(a) ntohs(a)
|
|
+/*
|
|
+ * Local definition for masks
|
|
+ */
|
|
+#define IPV6_MASK0 {{{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }}}
|
|
+#define IPV6_MASK32 {{{ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, \
|
|
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
|
|
+#define IPV6_MASK64 {{{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \
|
|
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
|
|
+#define IPV6_MASK96 {{{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \
|
|
+ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }}}
|
|
+#define IPV6_MASK128 {{{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \
|
|
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }}}
|
|
+
|
|
+#ifdef BIG_ENDIAN
|
|
+#define IPV6_ADDR_INT32_ONE 1
|
|
+#define IPV6_ADDR_INT32_TWO 2
|
|
+#define IPV6_ADDR_INT32_MNL 0xff010000
|
|
+#define IPV6_ADDR_INT32_MLL 0xff020000
|
|
+#define IPV6_ADDR_INT32_SMP 0x0000ffff
|
|
+#define IPV6_ADDR_INT16_ULL 0xfe80
|
|
+#define IPV6_ADDR_INT16_USL 0xfec0
|
|
+#define IPV6_ADDR_INT16_MLL 0xff02
|
|
+#else /* LITTE ENDIAN */
|
|
+#define IPV6_ADDR_INT32_ONE 0x01000000
|
|
+#define IPV6_ADDR_INT32_TWO 0x02000000
|
|
+#define IPV6_ADDR_INT32_MNL 0x000001ff
|
|
+#define IPV6_ADDR_INT32_MLL 0x000002ff
|
|
+#define IPV6_ADDR_INT32_SMP 0xffff0000
|
|
+#define IPV6_ADDR_INT16_ULL 0x80fe
|
|
+#define IPV6_ADDR_INT16_USL 0xc0fe
|
|
+#define IPV6_ADDR_INT16_MLL 0x02ff
|
|
+#endif
|
|
+
|
|
+/*
|
|
+ * Definition of some useful macros to handle IP6 addresses
|
|
+ */
|
|
+#define IPV6_ADDR_ANY_INIT \
|
|
+ {{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
|
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
|
|
+#define IPV6_ADDR_LOOPBACK_INIT \
|
|
+ {{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
|
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
|
|
+#define IPV6_ADDR_NODELOCAL_ALLNODES_INIT \
|
|
+ {{{ 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
|
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
|
|
+#define IPV6_ADDR_INTFACELOCAL_ALLNODES_INIT \
|
|
+ {{{ 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
|
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
|
|
+#define IPV6_ADDR_LINKLOCAL_ALLNODES_INIT \
|
|
+ {{{ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
|
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
|
|
+#define IPV6_ADDR_LINKLOCAL_ALLROUTERS_INIT \
|
|
+ {{{ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
|
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }}}
|
|
+
|
|
+#define IPV6_ARE_ADDR_EQUAL(a, b) \
|
|
+ (memcmp((char __FAR__ *)a,(char __FAR__ *)b,sizeof(IPV6_ADDR)) == 0)
|
|
+
|
|
+/* Unspecified IPv6 address */
|
|
+#define IPV6_IS_ADDR_UNSPECIFIED(a) \
|
|
+ ((*(u32_t *)(&(a)->addr8[0]) == 0) && \
|
|
+ (*(u32_t *)(&(a)->addr8[4]) == 0) && \
|
|
+ (*(u32_t *)(&(a)->addr8[8]) == 0) && \
|
|
+ (*(u32_t *)(&(a)->addr8[12]) == 0))
|
|
+
|
|
+/* Loopback IPv6 address */
|
|
+#define IPV6_IS_ADDR_LOOPBACK(a) \
|
|
+ ((*(u32_t *)(&(a)->addr8[0]) == 0) && \
|
|
+ (*(u32_t *)(&(a)->addr8[4]) == 0) && \
|
|
+ (*(u32_t *)(&(a)->addr8[8]) == 0) && \
|
|
+ (*(u32_t *)(&(a)->addr8[12]) == 0x1))
|
|
+
|
|
+/* IPv4 compatible */
|
|
+#define IPV6_IS_ADDR_IPV4_COMPAT(a) \
|
|
+ ((*(u32_t *)(&(a)->addr8[0]) == 0) && \
|
|
+ (*(u32_t *)(&(a)->addr8[4]) == 0) && \
|
|
+ (*(u32_t *)(&(a)->addr8[8]) == 0) && \
|
|
+ (*(u32_t *)(&(a)->addr8[12]) != 0) && \
|
|
+ (*(u32_t *)(&(a)->addr8[12]) != 0x1))
|
|
+
|
|
+/* Mapped IPv4-IPv6 address */
|
|
+#define IPV6_IS_ADDR_IPV4_MAPPED(a) \
|
|
+ ((*(u32_t *)(&(a)->addr8[0]) == 0) && \
|
|
+ (*(u32_t *)(&(a)->addr8[4]) == 0) && \
|
|
+ (*(u32_t *)(&(a)->addr8[8]) == ntohl(0x0000ffff)))
|
|
+
|
|
+/* IPv6 Scope Values */
|
|
+#define IPV6_ADDR_SCOPE_INTFACELOCAL 0x01 /* Node-local scope */
|
|
+#define IPV6_ADDR_SCOPE_LINKLOCAL 0x02 /* Link-local scope */
|
|
+#define IPV6_ADDR_SCOPE_SITELOCAL 0x05 /* Site-local scope */
|
|
+#define IPV6_ADDR_SCOPE_ORGLOCAL 0x08 /* Organization-local scope */
|
|
+#define IPV6_ADDR_SCOPE_GLOBAL 0x0e /* Global scope */
|
|
+
|
|
+/* Link-local Unicast : 10-bits much be 1111111010b --> 0xfe80. */
|
|
+#define IPV6_IS_ADDR_LINKLOCAL(a) \
|
|
+ (((a)->addr8[0] == 0xfe) && (((a)->addr8[1] & 0xc0) == 0x80))
|
|
+
|
|
+/* Site-local Unicast : 10-bits much be 1111111011b --> 0xfec0. */
|
|
+#define IPV6_IS_ADDR_SITELOCAL(a) \
|
|
+ (((a)->addr8[0] == 0xfe) && (((a)->addr8[1] & 0xc0) == 0xc0))
|
|
+
|
|
+/* Multicast : 10bits much be 11111111b. Next 4 bits is flags | 4-bit scope */
|
|
+#define IPV6_IS_ADDR_MULTICAST(a) ((a)->addr8[0] == 0xff)
|
|
+
|
|
+#define IPV6_ADDR_MC_SCOPE(a) ((a)->addr8[1] & 0x0f)
|
|
+
|
|
+/* Multicast Scope */
|
|
+
|
|
+typedef struct ETH_HDR {
|
|
+ MAC_ADDR dest_mac;
|
|
+ MAC_ADDR src_mac;
|
|
+ u16_t len_type;
|
|
+} ETH_HDR, *pETH_HDR;
|
|
+
|
|
+typedef struct IPV6_HDR {
|
|
+ union {
|
|
+ struct {
|
|
+ u32_t ipv6_flow; /* Version (4-bit) |
|
|
+ Traffic Class (8-bit) |
|
|
+ Flow ID (20-bit) */
|
|
+ u16_t ipv6_plen; /* Payload length */
|
|
+ u8_t ipv6_nxt_hdr; /* Next Header */
|
|
+ u8_t ipv6_hop_limit; /* hop limit */
|
|
+ } ipv6_dw1;
|
|
+
|
|
+ u8_t ipv6_version_fc; /* 4 bits version, top 4 bits class */
|
|
+ } ipv6_ctrl;
|
|
+
|
|
+ IPV6_ADDR ipv6_src; /* Source address */
|
|
+ IPV6_ADDR ipv6_dst; /* Destination address */
|
|
+} IPV6_HDR, *pIPV6_HDR;
|
|
+
|
|
+#define ipv6_version_fc ipv6_ctrl.ipv6_version_fc
|
|
+#define ipv6_flow ipv6_ctrl.ipv6_dw1.ipv6_flow
|
|
+#define ipv6_plen ipv6_ctrl.ipv6_dw1.ipv6_plen
|
|
+#define ipv6_nxt_hdr ipv6_ctrl.ipv6_dw1.ipv6_nxt_hdr
|
|
+#define ipv6_hop_limit ipv6_ctrl.ipv6_dw1.ipv6_hop_limit
|
|
+
|
|
+#define IPV6_VERSION 0x60
|
|
+#define IPV6_VERSION_MASK 0xf0
|
|
+#define IPV6_HOP_LIMIT 64
|
|
+
|
|
+/* Length of the IP header with no next header */
|
|
+#define IPV6_HEADER_LEN sizeof(IPV6_HDR)
|
|
+
|
|
+#ifdef BIG_ENDIAN
|
|
+#define IPV6_FLOWINFO_MASK 0x0fffffff /* flow info (28 bits) */
|
|
+#define IPV6_FLOWLABEL_MASK 0x000fffff /* flow label (20 bits) */
|
|
+#else /* LITTLE_ENDIAN */
|
|
+#define IPV6_FLOWINFO_MASK 0xffffff0f /* flow info (28 bits) */
|
|
+#define IPV6_FLOWLABEL_MASK 0xffff0f00 /* flow label (20 bits) */
|
|
+#endif
|
|
+
|
|
+typedef struct PACKET_IPV6 {
|
|
+ MAC_ADDR dest_mac;
|
|
+ MAC_ADDR src_mac;
|
|
+ u16_t len_type;
|
|
+ IPV6_HDR ip;
|
|
+ union {
|
|
+ UDP_HDR udp;
|
|
+ } layer4_prot;
|
|
+} PACKET_IPV6, *pPACKET_IPV6;
|
|
+
|
|
+typedef struct PACKET_IPV6_VLAN {
|
|
+ MAC_ADDR dest_mac;
|
|
+ MAC_ADDR src_mac;
|
|
+ u16_t len_type;
|
|
+ u16_t vlan_id;
|
|
+ IPV6_HDR ip;
|
|
+ union {
|
|
+ UDP_HDR udp;
|
|
+ } layer4_prot;
|
|
+} PACKET_IPV6_VLAN, *pPACKET_IPV6_VLAN;
|
|
+
|
|
+#ifdef PACK_DATA_STRUCTURE
|
|
+#pragma pack(pop)
|
|
+#endif
|
|
+
|
|
+typedef struct IPV6_ARP_ENTRY {
|
|
+ IPV6_ADDR ip_addr;
|
|
+ MAC_ADDR mac_addr;
|
|
+ u8_t time;
|
|
+} IPV6_ARP_ENTRY, *pIPV6_ARP_ENTRY;
|
|
+
|
|
+#define IPV6_NUM_OF_ADDRESS_ENTRY 4
|
|
+
|
|
+typedef struct _IPV6_PREFIX_ENTRY {
|
|
+ struct _IPV6_PREFIX_ENTRY *next;
|
|
+ IPV6_ADDR address;
|
|
+ u8_t prefix_len;
|
|
+} IPV6_PREFIX_ENTRY, *pIPV6_PREFIX_ENTRY;
|
|
+
|
|
+typedef struct IPV6_ADDR_ENTRY {
|
|
+ IPV6_ADDR address;
|
|
+ u8_t prefix_len;
|
|
+} IPV6_ADDR_ENTRY, *pIPV6_ADDR_ENTRY;
|
|
+
|
|
+typedef struct IPV6_CONTEXT {
|
|
+ u16_t flags;
|
|
+#define IPV6_FLAGS_MANAGED_ADDR_CONFIG (1 << 0)
|
|
+#define IPV6_FLAGS_OTHER_STATEFUL_CONFIG (1 << 1)
|
|
+#define IPV6_FLAGS_ROUTER_ADV_RECEIVED (1 << 2)
|
|
+#define IPV6_FLAGS_DISABLE_DHCPV6 (1 << 3)
|
|
+
|
|
+ MAC_ADDRESS mac_addr;
|
|
+ IPV6_ADDR link_local_addr;
|
|
+ IPV6_ADDR link_local_multi;
|
|
+ IPV6_ADDR multi; /* For Static IPv6 only */
|
|
+ IPV6_ADDR multi_dest; /* For Static IPv6 only */
|
|
+ IPV6_ADDR default_router;
|
|
+ pIPV6_PREFIX_ENTRY addr_list;
|
|
+ u8_t hop_limit;
|
|
+#define UIP_ARPTAB_SIZE 8
|
|
+
|
|
+ struct uip_stack *ustack;
|
|
+#define MAX_MCADDR_TABLE 5
|
|
+ MAC_ADDR mc_addr[MAX_MCADDR_TABLE];
|
|
+ u8_t arptime;
|
|
+ IPV6_ARP_ENTRY ipv6_arp_table[UIP_ARPTAB_SIZE];
|
|
+ IPV6_PREFIX_ENTRY ipv6_prefix_table[IPV6_NUM_OF_ADDRESS_ENTRY];
|
|
+
|
|
+ /* VLAN support */
|
|
+
|
|
+ void *dhcpv6_context;
|
|
+
|
|
+} IPV6_CONTEXT, *pIPV6_CONTEXT;
|
|
+
|
|
+#define ISCSI_FLAGS_DHCP_TCPIP_CONFIG (1<<0)
|
|
+#define ISCSI_FLAGS_DHCP_ISCSI_CONFIG (1<<1)
|
|
+
|
|
+#define IPV6_MAX_ROUTER_SOL_DELAY 4
|
|
+#define IPV6_MAX_ROUTER_SOL_RETRY 3
|
|
+
|
|
+#define DHCPV6_CLIENT_PORT 546
|
|
+#define DHCPV6_SERVER_PORT 547
|
|
+
|
|
+/* Function prototype */
|
|
+void ipv6_init(struct ndpc_state *ndp, int cfg);
|
|
+int ipv6_autoconfig(pIPV6_CONTEXT ipv6_context);
|
|
+int ipv6_discover_address(pIPV6_CONTEXT ipv6_context);
|
|
+pIPV6_ADDR ipv6_our_address(pIPV6_CONTEXT ipv6_context);
|
|
+int ipv6_ip_in_arp_table(pIPV6_CONTEXT ipv6_context, pIPV6_ADDR ipv6_addr,
|
|
+ MAC_ADDR * mac_addr);
|
|
+void ipv6_arp_timer(pIPV6_CONTEXT ipv6_context);
|
|
+void ipv6_arp_out(pIPV6_CONTEXT ipv6_context, int *uip_len);
|
|
+int ipv6_add_prefix_entry(pIPV6_CONTEXT ipv6_context,
|
|
+ IPV6_ADDR * ipv6_addr, u8_t prefix_len);
|
|
+void ipv6_set_ip_params(pIPV6_CONTEXT ipv6_context,
|
|
+ pIPV6_ADDR src_ip, u8_t prefix_len,
|
|
+ pIPV6_ADDR default_gateway);
|
|
+void ipv6_set_host_addr(pIPV6_CONTEXT ipv6_context, pIPV6_ADDR src_ip);
|
|
+int ipv6_get_default_router_ip_addrs(pIPV6_CONTEXT ipv6_context,
|
|
+ pIPV6_ADDR ip_addr);
|
|
+MAC_ADDRESS *ipv6_get_link_addr(pIPV6_CONTEXT ipv6_context);
|
|
+u16_t ipv6_do_stateful_dhcpv6(pIPV6_CONTEXT ipv6_context, u32_t flags);
|
|
+void ipv6_add_solit_node_address(pIPV6_CONTEXT ipv6_context,
|
|
+ pIPV6_ADDR ip_addr);
|
|
+int ipv6_get_source_ip_addrs(pIPV6_CONTEXT ipv6_context,
|
|
+ pIPV6_ADDR_ENTRY addr_list);
|
|
+void ipv6_cfg_link_local_addr(pIPV6_CONTEXT ipv6_context, pIPV6_ADDR ip_addr);
|
|
+void ipv6_disable_dhcpv6(pIPV6_CONTEXT ipv6_context);
|
|
+int ipv6_send_nd_solicited_packet(pIPV6_CONTEXT ipv6_context, pETH_HDR eth,
|
|
+ pIPV6_HDR ipv6);
|
|
+int ipv6_is_it_our_link_local_address(pIPV6_CONTEXT ipv6_context,
|
|
+ IPV6_ADDR __FAR__ * ipv6_addr);
|
|
+void ipv6_mc_init_dest_mac(pETH_HDR eth, pIPV6_HDR ipv6);
|
|
+pIPV6_ADDR ipv6_find_longest_match(pIPV6_CONTEXT ipv6_context,
|
|
+ pIPV6_ADDR ip_addr);
|
|
+
|
|
+#endif /* __IPV6_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/ipv6_ndpc.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/ipv6_ndpc.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/ipv6_ndpc.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/ipv6_ndpc.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,408 @@
|
|
+/*
|
|
+ * Copyright (c) 2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Eddie Wai (eddie.wai@broadcom.com)
|
|
+ * Based on the Swedish Institute of Computer Science's
|
|
+ * dhcpc.c code
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * ipv6_ndpc.c - Top level IPv6 Network Discovery Protocol Engine (RFC4861)
|
|
+ *
|
|
+ */
|
|
+#include <errno.h>
|
|
+#include <pthread.h>
|
|
+#include <stdio.h>
|
|
+#include <string.h>
|
|
+#include <stdlib.h>
|
|
+#include <arpa/inet.h>
|
|
+
|
|
+#include "uip.h"
|
|
+#include "ipv6_ndpc.h"
|
|
+#include "timer.h"
|
|
+#include "pt.h"
|
|
+
|
|
+#include "debug.h"
|
|
+#include "logger.h"
|
|
+#include "nic.h"
|
|
+#include "nic_utils.h"
|
|
+#include "ipv6.h"
|
|
+#include "ipv6_pkt.h"
|
|
+#include "dhcpv6.h"
|
|
+
|
|
+const int dhcpv6_retry_timeout[DHCPV6_NUM_OF_RETRY] = { 1, 2, 4, 8 };
|
|
+
|
|
+static PT_THREAD(handle_ndp(struct uip_stack *ustack, int force))
|
|
+{
|
|
+ struct ndpc_state *s;
|
|
+ pIPV6_CONTEXT ipv6c;
|
|
+ pDHCPV6_CONTEXT dhcpv6c = NULL;
|
|
+ u16_t task = 0;
|
|
+
|
|
+ s = ustack->ndpc;
|
|
+ if (s == NULL) {
|
|
+ LOG_DEBUG("NDP: Could not find ndpc state");
|
|
+ return PT_ENDED;
|
|
+ }
|
|
+
|
|
+ ipv6c = s->ipv6_context;
|
|
+ if (!ipv6c)
|
|
+ goto ndpc_state_null;
|
|
+
|
|
+ dhcpv6c = s->dhcpv6_context;
|
|
+
|
|
+ PT_BEGIN(&s->pt);
|
|
+
|
|
+ if (s->state == NDPC_STATE_BACKGROUND_LOOP)
|
|
+ goto ipv6_loop;
|
|
+
|
|
+ if (s->state == NDPC_STATE_RTR_ADV)
|
|
+ goto rtr_adv;
|
|
+
|
|
+ s->state = NDPC_STATE_RTR_SOL;
|
|
+ /* try_again: */
|
|
+ s->ticks = CLOCK_SECOND * IPV6_MAX_ROUTER_SOL_DELAY;
|
|
+ s->retry_count = 0;
|
|
+ do {
|
|
+ /* Perform router solicitation and wait for
|
|
+ router advertisement */
|
|
+ LOG_DEBUG("%s: ndpc_handle send rtr sol", s->nic->log_name);
|
|
+ ipv6_autoconfig(s->ipv6_context);
|
|
+
|
|
+ timer_set(&s->timer, s->ticks);
|
|
+ wait_rtr:
|
|
+ s->ustack->uip_flags &= ~UIP_NEWDATA;
|
|
+ LOG_DEBUG("%s: ndpc_handle wait for rtr adv flags=0x%x",
|
|
+ s->nic->log_name, ipv6c->flags);
|
|
+ PT_WAIT_UNTIL(&s->pt, uip_newdata(s->ustack)
|
|
+ || timer_expired(&s->timer) || force);
|
|
+
|
|
+ if (uip_newdata(s->ustack)) {
|
|
+ /* Validate incoming packets
|
|
+ Note that the uip_len is init from nic loop */
|
|
+ ipv6_rx_packet(ipv6c, (u16_t) uip_datalen(s->ustack));
|
|
+ if (ipv6c->flags & IPV6_FLAGS_ROUTER_ADV_RECEIVED) {
|
|
+ LOG_INFO("%s: ROUTER_ADV_RECEIVED",
|
|
+ s->nic->log_name);
|
|
+ /* Success */
|
|
+ break;
|
|
+ } else if (!timer_expired(&s->timer)) {
|
|
+ /* Yes new data, but not what we want,
|
|
+ check for timer expiration before bumping
|
|
+ tick */
|
|
+ goto wait_rtr;
|
|
+ }
|
|
+ }
|
|
+ s->retry_count++;
|
|
+ if (s->retry_count >= IPV6_MAX_ROUTER_SOL_RETRY)
|
|
+ /* Max router solicitation retry reached. Move to
|
|
+ IPv6 loop (no DHCPv6) */
|
|
+ goto no_rtr_adv;
|
|
+
|
|
+ } while (!(ipv6c->flags & IPV6_FLAGS_ROUTER_ADV_RECEIVED));
|
|
+
|
|
+ LOG_DEBUG("%s: ndpc_handle got rtr adv", s->nic->log_name);
|
|
+
|
|
+no_rtr_adv:
|
|
+ s->state = NDPC_STATE_RTR_ADV;
|
|
+
|
|
+rtr_adv:
|
|
+ /* Both Static IPv6 and DHCPv6 comes here */
|
|
+
|
|
+ task = ipv6_do_stateful_dhcpv6(ipv6c, ISCSI_FLAGS_DHCP_TCPIP_CONFIG);
|
|
+ if (task && (ustack->ip_config == IPV6_CONFIG_DHCP)) {
|
|
+ /* Run the DHCPv6 engine */
|
|
+
|
|
+ if (!dhcpv6c)
|
|
+ goto ipv6_loop;
|
|
+
|
|
+ dhcpv6c->dhcpv6_task = task;
|
|
+ s->retry_count = 0;
|
|
+ s->state = NDPC_STATE_DHCPV6_DIS;
|
|
+ do {
|
|
+ /* Do dhcpv6 */
|
|
+ dhcpv6c->timeout = dhcpv6_retry_timeout[s->retry_count];
|
|
+ s->ticks = CLOCK_SECOND * dhcpv6c->timeout;
|
|
+ LOG_DEBUG("%s: ndpc_handle send dhcpv6 sol retry "
|
|
+ "cnt=%d", s->nic->log_name, s->retry_count);
|
|
+ dhcpv6_do_discovery(dhcpv6c);
|
|
+
|
|
+ timer_set(&s->timer, s->ticks);
|
|
+wait_dhcp:
|
|
+ s->ustack->uip_flags &= ~UIP_NEWDATA;
|
|
+ PT_WAIT_UNTIL(&s->pt, uip_newdata(s->ustack)
|
|
+ || timer_expired(&s->timer) || force);
|
|
+
|
|
+ if (uip_newdata(s->ustack)) {
|
|
+ /* Validate incoming packets
|
|
+ Note that the uip_len is init from nic
|
|
+ loop */
|
|
+ ipv6_rx_packet(ipv6c,
|
|
+ (u16_t) uip_datalen(s->ustack));
|
|
+ if (dhcpv6c->dhcpv6_done == TRUE)
|
|
+ break;
|
|
+ else if (!timer_expired(&s->timer)) {
|
|
+ /* Yes new data, but not what we want,
|
|
+ check for timer expiration before
|
|
+ bumping tick */
|
|
+ goto wait_dhcp;
|
|
+ }
|
|
+ }
|
|
+ s->retry_count++;
|
|
+ if (s->retry_count < DHCPV6_NUM_OF_RETRY) {
|
|
+ dhcpv6c->seconds += dhcpv6c->timeout;
|
|
+ } else {
|
|
+ LOG_DEBUG("%s: ndpc_handle DHCP failed",
|
|
+ s->nic->log_name);
|
|
+ /* Allow to goto background loop */
|
|
+ //PT_RESTART(&s->pt);
|
|
+ goto ipv6_loop;
|
|
+ }
|
|
+ } while (dhcpv6c->dhcpv6_done == FALSE);
|
|
+ s->state = NDPC_STATE_DHCPV6_DONE;
|
|
+ LOG_DEBUG("%s: ndpc_handle got dhcpv6", s->nic->log_name);
|
|
+
|
|
+ /* End of DHCPv6 engine */
|
|
+ } else {
|
|
+ /* Static IPv6 */
|
|
+ if (ustack->ip_config == IPV6_CONFIG_DHCP) {
|
|
+ LOG_DEBUG("%s: ndpc_handle DHCP failed",
|
|
+ s->nic->log_name);
|
|
+ PT_RESTART(&s->pt);
|
|
+ }
|
|
+ IPV6_ADDR tmp, tmp2;
|
|
+ char buf[INET6_ADDRSTRLEN];
|
|
+
|
|
+ ipv6_disable_dhcpv6(ipv6c);
|
|
+ memcpy(&tmp.addr8, &ustack->hostaddr6, sizeof(IPV6_ADDR));
|
|
+ LOG_DEBUG("%s: host ip addr %02x:%02x:%02x:%02x:%02x:%02x:"
|
|
+ "%02x:%02x", s->nic->log_name,
|
|
+ ustack->hostaddr6[0], ustack->hostaddr6[1],
|
|
+ ustack->hostaddr6[2], ustack->hostaddr6[3],
|
|
+ ustack->hostaddr6[4], ustack->hostaddr6[5],
|
|
+ ustack->hostaddr6[6], ustack->hostaddr6[7]);
|
|
+ memset(&tmp2, 0, sizeof(tmp2));
|
|
+ ipv6_set_ip_params(ipv6c, &tmp,
|
|
+ ustack->prefix_len, &tmp2);
|
|
+
|
|
+ ipv6_add_solit_node_address(ipv6c, &tmp);
|
|
+
|
|
+ inet_ntop(AF_INET6, &tmp.addr8, buf, sizeof(buf));
|
|
+ LOG_INFO("%s: Static hostaddr IP: %s", s->nic->log_name,
|
|
+ buf);
|
|
+
|
|
+ }
|
|
+
|
|
+ipv6_loop:
|
|
+ s->state = NDPC_STATE_BACKGROUND_LOOP;
|
|
+ LOG_DEBUG("%s: Loop", s->nic->log_name);
|
|
+ /* Background IPv6 loop */
|
|
+ while (1) {
|
|
+ /* Handle all neightbor solicitation/advertisement here */
|
|
+ s->ustack->uip_flags &= ~UIP_NEWDATA;
|
|
+ PT_WAIT_UNTIL(&s->pt, uip_newdata(s->ustack));
|
|
+
|
|
+ /* Validate incoming packets */
|
|
+ ipv6_rx_packet(ipv6c, (u16_t) uip_datalen(s->ustack));
|
|
+ }
|
|
+
|
|
+ndpc_state_null:
|
|
+
|
|
+ while (1) {
|
|
+ PT_YIELD(&s->pt);
|
|
+ }
|
|
+
|
|
+ PT_END(&(s->pt));
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+int ndpc_init(nic_t * nic, struct uip_stack *ustack,
|
|
+ const void *mac_addr, int mac_len)
|
|
+{
|
|
+ pIPV6_CONTEXT ipv6c;
|
|
+ pDHCPV6_CONTEXT dhcpv6c;
|
|
+ struct ndpc_state *s = ustack->ndpc;
|
|
+
|
|
+ if (s) {
|
|
+ LOG_DEBUG("NDP: NDP context already allocated");
|
|
+ /* Already allocated, skip*/
|
|
+ return -EALREADY;
|
|
+ }
|
|
+ s = malloc(sizeof(*s));
|
|
+ if (s == NULL) {
|
|
+ LOG_ERR("%s: Couldn't allocate size for ndpc info",
|
|
+ nic->log_name);
|
|
+ goto error;
|
|
+ }
|
|
+ memset(s, 0, sizeof(*s));
|
|
+
|
|
+ if (s->ipv6_context) {
|
|
+ LOG_DEBUG("NDP: IPv6 context already allocated");
|
|
+ ipv6c = s->ipv6_context;
|
|
+ goto init1;
|
|
+ }
|
|
+ ipv6c = malloc(sizeof(IPV6_CONTEXT));
|
|
+ if (ipv6c == NULL) {
|
|
+ LOG_ERR("%s: Couldn't allocate mem for IPv6 context info",
|
|
+ nic->log_name);
|
|
+ goto error1;
|
|
+ }
|
|
+init1:
|
|
+ if (s->dhcpv6_context) {
|
|
+ LOG_DEBUG("NDP: DHCPv6 context already allocated");
|
|
+ dhcpv6c = s->dhcpv6_context;
|
|
+ goto init2;
|
|
+ }
|
|
+ dhcpv6c = malloc(sizeof(DHCPV6_CONTEXT));
|
|
+ if (dhcpv6c == NULL) {
|
|
+ LOG_ERR("%s: Couldn't allocate mem for DHCPv6 context info",
|
|
+ nic->log_name);
|
|
+ goto error2;
|
|
+ }
|
|
+init2:
|
|
+ memset(s, 0, sizeof(*s));
|
|
+ memset(ipv6c, 0, sizeof(*ipv6c));
|
|
+ memset(dhcpv6c, 0, sizeof(*dhcpv6c));
|
|
+
|
|
+ s->ipv6_context = ipv6c;
|
|
+ s->dhcpv6_context = dhcpv6c;
|
|
+
|
|
+ s->nic = nic;
|
|
+ s->ustack = ustack;
|
|
+ s->mac_addr = (void *)mac_addr;
|
|
+ s->mac_len = mac_len;
|
|
+ s->state = NDPC_STATE_INIT;
|
|
+
|
|
+ /* Init IPV6_CONTEXT */
|
|
+ ipv6_init(s, ustack->ip_config);
|
|
+
|
|
+ dhcpv6c->ipv6_context = ipv6c;
|
|
+ ipv6c->dhcpv6_context = dhcpv6c;
|
|
+
|
|
+ /* Init DHCPV6_CONTEXT */
|
|
+ dhcpv6_init(dhcpv6c);
|
|
+
|
|
+ ustack->ndpc = s;
|
|
+
|
|
+ PT_INIT(&s->pt);
|
|
+
|
|
+ if (ustack->ip_config == IPV6_CONFIG_DHCP) {
|
|
+ /* DHCPv6 specific */
|
|
+ } else {
|
|
+ /* Static v6 specific */
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+error2:
|
|
+ free(ipv6c);
|
|
+ s->ipv6_context = NULL;
|
|
+error1:
|
|
+ free(s);
|
|
+ ustack->ndpc = NULL;
|
|
+error:
|
|
+ return -ENOMEM;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+void ndpc_call(struct uip_stack *ustack)
|
|
+{
|
|
+ handle_ndp(ustack, 0);
|
|
+}
|
|
+
|
|
+void ndpc_exit(struct ndpc_state *ndp)
|
|
+{
|
|
+ LOG_DEBUG("NDP - Exit ndpc_state=%p", ndp);
|
|
+ if (!ndp)
|
|
+ return;
|
|
+ if (ndp->ipv6_context)
|
|
+ free(ndp->ipv6_context);
|
|
+ if (ndp->dhcpv6_context)
|
|
+ free(ndp->dhcpv6_context);
|
|
+ free(ndp);
|
|
+}
|
|
+
|
|
+int ndpc_request(struct uip_stack *ustack, void *in, void *out, int request)
|
|
+{
|
|
+ struct ndpc_state *s;
|
|
+ pIPV6_CONTEXT ipv6c;
|
|
+ int ret = 0;
|
|
+
|
|
+ if (!ustack) {
|
|
+ LOG_DEBUG("NDP: ustack == NULL");
|
|
+ return -EINVAL;
|
|
+ }
|
|
+ s = ustack->ndpc;
|
|
+ if (s == NULL) {
|
|
+ LOG_DEBUG("NDP: Could not find ndpc state for request %d",
|
|
+ request);
|
|
+ return -EINVAL;
|
|
+ }
|
|
+ //LOG_DEBUG("%s: NDP - Request %d", s->nic->log_name, request);
|
|
+
|
|
+ while (s->state != NDPC_STATE_BACKGROUND_LOOP) {
|
|
+ LOG_DEBUG("%s: ndpc state not in background loop, run handler",
|
|
+ s->nic->log_name);
|
|
+ handle_ndp(ustack, 1);
|
|
+ }
|
|
+
|
|
+ ipv6c = s->ipv6_context;
|
|
+ switch (request) {
|
|
+ case NEIGHBOR_SOLICIT:
|
|
+ LOG_DEBUG("nd sol: in=%p in->eth=%p in->ipv6=%p", in, in,
|
|
+ (u8_t *) in + 4);
|
|
+ *(int *)out = ipv6_send_nd_solicited_packet(ipv6c,
|
|
+ (pETH_HDR) ((pNDPC_REQPTR)in)->eth,
|
|
+ (pIPV6_HDR) ((pNDPC_REQPTR)in)->ipv6);
|
|
+ break;
|
|
+ case CHECK_LINK_LOCAL_ADDR:
|
|
+ *(int *)out = ipv6_is_it_our_link_local_address(ipv6c,
|
|
+ (pIPV6_ADDR)in);
|
|
+ break;
|
|
+ case GET_LINK_LOCAL_ADDR:
|
|
+ *(pIPV6_ADDR *) out = &ipv6c->link_local_addr;
|
|
+ break;
|
|
+ case GET_DEFAULT_ROUTER_ADDR:
|
|
+ *(pIPV6_ADDR *)out = &ipv6c->default_router;
|
|
+ break;
|
|
+ case CHECK_ARP_TABLE:
|
|
+ *(int *)out = ipv6_ip_in_arp_table(ipv6c,
|
|
+ (pIPV6_ADDR) ((pNDPC_REQPTR)in)->ipv6,
|
|
+ (MAC_ADDR *) ((pNDPC_REQPTR)in)->eth);
|
|
+ break;
|
|
+ case GET_HOST_ADDR:
|
|
+ *(pIPV6_ADDR *)out = ipv6_find_longest_match(ipv6c,
|
|
+ (pIPV6_ADDR)in);
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
+ return ret;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/ipv6_ndpc.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/ipv6_ndpc.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/ipv6_ndpc.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/ipv6_ndpc.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,97 @@
|
|
+/*
|
|
+ * Copyright (c) 2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Eddie Wai (eddie.wai@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * ipv6_ndpc.h - Top level IPv6 Network Discovery Protocol Engine (RFC4861)
|
|
+ *
|
|
+ */
|
|
+#ifndef __NDPC_H__
|
|
+#define __NDPC_H__
|
|
+
|
|
+#include <time.h>
|
|
+
|
|
+#include "nic.h"
|
|
+#include "timer.h"
|
|
+#include "pt.h"
|
|
+
|
|
+typedef struct NDPC_REQPTR {
|
|
+ void *eth;
|
|
+ void *ipv6;
|
|
+} NDPC_REQPTR, *pNDPC_REQPTR;
|
|
+
|
|
+struct ndpc_state {
|
|
+ struct pt pt;
|
|
+
|
|
+ nic_t *nic;
|
|
+ struct uip_stack *ustack;
|
|
+ char state;
|
|
+ struct timer timer;
|
|
+ u16_t ticks;
|
|
+ void *mac_addr;
|
|
+ int mac_len;
|
|
+ int retry_count;
|
|
+
|
|
+ time_t last_update;
|
|
+
|
|
+ void *ipv6_context;
|
|
+ void *dhcpv6_context;
|
|
+};
|
|
+
|
|
+enum {
|
|
+ NDPC_STATE_INIT,
|
|
+ NDPC_STATE_RTR_SOL,
|
|
+ NDPC_STATE_RTR_ADV,
|
|
+ NDPC_STATE_DHCPV6_DIS,
|
|
+ NDPC_STATE_DHCPV6_DONE,
|
|
+ NDPC_STATE_BACKGROUND_LOOP
|
|
+};
|
|
+
|
|
+int ndpc_init(nic_t * nic, struct uip_stack *ustack,
|
|
+ const void *mac_addr, int mac_len);
|
|
+void ndpc_call(struct uip_stack *ustack);
|
|
+void ndpc_exit(struct ndpc_state *ndp);
|
|
+
|
|
+enum {
|
|
+ NEIGHBOR_SOLICIT,
|
|
+ CHECK_LINK_LOCAL_ADDR,
|
|
+ GET_LINK_LOCAL_ADDR,
|
|
+ GET_DEFAULT_ROUTER_ADDR,
|
|
+ CHECK_ARP_TABLE,
|
|
+ GET_HOST_ADDR
|
|
+};
|
|
+
|
|
+int ndpc_request(struct uip_stack *ustack, void *in, void *out, int request);
|
|
+
|
|
+#define UIP_NDP_CALL ndpc_call
|
|
+
|
|
+#endif /* __NDPC_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/ipv6_pkt.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/ipv6_pkt.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/ipv6_pkt.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/ipv6_pkt.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,49 @@
|
|
+/*
|
|
+ * Copyright (c) 2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Eddie Wai (eddie.wai@broadcom.com)
|
|
+ * Based on Kevin Tran's iSCSI boot code
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * ipv6_packet.h - IPv6 routine include file
|
|
+ *
|
|
+ */
|
|
+#ifndef __IPV6_PKT_H__
|
|
+#define __IPV6_PKT_H__
|
|
+
|
|
+u16_t ipv6_process_rx(pIPV6_HDR ipv6);
|
|
+void ipv6_rx_packet(pIPV6_CONTEXT ipv6_context, u16_t len);
|
|
+void ipv6_setup_hdrs(pIPV6_CONTEXT ipv6_context, pETH_HDR eth, pIPV6_HDR ipv6,
|
|
+ u16_t packet_len);
|
|
+int ipv6_send(pIPV6_CONTEXT ipv6_context, u16_t packet_len);
|
|
+void ipv6_send_udp_packet(pIPV6_CONTEXT ipv6_context, u16_t packet_len);
|
|
+
|
|
+#endif /* __IPV6_PKT_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/lc-addrlabels.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/lc-addrlabels.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/lc-addrlabels.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/lc-addrlabels.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,82 @@
|
|
+/*
|
|
+ * Copyright (c) 2004-2005, Swedish Institute of Computer Science.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. Neither the name of the Institute nor the names of its contributors
|
|
+ * may be used to endorse or promote products derived from this software
|
|
+ * without specific prior written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
|
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
|
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
+ * SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack
|
|
+ *
|
|
+ * Author: Adam Dunkels <adam@sics.se>
|
|
+ *
|
|
+ * $Id: lc-addrlabels.h,v 1.3 2006/06/12 08:00:30 adam Exp $
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \addtogroup lc
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \file
|
|
+ * Implementation of local continuations based on the "Labels as
|
|
+ * values" feature of gcc
|
|
+ * \author
|
|
+ * Adam Dunkels <adam@sics.se>
|
|
+ *
|
|
+ * This implementation of local continuations is based on a special
|
|
+ * feature of the GCC C compiler called "labels as values". This
|
|
+ * feature allows assigning pointers with the address of the code
|
|
+ * corresponding to a particular C label.
|
|
+ *
|
|
+ * For more information, see the GCC documentation:
|
|
+ * http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html
|
|
+ *
|
|
+ * Thanks to dividuum for finding the nice local scope label
|
|
+ * implementation.
|
|
+ */
|
|
+
|
|
+#ifndef __LC_ADDRLABELS_H__
|
|
+#define __LC_ADDRLABELS_H__
|
|
+
|
|
+/** \hideinitializer */
|
|
+typedef void *lc_t;
|
|
+
|
|
+#define LC_INIT(s) s = NULL
|
|
+
|
|
+#define LC_RESUME(s) \
|
|
+ do { \
|
|
+ if(s != NULL) { \
|
|
+ goto *s; \
|
|
+ } \
|
|
+ } while(0)
|
|
+
|
|
+#define LC_SET(s) \
|
|
+ do { ({ __label__ resume; resume: (s) = &&resume; }); }while(0)
|
|
+
|
|
+#define LC_END(s)
|
|
+
|
|
+#endif /* __LC_ADDRLABELS_H__ */
|
|
+
|
|
+/** @} */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/lc.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/lc.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/lc.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/lc.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,131 @@
|
|
+/*
|
|
+ * Copyright (c) 2004-2005, Swedish Institute of Computer Science.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. Neither the name of the Institute nor the names of its contributors
|
|
+ * may be used to endorse or promote products derived from this software
|
|
+ * without specific prior written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
|
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
|
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
+ * SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack
|
|
+ *
|
|
+ * Author: Adam Dunkels <adam@sics.se>
|
|
+ *
|
|
+ * $Id: lc.h,v 1.2 2006/06/12 08:00:30 adam Exp $
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \addtogroup pt
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \defgroup lc Local continuations
|
|
+ * @{
|
|
+ *
|
|
+ * Local continuations form the basis for implementing protothreads. A
|
|
+ * local continuation can be <i>set</i> in a specific function to
|
|
+ * capture the state of the function. After a local continuation has
|
|
+ * been set can be <i>resumed</i> in order to restore the state of the
|
|
+ * function at the point where the local continuation was set.
|
|
+ *
|
|
+ *
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \file lc.h
|
|
+ * Local continuations
|
|
+ * \author
|
|
+ * Adam Dunkels <adam@sics.se>
|
|
+ *
|
|
+ */
|
|
+
|
|
+#ifdef DOXYGEN
|
|
+/**
|
|
+ * Initialize a local continuation.
|
|
+ *
|
|
+ * This operation initializes the local continuation, thereby
|
|
+ * unsetting any previously set continuation state.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define LC_INIT(lc)
|
|
+
|
|
+/**
|
|
+ * Set a local continuation.
|
|
+ *
|
|
+ * The set operation saves the state of the function at the point
|
|
+ * where the operation is executed. As far as the set operation is
|
|
+ * concerned, the state of the function does <b>not</b> include the
|
|
+ * call-stack or local (automatic) variables, but only the program
|
|
+ * counter and such CPU registers that needs to be saved.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define LC_SET(lc)
|
|
+
|
|
+/**
|
|
+ * Resume a local continuation.
|
|
+ *
|
|
+ * The resume operation resumes a previously set local continuation, thus
|
|
+ * restoring the state in which the function was when the local
|
|
+ * continuation was set. If the local continuation has not been
|
|
+ * previously set, the resume operation does nothing.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define LC_RESUME(lc)
|
|
+
|
|
+/**
|
|
+ * Mark the end of local continuation usage.
|
|
+ *
|
|
+ * The end operation signifies that local continuations should not be
|
|
+ * used any more in the function. This operation is not needed for
|
|
+ * most implementations of local continuation, but is required by a
|
|
+ * few implementations.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define LC_END(lc)
|
|
+
|
|
+/**
|
|
+ * \var typedef lc_t;
|
|
+ *
|
|
+ * The local continuation type.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#endif /* DOXYGEN */
|
|
+
|
|
+#ifndef __LC_H__
|
|
+#define __LC_H__
|
|
+
|
|
+#ifdef LC_CONF_INCLUDE
|
|
+#include LC_CONF_INCLUDE
|
|
+#else
|
|
+#include "lc-switch.h"
|
|
+#endif /* LC_CONF_INCLUDE */
|
|
+
|
|
+#endif /* __LC_H__ */
|
|
+
|
|
+/** @} */
|
|
+/** @} */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/lc-switch.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/lc-switch.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/lc-switch.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/lc-switch.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,76 @@
|
|
+/*
|
|
+ * Copyright (c) 2004-2005, Swedish Institute of Computer Science.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. Neither the name of the Institute nor the names of its contributors
|
|
+ * may be used to endorse or promote products derived from this software
|
|
+ * without specific prior written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
|
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
|
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
+ * SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack
|
|
+ *
|
|
+ * Author: Adam Dunkels <adam@sics.se>
|
|
+ *
|
|
+ * $Id: lc-switch.h,v 1.2 2006/06/12 08:00:30 adam Exp $
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \addtogroup lc
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \file
|
|
+ * Implementation of local continuations based on switch() statment
|
|
+ * \author Adam Dunkels <adam@sics.se>
|
|
+ *
|
|
+ * This implementation of local continuations uses the C switch()
|
|
+ * statement to resume execution of a function somewhere inside the
|
|
+ * function's body. The implementation is based on the fact that
|
|
+ * switch() statements are able to jump directly into the bodies of
|
|
+ * control structures such as if() or while() statmenets.
|
|
+ *
|
|
+ * This implementation borrows heavily from Simon Tatham's coroutines
|
|
+ * implementation in C:
|
|
+ * http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html
|
|
+ */
|
|
+
|
|
+#ifndef __LC_SWITCH_H__
|
|
+#define __LC_SWTICH_H__
|
|
+
|
|
+/* WARNING! lc implementation using switch() does not work if an
|
|
+ LC_SET() is done within another switch() statement! */
|
|
+
|
|
+/** \hideinitializer */
|
|
+typedef unsigned short lc_t;
|
|
+
|
|
+#define LC_INIT(s) s = 0;
|
|
+
|
|
+#define LC_RESUME(s) switch(s) { case 0:
|
|
+
|
|
+#define LC_SET(s) s = __LINE__; case __LINE__:
|
|
+
|
|
+#define LC_END(s) }
|
|
+
|
|
+#endif /* __LC_SWITCH_H__ */
|
|
+
|
|
+/** @} */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/Makefile.am open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/Makefile.am
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/Makefile.am 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/Makefile.am 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,17 @@
|
|
+INCLUDES = -I${top_srcdir}/src/unix \
|
|
+ -I${top_srcdir}/src/apps/dhcpc \
|
|
+ -I${top_srcdir}/src/apps/brcm-iscsi \
|
|
+ -I${top_srcdir}/include
|
|
+
|
|
+noinst_LIBRARIES = lib_iscsi_uip.a
|
|
+
|
|
+lib_iscsi_uip_a_SOURCES = uip.c \
|
|
+ uip_arp.c \
|
|
+ psock.c \
|
|
+ timer.c \
|
|
+ uip-neighbor.c \
|
|
+ uip_eth.c \
|
|
+ ipv6_ndpc.c \
|
|
+ ipv6.c
|
|
+
|
|
+lib_iscsi_uip_a_CFLAGS = -DBYTE_ORDER=@ENDIAN@
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/Makefile.in open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/Makefile.in
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/Makefile.in 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/Makefile.in 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,561 @@
|
|
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
|
+# @configure_input@
|
|
+
|
|
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
|
+# 2003, 2004, 2005 Free Software Foundation, Inc.
|
|
+# This Makefile.in 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.
|
|
+
|
|
+# This program is distributed in the hope that it will be useful,
|
|
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
|
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
+# PARTICULAR PURPOSE.
|
|
+
|
|
+@SET_MAKE@
|
|
+
|
|
+srcdir = @srcdir@
|
|
+top_srcdir = @top_srcdir@
|
|
+VPATH = @srcdir@
|
|
+pkgdatadir = $(datadir)/@PACKAGE@
|
|
+pkglibdir = $(libdir)/@PACKAGE@
|
|
+pkgincludedir = $(includedir)/@PACKAGE@
|
|
+top_builddir = ../..
|
|
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
|
+INSTALL = @INSTALL@
|
|
+install_sh_DATA = $(install_sh) -c -m 644
|
|
+install_sh_PROGRAM = $(install_sh) -c
|
|
+install_sh_SCRIPT = $(install_sh) -c
|
|
+INSTALL_HEADER = $(INSTALL_DATA)
|
|
+transform = $(program_transform_name)
|
|
+NORMAL_INSTALL = :
|
|
+PRE_INSTALL = :
|
|
+POST_INSTALL = :
|
|
+NORMAL_UNINSTALL = :
|
|
+PRE_UNINSTALL = :
|
|
+POST_UNINSTALL = :
|
|
+build_triplet = @build@
|
|
+host_triplet = @host@
|
|
+subdir = src/uip
|
|
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
|
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
|
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
|
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
|
+ $(ACLOCAL_M4)
|
|
+mkinstalldirs = $(install_sh) -d
|
|
+CONFIG_HEADER = $(top_builddir)/config.h
|
|
+CONFIG_CLEAN_FILES =
|
|
+LIBRARIES = $(noinst_LIBRARIES)
|
|
+ARFLAGS = cru
|
|
+lib_iscsi_uip_a_AR = $(AR) $(ARFLAGS)
|
|
+lib_iscsi_uip_a_LIBADD =
|
|
+am_lib_iscsi_uip_a_OBJECTS = lib_iscsi_uip_a-uip.$(OBJEXT) \
|
|
+ lib_iscsi_uip_a-uip_arp.$(OBJEXT) \
|
|
+ lib_iscsi_uip_a-psock.$(OBJEXT) \
|
|
+ lib_iscsi_uip_a-timer.$(OBJEXT) \
|
|
+ lib_iscsi_uip_a-uip-neighbor.$(OBJEXT) \
|
|
+ lib_iscsi_uip_a-uip_eth.$(OBJEXT) \
|
|
+ lib_iscsi_uip_a-ipv6_ndpc.$(OBJEXT) \
|
|
+ lib_iscsi_uip_a-ipv6.$(OBJEXT)
|
|
+lib_iscsi_uip_a_OBJECTS = $(am_lib_iscsi_uip_a_OBJECTS)
|
|
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
|
+depcomp = $(SHELL) $(top_srcdir)/depcomp
|
|
+am__depfiles_maybe = depfiles
|
|
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
|
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
|
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
|
|
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
|
+ $(AM_CFLAGS) $(CFLAGS)
|
|
+CCLD = $(CC)
|
|
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
|
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
|
+SOURCES = $(lib_iscsi_uip_a_SOURCES)
|
|
+DIST_SOURCES = $(lib_iscsi_uip_a_SOURCES)
|
|
+ETAGS = etags
|
|
+CTAGS = ctags
|
|
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
|
+ACLOCAL = @ACLOCAL@
|
|
+AMDEP_FALSE = @AMDEP_FALSE@
|
|
+AMDEP_TRUE = @AMDEP_TRUE@
|
|
+AMTAR = @AMTAR@
|
|
+AR = @AR@
|
|
+AUTOCONF = @AUTOCONF@
|
|
+AUTOHEADER = @AUTOHEADER@
|
|
+AUTOMAKE = @AUTOMAKE@
|
|
+AWK = @AWK@
|
|
+BASH = @BASH@
|
|
+CC = @CC@
|
|
+CCDEPMODE = @CCDEPMODE@
|
|
+CFLAGS = @CFLAGS@
|
|
+CPP = @CPP@
|
|
+CPPFLAGS = @CPPFLAGS@
|
|
+CXX = @CXX@
|
|
+CXXCPP = @CXXCPP@
|
|
+CXXDEPMODE = @CXXDEPMODE@
|
|
+CXXFLAGS = @CXXFLAGS@
|
|
+CYGPATH_W = @CYGPATH_W@
|
|
+DEBUG_FALSE = @DEBUG_FALSE@
|
|
+DEBUG_TRUE = @DEBUG_TRUE@
|
|
+DEFS = @DEFS@
|
|
+DEPDIR = @DEPDIR@
|
|
+ECHO = @ECHO@
|
|
+ECHO_C = @ECHO_C@
|
|
+ECHO_N = @ECHO_N@
|
|
+ECHO_T = @ECHO_T@
|
|
+EGREP = @EGREP@
|
|
+ENDIAN = @ENDIAN@
|
|
+EXEEXT = @EXEEXT@
|
|
+F77 = @F77@
|
|
+FFLAGS = @FFLAGS@
|
|
+INSTALL_DATA = @INSTALL_DATA@
|
|
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
|
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
|
+LDFLAGS = @LDFLAGS@
|
|
+LIBOBJS = @LIBOBJS@
|
|
+LIBS = @LIBS@
|
|
+LIBTOOL = @LIBTOOL@
|
|
+LN_S = @LN_S@
|
|
+LTLIBOBJS = @LTLIBOBJS@
|
|
+MAKEINFO = @MAKEINFO@
|
|
+OBJEXT = @OBJEXT@
|
|
+PACKAGE = @PACKAGE@
|
|
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
|
+PACKAGE_NAME = @PACKAGE_NAME@
|
|
+PACKAGE_STRING = @PACKAGE_STRING@
|
|
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
|
+PACKAGE_VERSION = @PACKAGE_VERSION@
|
|
+PATH_SEPARATOR = @PATH_SEPARATOR@
|
|
+RANLIB = @RANLIB@
|
|
+SED = @SED@
|
|
+SET_MAKE = @SET_MAKE@
|
|
+SHELL = @SHELL@
|
|
+STRIP = @STRIP@
|
|
+VERSION = @VERSION@
|
|
+ac_ct_AR = @ac_ct_AR@
|
|
+ac_ct_CC = @ac_ct_CC@
|
|
+ac_ct_CXX = @ac_ct_CXX@
|
|
+ac_ct_F77 = @ac_ct_F77@
|
|
+ac_ct_RANLIB = @ac_ct_RANLIB@
|
|
+ac_ct_STRIP = @ac_ct_STRIP@
|
|
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
|
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
|
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
|
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
|
+am__include = @am__include@
|
|
+am__leading_dot = @am__leading_dot@
|
|
+am__quote = @am__quote@
|
|
+am__tar = @am__tar@
|
|
+am__untar = @am__untar@
|
|
+bindir = @bindir@
|
|
+build = @build@
|
|
+build_alias = @build_alias@
|
|
+build_cpu = @build_cpu@
|
|
+build_os = @build_os@
|
|
+build_vendor = @build_vendor@
|
|
+datadir = @datadir@
|
|
+exec_prefix = @exec_prefix@
|
|
+host = @host@
|
|
+host_alias = @host_alias@
|
|
+host_cpu = @host_cpu@
|
|
+host_os = @host_os@
|
|
+host_vendor = @host_vendor@
|
|
+includedir = @includedir@
|
|
+infodir = @infodir@
|
|
+install_sh = @install_sh@
|
|
+libdir = @libdir@
|
|
+libexecdir = @libexecdir@
|
|
+localstatedir = @localstatedir@
|
|
+mandir = @mandir@
|
|
+mkdir_p = @mkdir_p@
|
|
+oldincludedir = @oldincludedir@
|
|
+prefix = @prefix@
|
|
+program_transform_name = @program_transform_name@
|
|
+sbindir = @sbindir@
|
|
+sharedstatedir = @sharedstatedir@
|
|
+sysconfdir = @sysconfdir@
|
|
+target_alias = @target_alias@
|
|
+INCLUDES = -I${top_srcdir}/src/unix \
|
|
+ -I${top_srcdir}/src/apps/dhcpc \
|
|
+ -I${top_srcdir}/src/apps/brcm-iscsi \
|
|
+ -I${top_srcdir}/include
|
|
+
|
|
+noinst_LIBRARIES = lib_iscsi_uip.a
|
|
+lib_iscsi_uip_a_SOURCES = uip.c \
|
|
+ uip_arp.c \
|
|
+ psock.c \
|
|
+ timer.c \
|
|
+ uip-neighbor.c \
|
|
+ uip_eth.c \
|
|
+ ipv6_ndpc.c \
|
|
+ ipv6.c
|
|
+
|
|
+lib_iscsi_uip_a_CFLAGS = -DBYTE_ORDER=@ENDIAN@
|
|
+all: all-am
|
|
+
|
|
+.SUFFIXES:
|
|
+.SUFFIXES: .c .lo .o .obj
|
|
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
|
+ @for dep in $?; do \
|
|
+ case '$(am__configure_deps)' in \
|
|
+ *$$dep*) \
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
|
+ && exit 0; \
|
|
+ exit 1;; \
|
|
+ esac; \
|
|
+ done; \
|
|
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/uip/Makefile'; \
|
|
+ cd $(top_srcdir) && \
|
|
+ $(AUTOMAKE) --gnu src/uip/Makefile
|
|
+.PRECIOUS: Makefile
|
|
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
|
+ @case '$?' in \
|
|
+ *config.status*) \
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
|
+ *) \
|
|
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
|
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
|
+ esac;
|
|
+
|
|
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+
|
|
+$(top_srcdir)/configure: $(am__configure_deps)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+
|
|
+clean-noinstLIBRARIES:
|
|
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
|
|
+lib_iscsi_uip.a: $(lib_iscsi_uip_a_OBJECTS) $(lib_iscsi_uip_a_DEPENDENCIES)
|
|
+ -rm -f lib_iscsi_uip.a
|
|
+ $(lib_iscsi_uip_a_AR) lib_iscsi_uip.a $(lib_iscsi_uip_a_OBJECTS) $(lib_iscsi_uip_a_LIBADD)
|
|
+ $(RANLIB) lib_iscsi_uip.a
|
|
+
|
|
+mostlyclean-compile:
|
|
+ -rm -f *.$(OBJEXT)
|
|
+
|
|
+distclean-compile:
|
|
+ -rm -f *.tab.c
|
|
+
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_iscsi_uip_a-ipv6.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_iscsi_uip_a-ipv6_ndpc.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_iscsi_uip_a-psock.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_iscsi_uip_a-timer.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_iscsi_uip_a-uip-neighbor.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_iscsi_uip_a-uip.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_iscsi_uip_a-uip_arp.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_iscsi_uip_a-uip_eth.Po@am__quote@
|
|
+
|
|
+.c.o:
|
|
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
|
|
+
|
|
+.c.obj:
|
|
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
|
|
+
|
|
+.c.lo:
|
|
+@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
|
|
+
|
|
+lib_iscsi_uip_a-uip.o: uip.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -MT lib_iscsi_uip_a-uip.o -MD -MP -MF "$(DEPDIR)/lib_iscsi_uip_a-uip.Tpo" -c -o lib_iscsi_uip_a-uip.o `test -f 'uip.c' || echo '$(srcdir)/'`uip.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_iscsi_uip_a-uip.Tpo" "$(DEPDIR)/lib_iscsi_uip_a-uip.Po"; else rm -f "$(DEPDIR)/lib_iscsi_uip_a-uip.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='uip.c' object='lib_iscsi_uip_a-uip.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -c -o lib_iscsi_uip_a-uip.o `test -f 'uip.c' || echo '$(srcdir)/'`uip.c
|
|
+
|
|
+lib_iscsi_uip_a-uip.obj: uip.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -MT lib_iscsi_uip_a-uip.obj -MD -MP -MF "$(DEPDIR)/lib_iscsi_uip_a-uip.Tpo" -c -o lib_iscsi_uip_a-uip.obj `if test -f 'uip.c'; then $(CYGPATH_W) 'uip.c'; else $(CYGPATH_W) '$(srcdir)/uip.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_iscsi_uip_a-uip.Tpo" "$(DEPDIR)/lib_iscsi_uip_a-uip.Po"; else rm -f "$(DEPDIR)/lib_iscsi_uip_a-uip.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='uip.c' object='lib_iscsi_uip_a-uip.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -c -o lib_iscsi_uip_a-uip.obj `if test -f 'uip.c'; then $(CYGPATH_W) 'uip.c'; else $(CYGPATH_W) '$(srcdir)/uip.c'; fi`
|
|
+
|
|
+lib_iscsi_uip_a-uip_arp.o: uip_arp.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -MT lib_iscsi_uip_a-uip_arp.o -MD -MP -MF "$(DEPDIR)/lib_iscsi_uip_a-uip_arp.Tpo" -c -o lib_iscsi_uip_a-uip_arp.o `test -f 'uip_arp.c' || echo '$(srcdir)/'`uip_arp.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_iscsi_uip_a-uip_arp.Tpo" "$(DEPDIR)/lib_iscsi_uip_a-uip_arp.Po"; else rm -f "$(DEPDIR)/lib_iscsi_uip_a-uip_arp.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='uip_arp.c' object='lib_iscsi_uip_a-uip_arp.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -c -o lib_iscsi_uip_a-uip_arp.o `test -f 'uip_arp.c' || echo '$(srcdir)/'`uip_arp.c
|
|
+
|
|
+lib_iscsi_uip_a-uip_arp.obj: uip_arp.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -MT lib_iscsi_uip_a-uip_arp.obj -MD -MP -MF "$(DEPDIR)/lib_iscsi_uip_a-uip_arp.Tpo" -c -o lib_iscsi_uip_a-uip_arp.obj `if test -f 'uip_arp.c'; then $(CYGPATH_W) 'uip_arp.c'; else $(CYGPATH_W) '$(srcdir)/uip_arp.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_iscsi_uip_a-uip_arp.Tpo" "$(DEPDIR)/lib_iscsi_uip_a-uip_arp.Po"; else rm -f "$(DEPDIR)/lib_iscsi_uip_a-uip_arp.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='uip_arp.c' object='lib_iscsi_uip_a-uip_arp.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -c -o lib_iscsi_uip_a-uip_arp.obj `if test -f 'uip_arp.c'; then $(CYGPATH_W) 'uip_arp.c'; else $(CYGPATH_W) '$(srcdir)/uip_arp.c'; fi`
|
|
+
|
|
+lib_iscsi_uip_a-psock.o: psock.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -MT lib_iscsi_uip_a-psock.o -MD -MP -MF "$(DEPDIR)/lib_iscsi_uip_a-psock.Tpo" -c -o lib_iscsi_uip_a-psock.o `test -f 'psock.c' || echo '$(srcdir)/'`psock.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_iscsi_uip_a-psock.Tpo" "$(DEPDIR)/lib_iscsi_uip_a-psock.Po"; else rm -f "$(DEPDIR)/lib_iscsi_uip_a-psock.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='psock.c' object='lib_iscsi_uip_a-psock.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -c -o lib_iscsi_uip_a-psock.o `test -f 'psock.c' || echo '$(srcdir)/'`psock.c
|
|
+
|
|
+lib_iscsi_uip_a-psock.obj: psock.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -MT lib_iscsi_uip_a-psock.obj -MD -MP -MF "$(DEPDIR)/lib_iscsi_uip_a-psock.Tpo" -c -o lib_iscsi_uip_a-psock.obj `if test -f 'psock.c'; then $(CYGPATH_W) 'psock.c'; else $(CYGPATH_W) '$(srcdir)/psock.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_iscsi_uip_a-psock.Tpo" "$(DEPDIR)/lib_iscsi_uip_a-psock.Po"; else rm -f "$(DEPDIR)/lib_iscsi_uip_a-psock.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='psock.c' object='lib_iscsi_uip_a-psock.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -c -o lib_iscsi_uip_a-psock.obj `if test -f 'psock.c'; then $(CYGPATH_W) 'psock.c'; else $(CYGPATH_W) '$(srcdir)/psock.c'; fi`
|
|
+
|
|
+lib_iscsi_uip_a-timer.o: timer.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -MT lib_iscsi_uip_a-timer.o -MD -MP -MF "$(DEPDIR)/lib_iscsi_uip_a-timer.Tpo" -c -o lib_iscsi_uip_a-timer.o `test -f 'timer.c' || echo '$(srcdir)/'`timer.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_iscsi_uip_a-timer.Tpo" "$(DEPDIR)/lib_iscsi_uip_a-timer.Po"; else rm -f "$(DEPDIR)/lib_iscsi_uip_a-timer.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='timer.c' object='lib_iscsi_uip_a-timer.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -c -o lib_iscsi_uip_a-timer.o `test -f 'timer.c' || echo '$(srcdir)/'`timer.c
|
|
+
|
|
+lib_iscsi_uip_a-timer.obj: timer.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -MT lib_iscsi_uip_a-timer.obj -MD -MP -MF "$(DEPDIR)/lib_iscsi_uip_a-timer.Tpo" -c -o lib_iscsi_uip_a-timer.obj `if test -f 'timer.c'; then $(CYGPATH_W) 'timer.c'; else $(CYGPATH_W) '$(srcdir)/timer.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_iscsi_uip_a-timer.Tpo" "$(DEPDIR)/lib_iscsi_uip_a-timer.Po"; else rm -f "$(DEPDIR)/lib_iscsi_uip_a-timer.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='timer.c' object='lib_iscsi_uip_a-timer.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -c -o lib_iscsi_uip_a-timer.obj `if test -f 'timer.c'; then $(CYGPATH_W) 'timer.c'; else $(CYGPATH_W) '$(srcdir)/timer.c'; fi`
|
|
+
|
|
+lib_iscsi_uip_a-uip-neighbor.o: uip-neighbor.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -MT lib_iscsi_uip_a-uip-neighbor.o -MD -MP -MF "$(DEPDIR)/lib_iscsi_uip_a-uip-neighbor.Tpo" -c -o lib_iscsi_uip_a-uip-neighbor.o `test -f 'uip-neighbor.c' || echo '$(srcdir)/'`uip-neighbor.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_iscsi_uip_a-uip-neighbor.Tpo" "$(DEPDIR)/lib_iscsi_uip_a-uip-neighbor.Po"; else rm -f "$(DEPDIR)/lib_iscsi_uip_a-uip-neighbor.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='uip-neighbor.c' object='lib_iscsi_uip_a-uip-neighbor.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -c -o lib_iscsi_uip_a-uip-neighbor.o `test -f 'uip-neighbor.c' || echo '$(srcdir)/'`uip-neighbor.c
|
|
+
|
|
+lib_iscsi_uip_a-uip-neighbor.obj: uip-neighbor.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -MT lib_iscsi_uip_a-uip-neighbor.obj -MD -MP -MF "$(DEPDIR)/lib_iscsi_uip_a-uip-neighbor.Tpo" -c -o lib_iscsi_uip_a-uip-neighbor.obj `if test -f 'uip-neighbor.c'; then $(CYGPATH_W) 'uip-neighbor.c'; else $(CYGPATH_W) '$(srcdir)/uip-neighbor.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_iscsi_uip_a-uip-neighbor.Tpo" "$(DEPDIR)/lib_iscsi_uip_a-uip-neighbor.Po"; else rm -f "$(DEPDIR)/lib_iscsi_uip_a-uip-neighbor.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='uip-neighbor.c' object='lib_iscsi_uip_a-uip-neighbor.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -c -o lib_iscsi_uip_a-uip-neighbor.obj `if test -f 'uip-neighbor.c'; then $(CYGPATH_W) 'uip-neighbor.c'; else $(CYGPATH_W) '$(srcdir)/uip-neighbor.c'; fi`
|
|
+
|
|
+lib_iscsi_uip_a-uip_eth.o: uip_eth.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -MT lib_iscsi_uip_a-uip_eth.o -MD -MP -MF "$(DEPDIR)/lib_iscsi_uip_a-uip_eth.Tpo" -c -o lib_iscsi_uip_a-uip_eth.o `test -f 'uip_eth.c' || echo '$(srcdir)/'`uip_eth.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_iscsi_uip_a-uip_eth.Tpo" "$(DEPDIR)/lib_iscsi_uip_a-uip_eth.Po"; else rm -f "$(DEPDIR)/lib_iscsi_uip_a-uip_eth.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='uip_eth.c' object='lib_iscsi_uip_a-uip_eth.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -c -o lib_iscsi_uip_a-uip_eth.o `test -f 'uip_eth.c' || echo '$(srcdir)/'`uip_eth.c
|
|
+
|
|
+lib_iscsi_uip_a-uip_eth.obj: uip_eth.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -MT lib_iscsi_uip_a-uip_eth.obj -MD -MP -MF "$(DEPDIR)/lib_iscsi_uip_a-uip_eth.Tpo" -c -o lib_iscsi_uip_a-uip_eth.obj `if test -f 'uip_eth.c'; then $(CYGPATH_W) 'uip_eth.c'; else $(CYGPATH_W) '$(srcdir)/uip_eth.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_iscsi_uip_a-uip_eth.Tpo" "$(DEPDIR)/lib_iscsi_uip_a-uip_eth.Po"; else rm -f "$(DEPDIR)/lib_iscsi_uip_a-uip_eth.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='uip_eth.c' object='lib_iscsi_uip_a-uip_eth.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -c -o lib_iscsi_uip_a-uip_eth.obj `if test -f 'uip_eth.c'; then $(CYGPATH_W) 'uip_eth.c'; else $(CYGPATH_W) '$(srcdir)/uip_eth.c'; fi`
|
|
+
|
|
+lib_iscsi_uip_a-ipv6_ndpc.o: ipv6_ndpc.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -MT lib_iscsi_uip_a-ipv6_ndpc.o -MD -MP -MF "$(DEPDIR)/lib_iscsi_uip_a-ipv6_ndpc.Tpo" -c -o lib_iscsi_uip_a-ipv6_ndpc.o `test -f 'ipv6_ndpc.c' || echo '$(srcdir)/'`ipv6_ndpc.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_iscsi_uip_a-ipv6_ndpc.Tpo" "$(DEPDIR)/lib_iscsi_uip_a-ipv6_ndpc.Po"; else rm -f "$(DEPDIR)/lib_iscsi_uip_a-ipv6_ndpc.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ipv6_ndpc.c' object='lib_iscsi_uip_a-ipv6_ndpc.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -c -o lib_iscsi_uip_a-ipv6_ndpc.o `test -f 'ipv6_ndpc.c' || echo '$(srcdir)/'`ipv6_ndpc.c
|
|
+
|
|
+lib_iscsi_uip_a-ipv6_ndpc.obj: ipv6_ndpc.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -MT lib_iscsi_uip_a-ipv6_ndpc.obj -MD -MP -MF "$(DEPDIR)/lib_iscsi_uip_a-ipv6_ndpc.Tpo" -c -o lib_iscsi_uip_a-ipv6_ndpc.obj `if test -f 'ipv6_ndpc.c'; then $(CYGPATH_W) 'ipv6_ndpc.c'; else $(CYGPATH_W) '$(srcdir)/ipv6_ndpc.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_iscsi_uip_a-ipv6_ndpc.Tpo" "$(DEPDIR)/lib_iscsi_uip_a-ipv6_ndpc.Po"; else rm -f "$(DEPDIR)/lib_iscsi_uip_a-ipv6_ndpc.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ipv6_ndpc.c' object='lib_iscsi_uip_a-ipv6_ndpc.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -c -o lib_iscsi_uip_a-ipv6_ndpc.obj `if test -f 'ipv6_ndpc.c'; then $(CYGPATH_W) 'ipv6_ndpc.c'; else $(CYGPATH_W) '$(srcdir)/ipv6_ndpc.c'; fi`
|
|
+
|
|
+lib_iscsi_uip_a-ipv6.o: ipv6.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -MT lib_iscsi_uip_a-ipv6.o -MD -MP -MF "$(DEPDIR)/lib_iscsi_uip_a-ipv6.Tpo" -c -o lib_iscsi_uip_a-ipv6.o `test -f 'ipv6.c' || echo '$(srcdir)/'`ipv6.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_iscsi_uip_a-ipv6.Tpo" "$(DEPDIR)/lib_iscsi_uip_a-ipv6.Po"; else rm -f "$(DEPDIR)/lib_iscsi_uip_a-ipv6.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ipv6.c' object='lib_iscsi_uip_a-ipv6.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -c -o lib_iscsi_uip_a-ipv6.o `test -f 'ipv6.c' || echo '$(srcdir)/'`ipv6.c
|
|
+
|
|
+lib_iscsi_uip_a-ipv6.obj: ipv6.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -MT lib_iscsi_uip_a-ipv6.obj -MD -MP -MF "$(DEPDIR)/lib_iscsi_uip_a-ipv6.Tpo" -c -o lib_iscsi_uip_a-ipv6.obj `if test -f 'ipv6.c'; then $(CYGPATH_W) 'ipv6.c'; else $(CYGPATH_W) '$(srcdir)/ipv6.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_iscsi_uip_a-ipv6.Tpo" "$(DEPDIR)/lib_iscsi_uip_a-ipv6.Po"; else rm -f "$(DEPDIR)/lib_iscsi_uip_a-ipv6.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ipv6.c' object='lib_iscsi_uip_a-ipv6.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iscsi_uip_a_CFLAGS) $(CFLAGS) -c -o lib_iscsi_uip_a-ipv6.obj `if test -f 'ipv6.c'; then $(CYGPATH_W) 'ipv6.c'; else $(CYGPATH_W) '$(srcdir)/ipv6.c'; fi`
|
|
+
|
|
+mostlyclean-libtool:
|
|
+ -rm -f *.lo
|
|
+
|
|
+clean-libtool:
|
|
+ -rm -rf .libs _libs
|
|
+
|
|
+distclean-libtool:
|
|
+ -rm -f libtool
|
|
+uninstall-info-am:
|
|
+
|
|
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ mkid -fID $$unique
|
|
+tags: TAGS
|
|
+
|
|
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
|
+ $(TAGS_FILES) $(LISP)
|
|
+ tags=; \
|
|
+ here=`pwd`; \
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
|
+ test -n "$$unique" || unique=$$empty_fix; \
|
|
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
|
+ $$tags $$unique; \
|
|
+ fi
|
|
+ctags: CTAGS
|
|
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
|
+ $(TAGS_FILES) $(LISP)
|
|
+ tags=; \
|
|
+ here=`pwd`; \
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
|
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
|
+ $$tags $$unique
|
|
+
|
|
+GTAGS:
|
|
+ here=`$(am__cd) $(top_builddir) && pwd` \
|
|
+ && cd $(top_srcdir) \
|
|
+ && gtags -i $(GTAGS_ARGS) $$here
|
|
+
|
|
+distclean-tags:
|
|
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
|
+
|
|
+distdir: $(DISTFILES)
|
|
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
|
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
|
+ list='$(DISTFILES)'; for file in $$list; do \
|
|
+ case $$file in \
|
|
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
|
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
|
+ esac; \
|
|
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
|
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
|
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
|
+ dir="/$$dir"; \
|
|
+ $(mkdir_p) "$(distdir)$$dir"; \
|
|
+ else \
|
|
+ dir=''; \
|
|
+ fi; \
|
|
+ if test -d $$d/$$file; then \
|
|
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
|
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
|
+ fi; \
|
|
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
|
+ else \
|
|
+ test -f $(distdir)/$$file \
|
|
+ || cp -p $$d/$$file $(distdir)/$$file \
|
|
+ || exit 1; \
|
|
+ fi; \
|
|
+ done
|
|
+check-am: all-am
|
|
+check: check-am
|
|
+all-am: Makefile $(LIBRARIES)
|
|
+installdirs:
|
|
+install: install-am
|
|
+install-exec: install-exec-am
|
|
+install-data: install-data-am
|
|
+uninstall: uninstall-am
|
|
+
|
|
+install-am: all-am
|
|
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
|
+
|
|
+installcheck: installcheck-am
|
|
+install-strip:
|
|
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
|
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
|
+ `test -z '$(STRIP)' || \
|
|
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
|
+mostlyclean-generic:
|
|
+
|
|
+clean-generic:
|
|
+
|
|
+distclean-generic:
|
|
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
|
+
|
|
+maintainer-clean-generic:
|
|
+ @echo "This command is intended for maintainers to use"
|
|
+ @echo "it deletes files that may require special tools to rebuild."
|
|
+clean: clean-am
|
|
+
|
|
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
|
|
+ mostlyclean-am
|
|
+
|
|
+distclean: distclean-am
|
|
+ -rm -rf ./$(DEPDIR)
|
|
+ -rm -f Makefile
|
|
+distclean-am: clean-am distclean-compile distclean-generic \
|
|
+ distclean-libtool distclean-tags
|
|
+
|
|
+dvi: dvi-am
|
|
+
|
|
+dvi-am:
|
|
+
|
|
+html: html-am
|
|
+
|
|
+info: info-am
|
|
+
|
|
+info-am:
|
|
+
|
|
+install-data-am:
|
|
+
|
|
+install-exec-am:
|
|
+
|
|
+install-info: install-info-am
|
|
+
|
|
+install-man:
|
|
+
|
|
+installcheck-am:
|
|
+
|
|
+maintainer-clean: maintainer-clean-am
|
|
+ -rm -rf ./$(DEPDIR)
|
|
+ -rm -f Makefile
|
|
+maintainer-clean-am: distclean-am maintainer-clean-generic
|
|
+
|
|
+mostlyclean: mostlyclean-am
|
|
+
|
|
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
|
+ mostlyclean-libtool
|
|
+
|
|
+pdf: pdf-am
|
|
+
|
|
+pdf-am:
|
|
+
|
|
+ps: ps-am
|
|
+
|
|
+ps-am:
|
|
+
|
|
+uninstall-am: uninstall-info-am
|
|
+
|
|
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
|
+ clean-libtool clean-noinstLIBRARIES ctags distclean \
|
|
+ distclean-compile distclean-generic distclean-libtool \
|
|
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
|
|
+ install install-am install-data install-data-am install-exec \
|
|
+ install-exec-am install-info install-info-am install-man \
|
|
+ install-strip installcheck installcheck-am installdirs \
|
|
+ maintainer-clean maintainer-clean-generic mostlyclean \
|
|
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
|
|
+ pdf pdf-am ps ps-am tags uninstall uninstall-am \
|
|
+ uninstall-info-am
|
|
+
|
|
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
|
+# Otherwise a system limit (for SysV at least) may be exceeded.
|
|
+.NOEXPORT:
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/Makefile.include open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/Makefile.include
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/Makefile.include 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/Makefile.include 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,47 @@
|
|
+
|
|
+
|
|
+ifdef APPS
|
|
+ APPDIRS = $(foreach APP, $(APPS), ../apps/$(APP))
|
|
+ -include $(foreach APP, $(APPS), ../apps/$(APP)/Makefile.$(APP))
|
|
+ CFLAGS += $(addprefix -I../apps/,$(APPS))
|
|
+endif
|
|
+
|
|
+ifndef CCDEP
|
|
+ CCDEP = $(CC)
|
|
+endif
|
|
+ifndef CCDEPCFLAGS
|
|
+ CCDEPCFLAGS = $(CFLAGS)
|
|
+endif
|
|
+ifndef OBJECTDIR
|
|
+ OBJECTDIR = obj
|
|
+endif
|
|
+
|
|
+ifeq (${wildcard $(OBJECTDIR)},)
|
|
+ DUMMY := ${shell mkdir $(OBJECTDIR)}
|
|
+endif
|
|
+
|
|
+
|
|
+vpath %.c . ../uip ../lib $(APPDIRS)
|
|
+
|
|
+$(OBJECTDIR)/%.o: %.c
|
|
+ $(CC) $(CFLAGS) -c $< -o $@
|
|
+
|
|
+$(OBJECTDIR)/%.d: %.c
|
|
+ @set -e; rm -f $@; \
|
|
+ $(CCDEP) -MM $(CCDEPCFLAGS) $< > $@.$$$$; \
|
|
+ sed 's,\($*\)\.o[ :]*,$(OBJECTDIR)/\1.o $@ : ,g' < $@.$$$$ > $@; \
|
|
+ rm -f $@.$$$$
|
|
+
|
|
+UIP_SOURCES=uip.c uip_arp.c uiplib.c psock.c timer.c uip-neighbor.c uip_eth.c ipv6_ndp.c ipv6.c
|
|
+
|
|
+
|
|
+ifneq ($(MAKECMDGOALS),clean)
|
|
+-include $(addprefix $(OBJECTDIR)/,$(UIP_SOURCES:.c=.d) \
|
|
+ $(APP_SOURCES:.c=.d))
|
|
+endif
|
|
+
|
|
+libuip.a: ${addprefix $(OBJECTDIR)/, $(UIP_SOURCES:.c=.o)}
|
|
+ $(AR) rc $@ $^
|
|
+
|
|
+libapps.a: ${addprefix $(OBJECTDIR)/, $(APP_SOURCES:.c=.o)}
|
|
+ $(AR) rc $@ $^
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/psock.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/psock.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/psock.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/psock.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,345 @@
|
|
+/*
|
|
+ * Copyright (c) 2004, Swedish Institute of Computer Science.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. Neither the name of the Institute nor the names of its contributors
|
|
+ * may be used to endorse or promote products derived from this software
|
|
+ * without specific prior written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
|
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
|
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
+ * SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack
|
|
+ *
|
|
+ * Author: Adam Dunkels <adam@sics.se>
|
|
+ *
|
|
+ * $Id: psock.c,v 1.2 2006/06/12 08:00:30 adam Exp $
|
|
+ */
|
|
+
|
|
+#include <stdio.h>
|
|
+#include <string.h>
|
|
+
|
|
+#include "uipopt.h"
|
|
+#include "psock.h"
|
|
+#include "uip.h"
|
|
+
|
|
+#define STATE_NONE 0
|
|
+#define STATE_ACKED 1
|
|
+#define STATE_READ 2
|
|
+#define STATE_BLOCKED_NEWDATA 3
|
|
+#define STATE_BLOCKED_CLOSE 4
|
|
+#define STATE_BLOCKED_SEND 5
|
|
+#define STATE_DATA_SENT 6
|
|
+
|
|
+/*
|
|
+ * Return value of the buffering functions that indicates that a
|
|
+ * buffer was not filled by incoming data.
|
|
+ *
|
|
+ */
|
|
+#define BUF_NOT_FULL 0
|
|
+#define BUF_NOT_FOUND 0
|
|
+
|
|
+/*
|
|
+ * Return value of the buffering functions that indicates that a
|
|
+ * buffer was completely filled by incoming data.
|
|
+ *
|
|
+ */
|
|
+#define BUF_FULL 1
|
|
+
|
|
+/*
|
|
+ * Return value of the buffering functions that indicates that an
|
|
+ * end-marker byte was found.
|
|
+ *
|
|
+ */
|
|
+#define BUF_FOUND 2
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static void buf_setup(struct psock_buf *buf, u8_t * bufptr, u16_t bufsize)
|
|
+{
|
|
+ buf->ptr = bufptr;
|
|
+ buf->left = bufsize;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static u8_t
|
|
+buf_bufdata(struct psock_buf *buf, u16_t len, u8_t ** dataptr, u16_t * datalen)
|
|
+{
|
|
+ if (*datalen < buf->left) {
|
|
+ memcpy(buf->ptr, *dataptr, *datalen);
|
|
+ buf->ptr += *datalen;
|
|
+ buf->left -= *datalen;
|
|
+ *dataptr += *datalen;
|
|
+ *datalen = 0;
|
|
+ return BUF_NOT_FULL;
|
|
+ } else if (*datalen == buf->left) {
|
|
+ memcpy(buf->ptr, *dataptr, *datalen);
|
|
+ buf->ptr += *datalen;
|
|
+ buf->left = 0;
|
|
+ *dataptr += *datalen;
|
|
+ *datalen = 0;
|
|
+ return BUF_FULL;
|
|
+ } else {
|
|
+ memcpy(buf->ptr, *dataptr, buf->left);
|
|
+ buf->ptr += buf->left;
|
|
+ *datalen -= buf->left;
|
|
+ *dataptr += buf->left;
|
|
+ buf->left = 0;
|
|
+ return BUF_FULL;
|
|
+ }
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static u8_t
|
|
+buf_bufto(register struct psock_buf *buf, u8_t endmarker,
|
|
+ register u8_t ** dataptr, register u16_t * datalen)
|
|
+{
|
|
+ u8_t c;
|
|
+ while (buf->left > 0 && *datalen > 0) {
|
|
+ c = *buf->ptr = **dataptr;
|
|
+ ++*dataptr;
|
|
+ ++buf->ptr;
|
|
+ --*datalen;
|
|
+ --buf->left;
|
|
+
|
|
+ if (c == endmarker) {
|
|
+ return BUF_FOUND;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (*datalen == 0) {
|
|
+ return BUF_NOT_FOUND;
|
|
+ }
|
|
+
|
|
+ while (*datalen > 0) {
|
|
+ c = **dataptr;
|
|
+ --*datalen;
|
|
+ ++*dataptr;
|
|
+
|
|
+ if (c == endmarker) {
|
|
+ return BUF_FOUND | BUF_FULL;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return BUF_FULL;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static char send_data(register struct psock *s)
|
|
+{
|
|
+ if (s->state != STATE_DATA_SENT || uip_rexmit(s->ustack)) {
|
|
+ if (s->sendlen > uip_mss(s->ustack)) {
|
|
+ uip_appsend(s->ustack, s->sendptr, uip_mss(s->ustack));
|
|
+ } else {
|
|
+ uip_appsend(s->ustack, s->sendptr, s->sendlen);
|
|
+ }
|
|
+ s->state = STATE_DATA_SENT;
|
|
+ return 1;
|
|
+ }
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static char data_acked(struct psock *s)
|
|
+{
|
|
+ if (s->state == STATE_DATA_SENT && uip_acked(s->ustack)) {
|
|
+ if (s->sendlen > uip_mss(s->ustack)) {
|
|
+ s->sendlen -= uip_mss(s->ustack);
|
|
+ s->sendptr += uip_mss(s->ustack);
|
|
+ } else {
|
|
+ s->sendptr += s->sendlen;
|
|
+ s->sendlen = 0;
|
|
+ }
|
|
+ s->state = STATE_ACKED;
|
|
+ return 1;
|
|
+ }
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+PT_THREAD(psock_send(struct uip_stack * ustack,
|
|
+ register struct psock * s, const u8_t * buf,
|
|
+ unsigned int len))
|
|
+{
|
|
+ PT_BEGIN(&s->psockpt);
|
|
+
|
|
+ /* If there is no data to send, we exit immediately. */
|
|
+ if (len == 0) {
|
|
+ PT_EXIT(&s->psockpt);
|
|
+ }
|
|
+
|
|
+ /* Save the length of and a pointer to the data that is to be
|
|
+ sent. */
|
|
+ s->sendptr = buf;
|
|
+ s->sendlen = len;
|
|
+
|
|
+ s->state = STATE_NONE;
|
|
+
|
|
+ /* We loop here until all data is sent. The s->sendlen variable is
|
|
+ updated by the data_sent() function. */
|
|
+ while (s->sendlen > 0) {
|
|
+
|
|
+ /*
|
|
+ * The condition for this PT_WAIT_UNTIL is a little tricky: the
|
|
+ * protothread will wait here until all data has been acknowledged
|
|
+ * (data_acked() returns true) and until all data has been sent
|
|
+ * (send_data() returns true). The two functions data_acked()
|
|
+ * and send_data() must be called in succession to ensure that
|
|
+ * all data is sent. Therefore the & operator is used instead of
|
|
+ * the && operator, which would cause only the data_acked()
|
|
+ * function to be called when it returns false.
|
|
+ */
|
|
+ PT_WAIT_UNTIL(&s->psockpt, data_acked(s) & send_data(s));
|
|
+ }
|
|
+
|
|
+ s->state = STATE_NONE;
|
|
+
|
|
+ PT_END(&s->psockpt);
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+PT_THREAD(psock_generator_send(register struct psock *s,
|
|
+ unsigned short (*generate) (void *), void *arg))
|
|
+{
|
|
+ PT_BEGIN(&s->psockpt);
|
|
+
|
|
+ /* Ensure that there is a generator function to call. */
|
|
+ if (generate == NULL) {
|
|
+ PT_EXIT(&s->psockpt);
|
|
+ }
|
|
+
|
|
+ /* Call the generator function to generate the data in the
|
|
+ uip_appdata buffer. */
|
|
+ s->sendlen = generate(arg);
|
|
+ s->sendptr = s->ustack->uip_appdata;
|
|
+
|
|
+ s->state = STATE_NONE;
|
|
+ do {
|
|
+ /* Call the generator function again if we are called to perform
|
|
+ a retransmission. */
|
|
+ if (uip_rexmit(s->ustack)) {
|
|
+ generate(arg);
|
|
+ }
|
|
+ /* Wait until all data is sent and acknowledged. */
|
|
+ PT_WAIT_UNTIL(&s->psockpt, data_acked(s) & send_data(s));
|
|
+ } while (s->sendlen > 0);
|
|
+
|
|
+ s->state = STATE_NONE;
|
|
+
|
|
+ PT_END(&s->psockpt);
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+u16_t psock_datalen(struct psock *psock)
|
|
+{
|
|
+ return psock->bufsize - psock->buf.left;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+char psock_newdata(struct psock *s)
|
|
+{
|
|
+ if (s->readlen > 0) {
|
|
+ /* There is data in the uip_appdata buffer that has not yet been
|
|
+ read with the PSOCK_READ functions. */
|
|
+ return 1;
|
|
+ } else if (s->state == STATE_READ) {
|
|
+ /* All data in uip_appdata buffer already consumed. */
|
|
+ s->state = STATE_BLOCKED_NEWDATA;
|
|
+ return 0;
|
|
+ } else if (uip_newdata(s->ustack)) {
|
|
+ /* There is new data that has not been consumed. */
|
|
+ return 1;
|
|
+ } else {
|
|
+ /* There is no new data. */
|
|
+ return 0;
|
|
+ }
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+PT_THREAD(psock_readto(register struct psock * psock, u8_t c))
|
|
+{
|
|
+ PT_BEGIN(&psock->psockpt);
|
|
+
|
|
+ buf_setup(&psock->buf, psock->bufptr, psock->bufsize);
|
|
+
|
|
+ /* XXX: Should add buf_checkmarker() before do{} loop, if
|
|
+ incoming data has been handled while waiting for a write. */
|
|
+
|
|
+ do {
|
|
+ if (psock->readlen == 0) {
|
|
+ PT_WAIT_UNTIL(&psock->psockpt, psock_newdata(psock));
|
|
+ psock->state = STATE_READ;
|
|
+ psock->readptr = (u8_t *) psock->ustack->uip_appdata;
|
|
+ psock->readlen = uip_datalen(psock->ustack);
|
|
+ }
|
|
+ } while ((buf_bufto(&psock->buf, c,
|
|
+ &psock->readptr,
|
|
+ &psock->readlen) & BUF_FOUND) == 0);
|
|
+
|
|
+ if (psock_datalen(psock) == 0) {
|
|
+ psock->state = STATE_NONE;
|
|
+ PT_RESTART(&psock->psockpt);
|
|
+ }
|
|
+ PT_END(&psock->psockpt);
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+PT_THREAD(psock_readbuf(register struct psock *psock))
|
|
+{
|
|
+ PT_BEGIN(&psock->psockpt);
|
|
+
|
|
+ buf_setup(&psock->buf, psock->bufptr, psock->bufsize);
|
|
+
|
|
+ /* XXX: Should add buf_checkmarker() before do{} loop, if
|
|
+ incoming data has been handled while waiting for a write. */
|
|
+
|
|
+ do {
|
|
+ if (psock->readlen == 0) {
|
|
+ PT_WAIT_UNTIL(&psock->psockpt, psock_newdata(psock));
|
|
+ printf("Waited for newdata\n");
|
|
+ psock->state = STATE_READ;
|
|
+ psock->readptr = (u8_t *) psock->ustack->uip_appdata;
|
|
+ psock->readlen = uip_datalen(psock->ustack);
|
|
+ }
|
|
+ } while (buf_bufdata(&psock->buf, psock->bufsize,
|
|
+ &psock->readptr, &psock->readlen) != BUF_FULL);
|
|
+
|
|
+ if (psock_datalen(psock) == 0) {
|
|
+ psock->state = STATE_NONE;
|
|
+ PT_RESTART(&psock->psockpt);
|
|
+ }
|
|
+ PT_END(&psock->psockpt);
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+void
|
|
+psock_init(struct uip_stack *ustack,
|
|
+ register struct psock *psock, u8_t * buffer, unsigned int buffersize)
|
|
+{
|
|
+ psock->state = STATE_NONE;
|
|
+ psock->readlen = 0;
|
|
+ psock->bufptr = buffer;
|
|
+ psock->bufsize = buffersize;
|
|
+ psock->ustack = ustack;
|
|
+ buf_setup(&psock->buf, buffer, buffersize);
|
|
+ PT_INIT(&psock->pt);
|
|
+ PT_INIT(&psock->psockpt);
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/psock.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/psock.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/psock.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/psock.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,384 @@
|
|
+/*
|
|
+ * Copyright (c) 2004, Swedish Institute of Computer Science.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. Neither the name of the Institute nor the names of its contributors
|
|
+ * may be used to endorse or promote products derived from this software
|
|
+ * without specific prior written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
|
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
|
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
+ * SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack
|
|
+ *
|
|
+ * Author: Adam Dunkels <adam@sics.se>
|
|
+ *
|
|
+ * $Id: psock.h,v 1.3 2006/06/12 08:00:30 adam Exp $
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \defgroup psock Protosockets library
|
|
+ * @{
|
|
+ *
|
|
+ * The protosocket library provides an interface to the uIP stack that is
|
|
+ * similar to the traditional BSD socket interface. Unlike programs
|
|
+ * written for the ordinary uIP event-driven interface, programs
|
|
+ * written with the protosocket library are executed in a sequential
|
|
+ * fashion and does not have to be implemented as explicit state
|
|
+ * machines.
|
|
+ *
|
|
+ * Protosockets only work with TCP connections.
|
|
+ *
|
|
+ * The protosocket library uses \ref pt protothreads to provide
|
|
+ * sequential control flow. This makes the protosockets lightweight in
|
|
+ * terms of memory, but also means that protosockets inherits the
|
|
+ * functional limitations of protothreads. Each protosocket lives only
|
|
+ * within a single function. Automatic variables (stack variables) are
|
|
+ * not retained across a protosocket library function call.
|
|
+ *
|
|
+ * \note Because the protosocket library uses protothreads, local
|
|
+ * variables will not always be saved across a call to a protosocket
|
|
+ * library function. It is therefore advised that local variables are
|
|
+ * used with extreme care.
|
|
+ *
|
|
+ * The protosocket library provides functions for sending data without
|
|
+ * having to deal with retransmissions and acknowledgements, as well
|
|
+ * as functions for reading data without having to deal with data
|
|
+ * being split across more than one TCP segment.
|
|
+ *
|
|
+ * Because each protosocket runs as a protothread, the protosocket has to be
|
|
+ * started with a call to PSOCK_BEGIN() at the start of the function
|
|
+ * in which the protosocket is used. Similarly, the protosocket protothread can
|
|
+ * be terminated by a call to PSOCK_EXIT().
|
|
+ *
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \file
|
|
+ * Protosocket library header file
|
|
+ * \author
|
|
+ * Adam Dunkels <adam@sics.se>
|
|
+ *
|
|
+ */
|
|
+
|
|
+#ifndef __PSOCK_H__
|
|
+#define __PSOCK_H__
|
|
+
|
|
+#include "uip.h"
|
|
+#include "uipopt.h"
|
|
+#include "pt.h"
|
|
+
|
|
+ /*
|
|
+ * The structure that holds the state of a buffer.
|
|
+ *
|
|
+ * This structure holds the state of a uIP buffer. The structure has
|
|
+ * no user-visible elements, but is used through the functions
|
|
+ * provided by the library.
|
|
+ *
|
|
+ */
|
|
+struct psock_buf {
|
|
+ u8_t *ptr;
|
|
+ unsigned short left;
|
|
+};
|
|
+
|
|
+/**
|
|
+ * The representation of a protosocket.
|
|
+ *
|
|
+ * The protosocket structrure is an opaque structure with no user-visible
|
|
+ * elements.
|
|
+ */
|
|
+struct psock {
|
|
+ struct pt pt, psockpt; /* Protothreads - one that's using the psock
|
|
+ functions, and one that runs inside the
|
|
+ psock functions. */
|
|
+ const u8_t *sendptr; /* Pointer to the next data to be sent. */
|
|
+ u8_t *readptr; /* Pointer to the next data to be read. */
|
|
+
|
|
+ u8_t *bufptr; /* Pointer to the buffer used for buffering
|
|
+ incoming data. */
|
|
+
|
|
+ u16_t sendlen; /* The number of bytes left to be sent. */
|
|
+ u16_t readlen; /* The number of bytes left to be read. */
|
|
+
|
|
+ struct psock_buf buf; /* The structure holding the state of the
|
|
+ input buffer. */
|
|
+ unsigned int bufsize; /* The size of the input buffer. */
|
|
+
|
|
+ unsigned char state; /* The state of the protosocket. */
|
|
+
|
|
+ struct uip_stack *ustack;
|
|
+};
|
|
+
|
|
+void psock_init(struct uip_stack *ustack,
|
|
+ struct psock *psock, u8_t * buffer, unsigned int buffersize);
|
|
+/**
|
|
+ * Initialize a protosocket.
|
|
+ *
|
|
+ * This macro initializes a protosocket and must be called before the
|
|
+ * protosocket is used. The initialization also specifies the input buffer
|
|
+ * for the protosocket.
|
|
+ *
|
|
+ * \param psock (struct psock *) A pointer to the protosocket to be
|
|
+ * initialized
|
|
+ *
|
|
+ * \param buffer (char *) A pointer to the input buffer for the
|
|
+ * protosocket.
|
|
+ *
|
|
+ * \param buffersize (unsigned int) The size of the input buffer.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PSOCK_INIT(psock, buffer, buffersize) \
|
|
+ psock_init(psock, buffer, buffersize)
|
|
+
|
|
+/**
|
|
+ * Start the protosocket protothread in a function.
|
|
+ *
|
|
+ * This macro starts the protothread associated with the protosocket and
|
|
+ * must come before other protosocket calls in the function it is used.
|
|
+ *
|
|
+ * \param psock (struct psock *) A pointer to the protosocket to be
|
|
+ * started.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PSOCK_BEGIN(psock) PT_BEGIN(&((psock)->pt))
|
|
+
|
|
+PT_THREAD(psock_send(struct uip_stack *ustack,
|
|
+ struct psock *psock, const u8_t * buf, unsigned int len));
|
|
+/**
|
|
+ * Send data.
|
|
+ *
|
|
+ * This macro sends data over a protosocket. The protosocket protothread blocks
|
|
+ * until all data has been sent and is known to have been received by
|
|
+ * the remote end of the TCP connection.
|
|
+ *
|
|
+ * \param psock (struct psock *) A pointer to the protosocket over which
|
|
+ * data is to be sent.
|
|
+ *
|
|
+ * \param data (char *) A pointer to the data that is to be sent.
|
|
+ *
|
|
+ * \param datalen (unsigned int) The length of the data that is to be
|
|
+ * sent.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PSOCK_SEND(psock, data, datalen) \
|
|
+ PT_WAIT_THREAD(&((psock)->pt), psock_send(psock, data, datalen))
|
|
+
|
|
+/**
|
|
+ * \brief Send a null-terminated string.
|
|
+ * \param psock Pointer to the protosocket.
|
|
+ * \param str The string to be sent.
|
|
+ *
|
|
+ * This function sends a null-terminated string over the
|
|
+ * protosocket.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PSOCK_SEND_STR(psock, str) \
|
|
+ PT_WAIT_THREAD(&((psock)->pt), psock_send(psock, str, strlen(str)))
|
|
+
|
|
+PT_THREAD(psock_generator_send(struct psock *psock,
|
|
+ unsigned short (*f) (void *), void *arg));
|
|
+
|
|
+/**
|
|
+ * \brief Generate data with a function and send it
|
|
+ * \param psock Pointer to the protosocket.
|
|
+ * \param generator Pointer to the generator function
|
|
+ * \param arg Argument to the generator function
|
|
+ *
|
|
+ * This function generates data and sends it over the
|
|
+ * protosocket. This can be used to dynamically generate
|
|
+ * data for a transmission, instead of generating the data
|
|
+ * in a buffer beforehand. This function reduces the need for
|
|
+ * buffer memory. The generator function is implemented by
|
|
+ * the application, and a pointer to the function is given
|
|
+ * as an argument with the call to PSOCK_GENERATOR_SEND().
|
|
+ *
|
|
+ * The generator function should place the generated data
|
|
+ * directly in the uip_appdata buffer, and return the
|
|
+ * length of the generated data. The generator function is
|
|
+ * called by the protosocket layer when the data first is
|
|
+ * sent, and once for every retransmission that is needed.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PSOCK_GENERATOR_SEND(psock, generator, arg) \
|
|
+ PT_WAIT_THREAD(&((psock)->pt), \
|
|
+ psock_generator_send(psock, generator, arg))
|
|
+
|
|
+/**
|
|
+ * Close a protosocket.
|
|
+ *
|
|
+ * This macro closes a protosocket and can only be called from within the
|
|
+ * protothread in which the protosocket lives.
|
|
+ *
|
|
+ * \param psock (struct psock *) A pointer to the protosocket that is to
|
|
+ * be closed.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PSOCK_CLOSE(psock) uip_close()
|
|
+
|
|
+PT_THREAD(psock_readbuf(struct psock *psock));
|
|
+/**
|
|
+ * Read data until the buffer is full.
|
|
+ *
|
|
+ * This macro will block waiting for data and read the data into the
|
|
+ * input buffer specified with the call to PSOCK_INIT(). Data is read
|
|
+ * until the buffer is full..
|
|
+ *
|
|
+ * \param psock (struct psock *) A pointer to the protosocket from which
|
|
+ * data should be read.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PSOCK_READBUF(psock) \
|
|
+ PT_WAIT_THREAD(&((psock)->pt), psock_readbuf(psock))
|
|
+
|
|
+PT_THREAD(psock_readto(struct psock *psock, unsigned char c));
|
|
+/**
|
|
+ * Read data up to a specified character.
|
|
+ *
|
|
+ * This macro will block waiting for data and read the data into the
|
|
+ * input buffer specified with the call to PSOCK_INIT(). Data is only
|
|
+ * read until the specifieed character appears in the data stream.
|
|
+ *
|
|
+ * \param psock (struct psock *) A pointer to the protosocket from which
|
|
+ * data should be read.
|
|
+ *
|
|
+ * \param c (char) The character at which to stop reading.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PSOCK_READTO(psock, c) \
|
|
+ PT_WAIT_THREAD(&((psock)->pt), psock_readto(psock, c))
|
|
+
|
|
+/**
|
|
+ * The length of the data that was previously read.
|
|
+ *
|
|
+ * This macro returns the length of the data that was previously read
|
|
+ * using PSOCK_READTO() or PSOCK_READ().
|
|
+ *
|
|
+ * \param psock (struct psock *) A pointer to the protosocket holding the data.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PSOCK_DATALEN(psock) psock_datalen(psock)
|
|
+
|
|
+u16_t psock_datalen(struct psock *psock);
|
|
+
|
|
+/**
|
|
+ * Exit the protosocket's protothread.
|
|
+ *
|
|
+ * This macro terminates the protothread of the protosocket and should
|
|
+ * almost always be used in conjunction with PSOCK_CLOSE().
|
|
+ *
|
|
+ * \sa PSOCK_CLOSE_EXIT()
|
|
+ *
|
|
+ * \param psock (struct psock *) A pointer to the protosocket.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PSOCK_EXIT(psock) PT_EXIT(&((psock)->pt))
|
|
+
|
|
+/**
|
|
+ * Close a protosocket and exit the protosocket's protothread.
|
|
+ *
|
|
+ * This macro closes a protosocket and exits the protosocket's protothread.
|
|
+ *
|
|
+ * \param psock (struct psock *) A pointer to the protosocket.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PSOCK_CLOSE_EXIT(psock) \
|
|
+ do { \
|
|
+ PSOCK_CLOSE(psock); \
|
|
+ PSOCK_EXIT(psock); \
|
|
+ } while(0)
|
|
+
|
|
+/**
|
|
+ * Declare the end of a protosocket's protothread.
|
|
+ *
|
|
+ * This macro is used for declaring that the protosocket's protothread
|
|
+ * ends. It must always be used together with a matching PSOCK_BEGIN()
|
|
+ * macro.
|
|
+ *
|
|
+ * \param psock (struct psock *) A pointer to the protosocket.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PSOCK_END(psock) PT_END(&((psock)->pt))
|
|
+
|
|
+char psock_newdata(struct psock *s);
|
|
+
|
|
+/**
|
|
+ * Check if new data has arrived on a protosocket.
|
|
+ *
|
|
+ * This macro is used in conjunction with the PSOCK_WAIT_UNTIL()
|
|
+ * macro to check if data has arrived on a protosocket.
|
|
+ *
|
|
+ * \param psock (struct psock *) A pointer to the protosocket.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PSOCK_NEWDATA(psock) psock_newdata(psock)
|
|
+
|
|
+/**
|
|
+ * Wait until a condition is true.
|
|
+ *
|
|
+ * This macro blocks the protothread until the specified condition is
|
|
+ * true. The macro PSOCK_NEWDATA() can be used to check if new data
|
|
+ * arrives when the protosocket is waiting.
|
|
+ *
|
|
+ * Typically, this macro is used as follows:
|
|
+ *
|
|
+ \code
|
|
+ PT_THREAD(thread(struct psock *s, struct timer *t))
|
|
+ {
|
|
+ PSOCK_BEGIN(s);
|
|
+
|
|
+ PSOCK_WAIT_UNTIL(s, PSOCK_NEWADATA(s) || timer_expired(t));
|
|
+
|
|
+ if(PSOCK_NEWDATA(s)) {
|
|
+ PSOCK_READTO(s, '\n');
|
|
+ } else {
|
|
+ handle_timed_out(s);
|
|
+ }
|
|
+
|
|
+ PSOCK_END(s);
|
|
+ }
|
|
+ \endcode
|
|
+ *
|
|
+ * \param psock (struct psock *) A pointer to the protosocket.
|
|
+ * \param condition The condition to wait for.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PSOCK_WAIT_UNTIL(psock, condition) \
|
|
+ PT_WAIT_UNTIL(&((psock)->pt), (condition));
|
|
+
|
|
+#define PSOCK_WAIT_THREAD(psock, condition) \
|
|
+ PT_WAIT_THREAD(&((psock)->pt), (condition))
|
|
+
|
|
+#endif /* __PSOCK_H__ */
|
|
+
|
|
+/** @} */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/pt.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/pt.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/pt.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/pt.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,323 @@
|
|
+/*
|
|
+ * Copyright (c) 2004-2005, Swedish Institute of Computer Science.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. Neither the name of the Institute nor the names of its contributors
|
|
+ * may be used to endorse or promote products derived from this software
|
|
+ * without specific prior written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
|
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
|
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
+ * SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack
|
|
+ *
|
|
+ * Author: Adam Dunkels <adam@sics.se>
|
|
+ *
|
|
+ * $Id: pt.h,v 1.2 2006/06/12 08:00:30 adam Exp $
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \addtogroup pt
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \file
|
|
+ * Protothreads implementation.
|
|
+ * \author
|
|
+ * Adam Dunkels <adam@sics.se>
|
|
+ *
|
|
+ */
|
|
+
|
|
+#ifndef __PT_H__
|
|
+#define __PT_H__
|
|
+
|
|
+#include "lc.h"
|
|
+
|
|
+struct pt {
|
|
+ lc_t lc;
|
|
+};
|
|
+
|
|
+#define PT_WAITING 0
|
|
+#define PT_EXITED 1
|
|
+#define PT_ENDED 2
|
|
+#define PT_YIELDED 3
|
|
+
|
|
+/**
|
|
+ * \name Initialization
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * Initialize a protothread.
|
|
+ *
|
|
+ * Initializes a protothread. Initialization must be done prior to
|
|
+ * starting to execute the protothread.
|
|
+ *
|
|
+ * \param pt A pointer to the protothread control structure.
|
|
+ *
|
|
+ * \sa PT_SPAWN()
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PT_INIT(pt) LC_INIT((pt)->lc)
|
|
+
|
|
+/** @} */
|
|
+
|
|
+/**
|
|
+ * \name Declaration and definition
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * Declaration of a protothread.
|
|
+ *
|
|
+ * This macro is used to declare a protothread. All protothreads must
|
|
+ * be declared with this macro.
|
|
+ *
|
|
+ * \param name_args The name and arguments of the C function
|
|
+ * implementing the protothread.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PT_THREAD(name_args) char name_args
|
|
+
|
|
+/**
|
|
+ * Declare the start of a protothread inside the C function
|
|
+ * implementing the protothread.
|
|
+ *
|
|
+ * This macro is used to declare the starting point of a
|
|
+ * protothread. It should be placed at the start of the function in
|
|
+ * which the protothread runs. All C statements above the PT_BEGIN()
|
|
+ * invokation will be executed each time the protothread is scheduled.
|
|
+ *
|
|
+ * \param pt A pointer to the protothread control structure.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PT_BEGIN(pt) { char PT_YIELD_FLAG = 1; LC_RESUME((pt)->lc)
|
|
+
|
|
+/**
|
|
+ * Declare the end of a protothread.
|
|
+ *
|
|
+ * This macro is used for declaring that a protothread ends. It must
|
|
+ * always be used together with a matching PT_BEGIN() macro.
|
|
+ *
|
|
+ * \param pt A pointer to the protothread control structure.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PT_END(pt) LC_END((pt)->lc); PT_YIELD_FLAG = 0; \
|
|
+ PT_INIT(pt); return PT_ENDED; }
|
|
+
|
|
+/** @} */
|
|
+
|
|
+/**
|
|
+ * \name Blocked wait
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * Block and wait until condition is true.
|
|
+ *
|
|
+ * This macro blocks the protothread until the specified condition is
|
|
+ * true.
|
|
+ *
|
|
+ * \param pt A pointer to the protothread control structure.
|
|
+ * \param condition The condition.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PT_WAIT_UNTIL(pt, condition) \
|
|
+ do { \
|
|
+ LC_SET((pt)->lc); \
|
|
+ if(!(condition)) { \
|
|
+ return PT_WAITING; \
|
|
+ } \
|
|
+ } while(0)
|
|
+
|
|
+/**
|
|
+ * Block and wait while condition is true.
|
|
+ *
|
|
+ * This function blocks and waits while condition is true. See
|
|
+ * PT_WAIT_UNTIL().
|
|
+ *
|
|
+ * \param pt A pointer to the protothread control structure.
|
|
+ * \param cond The condition.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PT_WAIT_WHILE(pt, cond) PT_WAIT_UNTIL((pt), !(cond))
|
|
+
|
|
+/** @} */
|
|
+
|
|
+/**
|
|
+ * \name Hierarchical protothreads
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * Block and wait until a child protothread completes.
|
|
+ *
|
|
+ * This macro schedules a child protothread. The current protothread
|
|
+ * will block until the child protothread completes.
|
|
+ *
|
|
+ * \note The child protothread must be manually initialized with the
|
|
+ * PT_INIT() function before this function is used.
|
|
+ *
|
|
+ * \param pt A pointer to the protothread control structure.
|
|
+ * \param thread The child protothread with arguments
|
|
+ *
|
|
+ * \sa PT_SPAWN()
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PT_WAIT_THREAD(pt, thread) PT_WAIT_WHILE((pt), PT_SCHEDULE(thread))
|
|
+
|
|
+/**
|
|
+ * Spawn a child protothread and wait until it exits.
|
|
+ *
|
|
+ * This macro spawns a child protothread and waits until it exits. The
|
|
+ * macro can only be used within a protothread.
|
|
+ *
|
|
+ * \param pt A pointer to the protothread control structure.
|
|
+ * \param child A pointer to the child protothread's control structure.
|
|
+ * \param thread The child protothread with arguments
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PT_SPAWN(pt, child, thread) \
|
|
+ do { \
|
|
+ PT_INIT((child)); \
|
|
+ PT_WAIT_THREAD((pt), (thread)); \
|
|
+ } while(0)
|
|
+
|
|
+/** @} */
|
|
+
|
|
+/**
|
|
+ * \name Exiting and restarting
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * Restart the protothread.
|
|
+ *
|
|
+ * This macro will block and cause the running protothread to restart
|
|
+ * its execution at the place of the PT_BEGIN() call.
|
|
+ *
|
|
+ * \param pt A pointer to the protothread control structure.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PT_RESTART(pt) \
|
|
+ do { \
|
|
+ PT_INIT(pt); \
|
|
+ return PT_WAITING; \
|
|
+ } while(0)
|
|
+
|
|
+/**
|
|
+ * Exit the protothread.
|
|
+ *
|
|
+ * This macro causes the protothread to exit. If the protothread was
|
|
+ * spawned by another protothread, the parent protothread will become
|
|
+ * unblocked and can continue to run.
|
|
+ *
|
|
+ * \param pt A pointer to the protothread control structure.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PT_EXIT(pt) \
|
|
+ do { \
|
|
+ PT_INIT(pt); \
|
|
+ return PT_EXITED; \
|
|
+ } while(0)
|
|
+
|
|
+/** @} */
|
|
+
|
|
+/**
|
|
+ * \name Calling a protothread
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * Schedule a protothread.
|
|
+ *
|
|
+ * This function shedules a protothread. The return value of the
|
|
+ * function is non-zero if the protothread is running or zero if the
|
|
+ * protothread has exited.
|
|
+ *
|
|
+ * \param f The call to the C function implementing the protothread to
|
|
+ * be scheduled
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PT_SCHEDULE(f) ((f) == PT_WAITING)
|
|
+
|
|
+/** @} */
|
|
+
|
|
+/**
|
|
+ * \name Yielding from a protothread
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * Yield from the current protothread.
|
|
+ *
|
|
+ * This function will yield the protothread, thereby allowing other
|
|
+ * processing to take place in the system.
|
|
+ *
|
|
+ * \param pt A pointer to the protothread control structure.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PT_YIELD(pt) \
|
|
+ do { \
|
|
+ PT_YIELD_FLAG = 0; \
|
|
+ LC_SET((pt)->lc); \
|
|
+ if(PT_YIELD_FLAG == 0) { \
|
|
+ return PT_YIELDED; \
|
|
+ } \
|
|
+ } while(0)
|
|
+
|
|
+/**
|
|
+ * \brief Yield from the protothread until a condition occurs.
|
|
+ * \param pt A pointer to the protothread control structure.
|
|
+ * \param cond The condition.
|
|
+ *
|
|
+ * This function will yield the protothread, until the
|
|
+ * specified condition evaluates to true.
|
|
+ *
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define PT_YIELD_UNTIL(pt, cond) \
|
|
+ do { \
|
|
+ PT_YIELD_FLAG = 0; \
|
|
+ LC_SET((pt)->lc); \
|
|
+ if((PT_YIELD_FLAG == 0) || !(cond)) { \
|
|
+ return PT_YIELDED; \
|
|
+ } \
|
|
+ } while(0)
|
|
+
|
|
+/** @} */
|
|
+
|
|
+#endif /* __PT_H__ */
|
|
+
|
|
+/** @} */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/timer.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/timer.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/timer.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/timer.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,128 @@
|
|
+/**
|
|
+ * \addtogroup timer
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \file
|
|
+ * Timer library implementation.
|
|
+ * \author
|
|
+ * Adam Dunkels <adam@sics.se>
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * Copyright (c) 2004, Swedish Institute of Computer Science.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. Neither the name of the Institute nor the names of its contributors
|
|
+ * may be used to endorse or promote products derived from this software
|
|
+ * without specific prior written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
|
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
|
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
+ * SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack
|
|
+ *
|
|
+ * Author: Adam Dunkels <adam@sics.se>
|
|
+ *
|
|
+ * $Id: timer.c,v 1.2 2006/06/12 08:00:30 adam Exp $
|
|
+ */
|
|
+
|
|
+#include "clock.h"
|
|
+#include "timer.h"
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+/**
|
|
+ * Set a timer.
|
|
+ *
|
|
+ * This function is used to set a timer for a time sometime in the
|
|
+ * future. The function timer_expired() will evaluate to true after
|
|
+ * the timer has expired.
|
|
+ *
|
|
+ * \param t A pointer to the timer
|
|
+ * \param interval The interval before the timer expires.
|
|
+ *
|
|
+ */
|
|
+void timer_set(struct timer *t, clock_time_t interval)
|
|
+{
|
|
+ t->interval = interval;
|
|
+ t->start = clock_time();
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+/**
|
|
+ * Reset the timer with the same interval.
|
|
+ *
|
|
+ * This function resets the timer with the same interval that was
|
|
+ * given to the timer_set() function. The start point of the interval
|
|
+ * is the exact time that the timer last expired. Therefore, this
|
|
+ * function will cause the timer to be stable over time, unlike the
|
|
+ * timer_rester() function.
|
|
+ *
|
|
+ * \param t A pointer to the timer.
|
|
+ *
|
|
+ * \sa timer_restart()
|
|
+ */
|
|
+void timer_reset(struct timer *t)
|
|
+{
|
|
+ t->start += t->interval;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+/**
|
|
+ * Restart the timer from the current point in time
|
|
+ *
|
|
+ * This function restarts a timer with the same interval that was
|
|
+ * given to the timer_set() function. The timer will start at the
|
|
+ * current time.
|
|
+ *
|
|
+ * \note A periodic timer will drift if this function is used to reset
|
|
+ * it. For preioric timers, use the timer_reset() function instead.
|
|
+ *
|
|
+ * \param t A pointer to the timer.
|
|
+ *
|
|
+ * \sa timer_reset()
|
|
+ */
|
|
+void timer_restart(struct timer *t)
|
|
+{
|
|
+ t->start = clock_time();
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+/**
|
|
+ * Check if a timer has expired.
|
|
+ *
|
|
+ * This function tests if a timer has expired and returns true or
|
|
+ * false depending on its status.
|
|
+ *
|
|
+ * \param t A pointer to the timer
|
|
+ *
|
|
+ * \return Non-zero if the timer has expired, zero otherwise.
|
|
+ *
|
|
+ */
|
|
+int timer_expired(struct timer *t)
|
|
+{
|
|
+ return (clock_time_t) (clock_time() - t->start) >=
|
|
+ (clock_time_t) t->interval;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+
|
|
+/** @} */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/timer.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/timer.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/timer.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/timer.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,85 @@
|
|
+/**
|
|
+ * \defgroup timer Timer library
|
|
+ *
|
|
+ * The timer library provides functions for setting, resetting and
|
|
+ * restarting timers, and for checking if a timer has expired. An
|
|
+ * application must "manually" check if its timers have expired; this
|
|
+ * is not done automatically.
|
|
+ *
|
|
+ * A timer is declared as a \c struct \c timer and all access to the
|
|
+ * timer is made by a pointer to the declared timer.
|
|
+ *
|
|
+ * \note The timer library uses the \ref clock "Clock library" to
|
|
+ * measure time. Intervals should be specified in the format used by
|
|
+ * the clock library.
|
|
+ *
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \file
|
|
+ * Timer library header file.
|
|
+ * \author
|
|
+ * Adam Dunkels <adam@sics.se>
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * Copyright (c) 2004, Swedish Institute of Computer Science.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. Neither the name of the Institute nor the names of its contributors
|
|
+ * may be used to endorse or promote products derived from this software
|
|
+ * without specific prior written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
|
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
|
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
+ * SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack
|
|
+ *
|
|
+ * Author: Adam Dunkels <adam@sics.se>
|
|
+ *
|
|
+ * $Id: timer.h,v 1.3 2006/06/11 21:46:39 adam Exp $
|
|
+ */
|
|
+#ifndef __TIMER_H__
|
|
+#define __TIMER_H__
|
|
+
|
|
+#include "clock.h"
|
|
+
|
|
+/**
|
|
+ * A timer.
|
|
+ *
|
|
+ * This structure is used for declaring a timer. The timer must be set
|
|
+ * with timer_set() before it can be used.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+struct timer {
|
|
+ clock_time_t start;
|
|
+ clock_time_t interval;
|
|
+};
|
|
+
|
|
+void timer_set(struct timer *t, clock_time_t interval);
|
|
+void timer_reset(struct timer *t);
|
|
+void timer_restart(struct timer *t);
|
|
+int timer_expired(struct timer *t);
|
|
+
|
|
+#endif /* __TIMER_H__ */
|
|
+
|
|
+/** @} */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/uip_arch.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/uip_arch.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/uip_arch.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/uip_arch.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,138 @@
|
|
+/**
|
|
+ * \addtogroup uip
|
|
+ * {@
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \defgroup uiparch Architecture specific uIP functions
|
|
+ * @{
|
|
+ *
|
|
+ * The functions in the architecture specific module implement the IP
|
|
+ * check sum and 32-bit additions.
|
|
+ *
|
|
+ * The IP checksum calculation is the most computationally expensive
|
|
+ * operation in the TCP/IP stack and it therefore pays off to
|
|
+ * implement this in efficient assembler. The purpose of the uip-arch
|
|
+ * module is to let the checksum functions to be implemented in
|
|
+ * architecture specific assembler.
|
|
+ *
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \file
|
|
+ * Declarations of architecture specific functions.
|
|
+ * \author Adam Dunkels <adam@dunkels.com>
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * Copyright (c) 2001, Adam Dunkels.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack.
|
|
+ *
|
|
+ * $Id: uip_arch.h,v 1.2 2006/06/07 09:15:19 adam Exp $
|
|
+ *
|
|
+ */
|
|
+
|
|
+#ifndef __UIP_ARCH_H__
|
|
+#define __UIP_ARCH_H__
|
|
+
|
|
+#include "uip.h"
|
|
+
|
|
+/**
|
|
+ * Carry out a 32-bit addition.
|
|
+ *
|
|
+ * Because not all architectures for which uIP is intended has native
|
|
+ * 32-bit arithmetic, uIP uses an external C function for doing the
|
|
+ * required 32-bit additions in the TCP protocol processing. This
|
|
+ * function should add the two arguments and place the result in the
|
|
+ * global variable uip_acc32.
|
|
+ *
|
|
+ * \note The 32-bit integer pointed to by the op32 parameter and the
|
|
+ * result in the uip_acc32 variable are in network byte order (big
|
|
+ * endian).
|
|
+ *
|
|
+ * \param op32 A pointer to a 4-byte array representing a 32-bit
|
|
+ * integer in network byte order (big endian).
|
|
+ *
|
|
+ * \param op16 A 16-bit integer in host byte order.
|
|
+ */
|
|
+void uip_add32(u8_t * op32, u16_t op16, u8_t * uip_add32);
|
|
+
|
|
+/**
|
|
+ * Calculate the Internet checksum over a buffer.
|
|
+ *
|
|
+ * The Internet checksum is the one's complement of the one's
|
|
+ * complement sum of all 16-bit words in the buffer.
|
|
+ *
|
|
+ * See RFC1071.
|
|
+ *
|
|
+ * \note This function is not called in the current version of uIP,
|
|
+ * but future versions might make use of it.
|
|
+ *
|
|
+ * \param buf A pointer to the buffer over which the checksum is to be
|
|
+ * computed.
|
|
+ *
|
|
+ * \param len The length of the buffer over which the checksum is to
|
|
+ * be computed.
|
|
+ *
|
|
+ * \return The Internet checksum of the buffer.
|
|
+ */
|
|
+u16_t uip_chksum(u16_t * buf, u16_t len);
|
|
+
|
|
+/**
|
|
+ * Calculate the IP header checksum of the packet header in uip_buf.
|
|
+ *
|
|
+ * The IP header checksum is the Internet checksum of the 20 bytes of
|
|
+ * the IP header.
|
|
+ *
|
|
+ * \return The IP header checksum of the IP header in the uip_buf
|
|
+ * buffer.
|
|
+ */
|
|
+u16_t uip_ipchksum(struct uip_stack *ustack);
|
|
+
|
|
+/**
|
|
+ * Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
|
|
+ *
|
|
+ * The TCP checksum is the Internet checksum of data contents of the
|
|
+ * TCP segment, and a pseudo-header as defined in RFC793.
|
|
+ *
|
|
+ * \note The uip_appdata pointer that points to the packet data may
|
|
+ * point anywhere in memory, so it is not possible to simply calculate
|
|
+ * the Internet checksum of the contents of the uip_buf buffer.
|
|
+ *
|
|
+ * \return The TCP checksum of the TCP segment in uip_buf and pointed
|
|
+ * to by uip_appdata.
|
|
+ */
|
|
+u16_t uip_tcpchksum(struct uip_stack *ustack);
|
|
+
|
|
+u16_t uip_udpchksum(struct uip_stack *ustack);
|
|
+
|
|
+/** @} */
|
|
+/** @} */
|
|
+
|
|
+#endif /* __UIP_ARCH_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/uip_arp.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/uip_arp.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/uip_arp.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/uip_arp.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,485 @@
|
|
+#include <errno.h>
|
|
+//#include <net/ethernet.h>
|
|
+
|
|
+#include <netinet/in.h>
|
|
+#include <arpa/inet.h>
|
|
+
|
|
+#include "logger.h"
|
|
+#include "packet.h"
|
|
+
|
|
+/**
|
|
+ * \addtogroup uip
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \defgroup uiparp uIP Address Resolution Protocol
|
|
+ * @{
|
|
+ *
|
|
+ * The Address Resolution Protocol ARP is used for mapping between IP
|
|
+ * addresses and link level addresses such as the Ethernet MAC
|
|
+ * addresses. ARP uses broadcast queries to ask for the link level
|
|
+ * address of a known IP address and the host which is configured with
|
|
+ * the IP address for which the query was meant, will respond with its
|
|
+ * link level address.
|
|
+ *
|
|
+ * \note This ARP implementation only supports Ethernet.
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \file
|
|
+ * Implementation of the ARP Address Resolution Protocol.
|
|
+ * \author Adam Dunkels <adam@dunkels.com>
|
|
+ *
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * Copyright (c) 2001-2003, Adam Dunkels.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack.
|
|
+ *
|
|
+ * $Id: uip_arp.c,v 1.8 2006/06/02 23:36:21 adam Exp $
|
|
+ *
|
|
+ */
|
|
+
|
|
+#include "uip_arp.h"
|
|
+#include "uip_eth.h"
|
|
+
|
|
+#include <pthread.h>
|
|
+#include <string.h>
|
|
+
|
|
+static const struct uip_eth_addr broadcast_ethaddr =
|
|
+ { {0xff, 0xff, 0xff, 0xff, 0xff, 0xff} };
|
|
+static const u16_t broadcast_ipaddr[2] = { 0xffff, 0xffff };
|
|
+
|
|
+pthread_mutex_t arp_table_mutex = PTHREAD_MUTEX_INITIALIZER;
|
|
+static struct arp_entry arp_table[UIP_ARPTAB_SIZE];
|
|
+
|
|
+static u8_t arptime;
|
|
+
|
|
+/**
|
|
+ * Initialize the ARP module.
|
|
+ *
|
|
+ */
|
|
+/*-----------------------------------------------------------------------------------*/
|
|
+void uip_arp_init(void)
|
|
+{
|
|
+ u8_t i;
|
|
+ for (i = 0; i < UIP_ARPTAB_SIZE; ++i) {
|
|
+ memset(&arp_table[i], 0, sizeof(arp_table[i]));
|
|
+ }
|
|
+
|
|
+ pthread_mutex_init(&arp_table_mutex, NULL);
|
|
+}
|
|
+
|
|
+/*-----------------------------------------------------------------------------------*/
|
|
+/**
|
|
+ * Periodic ARP processing function.
|
|
+ *
|
|
+ * This function performs periodic timer processing in the ARP module
|
|
+ * and should be called at regular intervals. The recommended interval
|
|
+ * is 10 seconds between the calls.
|
|
+ *
|
|
+ */
|
|
+/*-----------------------------------------------------------------------------------*/
|
|
+void uip_arp_timer(void)
|
|
+{
|
|
+ u8_t i;
|
|
+ struct arp_entry *tabptr;
|
|
+
|
|
+ ++arptime;
|
|
+ for (i = 0; i < UIP_ARPTAB_SIZE; ++i) {
|
|
+ tabptr = &arp_table[i];
|
|
+ if ((tabptr->ipaddr[0] | tabptr->ipaddr[1]) != 0 &&
|
|
+ arptime - tabptr->time >= UIP_ARP_MAXAGE) {
|
|
+ memset(tabptr->ipaddr, 0, 4);
|
|
+ }
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+/*-----------------------------------------------------------------------------------*/
|
|
+static void uip_arp_update(u16_t * ipaddr, struct uip_eth_addr *ethaddr)
|
|
+{
|
|
+ u8_t i;
|
|
+ struct arp_entry *tabptr;
|
|
+
|
|
+ pthread_mutex_lock(&arp_table_mutex);
|
|
+ /* Walk through the ARP mapping table and try to find an entry to
|
|
+ update. If none is found, the IP -> MAC address mapping is
|
|
+ inserted in the ARP table. */
|
|
+ for (i = 0; i < UIP_ARPTAB_SIZE; ++i) {
|
|
+
|
|
+ tabptr = &arp_table[i];
|
|
+ /* Only check those entries that are actually in use. */
|
|
+ if (tabptr->ipaddr[0] != 0 && tabptr->ipaddr[1] != 0) {
|
|
+
|
|
+ /* Check if the source IP address of the incoming packet
|
|
+ matches the IP address in this ARP table entry. */
|
|
+ if (ipaddr[0] == tabptr->ipaddr[0] &&
|
|
+ ipaddr[1] == tabptr->ipaddr[1]) {
|
|
+
|
|
+ tabptr->time = arptime;
|
|
+
|
|
+ pthread_mutex_unlock(&arp_table_mutex);
|
|
+ return;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /* If we get here, no existing ARP table entry was found, so we
|
|
+ create one. */
|
|
+
|
|
+ /* First, we try to find an unused entry in the ARP table. */
|
|
+ for (i = 0; i < UIP_ARPTAB_SIZE; ++i) {
|
|
+ tabptr = &arp_table[i];
|
|
+ if (tabptr->ipaddr[0] == 0 && tabptr->ipaddr[1] == 0) {
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /* If no unused entry is found, we try to find the oldest entry and
|
|
+ throw it away. */
|
|
+ if (i == UIP_ARPTAB_SIZE) {
|
|
+ u8_t c;
|
|
+ u8_t tmpage = 0;
|
|
+ c = 0;
|
|
+ for (i = 0; i < UIP_ARPTAB_SIZE; ++i) {
|
|
+ tabptr = &arp_table[i];
|
|
+ if (arptime - tabptr->time > tmpage) {
|
|
+ tmpage = arptime - tabptr->time;
|
|
+ c = i;
|
|
+ }
|
|
+ }
|
|
+ i = c;
|
|
+ tabptr = &arp_table[i];
|
|
+ }
|
|
+
|
|
+ /* Now, i is the ARP table entry which we will fill with the new
|
|
+ information. */
|
|
+ memcpy(tabptr->ipaddr, ipaddr, 4);
|
|
+ memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6);
|
|
+ tabptr->time = arptime;
|
|
+
|
|
+ pthread_mutex_unlock(&arp_table_mutex);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * ARP processing for incoming ARP packets.
|
|
+ *
|
|
+ * This function should be called by the device driver when an ARP
|
|
+ * packet has been received. The function will act differently
|
|
+ * depending on the ARP packet type: if it is a reply for a request
|
|
+ * that we previously sent out, the ARP cache will be filled in with
|
|
+ * the values from the ARP reply. If the incoming ARP packet is an ARP
|
|
+ * request for our IP address, an ARP reply packet is created and put
|
|
+ * into the uip_buf[] buffer.
|
|
+ *
|
|
+ * When the function returns, the value of the global variable uip_len
|
|
+ * indicates whether the device driver should send out a packet or
|
|
+ * not. If uip_len is zero, no packet should be sent. If uip_len is
|
|
+ * non-zero, it contains the length of the outbound packet that is
|
|
+ * present in the uip_buf[] buffer.
|
|
+ *
|
|
+ * This function expects an ARP packet with a prepended Ethernet
|
|
+ * header in the uip_buf[] buffer, and the length of the packet in the
|
|
+ * global variable uip_len.
|
|
+ */
|
|
+void uip_arp_ipin(struct uip_stack *ustack, packet_t * pkt)
|
|
+{
|
|
+ struct ip_hdr *ip;
|
|
+ struct uip_eth_hdr *eth;
|
|
+
|
|
+ eth = (struct uip_eth_hdr *)pkt->data_link_layer;
|
|
+ ip = (struct ip_hdr *)pkt->network_layer;
|
|
+
|
|
+ if (uip_ip4addr_cmp(ip->destipaddr, ustack->hostaddr)) {
|
|
+ /* First, we register the one who made the request in our ARP
|
|
+ table, since it is likely that we will do more communication
|
|
+ with this host in the future. */
|
|
+ uip_arp_update(ip->srcipaddr, ð->src);
|
|
+ }
|
|
+}
|
|
+
|
|
+void
|
|
+uip_arp_arpin(nic_interface_t * nic_iface,
|
|
+ struct uip_stack *ustack, packet_t * pkt)
|
|
+{
|
|
+ struct arp_hdr *arp;
|
|
+ struct uip_eth_hdr *eth;
|
|
+
|
|
+ if (pkt->buf_size < sizeof(struct arp_hdr)) {
|
|
+ pkt->buf_size = 0;
|
|
+ return;
|
|
+ }
|
|
+ pkt->buf_size = 0;
|
|
+
|
|
+ eth = (struct uip_eth_hdr *)pkt->data_link_layer;
|
|
+ arp = (struct arp_hdr *)pkt->network_layer;
|
|
+
|
|
+ switch (arp->opcode) {
|
|
+ case const_htons(ARP_REQUEST):
|
|
+ /* ARP request. If it asked for our address, we send out a
|
|
+ reply. */
|
|
+ if (uip_ip4addr_cmp(arp->dipaddr, ustack->hostaddr)) {
|
|
+ /* First, we register the one who made the request in
|
|
+ our ARP table, since it is likely that we will do
|
|
+ more communication with this host in the future. */
|
|
+ uip_arp_update(arp->sipaddr, &arp->shwaddr);
|
|
+
|
|
+ /* The reply opcode is 2. */
|
|
+ arp->opcode = htons(2);
|
|
+
|
|
+ memcpy(arp->dhwaddr.addr, arp->shwaddr.addr, 6);
|
|
+ memcpy(arp->shwaddr.addr, ustack->uip_ethaddr.addr, 6);
|
|
+ memcpy(eth->src.addr, ustack->uip_ethaddr.addr, 6);
|
|
+ memcpy(eth->dest.addr, arp->dhwaddr.addr, 6);
|
|
+
|
|
+ arp->dipaddr[0] = arp->sipaddr[0];
|
|
+ arp->dipaddr[1] = arp->sipaddr[1];
|
|
+ arp->sipaddr[0] = ustack->hostaddr[0];
|
|
+ arp->sipaddr[1] = ustack->hostaddr[1];
|
|
+
|
|
+ if (nic_iface->vlan_id == 0)
|
|
+ eth->type = htons(UIP_ETHTYPE_ARP);
|
|
+ else
|
|
+ eth->type = htons(UIP_ETHTYPE_8021Q);
|
|
+ pkt->buf_size = sizeof(*arp) + sizeof(*eth);
|
|
+ }
|
|
+ break;
|
|
+ case const_htons(ARP_REPLY):
|
|
+ uip_arp_update(arp->sipaddr, &arp->shwaddr);
|
|
+ break;
|
|
+ default:
|
|
+ LOG_WARN("Unknown ARP opcode: %d", ntohs(arp->opcode));
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ return;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * Prepend Ethernet header to an outbound IP packet and see if we need
|
|
+ * to send out an ARP request.
|
|
+ *
|
|
+ * This function should be called before sending out an IP packet. The
|
|
+ * function checks the destination IP address of the IP packet to see
|
|
+ * what Ethernet MAC address that should be used as a destination MAC
|
|
+ * address on the Ethernet.
|
|
+ *
|
|
+ * If the destination IP address is in the local network (determined
|
|
+ * by logical ANDing of netmask and our IP address), the function
|
|
+ * checks the ARP cache to see if an entry for the destination IP
|
|
+ * address is found. If so, an Ethernet header is prepended and the
|
|
+ * function returns. If no ARP cache entry is found for the
|
|
+ * destination IP address, the packet in the uip_buf[] is replaced by
|
|
+ * an ARP request packet for the IP address. The IP packet is dropped
|
|
+ * and it is assumed that they higher level protocols (e.g., TCP)
|
|
+ * eventually will retransmit the dropped packet.
|
|
+ *
|
|
+ * If the destination IP address is not on the local network, the IP
|
|
+ * address of the default router is used instead.
|
|
+ *
|
|
+ * When the function returns, a packet is present in the uip_buf[]
|
|
+ * buffer, and the length of the packet is in the global variable
|
|
+ * uip_len.
|
|
+ */
|
|
+
|
|
+dest_ipv4_addr_t
|
|
+uip_determine_dest_ipv4_addr(struct uip_stack * ustack, u16_t * ipaddr)
|
|
+{
|
|
+ struct arp_hdr *arp;
|
|
+ struct uip_eth_hdr *eth;
|
|
+ struct ip_hdr *ip_buf;
|
|
+
|
|
+ arp = (struct arp_hdr *)ustack->network_layer;
|
|
+ eth = (struct uip_eth_hdr *)ustack->data_link_layer;
|
|
+ ip_buf = (struct ip_hdr *)ustack->network_layer;
|
|
+
|
|
+ /* Find the destination IP address in the ARP table and construct
|
|
+ the Ethernet header. If the destination IP addres isn't on the
|
|
+ local network, we use the default router's IP address instead.
|
|
+
|
|
+ If not ARP table entry is found, we overwrite the original IP
|
|
+ packet with an ARP request for the IP address. */
|
|
+
|
|
+ /* First check if destination is a local broadcast. */
|
|
+ if (uip_ip4addr_cmp(ip_buf->destipaddr, broadcast_ipaddr)) {
|
|
+ memcpy(ð->dest, broadcast_ethaddr.addr, 6);
|
|
+
|
|
+ return LOCAL_BROADCAST;
|
|
+ } else {
|
|
+ /* Check if the destination address is on the local network. */
|
|
+ if (!uip_ip4addr_maskcmp(ip_buf->destipaddr,
|
|
+ ustack->hostaddr, ustack->netmask)) {
|
|
+ /* Destination address was not on the local network,
|
|
+ so we need to use the default router's IP address
|
|
+ instead of the destination address when determining
|
|
+ the MAC address. */
|
|
+ uip_ip4addr_copy(ipaddr, ustack->default_route_addr);
|
|
+ } else {
|
|
+ /* Else, we use the destination IP address. */
|
|
+ uip_ip4addr_copy(ipaddr, ip_buf->destipaddr);
|
|
+ }
|
|
+
|
|
+ return NONLOCAL_BROADCAST;
|
|
+ }
|
|
+}
|
|
+
|
|
+arp_out_t is_in_arp_table(u16_t * ipaddr, struct arp_entry ** tabptr)
|
|
+{
|
|
+ u8_t i;
|
|
+
|
|
+ pthread_mutex_lock(&arp_table_mutex);
|
|
+
|
|
+ for (i = 0; i < UIP_ARPTAB_SIZE; ++i) {
|
|
+ if (uip_ip4addr_cmp(ipaddr, arp_table[i].ipaddr)) {
|
|
+ *tabptr = &arp_table[i];
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ pthread_mutex_unlock(&arp_table_mutex);
|
|
+
|
|
+ if (i == UIP_ARPTAB_SIZE) {
|
|
+ return NOT_IN_ARP_TABLE;
|
|
+ } else {
|
|
+ return IS_IN_ARP_TABLE;
|
|
+ }
|
|
+}
|
|
+
|
|
+void uip_build_arp_request(struct uip_stack *ustack, u16_t * ipaddr)
|
|
+{
|
|
+ struct arp_hdr *arp;
|
|
+ struct uip_eth_hdr *eth;
|
|
+
|
|
+ arp = (struct arp_hdr *)ustack->network_layer;
|
|
+ eth = (struct uip_eth_hdr *)ustack->data_link_layer;
|
|
+
|
|
+ /* The destination address was not in our ARP table, so we
|
|
+ overwrite the IP packet with an ARP request. */
|
|
+
|
|
+ memset(eth->dest.addr, 0xff, 6);
|
|
+ memset(arp->dhwaddr.addr, 0x00, 6);
|
|
+ memcpy(eth->src.addr, ustack->uip_ethaddr.addr, 6);
|
|
+ memcpy(arp->shwaddr.addr, ustack->uip_ethaddr.addr, 6);
|
|
+
|
|
+ uip_ip4addr_copy(arp->dipaddr, ipaddr);
|
|
+ uip_ip4addr_copy(arp->sipaddr, ustack->hostaddr);
|
|
+ arp->opcode = const_htons(ARP_REQUEST); /* ARP request. */
|
|
+ arp->hwtype = const_htons(ARP_HWTYPE_ETH);
|
|
+ arp->protocol = const_htons(UIP_ETHTYPE_IPv4);
|
|
+ arp->hwlen = 6;
|
|
+ arp->protolen = 4;
|
|
+ eth->type = const_htons(UIP_ETHTYPE_ARP);
|
|
+
|
|
+ ustack->uip_appdata = &ustack->uip_buf[UIP_TCP_IPv4_HLEN + UIP_LLH_LEN];
|
|
+
|
|
+ ustack->uip_len = sizeof(*arp) + sizeof(*eth);
|
|
+}
|
|
+
|
|
+void
|
|
+uip_build_eth_header(struct uip_stack *ustack,
|
|
+ u16_t * ipaddr,
|
|
+ struct arp_entry *tabptr,
|
|
+ struct packet *pkt, u16_t vlan_id)
|
|
+{
|
|
+ struct uip_ipv4_hdr *ip_buf;
|
|
+ struct uip_eth_hdr *eth;
|
|
+ struct uip_vlan_eth_hdr *eth_vlan;
|
|
+
|
|
+ ip_buf = (struct uip_ipv4_hdr *)ustack->network_layer;
|
|
+ eth = (struct uip_eth_hdr *)ustack->data_link_layer;
|
|
+ eth_vlan = (struct uip_vlan_eth_hdr *)ustack->data_link_layer;
|
|
+
|
|
+ /* First check if destination is a local broadcast. */
|
|
+ if (uip_ip4addr_cmp(ip_buf->destipaddr, broadcast_ipaddr)) {
|
|
+ memcpy(eth->dest.addr, broadcast_ethaddr.addr, 6);
|
|
+ } else {
|
|
+ /* Build an ethernet header. */
|
|
+ memcpy(eth->dest.addr, tabptr->ethaddr.addr, 6);
|
|
+ }
|
|
+ memcpy(eth->src.addr, ustack->uip_ethaddr.addr, 6);
|
|
+
|
|
+ if (vlan_id == 0) {
|
|
+ eth->type = htons(UIP_ETHTYPE_IPv4);
|
|
+
|
|
+ ustack->uip_len += sizeof(struct uip_eth_hdr);
|
|
+ pkt->buf_size += sizeof(struct uip_eth_hdr);
|
|
+ } else {
|
|
+ eth_vlan->tpid = htons(UIP_ETHTYPE_8021Q);
|
|
+ eth_vlan->vid = htons(vlan_id);
|
|
+ eth_vlan->type = htons(UIP_ETHTYPE_IPv4);
|
|
+
|
|
+ ustack->uip_len += sizeof(struct uip_vlan_eth_hdr);
|
|
+ pkt->buf_size += sizeof(struct uip_vlan_eth_hdr);
|
|
+ }
|
|
+}
|
|
+
|
|
+static struct arp_entry *uip_get_arp_entry(int index)
|
|
+{
|
|
+ return &arp_table[index];
|
|
+}
|
|
+
|
|
+int uip_lookup_arp_entry(uint32_t ip_addr, uint8_t * mac_addr)
|
|
+{
|
|
+ int i;
|
|
+ int rc = -EINVAL;
|
|
+
|
|
+ pthread_mutex_lock(&arp_table_mutex);
|
|
+
|
|
+ for (i = 0; i < UIP_ARPTAB_SIZE; ++i) {
|
|
+ struct arp_entry *entry = uip_get_arp_entry(i);
|
|
+
|
|
+ if (((entry->ipaddr[1] << 16) == (ip_addr & 0xffff0000)) &&
|
|
+ ((entry->ipaddr[0]) == (ip_addr & 0x0000ffff))) {
|
|
+ struct in_addr addr;
|
|
+ char *addr_str;
|
|
+
|
|
+ addr.s_addr = ip_addr;
|
|
+ addr_str = inet_ntoa(addr);
|
|
+
|
|
+ memcpy(mac_addr, entry->ethaddr.addr, 6);
|
|
+
|
|
+ LOG_INFO("Found %s at %02x:%02x:%02x:%02x:%02x:%02x",
|
|
+ addr_str,
|
|
+ mac_addr[0], mac_addr[1], mac_addr[2],
|
|
+ mac_addr[3], mac_addr[4], mac_addr[5]);
|
|
+ rc = 0;
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ pthread_mutex_unlock(&arp_table_mutex);
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/*-----------------------------------------------------------------------------------*/
|
|
+
|
|
+/** @} */
|
|
+/** @} */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/uip_arp.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/uip_arp.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/uip_arp.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/uip_arp.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,196 @@
|
|
+/**
|
|
+ * \addtogroup uip
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \addtogroup uiparp
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \file
|
|
+ * Macros and definitions for the ARP module.
|
|
+ * \author Adam Dunkels <adam@dunkels.com>
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * Copyright (c) 2001-2003, Adam Dunkels.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack.
|
|
+ *
|
|
+ * $Id: uip_arp.h,v 1.5 2006/06/11 21:46:39 adam Exp $
|
|
+ *
|
|
+ */
|
|
+
|
|
+#ifndef __UIP_ARP_H__
|
|
+#define __UIP_ARP_H__
|
|
+
|
|
+#include "packet.h"
|
|
+#include "uip.h"
|
|
+#include "uip_eth.h"
|
|
+
|
|
+#define ARP_REQUEST 1
|
|
+#define ARP_REPLY 2
|
|
+
|
|
+#define ARP_HWTYPE_ETH 1
|
|
+
|
|
+struct __attribute__ ((__packed__)) arp_hdr {
|
|
+ u16_t hwtype;
|
|
+ u16_t protocol;
|
|
+ u8_t hwlen;
|
|
+ u8_t protolen;
|
|
+ u16_t opcode;
|
|
+ struct uip_eth_addr shwaddr;
|
|
+ u16_t sipaddr[2];
|
|
+ struct uip_eth_addr dhwaddr;
|
|
+ u16_t dipaddr[2];
|
|
+};
|
|
+
|
|
+struct __attribute__ ((__packed__)) ip_hdr {
|
|
+ /* IP header. */
|
|
+ u8_t vhl, tos, len[2], ipid[2], ipoffset[2], ttl, proto;
|
|
+ u16_t ipchksum;
|
|
+ u16_t srcipaddr[2], destipaddr[2];
|
|
+};
|
|
+
|
|
+struct __attribute__ ((__packed__)) ethip_hdr {
|
|
+ struct uip_eth_hdr ethhdr;
|
|
+ /* IP header. */
|
|
+ u8_t vhl, tos, len[2], ipid[2], ipoffset[2], ttl, proto;
|
|
+ u16_t ipchksum;
|
|
+ u16_t srcipaddr[2], destipaddr[2];
|
|
+};
|
|
+
|
|
+struct arp_entry {
|
|
+ u16_t ipaddr[2];
|
|
+ struct uip_eth_addr ethaddr;
|
|
+ u8_t time;
|
|
+};
|
|
+
|
|
+/* The uip_arp_init() function must be called before any of the other
|
|
+ ARP functions. */
|
|
+void uip_arp_init(void);
|
|
+
|
|
+/* The uip_arp_ipin() function should be called whenever an IP packet
|
|
+ arrives from the Ethernet. This function refreshes the ARP table or
|
|
+ inserts a new mapping if none exists. The function assumes that an
|
|
+ IP packet with an Ethernet header is present in the uip_buf buffer
|
|
+ and that the length of the packet is in the uip_len variable. */
|
|
+/*void uip_arp_ipin(void);*/
|
|
+//#define uip_arp_ipin()
|
|
+void uip_arp_ipin(struct uip_stack *ustack, struct packet *pkt);
|
|
+
|
|
+/* The uip_arp_arpin() should be called when an ARP packet is received
|
|
+ by the Ethernet driver. This function also assumes that the
|
|
+ Ethernet frame is present in the uip_buf buffer. When the
|
|
+ uip_arp_arpin() function returns, the contents of the uip_buf
|
|
+ buffer should be sent out on the Ethernet if the uip_len variable
|
|
+ is > 0. */
|
|
+void uip_arp_arpin(nic_interface_t * nic_iface,
|
|
+ struct uip_stack *ustack, struct packet *pkt);
|
|
+
|
|
+typedef enum {
|
|
+ ARP_SENT = 1,
|
|
+ ETH_HEADER_APPEDEND = 2,
|
|
+} arp_out_t;
|
|
+
|
|
+typedef enum {
|
|
+ LOCAL_BROADCAST = 1,
|
|
+ NONLOCAL_BROADCAST = 2,
|
|
+} dest_ipv4_addr_t;
|
|
+
|
|
+typedef enum {
|
|
+ IS_IN_ARP_TABLE = 1,
|
|
+ NOT_IN_ARP_TABLE = 2,
|
|
+} arp_table_query_t;
|
|
+
|
|
+dest_ipv4_addr_t
|
|
+uip_determine_dest_ipv4_addr(struct uip_stack *ustack, u16_t * ipaddr);
|
|
+arp_out_t is_in_arp_table(u16_t * ipaddr, struct arp_entry **tabptr);
|
|
+
|
|
+void uip_build_arp_request(struct uip_stack *ustack, u16_t * ipaddr);
|
|
+
|
|
+void
|
|
+uip_build_eth_header(struct uip_stack *ustack,
|
|
+ u16_t * ipaddr,
|
|
+ struct arp_entry *tabptr,
|
|
+ struct packet *pkt, u16_t vlan_id);
|
|
+
|
|
+/* The uip_arp_out() function should be called when an IP packet
|
|
+ should be sent out on the Ethernet. This function creates an
|
|
+ Ethernet header before the IP header in the uip_buf buffer. The
|
|
+ Ethernet header will have the correct Ethernet MAC destination
|
|
+ address filled in if an ARP table entry for the destination IP
|
|
+ address (or the IP address of the default router) is present. If no
|
|
+ such table entry is found, the IP packet is overwritten with an ARP
|
|
+ request and we rely on TCP to retransmit the packet that was
|
|
+ overwritten. In any case, the uip_len variable holds the length of
|
|
+ the Ethernet frame that should be transmitted. */
|
|
+arp_out_t uip_arp_out(struct uip_stack *ustack);
|
|
+
|
|
+/* The uip_arp_timer() function should be called every ten seconds. It
|
|
+ is responsible for flushing old entries in the ARP table. */
|
|
+void uip_arp_timer(void);
|
|
+
|
|
+int uip_lookup_arp_entry(uint32_t ip_addr, uint8_t * mac_addr);
|
|
+
|
|
+/** @} */
|
|
+
|
|
+/**
|
|
+ * \addtogroup uipconffunc
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * Specifiy the Ethernet MAC address.
|
|
+ *
|
|
+ * The ARP code needs to know the MAC address of the Ethernet card in
|
|
+ * order to be able to respond to ARP queries and to generate working
|
|
+ * Ethernet headers.
|
|
+ *
|
|
+ * \note This macro only specifies the Ethernet MAC address to the ARP
|
|
+ * code. It cannot be used to change the MAC address of the Ethernet
|
|
+ * card.
|
|
+ *
|
|
+ * \param eaddr A pointer to a struct uip_eth_addr containing the
|
|
+ * Ethernet MAC address of the Ethernet card.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_setethaddr(eaddr) do {uip_ethaddr.addr[0] = eaddr.addr[0]; \
|
|
+ uip_ethaddr.addr[1] = eaddr.addr[1];\
|
|
+ uip_ethaddr.addr[2] = eaddr.addr[2];\
|
|
+ uip_ethaddr.addr[3] = eaddr.addr[3];\
|
|
+ uip_ethaddr.addr[4] = eaddr.addr[4];\
|
|
+ uip_ethaddr.addr[5] = eaddr.addr[5];} while(0)
|
|
+
|
|
+/** @} */
|
|
+/** @} */
|
|
+
|
|
+#endif /* __UIP_ARP_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/uip.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/uip.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/uip.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/uip.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,2450 @@
|
|
+#include <netinet/in.h>
|
|
+#include <netinet/ip6.h>
|
|
+#include <netinet/icmp6.h>
|
|
+#include <sys/types.h>
|
|
+#include <arpa/inet.h>
|
|
+#include "uip.h"
|
|
+#include "dhcpc.h"
|
|
+#include "ipv6_ndpc.h"
|
|
+#include "brcm_iscsi.h"
|
|
+
|
|
+/**
|
|
+ * \defgroup uip The uIP TCP/IP stack
|
|
+ * @{
|
|
+ *
|
|
+ * uIP is an implementation of the TCP/IP protocol stack intended for
|
|
+ * small 8-bit and 16-bit microcontrollers.
|
|
+ *
|
|
+ * uIP provides the necessary protocols for Internet communication,
|
|
+ * with a very small code footprint and RAM requirements - the uIP
|
|
+ * code size is on the order of a few kilobytes and RAM usage is on
|
|
+ * the order of a few hundred bytes.
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \file
|
|
+ * The uIP TCP/IP stack code.
|
|
+ * \author Adam Dunkels <adam@dunkels.com>
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * Copyright (c) 2001-2003, Adam Dunkels.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack.
|
|
+ *
|
|
+ * $Id: uip.c,v 1.65 2006/06/11 21:46:39 adam Exp $
|
|
+ *
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * uIP is a small implementation of the IP, UDP and TCP protocols (as
|
|
+ * well as some basic ICMP stuff). The implementation couples the IP,
|
|
+ * UDP, TCP and the application layers very tightly. To keep the size
|
|
+ * of the compiled code down, this code frequently uses the goto
|
|
+ * statement. While it would be possible to break the uip_process()
|
|
+ * function into many smaller functions, this would increase the code
|
|
+ * size because of the overhead of parameter passing and the fact that
|
|
+ * the optimier would not be as efficient.
|
|
+ *
|
|
+ * The principle is that we have a small buffer, called the uip_buf,
|
|
+ * in which the device driver puts an incoming packet. The TCP/IP
|
|
+ * stack parses the headers in the packet, and calls the
|
|
+ * application. If the remote host has sent data to the application,
|
|
+ * this data is present in the uip_buf and the application read the
|
|
+ * data from there. It is up to the application to put this data into
|
|
+ * a byte stream if needed. The application will not be fed with data
|
|
+ * that is out of sequence.
|
|
+ *
|
|
+ * If the application whishes to send data to the peer, it should put
|
|
+ * its data into the uip_buf. The uip_appdata pointer points to the
|
|
+ * first available byte. The TCP/IP stack will calculate the
|
|
+ * checksums, and fill in the necessary header fields and finally send
|
|
+ * the packet back to the peer.
|
|
+*/
|
|
+
|
|
+#include "logger.h"
|
|
+
|
|
+#include "uip.h"
|
|
+#include "uipopt.h"
|
|
+#include "uip_arch.h"
|
|
+#include "uip_eth.h"
|
|
+#include "uip-neighbor.h"
|
|
+
|
|
+#include <string.h>
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Constants
|
|
+ ******************************************************************************/
|
|
+#define PFX "uip "
|
|
+
|
|
+static const uip_ip6addr_t all_ones_addr6 =
|
|
+ { 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff };
|
|
+static const uip_ip4addr_t all_ones_addr4 = { 0xffff, 0xffff };
|
|
+
|
|
+const uip_ip6addr_t all_zeroes_addr6 =
|
|
+ { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 };
|
|
+const uip_ip4addr_t all_zeroes_addr4 = { 0x0000, 0x0000 };
|
|
+
|
|
+const uint8_t mutlicast_ipv6_prefix[16] =
|
|
+ { 0xfc, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
|
+};
|
|
+
|
|
+const uint8_t link_local_addres_prefix[16] =
|
|
+ { 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
|
+};
|
|
+const uint32_t link_local_address_prefix_length = 10;
|
|
+
|
|
+/* Structures and definitions. */
|
|
+#define TCP_FIN 0x01
|
|
+#define TCP_SYN 0x02
|
|
+#define TCP_RST 0x04
|
|
+#define TCP_PSH 0x08
|
|
+#define TCP_ACK 0x10
|
|
+#define TCP_URG 0x20
|
|
+#define TCP_CTL 0x3f
|
|
+
|
|
+#define TCP_OPT_END 0 /* End of TCP options list */
|
|
+#define TCP_OPT_NOOP 1 /* "No-operation" TCP option */
|
|
+#define TCP_OPT_MSS 2 /* Maximum segment size TCP option */
|
|
+
|
|
+#define TCP_OPT_MSS_LEN 4 /* Length of TCP MSS option. */
|
|
+
|
|
+#define ICMP_ECHO_REPLY 0
|
|
+#define ICMP_ECHO 8
|
|
+
|
|
+#define ICMP6_ECHO_REPLY 129
|
|
+#define ICMP6_ECHO 128
|
|
+#define ICMP6_NEIGHBOR_SOLICITATION 135
|
|
+#define ICMP6_NEIGHBOR_ADVERTISEMENT 136
|
|
+
|
|
+#define ICMP6_FLAG_S (1 << 6)
|
|
+
|
|
+#define ICMP6_OPTION_SOURCE_LINK_ADDRESS 1
|
|
+#define ICMP6_OPTION_TARGET_LINK_ADDRESS 2
|
|
+
|
|
+/* Macros. */
|
|
+#define FBUF ((struct uip_tcpip_hdr *)&uip_reassbuf[0])
|
|
+#define UDPBUF(ustack) ((struct uip_udpip_hdr *)ustack->network_layer)
|
|
+
|
|
+/******************************************************************************
|
|
+ * Utility Functions
|
|
+ *****************************************************************************/
|
|
+static int is_ipv6(struct uip_stack *ustack)
|
|
+{
|
|
+ u16_t type;
|
|
+
|
|
+ type = ETH_BUF(ustack->uip_buf)->type;
|
|
+ type = ntohs(type);
|
|
+ if (type == UIP_ETHTYPE_8021Q)
|
|
+ type = ntohs(VLAN_ETH_BUF(ustack->uip_buf)->type);
|
|
+ else
|
|
+ type = ntohs(ETH_BUF(ustack->uip_buf)->type);
|
|
+
|
|
+ return (type == UIP_ETHTYPE_IPv6);
|
|
+}
|
|
+
|
|
+int is_ipv6_link_local_address(uip_ip6addr_t * addr)
|
|
+{
|
|
+ u8_t *test_adddr = (u8_t *) addr;
|
|
+ u8_t test_remainder;
|
|
+
|
|
+ if (test_adddr[0] != link_local_addres_prefix[0])
|
|
+ return 0;
|
|
+
|
|
+ test_remainder = (test_adddr[1] & 0xC0) >> 6;
|
|
+ if (test_remainder != 2)
|
|
+ return 0;
|
|
+
|
|
+ return 1;
|
|
+}
|
|
+
|
|
+void uip_sethostaddr4(struct uip_stack *ustack, uip_ip4addr_t * addr)
|
|
+{
|
|
+ pthread_mutex_lock(&ustack->lock);
|
|
+ uip_ip4addr_copy(ustack->hostaddr, (addr));
|
|
+ pthread_mutex_unlock(&ustack->lock);
|
|
+}
|
|
+
|
|
+void uip_setdraddr4(struct uip_stack *ustack, uip_ip4addr_t * addr)
|
|
+{
|
|
+ pthread_mutex_lock(&ustack->lock);
|
|
+ uip_ip4addr_copy(ustack->default_route_addr, (addr));
|
|
+ pthread_mutex_unlock(&ustack->lock);
|
|
+}
|
|
+
|
|
+void uip_setnetmask4(struct uip_stack *ustack, uip_ip4addr_t * addr)
|
|
+{
|
|
+ pthread_mutex_lock(&ustack->lock);
|
|
+ uip_ip4addr_copy(ustack->netmask, (addr));
|
|
+ pthread_mutex_unlock(&ustack->lock);
|
|
+}
|
|
+
|
|
+void uip_setethernetmac(struct uip_stack *ustack, uint8_t * mac)
|
|
+{
|
|
+ pthread_mutex_lock(&ustack->lock);
|
|
+ memcpy(ustack->uip_ethaddr.addr, (mac), 6);
|
|
+ pthread_mutex_unlock(&ustack->lock);
|
|
+}
|
|
+
|
|
+void set_uip_stack(struct uip_stack *ustack,
|
|
+ uip_ip4addr_t * ip,
|
|
+ uip_ip4addr_t * netmask,
|
|
+ uip_ip4addr_t * default_route, uint8_t * mac_addr)
|
|
+{
|
|
+ uip_sethostaddr4(ustack, ip);
|
|
+ uip_setnetmask4(ustack, netmask);
|
|
+ uip_setdraddr4(ustack, default_route);
|
|
+ uip_setethernetmac(ustack, mac_addr);
|
|
+}
|
|
+
|
|
+#if ! UIP_ARCH_ADD32
|
|
+void uip_add32(u8_t * op32, u16_t op16, u8_t * uip_acc32)
|
|
+{
|
|
+ uip_acc32[3] = op32[3] + (op16 & 0xff);
|
|
+ uip_acc32[2] = op32[2] + (op16 >> 8);
|
|
+ uip_acc32[1] = op32[1];
|
|
+ uip_acc32[0] = op32[0];
|
|
+
|
|
+ if (uip_acc32[2] < (op16 >> 8)) {
|
|
+ ++uip_acc32[1];
|
|
+ if (uip_acc32[1] == 0) {
|
|
+ ++uip_acc32[0];
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (uip_acc32[3] < (op16 & 0xff)) {
|
|
+ ++uip_acc32[2];
|
|
+ if (uip_acc32[2] == 0) {
|
|
+ ++uip_acc32[1];
|
|
+ if (uip_acc32[1] == 0) {
|
|
+ ++uip_acc32[0];
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+#endif /* UIP_ARCH_ADD32 */
|
|
+
|
|
+#if ! UIP_ARCH_CHKSUM
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static u16_t chksum(u16_t sum, const u8_t * data, u16_t len)
|
|
+{
|
|
+ u16_t t;
|
|
+ const u8_t *dataptr;
|
|
+ const u8_t *last_byte;
|
|
+
|
|
+ dataptr = data;
|
|
+ last_byte = data + len - 1;
|
|
+
|
|
+ while (dataptr < last_byte) { /* At least two more bytes */
|
|
+ t = (dataptr[0] << 8) + dataptr[1];
|
|
+ sum += t;
|
|
+ if (sum < t) {
|
|
+ sum++; /* carry */
|
|
+ }
|
|
+ dataptr += 2;
|
|
+ }
|
|
+
|
|
+ if (dataptr == last_byte) {
|
|
+ t = (dataptr[0] << 8) + 0;
|
|
+ sum += t;
|
|
+ if (sum < t) {
|
|
+ sum++; /* carry */
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /* Return sum in host byte order. */
|
|
+ return sum;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+u16_t uip_chksum(u16_t * data, u16_t len)
|
|
+{
|
|
+ return htons(chksum(0, (u8_t *) data, len));
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+#ifndef UIP_ARCH_IPCHKSUM
|
|
+u16_t uip_ipchksum(struct uip_stack * ustack)
|
|
+{
|
|
+ u16_t sum;
|
|
+ u16_t uip_iph_len;
|
|
+
|
|
+ if (is_ipv6(ustack))
|
|
+ uip_iph_len = UIP_IPv6_H_LEN;
|
|
+ else
|
|
+ uip_iph_len = UIP_IPv4_H_LEN;
|
|
+
|
|
+ sum = chksum(0, ustack->network_layer, uip_iph_len);
|
|
+ return (sum == 0) ? 0xffff : htons(sum);
|
|
+}
|
|
+#endif
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static u16_t upper_layer_chksum_ipv4(struct uip_stack *ustack, u8_t proto)
|
|
+{
|
|
+ u16_t upper_layer_len;
|
|
+ u16_t sum;
|
|
+ struct uip_tcp_ipv4_hdr *tcp_ipv4_hdr = NULL;
|
|
+
|
|
+ tcp_ipv4_hdr = (struct uip_tcp_ipv4_hdr *)ustack->network_layer;
|
|
+
|
|
+ upper_layer_len = (((u16_t) (tcp_ipv4_hdr->len[0]) << 8) +
|
|
+ tcp_ipv4_hdr->len[1]) - UIP_IPv4_H_LEN;
|
|
+
|
|
+ /* First sum pseudoheader. */
|
|
+ /* IP protocol and length fields. This addition cannot carry. */
|
|
+ sum = upper_layer_len + proto;
|
|
+
|
|
+ sum =
|
|
+ chksum(sum, (u8_t *) & tcp_ipv4_hdr->srcipaddr[0],
|
|
+ 2 * sizeof(uip_ip4addr_t));
|
|
+ /* Sum TCP header and data. */
|
|
+ sum = chksum(sum, ustack->network_layer + UIP_IPv4_H_LEN,
|
|
+ upper_layer_len);
|
|
+
|
|
+ return (sum == 0) ? 0xffff : htons(sum);
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static uint16_t upper_layer_checksum_ipv6(uint8_t * data, uint8_t proto)
|
|
+{
|
|
+ uint16_t upper_layer_len;
|
|
+ uint16_t sum;
|
|
+ struct ip6_hdr *ipv6_hdr;
|
|
+ uint8_t *upper_layer;
|
|
+ uint32_t val;
|
|
+
|
|
+ ipv6_hdr = (struct ip6_hdr *)data;
|
|
+
|
|
+ upper_layer_len = ntohs(ipv6_hdr->ip6_plen);
|
|
+
|
|
+ /* First sum pseudoheader. */
|
|
+ sum = 0;
|
|
+ sum = chksum(sum, (const u8_t *)ipv6_hdr->ip6_src.s6_addr,
|
|
+ sizeof(ipv6_hdr->ip6_src));
|
|
+ sum = chksum(sum, (const u8_t *)ipv6_hdr->ip6_dst.s6_addr,
|
|
+ sizeof(ipv6_hdr->ip6_dst));
|
|
+
|
|
+ val = htons(upper_layer_len);
|
|
+ sum = chksum(sum, (u8_t *) & val, sizeof(val));
|
|
+
|
|
+ val = htons(proto);
|
|
+ sum = chksum(sum, (u8_t *) & val, sizeof(val));
|
|
+
|
|
+ upper_layer = (uint8_t *) (ipv6_hdr + 1);
|
|
+ sum = chksum(sum, upper_layer, upper_layer_len);
|
|
+
|
|
+ return (sum == 0) ? 0xffff : htons(sum);
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+
|
|
+u16_t uip_icmp6chksum(struct uip_stack * ustack)
|
|
+{
|
|
+ uint8_t *data = ustack->network_layer;
|
|
+
|
|
+ return upper_layer_checksum_ipv6(data, UIP_PROTO_ICMP6);
|
|
+}
|
|
+
|
|
+uint16_t icmpv6_checksum(uint8_t * data)
|
|
+{
|
|
+ return upper_layer_checksum_ipv6(data, IPPROTO_ICMPV6);
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+u16_t uip_tcpchksum(struct uip_stack * ustack)
|
|
+{
|
|
+ return upper_layer_chksum_ipv4(ustack, UIP_PROTO_TCP);
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+#if UIP_UDP_CHECKSUMS
|
|
+static u16_t uip_udpchksum_ipv4(struct uip_stack *ustack)
|
|
+{
|
|
+ return upper_layer_chksum_ipv4(ustack, UIP_PROTO_UDP);
|
|
+}
|
|
+
|
|
+static u16_t uip_udpchksum_ipv6(struct uip_stack *ustack)
|
|
+{
|
|
+ uint8_t *data = ustack->network_layer;
|
|
+
|
|
+ return upper_layer_checksum_ipv6(data, UIP_PROTO_UDP);
|
|
+}
|
|
+
|
|
+u16_t uip_udpchksum(struct uip_stack * ustack)
|
|
+{
|
|
+ if (is_ipv6(ustack))
|
|
+ return uip_udpchksum_ipv6(ustack);
|
|
+ else
|
|
+ return uip_udpchksum_ipv4(ustack);
|
|
+}
|
|
+#endif /* UIP_UDP_CHECKSUMS */
|
|
+#endif /* UIP_ARCH_CHKSUM */
|
|
+/*---------------------------------------------------------------------------*/
|
|
+void uip_init(struct uip_stack *ustack, uint8_t ipv6_enabled)
|
|
+{
|
|
+ u8_t c;
|
|
+
|
|
+ for (c = 0; c < UIP_LISTENPORTS; ++c) {
|
|
+ ustack->uip_listenports[c] = 0;
|
|
+ }
|
|
+ for (c = 0; c < UIP_CONNS; ++c) {
|
|
+ ustack->uip_conns[c].tcpstateflags = UIP_CLOSED;
|
|
+ }
|
|
+#if UIP_ACTIVE_OPEN
|
|
+ ustack->lastport = 1024;
|
|
+#endif /* UIP_ACTIVE_OPEN */
|
|
+
|
|
+#if UIP_UDP
|
|
+ for (c = 0; c < UIP_UDP_CONNS; ++c) {
|
|
+ ustack->uip_udp_conns[c].lport = 0;
|
|
+ }
|
|
+#endif /* UIP_UDP */
|
|
+
|
|
+ /* IPv4 initialization. */
|
|
+#if UIP_FIXEDADDR == 0
|
|
+ /* uip_hostaddr[0] = uip_hostaddr[1] = 0; */
|
|
+#endif /* UIP_FIXEDADDR */
|
|
+
|
|
+ /* zero out the uIP statistics */
|
|
+ memset(&ustack->stats, 0, sizeof(ustack->stats));
|
|
+
|
|
+ /* prepare the uIP lock */
|
|
+ pthread_mutex_init(&ustack->lock, NULL);
|
|
+
|
|
+ if (ipv6_enabled) {
|
|
+ ustack->enable_IPv6 = UIP_SUPPORT_IPv6_ENABLED;
|
|
+ } else
|
|
+ ustack->enable_IPv6 = UIP_SUPPORT_IPv6_DISABLED;
|
|
+
|
|
+ ustack->dhcpc = NULL;
|
|
+ ustack->ndpc = NULL;
|
|
+}
|
|
+void uip_reset(struct uip_stack *ustack)
|
|
+{
|
|
+ /* There was an associated DHCP object, this memory needs to be
|
|
+ * freed */
|
|
+ if (ustack->dhcpc)
|
|
+ free(ustack->dhcpc);
|
|
+
|
|
+ ndpc_exit(ustack->ndpc);
|
|
+
|
|
+ memset(ustack, 0, sizeof(*ustack));
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+#if UIP_ACTIVE_OPEN
|
|
+struct uip_conn *uip_connect(struct uip_stack *ustack, uip_ip4addr_t * ripaddr,
|
|
+ u16_t rport)
|
|
+{
|
|
+ u8_t c;
|
|
+ register struct uip_conn *conn, *cconn;
|
|
+
|
|
+ /* Find an unused local port. */
|
|
+again:
|
|
+ ++ustack->lastport;
|
|
+
|
|
+ if (ustack->lastport >= 32000) {
|
|
+ ustack->lastport = 4096;
|
|
+ }
|
|
+
|
|
+ /* Check if this port is already in use, and if so try to find
|
|
+ another one. */
|
|
+ for (c = 0; c < UIP_CONNS; ++c) {
|
|
+ conn = &ustack->uip_conns[c];
|
|
+ if (conn->tcpstateflags != UIP_CLOSED &&
|
|
+ conn->lport == htons(ustack->lastport)) {
|
|
+ goto again;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ conn = 0;
|
|
+ for (c = 0; c < UIP_CONNS; ++c) {
|
|
+ cconn = &ustack->uip_conns[c];
|
|
+ if (cconn->tcpstateflags == UIP_CLOSED) {
|
|
+ conn = cconn;
|
|
+ break;
|
|
+ }
|
|
+ if (cconn->tcpstateflags == UIP_TIME_WAIT) {
|
|
+ if (conn == 0 || cconn->timer > conn->timer) {
|
|
+ conn = cconn;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (conn == 0) {
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
+ conn->tcpstateflags = UIP_SYN_SENT;
|
|
+
|
|
+ conn->snd_nxt[0] = ustack->iss[0];
|
|
+ conn->snd_nxt[1] = ustack->iss[1];
|
|
+ conn->snd_nxt[2] = ustack->iss[2];
|
|
+ conn->snd_nxt[3] = ustack->iss[3];
|
|
+
|
|
+ conn->initialmss = conn->mss = UIP_TCP_MSS;
|
|
+
|
|
+ conn->len = 1; /* TCP length of the SYN is one. */
|
|
+ conn->nrtx = 0;
|
|
+ conn->timer = 1; /* Send the SYN next time around. */
|
|
+ conn->rto = UIP_RTO;
|
|
+ conn->sa = 0;
|
|
+ conn->sv = 16; /* Initial value of the RTT variance. */
|
|
+ conn->lport = htons(ustack->lastport);
|
|
+ conn->rport = rport;
|
|
+ uip_ip4addr_copy(&conn->ripaddr, ripaddr);
|
|
+
|
|
+ return conn;
|
|
+}
|
|
+#endif /* UIP_ACTIVE_OPEN */
|
|
+/*---------------------------------------------------------------------------*/
|
|
+#if UIP_UDP
|
|
+struct uip_udp_conn *uip_udp_new(struct uip_stack *ustack,
|
|
+ uip_ip4addr_t * ripaddr, u16_t rport)
|
|
+{
|
|
+ u8_t c;
|
|
+ register struct uip_udp_conn *conn;
|
|
+
|
|
+ /* Find an unused local port. */
|
|
+again:
|
|
+ ++ustack->lastport;
|
|
+
|
|
+ if (ustack->lastport >= 32000) {
|
|
+ ustack->lastport = 4096;
|
|
+ }
|
|
+
|
|
+ for (c = 0; c < UIP_UDP_CONNS; ++c) {
|
|
+ if (ustack->uip_udp_conns[c].lport == htons(ustack->lastport)) {
|
|
+ goto again;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ conn = 0;
|
|
+ for (c = 0; c < UIP_UDP_CONNS; ++c) {
|
|
+ if (ustack->uip_udp_conns[c].lport == 0) {
|
|
+ conn = &ustack->uip_udp_conns[c];
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (conn == 0) {
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
+ conn->lport = htons(ustack->lastport);
|
|
+ conn->rport = rport;
|
|
+ if (ripaddr == NULL) {
|
|
+ memset(conn->ripaddr, 0, sizeof(uip_ip4addr_t));
|
|
+ } else {
|
|
+ uip_ip4addr_copy(&conn->ripaddr, ripaddr);
|
|
+ }
|
|
+ conn->ttl = UIP_TTL;
|
|
+
|
|
+ return conn;
|
|
+}
|
|
+#endif /* UIP_UDP */
|
|
+/*---------------------------------------------------------------------------*/
|
|
+void uip_unlisten(struct uip_stack *ustack, u16_t port)
|
|
+{
|
|
+ u8_t c;
|
|
+
|
|
+ for (c = 0; c < UIP_LISTENPORTS; ++c) {
|
|
+ if (ustack->uip_listenports[c] == port) {
|
|
+ ustack->uip_listenports[c] = 0;
|
|
+ return;
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+void uip_listen(struct uip_stack *ustack, u16_t port)
|
|
+{
|
|
+ u8_t c;
|
|
+
|
|
+ for (c = 0; c < UIP_LISTENPORTS; ++c) {
|
|
+ if (ustack->uip_listenports[c] == 0) {
|
|
+ ustack->uip_listenports[c] = port;
|
|
+ return;
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+/**
|
|
+ * Is new incoming data available?
|
|
+ *
|
|
+ * Will reduce to non-zero if there is new data for the application
|
|
+ * present at the uip_appdata pointer. The size of the data is
|
|
+ * avaliable through the uip_len variable.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+int uip_newdata(struct uip_stack *ustack)
|
|
+{
|
|
+ return ustack->uip_flags & UIP_NEWDATA;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * Has previously sent data been acknowledged?
|
|
+ *
|
|
+ * Will reduce to non-zero if the previously sent data has been
|
|
+ * acknowledged by the remote host. This means that the application
|
|
+ * can send new data.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_acked() (uip_flags & UIP_ACKDATA)
|
|
+
|
|
+/**
|
|
+ * Has the connection just been connected?
|
|
+ *
|
|
+ * Reduces to non-zero if the current connection has been connected to
|
|
+ * a remote host. This will happen both if the connection has been
|
|
+ * actively opened (with uip_connect()) or passively opened (with
|
|
+ * uip_listen()).
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+int uip_connected(struct uip_stack *ustack)
|
|
+{
|
|
+ return ustack->uip_flags & UIP_CONNECTED;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * Has the connection been closed by the other end?
|
|
+ *
|
|
+ * Is non-zero if the connection has been closed by the remote
|
|
+ * host. The application may then do the necessary clean-ups.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+int uip_closed(struct uip_stack *ustack)
|
|
+{
|
|
+ return ustack->uip_flags & UIP_CLOSE;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * Has the connection been aborted by the other end?
|
|
+ *
|
|
+ * Non-zero if the current connection has been aborted (reset) by the
|
|
+ * remote host.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+int uip_aborted(struct uip_stack *ustack)
|
|
+{
|
|
+ return ustack->uip_flags & UIP_ABORT;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * Has the connection timed out?
|
|
+ *
|
|
+ * Non-zero if the current connection has been aborted due to too many
|
|
+ * retransmissions.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+int uip_timedout(struct uip_stack *ustack)
|
|
+{
|
|
+ return ustack->uip_flags & UIP_TIMEDOUT;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * Do we need to retransmit previously data?
|
|
+ *
|
|
+ * Reduces to non-zero if the previously sent data has been lost in
|
|
+ * the network, and the application should retransmit it. The
|
|
+ * application should send the exact same data as it did the last
|
|
+ * time, using the uip_send() function.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+int uip_rexmit(struct uip_stack *ustack)
|
|
+{
|
|
+ return ustack->uip_flags & UIP_REXMIT;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * Is the connection being polled by uIP?
|
|
+ *
|
|
+ * Is non-zero if the reason the application is invoked is that the
|
|
+ * current connection has been idle for a while and should be
|
|
+ * polled.
|
|
+ *
|
|
+ * The polling event can be used for sending data without having to
|
|
+ * wait for the remote host to send data.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+int uip_poll(struct uip_stack *ustack)
|
|
+{
|
|
+ return ustack->uip_flags & UIP_POLL;
|
|
+}
|
|
+
|
|
+int uip_initialmss(struct uip_stack *ustack)
|
|
+{
|
|
+ return ustack->uip_conn->initialmss;
|
|
+}
|
|
+
|
|
+int uip_mss(struct uip_stack *ustack)
|
|
+{
|
|
+ return ustack->uip_conn->mss;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+/* XXX: IP fragment reassembly: not well-tested. */
|
|
+
|
|
+#if UIP_REASSEMBLY && !UIP_CONF_IPV6
|
|
+#define UIP_REASS_BUFSIZE (UIP_BUFSIZE - UIP_LLH_LEN)
|
|
+static u8_t uip_reassbuf[UIP_REASS_BUFSIZE];
|
|
+static u8_t uip_reassbitmap[UIP_REASS_BUFSIZE / (8 * 8)];
|
|
+static const u8_t bitmap_bits[8] = { 0xff, 0x7f, 0x3f, 0x1f,
|
|
+ 0x0f, 0x07, 0x03, 0x01
|
|
+};
|
|
+static u16_t uip_reasslen;
|
|
+static u8_t uip_reassflags;
|
|
+#define UIP_REASS_FLAG_LASTFRAG 0x01
|
|
+static u8_t uip_reasstmr;
|
|
+
|
|
+#define IP_MF 0x20
|
|
+
|
|
+static u8_t uip_reass(void)
|
|
+{
|
|
+ u16_t offset, len;
|
|
+ u16_t i;
|
|
+
|
|
+ /* If ip_reasstmr is zero, no packet is present in the buffer, so we
|
|
+ write the IP header of the fragment into the reassembly
|
|
+ buffer. The timer is updated with the maximum age. */
|
|
+ if (uip_reasstmr == 0) {
|
|
+ memcpy(uip_reassbuf, &BUF(ustack)->vhl, uip_iph_len);
|
|
+ uip_reasstmr = UIP_REASS_MAXAGE;
|
|
+ uip_reassflags = 0;
|
|
+ /* Clear the bitmap. */
|
|
+ memset(uip_reassbitmap, 0, sizeof(uip_reassbitmap));
|
|
+ }
|
|
+
|
|
+ /* Check if the incoming fragment matches the one currently present
|
|
+ in the reasembly buffer. If so, we proceed with copying the
|
|
+ fragment into the buffer. */
|
|
+ if (BUF(ustack)->srcipaddr[0] == FBUF(ustack)->srcipaddr[0] &&
|
|
+ BUF(ustack)->srcipaddr[1] == FBUF(ustack)->srcipaddr[1] &&
|
|
+ BUF(ustack)->destipaddr[0] == FBUF(ustack)->destipaddr[0] &&
|
|
+ BUF(ustack)->destipaddr[1] == FBUF(ustack)->destipaddr[1] &&
|
|
+ BUF(ustack)->ipid[0] == FBUF(ustack)->ipid[0] &&
|
|
+ BUF(ustack)->ipid[1] == FBUF(ustack)->ipid[1]) {
|
|
+
|
|
+ len =
|
|
+ (BUF(ustack)->len[0] << 8) + BUF(ustack)->len[1] -
|
|
+ (BUF(ustack)->vhl & 0x0f) * 4;
|
|
+ offset =
|
|
+ (((BUF(ustack)->ipoffset[0] & 0x3f) << 8) +
|
|
+ BUF(ustack)->ipoffset[1]) * 8;
|
|
+
|
|
+ /* If the offset or the offset + fragment length overflows the
|
|
+ reassembly buffer, we discard the entire packet. */
|
|
+ if (offset > UIP_REASS_BUFSIZE ||
|
|
+ offset + len > UIP_REASS_BUFSIZE) {
|
|
+ uip_reasstmr = 0;
|
|
+ goto nullreturn;
|
|
+ }
|
|
+
|
|
+ /* Copy the fragment into the reassembly buffer, at the right
|
|
+ offset. */
|
|
+ memcpy(&uip_reassbuf[uip_iph_len + offset],
|
|
+ (char *)BUF + (int)((BUF(ustack)->vhl & 0x0f) * 4), len);
|
|
+
|
|
+ /* Update the bitmap. */
|
|
+ if (offset / (8 * 8) == (offset + len) / (8 * 8)) {
|
|
+ /* If the two endpoints are in the same byte, we only
|
|
+ update that byte. */
|
|
+
|
|
+ uip_reassbitmap[offset / (8 * 8)] |=
|
|
+ bitmap_bits[(offset / 8) & 7] &
|
|
+ ~bitmap_bits[((offset + len) / 8) & 7];
|
|
+ } else {
|
|
+ /* If the two endpoints are in different bytes, we
|
|
+ update the bytes in the endpoints and fill the
|
|
+ stuff inbetween with 0xff. */
|
|
+ uip_reassbitmap[offset / (8 * 8)] |=
|
|
+ bitmap_bits[(offset / 8) & 7];
|
|
+ for (i = 1 + offset / (8 * 8);
|
|
+ i < (offset + len) / (8 * 8); ++i) {
|
|
+ uip_reassbitmap[i] = 0xff;
|
|
+ }
|
|
+ uip_reassbitmap[(offset + len) / (8 * 8)] |=
|
|
+ ~bitmap_bits[((offset + len) / 8) & 7];
|
|
+ }
|
|
+
|
|
+ /* If this fragment has the More Fragments flag set to zero, we
|
|
+ know that this is the last fragment, so we can calculate the
|
|
+ size of the entire packet. We also set the
|
|
+ IP_REASS_FLAG_LASTFRAG flag to indicate that we have received
|
|
+ the final fragment. */
|
|
+
|
|
+ if ((BUF(ustack)->ipoffset[0] & IP_MF) == 0) {
|
|
+ uip_reassflags |= UIP_REASS_FLAG_LASTFRAG;
|
|
+ uip_reasslen = offset + len;
|
|
+ }
|
|
+
|
|
+ /* Finally, we check if we have a full packet in the buffer.
|
|
+ We do this by checking if we have the last fragment and if
|
|
+ all bits in the bitmap are set. */
|
|
+ if (uip_reassflags & UIP_REASS_FLAG_LASTFRAG) {
|
|
+ /* Check all bytes up to and including all but the last
|
|
+ byte in the bitmap. */
|
|
+ for (i = 0; i < uip_reasslen / (8 * 8) - 1; ++i) {
|
|
+ if (uip_reassbitmap[i] != 0xff) {
|
|
+ goto nullreturn;
|
|
+ }
|
|
+ }
|
|
+ /* Check the last byte in the bitmap. It should contain
|
|
+ just the right amount of bits. */
|
|
+ if (uip_reassbitmap[uip_reasslen / (8 * 8)] !=
|
|
+ (u8_t) ~ bitmap_bits[uip_reasslen / 8 & 7]) {
|
|
+ goto nullreturn;
|
|
+ }
|
|
+
|
|
+ /* If we have come this far, we have a full packet in
|
|
+ the buffer, so we allocate a pbuf and copy the
|
|
+ packet into it. We also reset the timer. */
|
|
+ uip_reasstmr = 0;
|
|
+ memcpy(BUF, FBUF, uip_reasslen);
|
|
+
|
|
+ /* Pretend to be a "normal" (i.e., not fragmented) IP
|
|
+ packet from now on. */
|
|
+ BUF(ustack)->ipoffset[0] = BUF(ustack)->ipoffset[1] = 0;
|
|
+ BUF(ustack)->len[0] = uip_reasslen >> 8;
|
|
+ BUF(ustack)->len[1] = uip_reasslen & 0xff;
|
|
+ BUF(ustack)->ipchksum = 0;
|
|
+ BUF(ustack)->ipchksum = ~(uip_ipchksum());
|
|
+
|
|
+ return uip_reasslen;
|
|
+ }
|
|
+ }
|
|
+
|
|
+nullreturn:
|
|
+ return 0;
|
|
+}
|
|
+#endif /* UIP_REASSEMBLY */
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static void uip_add_rcv_nxt(struct uip_stack *ustack, u16_t n)
|
|
+{
|
|
+ u8_t uip_acc32[4];
|
|
+
|
|
+ uip_add32(ustack->uip_conn->rcv_nxt, n, uip_acc32);
|
|
+ ustack->uip_conn->rcv_nxt[0] = uip_acc32[0];
|
|
+ ustack->uip_conn->rcv_nxt[1] = uip_acc32[1];
|
|
+ ustack->uip_conn->rcv_nxt[2] = uip_acc32[2];
|
|
+ ustack->uip_conn->rcv_nxt[3] = uip_acc32[3];
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+
|
|
+/** @} */
|
|
+
|
|
+/**
|
|
+ * \defgroup uipdevfunc uIP device driver functions
|
|
+ * @{
|
|
+ *
|
|
+ * These functions are used by a network device driver for interacting
|
|
+ * with uIP.
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * Process an incoming packet.
|
|
+ *
|
|
+ * This function should be called when the device driver has received
|
|
+ * a packet from the network. The packet from the device driver must
|
|
+ * be present in the uip_buf buffer, and the length of the packet
|
|
+ * should be placed in the uip_len variable.
|
|
+ *
|
|
+ * When the function returns, there may be an outbound packet placed
|
|
+ * in the uip_buf packet buffer. If so, the uip_len variable is set to
|
|
+ * the length of the packet. If no packet is to be sent out, the
|
|
+ * uip_len variable is set to 0.
|
|
+ *
|
|
+ * The usual way of calling the function is presented by the source
|
|
+ * code below.
|
|
+ \code
|
|
+ uip_len = devicedriver_poll();
|
|
+ if(uip_len > 0) {
|
|
+ uip_input();
|
|
+ if(uip_len > 0) {
|
|
+ devicedriver_send();
|
|
+ }
|
|
+ }
|
|
+ \endcode
|
|
+ *
|
|
+ * \note If you are writing a uIP device driver that needs ARP
|
|
+ * (Address Resolution Protocol), e.g., when running uIP over
|
|
+ * Ethernet, you will need to call the uIP ARP code before calling
|
|
+ * this function:
|
|
+ \code
|
|
+ #define BUF ((struct uip_eth_hdr *)&uip_buf[0])
|
|
+ uip_len = ethernet_devicedrver_poll();
|
|
+ if(uip_len > 0) {
|
|
+ if(BUF(ustack)->type == HTONS(UIP_ETHTYPE_IP)) {
|
|
+ uip_arp_ipin();
|
|
+ uip_input();
|
|
+ if(uip_len > 0) {
|
|
+ uip_arp_out();
|
|
+ ethernet_devicedriver_send();
|
|
+ }
|
|
+ } else if(BUF(ustack)->type == HTONS(UIP_ETHTYPE_ARP)) {
|
|
+ uip_arp_arpin();
|
|
+ if(uip_len > 0) {
|
|
+ ethernet_devicedriver_send();
|
|
+ }
|
|
+ }
|
|
+ \endcode
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+void uip_input(struct uip_stack *ustack)
|
|
+{
|
|
+ uip_process(ustack, UIP_DATA);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * Periodic processing for a connection identified by its number.
|
|
+ *
|
|
+ * This function does the necessary periodic processing (timers,
|
|
+ * polling) for a uIP TCP conneciton, and should be called when the
|
|
+ * periodic uIP timer goes off. It should be called for every
|
|
+ * connection, regardless of whether they are open of closed.
|
|
+ *
|
|
+ * When the function returns, it may have an outbound packet waiting
|
|
+ * for service in the uIP packet buffer, and if so the uip_len
|
|
+ * variable is set to a value larger than zero. The device driver
|
|
+ * should be called to send out the packet.
|
|
+ *
|
|
+ * The ususal way of calling the function is through a for() loop like
|
|
+ * this:
|
|
+ \code
|
|
+ for(i = 0; i < UIP_CONNS; ++i) {
|
|
+ uip_periodic(i);
|
|
+ if(uip_len > 0) {
|
|
+ devicedriver_send();
|
|
+ }
|
|
+ }
|
|
+ \endcode
|
|
+ *
|
|
+ * \note If you are writing a uIP device driver that needs ARP
|
|
+ * (Address Resolution Protocol), e.g., when running uIP over
|
|
+ * Ethernet, you will need to call the uip_arp_out() function before
|
|
+ * calling the device driver:
|
|
+ \code
|
|
+ for(i = 0; i < UIP_CONNS; ++i) {
|
|
+ uip_periodic(i);
|
|
+ if(uip_len > 0) {
|
|
+ uip_arp_out();
|
|
+ ethernet_devicedriver_send();
|
|
+ }
|
|
+ }
|
|
+ \endcode
|
|
+ *
|
|
+ * \param conn The number of the connection which is to be periodically polled.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+void uip_periodic(struct uip_stack *ustack, int conn)
|
|
+{
|
|
+ ustack->uip_conn = &ustack->uip_conns[conn];
|
|
+ uip_process(ustack, UIP_TIMER);
|
|
+}
|
|
+
|
|
+#if UIP_UDP
|
|
+/**
|
|
+ * Periodic processing for a UDP connection identified by its number.
|
|
+ *
|
|
+ * This function is essentially the same as uip_periodic(), but for
|
|
+ * UDP connections. It is called in a similar fashion as the
|
|
+ * uip_periodic() function:
|
|
+ \code
|
|
+ for(i = 0; i < UIP_UDP_CONNS; i++) {
|
|
+ uip_udp_periodic(i);
|
|
+ if(uip_len > 0) {
|
|
+ devicedriver_send();
|
|
+ }
|
|
+ }
|
|
+ \endcode
|
|
+ *
|
|
+ * \note As for the uip_periodic() function, special care has to be
|
|
+ * taken when using uIP together with ARP and Ethernet:
|
|
+ \code
|
|
+ for(i = 0; i < UIP_UDP_CONNS; i++) {
|
|
+ uip_udp_periodic(i);
|
|
+ if(uip_len > 0) {
|
|
+ uip_arp_out();
|
|
+ ethernet_devicedriver_send();
|
|
+ }
|
|
+ }
|
|
+ \endcode
|
|
+ *
|
|
+ * \param conn The number of the UDP connection to be processed.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+void uip_udp_periodic(struct uip_stack *ustack, int conn)
|
|
+{
|
|
+ ustack->uip_udp_conn = &ustack->uip_udp_conns[conn];
|
|
+ uip_process(ustack, UIP_UDP_TIMER);
|
|
+}
|
|
+#endif
|
|
+
|
|
+void uip_ndp_periodic(struct uip_stack *ustack)
|
|
+{
|
|
+ uip_process(ustack, UIP_NDP_TIMER);
|
|
+}
|
|
+
|
|
+void uip_process(struct uip_stack *ustack, u8_t flag)
|
|
+{
|
|
+ u8_t c;
|
|
+ u16_t tmp16;
|
|
+ register struct uip_conn *uip_connr = ustack->uip_conn;
|
|
+
|
|
+ u16_t uip_iph_len = 0;
|
|
+ u16_t uip_ip_udph_len = 0;
|
|
+ u16_t uip_ip_tcph_len = 0;
|
|
+ struct ip6_hdr *ipv6_hdr = NULL;
|
|
+ struct uip_tcp_ipv4_hdr *tcp_ipv4_hdr = NULL;
|
|
+ struct uip_tcp_hdr *tcp_hdr = NULL;
|
|
+ struct uip_icmpv4_hdr *icmpv4_hdr = NULL;
|
|
+ struct uip_icmpv6_hdr *icmpv6_hdr = NULL;
|
|
+ struct uip_udp_hdr *udp_hdr = NULL;
|
|
+
|
|
+ /* Drop invalid packets */
|
|
+ if (ustack->uip_buf == NULL) {
|
|
+ LOG_ERR(PFX "ustack->uip_buf == NULL.");
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ if (is_ipv6(ustack)) {
|
|
+ uint8_t *buf;
|
|
+ uip_iph_len = UIP_IPv6_H_LEN;
|
|
+ uip_ip_udph_len = UIP_IPv6_UDPH_LEN;
|
|
+ uip_ip_tcph_len = UIP_IPv6_TCPH_LEN;
|
|
+
|
|
+ ipv6_hdr = (struct ip6_hdr *)ustack->network_layer;
|
|
+
|
|
+ buf = ustack->network_layer;
|
|
+ buf += sizeof(struct uip_ipv6_hdr);
|
|
+ tcp_hdr = (struct uip_tcp_hdr *)buf;
|
|
+
|
|
+ buf = ustack->network_layer;
|
|
+ buf += sizeof(struct uip_ipv6_hdr);
|
|
+ udp_hdr = (struct uip_udp_hdr *)buf;
|
|
+
|
|
+ buf = ustack->network_layer;
|
|
+ buf += sizeof(struct uip_ipv6_hdr);
|
|
+ icmpv6_hdr = (struct uip_icmpv6_hdr *)buf;
|
|
+ } else {
|
|
+ uint8_t *buf;
|
|
+
|
|
+ uip_iph_len = UIP_IPv4_H_LEN;
|
|
+ uip_ip_udph_len = UIP_IPv4_UDPH_LEN;
|
|
+ uip_ip_tcph_len = UIP_IPv4_TCPH_LEN;
|
|
+
|
|
+ tcp_ipv4_hdr = (struct uip_tcp_ipv4_hdr *)ustack->network_layer;
|
|
+
|
|
+ buf = ustack->network_layer;
|
|
+ buf += sizeof(struct uip_ipv4_hdr);
|
|
+ tcp_hdr = (struct uip_tcp_hdr *)buf;
|
|
+
|
|
+ buf = ustack->network_layer;
|
|
+ buf += sizeof(struct uip_ipv4_hdr);
|
|
+ icmpv4_hdr = (struct uip_icmpv4_hdr *)buf;
|
|
+
|
|
+ buf = ustack->network_layer;
|
|
+ buf += sizeof(struct uip_ipv4_hdr);
|
|
+ udp_hdr = (struct uip_udp_hdr *)buf;
|
|
+ } /* End of ipv6 */
|
|
+
|
|
+#if UIP_UDP
|
|
+ if (flag == UIP_UDP_SEND_CONN) {
|
|
+ goto udp_send;
|
|
+ }
|
|
+#endif /* UIP_UDP */
|
|
+ ustack->uip_sappdata = ustack->uip_appdata = ustack->network_layer +
|
|
+ uip_ip_tcph_len;
|
|
+
|
|
+ /* Check if we were invoked because of a poll request for a
|
|
+ particular connection. */
|
|
+ if (flag == UIP_POLL_REQUEST) {
|
|
+ if ((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED
|
|
+ && !uip_outstanding(uip_connr)) {
|
|
+ ustack->uip_flags = UIP_POLL;
|
|
+ UIP_APPCALL(ustack);
|
|
+ goto appsend;
|
|
+ }
|
|
+ goto drop;
|
|
+
|
|
+ /* Check if we were invoked because of the perodic timer
|
|
+ firing. */
|
|
+ } else if (flag == UIP_TIMER) {
|
|
+#if UIP_REASSEMBLY
|
|
+ if (uip_reasstmr != 0) {
|
|
+ --uip_reasstmr;
|
|
+ }
|
|
+#endif /* UIP_REASSEMBLY */
|
|
+ /* Increase the initial sequence number. */
|
|
+ if (++ustack->iss[3] == 0) {
|
|
+ if (++ustack->iss[2] == 0) {
|
|
+ if (++ustack->iss[1] == 0) {
|
|
+ ++ustack->iss[0];
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /* Reset the length variables. */
|
|
+ ustack->uip_len = 0;
|
|
+ ustack->uip_slen = 0;
|
|
+
|
|
+ /* Check if the connection is in a state in which we simply wait
|
|
+ for the connection to time out. If so, we increase the
|
|
+ connection's timer and remove the connection if it times
|
|
+ out. */
|
|
+ if (uip_connr->tcpstateflags == UIP_TIME_WAIT ||
|
|
+ uip_connr->tcpstateflags == UIP_FIN_WAIT_2) {
|
|
+ ++(uip_connr->timer);
|
|
+ if (uip_connr->timer == UIP_TIME_WAIT_TIMEOUT) {
|
|
+ uip_connr->tcpstateflags = UIP_CLOSED;
|
|
+ }
|
|
+ } else if (uip_connr->tcpstateflags != UIP_CLOSED) {
|
|
+ /* If the connection has outstanding data, we increase
|
|
+ the connection's timer and see if it has reached the
|
|
+ RTO value in which case we retransmit. */
|
|
+ if (uip_outstanding(uip_connr)) {
|
|
+ if (uip_connr->timer-- == 0) {
|
|
+ if (uip_connr->nrtx == UIP_MAXRTX ||
|
|
+ ((uip_connr->tcpstateflags ==
|
|
+ UIP_SYN_SENT
|
|
+ || uip_connr->tcpstateflags ==
|
|
+ UIP_SYN_RCVD)
|
|
+ && uip_connr->nrtx ==
|
|
+ UIP_MAXSYNRTX)) {
|
|
+ uip_connr->tcpstateflags =
|
|
+ UIP_CLOSED;
|
|
+
|
|
+ /* We call UIP_APPCALL() with
|
|
+ uip_flags set to UIP_TIMEDOUT
|
|
+ to inform the application
|
|
+ that the connection has timed
|
|
+ out. */
|
|
+ ustack->uip_flags =
|
|
+ UIP_TIMEDOUT;
|
|
+ UIP_APPCALL(ustack);
|
|
+
|
|
+ /* We also send a reset packet
|
|
+ to the remote host. */
|
|
+ tcp_hdr->flags =
|
|
+ TCP_RST | TCP_ACK;
|
|
+ goto tcp_send_nodata;
|
|
+ }
|
|
+
|
|
+ /* Exponential backoff. */
|
|
+ uip_connr->timer =
|
|
+ UIP_RTO << (uip_connr->nrtx >
|
|
+ 4 ? 4 : uip_connr->
|
|
+ nrtx);
|
|
+ ++(uip_connr->nrtx);
|
|
+
|
|
+ /* Ok, so we need to retransmit.
|
|
+ We do this differently depending on
|
|
+ which state we are in.
|
|
+ In ESTABLISHED, we call upon the
|
|
+ application so that it may prepare
|
|
+ the data for the retransmit.
|
|
+ In SYN_RCVD, we resend the SYNACK
|
|
+ that we sent earlier and in LAST_ACK
|
|
+ we have to retransmit our FINACK. */
|
|
+ ++ustack->stats.tcp.rexmit;
|
|
+ switch (uip_connr->
|
|
+ tcpstateflags & UIP_TS_MASK) {
|
|
+ case UIP_SYN_RCVD:
|
|
+ /* In the SYN_RCVD state, we
|
|
+ should retransmit our SYNACK
|
|
+ */
|
|
+ goto tcp_send_synack;
|
|
+#if UIP_ACTIVE_OPEN
|
|
+ case UIP_SYN_SENT:
|
|
+ /* In the SYN_SENT state,
|
|
+ we retransmit out SYN. */
|
|
+ tcp_hdr->flags = 0;
|
|
+ goto tcp_send_syn;
|
|
+#endif /* UIP_ACTIVE_OPEN */
|
|
+
|
|
+ case UIP_ESTABLISHED:
|
|
+ /* In the ESTABLISHED state,
|
|
+ we call upon the application
|
|
+ to do the actual retransmit
|
|
+ after which we jump into
|
|
+ the code for sending out the
|
|
+ packet (the apprexmit
|
|
+ label). */
|
|
+ ustack->uip_flags = UIP_REXMIT;
|
|
+ UIP_APPCALL(ustack);
|
|
+ goto apprexmit;
|
|
+
|
|
+ case UIP_FIN_WAIT_1:
|
|
+ case UIP_CLOSING:
|
|
+ case UIP_LAST_ACK:
|
|
+ /* In all these states we should
|
|
+ retransmit a FINACK. */
|
|
+ goto tcp_send_finack;
|
|
+
|
|
+ }
|
|
+ }
|
|
+ } else if ((uip_connr->tcpstateflags & UIP_TS_MASK) ==
|
|
+ UIP_ESTABLISHED) {
|
|
+ /* If there was no need for a retransmission,
|
|
+ we poll the application for new data. */
|
|
+ ustack->uip_flags = UIP_POLL;
|
|
+ UIP_APPCALL(ustack);
|
|
+ goto appsend;
|
|
+ }
|
|
+ }
|
|
+ goto drop;
|
|
+ } /* End of UIP_TIMER */
|
|
+#if UIP_UDP
|
|
+ if (flag == UIP_UDP_TIMER) {
|
|
+ /* This is for IPv4 DHCP only! */
|
|
+ if (ustack->uip_udp_conn->lport != 0) {
|
|
+ ustack->uip_conn = NULL;
|
|
+ ustack->uip_sappdata = ustack->uip_appdata =
|
|
+ ustack->network_layer + uip_ip_udph_len;
|
|
+ ustack->uip_len = ustack->uip_slen = 0;
|
|
+ ustack->uip_flags = UIP_POLL;
|
|
+ UIP_UDP_APPCALL(ustack);
|
|
+ goto udp_send;
|
|
+ } else {
|
|
+ goto drop;
|
|
+ }
|
|
+ }
|
|
+#endif
|
|
+ if (flag == UIP_NDP_TIMER) {
|
|
+ /* This is for IPv6 NDP Only! */
|
|
+ if (1) { /* If NDP engine active */
|
|
+ ustack->uip_len = ustack->uip_slen = 0;
|
|
+ ustack->uip_flags = UIP_POLL;
|
|
+ goto ndp_send;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /* This is where the input processing starts. */
|
|
+ ++ustack->stats.ip.recv;
|
|
+
|
|
+ /* Start of IP input header processing code. */
|
|
+
|
|
+ if (is_ipv6(ustack)) {
|
|
+ u8_t version = ((ipv6_hdr->ip6_vfc) & 0xf0) >> 4;
|
|
+
|
|
+ /* Check validity of the IP header. */
|
|
+ if (version != 0x6) { /* IP version and header length. */
|
|
+ ++ustack->stats.ip.drop;
|
|
+ ++ustack->stats.ip.vhlerr;
|
|
+ LOG_DEBUG(PFX "ipv6: invalid version(0x%x).", version);
|
|
+ goto drop;
|
|
+ }
|
|
+ } else {
|
|
+ /* Check validity of the IP header. */
|
|
+ if (tcp_ipv4_hdr->vhl != 0x45) {
|
|
+ /* IP version and header length. */
|
|
+ ++ustack->stats.ip.drop;
|
|
+ ++ustack->stats.ip.vhlerr;
|
|
+ LOG_DEBUG(PFX
|
|
+ "ipv4: invalid version or header length: "
|
|
+ "0x%x.",
|
|
+ tcp_ipv4_hdr->vhl);
|
|
+ goto drop;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /* Check the size of the packet. If the size reported to us in
|
|
+ uip_len is smaller the size reported in the IP header, we assume
|
|
+ that the packet has been corrupted in transit. If the size of
|
|
+ uip_len is larger than the size reported in the IP packet header,
|
|
+ the packet has been padded and we set uip_len to the correct
|
|
+ value.. */
|
|
+
|
|
+ if (is_ipv6(ustack)) {
|
|
+ u16_t len = ntohs(ipv6_hdr->ip6_plen);
|
|
+ if (len <= ustack->uip_len) {
|
|
+ } else {
|
|
+ LOG_DEBUG(PFX
|
|
+ "ip: packet shorter than reported in IP header"
|
|
+ ":IPv6_BUF(ustack)->len: %d ustack->uip_len: "
|
|
+ "%d", len, ustack->uip_len);
|
|
+ goto drop;
|
|
+ }
|
|
+ } else {
|
|
+ if ((tcp_ipv4_hdr->len[0] << 8) +
|
|
+ tcp_ipv4_hdr->len[1] <= ustack->uip_len) {
|
|
+ ustack->uip_len = (tcp_ipv4_hdr->len[0] << 8) +
|
|
+ tcp_ipv4_hdr->len[1];
|
|
+ } else {
|
|
+ LOG_DEBUG(PFX
|
|
+ "ip: packet shorter than reported in IP header"
|
|
+ ":tcp_ipv4_hdr->len: %d ustack->uip_len:%d.",
|
|
+ (tcp_ipv4_hdr->len[0] << 8) +
|
|
+ tcp_ipv4_hdr->len[1], ustack->uip_len);
|
|
+ goto drop;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (!is_ipv6(ustack)) {
|
|
+ /* Check the fragment flag. */
|
|
+ if ((tcp_ipv4_hdr->ipoffset[0] & 0x3f) != 0 ||
|
|
+ tcp_ipv4_hdr->ipoffset[1] != 0) {
|
|
+#if UIP_REASSEMBLY
|
|
+ uip_len = uip_reass();
|
|
+ if (uip_len == 0) {
|
|
+ goto drop;
|
|
+ }
|
|
+#else /* UIP_REASSEMBLY */
|
|
+ ++ustack->stats.ip.drop;
|
|
+ ++ustack->stats.ip.fragerr;
|
|
+ LOG_WARN(PFX "ip: fragment dropped.");
|
|
+ goto drop;
|
|
+#endif /* UIP_REASSEMBLY */
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (is_ipv6(ustack)) {
|
|
+ } else {
|
|
+ /* ipv4 */
|
|
+ if (uip_ip4addr_cmp(ustack->hostaddr, all_zeroes_addr4)) {
|
|
+ /* If we are configured to use ping IP address
|
|
+ configuration and hasn't been assigned an IP
|
|
+ address yet, we accept all ICMP packets. */
|
|
+#if UIP_PINGADDRCONF && !UIP_CONF_IPV6
|
|
+ if (tcp_ipv4_hdr->proto == UIP_PROTO_ICMP) {
|
|
+ LOG_WARN(PFX
|
|
+ "ip: possible ping config packet "
|
|
+ "received.");
|
|
+ goto icmp_input;
|
|
+ } else {
|
|
+ LOG_WARN(PFX
|
|
+ "ip: packet dropped since no "
|
|
+ "address assigned.");
|
|
+ goto drop;
|
|
+ }
|
|
+#endif /* UIP_PINGADDRCONF */
|
|
+ } else {
|
|
+ int broadcast_addr = 0xFFFFFFFF;
|
|
+ /* If IP broadcast support is configured, we check for
|
|
+ a broadcast UDP packet, which may be destined to us
|
|
+ */
|
|
+ if ((tcp_ipv4_hdr->proto == UIP_PROTO_UDP) &&
|
|
+ (uip_ip4addr_cmp
|
|
+ (tcp_ipv4_hdr->destipaddr, &broadcast_addr))
|
|
+ /*&&
|
|
+ uip_ipchksum() == 0xffff */
|
|
+ ) {
|
|
+ goto udp_input;
|
|
+ }
|
|
+
|
|
+ /* Check if the packet is destined for our IP address
|
|
+ */
|
|
+ if (!uip_ip4addr_cmp(tcp_ipv4_hdr->destipaddr,
|
|
+ ustack->hostaddr)) {
|
|
+ ++ustack->stats.ip.drop;
|
|
+ goto drop;
|
|
+ }
|
|
+ }
|
|
+ if (uip_ipchksum(ustack) != 0xffff) {
|
|
+ /* Compute and check the IP header checksum. */
|
|
+ ++ustack->stats.ip.drop;
|
|
+ ++ustack->stats.ip.chkerr;
|
|
+ LOG_ERR(PFX "ip: bad checksum.");
|
|
+ goto drop;
|
|
+ }
|
|
+ } /* End of ipv4 */
|
|
+
|
|
+ if (is_ipv6(ustack)) {
|
|
+ if (ipv6_hdr->ip6_nxt == UIP_PROTO_TCP) {
|
|
+ /* Check for TCP packet. If so, proceed with TCP input
|
|
+ processing. */
|
|
+ goto ndp_newdata;
|
|
+ }
|
|
+#if UIP_UDP
|
|
+ if (ipv6_hdr->ip6_nxt == UIP_PROTO_UDP) {
|
|
+ goto ndp_newdata;
|
|
+ }
|
|
+#endif /* UIP_UDP */
|
|
+
|
|
+ /* This is IPv6 ICMPv6 processing code. */
|
|
+ LOG_DEBUG(PFX "icmp6_input: length %d", ustack->uip_len);
|
|
+
|
|
+ if (ipv6_hdr->ip6_nxt != UIP_PROTO_ICMP6) {
|
|
+ /* We only allow ICMPv6 packets from here. */
|
|
+ ++ustack->stats.ip.drop;
|
|
+ ++ustack->stats.ip.protoerr;
|
|
+ goto drop;
|
|
+ }
|
|
+
|
|
+ ++ustack->stats.icmp.recv;
|
|
+
|
|
+ndp_newdata:
|
|
+ /* This call is to handle the IPv6 Network Discovery Protocol */
|
|
+ ustack->uip_flags = UIP_NEWDATA;
|
|
+ ustack->uip_slen = 0;
|
|
+ndp_send:
|
|
+ UIP_NDP_CALL(ustack);
|
|
+ if (ustack->uip_slen != 0) {
|
|
+ ustack->uip_len = ustack->uip_slen;
|
|
+ goto send;
|
|
+ } else {
|
|
+ goto drop;
|
|
+ }
|
|
+ } else {
|
|
+ /* IPv4 Processing */
|
|
+ if (tcp_ipv4_hdr->proto == UIP_PROTO_TCP) {
|
|
+ /* Check for TCP packet. If so, proceed with TCP input
|
|
+ processing. */
|
|
+ goto tcp_input;
|
|
+ }
|
|
+#if UIP_UDP
|
|
+ if (tcp_ipv4_hdr->proto == UIP_PROTO_UDP) {
|
|
+ goto udp_input;
|
|
+ }
|
|
+#endif /* UIP_UDP */
|
|
+
|
|
+ /* ICMPv4 processing code follows. */
|
|
+ if (tcp_ipv4_hdr->proto != UIP_PROTO_ICMP) {
|
|
+ /* We only allow ICMP packets from here. */
|
|
+ ++ustack->stats.ip.drop;
|
|
+ ++ustack->stats.ip.protoerr;
|
|
+ LOG_DEBUG(PFX "ip: neither tcp nor icmp.");
|
|
+ goto drop;
|
|
+ }
|
|
+#if UIP_PINGADDRCONF
|
|
+icmp_input:
|
|
+#endif /* UIP_PINGADDRCONF */
|
|
+ ++ustack->stats.icmp.recv;
|
|
+
|
|
+ /* ICMP echo (i.e., ping) processing. This is simple, we only
|
|
+ change the ICMP type from ECHO to ECHO_REPLY and adjust the
|
|
+ ICMP checksum before we return the packet. */
|
|
+ if (icmpv4_hdr->type != ICMP_ECHO) {
|
|
+ ++ustack->stats.icmp.drop;
|
|
+ ++ustack->stats.icmp.typeerr;
|
|
+ LOG_DEBUG(PFX "icmp: not icmp echo.");
|
|
+ goto drop;
|
|
+ }
|
|
+
|
|
+ /* If we are configured to use ping IP address assignment, we
|
|
+ use the destination IP address of this ping packet and assign
|
|
+ it to ourself. */
|
|
+#if UIP_PINGADDRCONF
|
|
+ if ((ustack->hostaddr[0] | ustack->hostaddr[1]) == 0) {
|
|
+ ustack->hostaddr[0] = tcp_ipv4_hdr->destipaddr[0];
|
|
+ ustack->hostaddr[1] = tcp_ipv4_hdr->destipaddr[1];
|
|
+ }
|
|
+#endif /* UIP_PINGADDRCONF */
|
|
+
|
|
+ icmpv4_hdr->type = ICMP_ECHO_REPLY;
|
|
+
|
|
+ if (icmpv4_hdr->icmpchksum >= htons(0xffff -
|
|
+ (ICMP_ECHO << 8))) {
|
|
+ icmpv4_hdr->icmpchksum += htons(ICMP_ECHO << 8) + 1;
|
|
+ } else {
|
|
+ icmpv4_hdr->icmpchksum += htons(ICMP_ECHO << 8);
|
|
+ }
|
|
+
|
|
+ /* Swap IP addresses. */
|
|
+ uip_ip4addr_copy(tcp_ipv4_hdr->destipaddr,
|
|
+ tcp_ipv4_hdr->srcipaddr);
|
|
+ uip_ip4addr_copy(tcp_ipv4_hdr->srcipaddr, ustack->hostaddr);
|
|
+
|
|
+ ++ustack->stats.icmp.sent;
|
|
+ goto send;
|
|
+
|
|
+ /* End of IPv4 input header processing code. */
|
|
+ }
|
|
+
|
|
+#if UIP_UDP
|
|
+ /* UDP input processing. */
|
|
+ udp_input:
|
|
+ /* UDP processing is really just a hack. We don't do anything to the
|
|
+ UDP/IP headers, but let the UDP application do all the hard
|
|
+ work. If the application sets uip_slen, it has a packet to
|
|
+ send. */
|
|
+#if UIP_UDP_CHECKSUMS
|
|
+ ustack->uip_len = ustack->uip_len - uip_ip_udph_len;
|
|
+ ustack->uip_appdata = ustack->network_layer + uip_ip_udph_len;
|
|
+ if (UDPBUF(ustack)->udpchksum != 0 && uip_udpchksum(ustack) != 0xffff) {
|
|
+ ++ustack->stats.udp.drop;
|
|
+ ++ustack->stats.udp.chkerr;
|
|
+ LOG_DEBUG(PFX "udp: bad checksum.");
|
|
+ goto drop;
|
|
+ }
|
|
+#else /* UIP_UDP_CHECKSUMS */
|
|
+ uip_len = uip_len - uip_ip_udph_len;
|
|
+#endif /* UIP_UDP_CHECKSUMS */
|
|
+
|
|
+ if (is_ipv6(ustack))
|
|
+ goto udp_found;
|
|
+
|
|
+ /* Demultiplex this UDP packet between the UDP "connections". */
|
|
+ for (ustack->uip_udp_conn = &ustack->uip_udp_conns[0];
|
|
+ ustack->uip_udp_conn < &ustack->uip_udp_conns[UIP_UDP_CONNS];
|
|
+ ++ustack->uip_udp_conn) {
|
|
+ /* If the local UDP port is non-zero, the connection is
|
|
+ considered to be used. If so, the local port number is
|
|
+ checked against the destination port number in the
|
|
+ received packet. If the two port
|
|
+ numbers match, the remote port number is checked if the
|
|
+ connection is bound to a remote port. Finally, if the
|
|
+ connection is bound to a remote IP address, the source IP
|
|
+ address of the packet is checked. */
|
|
+
|
|
+ if (ustack->uip_udp_conn->lport != 0 &&
|
|
+ UDPBUF(ustack)->destport == ustack->uip_udp_conn->lport &&
|
|
+ (ustack->uip_udp_conn->rport == 0 ||
|
|
+ UDPBUF(ustack)->srcport == ustack->uip_udp_conn->rport) &&
|
|
+ (uip_ip4addr_cmp(ustack->uip_udp_conn->ripaddr,
|
|
+ all_zeroes_addr4) ||
|
|
+ uip_ip4addr_cmp(ustack->uip_udp_conn->ripaddr,
|
|
+ all_ones_addr4) ||
|
|
+ uip_ip4addr_cmp(tcp_ipv4_hdr->srcipaddr,
|
|
+ ustack->uip_udp_conn->ripaddr))) {
|
|
+ goto udp_found;
|
|
+ }
|
|
+ }
|
|
+ LOG_DEBUG(PFX
|
|
+ "udp: no matching connection found: dest port: %d src port: "
|
|
+ "%d", udp_hdr->destport, udp_hdr->srcport);
|
|
+ goto drop;
|
|
+
|
|
+udp_found:
|
|
+ ustack->uip_conn = NULL;
|
|
+ ustack->uip_flags = UIP_NEWDATA;
|
|
+ ustack->uip_sappdata = ustack->uip_appdata = ustack->network_layer +
|
|
+ uip_ip_udph_len;
|
|
+ ustack->uip_slen = 0;
|
|
+ if (is_ipv6(ustack))
|
|
+ UIP_NDP_CALL(ustack);
|
|
+ else
|
|
+ UIP_UDP_APPCALL(ustack);
|
|
+udp_send:
|
|
+ if (ustack->uip_slen == 0) {
|
|
+ goto drop;
|
|
+ }
|
|
+
|
|
+ ustack->uip_len = ustack->uip_slen + uip_ip_udph_len;
|
|
+
|
|
+ if (is_ipv6(ustack)) {
|
|
+ goto ip_send_nolen;
|
|
+ } else {
|
|
+ tcp_ipv4_hdr->len[0] = (ustack->uip_len >> 8);
|
|
+ tcp_ipv4_hdr->len[1] = (ustack->uip_len & 0xff);
|
|
+ tcp_ipv4_hdr->ttl = ustack->uip_udp_conn->ttl;
|
|
+ tcp_ipv4_hdr->proto = UIP_PROTO_UDP;
|
|
+ }
|
|
+
|
|
+ udp_hdr->udplen = htons(ustack->uip_slen + UIP_UDPH_LEN);
|
|
+ udp_hdr->udpchksum = 0;
|
|
+
|
|
+ udp_hdr->srcport = ustack->uip_udp_conn->lport;
|
|
+ udp_hdr->destport = ustack->uip_udp_conn->rport;
|
|
+
|
|
+ uip_ip4addr_copy(tcp_ipv4_hdr->srcipaddr, ustack->hostaddr);
|
|
+ uip_ip4addr_copy(tcp_ipv4_hdr->destipaddr,
|
|
+ ustack->uip_udp_conn->ripaddr);
|
|
+
|
|
+ ustack->uip_appdata = ustack->network_layer + uip_ip_tcph_len;
|
|
+
|
|
+ if (ustack->uip_buf == NULL) {
|
|
+ LOG_WARN(PFX "uip_buf == NULL on udp send");
|
|
+ goto drop;
|
|
+ }
|
|
+#if UIP_UDP_CHECKSUMS
|
|
+ /* Calculate UDP checksum. */
|
|
+ udp_hdr->udpchksum = ~(uip_udpchksum(ustack));
|
|
+ if (udp_hdr->udpchksum == 0) {
|
|
+ udp_hdr->udpchksum = 0xffff;
|
|
+ }
|
|
+#endif /* UIP_UDP_CHECKSUMS */
|
|
+
|
|
+ goto ip_send_nolen;
|
|
+#endif /* UIP_UDP */
|
|
+
|
|
+ /* TCP input processing. */
|
|
+tcp_input:
|
|
+ ++ustack->stats.tcp.recv;
|
|
+
|
|
+ /* Start of TCP input header processing code. */
|
|
+
|
|
+ if (uip_tcpchksum(ustack) != 0xffff) { /* Compute and check the TCP
|
|
+ checksum. */
|
|
+ ++ustack->stats.tcp.drop;
|
|
+ ++ustack->stats.tcp.chkerr;
|
|
+ LOG_WARN(PFX "tcp: bad checksum.");
|
|
+ goto drop;
|
|
+ }
|
|
+
|
|
+ if (is_ipv6(ustack)) {
|
|
+ /* Demultiplex this segment. */
|
|
+ /* First check any active connections. */
|
|
+ for (uip_connr = &ustack->uip_conns[0];
|
|
+ uip_connr <= &ustack->uip_conns[UIP_CONNS - 1];
|
|
+ ++uip_connr) {
|
|
+ if (uip_connr->tcpstateflags != UIP_CLOSED &&
|
|
+ tcp_hdr->destport == uip_connr->lport &&
|
|
+ tcp_hdr->srcport == uip_connr->rport &&
|
|
+ uip_ip6addr_cmp(IPv6_BUF(ustack)->srcipaddr,
|
|
+ uip_connr->ripaddr)) {
|
|
+ goto found;
|
|
+ }
|
|
+ }
|
|
+ } else {
|
|
+ /* Demultiplex this segment. */
|
|
+ /* First check any active connections. */
|
|
+ for (uip_connr = &ustack->uip_conns[0];
|
|
+ uip_connr <= &ustack->uip_conns[UIP_CONNS - 1];
|
|
+ ++uip_connr) {
|
|
+ if (uip_connr->tcpstateflags != UIP_CLOSED &&
|
|
+ tcp_hdr->destport == uip_connr->lport &&
|
|
+ tcp_hdr->srcport == uip_connr->rport &&
|
|
+ uip_ip4addr_cmp(tcp_ipv4_hdr->srcipaddr,
|
|
+ uip_connr->ripaddr)) {
|
|
+ goto found;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /* If we didn't find and active connection that expected the packet,
|
|
+ either this packet is an old duplicate, or this is a SYN packet
|
|
+ destined for a connection in LISTEN. If the SYN flag isn't set,
|
|
+ it is an old packet and we send a RST. */
|
|
+ if ((tcp_hdr->flags & TCP_CTL) != TCP_SYN) {
|
|
+ goto reset;
|
|
+ }
|
|
+
|
|
+ tmp16 = tcp_hdr->destport;
|
|
+ /* Next, check listening connections. */
|
|
+ for (c = 0; c < UIP_LISTENPORTS; ++c) {
|
|
+ if (tmp16 == ustack->uip_listenports[c])
|
|
+ goto found_listen;
|
|
+ }
|
|
+
|
|
+ /* No matching connection found, so we send a RST packet. */
|
|
+ ++ustack->stats.tcp.synrst;
|
|
+reset:
|
|
+
|
|
+ /* We do not send resets in response to resets. */
|
|
+ if (tcp_hdr->flags & TCP_RST) {
|
|
+ goto drop;
|
|
+ }
|
|
+
|
|
+ ++ustack->stats.tcp.rst;
|
|
+
|
|
+ tcp_hdr->flags = TCP_RST | TCP_ACK;
|
|
+ ustack->uip_len = uip_ip_tcph_len;
|
|
+ tcp_hdr->tcpoffset = 5 << 4;
|
|
+
|
|
+ /* Flip the seqno and ackno fields in the TCP header. */
|
|
+ c = tcp_hdr->seqno[3];
|
|
+ tcp_hdr->seqno[3] = tcp_hdr->ackno[3];
|
|
+ tcp_hdr->ackno[3] = c;
|
|
+
|
|
+ c = tcp_hdr->seqno[2];
|
|
+ tcp_hdr->seqno[2] = tcp_hdr->ackno[2];
|
|
+ tcp_hdr->ackno[2] = c;
|
|
+
|
|
+ c = tcp_hdr->seqno[1];
|
|
+ tcp_hdr->seqno[1] = tcp_hdr->ackno[1];
|
|
+ tcp_hdr->ackno[1] = c;
|
|
+
|
|
+ c = tcp_hdr->seqno[0];
|
|
+ tcp_hdr->seqno[0] = tcp_hdr->ackno[0];
|
|
+ tcp_hdr->ackno[0] = c;
|
|
+
|
|
+ /* We also have to increase the sequence number we are
|
|
+ acknowledging. If the least significant byte overflowed, we need
|
|
+ to propagate the carry to the other bytes as well. */
|
|
+ if (++tcp_hdr->ackno[3] == 0) {
|
|
+ if (++tcp_hdr->ackno[2] == 0) {
|
|
+ if (++tcp_hdr->ackno[1] == 0) {
|
|
+ ++tcp_hdr->ackno[0];
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /* Swap port numbers. */
|
|
+ tmp16 = tcp_hdr->srcport;
|
|
+ tcp_hdr->srcport = tcp_hdr->destport;
|
|
+ tcp_hdr->destport = tmp16;
|
|
+
|
|
+ /* Swap IP addresses. */
|
|
+ if (is_ipv6(ustack)) {
|
|
+ uip_ip6addr_copy(IPv6_BUF(ustack)->destipaddr,
|
|
+ IPv6_BUF(ustack)->srcipaddr);
|
|
+ uip_ip6addr_copy(IPv6_BUF(ustack)->srcipaddr,
|
|
+ ustack->hostaddr6);
|
|
+ } else {
|
|
+ uip_ip4addr_copy(tcp_ipv4_hdr->destipaddr,
|
|
+ tcp_ipv4_hdr->srcipaddr);
|
|
+ uip_ip4addr_copy(tcp_ipv4_hdr->srcipaddr, ustack->hostaddr);
|
|
+ }
|
|
+
|
|
+ /* And send out the RST packet! */
|
|
+ goto tcp_send_noconn;
|
|
+
|
|
+ /* This label will be jumped to if we matched the incoming packet
|
|
+ with a connection in LISTEN. In that case, we should create a new
|
|
+ connection and send a SYNACK in return. */
|
|
+found_listen:
|
|
+ /* First we check if there are any connections avaliable. Unused
|
|
+ connections are kept in the same table as used connections, but
|
|
+ unused ones have the tcpstate set to CLOSED. Also, connections in
|
|
+ TIME_WAIT are kept track of and we'll use the oldest one if no
|
|
+ CLOSED connections are found. Thanks to Eddie C. Dost for a very
|
|
+ nice algorithm for the TIME_WAIT search. */
|
|
+ uip_connr = 0;
|
|
+ for (c = 0; c < UIP_CONNS; ++c) {
|
|
+ if (ustack->uip_conns[c].tcpstateflags == UIP_CLOSED) {
|
|
+ uip_connr = &ustack->uip_conns[c];
|
|
+ break;
|
|
+ }
|
|
+ if (ustack->uip_conns[c].tcpstateflags == UIP_TIME_WAIT) {
|
|
+ if (uip_connr == 0 ||
|
|
+ ustack->uip_conns[c].timer > uip_connr->timer) {
|
|
+ uip_connr = &ustack->uip_conns[c];
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (uip_connr == 0) {
|
|
+ /* All connections are used already, we drop packet and hope
|
|
+ that the remote end will retransmit the packet at a time when
|
|
+ we have more spare connections. */
|
|
+ ++ustack->stats.tcp.syndrop;
|
|
+ LOG_WARN(PFX "tcp: found no unused connections.");
|
|
+ goto drop;
|
|
+ }
|
|
+ ustack->uip_conn = uip_connr;
|
|
+
|
|
+ /* Fill in the necessary fields for the new connection. */
|
|
+ uip_connr->rto = uip_connr->timer = UIP_RTO;
|
|
+ uip_connr->sa = 0;
|
|
+ uip_connr->sv = 4;
|
|
+ uip_connr->nrtx = 0;
|
|
+ uip_connr->lport = tcp_hdr->destport;
|
|
+ uip_connr->rport = tcp_hdr->srcport;
|
|
+ if (is_ipv6(ustack)) {
|
|
+ uip_ip6addr_copy(uip_connr->ripaddr,
|
|
+ IPv6_BUF(ustack)->srcipaddr);
|
|
+ } else {
|
|
+ uip_ip4addr_copy(uip_connr->ripaddr, tcp_ipv4_hdr->srcipaddr);
|
|
+ }
|
|
+ uip_connr->tcpstateflags = UIP_SYN_RCVD;
|
|
+
|
|
+ uip_connr->snd_nxt[0] = ustack->iss[0];
|
|
+ uip_connr->snd_nxt[1] = ustack->iss[1];
|
|
+ uip_connr->snd_nxt[2] = ustack->iss[2];
|
|
+ uip_connr->snd_nxt[3] = ustack->iss[3];
|
|
+ uip_connr->len = 1;
|
|
+
|
|
+ /* rcv_nxt should be the seqno from the incoming packet + 1. */
|
|
+ uip_connr->rcv_nxt[3] = tcp_hdr->seqno[3];
|
|
+ uip_connr->rcv_nxt[2] = tcp_hdr->seqno[2];
|
|
+ uip_connr->rcv_nxt[1] = tcp_hdr->seqno[1];
|
|
+ uip_connr->rcv_nxt[0] = tcp_hdr->seqno[0];
|
|
+ uip_add_rcv_nxt(ustack, 1);
|
|
+
|
|
+ /* Parse the TCP MSS option, if present. */
|
|
+ if ((tcp_hdr->tcpoffset & 0xf0) > 0x50) {
|
|
+ for (c = 0; c < ((tcp_hdr->tcpoffset >> 4) - 5) << 2;) {
|
|
+ ustack->opt =
|
|
+ ustack->uip_buf[uip_ip_tcph_len + UIP_LLH_LEN + c];
|
|
+ if (ustack->opt == TCP_OPT_END) {
|
|
+ /* End of options. */
|
|
+ break;
|
|
+ } else if (ustack->opt == TCP_OPT_NOOP) {
|
|
+ ++c;
|
|
+ /* NOP option. */
|
|
+ } else if (ustack->opt == TCP_OPT_MSS &&
|
|
+ ustack->uip_buf[uip_ip_tcph_len +
|
|
+ UIP_LLH_LEN + 1 + c] ==
|
|
+ TCP_OPT_MSS_LEN) {
|
|
+ /* An MSS option with the right option length.*/
|
|
+ tmp16 =
|
|
+ ((u16_t) ustack->
|
|
+ uip_buf[uip_ip_tcph_len + UIP_LLH_LEN + 2 +
|
|
+ c] << 8) | (u16_t) ustack->
|
|
+ uip_buf[uip_ip_tcph_len + UIP_LLH_LEN + 3 +
|
|
+ c];
|
|
+ uip_connr->initialmss = uip_connr->mss =
|
|
+ tmp16 > UIP_TCP_MSS ? UIP_TCP_MSS : tmp16;
|
|
+
|
|
+ /* And we are done processing options. */
|
|
+ break;
|
|
+ } else {
|
|
+ /* All other options have a length field, so
|
|
+ that we easily can skip past them. */
|
|
+ if (ustack->
|
|
+ uip_buf[uip_ip_tcph_len + UIP_LLH_LEN + 1 +
|
|
+ c] == 0) {
|
|
+ /* If the length field is zero, the
|
|
+ options are malformed
|
|
+ and we don't process them further. */
|
|
+ break;
|
|
+ }
|
|
+ c += ustack->uip_buf[uip_ip_tcph_len +
|
|
+ UIP_LLH_LEN + 1 + c];
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /* Our response will be a SYNACK. */
|
|
+#if UIP_ACTIVE_OPEN
|
|
+tcp_send_synack:
|
|
+ tcp_hdr->flags = TCP_ACK;
|
|
+
|
|
+tcp_send_syn:
|
|
+ tcp_hdr->flags |= TCP_SYN;
|
|
+#else /* UIP_ACTIVE_OPEN */
|
|
+tcp_send_synack:
|
|
+ tcp_hdr->flags = TCP_SYN | TCP_ACK;
|
|
+#endif /* UIP_ACTIVE_OPEN */
|
|
+
|
|
+ /* We send out the TCP Maximum Segment Size option with our
|
|
+ SYNACK. */
|
|
+ tcp_hdr->optdata[0] = TCP_OPT_MSS;
|
|
+ tcp_hdr->optdata[1] = TCP_OPT_MSS_LEN;
|
|
+ tcp_hdr->optdata[2] = (UIP_TCP_MSS) / 256;
|
|
+ tcp_hdr->optdata[3] = (UIP_TCP_MSS) & 255;
|
|
+ ustack->uip_len = uip_ip_tcph_len + TCP_OPT_MSS_LEN;
|
|
+ tcp_hdr->tcpoffset = ((UIP_TCPH_LEN + TCP_OPT_MSS_LEN) / 4) << 4;
|
|
+ goto tcp_send;
|
|
+
|
|
+ /* This label will be jumped to if we found an active connection. */
|
|
+found:
|
|
+ ustack->uip_conn = uip_connr;
|
|
+ ustack->uip_flags = 0;
|
|
+ /* We do a very naive form of TCP reset processing; we just accept
|
|
+ any RST and kill our connection. We should in fact check if the
|
|
+ sequence number of this reset is wihtin our advertised window
|
|
+ before we accept the reset. */
|
|
+ if (tcp_hdr->flags & TCP_RST) {
|
|
+ uip_connr->tcpstateflags = UIP_CLOSED;
|
|
+ LOG_WARN(PFX "tcp: got reset, aborting connection.");
|
|
+ ustack->uip_flags = UIP_ABORT;
|
|
+ UIP_APPCALL(ustack);
|
|
+ goto drop;
|
|
+ }
|
|
+ /* Calculated the length of the data, if the application has sent
|
|
+ any data to us. */
|
|
+ c = (tcp_hdr->tcpoffset >> 4) << 2;
|
|
+ /* uip_len will contain the length of the actual TCP data. This is
|
|
+ calculated by subtracing the length of the TCP header (in
|
|
+ c) and the length of the IP header (20 bytes). */
|
|
+ ustack->uip_len = ustack->uip_len - c - uip_iph_len;
|
|
+
|
|
+ /* First, check if the sequence number of the incoming packet is
|
|
+ what we're expecting next. If not, we send out an ACK with the
|
|
+ correct numbers in. */
|
|
+ if (!(((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_SYN_SENT) &&
|
|
+ ((tcp_hdr->flags & TCP_CTL) == (TCP_SYN | TCP_ACK)))) {
|
|
+ if ((ustack->uip_len > 0
|
|
+ || ((tcp_hdr->flags & (TCP_SYN | TCP_FIN)) != 0))
|
|
+ && (tcp_hdr->seqno[0] != uip_connr->rcv_nxt[0]
|
|
+ || tcp_hdr->seqno[1] != uip_connr->rcv_nxt[1]
|
|
+ || tcp_hdr->seqno[2] != uip_connr->rcv_nxt[2]
|
|
+ || tcp_hdr->seqno[3] != uip_connr->rcv_nxt[3])) {
|
|
+ goto tcp_send_ack;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ {
|
|
+ u8_t uip_acc32[4];
|
|
+
|
|
+ /* Next, check if the incoming segment acknowledges any outstanding
|
|
+ data. If so, we update the sequence number, reset the length of
|
|
+ the outstanding data, calculate RTT estimations, and reset the
|
|
+ retransmission timer. */
|
|
+ if ((tcp_hdr->flags & TCP_ACK) && uip_outstanding(uip_connr)) {
|
|
+ uip_add32(uip_connr->snd_nxt, uip_connr->len,
|
|
+ uip_acc32);
|
|
+
|
|
+ if (tcp_hdr->ackno[0] == uip_acc32[0] &&
|
|
+ tcp_hdr->ackno[1] == uip_acc32[1] &&
|
|
+ tcp_hdr->ackno[2] == uip_acc32[2] &&
|
|
+ tcp_hdr->ackno[3] == uip_acc32[3]) {
|
|
+ /* Update sequence number. */
|
|
+ uip_connr->snd_nxt[0] = uip_acc32[0];
|
|
+ uip_connr->snd_nxt[1] = uip_acc32[1];
|
|
+ uip_connr->snd_nxt[2] = uip_acc32[2];
|
|
+ uip_connr->snd_nxt[3] = uip_acc32[3];
|
|
+
|
|
+ /* Do RTT estimation, unless we have done
|
|
+ retransmissions. */
|
|
+ if (uip_connr->nrtx == 0) {
|
|
+ signed char m;
|
|
+ m = uip_connr->rto - uip_connr->timer;
|
|
+ /* This is taken directly from VJs
|
|
+ original code in his paper */
|
|
+ m = m - (uip_connr->sa >> 3);
|
|
+ uip_connr->sa += m;
|
|
+ if (m < 0) {
|
|
+ m = -m;
|
|
+ }
|
|
+ m = m - (uip_connr->sv >> 2);
|
|
+ uip_connr->sv += m;
|
|
+ uip_connr->rto =
|
|
+ (uip_connr->sa >> 3) +
|
|
+ uip_connr->sv;
|
|
+
|
|
+ }
|
|
+ /* Set the acknowledged flag. */
|
|
+ ustack->uip_flags = UIP_ACKDATA;
|
|
+ /* Reset the retransmission timer. */
|
|
+ uip_connr->timer = uip_connr->rto;
|
|
+
|
|
+ /* Reset length of outstanding data. */
|
|
+ uip_connr->len = 0;
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ /* Do different things depending on in what state the connection is. */
|
|
+ switch (uip_connr->tcpstateflags & UIP_TS_MASK) {
|
|
+ /* CLOSED and LISTEN are not handled here. CLOSE_WAIT is not
|
|
+ implemented, since we force the application to close when the
|
|
+ peer sends a FIN (hence the application goes directly from
|
|
+ ESTABLISHED to LAST_ACK). */
|
|
+ case UIP_SYN_RCVD:
|
|
+ /* In SYN_RCVD we have sent out a SYNACK in response to a SYN,
|
|
+ and we are waiting for an ACK that acknowledges the data we
|
|
+ sent out the last time. Therefore, we want to have the
|
|
+ UIP_ACKDATA flag set.
|
|
+ If so, we enter the ESTABLISHED state. */
|
|
+ if (ustack->uip_flags & UIP_ACKDATA) {
|
|
+ uip_connr->tcpstateflags = UIP_ESTABLISHED;
|
|
+ ustack->uip_flags = UIP_CONNECTED;
|
|
+ uip_connr->len = 0;
|
|
+ if (ustack->uip_len > 0) {
|
|
+ ustack->uip_flags |= UIP_NEWDATA;
|
|
+ uip_add_rcv_nxt(ustack, ustack->uip_len);
|
|
+ }
|
|
+ ustack->uip_slen = 0;
|
|
+ UIP_APPCALL(ustack);
|
|
+ goto appsend;
|
|
+ }
|
|
+ goto drop;
|
|
+#if UIP_ACTIVE_OPEN
|
|
+ case UIP_SYN_SENT:
|
|
+ /* In SYN_SENT, we wait for a SYNACK that is sent in response to
|
|
+ our SYN. The rcv_nxt is set to sequence number in the SYNACK
|
|
+ plus one, and we send an ACK. We move into the ESTABLISHED
|
|
+ state. */
|
|
+ if ((ustack->uip_flags & UIP_ACKDATA) &&
|
|
+ (tcp_hdr->flags & TCP_CTL) == (TCP_SYN | TCP_ACK)) {
|
|
+
|
|
+ /* Parse the TCP MSS option, if present. */
|
|
+ if ((tcp_hdr->tcpoffset & 0xf0) > 0x50) {
|
|
+ for (c = 0;
|
|
+ c <
|
|
+ ((tcp_hdr->tcpoffset >> 4) - 5) << 2;) {
|
|
+ ustack->opt =
|
|
+ ustack->uip_buf[uip_ip_tcph_len +
|
|
+ UIP_LLH_LEN + c];
|
|
+ if (ustack->opt == TCP_OPT_END) {
|
|
+ /* End of options. */
|
|
+ break;
|
|
+ } else if (ustack->opt ==
|
|
+ TCP_OPT_NOOP) {
|
|
+ ++c;
|
|
+ /* NOP option. */
|
|
+ } else if (ustack->opt == TCP_OPT_MSS &&
|
|
+ ustack->
|
|
+ uip_buf[uip_ip_tcph_len +
|
|
+ UIP_LLH_LEN + 1 +
|
|
+ c] ==
|
|
+ TCP_OPT_MSS_LEN) {
|
|
+ /* An MSS option with the right
|
|
+ option length. */
|
|
+ tmp16 =
|
|
+ (ustack->
|
|
+ uip_buf[uip_ip_tcph_len +
|
|
+ UIP_LLH_LEN + 2 +
|
|
+ c] << 8) | ustack->
|
|
+ uip_buf[uip_ip_tcph_len +
|
|
+ UIP_LLH_LEN + 3 +
|
|
+ c];
|
|
+ uip_connr->initialmss =
|
|
+ uip_connr->mss =
|
|
+ tmp16 >
|
|
+ UIP_TCP_MSS ? UIP_TCP_MSS :
|
|
+ tmp16;
|
|
+
|
|
+ /* And we are done processing
|
|
+ options. */
|
|
+ break;
|
|
+ } else {
|
|
+ /* All other options have a
|
|
+ length field, so that we
|
|
+ easily can skip past them */
|
|
+ if (ustack->
|
|
+ uip_buf[uip_ip_tcph_len +
|
|
+ UIP_LLH_LEN + 1 +
|
|
+ c] == 0) {
|
|
+ /* If the length field
|
|
+ is zero, the options
|
|
+ are malformed and we
|
|
+ don't process them
|
|
+ further. */
|
|
+ break;
|
|
+ }
|
|
+ c += ustack->
|
|
+ uip_buf[uip_ip_tcph_len +
|
|
+ UIP_LLH_LEN + 1 +
|
|
+ c];
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ uip_connr->tcpstateflags = UIP_ESTABLISHED;
|
|
+ uip_connr->rcv_nxt[0] = tcp_hdr->seqno[0];
|
|
+ uip_connr->rcv_nxt[1] = tcp_hdr->seqno[1];
|
|
+ uip_connr->rcv_nxt[2] = tcp_hdr->seqno[2];
|
|
+ uip_connr->rcv_nxt[3] = tcp_hdr->seqno[3];
|
|
+ uip_add_rcv_nxt(ustack, 1);
|
|
+ ustack->uip_flags = UIP_CONNECTED | UIP_NEWDATA;
|
|
+ uip_connr->len = 0;
|
|
+ ustack->uip_len = 0;
|
|
+ ustack->uip_slen = 0;
|
|
+ UIP_APPCALL(ustack);
|
|
+ goto appsend;
|
|
+ }
|
|
+ /* Inform the application that the connection failed */
|
|
+ ustack->uip_flags = UIP_ABORT;
|
|
+ UIP_APPCALL(ustack);
|
|
+ /* The connection is closed after we send the RST */
|
|
+ ustack->uip_conn->tcpstateflags = UIP_CLOSED;
|
|
+ goto reset;
|
|
+#endif /* UIP_ACTIVE_OPEN */
|
|
+
|
|
+ case UIP_ESTABLISHED:
|
|
+ /* In the ESTABLISHED state, we call upon the application to
|
|
+ feed data into the uip_buf. If the UIP_ACKDATA flag is set,
|
|
+ the application should put new data into the buffer,
|
|
+ otherwise we are retransmitting an old segment, and the
|
|
+ application should put that data into the buffer.
|
|
+
|
|
+ If the incoming packet is a FIN, we should close the
|
|
+ connection on this side as well, and we send out a FIN and
|
|
+ enter the LAST_ACK state. We require that there is no
|
|
+ outstanding data; otherwise the sequence numbers will be
|
|
+ screwed up. */
|
|
+
|
|
+ if (tcp_hdr->flags & TCP_FIN
|
|
+ && !(uip_connr->tcpstateflags & UIP_STOPPED)) {
|
|
+ if (uip_outstanding(uip_connr)) {
|
|
+ goto drop;
|
|
+ }
|
|
+ uip_add_rcv_nxt(ustack, 1 + ustack->uip_len);
|
|
+ ustack->uip_flags |= UIP_CLOSE;
|
|
+ if (ustack->uip_len > 0) {
|
|
+ ustack->uip_flags |= UIP_NEWDATA;
|
|
+ }
|
|
+ UIP_APPCALL(ustack);
|
|
+ uip_connr->len = 1;
|
|
+ uip_connr->tcpstateflags = UIP_LAST_ACK;
|
|
+ uip_connr->nrtx = 0;
|
|
+ tcp_send_finack:
|
|
+ tcp_hdr->flags = TCP_FIN | TCP_ACK;
|
|
+ goto tcp_send_nodata;
|
|
+ }
|
|
+
|
|
+ /* Check the URG flag. If this is set, the segment carries
|
|
+ urgent data that we must pass to the application. */
|
|
+ if ((tcp_hdr->flags & TCP_URG) != 0) {
|
|
+#if UIP_URGDATA > 0
|
|
+ uip_urglen = (tcp_hdr->urgp[0] << 8) | tcp_hdr->urgp[1];
|
|
+ if (uip_urglen > uip_len) {
|
|
+ /* There is more urgent data in the next segment
|
|
+ to come. */
|
|
+ uip_urglen = uip_len;
|
|
+ }
|
|
+ uip_add_rcv_nxt(uip_urglen);
|
|
+ uip_len -= uip_urglen;
|
|
+ uip_urgdata = uip_appdata;
|
|
+ uip_appdata += uip_urglen;
|
|
+ } else {
|
|
+ uip_urglen = 0;
|
|
+#else /* UIP_URGDATA > 0 */
|
|
+ ustack->uip_appdata =
|
|
+ ((char *)ustack->uip_appdata) +
|
|
+ ((tcp_hdr->urgp[0] << 8) | tcp_hdr->urgp[1]);
|
|
+ ustack->uip_len -=
|
|
+ (tcp_hdr->urgp[0] << 8) | tcp_hdr->urgp[1];
|
|
+#endif /* UIP_URGDATA > 0 */
|
|
+ }
|
|
+
|
|
+ /* If uip_len > 0 we have TCP data in the packet, and we flag
|
|
+ this by setting the UIP_NEWDATA flag and update the sequence
|
|
+ number we acknowledge. If the application has stopped the
|
|
+ dataflow using uip_stop(), we must not accept any data
|
|
+ packets from the remote host. */
|
|
+ if (ustack->uip_len > 0
|
|
+ && !(uip_connr->tcpstateflags & UIP_STOPPED)) {
|
|
+ ustack->uip_flags |= UIP_NEWDATA;
|
|
+ uip_add_rcv_nxt(ustack, ustack->uip_len);
|
|
+ }
|
|
+
|
|
+ /* Check if the available buffer space advertised by the other
|
|
+ end is smaller than the initial MSS for this connection.
|
|
+ If so, we set the current MSS to the window size to ensure
|
|
+ that the application does not send more data than the other
|
|
+ end can handle.
|
|
+
|
|
+ If the remote host advertises a zero window, we set the MSS
|
|
+ to the initial MSS so that the application will send an
|
|
+ entire MSS of data. This data will not be acknowledged by
|
|
+ the receiver, and the application will retransmit it.
|
|
+ This is called the "persistent timer" and uses the
|
|
+ retransmission mechanim.
|
|
+ */
|
|
+ tmp16 =
|
|
+ ((u16_t) tcp_hdr->wnd[0] << 8) + (u16_t) tcp_hdr->wnd[1];
|
|
+ if (tmp16 > uip_connr->initialmss || tmp16 == 0) {
|
|
+ tmp16 = uip_connr->initialmss;
|
|
+ }
|
|
+ uip_connr->mss = tmp16;
|
|
+
|
|
+ /* If this packet constitutes an ACK for outstanding data
|
|
+ (flagged by the UIP_ACKDATA flag, we should call the
|
|
+ application since it might want to send more data.
|
|
+ If the incoming packet had data from the peer
|
|
+ (as flagged by the UIP_NEWDATA flag), the application
|
|
+ must also be notified.
|
|
+
|
|
+ When the application is called, the global variable uip_len
|
|
+ contains the length of the incoming data. The application can
|
|
+ access the incoming data through the global pointer
|
|
+ uip_appdata, which usually points uip_ip_tcph_len +
|
|
+ UIP_LLH_LEN bytes into the uip_buf array.
|
|
+
|
|
+ If the application wishes to send any data, this data should
|
|
+ be put into the uip_appdata and the length of the data should
|
|
+ be put into uip_len. If the application don't have any data
|
|
+ to send, uip_len must be set to 0. */
|
|
+ if (ustack->uip_flags & (UIP_NEWDATA | UIP_ACKDATA)) {
|
|
+ ustack->uip_slen = 0;
|
|
+ UIP_APPCALL(ustack);
|
|
+
|
|
+ appsend:
|
|
+
|
|
+ if (ustack->uip_flags & UIP_ABORT) {
|
|
+ ustack->uip_slen = 0;
|
|
+ uip_connr->tcpstateflags = UIP_CLOSED;
|
|
+ tcp_hdr->flags = TCP_RST | TCP_ACK;
|
|
+ goto tcp_send_nodata;
|
|
+ }
|
|
+
|
|
+ if (ustack->uip_flags & UIP_CLOSE) {
|
|
+ ustack->uip_slen = 0;
|
|
+ uip_connr->len = 1;
|
|
+ uip_connr->tcpstateflags = UIP_FIN_WAIT_1;
|
|
+ uip_connr->nrtx = 0;
|
|
+ tcp_hdr->flags = TCP_FIN | TCP_ACK;
|
|
+ goto tcp_send_nodata;
|
|
+ }
|
|
+
|
|
+ /* If uip_slen > 0, the application has data to be sent
|
|
+ */
|
|
+ if (ustack->uip_slen > 0) {
|
|
+
|
|
+ /* If the connection has acknowledged data, the
|
|
+ contents of the ->len variable should be
|
|
+ discarded. */
|
|
+ if ((ustack->uip_flags & UIP_ACKDATA) != 0) {
|
|
+ uip_connr->len = 0;
|
|
+ }
|
|
+
|
|
+ /* If the ->len variable is non-zero the
|
|
+ connection has already data in transit and
|
|
+ cannot send anymore right now. */
|
|
+ if (uip_connr->len == 0) {
|
|
+
|
|
+ /* The application cannot send more than
|
|
+ what is allowed by the mss (the
|
|
+ minumum of the MSS and the available
|
|
+ window). */
|
|
+ if (ustack->uip_slen > uip_connr->mss) {
|
|
+ ustack->uip_slen =
|
|
+ uip_connr->mss;
|
|
+ }
|
|
+
|
|
+ /* Remember how much data we send out
|
|
+ now so that we know when everything
|
|
+ has been acknowledged. */
|
|
+ uip_connr->len = ustack->uip_slen;
|
|
+ } else {
|
|
+
|
|
+ /* If the application already had
|
|
+ unacknowledged data, we make sure
|
|
+ that the application does not send
|
|
+ (i.e., retransmit) out more than it
|
|
+ previously sent out. */
|
|
+ ustack->uip_slen = uip_connr->len;
|
|
+ }
|
|
+ }
|
|
+ uip_connr->nrtx = 0;
|
|
+apprexmit:
|
|
+ ustack->uip_appdata = ustack->uip_sappdata;
|
|
+
|
|
+ /* If the application has data to be sent, or if the
|
|
+ incoming packet had new data in it, we must send
|
|
+ out a packet. */
|
|
+ if (ustack->uip_slen > 0 && uip_connr->len > 0) {
|
|
+ /* Add the length of the IP and TCP headers. */
|
|
+ ustack->uip_len =
|
|
+ uip_connr->len + uip_ip_tcph_len;
|
|
+ /* We always set the ACK flag in response
|
|
+ packets. */
|
|
+ tcp_hdr->flags = TCP_ACK | TCP_PSH;
|
|
+ /* Send the packet. */
|
|
+ goto tcp_send_noopts;
|
|
+ }
|
|
+ /* If there is no data to send, just send out a pure ACK
|
|
+ if there is newdata. */
|
|
+ if (ustack->uip_flags & UIP_NEWDATA) {
|
|
+ ustack->uip_len = uip_ip_tcph_len;
|
|
+ tcp_hdr->flags = TCP_ACK;
|
|
+ goto tcp_send_noopts;
|
|
+ }
|
|
+ }
|
|
+ goto drop;
|
|
+ case UIP_LAST_ACK:
|
|
+ /* We can close this connection if the peer has acknowledged our
|
|
+ FIN. This is indicated by the UIP_ACKDATA flag. */
|
|
+ if (ustack->uip_flags & UIP_ACKDATA) {
|
|
+ uip_connr->tcpstateflags = UIP_CLOSED;
|
|
+ ustack->uip_flags = UIP_CLOSE;
|
|
+ UIP_APPCALL(ustack);
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ case UIP_FIN_WAIT_1:
|
|
+ /* The application has closed the connection, but the remote
|
|
+ host hasn't closed its end yet. Thus we do nothing but wait
|
|
+ for a FIN from the other side. */
|
|
+ if (ustack->uip_len > 0) {
|
|
+ uip_add_rcv_nxt(ustack, ustack->uip_len);
|
|
+ }
|
|
+ if (tcp_hdr->flags & TCP_FIN) {
|
|
+ if (ustack->uip_flags & UIP_ACKDATA) {
|
|
+ uip_connr->tcpstateflags = UIP_TIME_WAIT;
|
|
+ uip_connr->timer = 0;
|
|
+ uip_connr->len = 0;
|
|
+ } else {
|
|
+ uip_connr->tcpstateflags = UIP_CLOSING;
|
|
+ }
|
|
+ uip_add_rcv_nxt(ustack, 1);
|
|
+ ustack->uip_flags = UIP_CLOSE;
|
|
+ UIP_APPCALL(ustack);
|
|
+ goto tcp_send_ack;
|
|
+ } else if (ustack->uip_flags & UIP_ACKDATA) {
|
|
+ uip_connr->tcpstateflags = UIP_FIN_WAIT_2;
|
|
+ uip_connr->len = 0;
|
|
+ goto drop;
|
|
+ }
|
|
+ if (ustack->uip_len > 0) {
|
|
+ goto tcp_send_ack;
|
|
+ }
|
|
+ goto drop;
|
|
+
|
|
+ case UIP_FIN_WAIT_2:
|
|
+ if (ustack->uip_len > 0) {
|
|
+ uip_add_rcv_nxt(ustack, ustack->uip_len);
|
|
+ }
|
|
+ if (tcp_hdr->flags & TCP_FIN) {
|
|
+ uip_connr->tcpstateflags = UIP_TIME_WAIT;
|
|
+ uip_connr->timer = 0;
|
|
+ uip_add_rcv_nxt(ustack, 1);
|
|
+ ustack->uip_flags = UIP_CLOSE;
|
|
+ UIP_APPCALL(ustack);
|
|
+ goto tcp_send_ack;
|
|
+ }
|
|
+ if (ustack->uip_len > 0) {
|
|
+ goto tcp_send_ack;
|
|
+ }
|
|
+ goto drop;
|
|
+
|
|
+ case UIP_TIME_WAIT:
|
|
+ goto tcp_send_ack;
|
|
+
|
|
+ case UIP_CLOSING:
|
|
+ if (ustack->uip_flags & UIP_ACKDATA) {
|
|
+ uip_connr->tcpstateflags = UIP_TIME_WAIT;
|
|
+ uip_connr->timer = 0;
|
|
+ }
|
|
+ }
|
|
+ goto drop;
|
|
+
|
|
+ /* We jump here when we are ready to send the packet, and just want
|
|
+ to set the appropriate TCP sequence numbers in the TCP header. */
|
|
+tcp_send_ack:
|
|
+ tcp_hdr->flags = TCP_ACK;
|
|
+tcp_send_nodata:
|
|
+ ustack->uip_len = uip_ip_tcph_len;
|
|
+tcp_send_noopts:
|
|
+ tcp_hdr->tcpoffset = (UIP_TCPH_LEN / 4) << 4;
|
|
+tcp_send:
|
|
+ /* We're done with the input processing. We are now ready to send a
|
|
+ reply. Our job is to fill in all the fields of the TCP and IP
|
|
+ headers before calculating the checksum and finally send the
|
|
+ packet. */
|
|
+ tcp_hdr->ackno[0] = uip_connr->rcv_nxt[0];
|
|
+ tcp_hdr->ackno[1] = uip_connr->rcv_nxt[1];
|
|
+ tcp_hdr->ackno[2] = uip_connr->rcv_nxt[2];
|
|
+ tcp_hdr->ackno[3] = uip_connr->rcv_nxt[3];
|
|
+
|
|
+ tcp_hdr->seqno[0] = uip_connr->snd_nxt[0];
|
|
+ tcp_hdr->seqno[1] = uip_connr->snd_nxt[1];
|
|
+ tcp_hdr->seqno[2] = uip_connr->snd_nxt[2];
|
|
+ tcp_hdr->seqno[3] = uip_connr->snd_nxt[3];
|
|
+
|
|
+ if (is_ipv6(ustack)) {
|
|
+ IPv6_BUF(ustack)->proto = UIP_PROTO_TCP;
|
|
+ uip_ip6addr_copy(IPv6_BUF(ustack)->srcipaddr,
|
|
+ ustack->hostaddr6);
|
|
+ uip_ip6addr_copy(IPv6_BUF(ustack)->destipaddr,
|
|
+ uip_connr->ripaddr);
|
|
+ } else {
|
|
+ tcp_ipv4_hdr->proto = UIP_PROTO_TCP;
|
|
+ uip_ip4addr_copy(tcp_ipv4_hdr->srcipaddr, ustack->hostaddr);
|
|
+ uip_ip4addr_copy(tcp_ipv4_hdr->destipaddr, uip_connr->ripaddr);
|
|
+ }
|
|
+
|
|
+ tcp_hdr->srcport = uip_connr->lport;
|
|
+ tcp_hdr->destport = uip_connr->rport;
|
|
+
|
|
+ if (uip_connr->tcpstateflags & UIP_STOPPED) {
|
|
+ /* If the connection has issued uip_stop(), we advertise a zero
|
|
+ window so that the remote host will stop sending data. */
|
|
+ tcp_hdr->wnd[0] = tcp_hdr->wnd[1] = 0;
|
|
+ } else {
|
|
+ tcp_hdr->wnd[0] = ((UIP_RECEIVE_WINDOW) >> 8);
|
|
+ tcp_hdr->wnd[1] = ((UIP_RECEIVE_WINDOW) & 0xff);
|
|
+ }
|
|
+
|
|
+tcp_send_noconn:
|
|
+ if (is_ipv6(ustack)) {
|
|
+ IPv6_BUF(ustack)->ttl = UIP_TTL;
|
|
+
|
|
+ /* For IPv6, the IP length field does not include the IPv6 IP
|
|
+ header length. */
|
|
+ IPv6_BUF(ustack)->len[0] =
|
|
+ ((ustack->uip_len - uip_iph_len) >> 8);
|
|
+ IPv6_BUF(ustack)->len[1] =
|
|
+ ((ustack->uip_len - uip_iph_len) & 0xff);
|
|
+ } else {
|
|
+ tcp_ipv4_hdr->ttl = UIP_TTL;
|
|
+ tcp_ipv4_hdr->len[0] = (ustack->uip_len >> 8);
|
|
+ tcp_ipv4_hdr->len[1] = (ustack->uip_len & 0xff);
|
|
+ }
|
|
+
|
|
+ tcp_hdr->urgp[0] = tcp_hdr->urgp[1] = 0;
|
|
+
|
|
+ /* Calculate TCP checksum. */
|
|
+ tcp_hdr->tcpchksum = 0;
|
|
+ tcp_hdr->tcpchksum = ~(uip_tcpchksum(ustack));
|
|
+
|
|
+ip_send_nolen:
|
|
+
|
|
+ if (is_ipv6(ustack)) {
|
|
+ } else {
|
|
+ tcp_ipv4_hdr->vhl = 0x45;
|
|
+ tcp_ipv4_hdr->tos = 0;
|
|
+ tcp_ipv4_hdr->ipoffset[0] = tcp_ipv4_hdr->ipoffset[1] = 0;
|
|
+ ++ustack->ipid;
|
|
+ tcp_ipv4_hdr->ipid[0] = ustack->ipid >> 8;
|
|
+ tcp_ipv4_hdr->ipid[1] = ustack->ipid & 0xff;
|
|
+ /* Calculate IP checksum. */
|
|
+ tcp_ipv4_hdr->ipchksum = 0;
|
|
+ tcp_ipv4_hdr->ipchksum = ~(uip_ipchksum(ustack));
|
|
+ }
|
|
+
|
|
+ ++ustack->stats.tcp.sent;
|
|
+send:
|
|
+ if (is_ipv6(ustack)) {
|
|
+ LOG_DEBUG(PFX "Sending packet with length %d (%d)",
|
|
+ ustack->uip_len, ipv6_hdr ? ipv6_hdr->ip6_plen : 0);
|
|
+ } else {
|
|
+ LOG_DEBUG(PFX "Sending packet with length %d (%d)",
|
|
+ ustack->uip_len,
|
|
+ (tcp_ipv4_hdr->len[0] << 8) | tcp_ipv4_hdr->len[1]);
|
|
+ }
|
|
+
|
|
+ ++ustack->stats.ip.sent;
|
|
+ /* Return and let the caller do the actual transmission. */
|
|
+ ustack->uip_flags = 0;
|
|
+ return;
|
|
+drop:
|
|
+ ustack->uip_len = 0;
|
|
+ ustack->uip_flags = 0;
|
|
+ return;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+void uip_send(struct uip_stack *ustack, const void *data, int len)
|
|
+{
|
|
+ if (len > 0) {
|
|
+ ustack->uip_slen = len;
|
|
+ if (data != ustack->uip_buf) {
|
|
+ memcpy(ustack->uip_buf, (data), ustack->uip_slen);
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+void uip_appsend(struct uip_stack *ustack, const void *data, int len)
|
|
+{
|
|
+ if (len > 0) {
|
|
+ ustack->uip_slen = len;
|
|
+ if (data != ustack->uip_sappdata) {
|
|
+ memcpy(ustack->uip_sappdata, (data), ustack->uip_slen);
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+u16_t uip_datalen(struct uip_stack *ustack)
|
|
+{
|
|
+ return ustack->uip_len;
|
|
+}
|
|
+
|
|
+/** @} */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/uip_eth.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/uip_eth.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/uip_eth.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/uip_eth.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,50 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * uip_eth.c - CNIC UIO uIP user space stack
|
|
+ *
|
|
+ */
|
|
+
|
|
+#include "uip.h"
|
|
+#include "uip_eth.h"
|
|
+
|
|
+int is_vlan_packet(struct uip_vlan_eth_hdr *hdr)
|
|
+{
|
|
+ /* The TPID field in a 802.1Q Header must be 0x8100 */
|
|
+ if (hdr->tpid == const_htons(UIP_ETHTYPE_8021Q)) {
|
|
+ return 1;
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/uip_eth.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/uip_eth.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/uip_eth.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/uip_eth.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,43 @@
|
|
+#ifndef __UIP_ETH_H__
|
|
+#define __UIP_ETH_H__
|
|
+
|
|
+#include "uipopt.h"
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Ether types
|
|
+ ******************************************************************************/
|
|
+#define UIP_ETHTYPE_ARP 0x0806
|
|
+#define UIP_ETHTYPE_IPv4 0x0800
|
|
+#define UIP_ETHTYPE_8021Q 0x8100
|
|
+#define UIP_ETHTYPE_IPv6 0x86dd
|
|
+
|
|
+/**
|
|
+ * Representation of a 48-bit Ethernet address.
|
|
+ */
|
|
+struct uip_eth_addr {
|
|
+ u8_t addr[6];
|
|
+};
|
|
+
|
|
+/**
|
|
+ * The Ethernet header.
|
|
+ */
|
|
+struct __attribute__ ((__packed__)) uip_eth_hdr {
|
|
+ struct uip_eth_addr dest;
|
|
+ struct uip_eth_addr src;
|
|
+ u16_t type;
|
|
+};
|
|
+
|
|
+/**
|
|
+ * The 802.1Q Ethernet header (VLAN).
|
|
+ */
|
|
+struct __attribute__ ((__packed__)) uip_vlan_eth_hdr {
|
|
+ struct uip_eth_addr dest;
|
|
+ struct uip_eth_addr src;
|
|
+ u16_t tpid;
|
|
+ u16_t vid;
|
|
+ u16_t type;
|
|
+};
|
|
+
|
|
+int is_vlan_packet(struct uip_vlan_eth_hdr *hdr);
|
|
+
|
|
+#endif /* __UIP_ETH_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/uip.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/uip.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/uip.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/uip.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,1611 @@
|
|
+
|
|
+/**
|
|
+ * \addtogroup uip
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \file
|
|
+ * Header file for the uIP TCP/IP stack.
|
|
+ * \author Adam Dunkels <adam@dunkels.com>
|
|
+ *
|
|
+ * The uIP TCP/IP stack header file contains definitions for a number
|
|
+ * of C macros that are used by uIP programs as well as internal uIP
|
|
+ * structures, TCP/IP header structures and function declarations.
|
|
+ *
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * Copyright (c) 2001-2003, Adam Dunkels.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack.
|
|
+ *
|
|
+ * $Id: uip.h,v 1.40 2006/06/08 07:12:07 adam Exp $
|
|
+ *
|
|
+ */
|
|
+
|
|
+#ifndef __UIP_H__
|
|
+#define __UIP_H__
|
|
+
|
|
+#include <netinet/in.h>
|
|
+#include <pthread.h>
|
|
+
|
|
+#include "uipopt.h"
|
|
+
|
|
+#include "debug.h"
|
|
+
|
|
+#include "uip_eth.h"
|
|
+
|
|
+/* Forware declaration */
|
|
+struct uip_stack;
|
|
+
|
|
+/**
|
|
+ * Repressentation of an IP address.
|
|
+ *
|
|
+ */
|
|
+typedef u16_t uip_ip4addr_t[2];
|
|
+typedef u16_t uip_ip6addr_t[8];
|
|
+
|
|
+const uip_ip6addr_t all_zeroes_addr6;
|
|
+const uip_ip4addr_t all_zeroes_addr4;
|
|
+
|
|
+#define ETH_BUF(buf) ((struct uip_eth_hdr *)buf)
|
|
+#define VLAN_ETH_BUF(buf) ((struct uip_vlan_eth_hdr *)buf)
|
|
+#define IPv4_BUF(buf) ((struct uip_tcp_ipv4_hdr *)buf)
|
|
+#define IPv6_BUF(buf) ((struct uip_tcp_ipv6_hdr *)buf)
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+/* First, the functions that should be called from the
|
|
+ * system. Initialization, the periodic timer and incoming packets are
|
|
+ * handled by the following three functions.
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * Set the IP address of this host.
|
|
+ *
|
|
+ * The IP address is represented as a 4-byte array where the first
|
|
+ * octet of the IP address is put in the first member of the 4-byte
|
|
+ * array.
|
|
+ *
|
|
+ * Example:
|
|
+ \code
|
|
+
|
|
+ uip_ipaddr_t addr;
|
|
+
|
|
+ uip_ipaddr(&addr, 192,168,1,2);
|
|
+ uip_sethostaddr(&addr);
|
|
+
|
|
+ \endcode
|
|
+ * \param addr A pointer to an IP address of type uip_ipaddr_t;
|
|
+ *
|
|
+ * \sa uip_ipaddr()
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+void uip_sethostaddr4(struct uip_stack *ustack, uip_ip4addr_t * addr);
|
|
+
|
|
+/**
|
|
+ * Set the default router's IP address.
|
|
+ *
|
|
+ * \param addr A pointer to a uip_ipaddr_t variable containing the IP
|
|
+ * address of the default router.
|
|
+ *
|
|
+ * \sa uip_ipaddr()
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+void uip_setdraddr4(struct uip_stack *ustack, uip_ip4addr_t * addr);
|
|
+
|
|
+/**
|
|
+ * Set the netmask.
|
|
+ *
|
|
+ * \param addr A pointer to a uip_ipaddr_t variable containing the IP
|
|
+ * address of the netmask.
|
|
+ *
|
|
+ * \sa uip_ipaddr()
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+void uip_setnetmask4(struct uip_stack *ustack, uip_ip4addr_t * addr);
|
|
+
|
|
+/**
|
|
+ * Set the ethernet MAC address.
|
|
+ *
|
|
+ * \param addr A pointer to a uip_ipaddr_t variable containing the IP
|
|
+ * address of the netmask.
|
|
+ *
|
|
+ * \sa uip_ipaddr()
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+void uip_setethernetmac(struct uip_stack *ustack, uint8_t * mac);
|
|
+
|
|
+/**
|
|
+ * Get the default router's IP address.
|
|
+ *
|
|
+ * \param addr A pointer to a uip_ipaddr_t variable that will be
|
|
+ * filled in with the IP address of the default router.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_getdraddr(addr) uip_ipaddr_copy((addr), uip_draddr)
|
|
+
|
|
+/**
|
|
+ * Get the netmask.
|
|
+ *
|
|
+ * \param addr A pointer to a uip_ipaddr_t variable that will be
|
|
+ * filled in with the value of the netmask.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_getnetmask(addr) uip_ipaddr_copy((addr), uip_netmask)
|
|
+
|
|
+void set_uip_stack(struct uip_stack *ustack,
|
|
+ uip_ip4addr_t * ip,
|
|
+ uip_ip4addr_t * netmask,
|
|
+ uip_ip4addr_t * default_route, uint8_t * mac_addr);
|
|
+
|
|
+/** @} */
|
|
+
|
|
+/**
|
|
+ * \defgroup uipinit uIP initialization functions
|
|
+ * @{
|
|
+ *
|
|
+ * The uIP initialization functions are used for booting uIP.
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * uIP initialization function.
|
|
+ *
|
|
+ * This function should be called at boot up to initilize the uIP
|
|
+ * TCP/IP stack.
|
|
+ */
|
|
+void uip_init(struct uip_stack *ustack, uint8_t enable_ipv6);
|
|
+
|
|
+/**
|
|
+ * uIP reset function.
|
|
+ *
|
|
+ * This function should be called at to reset the uIP TCP/IP stack.
|
|
+ */
|
|
+void uip_reset(struct uip_stack *ustack);
|
|
+
|
|
+/**
|
|
+ * uIP initialization function.
|
|
+ *
|
|
+ * This function may be used at boot time to set the initial ip_id.
|
|
+ */
|
|
+void uip_setipid(u16_t id);
|
|
+
|
|
+/**
|
|
+ *
|
|
+ *
|
|
+ */
|
|
+#define uip_conn_active(conn) (uip_conns[conn].tcpstateflags != UIP_CLOSED)
|
|
+
|
|
+#if UIP_UDP
|
|
+
|
|
+#if 0
|
|
+/**
|
|
+ * Periodic processing for a UDP connection identified by its number.
|
|
+ *
|
|
+ * This function is essentially the same as uip_periodic(), but for
|
|
+ * UDP connections. It is called in a similar fashion as the
|
|
+ * uip_periodic() function:
|
|
+ \code
|
|
+ for(i = 0; i < UIP_UDP_CONNS; i++) {
|
|
+ uip_udp_periodic(i);
|
|
+ if(uip_len > 0) {
|
|
+ devicedriver_send();
|
|
+ }
|
|
+ }
|
|
+ \endcode
|
|
+ *
|
|
+ * \note As for the uip_periodic() function, special care has to be
|
|
+ * taken when using uIP together with ARP and Ethernet:
|
|
+ \code
|
|
+ for(i = 0; i < UIP_UDP_CONNS; i++) {
|
|
+ uip_udp_periodic(i);
|
|
+ if(uip_len > 0) {
|
|
+ uip_arp_out();
|
|
+ ethernet_devicedriver_send();
|
|
+ }
|
|
+ }
|
|
+ \endcode
|
|
+ *
|
|
+ * \param conn The number of the UDP connection to be processed.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_udp_periodic(conn) do { uip_udp_conn = &uip_udp_conns[conn]; \
|
|
+ uip_process(UIP_UDP_TIMER); } while (0)
|
|
+
|
|
+/**
|
|
+ * Periodic processing for a UDP connection identified by a pointer to
|
|
+ * its structure.
|
|
+ *
|
|
+ * Same as uip_udp_periodic() but takes a pointer to the actual
|
|
+ * uip_conn struct instead of an integer as its argument. This
|
|
+ * function can be used to force periodic processing of a specific
|
|
+ * connection.
|
|
+ *
|
|
+ * \param conn A pointer to the uip_udp_conn struct for the connection
|
|
+ * to be processed.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_udp_periodic_conn(conn) do { uip_udp_conn = conn; \
|
|
+ uip_process(UIP_UDP_TIMER); } while (0)
|
|
+
|
|
+#endif
|
|
+
|
|
+void uip_udp_periodic(struct uip_stack *ustack, int conn);
|
|
+#endif /* UIP_UDP */
|
|
+
|
|
+void uip_ndp_periodic(struct uip_stack *ustack);
|
|
+
|
|
+/**
|
|
+ * The uIP packet buffer.
|
|
+ *
|
|
+ * The uip_buf array is used to hold incoming and outgoing
|
|
+ * packets. The device driver should place incoming data into this
|
|
+ * buffer. When sending data, the device driver should read the link
|
|
+ * level headers and the TCP/IP headers from this buffer. The size of
|
|
+ * the link level headers is configured by the UIP_LLH_LEN define.
|
|
+ *
|
|
+ * \note The application data need not be placed in this buffer, so
|
|
+ * the device driver must read it from the place pointed to by the
|
|
+ * uip_appdata pointer as illustrated by the following example:
|
|
+ \code
|
|
+ void
|
|
+ devicedriver_send(void)
|
|
+ {
|
|
+ hwsend(&uip_buf[0], UIP_LLH_LEN);
|
|
+ if(uip_len <= UIP_LLH_LEN + UIP_TCPIP_HLEN) {
|
|
+ hwsend(&uip_buf[UIP_LLH_LEN], uip_len - UIP_LLH_LEN);
|
|
+ } else {
|
|
+ hwsend(&uip_buf[UIP_LLH_LEN], UIP_TCPIP_HLEN);
|
|
+ hwsend(uip_appdata, uip_len - UIP_TCPIP_HLEN - UIP_LLH_LEN);
|
|
+ }
|
|
+ }
|
|
+ \endcode
|
|
+ */
|
|
+//extern u8_t uip_buf[UIP_BUFSIZE+2];
|
|
+
|
|
+/** @} */
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+/* Functions that are used by the uIP application program. Opening and
|
|
+ * closing connections, sending and receiving data, etc. is all
|
|
+ * handled by the functions below.
|
|
+*/
|
|
+/**
|
|
+ * \defgroup uipappfunc uIP application functions
|
|
+ * @{
|
|
+ *
|
|
+ * Functions used by an application running of top of uIP.
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * Start listening to the specified port.
|
|
+ *
|
|
+ * \note Since this function expects the port number in network byte
|
|
+ * order, a conversion using HTONS() or htons() is necessary.
|
|
+ *
|
|
+ \code
|
|
+ uip_listen(HTONS(80));
|
|
+ \endcode
|
|
+ *
|
|
+ * \param port A 16-bit port number in network byte order.
|
|
+ */
|
|
+void uip_listen(struct uip_stack *ustack, u16_t port);
|
|
+
|
|
+/**
|
|
+ * Stop listening to the specified port.
|
|
+ *
|
|
+ * \note Since this function expects the port number in network byte
|
|
+ * order, a conversion using HTONS() or htons() is necessary.
|
|
+ *
|
|
+ \code
|
|
+ uip_unlisten(HTONS(80));
|
|
+ \endcode
|
|
+ *
|
|
+ * \param port A 16-bit port number in network byte order.
|
|
+ */
|
|
+void uip_unlisten(struct uip_stack *ustack, u16_t port);
|
|
+
|
|
+/**
|
|
+ * Connect to a remote host using TCP.
|
|
+ *
|
|
+ * This function is used to start a new connection to the specified
|
|
+ * port on the specied host. It allocates a new connection identifier,
|
|
+ * sets the connection to the SYN_SENT state and sets the
|
|
+ * retransmission timer to 0. This will cause a TCP SYN segment to be
|
|
+ * sent out the next time this connection is periodically processed,
|
|
+ * which usually is done within 0.5 seconds after the call to
|
|
+ * uip_connect().
|
|
+ *
|
|
+ * \note This function is avaliable only if support for active open
|
|
+ * has been configured by defining UIP_ACTIVE_OPEN to 1 in uipopt.h.
|
|
+ *
|
|
+ * \note Since this function requires the port number to be in network
|
|
+ * byte order, a conversion using HTONS() or htons() is necessary.
|
|
+ *
|
|
+ \code
|
|
+ uip_ipaddr_t ipaddr;
|
|
+
|
|
+ uip_ipaddr(&ipaddr, 192,168,1,2);
|
|
+ uip_connect(&ipaddr, HTONS(80));
|
|
+ \endcode
|
|
+ *
|
|
+ * \param ripaddr The IP address of the remote hot.
|
|
+ *
|
|
+ * \param port A 16-bit port number in network byte order.
|
|
+ *
|
|
+ * \return A pointer to the uIP connection identifier for the new connection,
|
|
+ * or NULL if no connection could be allocated.
|
|
+ *
|
|
+ */
|
|
+struct uip_conn *uip_connect(struct uip_stack *ustack,
|
|
+ uip_ip4addr_t * ripaddr, u16_t port);
|
|
+
|
|
+/**
|
|
+ * \internal
|
|
+ *
|
|
+ * Check if a connection has outstanding (i.e., unacknowledged) data.
|
|
+ *
|
|
+ * \param conn A pointer to the uip_conn structure for the connection.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_outstanding(conn) ((conn)->len)
|
|
+
|
|
+/**
|
|
+ * Send data on the current connection.
|
|
+ *
|
|
+ * This function is used to send out a single segment of TCP
|
|
+ * data. Only applications that have been invoked by uIP for event
|
|
+ * processing can send data.
|
|
+ *
|
|
+ * The amount of data that actually is sent out after a call to this
|
|
+ * funcion is determined by the maximum amount of data TCP allows. uIP
|
|
+ * will automatically crop the data so that only the appropriate
|
|
+ * amount of data is sent. The function uip_mss() can be used to query
|
|
+ * uIP for the amount of data that actually will be sent.
|
|
+ *
|
|
+ * \note This function does not guarantee that the sent data will
|
|
+ * arrive at the destination. If the data is lost in the network, the
|
|
+ * application will be invoked with the uip_rexmit() event being
|
|
+ * set. The application will then have to resend the data using this
|
|
+ * function.
|
|
+ *
|
|
+ * \param data A pointer to the data which is to be sent.
|
|
+ *
|
|
+ * \param len The maximum amount of data bytes to be sent.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+void uip_send(struct uip_stack *ustack, const void *data, int len);
|
|
+void uip_appsend(struct uip_stack *ustack, const void *data, int len);
|
|
+
|
|
+/**
|
|
+ * The length of any incoming data that is currently avaliable (if avaliable)
|
|
+ * in the uip_appdata buffer.
|
|
+ *
|
|
+ * The test function uip_data() must first be used to check if there
|
|
+ * is any data available at all.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+/*void uip_datalen(void);*/
|
|
+u16_t uip_datalen(struct uip_stack *ustack);
|
|
+
|
|
+/**
|
|
+ * The length of any out-of-band data (urgent data) that has arrived
|
|
+ * on the connection.
|
|
+ *
|
|
+ * \note The configuration parameter UIP_URGDATA must be set for this
|
|
+ * function to be enabled.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_urgdatalen() uip_urglen
|
|
+
|
|
+/**
|
|
+ * Close the current connection.
|
|
+ *
|
|
+ * This function will close the current connection in a nice way.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_close() (uip_flags = UIP_CLOSE)
|
|
+
|
|
+/**
|
|
+ * Abort the current connection.
|
|
+ *
|
|
+ * This function will abort (reset) the current connection, and is
|
|
+ * usually used when an error has occured that prevents using the
|
|
+ * uip_close() function.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_abort() (uip_flags = UIP_ABORT)
|
|
+
|
|
+/**
|
|
+ * Tell the sending host to stop sending data.
|
|
+ *
|
|
+ * This function will close our receiver's window so that we stop
|
|
+ * receiving data for the current connection.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_stop() (uip_conn->tcpstateflags |= UIP_STOPPED)
|
|
+
|
|
+/**
|
|
+ * Find out if the current connection has been previously stopped with
|
|
+ * uip_stop().
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_stopped(conn) ((conn)->tcpstateflags & UIP_STOPPED)
|
|
+
|
|
+/**
|
|
+ * Restart the current connection, if is has previously been stopped
|
|
+ * with uip_stop().
|
|
+ *
|
|
+ * This function will open the receiver's window again so that we
|
|
+ * start receiving data for the current connection.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_restart() do { uip_flags |= UIP_NEWDATA; \
|
|
+ uip_conn->tcpstateflags &= ~UIP_STOPPED; \
|
|
+ } while(0)
|
|
+
|
|
+/* uIP tests that can be made to determine in what state the current
|
|
+ connection is, and what the application function should do. */
|
|
+
|
|
+/**
|
|
+ * Is the current connection a UDP connection?
|
|
+ *
|
|
+ * This function checks whether the current connection is a UDP connection.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ *
|
|
+ */
|
|
+#define uip_udpconnection() (uip_conn == NULL)
|
|
+
|
|
+/**
|
|
+ * Function declarations for hte uip_flags
|
|
+ */
|
|
+/**
|
|
+ * Is new incoming data available?
|
|
+ *
|
|
+ * Will reduce to non-zero if there is new data for the application
|
|
+ * present at the uip_appdata pointer. The size of the data is
|
|
+ * avaliable through the uip_len variable.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+int uip_newdata(struct uip_stack *ustack);
|
|
+
|
|
+/**
|
|
+ * Has previously sent data been acknowledged?
|
|
+ *
|
|
+ * Will reduce to non-zero if the previously sent data has been
|
|
+ * acknowledged by the remote host. This means that the application
|
|
+ * can send new data.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+int uip_acked(struct uip_stack *ustack);
|
|
+
|
|
+/**
|
|
+ * Has the connection just been connected?
|
|
+ *
|
|
+ * Reduces to non-zero if the current connection has been connected to
|
|
+ * a remote host. This will happen both if the connection has been
|
|
+ * actively opened (with uip_connect()) or passively opened (with
|
|
+ * uip_listen()).
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+int uip_connected(struct uip_stack *ustack);
|
|
+
|
|
+/**
|
|
+ * Has the connection been closed by the other end?
|
|
+ *
|
|
+ * Is non-zero if the connection has been closed by the remote
|
|
+ * host. The application may then do the necessary clean-ups.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+int uip_closed(struct uip_stack *ustack);
|
|
+
|
|
+/**
|
|
+ * Has the connection been aborted by the other end?
|
|
+ *
|
|
+ * Non-zero if the current connection has been aborted (reset) by the
|
|
+ * remote host.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+int uip_aborted(struct uip_stack *ustack);
|
|
+
|
|
+/**
|
|
+ * Has the connection timed out?
|
|
+ *
|
|
+ * Non-zero if the current connection has been aborted due to too many
|
|
+ * retransmissions.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+int uip_timedout(struct uip_stack *ustack);
|
|
+
|
|
+/**
|
|
+ * Do we need to retransmit previously data?
|
|
+ *
|
|
+ * Reduces to non-zero if the previously sent data has been lost in
|
|
+ * the network, and the application should retransmit it. The
|
|
+ * application should send the exact same data as it did the last
|
|
+ * time, using the uip_send() function.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+int uip_rexmit(struct uip_stack *ustack);
|
|
+
|
|
+/**
|
|
+ * Is the connection being polled by uIP?
|
|
+ *
|
|
+ * Is non-zero if the reason the application is invoked is that the
|
|
+ * current connection has been idle for a while and should be
|
|
+ * polled.
|
|
+ *
|
|
+ * The polling event can be used for sending data without having to
|
|
+ * wait for the remote host to send data.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+int uip_poll(struct uip_stack *ustack);
|
|
+
|
|
+/**
|
|
+ * Get the initial maxium segment size (MSS) of the current
|
|
+ * connection.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+int uip_initialmss(struct uip_stack *ustack);
|
|
+
|
|
+/**
|
|
+ * Get the current maxium segment size that can be sent on the current
|
|
+ * connection.
|
|
+ *
|
|
+ * The current maxiumum segment size that can be sent on the
|
|
+ * connection is computed from the receiver's window and the MSS of
|
|
+ * the connection (which also is available by calling
|
|
+ * uip_initialmss()).
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+int uip_mss(struct uip_stack *ustack);
|
|
+
|
|
+/**
|
|
+ * Set up a new UDP connection.
|
|
+ *
|
|
+ * This function sets up a new UDP connection. The function will
|
|
+ * automatically allocate an unused local port for the new
|
|
+ * connection. However, another port can be chosen by using the
|
|
+ * uip_udp_bind() call, after the uip_udp_new() function has been
|
|
+ * called.
|
|
+ *
|
|
+ * Example:
|
|
+ \code
|
|
+ uip_ipaddr_t addr;
|
|
+ struct uip_udp_conn *c;
|
|
+
|
|
+ uip_ipaddr(&addr, 192,168,2,1);
|
|
+ c = uip_udp_new(&addr, HTONS(12345));
|
|
+ if(c != NULL) {
|
|
+ uip_udp_bind(c, HTONS(12344));
|
|
+ }
|
|
+ \endcode
|
|
+ * \param ripaddr The IP address of the remote host.
|
|
+ *
|
|
+ * \param rport The remote port number in network byte order.
|
|
+ *
|
|
+ * \return The uip_udp_conn structure for the new connection or NULL
|
|
+ * if no connection could be allocated.
|
|
+ */
|
|
+struct uip_udp_conn *uip_udp_new(struct uip_stack *ustack,
|
|
+ uip_ip4addr_t * ripaddr, u16_t rport);
|
|
+
|
|
+/**
|
|
+ * Removed a UDP connection.
|
|
+ *
|
|
+ * \param conn A pointer to the uip_udp_conn structure for the connection.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_udp_remove(conn) (conn)->lport = 0
|
|
+
|
|
+/**
|
|
+ * Bind a UDP connection to a local port.
|
|
+ *
|
|
+ * \param conn A pointer to the uip_udp_conn structure for the
|
|
+ * connection.
|
|
+ *
|
|
+ * \param port The local port number, in network byte order.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_udp_bind(conn, port) (conn)->lport = port
|
|
+
|
|
+/**
|
|
+ * Send a UDP datagram of length len on the current connection.
|
|
+ *
|
|
+ * This function can only be called in response to a UDP event (poll
|
|
+ * or newdata). The data must be present in the uip_buf buffer, at the
|
|
+ * place pointed to by the uip_appdata pointer.
|
|
+ *
|
|
+ * \param len The length of the data in the uip_buf buffer.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_udp_send(len) uip_appsend((char *)uip_appdata, len)
|
|
+
|
|
+/** @} */
|
|
+
|
|
+/* uIP convenience and converting functions. */
|
|
+
|
|
+/**
|
|
+ * \defgroup uipconvfunc uIP conversion functions
|
|
+ * @{
|
|
+ *
|
|
+ * These functions can be used for converting between different data
|
|
+ * formats used by uIP.
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * Construct an IP address from four bytes.
|
|
+ *
|
|
+ * This function constructs an IP address of the type that uIP handles
|
|
+ * internally from four bytes. The function is handy for specifying IP
|
|
+ * addresses to use with e.g. the uip_connect() function.
|
|
+ *
|
|
+ * Example:
|
|
+ \code
|
|
+ uip_ipaddr_t ipaddr;
|
|
+ struct uip_conn *c;
|
|
+
|
|
+ uip_ipaddr(&ipaddr, 192,168,1,2);
|
|
+ c = uip_connect(&ipaddr, HTONS(80));
|
|
+ \endcode
|
|
+ *
|
|
+ * \param addr A pointer to a uip_ipaddr_t variable that will be
|
|
+ * filled in with the IP address.
|
|
+ *
|
|
+ * \param addr0 The first octet of the IP address.
|
|
+ * \param addr1 The second octet of the IP address.
|
|
+ * \param addr2 The third octet of the IP address.
|
|
+ * \param addr3 The forth octet of the IP address.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_ipaddr(addr, addr0,addr1,addr2,addr3) do { \
|
|
+ ((u16_t *)(addr))[0] = const_htons(((addr0) << 8) | (addr1)); \
|
|
+ ((u16_t *)(addr))[1] = const_htons(((addr2) << 8) | (addr3)); \
|
|
+ } while(0)
|
|
+
|
|
+/**
|
|
+ * Construct an IPv6 address from eight 16-bit words.
|
|
+ *
|
|
+ * This function constructs an IPv6 address.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_ip6addr(addr, addr0,addr1,addr2,addr3,addr4,addr5,addr6,addr7) do {\
|
|
+ ((u16_t *)(addr))[0] = HTONS((addr0)); \
|
|
+ ((u16_t *)(addr))[1] = HTONS((addr1)); \
|
|
+ ((u16_t *)(addr))[2] = HTONS((addr2)); \
|
|
+ ((u16_t *)(addr))[3] = HTONS((addr3)); \
|
|
+ ((u16_t *)(addr))[4] = HTONS((addr4)); \
|
|
+ ((u16_t *)(addr))[5] = HTONS((addr5)); \
|
|
+ ((u16_t *)(addr))[6] = HTONS((addr6)); \
|
|
+ ((u16_t *)(addr))[7] = HTONS((addr7)); \
|
|
+ } while(0)
|
|
+
|
|
+/**
|
|
+ * Copy an IP address to another IP address.
|
|
+ *
|
|
+ * Copies an IP address from one place to another.
|
|
+ *
|
|
+ * Example:
|
|
+ \code
|
|
+ uip_ipaddr_t ipaddr1, ipaddr2;
|
|
+
|
|
+ uip_ipaddr(&ipaddr1, 192,16,1,2);
|
|
+ uip_ipaddr_copy(&ipaddr2, &ipaddr1);
|
|
+ \endcode
|
|
+ *
|
|
+ * \param dest The destination for the copy.
|
|
+ * \param src The source from where to copy.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_ip4addr_copy(dest, src) memcpy(dest, src, sizeof(uip_ip4addr_t))
|
|
+#define uip_ip6addr_copy(dest, src) memcpy(dest, src, sizeof(uip_ip6addr_t))
|
|
+
|
|
+/**
|
|
+ * Compare two IP addresses
|
|
+ *
|
|
+ * Compares two IP addresses.
|
|
+ *
|
|
+ * Example:
|
|
+ \code
|
|
+ uip_ipaddr_t ipaddr1, ipaddr2;
|
|
+
|
|
+ uip_ipaddr(&ipaddr1, 192,16,1,2);
|
|
+ if(uip_ipaddr_cmp(&ipaddr2, &ipaddr1)) {
|
|
+ printf("They are the same");
|
|
+ }
|
|
+ \endcode
|
|
+ *
|
|
+ * \param addr1 The first IP address.
|
|
+ * \param addr2 The second IP address.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_ip4addr_cmp(addr1, addr2) (memcmp(addr1, addr2, \
|
|
+ sizeof(uip_ip4addr_t)) == 0)
|
|
+#define uip_ip6addr_cmp(addr1, addr2) (memcmp(addr1, addr2, \
|
|
+ sizeof(uip_ip6addr_t)) == 0)
|
|
+
|
|
+/**
|
|
+ * Compare two IP addresses with netmasks
|
|
+ *
|
|
+ * Compares two IP addresses with netmasks. The masks are used to mask
|
|
+ * out the bits that are to be compared.
|
|
+ *
|
|
+ * Example:
|
|
+ \code
|
|
+ uip_ipaddr_t ipaddr1, ipaddr2, mask;
|
|
+
|
|
+ uip_ipaddr(&mask, 255,255,255,0);
|
|
+ uip_ipaddr(&ipaddr1, 192,16,1,2);
|
|
+ uip_ipaddr(&ipaddr2, 192,16,1,3);
|
|
+ if(uip_ipaddr_maskcmp(&ipaddr1, &ipaddr2, &mask)) {
|
|
+ printf("They are the same");
|
|
+ }
|
|
+ \endcode
|
|
+ *
|
|
+ * \param addr1 The first IP address.
|
|
+ * \param addr2 The second IP address.
|
|
+ * \param mask The netmask.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_ip4addr_maskcmp(addr1, addr2, mask) \
|
|
+ (((((u16_t *)addr1)[0] & ((u16_t *)mask)[0]) == \
|
|
+ (((u16_t *)addr2)[0] & ((u16_t *)mask)[0])) && \
|
|
+ ((((u16_t *)addr1)[1] & ((u16_t *)mask)[1]) == \
|
|
+ (((u16_t *)addr2)[1] & ((u16_t *)mask)[1])))
|
|
+
|
|
+/**
|
|
+ * Mask out the network part of an IP address.
|
|
+ *
|
|
+ * Masks out the network part of an IP address, given the address and
|
|
+ * the netmask.
|
|
+ *
|
|
+ * Example:
|
|
+ \code
|
|
+ uip_ipaddr_t ipaddr1, ipaddr2, netmask;
|
|
+
|
|
+ uip_ipaddr(&ipaddr1, 192,16,1,2);
|
|
+ uip_ipaddr(&netmask, 255,255,255,0);
|
|
+ uip_ipaddr_mask(&ipaddr2, &ipaddr1, &netmask);
|
|
+ \endcode
|
|
+ *
|
|
+ * In the example above, the variable "ipaddr2" will contain the IP
|
|
+ * address 192.168.1.0.
|
|
+ *
|
|
+ * \param dest Where the result is to be placed.
|
|
+ * \param src The IP address.
|
|
+ * \param mask The netmask.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_ip4addr_mask(dest, src, mask) do { \
|
|
+ ((u16_t *)dest)[0] = ((u16_t *)src)[0] & ((u16_t *)mask)[0]; \
|
|
+ ((u16_t *)dest)[1] = ((u16_t *)src)[1] & ((u16_t *)mask)[1]; \
|
|
+ } while(0)
|
|
+
|
|
+/**
|
|
+ * Pick the first octet of an IP address.
|
|
+ *
|
|
+ * Picks out the first octet of an IP address.
|
|
+ *
|
|
+ * Example:
|
|
+ \code
|
|
+ uip_ipaddr_t ipaddr;
|
|
+ u8_t octet;
|
|
+
|
|
+ uip_ipaddr(&ipaddr, 1,2,3,4);
|
|
+ octet = uip_ipaddr1(&ipaddr);
|
|
+ \endcode
|
|
+ *
|
|
+ * In the example above, the variable "octet" will contain the value 1.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_ipaddr1(addr) (htons(((u16_t *)(addr))[0]) >> 8)
|
|
+
|
|
+/**
|
|
+ * Pick the second octet of an IP address.
|
|
+ *
|
|
+ * Picks out the second octet of an IP address.
|
|
+ *
|
|
+ * Example:
|
|
+ \code
|
|
+ uip_ipaddr_t ipaddr;
|
|
+ u8_t octet;
|
|
+
|
|
+ uip_ipaddr(&ipaddr, 1,2,3,4);
|
|
+ octet = uip_ipaddr2(&ipaddr);
|
|
+ \endcode
|
|
+ *
|
|
+ * In the example above, the variable "octet" will contain the value 2.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_ipaddr2(addr) (htons(((u16_t *)(addr))[0]) & 0xff)
|
|
+
|
|
+/**
|
|
+ * Pick the third octet of an IP address.
|
|
+ *
|
|
+ * Picks out the third octet of an IP address.
|
|
+ *
|
|
+ * Example:
|
|
+ \code
|
|
+ uip_ipaddr_t ipaddr;
|
|
+ u8_t octet;
|
|
+
|
|
+ uip_ipaddr(&ipaddr, 1,2,3,4);
|
|
+ octet = uip_ipaddr3(&ipaddr);
|
|
+ \endcode
|
|
+ *
|
|
+ * In the example above, the variable "octet" will contain the value 3.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_ipaddr3(addr) (htons(((u16_t *)(addr))[1]) >> 8)
|
|
+
|
|
+/**
|
|
+ * Pick the fourth octet of an IP address.
|
|
+ *
|
|
+ * Picks out the fourth octet of an IP address.
|
|
+ *
|
|
+ * Example:
|
|
+ \code
|
|
+ uip_ipaddr_t ipaddr;
|
|
+ u8_t octet;
|
|
+
|
|
+ uip_ipaddr(&ipaddr, 1,2,3,4);
|
|
+ octet = uip_ipaddr4(&ipaddr);
|
|
+ \endcode
|
|
+ *
|
|
+ * In the example above, the variable "octet" will contain the value 4.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define uip_ipaddr4(addr) (htons(((u16_t *)(addr))[1]) & 0xff)
|
|
+
|
|
+/**
|
|
+ * Convert 16-bit quantity from host byte order to network byte order.
|
|
+ *
|
|
+ * This macro is primarily used for converting constants from host
|
|
+ * byte order to network byte order. For converting variables to
|
|
+ * network byte order, use the htons() function instead.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#if 0
|
|
+#ifndef HTONS
|
|
+# if UIP_BYTE_ORDER == UIP_BIG_ENDIAN
|
|
+# define HTONS(n) (n)
|
|
+# else /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */
|
|
+# define HTONS(n) (u16_t)((((u16_t) (n)) << 8) | (((u16_t) (n)) >> 8))
|
|
+# endif /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */
|
|
+#else
|
|
+#error "HTONS already defined!"
|
|
+#endif /* HTONS */
|
|
+#endif
|
|
+
|
|
+#if UIP_BYTE_ORDER == UIP_BIG_ENDIAN
|
|
+# error "Should not be here"
|
|
+# define const_htons(n) (n)
|
|
+# else /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */
|
|
+# define const_htons(n) (u16_t)((((u16_t) (n)) << 8) | (((u16_t) (n)) >> 8))
|
|
+# endif /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */
|
|
+
|
|
+/* BWL */
|
|
+#if 0
|
|
+/**
|
|
+ * Convert 16-bit quantity from host byte order to network byte order.
|
|
+ *
|
|
+ * This function is primarily used for converting variables from host
|
|
+ * byte order to network byte order. For converting constants to
|
|
+ * network byte order, use the HTONS() macro instead.
|
|
+ */
|
|
+#ifndef htons
|
|
+u16_t htons(u16_t val);
|
|
+#endif /* htons */
|
|
+#ifndef ntohs
|
|
+#define ntohs htons
|
|
+#endif
|
|
+#endif
|
|
+
|
|
+/** @} */
|
|
+
|
|
+/**
|
|
+ * Pointer to the application data in the packet buffer.
|
|
+ *
|
|
+ * This pointer points to the application data when the application is
|
|
+ * called. If the application wishes to send data, the application may
|
|
+ * use this space to write the data into before calling uip_send().
|
|
+ */
|
|
+//extern void *uip_appdata;
|
|
+
|
|
+#if UIP_URGDATA > 0
|
|
+/* u8_t *uip_urgdata:
|
|
+ *
|
|
+ * This pointer points to any urgent data that has been received. Only
|
|
+ * present if compiled with support for urgent data (UIP_URGDATA).
|
|
+ */
|
|
+extern void *uip_urgdata;
|
|
+#endif /* UIP_URGDATA > 0 */
|
|
+
|
|
+/**
|
|
+ * \defgroup uipdrivervars Variables used in uIP device drivers
|
|
+ * @{
|
|
+ *
|
|
+ * uIP has a few global variables that are used in device drivers for
|
|
+ * uIP.
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * The length of the packet in the uip_buf buffer.
|
|
+ *
|
|
+ * The global variable uip_len holds the length of the packet in the
|
|
+ * uip_buf buffer.
|
|
+ *
|
|
+ * When the network device driver calls the uIP input function,
|
|
+ * uip_len should be set to the length of the packet in the uip_buf
|
|
+ * buffer.
|
|
+ *
|
|
+ * When sending packets, the device driver should use the contents of
|
|
+ * the uip_len variable to determine the length of the outgoing
|
|
+ * packet.
|
|
+ *
|
|
+ */
|
|
+//extern u16_t uip_len;
|
|
+
|
|
+/** @} */
|
|
+
|
|
+#if UIP_URGDATA > 0
|
|
+extern u16_t uip_urglen, uip_surglen;
|
|
+#endif /* UIP_URGDATA > 0 */
|
|
+
|
|
+/**
|
|
+ * Representation of a uIP TCP connection.
|
|
+ *
|
|
+ * The uip_conn structure is used for identifying a connection. All
|
|
+ * but one field in the structure are to be considered read-only by an
|
|
+ * application. The only exception is the appstate field whos purpose
|
|
+ * is to let the application store application-specific state (e.g.,
|
|
+ * file pointers) for the connection. The type of this field is
|
|
+ * configured in the "uipopt.h" header file.
|
|
+ */
|
|
+struct __attribute__ ((__packed__)) uip_conn {
|
|
+ uip_ip4addr_t ripaddr;
|
|
+ /**< The IP address of the remote host. */
|
|
+
|
|
+ u16_t lport; /**< The local TCP port, in network byte order. */
|
|
+ u16_t rport; /**< The local remote TCP port, in network byte
|
|
+ order. */
|
|
+
|
|
+ u8_t rcv_nxt[4];
|
|
+ /**< The sequence number that we expect to
|
|
+ receive next. */
|
|
+ u8_t snd_nxt[4];
|
|
+ /**< The sequence number that was last sent by
|
|
+ us. */
|
|
+ u16_t len; /**< Length of the data that was previously sent. */
|
|
+ u16_t mss; /**< Current maximum segment size for the
|
|
+ connection. */
|
|
+ u16_t initialmss;
|
|
+ /**< Initial maximum segment size for the
|
|
+ connection. */
|
|
+ u8_t sa; /**< Retransmission time-out calculation state
|
|
+ variable. */
|
|
+ u8_t sv; /**< Retransmission time-out calculation state
|
|
+ variable. */
|
|
+ u8_t rto; /**< Retransmission time-out. */
|
|
+ u8_t tcpstateflags;
|
|
+ /**< TCP state and flags. */
|
|
+ u8_t timer; /**< The retransmission timer. */
|
|
+ u8_t nrtx; /**< The number of retransmissions for the last
|
|
+ segment sent. */
|
|
+
|
|
+ /** The application state. */
|
|
+/* BWL */
|
|
+// uip_tcp_appstate_t appstate;
|
|
+};
|
|
+
|
|
+/**
|
|
+ * \addtogroup uiparch
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * 4-byte array used for the 32-bit sequence number calculations.
|
|
+ */
|
|
+extern u8_t uip_acc32[4];
|
|
+
|
|
+/** @} */
|
|
+
|
|
+#if UIP_UDP
|
|
+/**
|
|
+ * Representation of a uIP UDP connection.
|
|
+ */
|
|
+struct uip_udp_conn {
|
|
+ uip_ip4addr_t ripaddr;
|
|
+ /**< The IP address of the remote peer. */
|
|
+ u16_t lport; /**< The local port number in network byte order. */
|
|
+ u16_t rport; /**< The remote port number in network byte order. */
|
|
+ u8_t ttl; /**< Default time-to-live. */
|
|
+
|
|
+ /** The application state. */
|
|
+// uip_udp_appstate_t appstate;
|
|
+};
|
|
+
|
|
+#endif /* UIP_UDP */
|
|
+
|
|
+/**
|
|
+ * The structure holding the TCP/IP statistics that are gathered if
|
|
+ * UIP_STATISTICS is set to 1.
|
|
+ *
|
|
+ */
|
|
+struct uip_stats {
|
|
+ struct {
|
|
+ uip_stats_t drop;
|
|
+ /**< Number of dropped packets at the IP
|
|
+ layer. */
|
|
+ uip_stats_t recv;
|
|
+ /**< Number of received packets at the IP
|
|
+ layer. */
|
|
+ uip_stats_t sent;
|
|
+ /**< Number of sent packets at the IP
|
|
+ layer. */
|
|
+ uip_stats_t vhlerr;
|
|
+ /**< Number of packets dropped due to wrong
|
|
+ IP version or header length. */
|
|
+ uip_stats_t hblenerr;
|
|
+ /**< Number of packets dropped due to wrong
|
|
+ IP length, high byte. */
|
|
+ uip_stats_t lblenerr;
|
|
+ /**< Number of packets dropped due to wrong
|
|
+ IP length, low byte. */
|
|
+ uip_stats_t fragerr;
|
|
+ /**< Number of packets dropped since they
|
|
+ were IP fragments. */
|
|
+ uip_stats_t chkerr;
|
|
+ /**< Number of packets dropped due to IP
|
|
+ checksum errors. */
|
|
+ uip_stats_t protoerr;
|
|
+ /**< Number of packets dropped since they
|
|
+ were neither ICMP, UDP nor TCP. */
|
|
+ } ip; /**< IP statistics. */
|
|
+ struct {
|
|
+ uip_stats_t drop;
|
|
+ /**< Number of dropped ICMP packets. */
|
|
+ uip_stats_t recv;
|
|
+ /**< Number of received ICMP packets. */
|
|
+ uip_stats_t sent;
|
|
+ /**< Number of sent ICMP packets. */
|
|
+ uip_stats_t typeerr;
|
|
+ /**< Number of ICMP packets with a wrong
|
|
+ type. */
|
|
+ } icmp; /**< ICMP statistics. */
|
|
+ struct {
|
|
+ uip_stats_t drop;
|
|
+ /**< Number of dropped TCP segments. */
|
|
+ uip_stats_t recv;
|
|
+ /**< Number of recived TCP segments. */
|
|
+ uip_stats_t sent;
|
|
+ /**< Number of sent TCP segments. */
|
|
+ uip_stats_t chkerr;
|
|
+ /**< Number of TCP segments with a bad
|
|
+ checksum. */
|
|
+ uip_stats_t ackerr;
|
|
+ /**< Number of TCP segments with a bad ACK
|
|
+ number. */
|
|
+ uip_stats_t rst;
|
|
+ /**< Number of recevied TCP RST (reset) segments. */
|
|
+ uip_stats_t rexmit;
|
|
+ /**< Number of retransmitted TCP segments. */
|
|
+ uip_stats_t syndrop;
|
|
+ /**< Number of dropped SYNs due to too few
|
|
+ connections was avaliable. */
|
|
+ uip_stats_t synrst;
|
|
+ /**< Number of SYNs for closed ports,
|
|
+ triggering a RST. */
|
|
+ } tcp; /**< TCP statistics. */
|
|
+#if UIP_UDP
|
|
+ struct {
|
|
+ uip_stats_t drop;
|
|
+ /**< Number of dropped UDP segments. */
|
|
+ uip_stats_t recv;
|
|
+ /**< Number of recived UDP segments. */
|
|
+ uip_stats_t sent;
|
|
+ /**< Number of sent UDP segments. */
|
|
+ uip_stats_t chkerr;
|
|
+ /**< Number of UDP segments with a bad
|
|
+ checksum. */
|
|
+ } udp; /**< UDP statistics. */
|
|
+#endif /* UIP_UDP */
|
|
+};
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+/* All the stuff below this point is internal to uIP and should not be
|
|
+ * used directly by an application or by a device driver.
|
|
+ */
|
|
+/*---------------------------------------------------------------------------*/
|
|
+/* u8_t uip_flags:
|
|
+ *
|
|
+ * When the application is called, uip_flags will contain the flags
|
|
+ * that are defined in this file. Please read below for more
|
|
+ * infomation.
|
|
+ */
|
|
+//extern u8_t uip_flags;
|
|
+
|
|
+/* The following flags may be set in the global variable uip_flags
|
|
+ before calling the application callback. The UIP_ACKDATA,
|
|
+ UIP_NEWDATA, and UIP_CLOSE flags may both be set at the same time,
|
|
+ whereas the others are mutualy exclusive. Note that these flags
|
|
+ should *NOT* be accessed directly, but only through the uIP
|
|
+ functions/macros. */
|
|
+
|
|
+#define UIP_ACKDATA 1 /* Signifies that the outstanding data was
|
|
+ acked and the application should send
|
|
+ out new data instead of retransmitting
|
|
+ the last data. */
|
|
+#define UIP_NEWDATA 2 /* Flags the fact that the peer has sent
|
|
+ us new data. */
|
|
+#define UIP_REXMIT 4 /* Tells the application to retransmit the
|
|
+ data that was last sent. */
|
|
+#define UIP_POLL 8 /* Used for polling the application, to
|
|
+ check if the application has data that
|
|
+ it wants to send. */
|
|
+#define UIP_CLOSE 16 /* The remote host has closed the
|
|
+ connection, thus the connection has
|
|
+ gone away. Or the application signals
|
|
+ that it wants to close the
|
|
+ connection. */
|
|
+#define UIP_ABORT 32 /* The remote host has aborted the
|
|
+ connection, thus the connection has
|
|
+ gone away. Or the application signals
|
|
+ that it wants to abort the
|
|
+ connection. */
|
|
+#define UIP_CONNECTED 64 /* We have got a connection from a remote
|
|
+ host and have set up a new connection
|
|
+ for it, or an active connection has
|
|
+ been successfully established. */
|
|
+
|
|
+#define UIP_TIMEDOUT 128 /* The connection has been aborted due to
|
|
+ too many retransmissions. */
|
|
+
|
|
+void uip_input(struct uip_stack *ustack);
|
|
+void uip_periodic(struct uip_stack *ustack, int conn);
|
|
+
|
|
+/* uip_process(flag):
|
|
+ *
|
|
+ * The actual uIP function which does all the work.
|
|
+ */
|
|
+void uip_process(struct uip_stack *ustack, u8_t flag);
|
|
+
|
|
+/* The following flags are passed as an argument to the uip_process()
|
|
+ function. They are used to distinguish between the two cases where
|
|
+ uip_process() is called. It can be called either because we have
|
|
+ incoming data that should be processed, or because the periodic
|
|
+ timer has fired. These values are never used directly, but only in
|
|
+ the macrose defined in this file. */
|
|
+
|
|
+#define UIP_DATA 1 /* Tells uIP that there is incoming
|
|
+ data in the uip_buf buffer. The
|
|
+ length of the data is stored in the
|
|
+ global variable uip_len. */
|
|
+#define UIP_TIMER 2 /* Tells uIP that the periodic timer
|
|
+ has fired. */
|
|
+#define UIP_POLL_REQUEST 3 /* Tells uIP that a connection should
|
|
+ be polled. */
|
|
+#define UIP_UDP_SEND_CONN 4 /* Tells uIP that a UDP datagram
|
|
+ should be constructed in the
|
|
+ uip_buf buffer. */
|
|
+#if UIP_UDP
|
|
+#define UIP_UDP_TIMER 5
|
|
+#endif /* UIP_UDP */
|
|
+
|
|
+#define UIP_NDP_TIMER 6
|
|
+
|
|
+/* The TCP states used in the uip_conn->tcpstateflags. */
|
|
+#define UIP_CLOSED 0
|
|
+#define UIP_SYN_RCVD 1
|
|
+#define UIP_SYN_SENT 2
|
|
+#define UIP_ESTABLISHED 3
|
|
+#define UIP_FIN_WAIT_1 4
|
|
+#define UIP_FIN_WAIT_2 5
|
|
+#define UIP_CLOSING 6
|
|
+#define UIP_TIME_WAIT 7
|
|
+#define UIP_LAST_ACK 8
|
|
+#define UIP_TS_MASK 15
|
|
+
|
|
+#define UIP_STOPPED 16
|
|
+
|
|
+struct __attribute__ ((__packed__)) uip_tcp_hdr {
|
|
+ /* TCP header. */
|
|
+ u16_t srcport, destport;
|
|
+ u8_t seqno[4], ackno[4], tcpoffset, flags, wnd[2];
|
|
+ u16_t tcpchksum;
|
|
+ u8_t urgp[2];
|
|
+ u8_t optdata[4];
|
|
+};
|
|
+
|
|
+struct __attribute__ ((__packed__)) uip_ipv4_hdr {
|
|
+ /* IPv4 header. */
|
|
+ u8_t vhl, tos, len[2], ipid[2], ipoffset[2], ttl, proto;
|
|
+ u16_t ipchksum;
|
|
+ u16_t srcipaddr[2], destipaddr[2];
|
|
+};
|
|
+
|
|
+struct __attribute__ ((__packed__)) uip_ipv6_hdr {
|
|
+ /* IPv6 header. */
|
|
+ u8_t vtc, tcflow;
|
|
+ u16_t flow;
|
|
+// u8_t len[2];
|
|
+ u16_t len;
|
|
+ u8_t proto, ttl;
|
|
+ uip_ip6addr_t srcipaddr, destipaddr;
|
|
+};
|
|
+
|
|
+/* The TCP and IPv4 headers. */
|
|
+struct __attribute__ ((__packed__)) uip_tcp_ipv4_hdr {
|
|
+ /* IPv4 header. */
|
|
+ u8_t vhl, tos, len[2], ipid[2], ipoffset[2], ttl, proto;
|
|
+ u16_t ipchksum;
|
|
+ u16_t srcipaddr[2], destipaddr[2];
|
|
+
|
|
+ /* TCP header. */
|
|
+ u16_t srcport, destport;
|
|
+ u8_t seqno[4], ackno[4], tcpoffset, flags, wnd[2];
|
|
+ u16_t tcpchksum;
|
|
+ u8_t urgp[2];
|
|
+ u8_t optdata[4];
|
|
+};
|
|
+
|
|
+/* The TCP and IP headers. */
|
|
+struct __attribute__ ((__packed__)) uip_tcp_ipv6_hdr {
|
|
+ /* IPv6 header. */
|
|
+ u8_t vtc, tcflow;
|
|
+ u16_t flow;
|
|
+ u8_t len[2];
|
|
+ u8_t proto, ttl;
|
|
+ uip_ip6addr_t srcipaddr, destipaddr;
|
|
+
|
|
+ /* TCP header. */
|
|
+ u16_t srcport, destport;
|
|
+ u8_t seqno[4], ackno[4], tcpoffset, flags, wnd[2];
|
|
+ u16_t tcpchksum;
|
|
+ u8_t urgp[2];
|
|
+ u8_t optdata[4];
|
|
+};
|
|
+
|
|
+/* The ICMPv4 */
|
|
+struct __attribute__ ((__packed__)) uip_icmpv4_hdr {
|
|
+ /* ICMP (echo) header. */
|
|
+ u8_t type, icode;
|
|
+ u16_t icmpchksum;
|
|
+ u16_t id, seqno;
|
|
+};
|
|
+
|
|
+/* The ICMPv6 */
|
|
+struct __attribute__ ((__packed__)) uip_icmpv6_hdr {
|
|
+ /* ICMP (echo) header. */
|
|
+ u8_t type, icode;
|
|
+ u16_t icmpchksum;
|
|
+ u8_t flags, reserved1, reserved2, reserved3;
|
|
+ u8_t icmp6data[16];
|
|
+ u8_t options[1];
|
|
+};
|
|
+
|
|
+/* The ICMP and IP headers. */
|
|
+struct __attribute__ ((__packed__)) uip_icmpip_hdr {
|
|
+#if UIP_CONF_IPV6
|
|
+ /* IPv6 header. */
|
|
+ u8_t vtc, tcf;
|
|
+ u16_t flow;
|
|
+ u8_t len[2];
|
|
+ u8_t proto, ttl;
|
|
+ uip_ip6addr_t srcipaddr, destipaddr;
|
|
+#else /* UIP_CONF_IPV6 */
|
|
+ /* IPv4 header. */
|
|
+ u8_t vhl, tos, len[2], ipid[2], ipoffset[2], ttl, proto;
|
|
+ u16_t ipchksum;
|
|
+ u16_t srcipaddr[2], destipaddr[2];
|
|
+#endif /* UIP_CONF_IPV6 */
|
|
+
|
|
+ /* ICMP (echo) header. */
|
|
+ u8_t type, icode;
|
|
+ u16_t icmpchksum;
|
|
+#if !UIP_CONF_IPV6
|
|
+ u16_t id, seqno;
|
|
+#else /* !UIP_CONF_IPV6 */
|
|
+ u8_t flags, reserved1, reserved2, reserved3;
|
|
+ u8_t icmp6data[16];
|
|
+ u8_t options[1];
|
|
+#endif /* !UIP_CONF_IPV6 */
|
|
+};
|
|
+
|
|
+/* The UDP */
|
|
+struct __attribute__ ((__packed__)) uip_udp_hdr {
|
|
+ /* UDP header. */
|
|
+ u16_t srcport, destport;
|
|
+ u16_t udplen;
|
|
+ u16_t udpchksum;
|
|
+};
|
|
+
|
|
+/* The UDP and IP headers. */
|
|
+struct __attribute__ ((__packed__)) uip_udpip_hdr {
|
|
+#if UIP_CONF_IPV6
|
|
+ /* IPv6 header. */
|
|
+ u8_t vtc, tcf;
|
|
+ u16_t flow;
|
|
+ u8_t len[2];
|
|
+ u8_t proto, ttl;
|
|
+ uip_ip6addr_t srcipaddr, destipaddr;
|
|
+#else /* UIP_CONF_IPV6 */
|
|
+ /* IP header. */
|
|
+ u8_t vhl, tos, len[2], ipid[2], ipoffset[2], ttl, proto;
|
|
+ u16_t ipchksum;
|
|
+ u16_t srcipaddr[2], destipaddr[2];
|
|
+#endif /* UIP_CONF_IPV6 */
|
|
+
|
|
+ /* UDP header. */
|
|
+ u16_t srcport, destport;
|
|
+ u16_t udplen;
|
|
+ u16_t udpchksum;
|
|
+};
|
|
+
|
|
+/**
|
|
+ * The buffer size available for user data in the \ref uip_buf buffer.
|
|
+ *
|
|
+ * This macro holds the available size for user data in the \ref
|
|
+ * uip_buf buffer. The macro is intended to be used for checking
|
|
+ * bounds of available user data.
|
|
+ *
|
|
+ * Example:
|
|
+ \code
|
|
+ snprintf(uip_appdata, UIP_APPDATA_SIZE, "%u\n", i);
|
|
+ \endcode
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define UIP_APPDATA_SIZE (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN)
|
|
+
|
|
+#define UIP_PROTO_ICMP 1
|
|
+#define UIP_PROTO_TCP 6
|
|
+#define UIP_PROTO_UDP 17
|
|
+#define UIP_PROTO_ICMP6 58
|
|
+
|
|
+/* Header sizes. */
|
|
+#define UIP_IPv6_H_LEN 40 /* Size of IPv6 header */
|
|
+#define UIP_IPv4_H_LEN 20 /* Size of IPv4 header */
|
|
+
|
|
+#define UIP_UDPH_LEN 8 /* Size of UDP header */
|
|
+#define UIP_TCPH_LEN 20 /* Size of TCP header */
|
|
+
|
|
+#define UIP_IPv4_UDPH_LEN (UIP_UDPH_LEN + UIP_IPv4_H_LEN) /* Size of IPv4
|
|
+ + UDP
|
|
+ header */
|
|
+#define UIP_IPv4_TCPH_LEN (UIP_TCPH_LEN + UIP_IPv4_H_LEN) /* Size of IPv4
|
|
+ + TCP
|
|
+ header */
|
|
+#define UIP_TCP_IPv4_HLEN UIP_IPv4_TCPH_LEN
|
|
+
|
|
+#define UIP_IPv6_UDPH_LEN (UIP_UDPH_LEN + UIP_IPv6_H_LEN) /* Size of IPv6
|
|
+ + UDP
|
|
+ header */
|
|
+#define UIP_IPv6_TCPH_LEN (UIP_TCPH_LEN + UIP_IPv6_H_LEN) /* Size of IPv6
|
|
+ + TCP
|
|
+ header */
|
|
+#define UIP_TCP_IPv6_HLEN UIP_IPv6_TCPH_LEN
|
|
+
|
|
+/**
|
|
+ * Calculate the Internet checksum over a buffer.
|
|
+ *
|
|
+ * The Internet checksum is the one's complement of the one's
|
|
+ * complement sum of all 16-bit words in the buffer.
|
|
+ *
|
|
+ * See RFC1071.
|
|
+ *
|
|
+ * \param buf A pointer to the buffer over which the checksum is to be
|
|
+ * computed.
|
|
+ *
|
|
+ * \param len The length of the buffer over which the checksum is to
|
|
+ * be computed.
|
|
+ *
|
|
+ * \return The Internet checksum of the buffer.
|
|
+ */
|
|
+u16_t uip_chksum(u16_t * buf, u16_t len);
|
|
+
|
|
+/**
|
|
+ * Calculate the IP header checksum of the packet header in uip_buf.
|
|
+ *
|
|
+ * The IP header checksum is the Internet checksum of the 20 bytes of
|
|
+ * the IP header.
|
|
+ *
|
|
+ * \return The IP header checksum of the IP header in the uip_buf
|
|
+ * buffer.
|
|
+ */
|
|
+u16_t uip_ipchksum(struct uip_stack *ustack);
|
|
+
|
|
+/**
|
|
+ * Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
|
|
+ *
|
|
+ * The TCP checksum is the Internet checksum of data contents of the
|
|
+ * TCP segment, and a pseudo-header as defined in RFC793.
|
|
+ *
|
|
+ * \return The TCP checksum of the TCP segment in uip_buf and pointed
|
|
+ * to by uip_appdata.
|
|
+ */
|
|
+u16_t uip_tcpchksum(struct uip_stack *ustack);
|
|
+
|
|
+/**
|
|
+ * Calculate the UDP checksum of the packet in uip_buf and uip_appdata.
|
|
+ *
|
|
+ * The UDP checksum is the Internet checksum of data contents of the
|
|
+ * UDP segment, and a pseudo-header as defined in RFC768.
|
|
+ *
|
|
+ * \return The UDP checksum of the UDP segment in uip_buf and pointed
|
|
+ * to by uip_appdata.
|
|
+ */
|
|
+u16_t uip_udpchksum(struct uip_stack *ustack);
|
|
+
|
|
+/* IPv6 checksum */
|
|
+uint16_t icmpv6_checksum(uint8_t * data);
|
|
+
|
|
+struct neighbor_entry {
|
|
+ struct in6_addr ipaddr;
|
|
+ struct uip_eth_addr mac_addr;
|
|
+ u8_t time;
|
|
+};
|
|
+
|
|
+struct uip_stack {
|
|
+ struct uip_eth_addr uip_ethaddr;
|
|
+
|
|
+ u8_t *uip_buf;
|
|
+
|
|
+ uint8_t *data_link_layer; /* Pointer to the data link layer */
|
|
+ uint8_t *network_layer; /* Pointer to the network layer */
|
|
+ void *uip_appdata; /* The uip_appdata pointer points to
|
|
+ application data. */
|
|
+ void *uip_sappdata; /* The uip_appdata pointer points to
|
|
+ the application data which is to
|
|
+ be sent. */
|
|
+#if UIP_URGDATA > 0
|
|
+ void *uip_urgdata; /* The uip_urgdata pointer points to
|
|
+ urgent data (out-of-band data), if
|
|
+ present. */
|
|
+ u16_t uip_urglen, uip_surglen;
|
|
+#endif /* UIP_URGDATA > 0 */
|
|
+
|
|
+ u16_t uip_len, uip_slen; /* The uip_len is either 8 or 16 bits,
|
|
+ depending on the maximum packet
|
|
+ size. */
|
|
+ u8_t uip_flags; /* The uip_flags variable is used for
|
|
+ communication between the TCP/IP stack
|
|
+ and the application program. */
|
|
+ struct uip_conn *uip_conn; /* uip_conn always points to the current
|
|
+ connection. */
|
|
+
|
|
+ struct uip_conn uip_conns[UIP_CONNS];
|
|
+ /* The uip_conns array holds all TCP
|
|
+ connections. */
|
|
+ u16_t uip_listenports[UIP_LISTENPORTS];
|
|
+ /* The uip_listenports list all currently
|
|
+ listning ports. */
|
|
+#if UIP_UDP
|
|
+ struct uip_udp_conn *uip_udp_conn;
|
|
+ struct uip_udp_conn uip_udp_conns[UIP_UDP_CONNS];
|
|
+#endif /* UIP_UDP */
|
|
+
|
|
+ u16_t ipid; /* This ipid variable is an increasing
|
|
+ number that is used for the IP ID
|
|
+ field. */
|
|
+
|
|
+ u8_t iss[4]; /* The iss variable is used for the TCP
|
|
+ initial sequence number. */
|
|
+
|
|
+#if UIP_ACTIVE_OPEN
|
|
+ u16_t lastport; /* Keeps track of the last port used for
|
|
+ a new connection. */
|
|
+#endif /* UIP_ACTIVE_OPEN */
|
|
+
|
|
+#define IPV4_CONFIG_OFF 0x01
|
|
+#define IPV4_CONFIG_STATIC 0x02
|
|
+#define IPV4_CONFIG_DHCP 0x04
|
|
+#define IPV6_CONFIG_OFF 0x10
|
|
+#define IPV6_CONFIG_STATIC 0x20
|
|
+#define IPV6_CONFIG_DHCP 0x40
|
|
+ u8_t ip_config;
|
|
+
|
|
+ uip_ip4addr_t hostaddr, netmask, default_route_addr;
|
|
+ uip_ip6addr_t hostaddr6, netmask6, default_route_addr6;
|
|
+ int prefix_len;
|
|
+
|
|
+#define UIP_NEIGHBOR_ENTRIES 8
|
|
+ struct neighbor_entry neighbor_entries[UIP_NEIGHBOR_ENTRIES];
|
|
+
|
|
+ struct uip_stats stats;
|
|
+
|
|
+ u8_t opt;
|
|
+
|
|
+ pthread_mutex_t lock;
|
|
+
|
|
+ /* IPv6 support */
|
|
+
|
|
+#define UIP_SUPPORT_IPv6_ENABLED 0x01
|
|
+#define UIP_SUPPORT_IPv6_DISABLED 0x02
|
|
+ u8_t enable_IPv6;
|
|
+
|
|
+ /* DHCPC client attached */
|
|
+ void *dhcpc;
|
|
+
|
|
+ /* NDP client */
|
|
+ void *ndpc;
|
|
+};
|
|
+
|
|
+/*******************************************************************************
|
|
+ * IPv6 Support
|
|
+ ******************************************************************************/
|
|
+int set_ipv6_link_local_address(struct uip_stack *ustack);
|
|
+int is_ipv6_link_local_address(uip_ip6addr_t * addr);
|
|
+
|
|
+void dump_uip_packet(struct uip_stack *ustack);
|
|
+
|
|
+#endif /* __UIP_H__ */
|
|
+
|
|
+/** @} */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/uip-neighbor.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/uip-neighbor.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/uip-neighbor.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/uip-neighbor.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,221 @@
|
|
+/*
|
|
+ * Copyright (c) 2006, Swedish Institute of Computer Science.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. Neither the name of the Institute nor the names of its contributors
|
|
+ * may be used to endorse or promote products derived from this software
|
|
+ * without specific prior written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
|
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
|
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
+ * SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack
|
|
+ *
|
|
+ * $Id: uip-neighbor.c,v 1.2 2006/06/12 08:00:30 adam Exp $
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \file
|
|
+ * Database of link-local neighbors, used by IPv6 code and
|
|
+ * to be used by a future ARP code rewrite.
|
|
+ * \author
|
|
+ * Adam Dunkels <adam@sics.se>
|
|
+ */
|
|
+
|
|
+#include "logger.h"
|
|
+#include "uip.h"
|
|
+#include "uip-neighbor.h"
|
|
+
|
|
+#include <errno.h>
|
|
+#include <string.h>
|
|
+#include <arpa/inet.h>
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Constants
|
|
+ ******************************************************************************/
|
|
+#define PFX "uip-neigh "
|
|
+
|
|
+#define MAX_TIME 128
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+void uip_neighbor_init(struct uip_stack *ustack)
|
|
+{
|
|
+ int i;
|
|
+
|
|
+ pthread_mutex_lock(&ustack->lock);
|
|
+ for (i = 0; i < UIP_NEIGHBOR_ENTRIES; ++i) {
|
|
+ memset(&(ustack->neighbor_entries[i].ipaddr), 0,
|
|
+ sizeof(ustack->neighbor_entries[i].ipaddr));
|
|
+ memset(&(ustack->neighbor_entries[i].mac_addr), 0,
|
|
+ sizeof(ustack->neighbor_entries[i].mac_addr));
|
|
+ ustack->neighbor_entries[i].time = MAX_TIME;
|
|
+ }
|
|
+ pthread_mutex_unlock(&ustack->lock);
|
|
+}
|
|
+
|
|
+void uip_neighbor_add(struct uip_stack *ustack,
|
|
+ struct in6_addr *addr6, struct uip_eth_addr *addr)
|
|
+{
|
|
+ int i, oldest;
|
|
+ u8_t oldest_time;
|
|
+ char buf[INET6_ADDRSTRLEN];
|
|
+
|
|
+ inet_ntop(AF_INET6, addr6, buf, sizeof(buf));
|
|
+
|
|
+ pthread_mutex_lock(&ustack->lock);
|
|
+
|
|
+ /* Find the first unused entry or the oldest used entry. */
|
|
+ oldest_time = 0;
|
|
+ oldest = 0;
|
|
+ for (i = 0; i < UIP_NEIGHBOR_ENTRIES; ++i) {
|
|
+ if (ustack->neighbor_entries[i].time == MAX_TIME) {
|
|
+ oldest = i;
|
|
+ break;
|
|
+ }
|
|
+ if (uip_ip6addr_cmp
|
|
+ (ustack->neighbor_entries[i].ipaddr.s6_addr, addr6)) {
|
|
+ oldest = i;
|
|
+ break;
|
|
+ }
|
|
+ if (ustack->neighbor_entries[i].time > oldest_time) {
|
|
+ oldest = i;
|
|
+ oldest_time = ustack->neighbor_entries[i].time;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /* Use the oldest or first free entry (either pointed to by the
|
|
+ "oldest" variable). */
|
|
+ ustack->neighbor_entries[oldest].time = 0;
|
|
+ uip_ip6addr_copy(ustack->neighbor_entries[oldest].ipaddr.s6_addr,
|
|
+ addr6);
|
|
+ memcpy(&ustack->neighbor_entries[oldest].mac_addr, addr,
|
|
+ sizeof(struct uip_eth_addr));
|
|
+
|
|
+ LOG_DEBUG("Adding neighbor %s with "
|
|
+ "mac address %02x:%02x:%02x:%02x:%02x:%02x at %d",
|
|
+ buf, addr->addr[0], addr->addr[1], addr->addr[2],
|
|
+ addr->addr[3], addr->addr[4], addr->addr[5], oldest);
|
|
+
|
|
+ pthread_mutex_unlock(&ustack->lock);
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+static struct neighbor_entry *find_entry(struct uip_stack *ustack,
|
|
+ struct in6_addr *addr6)
|
|
+{
|
|
+ int i;
|
|
+
|
|
+ for (i = 0; i < UIP_NEIGHBOR_ENTRIES; ++i) {
|
|
+ if (uip_ip6addr_cmp
|
|
+ (ustack->neighbor_entries[i].ipaddr.s6_addr,
|
|
+ addr6->s6_addr)) {
|
|
+ return &ustack->neighbor_entries[i];
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return NULL;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+void uip_neighbor_update(struct uip_stack *ustack, struct in6_addr *addr6)
|
|
+{
|
|
+ struct neighbor_entry *e;
|
|
+
|
|
+ pthread_mutex_lock(&ustack->lock);
|
|
+
|
|
+ e = find_entry(ustack, addr6);
|
|
+ if (e != NULL) {
|
|
+ e->time = 0;
|
|
+ }
|
|
+
|
|
+ pthread_mutex_unlock(&ustack->lock);
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+int uip_neighbor_lookup(struct uip_stack *ustack,
|
|
+ struct in6_addr *addr6, uint8_t * mac_addr)
|
|
+{
|
|
+ struct neighbor_entry *e;
|
|
+
|
|
+ pthread_mutex_lock(&ustack->lock);
|
|
+ e = find_entry(ustack, addr6);
|
|
+ if (e != NULL) {
|
|
+ char addr6_str[INET6_ADDRSTRLEN];
|
|
+ uint8_t *entry_mac_addr;
|
|
+
|
|
+ addr6_str[0] = '\0';
|
|
+ inet_ntop(AF_INET6, addr6->s6_addr, addr6_str,
|
|
+ sizeof(addr6_str));
|
|
+ entry_mac_addr = (uint8_t *) & e->mac_addr.addr;
|
|
+
|
|
+ LOG_DEBUG(PFX
|
|
+ "Found %s at %02x:%02x:%02x:%02x:%02x:%02x",
|
|
+ addr6_str,
|
|
+ entry_mac_addr[0], entry_mac_addr[1],
|
|
+ entry_mac_addr[2], entry_mac_addr[3],
|
|
+ entry_mac_addr[4], entry_mac_addr[5]);
|
|
+
|
|
+ memcpy(mac_addr, entry_mac_addr, sizeof(e->mac_addr));
|
|
+ pthread_mutex_unlock(&ustack->lock);
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
+ pthread_mutex_unlock(&ustack->lock);
|
|
+ return -ENOENT;
|
|
+}
|
|
+
|
|
+void uip_neighbor_out(struct uip_stack *ustack)
|
|
+{
|
|
+ struct neighbor_entry *e;
|
|
+ struct uip_eth_hdr *eth_hdr =
|
|
+ (struct uip_eth_hdr *)ustack->data_link_layer;
|
|
+ struct uip_ipv6_hdr *ipv6_hdr =
|
|
+ (struct uip_ipv6_hdr *)ustack->network_layer;
|
|
+
|
|
+ pthread_mutex_lock(&ustack->lock);
|
|
+
|
|
+ /* Find the destination IP address in the neighbor table and construct
|
|
+ the Ethernet header. If the destination IP addres isn't on the
|
|
+ local network, we use the default router's IP address instead.
|
|
+
|
|
+ If not ARP table entry is found, we overwrite the original IP
|
|
+ packet with an ARP request for the IP address. */
|
|
+ e = find_entry(ustack, (struct in6_addr *)ipv6_hdr->destipaddr);
|
|
+ if (e == NULL) {
|
|
+ struct uip_eth_addr eth_addr_tmp;
|
|
+
|
|
+ memcpy(ð_addr_tmp, eth_hdr->src.addr, sizeof(eth_addr_tmp));
|
|
+ memcpy(eth_hdr->src.addr, ustack->uip_ethaddr.addr,
|
|
+ sizeof(eth_hdr->src.addr));
|
|
+ memcpy(eth_hdr->dest.addr, ð_addr_tmp,
|
|
+ sizeof(eth_hdr->dest.addr));
|
|
+
|
|
+ pthread_mutex_unlock(&ustack->lock);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ memcpy(eth_hdr->dest.addr, &e->mac_addr, sizeof(eth_hdr->dest.addr));
|
|
+ memcpy(eth_hdr->src.addr, ustack->uip_ethaddr.addr,
|
|
+ sizeof(eth_hdr->src.addr));
|
|
+
|
|
+ pthread_mutex_unlock(&ustack->lock);
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/uip-neighbor.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/uip-neighbor.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/uip-neighbor.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/uip-neighbor.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,106 @@
|
|
+/*
|
|
+ * Copyright (c) 2006, Swedish Institute of Computer Science.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. Neither the name of the Institute nor the names of its contributors
|
|
+ * may be used to endorse or promote products derived from this software
|
|
+ * without specific prior written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
|
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
|
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
+ * SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack
|
|
+ *
|
|
+ * $Id: uip-neighbor.h,v 1.2 2006/06/12 08:00:30 adam Exp $
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \file
|
|
+ * Header file for database of link-local neighbors, used by
|
|
+ * IPv6 code and to be used by future ARP code.
|
|
+ * \author
|
|
+ * Adam Dunkels <adam@sics.se>
|
|
+ */
|
|
+
|
|
+#ifndef __UIP_NEIGHBOR_H__
|
|
+#define __UIP_NEIGHBOR_H__
|
|
+
|
|
+#include "uip.h"
|
|
+#include "uip_eth.h"
|
|
+
|
|
+/* ICMP types */
|
|
+/* ICMPv6 error Messages */
|
|
+#define ICMPV6_DEST_UNREACH 1
|
|
+#define ICMPV6_PKT_TOOBIG 2
|
|
+#define ICMPV6_TIME_EXCEED 3
|
|
+#define ICMPV6_PARAMPROB 4
|
|
+
|
|
+/* ICMPv6 Informational Messages */
|
|
+#define ICMPV6_ECHO_REQUEST 128
|
|
+#define ICMPV6_ECHO_REPLY 129
|
|
+#define ICMPV6_MGM_QUERY 130
|
|
+#define ICMPV6_MGM_REPORT 131
|
|
+#define ICMPV6_MGM_REDUCTION 132
|
|
+
|
|
+/* Codes for Destination Unreachable */
|
|
+#define ICMPV6_NOROUTE 0
|
|
+#define ICMPV6_ADM_PROHIBITED 1
|
|
+#define ICMPV6_NOT_NEIGHBOUR 2
|
|
+#define ICMPV6_ADDR_UNREACH 3
|
|
+#define ICMPV6_PORT_UNREACH 4
|
|
+
|
|
+/* Codes for Time Exceeded */
|
|
+#define ICMPV6_EXC_HOPLIMIT 0
|
|
+#define ICMPV6_EXC_FRAGTIME 1
|
|
+
|
|
+/* Codes for Parameter Problem */
|
|
+#define ICMPV6_HDR_FIELD 0
|
|
+#define ICMPV6_UNK_NEXTHDR 1
|
|
+#define ICMPV6_UNK_OPTION 2
|
|
+
|
|
+#if 0
|
|
+struct __attribute__ ((__packed__)) icmpv6_hdr {
|
|
+ u8_t type;
|
|
+ u8_t code;
|
|
+ u16_t checksum;
|
|
+ union {
|
|
+ struct {
|
|
+ u16_t id;
|
|
+ u16_t sequence;
|
|
+ } echo;
|
|
+ u32_t gateway;
|
|
+ struct {
|
|
+ u16_t unused;
|
|
+ u16_t mtu;
|
|
+ } frag;
|
|
+ } un;
|
|
+};
|
|
+#endif
|
|
+
|
|
+void uip_neighbor_init(struct uip_stack *ustack);
|
|
+void uip_neighbor_add(struct uip_stack *ustack,
|
|
+ struct in6_addr *addr6, struct uip_eth_addr *addr);
|
|
+void uip_neighbor_update(struct uip_stack *ustack, struct in6_addr *addr6);
|
|
+int uip_neighbor_lookup(struct uip_stack *ustack, struct in6_addr *ipaddr,
|
|
+ uint8_t * mac_addr);
|
|
+void uip_neighbor_periodic(void);
|
|
+void uip_neighbor_out(struct uip_stack *ustack);
|
|
+
|
|
+#endif /* __UIP-NEIGHBOR_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/uipopt.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/uipopt.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip/uipopt.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip/uipopt.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,537 @@
|
|
+/**
|
|
+ * \defgroup uipopt Configuration options for uIP
|
|
+ * @{
|
|
+ *
|
|
+ * uIP is configured using the per-project configuration file
|
|
+ * uipopt.h. This file contains all compile-time options for uIP and
|
|
+ * should be tweaked to match each specific project. The uIP
|
|
+ * distribution contains a documented example "uipopt.h" that can be
|
|
+ * copied and modified for each project.
|
|
+ *
|
|
+ * \note Most of the configuration options in the uipopt.h should not
|
|
+ * be changed, but rather the per-project uip-conf.h file.
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \file
|
|
+ * Configuration options for uIP.
|
|
+ * \author Adam Dunkels <adam@dunkels.com>
|
|
+ *
|
|
+ * This file is used for tweaking various configuration options for
|
|
+ * uIP. You should make a copy of this file into one of your project's
|
|
+ * directories instead of editing this example "uipopt.h" file that
|
|
+ * comes with the uIP distribution.
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * Copyright (c) 2001-2003, Adam Dunkels.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack.
|
|
+ *
|
|
+ * $Id: uipopt.h,v 1.4 2006/06/12 08:00:31 adam Exp $
|
|
+ *
|
|
+ */
|
|
+
|
|
+#ifndef __UIPOPT_H__
|
|
+#define __UIPOPT_H__
|
|
+
|
|
+#ifndef UIP_LITTLE_ENDIAN
|
|
+#define UIP_LITTLE_ENDIAN 3412
|
|
+#endif /* UIP_LITTLE_ENDIAN */
|
|
+#ifndef UIP_BIG_ENDIAN
|
|
+#define UIP_BIG_ENDIAN 1234
|
|
+#endif /* UIP_BIG_ENDIAN */
|
|
+
|
|
+#include "uip-conf.h"
|
|
+
|
|
+/*------------------------------------------------------------------------------*/
|
|
+
|
|
+/**
|
|
+ * \name Static configuration options
|
|
+ * @{
|
|
+ *
|
|
+ * These configuration options can be used for setting the IP address
|
|
+ * settings statically, but only if UIP_FIXEDADDR is set to 1. The
|
|
+ * configuration options for a specific node includes IP address,
|
|
+ * netmask and default router as well as the Ethernet address. The
|
|
+ * netmask, default router and Ethernet address are appliciable only
|
|
+ * if uIP should be run over Ethernet.
|
|
+ *
|
|
+ * All of these should be changed to suit your project.
|
|
+*/
|
|
+
|
|
+/**
|
|
+ * Determines if uIP should use a fixed IP address or not.
|
|
+ *
|
|
+ * If uIP should use a fixed IP address, the settings are set in the
|
|
+ * uipopt.h file. If not, the macros uip_sethostaddr(),
|
|
+ * uip_setdraddr() and uip_setnetmask() should be used instead.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define UIP_FIXEDADDR 0
|
|
+
|
|
+/**
|
|
+ * Ping IP address asignment.
|
|
+ *
|
|
+ * uIP uses a "ping" packets for setting its own IP address if this
|
|
+ * option is set. If so, uIP will start with an empty IP address and
|
|
+ * the destination IP address of the first incoming "ping" (ICMP echo)
|
|
+ * packet will be used for setting the hosts IP address.
|
|
+ *
|
|
+ * \note This works only if UIP_FIXEDADDR is 0.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#ifdef UIP_CONF_PINGADDRCONF
|
|
+#define UIP_PINGADDRCONF UIP_CONF_PINGADDRCONF
|
|
+#else /* UIP_CONF_PINGADDRCONF */
|
|
+#define UIP_PINGADDRCONF 0
|
|
+#endif /* UIP_CONF_PINGADDRCONF */
|
|
+
|
|
+/**
|
|
+ * Specifies if the uIP ARP module should be compiled with a fixed
|
|
+ * Ethernet MAC address or not.
|
|
+ *
|
|
+ * If this configuration option is 0, the macro uip_setethaddr() can
|
|
+ * be used to specify the Ethernet address at run-time.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define UIP_FIXEDETHADDR 0
|
|
+
|
|
+/** @} */
|
|
+/*------------------------------------------------------------------------------*/
|
|
+/**
|
|
+ * \name IP configuration options
|
|
+ * @{
|
|
+ *
|
|
+ */
|
|
+/**
|
|
+ * The IP TTL (time to live) of IP packets sent by uIP.
|
|
+ *
|
|
+ * This should normally not be changed.
|
|
+ */
|
|
+#define UIP_TTL 64
|
|
+
|
|
+/**
|
|
+ * Turn on support for IP packet reassembly.
|
|
+ *
|
|
+ * uIP supports reassembly of fragmented IP packets. This features
|
|
+ * requires an additonal amount of RAM to hold the reassembly buffer
|
|
+ * and the reassembly code size is approximately 700 bytes. The
|
|
+ * reassembly buffer is of the same size as the uip_buf buffer
|
|
+ * (configured by UIP_BUFSIZE).
|
|
+ *
|
|
+ * \note IP packet reassembly is not heavily tested.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define UIP_REASSEMBLY 0
|
|
+
|
|
+/**
|
|
+ * The maximum time an IP fragment should wait in the reassembly
|
|
+ * buffer before it is dropped.
|
|
+ *
|
|
+ */
|
|
+#define UIP_REASS_MAXAGE 40
|
|
+
|
|
+/** @} */
|
|
+
|
|
+/*------------------------------------------------------------------------------*/
|
|
+/**
|
|
+ * \name UDP configuration options
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * Toggles wether UDP support should be compiled in or not.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#ifdef UIP_CONF_UDP
|
|
+#define UIP_UDP UIP_CONF_UDP
|
|
+#else /* UIP_CONF_UDP */
|
|
+#define UIP_UDP 0
|
|
+#endif /* UIP_CONF_UDP */
|
|
+
|
|
+/**
|
|
+ * Toggles if UDP checksums should be used or not.
|
|
+ *
|
|
+ * \note Support for UDP checksums is currently not included in uIP,
|
|
+ * so this option has no function.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#ifdef UIP_CONF_UDP_CHECKSUMS
|
|
+#define UIP_UDP_CHECKSUMS UIP_CONF_UDP_CHECKSUMS
|
|
+#else
|
|
+#define UIP_UDP_CHECKSUMS 0
|
|
+#endif
|
|
+
|
|
+/**
|
|
+ * The maximum amount of concurrent UDP connections.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#ifdef UIP_CONF_UDP_CONNS
|
|
+#define UIP_UDP_CONNS UIP_CONF_UDP_CONNS
|
|
+#else /* UIP_CONF_UDP_CONNS */
|
|
+#define UIP_UDP_CONNS 10
|
|
+#endif /* UIP_CONF_UDP_CONNS */
|
|
+
|
|
+/**
|
|
+ * The name of the function that should be called when UDP datagrams arrive.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+
|
|
+/** @} */
|
|
+/*------------------------------------------------------------------------------*/
|
|
+/**
|
|
+ * \name TCP configuration options
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * Determines if support for opening connections from uIP should be
|
|
+ * compiled in.
|
|
+ *
|
|
+ * If the applications that are running on top of uIP for this project
|
|
+ * do not need to open outgoing TCP connections, this configration
|
|
+ * option can be turned off to reduce the code size of uIP.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define UIP_ACTIVE_OPEN 1
|
|
+
|
|
+/**
|
|
+ * The maximum number of simultaneously open TCP connections.
|
|
+ *
|
|
+ * Since the TCP connections are statically allocated, turning this
|
|
+ * configuration knob down results in less RAM used. Each TCP
|
|
+ * connection requires approximatly 30 bytes of memory.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#ifndef UIP_CONF_MAX_CONNECTIONS
|
|
+#define UIP_CONNS 10
|
|
+#else /* UIP_CONF_MAX_CONNECTIONS */
|
|
+#define UIP_CONNS UIP_CONF_MAX_CONNECTIONS
|
|
+#endif /* UIP_CONF_MAX_CONNECTIONS */
|
|
+
|
|
+/**
|
|
+ * The maximum number of simultaneously listening TCP ports.
|
|
+ *
|
|
+ * Each listening TCP port requires 2 bytes of memory.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#ifndef UIP_CONF_MAX_LISTENPORTS
|
|
+#define UIP_LISTENPORTS 20
|
|
+#else /* UIP_CONF_MAX_LISTENPORTS */
|
|
+#define UIP_LISTENPORTS UIP_CONF_MAX_LISTENPORTS
|
|
+#endif /* UIP_CONF_MAX_LISTENPORTS */
|
|
+
|
|
+/**
|
|
+ * Determines if support for TCP urgent data notification should be
|
|
+ * compiled in.
|
|
+ *
|
|
+ * Urgent data (out-of-band data) is a rarely used TCP feature that
|
|
+ * very seldom would be required.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define UIP_URGDATA 0
|
|
+
|
|
+/**
|
|
+ * The initial retransmission timeout counted in timer pulses.
|
|
+ *
|
|
+ * This should not be changed.
|
|
+ */
|
|
+#define UIP_RTO 3
|
|
+
|
|
+/**
|
|
+ * The maximum number of times a segment should be retransmitted
|
|
+ * before the connection should be aborted.
|
|
+ *
|
|
+ * This should not be changed.
|
|
+ */
|
|
+#define UIP_MAXRTX 8
|
|
+
|
|
+/**
|
|
+ * The maximum number of times a SYN segment should be retransmitted
|
|
+ * before a connection request should be deemed to have been
|
|
+ * unsuccessful.
|
|
+ *
|
|
+ * This should not need to be changed.
|
|
+ */
|
|
+#define UIP_MAXSYNRTX 5
|
|
+
|
|
+/**
|
|
+ * The TCP maximum segment size.
|
|
+ *
|
|
+ * This is should not be to set to more than
|
|
+ * UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN.
|
|
+ */
|
|
+#define UIP_TCP_MSS (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCP_IPv4_HLEN)
|
|
+
|
|
+/**
|
|
+ * The size of the advertised receiver's window.
|
|
+ *
|
|
+ * Should be set low (i.e., to the size of the uip_buf buffer) is the
|
|
+ * application is slow to process incoming data, or high (32768 bytes)
|
|
+ * if the application processes data quickly.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#ifndef UIP_CONF_RECEIVE_WINDOW
|
|
+#define UIP_RECEIVE_WINDOW UIP_TCP_MSS
|
|
+#else
|
|
+#define UIP_RECEIVE_WINDOW UIP_CONF_RECEIVE_WINDOW
|
|
+#endif
|
|
+
|
|
+/**
|
|
+ * How long a connection should stay in the TIME_WAIT state.
|
|
+ *
|
|
+ * This configiration option has no real implication, and it should be
|
|
+ * left untouched.
|
|
+ */
|
|
+#define UIP_TIME_WAIT_TIMEOUT 120
|
|
+
|
|
+/** @} */
|
|
+/*------------------------------------------------------------------------------*/
|
|
+/**
|
|
+ * \name ARP configuration options
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * The size of the ARP table.
|
|
+ *
|
|
+ * This option should be set to a larger value if this uIP node will
|
|
+ * have many connections from the local network.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#ifdef UIP_CONF_ARPTAB_SIZE
|
|
+#define UIP_ARPTAB_SIZE UIP_CONF_ARPTAB_SIZE
|
|
+#else
|
|
+#define UIP_ARPTAB_SIZE 8
|
|
+#endif
|
|
+
|
|
+/**
|
|
+ * The maxium age of ARP table entries measured in 10ths of seconds.
|
|
+ *
|
|
+ * An UIP_ARP_MAXAGE of 120 corresponds to 20 minutes (BSD
|
|
+ * default).
|
|
+ * Changed the default to 30 which corresponds to 5 minutes (Linux default)
|
|
+ */
|
|
+#define UIP_ARP_MAXAGE 30
|
|
+
|
|
+/** @} */
|
|
+
|
|
+/*------------------------------------------------------------------------------*/
|
|
+
|
|
+/**
|
|
+ * \name General configuration options
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * The size of the uIP packet buffer.
|
|
+ *
|
|
+ * The uIP packet buffer should not be smaller than 60 bytes, and does
|
|
+ * not need to be larger than 1500 bytes. Lower size results in lower
|
|
+ * TCP throughput, larger size results in higher TCP throughput.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#ifndef UIP_CONF_BUFFER_SIZE
|
|
+#define UIP_BUFSIZE 400
|
|
+#else /* UIP_CONF_BUFFER_SIZE */
|
|
+#define UIP_BUFSIZE UIP_CONF_BUFFER_SIZE
|
|
+#endif /* UIP_CONF_BUFFER_SIZE */
|
|
+
|
|
+/**
|
|
+ * Determines if statistics support should be compiled in.
|
|
+ *
|
|
+ * The statistics is useful for debugging and to show the user.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#ifndef UIP_CONF_STATISTICS
|
|
+#define UIP_STATISTICS 0
|
|
+#else /* UIP_CONF_STATISTICS */
|
|
+#define UIP_STATISTICS UIP_CONF_STATISTICS
|
|
+#endif /* UIP_CONF_STATISTICS */
|
|
+
|
|
+/**
|
|
+ * Determines if logging of certain events should be compiled in.
|
|
+ *
|
|
+ * This is useful mostly for debugging. The function uip_log()
|
|
+ * must be implemented to suit the architecture of the project, if
|
|
+ * logging is turned on.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#ifndef UIP_CONF_LOGGING
|
|
+#define UIP_LOGGING 0
|
|
+#else /* UIP_CONF_LOGGING */
|
|
+#define UIP_LOGGING UIP_CONF_LOGGING
|
|
+#endif /* UIP_CONF_LOGGING */
|
|
+
|
|
+/**
|
|
+ * Broadcast support.
|
|
+ *
|
|
+ * This flag configures IP broadcast support. This is useful only
|
|
+ * together with UDP.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ *
|
|
+ */
|
|
+#ifndef UIP_CONF_BROADCAST
|
|
+#define UIP_BROADCAST 0
|
|
+#else /* UIP_CONF_BROADCAST */
|
|
+#define UIP_BROADCAST UIP_CONF_BROADCAST
|
|
+#endif /* UIP_CONF_BROADCAST */
|
|
+
|
|
+/**
|
|
+ * Print out a uIP log message.
|
|
+ *
|
|
+ * This function must be implemented by the module that uses uIP, and
|
|
+ * is called by uIP whenever a log message is generated.
|
|
+ */
|
|
+void uip_log(char *msg);
|
|
+
|
|
+/**
|
|
+ * The link level header length.
|
|
+ *
|
|
+ * This is the offset into the uip_buf where the IP header can be
|
|
+ * found. For Ethernet, this should be set to 14. For SLIP, this
|
|
+ * should be set to 0.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#ifdef UIP_CONF_LLH_LEN
|
|
+#define UIP_LLH_LEN UIP_CONF_LLH_LEN
|
|
+#else /* UIP_CONF_LLH_LEN */
|
|
+#define UIP_LLH_LEN 14
|
|
+#endif /* UIP_CONF_LLH_LEN */
|
|
+
|
|
+#if 0
|
|
+/** @} */
|
|
+/*------------------------------------------------------------------------------*/
|
|
+/**
|
|
+ * \name CPU architecture configuration
|
|
+ * @{
|
|
+ *
|
|
+ * The CPU architecture configuration is where the endianess of the
|
|
+ * CPU on which uIP is to be run is specified. Most CPUs today are
|
|
+ * little endian, and the most notable exception are the Motorolas
|
|
+ * which are big endian. The BYTE_ORDER macro should be changed to
|
|
+ * reflect the CPU architecture on which uIP is to be run.
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * The byte order of the CPU architecture on which uIP is to be run.
|
|
+ *
|
|
+ * This option can be either BIG_ENDIAN (Motorola byte order) or
|
|
+ * LITTLE_ENDIAN (Intel byte order).
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#ifdef UIP_CONF_BYTE_ORDER
|
|
+#define UIP_BYTE_ORDER UIP_CONF_BYTE_ORDER
|
|
+#else /* UIP_CONF_BYTE_ORDER */
|
|
+#define UIP_BYTE_ORDER UIP_LITTLE_ENDIAN
|
|
+#endif /* UIP_CONF_BYTE_ORDER */
|
|
+#endif
|
|
+
|
|
+/** @} */
|
|
+/*------------------------------------------------------------------------------*/
|
|
+
|
|
+/**
|
|
+ * \name Appication specific configurations
|
|
+ * @{
|
|
+ *
|
|
+ * An uIP application is implemented using a single application
|
|
+ * function that is called by uIP whenever a TCP/IP event occurs. The
|
|
+ * name of this function must be registered with uIP at compile time
|
|
+ * using the UIP_APPCALL definition.
|
|
+ *
|
|
+ * uIP applications can store the application state within the
|
|
+ * uip_conn structure by specifying the type of the application
|
|
+ * structure by typedef:ing the type uip_tcp_appstate_t and uip_udp_appstate_t.
|
|
+ *
|
|
+ * The file containing the definitions must be included in the
|
|
+ * uipopt.h file.
|
|
+ *
|
|
+ * The following example illustrates how this can look.
|
|
+ \code
|
|
+
|
|
+void httpd_appcall(void);
|
|
+#define UIP_APPCALL httpd_appcall
|
|
+
|
|
+struct httpd_state {
|
|
+ u8_t state;
|
|
+ u16_t count;
|
|
+ char *dataptr;
|
|
+ char *script;
|
|
+};
|
|
+typedef struct httpd_state uip_tcp_appstate_t
|
|
+ \endcode
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \var #define UIP_APPCALL
|
|
+ *
|
|
+ * The name of the application function that uIP should call in
|
|
+ * response to TCP/IP events.
|
|
+ *
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \var typedef uip_tcp_appstate_t
|
|
+ *
|
|
+ * The type of the application state that is to be stored in the
|
|
+ * uip_conn structure. This usually is typedef:ed to a struct holding
|
|
+ * application state information.
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \var typedef uip_udp_appstate_t
|
|
+ *
|
|
+ * The type of the application state that is to be stored in the
|
|
+ * uip_conn structure. This usually is typedef:ed to a struct holding
|
|
+ * application state information.
|
|
+ */
|
|
+/** @} */
|
|
+/** @} */
|
|
+
|
|
+#endif /* __UIPOPT_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip-1.0-changelog.txt open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip-1.0-changelog.txt
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/uip-1.0-changelog.txt 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/uip-1.0-changelog.txt 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,98 @@
|
|
+* A new API: protosockets that are similar to BSD sockets but does not
|
|
+ require any underlying multithreading system.
|
|
+
|
|
+* Very rudimentary IPv6 support
|
|
+
|
|
+* New application: DHCP client. Web server rewritten with protosockets.
|
|
+
|
|
+* Removed uIP zero-copy functionality in order to simplify uIP device
|
|
+ driver coding: outbound packets are now *always* stored in full in
|
|
+ the uip_buf buffer.
|
|
+
|
|
+* Checksum computation is now part of uip.c, but it still is possible
|
|
+ to implement them in assembly code by specifying a configuration
|
|
+ option. Checksum code now runs on architectures with 2-byte alignment.
|
|
+
|
|
+* Added TCP persistent timer.
|
|
+
|
|
+* Made all IP address representations use the new uip_ipaddr_ip
|
|
+ datatype for clarity.
|
|
+
|
|
+* Updated window behavior so that sending to a host with a small open
|
|
+ window works better now.
|
|
+
|
|
+* UDP API change: uip_udp_new() now takes port numbers in network byte
|
|
+ order like TCP functions.
|
|
+
|
|
+* Allow reception of packets when no IP address is configured to make
|
|
+ DHCP work.
|
|
+
|
|
+* Moved Ethernet address into main uIP module from ARP module.
|
|
+
|
|
+* Made constants explicit #defines and moved them out of the code
|
|
+ (header sizes, TCP options, TCP header length field).
|
|
+
|
|
+* If uip_len is less than that reported by the IP header, the packet
|
|
+ is discarded. If uip_len is greater than the length reported by the
|
|
+ IP header, uip_len is adjusted.
|
|
+
|
|
+* Moved header size definitions into header file.
|
|
+
|
|
+* Added uIP call for polling an application without triggering any
|
|
+ timer events. Removed redundant assignments of uip_len and uip_slen.
|
|
+
|
|
+* Removed compiler warning about icmp_input label being defined when
|
|
+ UIP_PINGADDRCONF was not used.
|
|
+
|
|
+* Added UIP_APPDATA_SIZE macro that holds the available buffer size
|
|
+ for user data.
|
|
+
|
|
+* Added uip_udp_bind() call.
|
|
+
|
|
+* Moved checksum code into main uIP module.
|
|
+
|
|
+* Switched the TCP, UDP and IP header structures to be structs rather
|
|
+ than typedefs.
|
|
+
|
|
+* Prefixed TCP state names with UIP_ to avoid name space
|
|
+ contamination.
|
|
+
|
|
+* Changed declarations of uip_appdatap and friends to void * to avoid
|
|
+ explicit typecasts.
|
|
+
|
|
+* Bugfixes
|
|
+
|
|
+ o TCP: Fixed bug with high byte of peer window size.
|
|
+
|
|
+ o TCP: Fixed bug that in some cases prevented concurrent reception and
|
|
+ transmission of TCP data.
|
|
+
|
|
+ o TCP: uip_connect() didn't correctly calculate age of TIME_WAIT
|
|
+ connections.
|
|
+
|
|
+ o TCP: Array index for uip_conns[] array was out of bounds in
|
|
+ comparison. Comparison changed to make index within bounds.
|
|
+
|
|
+ o TCP: if the remote host crashes and tries to reestablish an old
|
|
+ connection, uIP should respond with an ACK with the correct
|
|
+ sequence and acknowledgment numbers, to which the remote host
|
|
+ should respond with an ACK. uIP did not respond with the correct
|
|
+ ACK.
|
|
+
|
|
+ o TCP: Fixed check for SYNACK segment: now checks only relevant TCP
|
|
+ control flags and discards flags reserved for future expansion.
|
|
+
|
|
+ o TCP: Fixed bug where uIP did not inform application that a connection
|
|
+ had been aborted during an active open.
|
|
+
|
|
+ o TCP: FIN segment was accepted even though application had stopped
|
|
+ incoming data with uip_stop().
|
|
+
|
|
+ o TCP: A FINACK segment would not always correctly acknowledge data.
|
|
+
|
|
+ o UDP: checksums are now calculated after all fields have been
|
|
+ filled in.
|
|
+
|
|
+ o UDP: network byte order on lastport in uip_udp_new().
|
|
+
|
|
+ o IP: memset() bugs in IP fragment reassembly code fixed.
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/build_date.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/build_date.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/build_date.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/build_date.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1 @@
|
|
+char *build_date ="Thu May 5 12:17:42 PDT 2011";
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/build_date.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/build_date.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/build_date.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/build_date.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1 @@
|
|
+char *build_date;
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/clock-arch.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/clock-arch.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/clock-arch.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/clock-arch.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,55 @@
|
|
+/*
|
|
+ * Copyright (c) 2006, Swedish Institute of Computer Science.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. Neither the name of the Institute nor the names of its contributors
|
|
+ * may be used to endorse or promote products derived from this software
|
|
+ * without specific prior written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
|
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
|
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
+ * SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack
|
|
+ *
|
|
+ * $Id: clock-arch.c,v 1.2 2006/06/12 08:00:31 adam Exp $
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \file
|
|
+ * Implementation of architecture-specific clock functionality
|
|
+ * \author
|
|
+ * Adam Dunkels <adam@sics.se>
|
|
+ */
|
|
+
|
|
+#include "clock-arch.h"
|
|
+#include <sys/time.h>
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
+clock_time_t clock_time(void)
|
|
+{
|
|
+ struct timeval tv;
|
|
+ struct timezone tz;
|
|
+
|
|
+ gettimeofday(&tv, &tz);
|
|
+
|
|
+ return tv.tv_sec * 1000 + tv.tv_usec / 1000;
|
|
+}
|
|
+
|
|
+/*---------------------------------------------------------------------------*/
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/clock-arch.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/clock-arch.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/clock-arch.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/clock-arch.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,40 @@
|
|
+/*
|
|
+ * Copyright (c) 2006, Swedish Institute of Computer Science.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. Neither the name of the Institute nor the names of its contributors
|
|
+ * may be used to endorse or promote products derived from this software
|
|
+ * without specific prior written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
|
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
|
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
+ * SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack
|
|
+ *
|
|
+ * $Id: clock-arch.h,v 1.2 2006/06/12 08:00:31 adam Exp $
|
|
+ */
|
|
+
|
|
+#ifndef __CLOCK_ARCH_H__
|
|
+#define __CLOCK_ARCH_H__
|
|
+
|
|
+typedef int clock_time_t;
|
|
+#define CLOCK_CONF_SECOND 1000
|
|
+
|
|
+#endif /* __CLOCK_ARCH_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/iscsid_ipc.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/iscsid_ipc.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/iscsid_ipc.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/iscsid_ipc.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,868 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * iscsi_ipc.c - Generic NIC management/utility functions
|
|
+ *
|
|
+ */
|
|
+
|
|
+#include <errno.h>
|
|
+#include <pthread.h>
|
|
+#include <signal.h>
|
|
+#include <string.h>
|
|
+#include <stdio.h>
|
|
+#include <unistd.h>
|
|
+#include <arpa/inet.h>
|
|
+#include <sys/socket.h>
|
|
+#include <sys/time.h>
|
|
+#include <sys/un.h>
|
|
+
|
|
+#define PFX "iscsi_ipc "
|
|
+
|
|
+/* TODO fix me */
|
|
+#define IFNAMSIZ 15
|
|
+
|
|
+#include "nic.h"
|
|
+#include "nic_utils.h"
|
|
+#include "nic_vlan.h"
|
|
+#include "options.h"
|
|
+#include "mgmt_ipc.h"
|
|
+#include "iscsid_ipc.h"
|
|
+#include "uip.h"
|
|
+#include "uip_mgmt_ipc.h"
|
|
+
|
|
+#include "logger.h"
|
|
+#include "uip.h"
|
|
+
|
|
+/* private iscsid options stucture */
|
|
+struct iscsid_options {
|
|
+ int fd;
|
|
+ pthread_t thread;
|
|
+};
|
|
+
|
|
+struct ip_addr_mask {
|
|
+ int ip_type;
|
|
+ union {
|
|
+ struct in_addr addr4;
|
|
+ struct in6_addr addr6;
|
|
+ } addr;
|
|
+ union {
|
|
+ struct in_addr nm4;
|
|
+ struct in6_addr nm6;
|
|
+ } netmask;
|
|
+#define addr4 addr.addr4
|
|
+#define addr6 addr.addr6
|
|
+#define nm4 netmask.nm4
|
|
+#define nm6 netmask.nm6
|
|
+};
|
|
+
|
|
+/******************************************************************************
|
|
+ * iscsid_ipc Constants
|
|
+ *****************************************************************************/
|
|
+static const char uio_udev_path_template[] = "/dev/uio%d";
|
|
+
|
|
+/******************************************************************************
|
|
+ * Globals
|
|
+ *****************************************************************************/
|
|
+static struct iscsid_options iscsid_opts = {
|
|
+ .fd = INVALID_FD,
|
|
+ .thread = INVALID_THREAD,
|
|
+};
|
|
+
|
|
+/******************************************************************************
|
|
+ * iscsid Functions
|
|
+ *****************************************************************************/
|
|
+
|
|
+static void *enable_nic_thread(void *data)
|
|
+{
|
|
+ nic_t *nic = (nic_t *) data;
|
|
+
|
|
+ prepare_nic_thread(nic);
|
|
+ LOG_INFO(PFX "%s: started NIC enable thread state: 0x%x",
|
|
+ nic->log_name, nic->state)
|
|
+
|
|
+ /* Enable the NIC */
|
|
+ nic_enable(nic);
|
|
+
|
|
+ nic->enable_thread = INVALID_THREAD;
|
|
+
|
|
+ pthread_exit(NULL);
|
|
+}
|
|
+
|
|
+static int decode_cidr(char *in_ipaddr_str, struct ip_addr_mask *ipam,
|
|
+ int *prefix_len)
|
|
+{
|
|
+ int rc = 0, i;
|
|
+ char *tmp, *tok;
|
|
+ char ipaddr_str[NI_MAXHOST];
|
|
+ char str[INET6_ADDRSTRLEN];
|
|
+ int keepbits = 0;
|
|
+ struct in_addr ia;
|
|
+ struct in6_addr ia6;
|
|
+
|
|
+ memset(ipam, 0, sizeof(struct ip_addr_mask));
|
|
+ if (strlen(in_ipaddr_str) > NI_MAXHOST)
|
|
+ strncpy(ipaddr_str, in_ipaddr_str, NI_MAXHOST);
|
|
+ else
|
|
+ strcpy(ipaddr_str, in_ipaddr_str);
|
|
+
|
|
+ /* Find the CIDR if any */
|
|
+ tmp = strchr(ipaddr_str, '/');
|
|
+ if (tmp) {
|
|
+ /* CIDR found, now decode, tmpbuf = ip, tmp = netmask */
|
|
+ tmp = ipaddr_str;
|
|
+ tok = strsep(&tmp, "/");
|
|
+ LOG_INFO(PFX "in cidr: bitmask '%s' ip '%s'", tmp, tok);
|
|
+ keepbits = atoi(tmp);
|
|
+ strcpy(ipaddr_str, tok);
|
|
+ }
|
|
+
|
|
+ /* Determine if the IP address passed from the iface file is
|
|
+ * an IPv4 or IPv6 address */
|
|
+ rc = inet_pton(AF_INET, ipaddr_str, &ipam->addr6);
|
|
+ if (rc == 0) {
|
|
+ /* Test to determine if the addres is an IPv6 address */
|
|
+ rc = inet_pton(AF_INET6, ipaddr_str, &ipam->addr6);
|
|
+ if (rc == 0) {
|
|
+ LOG_ERR(PFX "Could not parse IP address: '%s'",
|
|
+ ipaddr_str);
|
|
+ goto out;
|
|
+ }
|
|
+ ipam->ip_type = AF_INET6;
|
|
+ if (keepbits > 128) {
|
|
+ LOG_ERR(PFX "CIDR netmask > 128 for IPv6: %d(%s)",
|
|
+ keepbits, tmp);
|
|
+ goto out;
|
|
+ }
|
|
+ if (!keepbits) {
|
|
+ /* Default prefix mask to 64 */
|
|
+ memcpy(&ipam->nm6.s6_addr, all_zeroes_addr6,
|
|
+ sizeof(struct in6_addr));
|
|
+ for (i = 0; i < 2; i++)
|
|
+ ipam->nm6.s6_addr32[i] = 0xffffffff;
|
|
+ goto out;
|
|
+ }
|
|
+ *prefix_len = keepbits;
|
|
+ memcpy(&ia6.s6_addr, all_zeroes_addr6,
|
|
+ sizeof(struct in6_addr));
|
|
+ for (i = 0; i < 4; i++) {
|
|
+ if (keepbits < 32) {
|
|
+ ia6.s6_addr32[i] = keepbits > 0 ?
|
|
+ 0x00 - (1 << (32 - keepbits)) : 0;
|
|
+ break;
|
|
+ } else
|
|
+ ia6.s6_addr32[i] = 0xFFFFFFFF;
|
|
+ keepbits -= 32;
|
|
+ }
|
|
+ ipam->nm6 = ia6;
|
|
+ if (inet_ntop(AF_INET6, &ia6, str, sizeof(str)))
|
|
+ LOG_INFO(PFX "Using netmask: %s", str);
|
|
+ } else {
|
|
+ ipam->ip_type = AF_INET;
|
|
+ rc = inet_pton(AF_INET, ipaddr_str, &ipam->addr4);
|
|
+
|
|
+ if (keepbits > 32) {
|
|
+ LOG_ERR(PFX "CIDR netmask > 32 for IPv4: %d(%s)",
|
|
+ keepbits, tmp);
|
|
+ goto out;
|
|
+ }
|
|
+ ia.s_addr = keepbits > 0 ? 0x00 - (1 << (32 - keepbits)) : 0;
|
|
+ ipam->nm4.s_addr = htonl(ia.s_addr);
|
|
+ LOG_INFO(PFX "Using netmask: %s", inet_ntoa(ipam->nm4));
|
|
+ }
|
|
+out:
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+static int parse_iface(void *arg)
|
|
+{
|
|
+ int rc;
|
|
+ nic_t *nic = NULL;
|
|
+ nic_interface_t *nic_iface, *vlan_iface, *base_nic_iface;
|
|
+ char *transport_name;
|
|
+ size_t transport_name_size;
|
|
+ nic_lib_handle_t *handle;
|
|
+ iscsid_uip_broadcast_t *data;
|
|
+ short int vlan;
|
|
+ char ipv6_buf_str[INET6_ADDRSTRLEN];
|
|
+ int request_type = 0;
|
|
+ struct in_addr netmask;
|
|
+ int i, prefix_len = 64;
|
|
+ struct ip_addr_mask ipam;
|
|
+ struct iface_rec *rec;
|
|
+ void *res;
|
|
+
|
|
+ data = (iscsid_uip_broadcast_t *) arg;
|
|
+
|
|
+ rec = &data->u.iface_rec.rec;
|
|
+ LOG_INFO(PFX "Received request for '%s' to set IP address: '%s' "
|
|
+ "VLAN: '%d'", rec->netdev, rec->ipaddress, rec->vlan_id);
|
|
+
|
|
+ vlan = rec->vlan_id;
|
|
+ if (vlan && valid_vlan(vlan) == 0) {
|
|
+ LOG_ERR(PFX "Invalid VLAN tag: %d", rec->vlan_id);
|
|
+ rc = -EIO;
|
|
+ goto early_exit;
|
|
+ }
|
|
+
|
|
+ /* Detect for CIDR notation and strip off the netmask if present */
|
|
+ rc = decode_cidr(rec->ipaddress, &ipam, &prefix_len);
|
|
+ if (rc && !ipam.ip_type) {
|
|
+ LOG_ERR(PFX "decode_cidr: rc=%d, ipam.ip_type=%d",
|
|
+ rc, ipam.ip_type)
|
|
+ goto early_exit;
|
|
+ }
|
|
+ if (ipam.ip_type == AF_INET6)
|
|
+ inet_ntop(AF_INET6, &ipam.addr6, ipv6_buf_str,
|
|
+ sizeof(ipv6_buf_str));
|
|
+
|
|
+ for (i = 0; i < 10; i++) {
|
|
+ struct timespec sleep_req, sleep_rem;
|
|
+
|
|
+ if (pthread_mutex_trylock(&nic_list_mutex) == 0)
|
|
+ break;
|
|
+
|
|
+ sleep_req.tv_sec = 0;
|
|
+ sleep_req.tv_nsec = 100000;
|
|
+ nanosleep(&sleep_req, &sleep_rem);
|
|
+ }
|
|
+
|
|
+ if (i >= 10) {
|
|
+ LOG_WARN(PFX "Could not aquire nic_list_mutex lock");
|
|
+ rc = -EIO;
|
|
+ goto early_exit;
|
|
+ }
|
|
+
|
|
+ /* Check if we can find the NIC device using the netdev
|
|
+ * name */
|
|
+ rc = from_netdev_name_find_nic(rec->netdev, &nic);
|
|
+
|
|
+ if (rc != 0) {
|
|
+ LOG_WARN(PFX "Couldn't find NIC: %s, creating an instance",
|
|
+ rec->netdev);
|
|
+
|
|
+ nic = nic_init();
|
|
+ if (nic == NULL) {
|
|
+ LOG_ERR(PFX "Couldn't allocate space for NIC %s",
|
|
+ rec->netdev);
|
|
+
|
|
+ rc = -ENOMEM;
|
|
+ goto done;
|
|
+ }
|
|
+
|
|
+ strncpy(nic->eth_device_name,
|
|
+ rec->netdev,
|
|
+ sizeof(nic->eth_device_name));
|
|
+ nic->config_device_name = nic->eth_device_name;
|
|
+ nic->log_name = nic->eth_device_name;
|
|
+
|
|
+ if (nic_fill_name(nic) != 0) {
|
|
+ free(nic);
|
|
+ rc = -EIO;
|
|
+ goto done;
|
|
+ }
|
|
+
|
|
+ nic_add(nic);
|
|
+ } else {
|
|
+ LOG_INFO(PFX " %s, using existing NIC",
|
|
+ rec->netdev);
|
|
+ }
|
|
+
|
|
+ if (nic->flags & NIC_GOING_DOWN) {
|
|
+ rc = -EIO;
|
|
+ LOG_INFO(PFX "nic->flags GOING DOWN");
|
|
+ goto done;
|
|
+ }
|
|
+
|
|
+ /* If we retry too many times allow iscsid to to timeout */
|
|
+ if (nic->pending_count > 1000) {
|
|
+ LOG_WARN(PFX "%s: pending count excceded 1000", nic->log_name);
|
|
+
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+ nic->pending_count = 0;
|
|
+ nic->flags &= ~NIC_ENABLED_PENDING;
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+
|
|
+ rc = 0;
|
|
+ goto done;
|
|
+ }
|
|
+
|
|
+ if (nic->flags & NIC_ENABLED_PENDING) {
|
|
+ struct timespec sleep_req, sleep_rem;
|
|
+
|
|
+ sleep_req.tv_sec = 0;
|
|
+ sleep_req.tv_nsec = 100000;
|
|
+ nanosleep(&sleep_req, &sleep_rem);
|
|
+
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+ nic->pending_count++;
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+
|
|
+ LOG_INFO(PFX "%s: enabled pending", nic->log_name);
|
|
+ rc = -EAGAIN;
|
|
+ goto done;
|
|
+ }
|
|
+
|
|
+ prepare_library(nic);
|
|
+
|
|
+ /* Sanity Check to ensure the transport names are the same */
|
|
+ handle = nic->nic_library;
|
|
+ if (handle != NULL) {
|
|
+ (*handle->ops->lib_ops.get_transport_name) (&transport_name,
|
|
+ &transport_name_size);
|
|
+
|
|
+ if (strncmp(transport_name,
|
|
+ rec->transport_name,
|
|
+ transport_name_size) != 0) {
|
|
+ LOG_ERR(PFX "%s Transport name is not equal "
|
|
+ "expected: %s got: %s",
|
|
+ nic->log_name,
|
|
+ rec->transport_name,
|
|
+ transport_name);
|
|
+ }
|
|
+ } else {
|
|
+ LOG_ERR(PFX "%s Couldn't find nic library ", nic->log_name);
|
|
+ rc = -EIO;
|
|
+ goto done;
|
|
+ }
|
|
+
|
|
+ LOG_INFO(PFX "%s library set using transport_name %s",
|
|
+ nic->log_name, transport_name);
|
|
+
|
|
+ /* Create the base network interface if it doesn't exist */
|
|
+ nic_iface = nic_find_nic_iface_protocol(nic, 0, ipam.ip_type);
|
|
+ if (nic_iface == NULL) {
|
|
+ LOG_INFO(PFX "%s couldn't find interface with "
|
|
+ "ip_type: 0x%x creating it",
|
|
+ nic->log_name, ipam.ip_type);
|
|
+
|
|
+ /* Create the nic interface */
|
|
+ nic_iface = nic_iface_init();
|
|
+
|
|
+ if (nic_iface == NULL) {
|
|
+ LOG_ERR(PFX "Couldn't allocate nic_iface", nic_iface);
|
|
+ goto done;
|
|
+ }
|
|
+
|
|
+ nic_iface->protocol = ipam.ip_type;
|
|
+ nic_add_nic_iface(nic, nic_iface);
|
|
+
|
|
+ persist_all_nic_iface(nic);
|
|
+
|
|
+ LOG_INFO(PFX "%s: created network interface", nic->log_name);
|
|
+ } else {
|
|
+ LOG_INFO(PFX "%s: using existing network interface",
|
|
+ nic->log_name);
|
|
+ }
|
|
+
|
|
+ set_nic_iface(nic, nic_iface);
|
|
+
|
|
+ /* Find the vlan nic_interface */
|
|
+ if (vlan) {
|
|
+ vlan_iface = nic_find_vlan_iface_protocol(nic, nic_iface, vlan,
|
|
+ ipam.ip_type);
|
|
+ if (vlan_iface == NULL) {
|
|
+ LOG_INFO(PFX "%s couldn't find interface with VLAN = %d"
|
|
+ "ip_type: 0x%x creating it",
|
|
+ nic->log_name, vlan, ipam.ip_type);
|
|
+
|
|
+ /* Create the nic interface */
|
|
+ vlan_iface = nic_iface_init();
|
|
+
|
|
+ if (vlan_iface == NULL) {
|
|
+ LOG_ERR(PFX "Couldn't allocate nic_iface for "
|
|
+ "VLAN: %d", vlan_iface, vlan);
|
|
+ goto done;
|
|
+ }
|
|
+
|
|
+ vlan_iface->protocol = ipam.ip_type;
|
|
+ vlan_iface->vlan_id = vlan;
|
|
+ nic_add_vlan_iface(nic, nic_iface, vlan_iface);
|
|
+ } else {
|
|
+ LOG_INFO(PFX "%s: using existing vlan interface",
|
|
+ nic->log_name);
|
|
+ }
|
|
+ base_nic_iface = nic_iface;
|
|
+ nic_iface = vlan_iface;
|
|
+ }
|
|
+
|
|
+ /* Determine how to configure the IP address */
|
|
+ if (ipam.ip_type == AF_INET) {
|
|
+ if (memcmp(&ipam.addr4,
|
|
+ all_zeroes_addr4, sizeof(uip_ip4addr_t)) == 0) {
|
|
+ LOG_INFO(PFX "%s: requesting configuration using DHCP",
|
|
+ nic->log_name);
|
|
+ request_type = IPV4_CONFIG_DHCP;
|
|
+ } else {
|
|
+ LOG_INFO(PFX "%s: requesting configuration using "
|
|
+ "static IP address", nic->log_name);
|
|
+ request_type = IPV4_CONFIG_STATIC;
|
|
+ }
|
|
+ } else if (ipam.ip_type == AF_INET6) {
|
|
+ if (memcmp(&ipam.addr6,
|
|
+ all_zeroes_addr6, sizeof(uip_ip6addr_t)) == 0) {
|
|
+ LOG_INFO(PFX
|
|
+ "%s: requesting configuration using DHCPv6",
|
|
+ nic->log_name);
|
|
+ request_type = IPV6_CONFIG_DHCP;
|
|
+ } else {
|
|
+ LOG_INFO(PFX "%s: request configuration using static "
|
|
+ "IPv6 address: '%s'",
|
|
+ nic->log_name, ipv6_buf_str);
|
|
+ request_type = IPV6_CONFIG_STATIC;
|
|
+ }
|
|
+ } else {
|
|
+ LOG_ERR(PFX "%s: unknown ip_type to configure: 0x%x",
|
|
+ nic->log_name, ipam.ip_type);
|
|
+
|
|
+ rc = -EIO;
|
|
+ goto done;
|
|
+ }
|
|
+
|
|
+ if (nic_iface->ustack.ip_config == request_type) {
|
|
+ if (request_type == IPV4_CONFIG_STATIC) {
|
|
+ if (memcmp(nic_iface->ustack.hostaddr, &ipam.addr4,
|
|
+ sizeof(struct in_addr)))
|
|
+ goto diff;
|
|
+ } else if (request_type == IPV6_CONFIG_STATIC) {
|
|
+ if (memcmp(nic_iface->ustack.hostaddr6, &ipam.addr6,
|
|
+ sizeof(struct in6_addr)))
|
|
+ goto diff;
|
|
+ }
|
|
+ LOG_INFO(PFX "%s: IP configuration didn't change using 0x%x",
|
|
+ nic->log_name, nic_iface->ustack.ip_config);
|
|
+ goto enable_nic;
|
|
+diff:
|
|
+ /* Disable the NIC */
|
|
+ nic_disable(nic, 0);
|
|
+ } else {
|
|
+ if (request_type == IPV4_CONFIG_DHCP
|
|
+ || request_type == IPV6_CONFIG_DHCP)
|
|
+ nic->flags |= NIC_RESET_UIP;
|
|
+
|
|
+ /* Disable the NIC */
|
|
+ nic_disable(nic, 0);
|
|
+ }
|
|
+
|
|
+ /* Check to see if this is using DHCP or if this is
|
|
+ * a static IPv4 address. This is done by checking
|
|
+ * if the IP address is equal to 0.0.0.0. If it is
|
|
+ * then the user has specified to use DHCP. If not
|
|
+ * then the user has spcicied to use a static IP address
|
|
+ * an the default netmask will be used */
|
|
+ switch (request_type) {
|
|
+ case IPV4_CONFIG_DHCP:
|
|
+ memset(nic_iface->ustack.hostaddr, 0, sizeof(struct in_addr));
|
|
+ LOG_INFO(PFX "%s: configuring using DHCP", nic->log_name);
|
|
+ nic_iface->ustack.ip_config = IPV4_CONFIG_DHCP;
|
|
+
|
|
+ break;
|
|
+ case IPV4_CONFIG_STATIC:
|
|
+ memcpy(nic_iface->ustack.hostaddr, &ipam.addr4,
|
|
+ sizeof(struct in_addr));
|
|
+ LOG_INFO(PFX "%s: configuring using static IP "
|
|
+ "IPv4 address :%s ",
|
|
+ nic->log_name, inet_ntoa(ipam.addr4));
|
|
+ netmask.s_addr = ipam.nm4.s_addr;
|
|
+ if (!netmask.s_addr)
|
|
+ netmask.s_addr =
|
|
+ calculate_default_netmask(ipam.addr4.s_addr);
|
|
+ memcpy(nic_iface->ustack.netmask,
|
|
+ &netmask, sizeof(netmask.s_addr));
|
|
+ LOG_INFO(PFX " netmask :%s", inet_ntoa(netmask));
|
|
+
|
|
+ nic_iface->ustack.ip_config = IPV4_CONFIG_STATIC;
|
|
+ break;
|
|
+ case IPV6_CONFIG_DHCP:
|
|
+ memset(nic_iface->ustack.hostaddr6, 0,
|
|
+ sizeof(struct in6_addr));
|
|
+ nic_iface->ustack.prefix_len = prefix_len;
|
|
+ if (ipam.nm6.s6_addr[0] | ipam.nm6.s6_addr[1] |
|
|
+ ipam.nm6.s6_addr[2] | ipam.nm6.s6_addr[3] |
|
|
+ ipam.nm6.s6_addr[4] | ipam.nm6.s6_addr[5] |
|
|
+ ipam.nm6.s6_addr[6] | ipam.nm6.s6_addr[7])
|
|
+ memcpy(nic_iface->ustack.netmask6,
|
|
+ &ipam.nm6, sizeof(struct in6_addr));
|
|
+ LOG_INFO(PFX "%s: configuring using DHCPv6",
|
|
+ nic->log_name);
|
|
+ nic_iface->ustack.ip_config = IPV6_CONFIG_DHCP;
|
|
+ break;
|
|
+ case IPV6_CONFIG_STATIC:
|
|
+ memcpy(nic_iface->ustack.hostaddr6, &ipam.addr6,
|
|
+ sizeof(struct in6_addr));
|
|
+
|
|
+ nic_iface->ustack.prefix_len = prefix_len;
|
|
+ if (ipam.nm6.s6_addr[0] | ipam.nm6.s6_addr[1] |
|
|
+ ipam.nm6.s6_addr[2] | ipam.nm6.s6_addr[3] |
|
|
+ ipam.nm6.s6_addr[4] | ipam.nm6.s6_addr[5] |
|
|
+ ipam.nm6.s6_addr[6] | ipam.nm6.s6_addr[7])
|
|
+ memcpy(nic_iface->ustack.netmask6,
|
|
+ &ipam.nm6, sizeof(struct in6_addr));
|
|
+
|
|
+ LOG_INFO(PFX "%s: configuring using static IP "
|
|
+ "IPv6 address: '%s'", nic->log_name, ipv6_buf_str);
|
|
+
|
|
+ nic_iface->ustack.ip_config = IPV6_CONFIG_STATIC;
|
|
+ break;
|
|
+ default:
|
|
+ LOG_INFO(PFX "%s: Unknown request type: 0x%x",
|
|
+ nic->log_name, request_type);
|
|
+
|
|
+ }
|
|
+
|
|
+ /* Configuration changed, do VLAN WA */
|
|
+ vlan_iface = nic_iface->vlan_next;
|
|
+ while (vlan_iface) {
|
|
+ /* TODO: When VLAN support is placed in the iface file
|
|
+ * revisit this code */
|
|
+ if (vlan_iface->ustack.ip_config) {
|
|
+ vlan_iface->ustack.ip_config =
|
|
+ nic_iface->ustack.ip_config;
|
|
+ memcpy(vlan_iface->ustack.hostaddr,
|
|
+ nic_iface->ustack.hostaddr,
|
|
+ sizeof(nic_iface->ustack.hostaddr));
|
|
+ memcpy(vlan_iface->ustack.netmask,
|
|
+ nic_iface->ustack.netmask,
|
|
+ sizeof(nic_iface->ustack.netmask));
|
|
+ memcpy(vlan_iface->ustack.hostaddr6,
|
|
+ nic_iface->ustack.hostaddr6,
|
|
+ sizeof(nic_iface->ustack.hostaddr6));
|
|
+ memcpy(vlan_iface->ustack.netmask6,
|
|
+ nic_iface->ustack.netmask6,
|
|
+ sizeof(nic_iface->ustack.netmask6));
|
|
+ }
|
|
+ vlan_iface = vlan_iface->vlan_next;
|
|
+ }
|
|
+
|
|
+enable_nic:
|
|
+ if (nic->state & NIC_STOPPED) {
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+ if (nic->flags & NIC_ENABLED_PENDING) {
|
|
+ /* Still waiting */
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+ rc = 0;
|
|
+ goto enable_out;
|
|
+ }
|
|
+ nic->flags |= NIC_ENABLED_PENDING;
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+
|
|
+ /* This thread will be thrown away when completed */
|
|
+ if (nic->enable_thread != INVALID_THREAD) {
|
|
+ rc = pthread_join(nic->enable_thread, &res);
|
|
+ if (rc != 0) {
|
|
+ LOG_INFO(PFX "%s: failed joining enable NIC "
|
|
+ "thread\n", nic->log_name);
|
|
+ goto eagain;
|
|
+ }
|
|
+ }
|
|
+ rc = pthread_create(&nic->enable_thread, NULL,
|
|
+ enable_nic_thread, (void *)nic);
|
|
+ if (rc != 0)
|
|
+ LOG_WARN(PFX "%s: failed starting enable NIC thread\n",
|
|
+ nic->log_name);
|
|
+eagain:
|
|
+ rc = -EAGAIN;
|
|
+ } else {
|
|
+ LOG_INFO(PFX "%s: NIC already enabled "
|
|
+ "flags: 0x%x state: 0x%x\n",
|
|
+ nic->log_name, nic->flags, nic->state);
|
|
+ rc = 0;
|
|
+ }
|
|
+enable_out:
|
|
+ LOG_INFO(PFX "ISCSID_UIP_IPC_GET_IFACE: command: %x "
|
|
+ "name: %s, netdev: %s ipaddr: %s vlan: %d transport_name:%s",
|
|
+ data->header.command, rec->name, rec->netdev,
|
|
+ (ipam.ip_type == AF_INET) ? inet_ntoa(ipam.addr4) :
|
|
+ ipv6_buf_str,
|
|
+ vlan, rec->transport_name);
|
|
+
|
|
+done:
|
|
+ pthread_mutex_unlock(&nic_list_mutex);
|
|
+
|
|
+early_exit:
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * process_iscsid_broadcast() - This function is used to process the
|
|
+ * broadcast messages from iscsid
|
|
+ */
|
|
+int process_iscsid_broadcast(int s2)
|
|
+{
|
|
+ int rc = 0;
|
|
+ iscsid_uip_broadcast_t *data;
|
|
+ iscsid_uip_rsp_t rsp;
|
|
+ FILE *fd;
|
|
+ size_t size;
|
|
+ iscsid_uip_cmd_e cmd;
|
|
+ uint32_t payload_len;
|
|
+
|
|
+ fd = fdopen(s2, "r+");
|
|
+ if (fd == NULL) {
|
|
+ LOG_ERR(PFX "Couldn't open file descriptor: %d(%s)",
|
|
+ errno, strerror(errno));
|
|
+ return -EIO;
|
|
+ }
|
|
+
|
|
+ /* This will be freed by parse_iface_thread() */
|
|
+ data = (iscsid_uip_broadcast_t *) calloc(1, sizeof(*data));
|
|
+ if (data == NULL) {
|
|
+ LOG_ERR(PFX "Couldn't allocate memory for iface data");
|
|
+ return -ENOMEM;
|
|
+ }
|
|
+ memset(data, 0, sizeof(*data));
|
|
+
|
|
+ size = fread(data, sizeof(iscsid_uip_broadcast_header_t), 1, fd);
|
|
+ if (size == -1) {
|
|
+ LOG_ERR(PFX "Could not read request: %d(%s)",
|
|
+ errno, strerror(errno));
|
|
+ rc = ferror(fd);
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ cmd = data->header.command;
|
|
+ payload_len = data->header.payload_len;
|
|
+
|
|
+ LOG_DEBUG(PFX "recv iscsid request: cmd: %d, payload_len: %d",
|
|
+ cmd, payload_len);
|
|
+
|
|
+ size = fread(&data->u.iface_rec, payload_len, 1, fd);
|
|
+ if (size == -1) {
|
|
+ LOG_ERR(PFX "Could not read data: %d(%s)",
|
|
+ errno, strerror(errno));
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ switch (cmd) {
|
|
+ case ISCSID_UIP_IPC_GET_IFACE:
|
|
+ rc = parse_iface(data);
|
|
+ switch (rc) {
|
|
+ case 0:
|
|
+ rsp.command = cmd;
|
|
+ rsp.err = ISCSID_UIP_MGMT_IPC_DEVICE_UP;
|
|
+ break;
|
|
+ case -EAGAIN:
|
|
+ rsp.command = cmd;
|
|
+ rsp.err = ISCSID_UIP_MGMT_IPC_DEVICE_INITIALIZING;
|
|
+ break;
|
|
+ default:
|
|
+ rsp.command = cmd;
|
|
+ rsp.err = ISCSID_UIP_MGMT_IPC_ERR;
|
|
+ }
|
|
+
|
|
+ break;
|
|
+ default:
|
|
+ LOG_WARN(PFX "Unknown iscsid broadcast command: %x",
|
|
+ data->header.command);
|
|
+
|
|
+ /* Send a response back to iscsid to tell it the
|
|
+ operation succeeded */
|
|
+ rsp.command = cmd;
|
|
+ rsp.err = ISCSID_UIP_MGMT_IPC_OK;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ size = fwrite(&rsp, sizeof(rsp), 1, fd);
|
|
+ if (size == -1) {
|
|
+ LOG_ERR(PFX "Could not send response: %d(%s)",
|
|
+ errno, strerror(errno));
|
|
+ rc = ferror(fd);
|
|
+ }
|
|
+
|
|
+error:
|
|
+ free(data);
|
|
+ fclose(fd);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+static void iscsid_loop_close(void *arg)
|
|
+{
|
|
+ close(iscsid_opts.fd);
|
|
+
|
|
+ LOG_INFO(PFX "iSCSI daemon socket closed");
|
|
+}
|
|
+
|
|
+/**
|
|
+ * iscsid_loop() - This is the function which will process the broadcast
|
|
+ * messages from iscsid
|
|
+ *
|
|
+ */
|
|
+static void *iscsid_loop(void *arg)
|
|
+{
|
|
+ int rc;
|
|
+ sigset_t set;
|
|
+
|
|
+ pthread_cleanup_push(iscsid_loop_close, arg);
|
|
+
|
|
+ sigfillset(&set);
|
|
+ rc = pthread_sigmask(SIG_BLOCK, &set, NULL);
|
|
+ if (rc != 0) {
|
|
+ LOG_ERR(PFX
|
|
+ "Couldn't set signal mask for the iscisd listening "
|
|
+ "thread");
|
|
+ }
|
|
+
|
|
+ LOG_DEBUG(PFX "Started iscsid listening thread");
|
|
+
|
|
+ while (1) {
|
|
+ struct sockaddr_un remote;
|
|
+ socklen_t sock_len;
|
|
+ int s2;
|
|
+
|
|
+ LOG_DEBUG(PFX "Waiting for iscsid command");
|
|
+
|
|
+ sock_len = sizeof(remote);
|
|
+ s2 = accept(iscsid_opts.fd,
|
|
+ (struct sockaddr *)&remote, &sock_len);
|
|
+ if (s2 == -1) {
|
|
+ if (errno == EAGAIN) {
|
|
+ LOG_DEBUG("Got EAGAIN from accept");
|
|
+ sleep(1);
|
|
+ continue;
|
|
+ } else if (errno == EINTR) {
|
|
+ LOG_DEBUG("Got EINTR from accept");
|
|
+ /* The program is terminating, time to exit */
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ LOG_ERR(PFX "Could not accept: %d(%s)",
|
|
+ s2, strerror(errno));
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ process_iscsid_broadcast(s2);
|
|
+ close(s2);
|
|
+ }
|
|
+
|
|
+ pthread_cleanup_pop(0);
|
|
+
|
|
+ LOG_ERR(PFX "exit iscsid listening thread");
|
|
+
|
|
+ pthread_exit(NULL);
|
|
+}
|
|
+
|
|
+/******************************************************************************
|
|
+ * Initialize/Cleanup routines
|
|
+ ******************************************************************************/
|
|
+/**
|
|
+ * iscsid_init() - This function will setup the thread used to listen for
|
|
+ * the iscsid broadcast messages
|
|
+ * @return 0 on success, <0 on failure
|
|
+ */
|
|
+int iscsid_init()
|
|
+{
|
|
+ int rc;
|
|
+ struct sockaddr_un addr;
|
|
+
|
|
+ iscsid_opts.fd = socket(AF_LOCAL, SOCK_STREAM, 0);
|
|
+ if (iscsid_opts.fd < 0) {
|
|
+ LOG_ERR(PFX "Can not create IPC socket");
|
|
+ return iscsid_opts.fd;
|
|
+ }
|
|
+
|
|
+ memset(&addr, 0, sizeof(addr));
|
|
+ addr.sun_family = AF_LOCAL;
|
|
+ memcpy((char *)&addr.sun_path + 1, ISCSID_UIP_NAMESPACE,
|
|
+ strlen(ISCSID_UIP_NAMESPACE));
|
|
+
|
|
+ rc = bind(iscsid_opts.fd, (struct sockaddr *)&addr, sizeof(addr));
|
|
+ if (rc < 0) {
|
|
+ LOG_ERR(PFX "Can not bind IPC socket: %s", strerror(errno));
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ rc = listen(iscsid_opts.fd, 32);
|
|
+ if (rc < 0) {
|
|
+ LOG_ERR(PFX "Can not listen IPC socket: %s", strerror(errno));
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+error:
|
|
+ close(iscsid_opts.fd);
|
|
+ iscsid_opts.fd = INVALID_FD;
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * iscsid_start() - This function will start the thread used to listen for
|
|
+ * the iscsid broadcast messages
|
|
+ * @return 0 on success, <0 on failure
|
|
+ */
|
|
+int iscsid_start()
|
|
+{
|
|
+ int rc;
|
|
+
|
|
+ rc = pthread_create(&iscsid_opts.thread, NULL, iscsid_loop, NULL);
|
|
+ if (rc != 0) {
|
|
+ LOG_ERR(PFX "Could not start iscsid listening thread rc=%d",
|
|
+ rc);
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+
|
|
+error:
|
|
+ close(iscsid_opts.fd);
|
|
+ iscsid_opts.fd = INVALID_FD;
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * iscsid_cleanup() - This is called when stoping the thread listening
|
|
+ * for the iscsid broadcast messages
|
|
+ */
|
|
+void iscsid_cleanup()
|
|
+{
|
|
+ int rc;
|
|
+ void *res;
|
|
+
|
|
+ if (iscsid_opts.fd != INVALID_FD) {
|
|
+ rc = pthread_cancel(iscsid_opts.thread);
|
|
+ if (rc != 0) {
|
|
+ LOG_ERR("Could not cancel iscsid listening thread: %s",
|
|
+ strerror(rc));
|
|
+ }
|
|
+
|
|
+ rc = pthread_join(iscsid_opts.thread, &res);
|
|
+ if (rc != 0) {
|
|
+ LOG_ERR("Could not wait for the iscsid listening "
|
|
+ "thread: %s", strerror(rc));
|
|
+ }
|
|
+ }
|
|
+
|
|
+ LOG_INFO(PFX "iscsid listening thread has shutdown");
|
|
+}
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/iscsid_ipc.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/iscsid_ipc.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/iscsid_ipc.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/iscsid_ipc.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,51 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * iscsid_ipc.h: Generic NIC management/utility functions
|
|
+ *
|
|
+ */
|
|
+#ifndef __ISCSID_IPC_H__
|
|
+#define __ISCSID_IPC_H__
|
|
+
|
|
+#include "uip.h"
|
|
+#include "mgmt_ipc.h"
|
|
+
|
|
+mgmt_ipc_err_e iscsid_connect(int *fd);
|
|
+int iscsid_get_ipaddr(int fd, uip_ip4addr_t * ipaddr);
|
|
+
|
|
+int iscsid_init();
|
|
+int iscsid_start();
|
|
+void iscsid_cleanup();
|
|
+
|
|
+#endif /* __ISCSID_IPC_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/libs/bnx2.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/libs/bnx2.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/libs/bnx2.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/libs/bnx2.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,1148 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * bnx2.c - bnx2 user space driver
|
|
+ *
|
|
+ */
|
|
+#include <errno.h>
|
|
+#include <stdio.h>
|
|
+#include <string.h>
|
|
+#include <arpa/inet.h>
|
|
+#include <sys/mman.h>
|
|
+#include <sys/types.h>
|
|
+#include <sys/stat.h>
|
|
+#include <sys/user.h>
|
|
+#include <fcntl.h>
|
|
+#include <unistd.h>
|
|
+
|
|
+#include "config.h"
|
|
+
|
|
+#include "build_date.h"
|
|
+#include "bnx2.h"
|
|
+#include "cnic.h"
|
|
+#include "logger.h"
|
|
+#include "nic.h"
|
|
+#include "nic_utils.h"
|
|
+#include "options.h"
|
|
+
|
|
+#define PFX "bnx2 "
|
|
+
|
|
+/* Foward struct declarations */
|
|
+struct nic_ops bnx2_op;
|
|
+
|
|
+/*******************************************************************************
|
|
+ * NIC Library Strings
|
|
+ ******************************************************************************/
|
|
+static const char library_name[] = "bnx2";
|
|
+static const char library_version[] = PACKAGE_VERSION;
|
|
+static const char library_uio_name[] = "bnx2_cnic";
|
|
+
|
|
+/* The name that should be returned from /sys/class/uio/uio0/name */
|
|
+static const char cnic_uio_sysfs_name_tempate[] = "/sys/class/uio/uio%i/name";
|
|
+static const char cnic_uio_sysfs_name[] = "bnx2_cnic";
|
|
+
|
|
+/*******************************************************************************
|
|
+ * String constants used to display human readable adapter name
|
|
+ ******************************************************************************/
|
|
+static const char brcm_5706C[] = "Broadcom NetXtreme II BCM5706 1000Base-T";
|
|
+static const char hp_NC370T[] =
|
|
+ "HP NC370T Multifunction Gigabit Server Adapter";
|
|
+static const char hp_NC370I[] =
|
|
+ "HP NC370i Multifunction Gigabit Server Adapter";
|
|
+static const char brcm_5706S[] = "Broadcom NetXtreme II BCM5706 1000Base-SX";
|
|
+static const char hp_NC370F[] =
|
|
+ "HP NC370F Multifunction Gigabit Server Adapter";
|
|
+static const char brcm_5708C[] = "Broadcom NetXtreme II BCM5708 1000Base-T";
|
|
+static const char brcm_5708S[] = "Broadcom NetXtreme II BCM5708 1000Base-SX";
|
|
+static const char brcm_5709C[] = "Broadcom NetXtreme II BCM5709 1000Base-T";
|
|
+static const char brcm_5709S[] = "Broadcom NetXtreme II BCM5709 1000Base-SX";
|
|
+static const char brcm_5716C[] = "Broadcom NetXtreme II BCM5716 1000Base-T";
|
|
+static const char brcm_5716S[] = "Broadcom NetXtreme II BCM5716 1000Base-SX";
|
|
+
|
|
+/*******************************************************************************
|
|
+ * PCI ID constants
|
|
+ ******************************************************************************/
|
|
+#define PCI_VENDOR_ID_BROADCOM 0x14e4
|
|
+#define PCI_DEVICE_ID_NX2_5709 0x1639
|
|
+#define PCI_DEVICE_ID_NX2_5709S 0x163a
|
|
+#define PCI_DEVICE_ID_NX2_5706 0x164a
|
|
+#define PCI_DEVICE_ID_NX2_5708 0x164c
|
|
+#define PCI_DEVICE_ID_NX2_5706S 0x16aa
|
|
+#define PCI_DEVICE_ID_NX2_5708S 0x16ac
|
|
+
|
|
+#define PCI_VENDOR_ID_HP 0x103c
|
|
+
|
|
+#define PCI_ANY_ID (~0)
|
|
+
|
|
+/* This is the table used to match PCI vendor and device ID's to the
|
|
+ * human readable string names of the devices */
|
|
+static const struct pci_device_id bnx2_pci_tbl[] = {
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_5706,
|
|
+ PCI_VENDOR_ID_HP, 0x3101, hp_NC370T},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_5706,
|
|
+ PCI_VENDOR_ID_HP, 0x3106, hp_NC370I},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_5706,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_5706S},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_5708,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_5708C},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_5706S,
|
|
+ PCI_VENDOR_ID_HP, 0x3102, hp_NC370F},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_5706S,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_5706S},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_5708S,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_5708S},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_5709,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_5709C},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_5709S,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_5709S},
|
|
+ {PCI_VENDOR_ID_BROADCOM, 0x163b,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_5716C},
|
|
+ {PCI_VENDOR_ID_BROADCOM, 0x163c,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_5716S},
|
|
+};
|
|
+
|
|
+/*******************************************************************************
|
|
+ * bnx2 Library Functions
|
|
+ ******************************************************************************/
|
|
+/**
|
|
+ * bnx2_get_library_name() - Used to get the name of this NIC libary
|
|
+ * @param name - This function will return the pointer to this NIC
|
|
+ * library name
|
|
+ * @param name_size
|
|
+ */
|
|
+static void bnx2_get_library_name(char **name, size_t * name_size)
|
|
+{
|
|
+ *name = (char *)library_name;
|
|
+ *name_size = sizeof(library_name);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2_get_library_version() - Used to get the version string of this
|
|
+ * NIC libary
|
|
+ * @param version - This function will return the pointer to this NIC
|
|
+ * library version string
|
|
+ * @param version_size - This will be set with the version size
|
|
+ */
|
|
+static void bnx2_get_library_version(char **version, size_t * version_size)
|
|
+{
|
|
+ *version = (char *)library_version;
|
|
+ *version_size = sizeof(library_version);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2_get_build_date() - Used to get the build date string of this library
|
|
+ * @param version - This function will return the pointer to this NIC
|
|
+ * library build date string
|
|
+ * @param version_size - This will be set with the build date string size
|
|
+ */
|
|
+static void bnx2_get_build_date(char **build, size_t * build_size)
|
|
+{
|
|
+ *build = (char *)build_date;
|
|
+ *build_size = sizeof(build_date);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2_get_transport_name() - Used to get the transport name associated
|
|
+ * with this this NIC libary
|
|
+ * @param transport_name - This function will return the pointer to this NIC
|
|
+ * library's associated transport string
|
|
+ * @param transport_name_size - This will be set with the transport name size
|
|
+ */
|
|
+static void bnx2_get_transport_name(char **transport_name,
|
|
+ size_t * transport_name_size)
|
|
+{
|
|
+ *transport_name = (char *)bnx2i_library_transport_name;
|
|
+ *transport_name_size = bnx2i_library_transport_name_size;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2_get_uio_name() - Used to get the uio name associated with this this
|
|
+ * NIC libary
|
|
+ * @param uio_name - This function will return the pointer to this NIC
|
|
+ * library's associated uio string
|
|
+ * @param transport_name_size - This will be set with the uio name size
|
|
+ */
|
|
+static void bnx2_get_uio_name(char **uio_name, size_t * uio_name_size)
|
|
+{
|
|
+ *uio_name = (char *)library_uio_name;
|
|
+ *uio_name_size = sizeof(library_uio_name);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2_get_pci_table() - Used to get the PCI table for this NIC libary
|
|
+ * to determine which NIC's based off of PCI ID's
|
|
+ * are supported
|
|
+ * @param table - This function will return the pointer to the PCI table
|
|
+ * @param entries - This function will return the number of entries in the NIC
|
|
+ * library's PCI table
|
|
+ */
|
|
+static void bnx2_get_pci_table(struct pci_device_id **table, uint32_t * entries)
|
|
+{
|
|
+ *table = (struct pci_device_id *)bnx2_pci_tbl;
|
|
+ *entries = (uint32_t) (sizeof(bnx2_pci_tbl) / sizeof(bnx2_pci_tbl[0]));
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2_get_ops() - Used to get the NIC library op table
|
|
+ * @param op - The op table of this NIC library
|
|
+ */
|
|
+struct nic_ops *bnx2_get_ops()
|
|
+{
|
|
+ return &bnx2_op;
|
|
+}
|
|
+
|
|
+/*******************************************************************************
|
|
+ * bnx2 Utility Functions
|
|
+ ******************************************************************************/
|
|
+/*******************************************************************************
|
|
+ * Utility Functions Used to read register from the bnx2 device
|
|
+ ******************************************************************************/
|
|
+static void bnx2_wr32(bnx2_t * bp, __u32 off, __u32 val)
|
|
+{
|
|
+ *((volatile __u32 *)(bp->reg + off)) = val;
|
|
+}
|
|
+
|
|
+static void bnx2_wr16(bnx2_t * bp, __u32 off, __u16 val)
|
|
+{
|
|
+ *((volatile __u16 *)(bp->reg + off)) = val;
|
|
+}
|
|
+
|
|
+static __u32 bnx2_rd32(bnx2_t * bp, __u32 off)
|
|
+{
|
|
+ return *((volatile __u32 *)(bp->reg + off));
|
|
+}
|
|
+
|
|
+static int bnx2_reg_sync(bnx2_t * bp, __u32 off, __u16 length)
|
|
+{
|
|
+ return msync(bp->reg + off, length, MS_SYNC);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2_get_chip_id() - Used to retrive the chip ID from the nic
|
|
+ * @param dev - Device used to determin NIC type
|
|
+ * @return Chip ID read from the MISC ID register
|
|
+ */
|
|
+static int bnx2_get_chip_id(bnx2_t * bp)
|
|
+{
|
|
+ return bnx2_rd32(bp, BNX2_MISC_ID);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2_uio_verify()
|
|
+ *
|
|
+ */
|
|
+static int bnx2_uio_verify(nic_t * nic)
|
|
+{
|
|
+ char *raw = NULL, *raw_tmp;
|
|
+ uint32_t raw_size = 0;
|
|
+ char temp_path[sizeof(cnic_uio_sysfs_name_tempate) + 8];
|
|
+ int rc = 0;
|
|
+
|
|
+ /* Build the path to determine uio name */
|
|
+ snprintf(temp_path, sizeof(temp_path),
|
|
+ cnic_uio_sysfs_name_tempate, nic->uio_minor);
|
|
+
|
|
+ rc = capture_file(&raw, &raw_size, temp_path);
|
|
+ if (rc != 0) {
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ /* sanitize name string by replacing newline with null termination */
|
|
+ raw_tmp = raw;
|
|
+ while (*raw_tmp != '\n')
|
|
+ raw_tmp++;
|
|
+ *raw_tmp = '\0';
|
|
+
|
|
+ if (strncmp(raw, cnic_uio_sysfs_name, sizeof(cnic_uio_sysfs_name)) != 0) {
|
|
+ LOG_ERR(PFX "%s: uio names not equal: "
|
|
+ "expecting %s got %s from %s",
|
|
+ nic->log_name, cnic_uio_sysfs_name, raw, temp_path);
|
|
+ rc = -EIO;
|
|
+ }
|
|
+
|
|
+ free(raw);
|
|
+
|
|
+ LOG_INFO(PFX "%s: Verified is a cnic_uio device", nic->log_name);
|
|
+
|
|
+ error:
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/*******************************************************************************
|
|
+ * bnx2 Utility Functions to get to the hardware consumer indexes
|
|
+ ******************************************************************************/
|
|
+static __u16 bnx2_get_rx_msix(bnx2_t * bp)
|
|
+{
|
|
+ struct status_block_msix *sblk = bp->status_blk.msix;
|
|
+ __u16 rx_cons;
|
|
+
|
|
+ msync(sblk, sizeof(*sblk), MS_SYNC);
|
|
+ rx_cons = sblk->status_rx_quick_consumer_index;
|
|
+ barrier();
|
|
+ if ((rx_cons & (MAX_RX_DESC_CNT)) == (MAX_RX_DESC_CNT))
|
|
+ rx_cons++;
|
|
+
|
|
+ return rx_cons;
|
|
+}
|
|
+
|
|
+static __u16 bnx2_get_rx_msi(bnx2_t * bp)
|
|
+{
|
|
+ struct status_block *sblk = bp->status_blk.msi;
|
|
+ __u16 rx_cons;
|
|
+
|
|
+ msync(sblk, sizeof(*sblk), MS_SYNC);
|
|
+ rx_cons = BNX2_SBLK_EVEN_IDX(sblk->rx2);
|
|
+ barrier();
|
|
+ if ((rx_cons & (MAX_RX_DESC_CNT)) == (MAX_RX_DESC_CNT))
|
|
+ rx_cons++;
|
|
+
|
|
+ return rx_cons;
|
|
+}
|
|
+
|
|
+static __u16 bnx2_get_tx_msix(bnx2_t * bp)
|
|
+{
|
|
+ struct status_block_msix *sblk = bp->status_blk.msix;
|
|
+ __u16 tx_cons;
|
|
+
|
|
+ msync(sblk, sizeof(*sblk), MS_SYNC);
|
|
+ tx_cons = sblk->status_tx_quick_consumer_index;
|
|
+ barrier();
|
|
+ if ((tx_cons & (MAX_TX_DESC_CNT)) == (MAX_TX_DESC_CNT))
|
|
+ tx_cons++;
|
|
+
|
|
+ return tx_cons;
|
|
+}
|
|
+
|
|
+static __u16 bnx2_get_tx_msi(bnx2_t * bp)
|
|
+{
|
|
+ struct status_block *sblk = bp->status_blk.msi;
|
|
+ __u16 tx_cons;
|
|
+
|
|
+ msync(sblk, sizeof(*sblk), MS_SYNC);
|
|
+ tx_cons = BNX2_SBLK_EVEN_IDX(sblk->tx2);
|
|
+ barrier();
|
|
+ if ((tx_cons & (MAX_TX_DESC_CNT)) == (MAX_TX_DESC_CNT))
|
|
+ tx_cons++;
|
|
+
|
|
+ return tx_cons;
|
|
+}
|
|
+
|
|
+typedef enum {
|
|
+ CNIC_VLAN_STRIPPING_ENABLED = 1,
|
|
+ CNIC_VLAN_STRIPPING_DISABLED = 2,
|
|
+} CNIC_VLAN_STRIPPING_MODE;
|
|
+
|
|
+/**
|
|
+ * bnx2_strip_vlan_enabled() - This will query the device to determine whether
|
|
+ * VLAN tag stripping is enabled or not
|
|
+ * @param dev - device to check stripping or not
|
|
+ * @ return CNIC_VLAN_STRIPPING_ENABLED stripping is enabled
|
|
+ * CNIC_VLAN_STRIPPING_DISABLED stripping is not enabled
|
|
+ */
|
|
+static CNIC_VLAN_STRIPPING_MODE bnx2_strip_vlan_enabled(bnx2_t * bp)
|
|
+{
|
|
+ uint32_t val;
|
|
+
|
|
+ val = bnx2_rd32(bp, BNX2_EMAC_RX_MODE);
|
|
+
|
|
+ if (val & BNX2_EMAC_RX_MODE_KEEP_VLAN_TAG)
|
|
+ return CNIC_VLAN_STRIPPING_DISABLED;
|
|
+ else
|
|
+ return CNIC_VLAN_STRIPPING_ENABLED;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2_free() - Used to free a bnx2 structure
|
|
+ */
|
|
+static void bnx2_free(nic_t *nic)
|
|
+{
|
|
+ if (nic->priv)
|
|
+ free(nic->priv);
|
|
+ nic->priv = NULL;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2_alloc() - Used to allocate a bnx2 structure
|
|
+ */
|
|
+static bnx2_t *bnx2_alloc(nic_t * nic)
|
|
+{
|
|
+ bnx2_t *bp = malloc(sizeof(*bp));
|
|
+ if (bp == NULL) {
|
|
+ LOG_ERR(PFX "%s: Could not allocate bnx2 space", nic->log_name);
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ /* Clear out the bnx2 contents */
|
|
+ memset(bp, 0, sizeof(*bp));
|
|
+
|
|
+ bp->bar0_fd = INVALID_FD;
|
|
+ bp->flags = BNX2_UIO_TX_HAS_SENT;
|
|
+
|
|
+ bp->parent = nic;
|
|
+ nic->priv = (void *)bp;
|
|
+
|
|
+ return bp;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2_open() - This will initialize all the hardware resources
|
|
+ * @param dev - The struct nic device to open
|
|
+ * @return 0 on success, on failure a errno will be returned
|
|
+ */
|
|
+static int bnx2_open(nic_t * nic)
|
|
+{
|
|
+ bnx2_t *bp;
|
|
+ struct stat uio_stat;
|
|
+ int i, rc;
|
|
+ __u32 val;
|
|
+ uint32_t tx_cid;
|
|
+ __u32 msix_vector = 0;
|
|
+ char sysfs_resc_path[80];
|
|
+
|
|
+ /* Sanity Check: validate the parameters */
|
|
+ if (nic == NULL) {
|
|
+ LOG_ERR(PFX "bnx2_open(): nic == NULL");
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ if ((nic->priv) != NULL &&
|
|
+ (((bnx2_t *) (nic->priv))->flags & BNX2_OPENED)) {
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
+ bp = bnx2_alloc(nic);
|
|
+ if (bp == NULL) {
|
|
+ LOG_ERR(PFX "bnx2_open(): Couldn't allocate bp priv struct",
|
|
+ nic->log_name);
|
|
+ return -ENOMEM;
|
|
+ }
|
|
+
|
|
+ while (nic->fd < 0) {
|
|
+ nic->fd = open(nic->uio_device_name, O_RDWR | O_NONBLOCK);
|
|
+ if (nic->fd != INVALID_FD) {
|
|
+ LOG_ERR(PFX
|
|
+ "%s: uio device has been brought up via pid: "
|
|
+ "%d on fd: %d",
|
|
+ nic->uio_device_name, getpid(), nic->fd);
|
|
+
|
|
+ rc = bnx2_uio_verify(nic);
|
|
+ if (rc != 0)
|
|
+ continue;
|
|
+
|
|
+ break;
|
|
+ } else {
|
|
+ LOG_WARN(PFX "%s: Could not open device: %s, [%s]",
|
|
+ nic->log_name, nic->uio_device_name,
|
|
+ strerror(errno));
|
|
+ manually_trigger_uio_event(nic, nic->uio_minor);
|
|
+
|
|
+ /* udev might not have created the file yet */
|
|
+ sleep(1);
|
|
+ }
|
|
+ }
|
|
+ if (fstat(nic->fd, &uio_stat) < 0) {
|
|
+ LOG_ERR(PFX "%s: Could not fstat device", nic->log_name);
|
|
+ rc = -ENODEV;
|
|
+ goto error_alloc_rx_ring;
|
|
+ }
|
|
+ nic->uio_minor = minor(uio_stat.st_rdev);
|
|
+
|
|
+ cnic_get_sysfs_pci_resource_path(nic, 0, sysfs_resc_path, 80);
|
|
+ bp->bar0_fd = open(sysfs_resc_path, O_RDWR | O_SYNC);
|
|
+ if (bp->bar0_fd < 0) {
|
|
+ LOG_ERR(PFX "%s: Could not open %s", nic->log_name,
|
|
+ sysfs_resc_path);
|
|
+ rc = -ENODEV;
|
|
+ goto error_alloc_rx_ring;
|
|
+ }
|
|
+
|
|
+ /* TODO: hardcoded with the cnic driver */
|
|
+ bp->rx_ring_size = 3;
|
|
+ bp->rx_buffer_size = 0x400;
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: using rx ring size: %d, rx buffer size: %d",
|
|
+ nic->log_name, bp->rx_ring_size, bp->rx_buffer_size);
|
|
+
|
|
+ /* Determine the number of UIO events that have already occured */
|
|
+ rc = detemine_initial_uio_events(nic, &nic->intr_count);
|
|
+ if (rc != 0) {
|
|
+ LOG_ERR("Could not determine the number ofinitial UIO events");
|
|
+ nic->intr_count = 0;
|
|
+ }
|
|
+
|
|
+ /* Allocate space for rx ring pointer */
|
|
+ bp->rx_ring = malloc(sizeof(struct l2_fhdr *) * bp->rx_ring_size);
|
|
+ if (bp->rx_ring == NULL) {
|
|
+ LOG_ERR(PFX "%s: Could not allocate space for rx_ring",
|
|
+ nic->log_name);
|
|
+ goto error_alloc_rx_ring;
|
|
+ }
|
|
+ mlock(bp->rx_ring, sizeof(struct l2_fhdr *) * bp->rx_ring_size);
|
|
+
|
|
+ /* Allocate space for rx pkt ring */
|
|
+ bp->rx_pkt_ring = malloc(sizeof(void *) * bp->rx_ring_size);
|
|
+ if (bp->rx_pkt_ring == NULL) {
|
|
+ LOG_ERR(PFX "%s: Could not allocate space for rx_pkt_ring",
|
|
+ nic->log_name);
|
|
+ goto error_alloc_rx_pkt_ring;
|
|
+ }
|
|
+ mlock(bp->rx_pkt_ring, sizeof(void *) * bp->rx_ring_size);
|
|
+
|
|
+ bp->reg = mmap(NULL, 0x12800, PROT_READ | PROT_WRITE, MAP_SHARED,
|
|
+ bp->bar0_fd, (off_t) 0);
|
|
+ if (bp->reg == MAP_FAILED) {
|
|
+ LOG_INFO(PFX "%s: Couldn't mmap registers: %s",
|
|
+ nic->log_name, strerror(errno));
|
|
+ bp->reg = NULL;
|
|
+ goto error_regs;
|
|
+ }
|
|
+
|
|
+ msync(bp->reg, 0x12800, MS_SYNC);
|
|
+ LOG_DEBUG(PFX "Chip ID: %x", bnx2_get_chip_id(bp));
|
|
+
|
|
+ /* on a 5709 when using MSI-X the status block is at an offset */
|
|
+ if (CHIP_NUM(bnx2_get_chip_id(bp)) == CHIP_NUM_5709) {
|
|
+ /* determine if we are using MSI-X */
|
|
+ val = bnx2_rd32(bp, BNX2_TSCH_TSS_CFG);
|
|
+ if (val) {
|
|
+ /* We are in MSI-X mode */
|
|
+ uint32_t base_cid = ((val >> 10) & 0x7ff) << 3;
|
|
+ msix_vector = (val >> 24) & 0xf;
|
|
+
|
|
+ bp->status_blk_size = (128 * 9);
|
|
+
|
|
+ tx_cid = base_cid + msix_vector - 1;
|
|
+ bp->flags |= BNX2_UIO_MSIX_ENABLED;
|
|
+
|
|
+ bp->get_tx_cons = bnx2_get_tx_msix;
|
|
+ bp->get_rx_cons = bnx2_get_rx_msix;
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: tss_cfg: 0x%x tx cid: %d",
|
|
+ nic->log_name, val, tx_cid);
|
|
+
|
|
+ LOG_INFO(PFX "%s: detected using MSI-X vector: %d",
|
|
+ nic->log_name, msix_vector);
|
|
+ } else {
|
|
+ /* We are not in MSI-X mode */
|
|
+ bp->status_blk_size = 64;
|
|
+ tx_cid = 20;
|
|
+
|
|
+ bp->get_tx_cons = bnx2_get_tx_msi;
|
|
+ bp->get_rx_cons = bnx2_get_rx_msi;
|
|
+ }
|
|
+ } else {
|
|
+ bp->status_blk_size = 64;
|
|
+ tx_cid = 20;
|
|
+
|
|
+ bp->get_tx_cons = bnx2_get_tx_msi;
|
|
+ bp->get_rx_cons = bnx2_get_rx_msi;
|
|
+ }
|
|
+
|
|
+ bp->sblk_map = mmap(NULL, bp->status_blk_size,
|
|
+ PROT_READ | PROT_WRITE, MAP_SHARED,
|
|
+ nic->fd, (off_t) getpagesize());
|
|
+ if (bp->sblk_map == MAP_FAILED) {
|
|
+ LOG_INFO(PFX "%s: Could not mmap status block: %s",
|
|
+ nic->log_name, strerror(errno));
|
|
+ goto error_sblk;
|
|
+ }
|
|
+
|
|
+ if (bp->flags & BNX2_UIO_MSIX_ENABLED) {
|
|
+ uint8_t *status_blk = (uint8_t *) bp->sblk_map;
|
|
+ status_blk += (msix_vector * 128);
|
|
+
|
|
+ bp->status_blk.msix = (struct status_block_msix *)status_blk;
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: msix initial cons: tx:%d rx:%d",
|
|
+ nic->log_name,
|
|
+ bp->status_blk.msix->status_tx_quick_consumer_index,
|
|
+ bp->status_blk.msix->status_rx_quick_consumer_index);
|
|
+ } else {
|
|
+ bp->status_blk.msi = (struct status_block *)bp->sblk_map;
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: msi initial tx:%d rx:%d",
|
|
+ nic->log_name,
|
|
+ BNX2_SBLK_EVEN_IDX(bp->status_blk.msi->tx2),
|
|
+ BNX2_SBLK_EVEN_IDX(bp->status_blk.msi->rx2));
|
|
+ }
|
|
+
|
|
+ bp->tx_ring = mmap(NULL, 2 * getpagesize(),
|
|
+ PROT_READ | PROT_WRITE, MAP_SHARED, nic->fd,
|
|
+ (off_t) 2 * getpagesize());
|
|
+ if (bp->tx_ring == MAP_FAILED) {
|
|
+ LOG_INFO(PFX "%s: Could not mmap tx ring: %s",
|
|
+ nic->log_name, strerror(errno));
|
|
+ bp->tx_ring = NULL;
|
|
+ goto error_tx_ring;
|
|
+ }
|
|
+
|
|
+ bp->bufs = mmap(NULL, (bp->rx_ring_size + 1) * bp->rx_buffer_size,
|
|
+ PROT_READ | PROT_WRITE,
|
|
+ MAP_SHARED, nic->fd, (off_t) 3 * getpagesize());
|
|
+ if (bp->bufs == MAP_FAILED) {
|
|
+ LOG_INFO(PFX "%s: Could not mmap buffers: %s",
|
|
+ nic->log_name, strerror(errno));
|
|
+ bp->bufs = NULL;
|
|
+ goto error_bufs;
|
|
+ }
|
|
+
|
|
+ bp->tx_bidx_io = MB_GET_CID_ADDR(tx_cid) + BNX2_L2CTX_TX_HOST_BIDX;
|
|
+ bp->tx_bseq_io = MB_GET_CID_ADDR(tx_cid) + BNX2_L2CTX_TX_HOST_BSEQ;
|
|
+ LOG_INFO(PFX "%s: tx_bidx_io: 0x%x tx_bseq_io: 0x%x",
|
|
+ nic->log_name, bp->tx_bidx_io, bp->tx_bseq_io);
|
|
+
|
|
+ bp->rx_bidx_io = MB_GET_CID_ADDR(2) + BNX2_L2CTX_HOST_BDIDX;
|
|
+ bp->rx_bseq_io = MB_GET_CID_ADDR(2) + BNX2_L2CTX_HOST_BSEQ;
|
|
+
|
|
+ bp->tx_cons = 0;
|
|
+ bp->tx_prod = 0;
|
|
+ bp->tx_pkt = bp->bufs;
|
|
+
|
|
+ bp->rx_index = 0;
|
|
+ bp->rx_cons = 0;
|
|
+ bp->rx_prod = bp->rx_ring_size;
|
|
+ bp->rx_bseq = bp->rx_prod * bp->rx_buffer_size;
|
|
+ bnx2_wr16(bp, bp->rx_bidx_io, bp->rx_prod);
|
|
+ bnx2_wr32(bp, bp->rx_bseq_io, bp->rx_bseq);
|
|
+
|
|
+ bnx2_reg_sync(bp, bp->rx_bidx_io, sizeof(__u16));
|
|
+ bnx2_reg_sync(bp, bp->rx_bseq_io, sizeof(__u32));
|
|
+
|
|
+ for (i = 0; i < bp->rx_ring_size; i++) {
|
|
+ void *ptr = bp->bufs + (bp->rx_buffer_size * (i + 1));
|
|
+
|
|
+ bp->rx_ring[i] = (struct l2_fhdr *)ptr;
|
|
+ bp->rx_pkt_ring[i] = ptr + sizeof(struct l2_fhdr) + 2;
|
|
+ }
|
|
+
|
|
+ /* Read the MAC address used for the iSCSI interface */
|
|
+ val = bnx2_rd32(bp, BNX2_EMAC_MAC_MATCH4);
|
|
+ nic->mac_addr[0] = (__u8) (val >> 8);
|
|
+ nic->mac_addr[1] = (__u8) val;
|
|
+
|
|
+ val = bnx2_rd32(bp, BNX2_EMAC_MAC_MATCH5);
|
|
+ nic->mac_addr[2] = (__u8) (val >> 24);
|
|
+ nic->mac_addr[3] = (__u8) (val >> 16);
|
|
+ nic->mac_addr[4] = (__u8) (val >> 8);
|
|
+ nic->mac_addr[5] = (__u8) val;
|
|
+
|
|
+ LOG_INFO(PFX "%s: Using mac address: %2x:%2x:%2x:%2x:%2x:%2x",
|
|
+ nic->log_name,
|
|
+ nic->mac_addr[0], nic->mac_addr[1], nic->mac_addr[2],
|
|
+ nic->mac_addr[3], nic->mac_addr[4], nic->mac_addr[5]);
|
|
+
|
|
+ /* Determine if Hardware VLAN tag stripping is enabled or not */
|
|
+ if (CNIC_VLAN_STRIPPING_ENABLED == bnx2_strip_vlan_enabled(bp)) {
|
|
+ nic->flags |= NIC_VLAN_STRIP_ENABLED;
|
|
+ }
|
|
+
|
|
+ /* Prepare the multicast addresses */
|
|
+ val = 4 | BNX2_RPM_SORT_USER2_BC_EN | BNX2_RPM_SORT_USER2_MC_EN;
|
|
+ if (CHIP_NUM(bnx2_get_chip_id(bp)) != CHIP_NUM_5709)
|
|
+ val |= BNX2_RPM_SORT_USER2_PROM_VLAN;
|
|
+
|
|
+ bnx2_wr32(bp, BNX2_RPM_SORT_USER2, 0x0);
|
|
+ bnx2_wr32(bp, BNX2_RPM_SORT_USER2, val);
|
|
+ bnx2_wr32(bp, BNX2_RPM_SORT_USER2, val | BNX2_RPM_SORT_USER2_ENA);
|
|
+
|
|
+ rc = enable_multicast(nic);
|
|
+ if (rc != 0)
|
|
+ goto error_bufs;
|
|
+
|
|
+ msync(bp->reg, 0x12800, MS_SYNC);
|
|
+ LOG_INFO("%s: bnx2 uio initialized", nic->log_name);
|
|
+
|
|
+ bp->flags |= BNX2_OPENED;
|
|
+
|
|
+ return 0;
|
|
+
|
|
+error_bufs:
|
|
+ munmap(bp->tx_ring, 2 * getpagesize());
|
|
+
|
|
+error_tx_ring:
|
|
+ munmap(bp->status_blk.msi, bp->status_blk_size);
|
|
+
|
|
+error_sblk:
|
|
+ munmap(bp->reg, 0x12800);
|
|
+
|
|
+error_regs:
|
|
+ munlock(bp->rx_pkt_ring, sizeof(void *) * bp->rx_ring_size);
|
|
+ free(bp->rx_pkt_ring);
|
|
+ bp->rx_pkt_ring = NULL;
|
|
+
|
|
+error_alloc_rx_pkt_ring:
|
|
+ munlock(bp->rx_ring, sizeof(struct l2_fhdr *) * bp->rx_ring_size);
|
|
+ free(bp->rx_ring);
|
|
+ bp->rx_ring = NULL;
|
|
+
|
|
+error_alloc_rx_ring:
|
|
+ bnx2_free(nic);
|
|
+
|
|
+ return errno;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2_uio_close_resources() - Used to free resource for the bnx2 NIC
|
|
+ * @param nic - NIC device to free resource
|
|
+ * @param graceful - whether to wait to close gracefully
|
|
+ * @return 0 on success, <0 on failure
|
|
+ */
|
|
+static int bnx2_uio_close_resources(nic_t * nic, NIC_SHUTDOWN_T graceful)
|
|
+{
|
|
+ bnx2_t *bp = (bnx2_t *) nic->priv;
|
|
+ int rc = 0;
|
|
+
|
|
+ /* Remove the multicast addresses if added */
|
|
+ if ((nic->flags & NIC_ADDED_MULICAST) &&
|
|
+ (graceful == ALLOW_GRACEFUL_SHUTDOWN))
|
|
+ disable_multicast(nic);
|
|
+
|
|
+ /* Check if there is an assoicated bnx2 device */
|
|
+ if (bp == NULL) {
|
|
+ LOG_WARN(PFX "%s: when closing resources there is "
|
|
+ "no assoicated bnx2", nic->log_name);
|
|
+ return -EIO;
|
|
+ }
|
|
+
|
|
+ /* Clean up allocated memory */
|
|
+ if (bp->rx_ring != NULL) {
|
|
+ free(bp->rx_ring);
|
|
+ bp->rx_ring = NULL;
|
|
+ }
|
|
+
|
|
+ if (bp->rx_pkt_ring != NULL) {
|
|
+ free(bp->rx_pkt_ring);
|
|
+ bp->rx_pkt_ring = NULL;
|
|
+ }
|
|
+
|
|
+ /* Clean up mapped registers */
|
|
+ if (bp->bufs != NULL) {
|
|
+ rc = munmap(bp->bufs,
|
|
+ (bp->rx_ring_size + 1) * bp->rx_buffer_size);
|
|
+ if (rc != 0)
|
|
+ LOG_WARN(PFX "%s: Couldn't unmap bufs", nic->log_name);
|
|
+ bp->bufs = NULL;
|
|
+ }
|
|
+
|
|
+ if (bp->tx_ring != NULL) {
|
|
+ rc = munmap(bp->tx_ring, 2 * getpagesize());
|
|
+ if (rc != 0)
|
|
+ LOG_WARN(PFX "%s: Couldn't unmap tx_rings",
|
|
+ nic->log_name);
|
|
+ bp->tx_ring = NULL;
|
|
+ }
|
|
+
|
|
+ if (bp->status_blk.msix != NULL || bp->status_blk.msi != NULL) {
|
|
+ rc = munmap(bp->sblk_map, bp->status_blk_size);
|
|
+ if (rc != 0)
|
|
+ LOG_WARN(PFX "%s: Couldn't unmap status block",
|
|
+ nic->log_name);
|
|
+ bp->sblk_map = NULL;
|
|
+
|
|
+ bp->status_blk.msix = NULL;
|
|
+ bp->status_blk.msi = NULL;
|
|
+ }
|
|
+
|
|
+ if (bp->reg != NULL) {
|
|
+ rc = munmap(bp->reg, 0x12800);
|
|
+ if (rc != 0)
|
|
+ LOG_WARN(PFX "%s: Couldn't unmap regs", nic->log_name);
|
|
+ bp->reg = NULL;
|
|
+ }
|
|
+
|
|
+ if (bp->bar0_fd != INVALID_FD) {
|
|
+ close(bp->bar0_fd);
|
|
+ bp->bar0_fd = INVALID_FD;
|
|
+ }
|
|
+
|
|
+ if (nic->fd != INVALID_FD) {
|
|
+ rc = close(nic->fd);
|
|
+ if (rc != 0) {
|
|
+ LOG_WARN(PFX
|
|
+ "%s: Couldn't close uio file descriptor: %d",
|
|
+ nic->log_name, nic->fd);
|
|
+ } else {
|
|
+ LOG_DEBUG(PFX "%s: Closed uio file descriptor: %d",
|
|
+ nic->log_name, nic->fd);
|
|
+ }
|
|
+
|
|
+ nic->fd = INVALID_FD;
|
|
+ } else {
|
|
+ LOG_WARN(PFX "%s: Invalid uio file descriptor: %d",
|
|
+ nic->log_name, nic->fd);
|
|
+ }
|
|
+
|
|
+ LOG_INFO(PFX "%s: Closed all resources", nic->log_name);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2_close() - Used to close the NIC device
|
|
+ * @param nic - NIC device to close
|
|
+ * @param graceful - whether to wait to close gracefully
|
|
+ * @return 0 if successful, <0 if there is an error
|
|
+ */
|
|
+static int bnx2_close(nic_t * nic, NIC_SHUTDOWN_T graceful)
|
|
+{
|
|
+ /* Sanity Check: validate the parameters */
|
|
+ if (nic == NULL) {
|
|
+ LOG_ERR(PFX "bnx2_close(): nic == NULL");
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ LOG_INFO(PFX "Closing NIC device: %s", nic->log_name);
|
|
+
|
|
+ bnx2_uio_close_resources(nic, graceful);
|
|
+ bnx2_free(nic);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static void bnx2_prepare_xmit_packet(nic_t * nic,
|
|
+ nic_interface_t * nic_iface,
|
|
+ struct packet *pkt)
|
|
+{
|
|
+ bnx2_t *bp = (bnx2_t *) nic->priv;
|
|
+ struct uip_vlan_eth_hdr *eth_vlan = (struct uip_vlan_eth_hdr *)pkt->buf;
|
|
+ struct uip_eth_hdr *eth = (struct uip_eth_hdr *)bp->tx_pkt;
|
|
+
|
|
+ if (eth_vlan->tpid == htons(UIP_ETHTYPE_8021Q)) {
|
|
+ memcpy(bp->tx_pkt, pkt->buf, sizeof(struct uip_eth_hdr));
|
|
+ eth->type = eth_vlan->type;
|
|
+ pkt->buf_size -= (sizeof(struct uip_vlan_eth_hdr) -
|
|
+ sizeof(struct uip_eth_hdr));
|
|
+ memcpy(bp->tx_pkt + sizeof(struct uip_eth_hdr),
|
|
+ pkt->buf + sizeof(struct uip_vlan_eth_hdr),
|
|
+ pkt->buf_size - sizeof(struct uip_eth_hdr));
|
|
+ } else
|
|
+ memcpy(bp->tx_pkt, pkt->buf, pkt->buf_size);
|
|
+
|
|
+ msync(bp->tx_pkt, pkt->buf_size, MS_SYNC);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2_get_tx_pkt() - This function is used to a TX packet from the NIC
|
|
+ * @param nic - The NIC device to send the packet
|
|
+ *
|
|
+ */
|
|
+void *bnx2_get_tx_pkt(nic_t * nic)
|
|
+{
|
|
+ bnx2_t *bp = (bnx2_t *) nic->priv;
|
|
+ return bp->tx_pkt;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2_start_xmit() - This function is used to send a packet of data
|
|
+ * @param nic - The NIC device to send the packet
|
|
+ * @param len - the length of the TX packet
|
|
+ *
|
|
+ */
|
|
+void bnx2_start_xmit(nic_t * nic, size_t len, u16_t vlan_id)
|
|
+{
|
|
+ bnx2_t *bp = (bnx2_t *) nic->priv;
|
|
+ uint16_t ring_prod;
|
|
+ struct tx_bd *txbd;
|
|
+ struct rx_bd *rxbd;
|
|
+ rxbd = (struct rx_bd *)(((__u8 *) bp->tx_ring) + getpagesize());
|
|
+
|
|
+ if ((rxbd->rx_bd_haddr_hi == 0) && (rxbd->rx_bd_haddr_lo == 0)) {
|
|
+ LOG_DEBUG(PFX "%s: trying to transmit when device is closed",
|
|
+ nic->log_name);
|
|
+ pthread_mutex_unlock(&nic->xmit_mutex);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ ring_prod = TX_RING_IDX(bp->tx_prod);
|
|
+ txbd = &bp->tx_ring[ring_prod];
|
|
+
|
|
+ txbd->tx_bd_mss_nbytes = len;
|
|
+
|
|
+ if (vlan_id) {
|
|
+ txbd->tx_bd_vlan_tag_flags = (vlan_id << 16) |
|
|
+ TX_BD_FLAGS_VLAN_TAG | TX_BD_FLAGS_END | TX_BD_FLAGS_START;
|
|
+ } else
|
|
+ txbd->tx_bd_vlan_tag_flags = TX_BD_FLAGS_END |
|
|
+ TX_BD_FLAGS_START;
|
|
+
|
|
+ bp->tx_bseq += len;
|
|
+ bp->tx_prod = NEXT_TX_BD(bp->tx_prod);
|
|
+
|
|
+ bnx2_wr16(bp, bp->tx_bidx_io, bp->tx_prod);
|
|
+ bnx2_wr32(bp, bp->tx_bseq_io, bp->tx_bseq);
|
|
+
|
|
+ bnx2_reg_sync(bp, bp->tx_bidx_io, sizeof(__u16));
|
|
+ bnx2_reg_sync(bp, bp->tx_bseq_io, sizeof(__u32));
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: sent %d bytes using dev->tx_prod: %d",
|
|
+ nic->log_name, len, bp->tx_prod);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2_write() - Used to write the data to the hardware
|
|
+ * @param nic - NIC hardware to read from
|
|
+ * @param pkt - The packet which will hold the data to be sent on the wire
|
|
+ * @return 0 if successful, <0 if failed
|
|
+ */
|
|
+int bnx2_write(nic_t * nic, nic_interface_t * nic_iface, packet_t * pkt)
|
|
+{
|
|
+ bnx2_t *bp = (bnx2_t *) nic->priv;
|
|
+ struct uip_stack *uip = &nic_iface->ustack;
|
|
+
|
|
+ /* Sanity Check: validate the parameters */
|
|
+ if (nic == NULL || nic_iface == NULL || pkt == NULL) {
|
|
+ LOG_ERR(PFX "%s: bnx2_write() nic == 0x%p || "
|
|
+ " nic_iface == 0x%p || "
|
|
+ " pkt == 0x%x", nic, nic_iface, pkt);
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ if (pkt->buf_size == 0) {
|
|
+ LOG_ERR(PFX "%s: Trying to transmitted 0 sized packet",
|
|
+ nic->log_name);
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ if (pthread_mutex_trylock(&nic->xmit_mutex) != 0) {
|
|
+ LOG_DEBUG(PFX "%s: Dropped previous transmitted packet",
|
|
+ nic->log_name);
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ bnx2_prepare_xmit_packet(nic, nic_iface, pkt);
|
|
+ bnx2_start_xmit(nic, pkt->buf_size, nic_iface->vlan_id);
|
|
+
|
|
+ /* bump the bnx2 dev send statistics */
|
|
+ nic->stats.tx.packets++;
|
|
+ nic->stats.tx.bytes += uip->uip_len;
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: transmitted %d bytes "
|
|
+ "dev->tx_cons: %d, dev->tx_prod: %d, dev->tx_bseq:%d",
|
|
+ nic->log_name, pkt->buf_size,
|
|
+ bp->tx_cons, bp->tx_prod, bp->tx_bseq);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2_read() - Used to read the data from the hardware
|
|
+ * @param nic - NIC hardware to read from
|
|
+ * @param pkt - The packet which will hold the data
|
|
+ * @return 0 if successful, <0 if failed
|
|
+ */
|
|
+static int bnx2_read(nic_t * nic, packet_t * pkt)
|
|
+{
|
|
+ bnx2_t *bp = (bnx2_t *) nic->priv;
|
|
+ int rc = 0;
|
|
+ uint16_t hw_cons, sw_cons;
|
|
+
|
|
+ /* Sanity Check: validate the parameters */
|
|
+ if (unlikely(nic == NULL || pkt == NULL)) {
|
|
+ LOG_ERR(PFX "%s: bnx2_write() nic == 0x%p || "
|
|
+ " pkt == 0x%x", nic, pkt);
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ hw_cons = bp->get_rx_cons(bp);
|
|
+ sw_cons = bp->rx_cons;
|
|
+
|
|
+ if (sw_cons != hw_cons) {
|
|
+ uint8_t rx_index = bp->rx_index % 3;
|
|
+ struct l2_fhdr *rx_hdr = bp->rx_ring[rx_index];
|
|
+ void *rx_pkt = bp->rx_pkt_ring[rx_index];
|
|
+ int len;
|
|
+ uint16_t errors;
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: clearing rx interrupt: %d %d %d",
|
|
+ nic->log_name, sw_cons, hw_cons, rx_index);
|
|
+
|
|
+ msync(rx_hdr, sizeof(struct l2_fhdr), MS_SYNC);
|
|
+ errors = ((rx_hdr->l2_fhdr_status & 0xffff0000) >> 16);
|
|
+ len = ((rx_hdr->l2_fhdr_vtag_len & 0xffff0000) >> 16) - 4;
|
|
+
|
|
+ if (unlikely((errors & (L2_FHDR_ERRORS_BAD_CRC |
|
|
+ L2_FHDR_ERRORS_PHY_DECODE |
|
|
+ L2_FHDR_ERRORS_ALIGNMENT |
|
|
+ L2_FHDR_ERRORS_TOO_SHORT |
|
|
+ L2_FHDR_ERRORS_GIANT_FRAME)) ||
|
|
+ (len <= 0) ||
|
|
+ (len > (bp->rx_buffer_size -
|
|
+ (sizeof(struct l2_fhdr) + 2))) ||
|
|
+ (len > pkt->max_buf_size))) {
|
|
+ /* One of the fields in the BD is bad */
|
|
+ uint16_t status = ((rx_hdr->l2_fhdr_status &
|
|
+ 0x0000ffff));
|
|
+
|
|
+ LOG_ERR(PFX "%s: Recv error: 0x%x status: 0x%x "
|
|
+ "len: %d", nic->log_name, errors, status, len);
|
|
+
|
|
+ if ((len < (bp->rx_buffer_size -
|
|
+ (sizeof(struct l2_fhdr) + 2))) &&
|
|
+ (len < pkt->max_buf_size))
|
|
+ dump_packet_to_log(pkt->nic_iface, rx_pkt, len);
|
|
+ } else {
|
|
+ if (len < (bp->rx_buffer_size -
|
|
+ (sizeof(struct l2_fhdr) + 2))) {
|
|
+ msync(rx_pkt, len, MS_SYNC);
|
|
+ /* Copy the data */
|
|
+ memcpy(pkt->buf, rx_pkt, len);
|
|
+ pkt->buf_size = len;
|
|
+
|
|
+ /* Properly set the packet flags */
|
|
+ /* check if there is VLAN tagging on the
|
|
+ * packet */
|
|
+ if (rx_hdr->l2_fhdr_status &
|
|
+ L2_FHDR_STATUS_VLAN_TAG) {
|
|
+ pkt->vlan_tag =
|
|
+ rx_hdr->l2_fhdr_vtag_len & 0x0FFF;
|
|
+ pkt->flags |= VLAN_TAGGED;
|
|
+ } else {
|
|
+ pkt->vlan_tag = 0;
|
|
+ }
|
|
+
|
|
+ rc = 1;
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: processing packet "
|
|
+ "length: %d", nic->log_name, len);
|
|
+ } else {
|
|
+ /* If the NIC passes up a packet bigger
|
|
+ * then the RX buffer, flag it */
|
|
+ LOG_ERR(PFX "%s: invalid packet length %d "
|
|
+ "recieve ", nic->log_name, len);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ bp->rx_index++;
|
|
+ sw_cons = NEXT_RX_BD(sw_cons);
|
|
+ bp->rx_prod = NEXT_RX_BD(bp->rx_prod);
|
|
+ bp->rx_bseq += 0x400;
|
|
+
|
|
+ bp->rx_cons = sw_cons;
|
|
+ bnx2_wr16(bp, bp->rx_bidx_io, bp->rx_prod);
|
|
+ bnx2_wr32(bp, bp->rx_bseq_io, bp->rx_bseq);
|
|
+
|
|
+ bnx2_reg_sync(bp, bp->rx_bidx_io, sizeof(__u16));
|
|
+ bnx2_reg_sync(bp, bp->rx_bseq_io, sizeof(__u32));
|
|
+
|
|
+ /* bump the bnx2 dev recv statistics */
|
|
+ nic->stats.rx.packets++;
|
|
+ nic->stats.rx.bytes += pkt->buf_size;
|
|
+ }
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Clearing TX interrupts
|
|
+ ******************************************************************************/
|
|
+/**
|
|
+ * bnx2_clear_tx_intr() - This routine is called when a TX interrupt occurs
|
|
+ * @param nic - the nic the interrupt occured on
|
|
+ * @return 0 on success
|
|
+ */
|
|
+static int bnx2_clear_tx_intr(nic_t * nic)
|
|
+{
|
|
+ bnx2_t *bp = (bnx2_t *) nic->priv;
|
|
+ uint16_t hw_cons = bp->get_tx_cons(bp);
|
|
+
|
|
+ /* Sanity check: ensure the parameters passed in are valid */
|
|
+ if (unlikely(nic == NULL)) {
|
|
+ LOG_ERR(PFX "bnx2_read() nic == NULL");
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ if (bp->flags & BNX2_UIO_TX_HAS_SENT) {
|
|
+ bp->flags &= ~BNX2_UIO_TX_HAS_SENT;
|
|
+ }
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: clearing tx interrupt [%d %d]",
|
|
+ nic->log_name, bp->tx_cons, hw_cons);
|
|
+
|
|
+ bp->tx_cons = hw_cons;
|
|
+
|
|
+ /* There is a queued TX packet that needs to be sent out. The usual
|
|
+ * case is when stack will send an ARP packet out before sending the
|
|
+ * intended packet */
|
|
+ if (nic->tx_packet_queue != NULL) {
|
|
+ packet_t *pkt;
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: sending queued tx packet", nic->log_name);
|
|
+ pkt = nic_dequeue_tx_packet(nic);
|
|
+
|
|
+ /* Got a TX packet buffer of the TX queue and put it onto
|
|
+ * the hardware */
|
|
+ if (pkt != NULL) {
|
|
+ bnx2_prepare_xmit_packet(nic, pkt->nic_iface, pkt);
|
|
+
|
|
+ bnx2_start_xmit(nic, pkt->buf_size,
|
|
+ pkt->nic_iface->vlan_id);
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: transmitted queued packet %d bytes "
|
|
+ "dev->tx_cons: %d, dev->tx_prod: %d, "
|
|
+ "dev->tx_bseq:%d",
|
|
+ nic->log_name, pkt->buf_size,
|
|
+ bp->tx_cons, bp->tx_prod, bp->tx_bseq);
|
|
+
|
|
+ return -EAGAIN;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ pthread_mutex_unlock(&nic->xmit_mutex);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/*******************************************************************************
|
|
+ * bnx2 NIC op's table
|
|
+ ******************************************************************************/
|
|
+struct nic_ops bnx2_op = {
|
|
+ .description = "bnx2",
|
|
+ .open = bnx2_open,
|
|
+ .close = bnx2_close,
|
|
+ .write = bnx2_write,
|
|
+ .get_tx_pkt = bnx2_get_tx_pkt,
|
|
+ .start_xmit = bnx2_start_xmit,
|
|
+ .read = bnx2_read,
|
|
+ .clear_tx_intr = bnx2_clear_tx_intr,
|
|
+ .handle_iscsi_path_req = cnic_handle_iscsi_path_req,
|
|
+
|
|
+ .lib_ops = {
|
|
+ .get_library_name = bnx2_get_library_name,
|
|
+ .get_pci_table = bnx2_get_pci_table,
|
|
+ .get_library_version = bnx2_get_library_version,
|
|
+ .get_build_date = bnx2_get_build_date,
|
|
+ .get_transport_name = bnx2_get_transport_name,
|
|
+ .get_uio_name = bnx2_get_uio_name,
|
|
+ },
|
|
+};
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/libs/bnx2.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/libs/bnx2.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/libs/bnx2.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/libs/bnx2.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,303 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * bnx2.h - bnx2 user space driver
|
|
+ *
|
|
+ */
|
|
+#ifndef __BNX2_H__
|
|
+#define __BNX2_H__
|
|
+
|
|
+#include "nic.h"
|
|
+
|
|
+/******************************************************************************
|
|
+ * Default BNX2 values
|
|
+ ******************************************************************************/
|
|
+#define DEFAULT_NUM_RXBD 3
|
|
+#define DEFAULT_RX_LEN 0x400
|
|
+
|
|
+/******************************************************************************
|
|
+ * BNX2 Hardware structures
|
|
+ ******************************************************************************/
|
|
+/* status_block definition for MSI */
|
|
+struct status_block {
|
|
+ volatile __u32 status_attn_bits;
|
|
+ volatile __u32 status_attn_bits_ack;
|
|
+ volatile __u32 tx0;
|
|
+ volatile __u32 tx2;
|
|
+ volatile __u32 rx0;
|
|
+ volatile __u32 rx2;
|
|
+ volatile __u32 rx4;
|
|
+ volatile __u32 rx6;
|
|
+ volatile __u32 rx8;
|
|
+ volatile __u32 rx10;
|
|
+ volatile __u32 rx12;
|
|
+ volatile __u32 rx14;
|
|
+ volatile __u32 cmd;
|
|
+ volatile __u32 idx;
|
|
+};
|
|
+
|
|
+/* status_block definition for MSI-X */
|
|
+struct status_block_msix {
|
|
+#if 0
|
|
+#if defined(__BIG_ENDIAN)
|
|
+ __u16 status_tx_quick_consumer_index;
|
|
+ __u16 status_rx_quick_consumer_index;
|
|
+ __u16 status_completion_producer_index;
|
|
+ __u16 status_cmd_consumer_index;
|
|
+ __u32 status_unused;
|
|
+ __u16 status_idx;
|
|
+ __u8 status_unused2;
|
|
+ __u8 status_blk_num;
|
|
+#elif defined(__LITTLE_ENDIAN)
|
|
+ __u16 status_rx_quick_consumer_index;
|
|
+ __u16 status_tx_quick_consumer_index;
|
|
+ __u16 status_cmd_consumer_index;
|
|
+ __u16 status_completion_producer_index;
|
|
+ __u32 status_unused;
|
|
+ __u8 status_blk_num;
|
|
+ __u8 status_unused2;
|
|
+ __u16 status_idx;
|
|
+#endif
|
|
+#endif
|
|
+ __u16 status_rx_quick_consumer_index;
|
|
+ __u16 status_tx_quick_consumer_index;
|
|
+ __u16 status_cmd_consumer_index;
|
|
+ __u16 status_completion_producer_index;
|
|
+ __u32 status_unused;
|
|
+ __u8 status_blk_num;
|
|
+ __u8 status_unused2;
|
|
+ __u16 status_idx;
|
|
+};
|
|
+
|
|
+/* TX Buffer descriptor */
|
|
+struct tx_bd {
|
|
+ __u32 tx_bd_haddr_hi;
|
|
+ __u32 tx_bd_haddr_lo;
|
|
+ __u32 tx_bd_mss_nbytes;
|
|
+ __u32 tx_bd_vlan_tag_flags;
|
|
+#define TX_BD_FLAGS_VLAN_TAG (1<<3)
|
|
+#define TX_BD_FLAGS_END (1<<6)
|
|
+#define TX_BD_FLAGS_START (1<<7)
|
|
+};
|
|
+
|
|
+/* RX Buffer descriptor */
|
|
+struct rx_bd {
|
|
+ __u32 rx_bd_haddr_hi;
|
|
+ __u32 rx_bd_haddr_lo;
|
|
+
|
|
+ __u32 rx_bd_len;
|
|
+ __u32 rx_bd_flags;
|
|
+#define RX_BD_FLAGS_END (1<<2)
|
|
+#define RX_BD_FLAGS_START (1<<3)
|
|
+
|
|
+};
|
|
+
|
|
+/* This is the RX L2 Frame header */
|
|
+struct l2_fhdr {
|
|
+ __u32 l2_fhdr_status;
|
|
+#define L2_FHDR_ERRORS_BAD_CRC (1<<17)
|
|
+#define L2_FHDR_ERRORS_PHY_DECODE (1<<18)
|
|
+#define L2_FHDR_ERRORS_ALIGNMENT (1<<19)
|
|
+#define L2_FHDR_ERRORS_TOO_SHORT (1<<20)
|
|
+#define L2_FHDR_ERRORS_GIANT_FRAME (1<<21)
|
|
+#define L2_FHDR_ERRORS_TCP_XSUM (1<<28)
|
|
+#define L2_FHDR_ERRORS_UDP_XSUM (1<<31)
|
|
+
|
|
+#define L2_FHDR_STATUS_UDP_DATAGRAM (1<<15)
|
|
+#define L2_FHDR_STATUS_TCP_DATAGRAM (1<<14)
|
|
+#define L2_FHDR_STATUS_IP_DATAGRAM (1<<13)
|
|
+#define L2_FHDR_STATUS_LLC_SNAP (1<<7)
|
|
+#define L2_FHDR_STATUS_VLAN_TAG (1<<6)
|
|
+
|
|
+ __u32 l2_fhdr_hash;
|
|
+
|
|
+ __u32 l2_fhdr_vtag_len;
|
|
+ __u32 l2_fhdr_xsum;
|
|
+};
|
|
+
|
|
+/******************************************************************************
|
|
+ * BNX2 Registers Defitions/Values
|
|
+ ******************************************************************************/
|
|
+#define BNX2_MISC_ID 0x00000808
|
|
+#define BNX2_EMAC_MAC_MATCH4 0x00001420
|
|
+#define BNX2_EMAC_MAC_MATCH5 0x00001424
|
|
+
|
|
+#define BNX2_EMAC_RX_MODE 0x000014c8
|
|
+#define BNX2_EMAC_RX_MODE_RESET (1L<<0)
|
|
+#define BNX2_EMAC_RX_MODE_FLOW_EN (1L<<2)
|
|
+#define BNX2_EMAC_RX_MODE_KEEP_MAC_CONTROL (1L<<3)
|
|
+#define BNX2_EMAC_RX_MODE_KEEP_PAUSE (1L<<4)
|
|
+#define BNX2_EMAC_RX_MODE_ACCEPT_OVERSIZE (1L<<5)
|
|
+#define BNX2_EMAC_RX_MODE_ACCEPT_RUNTS (1L<<6)
|
|
+#define BNX2_EMAC_RX_MODE_LLC_CHK (1L<<7)
|
|
+#define BNX2_EMAC_RX_MODE_PROMISCUOUS (1L<<8)
|
|
+#define BNX2_EMAC_RX_MODE_NO_CRC_CHK (1L<<9)
|
|
+#define BNX2_EMAC_RX_MODE_KEEP_VLAN_TAG (1L<<10)
|
|
+#define BNX2_EMAC_RX_MODE_FILT_BROADCAST (1L<<11)
|
|
+#define BNX2_EMAC_RX_MODE_SORT_MODE (1L<<12)
|
|
+
|
|
+#define BNX2_RPM_SORT_USER2 0x00001828
|
|
+#define BNX2_RPM_SORT_USER2_PM_EN (0xffffL<<0)
|
|
+#define BNX2_RPM_SORT_USER2_BC_EN (1L<<16)
|
|
+#define BNX2_RPM_SORT_USER2_MC_EN (1L<<17)
|
|
+#define BNX2_RPM_SORT_USER2_MC_HSH_EN (1L<<18)
|
|
+#define BNX2_RPM_SORT_USER2_PROM_EN (1L<<19)
|
|
+#define BNX2_RPM_SORT_USER2_VLAN_EN (0xfL<<20)
|
|
+#define BNX2_RPM_SORT_USER2_PROM_VLAN (1L<<24)
|
|
+#define BNX2_RPM_SORT_USER2_ENA (1L<<31)
|
|
+
|
|
+/*
|
|
+ * tsch_reg definition
|
|
+ * offset: 0x4c00
|
|
+ */
|
|
+#define BNX2_TSCH_TSS_CFG 0x00004c1c
|
|
+#define BNX2_TSCH_TSS_CFG_TSS_START_CID (0x7ffL<<8)
|
|
+#define BNX2_TSCH_TSS_CFG_NUM_OF_TSS_CON (0xfL<<24)
|
|
+#define CNIC_UIO_INVALID_FD -1
|
|
+
|
|
+#define BNX2_L2CTX_TX_HOST_BIDX 0x00000088
|
|
+#define BNX2_L2CTX_TX_HOST_BSEQ 0x00000090
|
|
+
|
|
+#define BNX2_L2CTX_HOST_BDIDX 0x00000004
|
|
+#define BNX2_L2CTX_HOST_BSEQ 0x00000008
|
|
+
|
|
+/* Used to determin the CHIP ID */
|
|
+/* chip num:16-31, rev:12-15, metal:4-11, bond_id:0-3 */
|
|
+#define CHIP_NUM(bp) ((bp) & 0xffff0000)
|
|
+#define CHIP_NUM_5706 0x57060000
|
|
+#define CHIP_NUM_5708 0x57080000
|
|
+#define CHIP_NUM_5709 0x57090000
|
|
+
|
|
+#define CHIP_REV(bp) ((bp) & 0x0000f000)
|
|
+#define CHIP_REV_Ax 0x00000000
|
|
+#define CHIP_REV_Bx 0x00001000
|
|
+#define CHIP_REV_Cx 0x00002000
|
|
+
|
|
+#define CHIP_METAL(bp) ((bp) & 0x00000ff0)
|
|
+#define CHIP_BONDING(bp) ((bp) & 0x0000000f)
|
|
+
|
|
+#define CHIP_ID(bp) ((bp) & 0xfffffff0)
|
|
+#define CHIP_ID_5706_A0 0x57060000
|
|
+#define CHIP_ID_5706_A1 0x57060010
|
|
+#define CHIP_ID_5706_A2 0x57060020
|
|
+#define CHIP_ID_5708_A0 0x57080000
|
|
+#define CHIP_ID_5708_B0 0x57081000
|
|
+#define CHIP_ID_5708_B1 0x57081010
|
|
+#define CHIP_ID_5709_A0 0x57090000
|
|
+#define CHIP_ID_5709_A1 0x57090010
|
|
+
|
|
+#define CHIP_BOND_ID(bp) ((bp) & 0xf)
|
|
+
|
|
+#define BNX2_SBLK_EVEN_IDX(x) (((x) & 0xffff0000) >> 16)
|
|
+
|
|
+#define TX_DESC_CNT (4096 / sizeof(struct tx_bd))
|
|
+#define MAX_TX_DESC_CNT (TX_DESC_CNT - 1)
|
|
+
|
|
+#define NEXT_TX_BD(x) (((x) & (MAX_TX_DESC_CNT - 1)) == \
|
|
+ (MAX_TX_DESC_CNT - 1)) ? \
|
|
+ (x) + 2 : (x) + 1
|
|
+
|
|
+#define TX_RING_IDX(x) ((x) & MAX_TX_DESC_CNT)
|
|
+
|
|
+#define RX_DESC_CNT (4096 / sizeof(struct rx_bd))
|
|
+#define MAX_RX_DESC_CNT (RX_DESC_CNT - 1)
|
|
+
|
|
+#define NEXT_RX_BD(x) (((x) & (MAX_RX_DESC_CNT - 1)) == \
|
|
+ (MAX_RX_DESC_CNT - 1)) ? \
|
|
+ (x) + 2 : (x) + 1
|
|
+
|
|
+#define MB_KERNEL_CTX_SHIFT 8
|
|
+#define MB_KERNEL_CTX_SIZE (1 << MB_KERNEL_CTX_SHIFT)
|
|
+#define MB_KERNEL_CTX_MASK (MB_KERNEL_CTX_SIZE - 1)
|
|
+#define MB_GET_CID_ADDR(_cid) (0x10000 + ((_cid) << MB_KERNEL_CTX_SHIFT))
|
|
+
|
|
+typedef struct bnx2 {
|
|
+ nic_t *parent;
|
|
+
|
|
+ uint16_t flags;
|
|
+#define BNX2_UIO_MSIX_ENABLED 0x0001
|
|
+#define BNX2_UIO_TX_HAS_SENT 0x0002
|
|
+#define BNX2_OPENED 0x0004
|
|
+
|
|
+ int bar0_fd;
|
|
+ void *reg; /* Pointer to the mapped registers */
|
|
+
|
|
+ __u32 tx_bidx_io;
|
|
+ __u32 tx_bseq_io;
|
|
+
|
|
+ __u16 tx_prod;
|
|
+ __u16 tx_cons;
|
|
+ __u32 tx_bseq;
|
|
+
|
|
+ __u32 rx_bidx_io;
|
|
+ __u32 rx_bseq_io;
|
|
+
|
|
+ __u16 rx_prod;
|
|
+ __u16 rx_cons;
|
|
+ __u32 rx_bseq;
|
|
+
|
|
+ /* RX ring parameters */
|
|
+ uint32_t rx_ring_size;
|
|
+ uint32_t rx_buffer_size;
|
|
+
|
|
+ void *bufs; /* Pointer to the mapped buffer space */
|
|
+
|
|
+ /* Hardware Status Block locations */
|
|
+ void *sblk_map;
|
|
+ union {
|
|
+ struct status_block *msi;
|
|
+ struct status_block_msix *msix;
|
|
+ } status_blk;
|
|
+ size_t status_blk_size;
|
|
+
|
|
+ __u16(*get_rx_cons) (struct bnx2 *);
|
|
+ __u16(*get_tx_cons) (struct bnx2 *);
|
|
+
|
|
+ uint16_t rx_index;
|
|
+ struct l2_fhdr **rx_ring;
|
|
+ void **rx_pkt_ring;
|
|
+
|
|
+ struct tx_bd *tx_ring;
|
|
+ void *tx_pkt;
|
|
+
|
|
+ struct l2_fhdr rcv_l2_fhdr;
|
|
+ __u8 rcv_buf[1500 + 2];
|
|
+ __u32 rcv_size;
|
|
+} bnx2_t;
|
|
+
|
|
+/******************************************************************************
|
|
+ * bnx2 Function Declarations
|
|
+ ******************************************************************************/
|
|
+struct nic_ops *bnx2_get_ops();
|
|
+#endif /* __BNX2_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/libs/bnx2x.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/libs/bnx2x.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/libs/bnx2x.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/libs/bnx2x.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,1554 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * bnx2x.c - bnx2x user space driver
|
|
+ *
|
|
+ */
|
|
+#include <errno.h>
|
|
+#include <stdio.h>
|
|
+#include <string.h>
|
|
+#include <arpa/inet.h>
|
|
+#include <linux/types.h> /* Needed for linux/ethtool.h on RHEL 5.x */
|
|
+#include <linux/sockios.h>
|
|
+#include <linux/ethtool.h>
|
|
+#include <sys/mman.h>
|
|
+#include <sys/ioctl.h>
|
|
+#include <sys/types.h>
|
|
+#include <sys/stat.h>
|
|
+#include <sys/user.h>
|
|
+#include <fcntl.h>
|
|
+#include <unistd.h>
|
|
+
|
|
+#include "config.h"
|
|
+
|
|
+#include "build_date.h"
|
|
+#include "bnx2x.h"
|
|
+#include "cnic.h"
|
|
+#include "logger.h"
|
|
+#include "nic.h"
|
|
+#include "nic_id.h"
|
|
+#include "nic_utils.h"
|
|
+#include "options.h"
|
|
+
|
|
+#define PFX "bnx2x "
|
|
+
|
|
+/* Foward struct declarations */
|
|
+struct nic_ops bnx2x_op;
|
|
+
|
|
+/*******************************************************************************
|
|
+ * NIC Library Strings
|
|
+ ******************************************************************************/
|
|
+static const char library_name[] = "bnx2x";
|
|
+static const char library_version[] = PACKAGE_VERSION;
|
|
+static const char library_uio_name[] = "bnx2x_cnic";
|
|
+
|
|
+/* The name that should be returned from /sys/class/uio/uio0/name */
|
|
+static const char cnic_uio_sysfs_name_tempate[] = "/sys/class/uio/uio%i/name";
|
|
+static const char bnx2x_uio_sysfs_name[] = "bnx2x_cnic";
|
|
+
|
|
+/*******************************************************************************
|
|
+ * String constants used to display human readable adapter name
|
|
+ ******************************************************************************/
|
|
+static const char brcm_57710[] = "Broadcom NetXtreme II BCM57710 10-Gigabit";
|
|
+static const char brcm_57711[] = "Broadcom NetXtreme II BCM57711 10-Gigabit";
|
|
+static const char brcm_57711e[] = "Broadcom NetXtreme II BCM57711E 10-Gigabit";
|
|
+static const char brcm_57712[] = "Broadcom NetXtreme II BCM57712 10-Gigabit";
|
|
+static const char brcm_57712_MF[] = "Broadcom NetXtreme II BCM57712 MF "
|
|
+ "10-Gigabit";
|
|
+static const char brcm_57712_VF[] = "Broadcom NetXtreme II BCM57712 VF "
|
|
+ "10-Gigabit";
|
|
+static const char brcm_57800[] = "Broadcom NetXtreme II BCM57800 10-Gigabit";
|
|
+static const char brcm_57800_MF[] = "Broadcom NetXtreme II BCM57800 MF "
|
|
+ "10-Gigabit";
|
|
+static const char brcm_57800_VF[] = "Broadcom NetXtreme II BCM57800 VF "
|
|
+ "10-Gigabit";
|
|
+static const char brcm_57810[] = "Broadcom NetXtreme II BCM57810 10-Gigabit";
|
|
+static const char brcm_57810_MF[] = "Broadcom NetXtreme II BCM57810 MF "
|
|
+ "10-Gigabit";
|
|
+static const char brcm_57810_VF[] = "Broadcom NetXtreme II BCM57810 VF "
|
|
+ "10-Gigabit";
|
|
+static const char brcm_57840[] = "Broadcom NetXtreme II BCM57840 10-Gigabit";
|
|
+static const char brcm_57840_MF[] = "Broadcom NetXtreme II BCM57840 MF "
|
|
+ "10-Gigabit";
|
|
+static const char brcm_57840_VF[] = "Broadcom NetXtreme II BCM57840 VF "
|
|
+ "10-Gigabit";
|
|
+
|
|
+/*******************************************************************************
|
|
+ * PCI ID constants
|
|
+ ******************************************************************************/
|
|
+#define PCI_VENDOR_ID_BROADCOM 0x14e4
|
|
+#define PCI_DEVICE_ID_NX2_57710 0x164e
|
|
+#define PCI_DEVICE_ID_NX2_57711 0x164f
|
|
+#define PCI_DEVICE_ID_NX2_57711E 0x1650
|
|
+#define PCI_DEVICE_ID_NX2_57712 0x1662
|
|
+#define PCI_DEVICE_ID_NX2_57712_MF 0x1663
|
|
+#define PCI_DEVICE_ID_NX2_57712_VF 0x166f
|
|
+#define PCI_DEVICE_ID_NX2_57800 0x168a
|
|
+#define PCI_DEVICE_ID_NX2_57800_MF 0x16a5
|
|
+#define PCI_DEVICE_ID_NX2_57800_VF 0x16a9
|
|
+#define PCI_DEVICE_ID_NX2_57810 0x168e
|
|
+#define PCI_DEVICE_ID_NX2_57810_MF 0x16ae
|
|
+#define PCI_DEVICE_ID_NX2_57810_VF 0x16af
|
|
+#define PCI_DEVICE_ID_NX2_57840 0x168d
|
|
+#define PCI_DEVICE_ID_NX2_57840_MF 0x16ab
|
|
+#define PCI_DEVICE_ID_NX2_57840_VF 0x16ad
|
|
+#define PCI_ANY_ID (~0)
|
|
+
|
|
+/* This is the table used to match PCI vendor and device ID's to the
|
|
+ * human readable string names of the devices */
|
|
+static const struct pci_device_id bnx2x_pci_tbl[] = {
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_57710,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_57710},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_57711,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_57711},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_57711E,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_57711e},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_57712,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_57712},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_57712_MF,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_57712_MF},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_57712_VF,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_57712_VF},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_57800,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_57800},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_57800_MF,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_57800_MF},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_57800_VF,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_57800_VF},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_57810,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_57810},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_57810_MF,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_57810_MF},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_57810_VF,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_57810_VF},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_57840,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_57840},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_57840_MF,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_57840_MF},
|
|
+ {PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_57840_VF,
|
|
+ PCI_ANY_ID, PCI_ANY_ID, brcm_57840_VF},
|
|
+};
|
|
+
|
|
+static struct iro e1_iro[2] = {
|
|
+ {0x45a0, 0x90, 0x8, 0x0, 0x8}, /* T6.0 */
|
|
+ {0x50c8, 0x90, 0x8, 0x0, 0x8}, /* T6.4 */
|
|
+};
|
|
+
|
|
+static struct iro e1h_iro[2] = {
|
|
+ {0x1c40, 0xe0, 0x8, 0x0, 0x8}, /* T6.0 */
|
|
+ {0x1e00, 0xe0, 0x8, 0x0, 0x8}, /* T6.4 */
|
|
+};
|
|
+
|
|
+static struct iro e2_iro[2] = {
|
|
+ {0x6000, 0x20, 0x0, 0x0, 0x8}, /* T6.0 */
|
|
+ {0x6000, 0x20, 0x0, 0x0, 0x8}, /* T6.4 */
|
|
+};
|
|
+
|
|
+struct bnx2x_driver_version bnx2x_version = {
|
|
+ BNX2X_UNKNOWN_MAJOR_VERSION,
|
|
+ BNX2X_UNKNOWN_MINOR_VERSION,
|
|
+ BNX2X_UNKNOWN_SUB_MINOR_VERSION,
|
|
+};
|
|
+
|
|
+static int bnx2x_clear_tx_intr(nic_t * nic);
|
|
+
|
|
+/*******************************************************************************
|
|
+ * BNX2X Library Functions
|
|
+ ******************************************************************************/
|
|
+/**
|
|
+ * bnx2x_get_library_name() - Used to get the name of this NIC libary
|
|
+ * @param name - This function will return the pointer to this NIC
|
|
+ * library name
|
|
+ * @param name_size
|
|
+ */
|
|
+static void bnx2x_get_library_name(char **name, size_t * name_size)
|
|
+{
|
|
+ *name = (char *)library_name;
|
|
+ *name_size = sizeof(library_name);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2x_get_library_version() - Used to get the version string of this
|
|
+ * NIC libary
|
|
+ * @param version - This function will return the pointer to this NIC
|
|
+ * library version string
|
|
+ * @param version_size - This will be set with the version size
|
|
+ */
|
|
+static void bnx2x_get_library_version(char **version, size_t * version_size)
|
|
+{
|
|
+ *version = (char *)library_version;
|
|
+ *version_size = sizeof(library_version);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2x_get_build_date() - Used to get the build date string of this library
|
|
+ * @param version - This function will return the pointer to this NIC
|
|
+ * library build date string
|
|
+ * @param version_size - This will be set with the build date string size
|
|
+ */
|
|
+static void bnx2x_get_build_date(char **build, size_t * build_size)
|
|
+{
|
|
+ *build = (char *)build_date;
|
|
+ *build_size = sizeof(build_date);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2x_get_transport_name() - Used to get the transport name associated
|
|
+ * with this this NIC libary
|
|
+ * @param transport_name - This function will return the pointer to this NIC
|
|
+ * library's associated transport string
|
|
+ * @param transport_name_size - This will be set with the transport name size
|
|
+ */
|
|
+static void bnx2x_get_transport_name(char **transport_name,
|
|
+ size_t * transport_name_size)
|
|
+{
|
|
+ *transport_name = (char *)bnx2i_library_transport_name;
|
|
+ *transport_name_size = bnx2i_library_transport_name_size;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2x_get_uio_name() - Used to get the uio name associated with this this
|
|
+ * NIC libary
|
|
+ * @param uio_name - This function will return the pointer to this NIC
|
|
+ * library's associated uio string
|
|
+ * @param transport_name_size - This will be set with the uio name size
|
|
+ */
|
|
+static void bnx2x_get_uio_name(char **uio_name, size_t * uio_name_size)
|
|
+{
|
|
+ *uio_name = (char *)library_uio_name;
|
|
+ *uio_name_size = sizeof(library_uio_name);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2x_get_pci_table() - Used to get the PCI table for this NIC libary to
|
|
+ * determine which NIC's based off of PCI ID's are
|
|
+ * supported
|
|
+ * @param table - This function will return the pointer to the PCI table
|
|
+ * @param entries - This function will return the number of entries in the NIC
|
|
+ * library's PCI table
|
|
+ */
|
|
+static void bnx2x_get_pci_table(struct pci_device_id **table,
|
|
+ uint32_t * entries)
|
|
+{
|
|
+ *table = (struct pci_device_id *)bnx2x_pci_tbl;
|
|
+ *entries =
|
|
+ (uint32_t) (sizeof(bnx2x_pci_tbl) / sizeof(bnx2x_pci_tbl[0]));
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2x_get_ops() - Used to get the NIC library op table
|
|
+ * @param op - The op table of this NIC library
|
|
+ */
|
|
+struct nic_ops *bnx2x_get_ops()
|
|
+{
|
|
+ return &bnx2x_op;
|
|
+}
|
|
+
|
|
+/*******************************************************************************
|
|
+ * bnx2x Utility Functions
|
|
+ ******************************************************************************/
|
|
+/*******************************************************************************
|
|
+ * Utility Functions Used to read register from the bnx2x device
|
|
+ ******************************************************************************/
|
|
+static void bnx2x_set_drv_version_unknown(bnx2x_t * bp)
|
|
+{
|
|
+ bp->version.major = BNX2X_UNKNOWN_MAJOR_VERSION;
|
|
+ bp->version.minor = BNX2X_UNKNOWN_MINOR_VERSION;
|
|
+ bp->version.sub_minor = BNX2X_UNKNOWN_SUB_MINOR_VERSION;
|
|
+}
|
|
+
|
|
+static int bnx2x_is_drv_version_unknown(struct bnx2x_driver_version *version)
|
|
+{
|
|
+ if ((version->major == BNX2X_UNKNOWN_MAJOR_VERSION) &&
|
|
+ (version->minor == BNX2X_UNKNOWN_MINOR_VERSION) &&
|
|
+ (version->sub_minor == BNX2X_UNKNOWN_SUB_MINOR_VERSION)) {
|
|
+ return 1;
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2x_get_drv_version() - Used to determine the driver version
|
|
+ * @param bp - Device used to determine bnx2x driver version
|
|
+ */
|
|
+static int bnx2x_get_drv_version(bnx2x_t * bp)
|
|
+{
|
|
+ nic_t *nic = bp->parent;
|
|
+ int fd, rc;
|
|
+ struct ifreq ifr;
|
|
+ struct ethtool_drvinfo drvinfo;
|
|
+ char *tok, *save_ptr = NULL;
|
|
+
|
|
+ /* Setup our control structures. */
|
|
+ memset(&ifr, 0, sizeof(ifr));
|
|
+ strcpy(ifr.ifr_name, nic->eth_device_name);
|
|
+
|
|
+ /* Open control socket. */
|
|
+ fd = socket(AF_INET, SOCK_DGRAM, 0);
|
|
+ if (fd < 0) {
|
|
+ LOG_ERR(PFX "%s: Cannot get socket to determine version "
|
|
+ "[0x%x %s]", nic->log_name, errno, strerror(errno));
|
|
+ return -EIO;
|
|
+ }
|
|
+
|
|
+ drvinfo.cmd = ETHTOOL_GDRVINFO;
|
|
+ ifr.ifr_data = (caddr_t) & drvinfo;
|
|
+ rc = ioctl(fd, SIOCETHTOOL, &ifr);
|
|
+ if (rc < 0) {
|
|
+ LOG_ERR(PFX "%s: call to ethool IOCTL failed [0x%x %s]",
|
|
+ nic->log_name, errno, strerror(errno));
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ tok = strtok_r(drvinfo.version, ".", &save_ptr);
|
|
+ if (tok == NULL) {
|
|
+ rc = -EIO;
|
|
+ goto error;
|
|
+ }
|
|
+ bp->version.major = atoi(tok);
|
|
+
|
|
+ tok = strtok_r(NULL, ".", &save_ptr);
|
|
+ if (tok == NULL) {
|
|
+ rc = -EIO;
|
|
+ goto error;
|
|
+ }
|
|
+ bp->version.minor = atoi(tok);
|
|
+
|
|
+ tok = strtok_r(NULL, ".", &save_ptr);
|
|
+ if (tok == NULL) {
|
|
+ rc = -EIO;
|
|
+ goto error;
|
|
+ }
|
|
+ bp->version.sub_minor = atoi(tok);
|
|
+
|
|
+ LOG_INFO(PFX "%s: bnx2x driver using version %d.%d.%d",
|
|
+ nic->log_name,
|
|
+ bp->version.major, bp->version.minor, bp->version.sub_minor);
|
|
+
|
|
+ close(fd);
|
|
+
|
|
+ return 0;
|
|
+
|
|
+error:
|
|
+ close(fd);
|
|
+ bnx2x_set_drv_version_unknown(bp);
|
|
+
|
|
+ LOG_ERR(PFX "%s: error parsing driver string: '%s'",
|
|
+ nic->log_name, drvinfo.version);
|
|
+
|
|
+ return rc;
|
|
+
|
|
+}
|
|
+
|
|
+static inline int bnx2x_is_ver70(bnx2x_t *bp)
|
|
+{
|
|
+ return (bp->version.major == 1 && bp->version.minor >= 70);
|
|
+}
|
|
+
|
|
+static inline int bnx2x_is_ver60(bnx2x_t * bp)
|
|
+{
|
|
+ return (bp->version.major == 1 && (bp->version.minor == 60 ||
|
|
+ bp->version.minor == 62 ||
|
|
+ bp->version.minor == 64));
|
|
+}
|
|
+
|
|
+static inline int bnx2x_is_ver60_plus(bnx2x_t *bp)
|
|
+{
|
|
+ return bnx2x_is_ver60(bp) || bnx2x_is_ver70(bp);
|
|
+}
|
|
+
|
|
+static inline int bnx2x_is_ver52(bnx2x_t * bp)
|
|
+{
|
|
+ return (bp->version.major == 1 && bp->version.minor == 52);
|
|
+}
|
|
+
|
|
+static void bnx2x_wr32(bnx2x_t * bp, __u32 off, __u32 val)
|
|
+{
|
|
+ *((volatile __u32 *)(bp->reg + off)) = val;
|
|
+}
|
|
+
|
|
+static void bnx2x_doorbell(bnx2x_t * bp, __u32 off, __u32 val)
|
|
+{
|
|
+ *((volatile __u32 *)(bp->reg2 + off)) = val;
|
|
+}
|
|
+
|
|
+static void bnx2x_flush_doorbell(bnx2x_t * bp, __u32 off)
|
|
+{
|
|
+ volatile __u32 tmp;
|
|
+
|
|
+ barrier();
|
|
+ tmp = *((volatile __u32 *)(bp->reg2 + off));
|
|
+}
|
|
+
|
|
+static __u32 bnx2x_rd32(bnx2x_t * bp, __u32 off)
|
|
+{
|
|
+ return *((volatile __u32 *)(bp->reg + off));
|
|
+}
|
|
+
|
|
+static int bnx2x_reg_sync(bnx2x_t * bp, __u32 off, __u16 length)
|
|
+{
|
|
+ return msync(bp->reg + off, length, MS_SYNC);
|
|
+}
|
|
+
|
|
+static void bnx2x_update_rx_prod(bnx2x_t * bp)
|
|
+{
|
|
+ struct ustorm_eth_rx_producers rx_prods = { 0 };
|
|
+ int i;
|
|
+
|
|
+ rx_prods.bd_prod = bp->rx_bd_prod;
|
|
+ rx_prods.cqe_prod = bp->rx_prod;
|
|
+
|
|
+ barrier();
|
|
+
|
|
+ for (i = 0; i < sizeof(struct ustorm_eth_rx_producers) / 4; i++)
|
|
+ bnx2x_wr32(bp, bp->rx_prod_io + i * 4,
|
|
+ ((__u32 *)&rx_prods)[i]);
|
|
+
|
|
+ barrier();
|
|
+
|
|
+ bnx2x_reg_sync(bp, bp->rx_prod_io,
|
|
+ sizeof(struct ustorm_eth_rx_producers));
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2x_get_chip_id() - Used to retrive the chip ID from the nic
|
|
+ * @param dev - Device used to determin NIC type
|
|
+ * @return Chip ID read from the MISC ID register
|
|
+ */
|
|
+static int bnx2x_get_chip_id(bnx2x_t * bp)
|
|
+{
|
|
+ int val, id;
|
|
+
|
|
+ /* Get the chip revision id and number. */
|
|
+ /* chip num:16-31, rev:12-15, metal:4-11, bond_id:0-3 */
|
|
+ val = bnx2x_rd32(bp, BNX2X_MISC_REG_CHIP_NUM);
|
|
+ id = ((val & 0xffff) << 16);
|
|
+ val = bnx2x_rd32(bp, BNX2X_MISC_REG_CHIP_REV);
|
|
+ id |= ((val & 0xf) << 12);
|
|
+ val = bnx2x_rd32(bp, BNX2X_MISC_REG_CHIP_METAL);
|
|
+ id |= ((val & 0xff) << 4);
|
|
+ val = bnx2x_rd32(bp, BNX2X_MISC_REG_BOND_ID);
|
|
+ id |= (val & 0xf);
|
|
+
|
|
+ return id;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2x_uio_verify()
|
|
+ *
|
|
+ */
|
|
+static int bnx2x_uio_verify(nic_t * nic)
|
|
+{
|
|
+ char *raw = NULL, *raw_tmp;
|
|
+ uint32_t raw_size = 0;
|
|
+ char temp_path[sizeof(cnic_uio_sysfs_name_tempate) + 8];
|
|
+ int rc = 0;
|
|
+
|
|
+ /* Build the path to determine uio name */
|
|
+ snprintf(temp_path, sizeof(temp_path),
|
|
+ cnic_uio_sysfs_name_tempate, nic->uio_minor);
|
|
+
|
|
+ rc = capture_file(&raw, &raw_size, temp_path);
|
|
+ if (rc != 0) {
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ /* sanitize name string by replacing newline with null termination */
|
|
+ raw_tmp = raw;
|
|
+ while (*raw_tmp != '\n')
|
|
+ raw_tmp++;
|
|
+ *raw_tmp = '\0';
|
|
+
|
|
+ if (strncmp(raw, bnx2x_uio_sysfs_name,
|
|
+ sizeof(bnx2x_uio_sysfs_name)) != 0) {
|
|
+ LOG_ERR(PFX "%s: uio names not equal: "
|
|
+ "expecting %s got %s from %s",
|
|
+ nic->log_name, bnx2x_uio_sysfs_name, raw, temp_path);
|
|
+ rc = -EIO;
|
|
+ }
|
|
+
|
|
+ free(raw);
|
|
+
|
|
+ LOG_INFO(PFX "%s: Verified is a cnic_uio device", nic->log_name);
|
|
+
|
|
+error:
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/*******************************************************************************
|
|
+ * bnx2x Utility Functions to get to the hardware consumer indexes
|
|
+ ******************************************************************************/
|
|
+static __u16 bnx2x_get_rx(bnx2x_t * bp)
|
|
+{
|
|
+ struct host_def_status_block *sblk = bp->status_blk.def;
|
|
+ __u16 rx_comp_cons;
|
|
+
|
|
+ msync(sblk, sizeof(*sblk), MS_SYNC);
|
|
+ rx_comp_cons =
|
|
+ sblk->u_def_status_block.
|
|
+ index_values[HC_INDEX_DEF_U_ETH_ISCSI_RX_CQ_CONS];
|
|
+ if ((rx_comp_cons & BNX2X_MAX_RCQ_DESC_CNT(bp)) ==
|
|
+ BNX2X_MAX_RCQ_DESC_CNT(bp))
|
|
+ rx_comp_cons++;
|
|
+
|
|
+ return rx_comp_cons;
|
|
+}
|
|
+
|
|
+static __u16 bnx2x_get_rx_60(bnx2x_t * bp)
|
|
+{
|
|
+ struct host_sp_status_block *sblk = bp->status_blk.sp;
|
|
+ __u16 rx_comp_cons;
|
|
+
|
|
+ msync(sblk, sizeof(*sblk), MS_SYNC);
|
|
+ rx_comp_cons =
|
|
+ sblk->sp_sb.index_values[HC_SP_INDEX_ETH_ISCSI_RX_CQ_CONS];
|
|
+ if ((rx_comp_cons & BNX2X_MAX_RCQ_DESC_CNT(bp)) ==
|
|
+ BNX2X_MAX_RCQ_DESC_CNT(bp))
|
|
+ rx_comp_cons++;
|
|
+
|
|
+ return rx_comp_cons;
|
|
+}
|
|
+
|
|
+static __u16 bnx2x_get_tx(bnx2x_t * bp)
|
|
+{
|
|
+ struct host_def_status_block *sblk = bp->status_blk.def;
|
|
+ __u16 tx_cons;
|
|
+
|
|
+ msync(sblk, sizeof(*sblk), MS_SYNC);
|
|
+ tx_cons =
|
|
+ sblk->c_def_status_block.
|
|
+ index_values[HC_INDEX_DEF_C_ETH_ISCSI_CQ_CONS];
|
|
+
|
|
+ return tx_cons;
|
|
+}
|
|
+
|
|
+static __u16 bnx2x_get_tx_60(bnx2x_t * bp)
|
|
+{
|
|
+ struct host_sp_status_block *sblk = bp->status_blk.sp;
|
|
+ __u16 tx_cons;
|
|
+
|
|
+ msync(sblk, sizeof(*sblk), MS_SYNC);
|
|
+ tx_cons = sblk->sp_sb.index_values[HC_SP_INDEX_ETH_ISCSI_CQ_CONS];
|
|
+
|
|
+ return tx_cons;
|
|
+}
|
|
+
|
|
+typedef enum {
|
|
+ CNIC_VLAN_STRIPPING_ENABLED = 1,
|
|
+ CNIC_VLAN_STRIPPING_DISABLED = 2,
|
|
+} CNIC_VLAN_STRIPPING_MODE;
|
|
+
|
|
+/**
|
|
+ * bnx2x_strip_vlan_enabled() - This will query the device to determine whether
|
|
+ * VLAN tag stripping is enabled or not
|
|
+ * @param dev - device to check stripping or not
|
|
+ * @ return CNIC_VLAN_STRIPPING_ENABLED stripping is enabled
|
|
+ * CNIC_VLAN_STRIPPING_DISABLED stripping is not enabled
|
|
+ */
|
|
+static CNIC_VLAN_STRIPPING_MODE bnx2x_strip_vlan_enabled(bnx2x_t * bp)
|
|
+{
|
|
+ return CNIC_VLAN_STRIPPING_DISABLED;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2x_free() - Used to free a bnx2x structure
|
|
+ */
|
|
+static void bnx2x_free(nic_t *nic)
|
|
+{
|
|
+ if (nic->priv)
|
|
+ free(nic->priv);
|
|
+ nic->priv = NULL;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2x_alloc() - Used to allocate a bnx2x structure
|
|
+ */
|
|
+static bnx2x_t *bnx2x_alloc(nic_t * nic)
|
|
+{
|
|
+ bnx2x_t *bp = malloc(sizeof(*bp));
|
|
+
|
|
+ if (bp == NULL) {
|
|
+ LOG_ERR(PFX "%s: Could not allocate BNX2X space",
|
|
+ nic->log_name);
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ /* Clear out the CNIC contents */
|
|
+ memset(bp, 0, sizeof(*bp));
|
|
+
|
|
+ bp->bar0_fd = INVALID_FD;
|
|
+ bp->bar2_fd = INVALID_FD;
|
|
+
|
|
+ bp->parent = nic;
|
|
+ nic->priv = (void *)bp;
|
|
+
|
|
+ bnx2x_set_drv_version_unknown(bp);
|
|
+
|
|
+ return bp;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2x_open() - This will initialize all the hardware resources underneath
|
|
+ * a struct cnic_uio device
|
|
+ * @param dev - The struct cnic_uio device to attach the hardware with
|
|
+ * @return 0 on success, on failure a errno will be returned
|
|
+ */
|
|
+static int bnx2x_open(nic_t * nic)
|
|
+{
|
|
+ bnx2x_t *bp;
|
|
+ struct stat uio_stat;
|
|
+ int i, rc;
|
|
+ __u32 val;
|
|
+ int count;
|
|
+ char sysfs_resc_path[80];
|
|
+ uint32_t bus;
|
|
+ uint32_t slot;
|
|
+ uint32_t func;
|
|
+
|
|
+ /* Sanity Check: validate the parameters */
|
|
+ if (nic == NULL) {
|
|
+ LOG_ERR(PFX "nic == NULL");
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ if ((nic->priv) != NULL &&
|
|
+ (((bnx2x_t *) (nic->priv))->flags & BNX2X_OPENED)) {
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
+ bp = bnx2x_alloc(nic);
|
|
+ if (bp == NULL)
|
|
+ return -ENOMEM;
|
|
+
|
|
+ if (!bnx2x_is_drv_version_unknown(&bnx2x_version))
|
|
+ bnx2x_get_drv_version(bp);
|
|
+ else {
|
|
+ bnx2x_version.major = bp->version.major;
|
|
+ bnx2x_version.minor = bp->version.minor;
|
|
+ bnx2x_version.sub_minor = bp->version.sub_minor;
|
|
+ }
|
|
+
|
|
+ count = 0;
|
|
+ while ((nic->fd < 0) && count < 15) {
|
|
+ /* udev might not have created the file yet */
|
|
+ sleep(1);
|
|
+
|
|
+ nic->fd = open(nic->uio_device_name, O_RDWR | O_NONBLOCK);
|
|
+ if (nic->fd != INVALID_FD) {
|
|
+ LOG_ERR(PFX "%s: uio device has been brought up "
|
|
+ "via pid: %d on fd: %d",
|
|
+ nic->uio_device_name, getpid(), nic->fd);
|
|
+
|
|
+ rc = bnx2x_uio_verify(nic);
|
|
+ if (rc != 0)
|
|
+ continue;
|
|
+
|
|
+ break;
|
|
+ } else {
|
|
+ LOG_WARN(PFX "%s: Could not open device: %s, [%s]",
|
|
+ nic->log_name, nic->uio_device_name,
|
|
+ strerror(errno));
|
|
+
|
|
+ manually_trigger_uio_event(nic, nic->uio_minor);
|
|
+
|
|
+ /* udev might not have created the file yet */
|
|
+ sleep(1);
|
|
+
|
|
+ count++;
|
|
+ }
|
|
+ }
|
|
+ if (fstat(nic->fd, &uio_stat) < 0) {
|
|
+ LOG_ERR(PFX "%s: Could not fstat device", nic->log_name);
|
|
+ rc = -ENODEV;
|
|
+ goto open_error;
|
|
+ }
|
|
+ nic->uio_minor = minor(uio_stat.st_rdev);
|
|
+
|
|
+ cnic_get_sysfs_pci_resource_path(nic, 0, sysfs_resc_path, 80);
|
|
+ bp->bar0_fd = open(sysfs_resc_path, O_RDWR | O_SYNC);
|
|
+ if (bp->bar0_fd < 0) {
|
|
+ LOG_ERR(PFX "%s: Could not open %s", nic->log_name,
|
|
+ sysfs_resc_path);
|
|
+ rc = -ENODEV;
|
|
+ goto open_error;
|
|
+ }
|
|
+
|
|
+ bp->reg = mmap(NULL, BNX2X_BAR_SIZE, PROT_READ | PROT_WRITE,
|
|
+ MAP_SHARED, bp->bar0_fd, (off_t) 0);
|
|
+
|
|
+ if (bp->reg == MAP_FAILED) {
|
|
+ LOG_INFO(PFX "%s: Couldn't mmap BAR registers: %s",
|
|
+ nic->log_name, strerror(errno));
|
|
+ bp->reg = NULL;
|
|
+ rc = errno;
|
|
+ goto open_error;
|
|
+ }
|
|
+
|
|
+ msync(bp->reg, BNX2X_BAR_SIZE, MS_SYNC);
|
|
+
|
|
+ cnic_get_sysfs_pci_resource_path(nic, 2, sysfs_resc_path, 80);
|
|
+ bp->bar2_fd = open(sysfs_resc_path, O_RDWR | O_SYNC);
|
|
+ if (bp->bar2_fd < 0) {
|
|
+ LOG_ERR(PFX "%s: Could not open %s", nic->log_name,
|
|
+ sysfs_resc_path);
|
|
+ rc = -ENODEV;
|
|
+ goto open_error;
|
|
+ }
|
|
+
|
|
+ bp->reg2 = mmap(NULL, BNX2X_BAR2_SIZE, PROT_READ | PROT_WRITE,
|
|
+ MAP_SHARED, bp->bar2_fd, (off_t) 0);
|
|
+
|
|
+ if (bp->reg2 == MAP_FAILED) {
|
|
+ LOG_INFO(PFX "%s: Couldn't mmap BAR2 registers: %s",
|
|
+ nic->log_name, strerror(errno));
|
|
+ bp->reg2 = NULL;
|
|
+ rc = errno;
|
|
+ goto open_error;
|
|
+ }
|
|
+
|
|
+ /* TODO: hardcoded with the cnic driver */
|
|
+ bp->rx_ring_size = 15;
|
|
+ bp->rx_buffer_size = 0x400;
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: using rx ring size: %d, rx buffer size: %d",
|
|
+ nic->log_name, bp->rx_ring_size, bp->rx_buffer_size);
|
|
+
|
|
+ /* Determine the number of UIO events that have already occured */
|
|
+ rc = detemine_initial_uio_events(nic, &nic->intr_count);
|
|
+ if (rc != 0) {
|
|
+ LOG_ERR("Could not determine the number ofinitial UIO events");
|
|
+ nic->intr_count = 0;
|
|
+ }
|
|
+
|
|
+ /* Allocate space for rx pkt ring */
|
|
+ bp->rx_pkt_ring = malloc(sizeof(void *) * bp->rx_ring_size);
|
|
+ if (bp->rx_pkt_ring == NULL) {
|
|
+ LOG_ERR(PFX "%s: Could not allocate space for rx_pkt_ring",
|
|
+ nic->log_name);
|
|
+ rc = errno;
|
|
+ goto open_error;
|
|
+ }
|
|
+
|
|
+ if (bnx2x_is_ver60_plus(bp))
|
|
+ bp->status_blk_size = sizeof(struct host_sp_status_block);
|
|
+ else if (bnx2x_is_ver52(bp))
|
|
+ bp->status_blk_size = sizeof(struct host_def_status_block);
|
|
+ else {
|
|
+ LOG_INFO(PFX "%s: Unsupported bnx2x driver [%d.%d]",
|
|
+ nic->log_name, bp->version.major, bp->version.minor);
|
|
+
|
|
+ rc = -ENOTSUP;
|
|
+ goto open_error;
|
|
+ }
|
|
+
|
|
+ bp->status_blk.def = mmap(NULL, bp->status_blk_size,
|
|
+ PROT_READ | PROT_WRITE, MAP_SHARED,
|
|
+ nic->fd, (off_t) getpagesize());
|
|
+ if (bp->status_blk.def == MAP_FAILED) {
|
|
+ LOG_INFO(PFX "%s: Could not mmap status block: %s",
|
|
+ nic->log_name, strerror(errno));
|
|
+ bp->status_blk.def = NULL;
|
|
+ rc = errno;
|
|
+ goto open_error;
|
|
+ }
|
|
+
|
|
+ bp->tx_ring = mmap(NULL, 4 * getpagesize(),
|
|
+ PROT_READ | PROT_WRITE,
|
|
+ MAP_SHARED | MAP_LOCKED,
|
|
+ nic->fd, (off_t) 2 * getpagesize());
|
|
+ if (bp->tx_ring == MAP_FAILED) {
|
|
+ LOG_INFO(PFX "%s: Could not mmap tx ring: %s",
|
|
+ nic->log_name, strerror(errno));
|
|
+ bp->tx_ring = NULL;
|
|
+ rc = errno;
|
|
+ goto open_error;
|
|
+ }
|
|
+
|
|
+ bp->rx_comp_ring.cqe = (union eth_rx_cqe *)
|
|
+ (((__u8 *) bp->tx_ring) + 2 * getpagesize());
|
|
+
|
|
+ bp->bufs = mmap(NULL, (bp->rx_ring_size + 1) * bp->rx_buffer_size,
|
|
+ PROT_READ | PROT_WRITE,
|
|
+ MAP_SHARED | MAP_LOCKED,
|
|
+ nic->fd, (off_t) 3 * getpagesize());
|
|
+ if (bp->bufs == MAP_FAILED) {
|
|
+ LOG_INFO(PFX "%s: Could not mmap buffers: %s",
|
|
+ nic->log_name, strerror(errno));
|
|
+ bp->bufs = NULL;
|
|
+ rc = errno;
|
|
+ goto open_error;
|
|
+ }
|
|
+
|
|
+ bp->chip_id = bnx2x_get_chip_id(bp);
|
|
+ LOG_DEBUG(PFX "Chip ID: %x", bp->chip_id);
|
|
+
|
|
+ rc = get_bus_slot_func_num(nic, &bus, &slot, &func);
|
|
+ if (rc != 0) {
|
|
+ LOG_INFO(PFX "%s: Couldn't determine bus:slot.func",
|
|
+ nic->log_name);
|
|
+ goto open_error;
|
|
+ }
|
|
+
|
|
+ bp->func = func;
|
|
+ bp->port = bp->func % PORT_MAX;
|
|
+
|
|
+ if (CHIP_IS_E2_PLUS(bp)) {
|
|
+ __u32 val = bnx2x_rd32(bp, MISC_REG_PORT4MODE_EN_OVWR);
|
|
+ if (!(val & 1))
|
|
+ val = bnx2x_rd32(bp, MISC_REG_PORT4MODE_EN);
|
|
+ else
|
|
+ val = (val >> 1) & 1;
|
|
+
|
|
+ if (val)
|
|
+ bp->pfid = func >> 1;
|
|
+ else
|
|
+ bp->pfid = func & 0x6;
|
|
+ } else {
|
|
+ bp->pfid = func;
|
|
+ }
|
|
+
|
|
+ if (bnx2x_is_ver60_plus(bp))
|
|
+ bp->port = bp->pfid & 1;
|
|
+
|
|
+ bp->cid = 17;
|
|
+ bp->client_id = 17;
|
|
+
|
|
+ if (bnx2x_is_ver60_plus(bp)) {
|
|
+ struct client_init_general_data *data = bp->bufs;
|
|
+
|
|
+ bp->client_id = data->client_id;
|
|
+ if (data->reserved0)
|
|
+ bp->cid = data->reserved0;
|
|
+ }
|
|
+
|
|
+ LOG_INFO(PFX "%s: func 0x%x, pfid 0x%x, client_id 0x%x, cid 0x%x",
|
|
+ nic->log_name, bp->func, bp->pfid, bp->client_id, bp->cid);
|
|
+
|
|
+ if (CHIP_IS_E1(bp))
|
|
+ bp->iro = e1_iro;
|
|
+ else if (CHIP_IS_E1H(bp))
|
|
+ bp->iro = e1h_iro;
|
|
+ else if (CHIP_IS_E2_PLUS(bp))
|
|
+ bp->iro = e2_iro;
|
|
+
|
|
+ if (bnx2x_is_ver60_plus(bp)) {
|
|
+ __u32 cl_qzone_id = BNX2X_CL_QZONE_ID(bp, bp->client_id);
|
|
+
|
|
+ bp->iro_idx = 0;
|
|
+ if (bp->version.minor >= 64) {
|
|
+ bp->iro_idx = 1;
|
|
+ cl_qzone_id = BNX2X_CL_QZONE_ID_64(bp, bp->client_id);
|
|
+ }
|
|
+
|
|
+ bp->rx_prod_io = BAR_USTRORM_INTMEM +
|
|
+ (CHIP_IS_E2_PLUS(bp) ?
|
|
+ USTORM_RX_PRODS_E2_OFFSET(cl_qzone_id) :
|
|
+ USTORM_RX_PRODS_E1X_OFFSET(bp->port, bp->client_id));
|
|
+
|
|
+ bp->tx_doorbell = bp->cid * 0x80 + 0x40;
|
|
+
|
|
+ bp->get_rx_cons = bnx2x_get_rx_60;
|
|
+ bp->get_tx_cons = bnx2x_get_tx_60;
|
|
+ bp->tx_vlan_tag_bit = ETH_TX_BD_FLAGS_VLAN_TAG_T6X;
|
|
+ } else {
|
|
+ bp->rx_prod_io = BAR_USTRORM_INTMEM +
|
|
+ USTORM_RX_PRODS_OFFSET(bp->port, bp->client_id);
|
|
+
|
|
+ bp->tx_doorbell = bp->cid * getpagesize() + 0x40;
|
|
+
|
|
+ bp->get_rx_cons = bnx2x_get_rx;
|
|
+ bp->get_tx_cons = bnx2x_get_tx;
|
|
+ bp->tx_vlan_tag_bit = ETH_TX_BD_FLAGS_VLAN_TAG_T5X;
|
|
+ }
|
|
+
|
|
+ bp->tx_cons = 0;
|
|
+ bp->tx_prod = 0;
|
|
+ bp->tx_bd_prod = 0;
|
|
+ bp->tx_pkt = bp->bufs;
|
|
+
|
|
+ bp->rx_index = 0;
|
|
+ bp->rx_cons = 0;
|
|
+ bp->rx_bd_cons = 0;
|
|
+ bp->rx_prod = 127;
|
|
+ bp->rx_bd_prod = bp->rx_ring_size;
|
|
+
|
|
+ for (i = 0; i < bp->rx_ring_size; i++) {
|
|
+ void *ptr = bp->bufs + (bp->rx_buffer_size * (i + 1));
|
|
+
|
|
+ bp->rx_pkt_ring[i] = ptr;
|
|
+ }
|
|
+
|
|
+ val = bnx2x_rd32(bp, MISC_REG_SHARED_MEM_ADDR);
|
|
+
|
|
+ bp->shmem_base = val;
|
|
+ val = bnx2x_rd32(bp, bp->shmem_base + SHMEM_ISCSI_MAC_UPPER(bp));
|
|
+ nic->mac_addr[0] = (__u8) (val >> 8);
|
|
+ nic->mac_addr[1] = (__u8) val;
|
|
+ val = bnx2x_rd32(bp, bp->shmem_base + SHMEM_ISCSI_MAC_LOWER(bp));
|
|
+ nic->mac_addr[2] = (__u8) (val >> 24);
|
|
+ nic->mac_addr[3] = (__u8) (val >> 16);
|
|
+ nic->mac_addr[4] = (__u8) (val >> 8);
|
|
+ nic->mac_addr[5] = (__u8) val;
|
|
+
|
|
+ if (bnx2x_is_ver60_plus(bp) && CHIP_IS_E2_PLUS(bp)) {
|
|
+ __u32 mf_cfg_addr = 0;
|
|
+ __u32 mac_offset;
|
|
+ __u8 mac[6];
|
|
+
|
|
+ val = bnx2x_rd32(bp, (BNX2X_PATH(bp) ? MISC_REG_GENERIC_CR_1 :
|
|
+ MISC_REG_GENERIC_CR_0));
|
|
+ bp->shmem_base2 = val;
|
|
+ if (bp->shmem_base2) {
|
|
+ /* size */
|
|
+ val = bnx2x_rd32(bp, bp->shmem_base2);
|
|
+
|
|
+ if (val > 0x10)
|
|
+ mf_cfg_addr =
|
|
+ bnx2x_rd32(bp, bp->shmem_base2 + 0x10);
|
|
+ }
|
|
+
|
|
+ if (!mf_cfg_addr)
|
|
+ mf_cfg_addr = bp->shmem_base + 0x7e4;
|
|
+
|
|
+ /* shared_feat_cfg.config */
|
|
+ val = bnx2x_rd32(bp, bp->shmem_base + 0x354);
|
|
+ /* SI mode */
|
|
+ if ((val & 0x700) == 0x300) {
|
|
+ mac_offset = 0xe4 + (bp->func * 0x28) + 4;
|
|
+ val = bnx2x_rd32(bp, mf_cfg_addr + mac_offset);
|
|
+ mac[0] = (__u8) (val >> 8);
|
|
+ mac[1] = (__u8) val;
|
|
+ mac_offset += 4;
|
|
+ val = bnx2x_rd32(bp, mf_cfg_addr + mac_offset);
|
|
+ mac[2] = (__u8) (val >> 24);
|
|
+ mac[3] = (__u8) (val >> 16);
|
|
+ mac[4] = (__u8) (val >> 8);
|
|
+ mac[5] = (__u8) val;
|
|
+
|
|
+ if (mac[0] != 0xff) {
|
|
+ memcpy(nic->mac_addr, mac, 6);
|
|
+ } else if (bp->func > 1) {
|
|
+ LOG_INFO(PFX "%s: Invalid mac address: "
|
|
+ "%02x:%02x:%02x:%02x:%02x:%02x, abort",
|
|
+ nic->log_name,
|
|
+ mac[0], mac[1], mac[2],
|
|
+ mac[3], mac[4], mac[5]);
|
|
+ rc = -ENOTSUP;
|
|
+ goto open_error;
|
|
+ }
|
|
+ } else if ((val & 0x700) == 0) {
|
|
+ __u32 proto_offset = 0x24 + (bp->func * 0x18);
|
|
+ __u32 ovtag_offset = proto_offset + 0xc;
|
|
+
|
|
+ rc = -ENOTSUP;
|
|
+ val = bnx2x_rd32(bp, mf_cfg_addr + ovtag_offset);
|
|
+ val &= 0xffff;
|
|
+ /* SD mode, check for valid outer VLAN */
|
|
+ if (val == 0xffff)
|
|
+ goto open_error;
|
|
+
|
|
+ /* Check for iSCSI protocol */
|
|
+ val = bnx2x_rd32(bp, mf_cfg_addr + proto_offset);
|
|
+ if ((val & 6) != 6)
|
|
+ goto open_error;
|
|
+
|
|
+ mac_offset = proto_offset + 0x4;
|
|
+ val = bnx2x_rd32(bp, mf_cfg_addr + mac_offset);
|
|
+ mac[0] = (__u8) (val >> 8);
|
|
+ mac[1] = (__u8) val;
|
|
+ mac_offset += 4;
|
|
+ val = bnx2x_rd32(bp, mf_cfg_addr + mac_offset);
|
|
+ mac[2] = (__u8) (val >> 24);
|
|
+ mac[3] = (__u8) (val >> 16);
|
|
+ mac[4] = (__u8) (val >> 8);
|
|
+ mac[5] = (__u8) val;
|
|
+ memcpy(nic->mac_addr, mac, 6);
|
|
+
|
|
+ }
|
|
+ }
|
|
+
|
|
+ LOG_INFO(PFX "%s: Using mac address: %02x:%02x:%02x:%02x:%02x:%02x",
|
|
+ nic->log_name,
|
|
+ nic->mac_addr[0], nic->mac_addr[1], nic->mac_addr[2],
|
|
+ nic->mac_addr[3], nic->mac_addr[4], nic->mac_addr[5]);
|
|
+
|
|
+ /* Determine if Hardware VLAN tag stripping is enabled or not */
|
|
+ if (CNIC_VLAN_STRIPPING_ENABLED == bnx2x_strip_vlan_enabled(bp)) {
|
|
+ nic->flags |= NIC_VLAN_STRIP_ENABLED;
|
|
+ }
|
|
+
|
|
+ msync(bp->reg, BNX2X_BAR_SIZE, MS_SYNC);
|
|
+
|
|
+ LOG_INFO("%s: bnx2x initialized", nic->log_name);
|
|
+
|
|
+ bnx2x_update_rx_prod(bp);
|
|
+ bp->flags |= BNX2X_OPENED;
|
|
+
|
|
+ return 0;
|
|
+
|
|
+open_error:
|
|
+ if (bp->tx_ring) {
|
|
+ munmap(bp->tx_ring, 4 * getpagesize());
|
|
+ bp->tx_ring = NULL;
|
|
+ }
|
|
+
|
|
+ if (bp->status_blk.def) {
|
|
+ munmap(bp->status_blk.def, bp->status_blk_size);
|
|
+ bp->status_blk.def = NULL;
|
|
+ }
|
|
+
|
|
+ if (bp->reg) {
|
|
+ munmap(bp->reg, BNX2X_BAR_SIZE);
|
|
+ bp->reg = NULL;
|
|
+ }
|
|
+
|
|
+ if (bp->reg2) {
|
|
+ munmap(bp->reg2, BNX2X_BAR2_SIZE);
|
|
+ bp->reg2 = NULL;
|
|
+ }
|
|
+
|
|
+ if (bp->rx_pkt_ring) {
|
|
+ free(bp->rx_pkt_ring);
|
|
+ bp->rx_pkt_ring = NULL;
|
|
+ }
|
|
+
|
|
+ if (bp->bar2_fd != INVALID_FD) {
|
|
+ close(bp->bar2_fd);
|
|
+ bp->bar2_fd = INVALID_FD;
|
|
+ }
|
|
+
|
|
+ if (bp->bar0_fd != INVALID_FD) {
|
|
+ close(bp->bar0_fd);
|
|
+ bp->bar0_fd = INVALID_FD;
|
|
+ }
|
|
+ bnx2x_free(nic);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2x_uio_close_resources() - Used to free resource for the NIC/CNIC
|
|
+ * @param nic - NIC device to free resource
|
|
+ * @param graceful - whether to wait to close gracefully
|
|
+ * @return 0 on success, <0 on failure
|
|
+ */
|
|
+static int bnx2x_uio_close_resources(nic_t * nic, NIC_SHUTDOWN_T graceful)
|
|
+{
|
|
+ bnx2x_t *bp = (bnx2x_t *) nic->priv;
|
|
+ int rc = 0;
|
|
+
|
|
+ /* Check if there is an assoicated bnx2x device */
|
|
+ if (bp == NULL) {
|
|
+ LOG_WARN(PFX "%s: when closing resources there is "
|
|
+ "no assoicated bnx2x", nic->log_name);
|
|
+ return -EIO;
|
|
+ }
|
|
+
|
|
+ /* Clean up allocated memory */
|
|
+
|
|
+ if (bp->rx_pkt_ring != NULL) {
|
|
+ free(bp->rx_pkt_ring);
|
|
+ bp->rx_pkt_ring = NULL;
|
|
+ }
|
|
+
|
|
+ /* Clean up mapped registers */
|
|
+ if (bp->bufs != NULL) {
|
|
+ rc = munmap(bp->bufs,
|
|
+ (bp->rx_ring_size + 1) * bp->rx_buffer_size);
|
|
+ if (rc != 0)
|
|
+ LOG_WARN(PFX "%s: Couldn't unmap bufs", nic->log_name);
|
|
+ bp->bufs = NULL;
|
|
+ }
|
|
+
|
|
+ if (bp->tx_ring != NULL) {
|
|
+ rc = munmap(bp->tx_ring, 4 * getpagesize());
|
|
+ if (rc != 0)
|
|
+ LOG_WARN(PFX "%s: Couldn't unmap tx_rings",
|
|
+ nic->log_name);
|
|
+ bp->tx_ring = NULL;
|
|
+ }
|
|
+
|
|
+ if (bp->status_blk.def != NULL) {
|
|
+ rc = munmap(bp->status_blk.def, bp->status_blk_size);
|
|
+ if (rc != 0)
|
|
+ LOG_WARN(PFX "%s: Couldn't unmap status block",
|
|
+ nic->log_name);
|
|
+ bp->status_blk.def = NULL;
|
|
+ }
|
|
+
|
|
+ if (bp->reg != NULL) {
|
|
+ rc = munmap(bp->reg, BNX2X_BAR_SIZE);
|
|
+ if (rc != 0)
|
|
+ LOG_WARN(PFX "%s: Couldn't unmap regs", nic->log_name);
|
|
+ bp->reg = NULL;
|
|
+ }
|
|
+
|
|
+ if (bp->reg2 != NULL) {
|
|
+ rc = munmap(bp->reg2, BNX2X_BAR2_SIZE);
|
|
+ if (rc != 0)
|
|
+ LOG_WARN(PFX "%s: Couldn't unmap regs", nic->log_name);
|
|
+ bp->reg2 = NULL;
|
|
+ }
|
|
+
|
|
+ if (bp->bar2_fd != INVALID_FD) {
|
|
+ close(bp->bar2_fd);
|
|
+ bp->bar2_fd = INVALID_FD;
|
|
+ }
|
|
+
|
|
+ if (bp->bar0_fd != INVALID_FD) {
|
|
+ close(bp->bar0_fd);
|
|
+ bp->bar0_fd = INVALID_FD;
|
|
+ }
|
|
+
|
|
+ if (nic->fd != INVALID_FD) {
|
|
+ rc = close(nic->fd);
|
|
+ if (rc != 0) {
|
|
+ LOG_WARN(PFX
|
|
+ "%s: Couldn't close uio file descriptor: %d",
|
|
+ nic->log_name, nic->fd);
|
|
+ } else {
|
|
+ LOG_DEBUG(PFX "%s: Closed uio file descriptor: %d",
|
|
+ nic->log_name, nic->fd);
|
|
+ }
|
|
+
|
|
+ nic->fd = INVALID_FD;
|
|
+ } else {
|
|
+ LOG_WARN(PFX "%s: Invalid uio file descriptor: %d",
|
|
+ nic->log_name, nic->fd);
|
|
+ }
|
|
+
|
|
+ bnx2x_set_drv_version_unknown(bp);
|
|
+
|
|
+ LOG_INFO(PFX "%s: Closed all resources", nic->log_name);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2x_close() - Used to close the NIC device
|
|
+ * @param nic - NIC device to close
|
|
+ * @param graceful - whether to wait to close gracefully
|
|
+ * @return 0 if successful, <0 if there is an error
|
|
+ */
|
|
+static int bnx2x_close(nic_t * nic, NIC_SHUTDOWN_T graceful)
|
|
+{
|
|
+ /* Sanity Check: validate the parameters */
|
|
+ if (nic == NULL || nic->priv == NULL) {
|
|
+ LOG_ERR(PFX "bnx2x_close(): nic == %p, bp == %p", nic,
|
|
+ nic->priv);
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ LOG_INFO(PFX "Closing NIC device: %s", nic->log_name);
|
|
+
|
|
+ bnx2x_uio_close_resources(nic, graceful);
|
|
+ bnx2x_free(nic);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static void bnx2x_prepare_xmit_packet(nic_t * nic,
|
|
+ nic_interface_t * nic_iface,
|
|
+ struct packet *pkt)
|
|
+{
|
|
+ bnx2x_t *bp = (bnx2x_t *) nic->priv;
|
|
+ struct uip_vlan_eth_hdr *eth_vlan = (struct uip_vlan_eth_hdr *)pkt->buf;
|
|
+ struct uip_eth_hdr *eth = (struct uip_eth_hdr *)bp->tx_pkt;
|
|
+
|
|
+ if (eth_vlan->tpid == htons(UIP_ETHTYPE_8021Q)) {
|
|
+ memcpy(bp->tx_pkt, pkt->buf, sizeof(struct uip_eth_hdr));
|
|
+ eth->type = eth_vlan->type;
|
|
+ pkt->buf_size -= (sizeof(struct uip_vlan_eth_hdr) -
|
|
+ sizeof(struct uip_eth_hdr));
|
|
+ memcpy(bp->tx_pkt + sizeof(struct uip_eth_hdr),
|
|
+ pkt->buf + sizeof(struct uip_vlan_eth_hdr),
|
|
+ pkt->buf_size - sizeof(struct uip_eth_hdr));
|
|
+ } else
|
|
+ memcpy(bp->tx_pkt, pkt->buf, pkt->buf_size);
|
|
+
|
|
+ msync(bp->tx_pkt, pkt->buf_size, MS_SYNC);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2x_get_tx_pkt() - This function is used to a TX packet from the NIC
|
|
+ * @param nic - The NIC device to send the packet
|
|
+ */
|
|
+void *bnx2x_get_tx_pkt(nic_t * nic)
|
|
+{
|
|
+ bnx2x_t *bp = (bnx2x_t *) nic->priv;
|
|
+ return bp->tx_pkt;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2x_start_xmit() - This function is used to send a packet of data
|
|
+ * @param nic - The NIC device to send the packet
|
|
+ * @param len - the length of the TX packet
|
|
+ *
|
|
+ */
|
|
+void bnx2x_start_xmit(nic_t * nic, size_t len, u16_t vlan_id)
|
|
+{
|
|
+ bnx2x_t *bp = (bnx2x_t *) nic->priv;
|
|
+ uint16_t ring_prod;
|
|
+ struct eth_tx_start_bd *txbd;
|
|
+ struct eth_tx_bd *txbd2;
|
|
+ struct eth_rx_bd *rx_bd;
|
|
+ rx_bd = (struct eth_rx_bd *)(((__u8 *) bp->tx_ring) + getpagesize());
|
|
+
|
|
+ if ((rx_bd->addr_hi == 0) && (rx_bd->addr_lo == 0)) {
|
|
+ LOG_DEBUG(PFX "%s: trying to transmit when device is closed",
|
|
+ nic->log_name);
|
|
+ pthread_mutex_unlock(&nic->xmit_mutex);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ ring_prod = BNX2X_TX_RING_IDX(bp->tx_bd_prod);
|
|
+ txbd = &bp->tx_ring[ring_prod];
|
|
+
|
|
+ BNX2X_SET_TX_VLAN(bp, txbd, vlan_id);
|
|
+
|
|
+ bp->tx_prod++;
|
|
+ bp->tx_bd_prod = BNX2X_NEXT_TX_BD(bp->tx_bd_prod);
|
|
+ bp->tx_bd_prod = BNX2X_NEXT_TX_BD(bp->tx_bd_prod);
|
|
+
|
|
+ ring_prod = BNX2X_TX_RING_IDX(bp->tx_bd_prod);
|
|
+ txbd2 = (struct eth_tx_bd *)&bp->tx_ring[ring_prod];
|
|
+
|
|
+ txbd2->nbytes = len - 0x10;
|
|
+ txbd2->total_pkt_bytes = len;
|
|
+
|
|
+ bp->tx_bd_prod = BNX2X_NEXT_TX_BD(bp->tx_bd_prod);
|
|
+
|
|
+ barrier();
|
|
+ if (nl_process_if_down == 0) {
|
|
+ bnx2x_doorbell(bp, bp->tx_doorbell, 0x02 |
|
|
+ (bp->tx_bd_prod << 16));
|
|
+ bnx2x_flush_doorbell(bp, bp->tx_doorbell);
|
|
+ } else {
|
|
+ /* If the doorbell is not rung, the packet will not
|
|
+ get sent. Hence, the xmit_mutex lock will not
|
|
+ get freed.
|
|
+ */
|
|
+ pthread_mutex_unlock(&nic->xmit_mutex);
|
|
+ }
|
|
+ LOG_DEBUG(PFX "%s: sent %d bytes using bp->tx_prod: %d",
|
|
+ nic->log_name, len, bp->tx_prod);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2x_write() - Used to write the data to the hardware
|
|
+ * @param nic - NIC hardware to read from
|
|
+ * @param pkt - The packet which will hold the data to be sent on the wire
|
|
+ * @return 0 if successful, <0 if failed
|
|
+ */
|
|
+int bnx2x_write(nic_t * nic, nic_interface_t * nic_iface, packet_t * pkt)
|
|
+{
|
|
+ bnx2x_t *bp = (bnx2x_t *) nic->priv;
|
|
+ struct uip_stack *uip = &nic_iface->ustack;
|
|
+ int i = 0;
|
|
+
|
|
+ /* Sanity Check: validate the parameters */
|
|
+ if (nic == NULL || nic_iface == NULL || pkt == NULL) {
|
|
+ LOG_ERR(PFX "%s: bnx2x_write() nic == 0x%p || "
|
|
+ " nic_iface == 0x%p || "
|
|
+ " pkt == 0x%x", nic, nic_iface, pkt);
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ if (pkt->buf_size == 0) {
|
|
+ LOG_ERR(PFX "%s: Trying to transmitted 0 sized packet",
|
|
+ nic->log_name);
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ /* Try to wait for a TX completion */
|
|
+ for (i = 0; i < 15; i++) {
|
|
+ struct timespec sleep_req = {.tv_sec = 0,.tv_nsec = 5000000 },
|
|
+ sleep_rem;
|
|
+
|
|
+ if (bnx2x_clear_tx_intr(nic) == 0)
|
|
+ break;
|
|
+
|
|
+ nanosleep(&sleep_req, &sleep_rem);
|
|
+ }
|
|
+
|
|
+ if (pthread_mutex_trylock(&nic->xmit_mutex) != 0) {
|
|
+ LOG_DEBUG(PFX "%s: Dropped previous transmitted packet",
|
|
+ nic->log_name);
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ bnx2x_prepare_xmit_packet(nic, nic_iface, pkt);
|
|
+ bnx2x_start_xmit(nic, pkt->buf_size, nic_iface->vlan_id);
|
|
+
|
|
+ /* bump the cnic dev send statistics */
|
|
+ nic->stats.tx.packets++;
|
|
+ nic->stats.tx.bytes += uip->uip_len;
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: transmitted %d bytes "
|
|
+ "dev->tx_cons: %d, dev->tx_prod: %d, dev->tx_bd_prod:%d",
|
|
+ nic->log_name, pkt->buf_size,
|
|
+ bp->tx_cons, bp->tx_prod, bp->tx_bd_prod);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static inline int bnx2x_get_rx_pad(bnx2x_t * bp, union eth_rx_cqe *cqe)
|
|
+{
|
|
+ int pad = 0;
|
|
+
|
|
+ if (bnx2x_is_ver70(bp))
|
|
+ pad = ((union eth_rx_cqe_70 *)cqe)->fast_path_cqe_70. \
|
|
+ placement_offset;
|
|
+ else if (bnx2x_is_ver60(bp)) {
|
|
+ if (bp->version.minor >= 64)
|
|
+ pad = cqe->fast_path_cqe_64.placement_offset;
|
|
+ else
|
|
+ pad = cqe->fast_path_cqe.placement_offset;
|
|
+ }
|
|
+ return pad;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * bnx2x_read() - Used to read the data from the hardware
|
|
+ * @param nic - NIC hardware to read from
|
|
+ * @param pkt - The packet which will hold the data
|
|
+ * @return 0 if successful, <0 if failed
|
|
+ */
|
|
+static int bnx2x_read(nic_t * nic, packet_t * pkt)
|
|
+{
|
|
+ bnx2x_t *bp = (bnx2x_t *) nic->priv;
|
|
+ int rc = 0;
|
|
+ uint16_t hw_cons, sw_cons, bd_cons, bd_prod;
|
|
+
|
|
+ /* Sanity Check: validate the parameters */
|
|
+ if (nic == NULL || pkt == NULL) {
|
|
+ LOG_ERR(PFX "%s: bnx2x_read() nic == 0x%p || "
|
|
+ " pkt == 0x%x", nic, pkt);
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ hw_cons = bp->get_rx_cons(bp);
|
|
+ sw_cons = bp->rx_cons;
|
|
+ bd_cons = BNX2X_RX_BD(bp->rx_bd_cons);
|
|
+ bd_prod = BNX2X_RX_BD(bp->rx_bd_prod);
|
|
+
|
|
+ if (sw_cons != hw_cons) {
|
|
+ uint16_t comp_ring_index = sw_cons & BNX2X_MAX_RCQ_DESC_CNT(bp);
|
|
+ uint8_t ring_index;
|
|
+ union eth_rx_cqe *cqe;
|
|
+ __u8 cqe_fp_flags;
|
|
+ void *rx_pkt;
|
|
+ int len, pad, cqe_size;
|
|
+ rc = 1;
|
|
+
|
|
+ if (bnx2x_is_ver70(bp)) {
|
|
+ cqe = (union eth_rx_cqe *)
|
|
+ &bp->rx_comp_ring.cqe70[comp_ring_index];
|
|
+ cqe_size = sizeof(union eth_rx_cqe_70);
|
|
+ } else {
|
|
+ cqe = &bp->rx_comp_ring.cqe[comp_ring_index];
|
|
+ cqe_size = sizeof(union eth_rx_cqe);
|
|
+ }
|
|
+ cqe_fp_flags = cqe->fast_path_cqe.type_error_flags;
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: clearing rx interrupt: %d %d",
|
|
+ nic->log_name, sw_cons, hw_cons);
|
|
+
|
|
+ msync(cqe, cqe_size, MS_SYNC);
|
|
+
|
|
+ if (!(cqe_fp_flags & ETH_FAST_PATH_RX_CQE_TYPE)) {
|
|
+ ring_index = bd_cons % 15;
|
|
+ len = cqe->fast_path_cqe.pkt_len;
|
|
+ pad = bnx2x_get_rx_pad(bp, cqe);
|
|
+ rx_pkt = bp->rx_pkt_ring[ring_index] + pad;
|
|
+
|
|
+ /* Doto query MTU size of physical device */
|
|
+ /* Ensure len is valid */
|
|
+ if (len > pkt->max_buf_size)
|
|
+ LOG_DEBUG(PFX "%s: bad BD length: %d",
|
|
+ nic->log_name, len);
|
|
+
|
|
+ if (len > 0) {
|
|
+ msync(rx_pkt, len, MS_SYNC);
|
|
+ /* Copy the data */
|
|
+ memcpy(pkt->buf, rx_pkt, len);
|
|
+ pkt->buf_size = len;
|
|
+
|
|
+ /* Properly set the packet flags */
|
|
+ /* check if there is VLAN tagging */
|
|
+ if (cqe->fast_path_cqe.vlan_tag != 0) {
|
|
+ pkt->vlan_tag =
|
|
+ cqe->fast_path_cqe.vlan_tag;
|
|
+ pkt->flags |= VLAN_TAGGED;
|
|
+ } else {
|
|
+ pkt->vlan_tag = 0;
|
|
+ }
|
|
+
|
|
+ LOG_DEBUG(PFX
|
|
+ "%s: processing packet length: %d",
|
|
+ nic->log_name, len);
|
|
+
|
|
+ /* bump the cnic dev recv statistics */
|
|
+ nic->stats.rx.packets++;
|
|
+ nic->stats.rx.bytes += pkt->buf_size;
|
|
+ }
|
|
+
|
|
+ bd_cons = BNX2X_NEXT_RX_IDX(bd_cons);
|
|
+ bd_prod = BNX2X_NEXT_RX_IDX(bd_prod);
|
|
+
|
|
+ }
|
|
+ sw_cons = BNX2X_NEXT_RCQ_IDX(bp, sw_cons);
|
|
+ bp->rx_prod = BNX2X_NEXT_RCQ_IDX(bp, bp->rx_prod);
|
|
+ }
|
|
+ bp->rx_cons = sw_cons;
|
|
+ bp->rx_bd_cons = bd_cons;
|
|
+ bp->rx_bd_prod = bd_prod;
|
|
+ bp->rx_hw_prod = hw_cons;
|
|
+
|
|
+ if (rc)
|
|
+ bnx2x_update_rx_prod(bp);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Clearing TX interrupts
|
|
+ ******************************************************************************/
|
|
+/**
|
|
+ * bnx2x_clear_tx_intr() - This routine is called when a TX interrupt occurs
|
|
+ * @param nic - the nic the interrupt occured on
|
|
+ * @return 0 on success
|
|
+ */
|
|
+static int bnx2x_clear_tx_intr(nic_t * nic)
|
|
+{
|
|
+ bnx2x_t *bp = (bnx2x_t *) nic->priv;
|
|
+ uint16_t hw_cons = bp->get_tx_cons(bp);
|
|
+
|
|
+ /* Sanity check: ensure the parameters passed in are valid */
|
|
+ if (unlikely(nic == NULL)) {
|
|
+ LOG_ERR(PFX "bnx2x_read() nic == NULL");
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ if (bp->tx_cons == hw_cons) {
|
|
+ if (bp->tx_cons == bp->tx_prod) {
|
|
+ /* Make sure the xmit_mutex lock is unlock */
|
|
+ if (pthread_mutex_trylock(&nic->xmit_mutex))
|
|
+ LOG_ERR(PFX "bnx2x tx lock with prod == cons");
|
|
+
|
|
+ pthread_mutex_unlock(&nic->xmit_mutex);
|
|
+ }
|
|
+ return -EAGAIN;
|
|
+ }
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: clearing tx interrupt [%d %d]",
|
|
+ nic->log_name, bp->tx_cons, hw_cons);
|
|
+ bp->tx_cons = hw_cons;
|
|
+
|
|
+ /* There is a queued TX packet that needs to be sent out. The usual
|
|
+ * case is when stack will send an ARP packet out before sending the
|
|
+ * intended packet */
|
|
+ if (nic->tx_packet_queue != NULL) {
|
|
+ packet_t *pkt;
|
|
+ int i;
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: sending queued tx packet", nic->log_name);
|
|
+ pkt = nic_dequeue_tx_packet(nic);
|
|
+
|
|
+ /* Got a TX packet buffer of the TX queue and put it onto
|
|
+ * the hardware */
|
|
+ if (pkt != NULL) {
|
|
+ bnx2x_prepare_xmit_packet(nic, pkt->nic_iface, pkt);
|
|
+
|
|
+ bnx2x_start_xmit(nic, pkt->buf_size,
|
|
+ pkt->nic_iface->vlan_id);
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: transmitted queued packet %d bytes "
|
|
+ "dev->tx_cons: %d, dev->tx_prod: %d, "
|
|
+ "dev->tx_bd_prod:%d",
|
|
+ nic->log_name, pkt->buf_size,
|
|
+ bp->tx_cons, bp->tx_prod, bp->tx_bd_prod);
|
|
+
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
+ /* Try to wait for a TX completion */
|
|
+ for (i = 0; i < 15; i++) {
|
|
+ struct timespec sleep_req = {.tv_sec = 0,
|
|
+ .tv_nsec = 5000000
|
|
+ }, sleep_rem;
|
|
+
|
|
+ hw_cons = bp->get_tx_cons(bp);
|
|
+ if (bp->tx_cons != hw_cons) {
|
|
+ LOG_DEBUG(PFX
|
|
+ "%s: clearing tx interrupt [%d %d]",
|
|
+ nic->log_name, bp->tx_cons, hw_cons);
|
|
+ bp->tx_cons = hw_cons;
|
|
+
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ nanosleep(&sleep_req, &sleep_rem);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ pthread_mutex_unlock(&nic->xmit_mutex);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/*******************************************************************************
|
|
+ * bnx2x NIC op's table
|
|
+ ******************************************************************************/
|
|
+struct nic_ops bnx2x_op = {
|
|
+ .description = "bnx2x",
|
|
+ .open = bnx2x_open,
|
|
+ .close = bnx2x_close,
|
|
+ .write = bnx2x_write,
|
|
+ .get_tx_pkt = bnx2x_get_tx_pkt,
|
|
+ .start_xmit = bnx2x_start_xmit,
|
|
+ .read = bnx2x_read,
|
|
+ .clear_tx_intr = bnx2x_clear_tx_intr,
|
|
+ .handle_iscsi_path_req = cnic_handle_iscsi_path_req,
|
|
+
|
|
+ .lib_ops = {
|
|
+ .get_library_name = bnx2x_get_library_name,
|
|
+ .get_pci_table = bnx2x_get_pci_table,
|
|
+ .get_library_version = bnx2x_get_library_version,
|
|
+ .get_build_date = bnx2x_get_build_date,
|
|
+ .get_transport_name = bnx2x_get_transport_name,
|
|
+ .get_uio_name = bnx2x_get_uio_name,
|
|
+ },
|
|
+};
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/libs/bnx2x.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/libs/bnx2x.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/libs/bnx2x.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/libs/bnx2x.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,646 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * bnx2x.h - bnx2x user space driver
|
|
+ *
|
|
+ */
|
|
+#ifndef __BNX2X_H__
|
|
+#define __BNX2X_H__
|
|
+
|
|
+#include "nic.h"
|
|
+
|
|
+/******************************************************************************
|
|
+ * Default CNIC values
|
|
+ ******************************************************************************/
|
|
+#define DEFAULT_BNX2X_NUM_RXBD 15
|
|
+#define DEFAULT_BNX2X_RX_LEN 0x400
|
|
+
|
|
+/******************************************************************************
|
|
+ * BNX2X Hardware structures
|
|
+ ******************************************************************************/
|
|
+#define HC_USTORM_DEF_SB_NUM_INDICES 8
|
|
+#define HC_CSTORM_DEF_SB_NUM_INDICES 8
|
|
+#define HC_XSTORM_DEF_SB_NUM_INDICES 4
|
|
+#define HC_TSTORM_DEF_SB_NUM_INDICES 4
|
|
+
|
|
+struct atten_def_status_block {
|
|
+ volatile __u32 attn_bits;
|
|
+ volatile __u32 attn_bits_ack;
|
|
+ volatile __u8 status_block_id;
|
|
+ volatile __u8 reserved0;
|
|
+ volatile __u16 attn_bits_index;
|
|
+ volatile __u32 reserved1;
|
|
+};
|
|
+
|
|
+struct cstorm_def_status_block_u {
|
|
+ volatile __u16 index_values[HC_USTORM_DEF_SB_NUM_INDICES];
|
|
+ volatile __u16 status_block_index;
|
|
+ volatile __u8 func;
|
|
+ volatile __u8 status_block_id;
|
|
+ volatile __u32 __flags;
|
|
+};
|
|
+
|
|
+struct cstorm_def_status_block_c {
|
|
+ volatile __u16 index_values[HC_CSTORM_DEF_SB_NUM_INDICES];
|
|
+ volatile __u16 status_block_index;
|
|
+ volatile __u8 func;
|
|
+ volatile __u8 status_block_id;
|
|
+ volatile __u32 __flags;
|
|
+};
|
|
+
|
|
+struct xstorm_def_status_block {
|
|
+ volatile __u16 index_values[HC_XSTORM_DEF_SB_NUM_INDICES];
|
|
+ volatile __u16 status_block_index;
|
|
+ volatile __u8 func;
|
|
+ volatile __u8 status_block_id;
|
|
+ volatile __u32 __flags;
|
|
+};
|
|
+
|
|
+struct tstorm_def_status_block {
|
|
+ volatile __u16 index_values[HC_TSTORM_DEF_SB_NUM_INDICES];
|
|
+ volatile __u16 status_block_index;
|
|
+ volatile __u8 func;
|
|
+ volatile __u8 status_block_id;
|
|
+ volatile __u32 __flags;
|
|
+};
|
|
+
|
|
+struct host_def_status_block {
|
|
+ struct atten_def_status_block atten_status_block;
|
|
+ struct cstorm_def_status_block_u u_def_status_block;
|
|
+ struct cstorm_def_status_block_c c_def_status_block;
|
|
+ struct xstorm_def_status_block x_def_status_block;
|
|
+ struct tstorm_def_status_block t_def_status_block;
|
|
+};
|
|
+
|
|
+#define HC_INDEX_DEF_U_ETH_ISCSI_RX_CQ_CONS 1
|
|
+#define HC_INDEX_DEF_U_ETH_ISCSI_RX_BD_CONS 3
|
|
+#define HC_INDEX_DEF_C_ETH_ISCSI_CQ_CONS 5
|
|
+
|
|
+struct atten_sp_status_block {
|
|
+ __u32 attn_bits;
|
|
+ __u32 attn_bits_ack;
|
|
+ __u8 status_block_id;
|
|
+ __u8 reserved0;
|
|
+ __u16 attn_bits_index;
|
|
+ __u32 reserved1;
|
|
+};
|
|
+
|
|
+#define HC_SP_SB_MAX_INDICES 16
|
|
+
|
|
+struct hc_sp_status_block {
|
|
+ __u16 index_values[HC_SP_SB_MAX_INDICES];
|
|
+ __u16 running_index;
|
|
+ __u16 rsrv;
|
|
+ __u32 rsrv1;
|
|
+};
|
|
+
|
|
+struct host_sp_status_block {
|
|
+ struct atten_sp_status_block atten_status_block;
|
|
+ struct hc_sp_status_block sp_sb;
|
|
+};
|
|
+
|
|
+#define HC_SP_INDEX_ETH_ISCSI_CQ_CONS 5
|
|
+#define HC_SP_INDEX_ETH_ISCSI_RX_CQ_CONS 1
|
|
+
|
|
+/*
|
|
+ * VLAN mode on TX BDs
|
|
+ */
|
|
+enum eth_tx_vlan_type {
|
|
+ X_ETH_NO_VLAN = 0,
|
|
+ X_ETH_OUTBAND_VLAN = 1,
|
|
+ X_ETH_INBAND_VLAN = 2,
|
|
+ X_ETH_FW_ADDED_VLAN = 3,
|
|
+ MAX_ETH_TX_VLAN_TYPE
|
|
+};
|
|
+
|
|
+/* TX Buffer descriptor */
|
|
+struct eth_tx_bd_flags {
|
|
+ __u8 as_bitfield;
|
|
+/* t6.X HSI */
|
|
+#define ETH_TX_BD_FLAGS_IP_CSUM_T6X (0x1<<0)
|
|
+#define ETH_TX_BD_FLAGS_IP_CSUM_SHIFT_T6X 0
|
|
+#define ETH_TX_BD_FLAGS_L4_CSUM_T6X (0x1<<1)
|
|
+#define ETH_TX_BD_FLAGS_L4_CSUM_SHIFT_T6X 1
|
|
+#define ETH_TX_BD_FLAGS_VLAN_MODE_T6X (0x3<<2)
|
|
+#define ETH_TX_BD_FLAGS_VLAN_MODE_SHIFT_T6X 2
|
|
+#define ETH_TX_BD_FLAGS_START_BD_T6X (0x1<<4)
|
|
+#define ETH_TX_BD_FLAGS_START_BD_SHIFT_T6X 4
|
|
+#define ETH_TX_BD_FLAGS_IS_UDP_T6X (0x1<<5)
|
|
+#define ETH_TX_BD_FLAGS_IS_UDP_SHIFT_T6X 5
|
|
+#define ETH_TX_BD_FLAGS_SW_LSO_T6X (0x1<<6)
|
|
+#define ETH_TX_BD_FLAGS_SW_LSO_SHIFT_T6X 6
|
|
+#define ETH_TX_BD_FLAGS_IPV6_T6X (0x1<<7)
|
|
+#define ETH_TX_BD_FLAGS_IPV6_SHIFT_T6X 7
|
|
+
|
|
+/* Legacy t5.2 HSI defines */
|
|
+#define ETH_TX_BD_FLAGS_VLAN_TAG_T5X (0x1<<0)
|
|
+#define ETH_TX_BD_FLAGS_VLAN_TAG_SHIFT_T5X 0
|
|
+#define ETH_TX_BD_FLAGS_IP_CSUM_T5X (0x1<<1)
|
|
+#define ETH_TX_BD_FLAGS_IP_CSUM_SHIFT_T5X 1
|
|
+#define ETH_TX_BD_FLAGS_L4_CSUM_T5X (0x1<<2)
|
|
+#define ETH_TX_BD_FLAGS_L4_CSUM_SHIFT_T5X 2
|
|
+#define ETH_TX_BD_FLAGS_END_BD_T5X (0x1<<3)
|
|
+#define ETH_TX_BD_FLAGS_END_BD_SHIFT_T5X 3
|
|
+#define ETH_TX_BD_FLAGS_START_BD_T5X (0x1<<4)
|
|
+#define ETH_TX_BD_FLAGS_START_BD_SHIFT_T5X 4
|
|
+#define ETH_TX_BD_FLAGS_HDR_POOL_T5X (0x1<<5)
|
|
+#define ETH_TX_BD_FLAGS_HDR_POOL_SHIFT_T5X 5
|
|
+#define ETH_TX_BD_FLAGS_SW_LSO_T5X (0x1<<6)
|
|
+#define ETH_TX_BD_FLAGS_SW_LSO_SHIFT_T5X 6
|
|
+#define ETH_TX_BD_FLAGS_IPV6_T5X (0x1<<7)
|
|
+#define ETH_TX_BD_FLAGS_IPV6_SHIFT_T5X 7
|
|
+};
|
|
+
|
|
+#define ETH_TX_BD_FLAGS_VLAN_TAG_T6X \
|
|
+ (X_ETH_OUTBAND_VLAN << ETH_TX_BD_FLAGS_VLAN_MODE_SHIFT_T6X)
|
|
+
|
|
+#define BNX2X_SET_TX_VLAN(bp, txbd, vlan_id) \
|
|
+ do { \
|
|
+ if (vlan_id) { \
|
|
+ (txbd)->vlan = vlan_id; \
|
|
+ (txbd)->bd_flags.as_bitfield |= \
|
|
+ (bp)->tx_vlan_tag_bit; \
|
|
+ } else { \
|
|
+ (txbd)->vlan = (bp)->tx_prod; \
|
|
+ (txbd)->bd_flags.as_bitfield &= \
|
|
+ ~(bp)->tx_vlan_tag_bit; \
|
|
+ } \
|
|
+ } while (0)
|
|
+
|
|
+struct eth_tx_start_bd {
|
|
+ __u32 addr_lo;
|
|
+ __u32 addr_hi;
|
|
+ __u16 nbd;
|
|
+ __u16 nbytes;
|
|
+ __u16 vlan;
|
|
+ struct eth_tx_bd_flags bd_flags;
|
|
+ __u8 general_data;
|
|
+#define ETH_TX_START_BD_HDR_NBDS (0x3F<<0)
|
|
+#define ETH_TX_START_BD_HDR_NBDS_SHIFT 0
|
|
+#define ETH_TX_START_BD_ETH_ADDR_TYPE (0x3<<6)
|
|
+#define ETH_TX_START_BD_ETH_ADDR_TYPE_SHIFT 6
|
|
+};
|
|
+
|
|
+struct eth_tx_bd {
|
|
+ __u32 addr_lo;
|
|
+ __u32 addr_hi;
|
|
+ __u16 total_pkt_bytes;
|
|
+ __u16 nbytes;
|
|
+ __u8 reserved[4];
|
|
+};
|
|
+
|
|
+/* RX Buffer descriptor */
|
|
+struct eth_rx_bd {
|
|
+ __u32 addr_lo;
|
|
+ __u32 addr_hi;
|
|
+};
|
|
+
|
|
+struct ramrod_data {
|
|
+ volatile __u32 data_lo;
|
|
+ volatile __u32 data_hi;
|
|
+};
|
|
+
|
|
+struct common_ramrod_eth_rx_cqe {
|
|
+ volatile __u8 ramrod_type;
|
|
+#define COMMON_RAMROD_ETH_RX_CQE_TYPE (0x1<<0)
|
|
+#define COMMON_RAMROD_ETH_RX_CQE_TYPE_SHIFT 0
|
|
+#define COMMON_RAMROD_ETH_RX_CQE_RESERVED0 (0x7F<<1)
|
|
+#define COMMON_RAMROD_ETH_RX_CQE_RESERVED0_SHIFT 1
|
|
+ volatile __u8 conn_type;
|
|
+ volatile __u16 reserved1;
|
|
+ volatile __u32 conn_and_cmd_data;
|
|
+#define COMMON_RAMROD_ETH_RX_CQE_CID (0xFFFFFF<<0)
|
|
+#define COMMON_RAMROD_ETH_RX_CQE_CID_SHIFT 0
|
|
+#define COMMON_RAMROD_ETH_RX_CQE_CMD_ID (0xFF<<24)
|
|
+#define COMMON_RAMROD_ETH_RX_CQE_CMD_ID_SHIFT 24
|
|
+ struct ramrod_data protocol_data;
|
|
+ __u32 reserved2[4];
|
|
+};
|
|
+
|
|
+struct common_ramrod_eth_rx_cqe_70 {
|
|
+ volatile __u8 ramrod_type;
|
|
+ volatile __u8 conn_type;
|
|
+ volatile __u16 reserved1;
|
|
+ volatile __u32 conn_and_cmd_data;
|
|
+ struct ramrod_data protocol_data;
|
|
+ __u32 echo;
|
|
+ __u32 reserved2[11];
|
|
+};
|
|
+
|
|
+struct parsing_flags {
|
|
+ volatile __u16 flags;
|
|
+};
|
|
+
|
|
+struct eth_fast_path_rx_cqe {
|
|
+ volatile __u8 type_error_flags;
|
|
+#define ETH_FAST_PATH_RX_CQE_TYPE (0x1<<0)
|
|
+#define ETH_FAST_PATH_RX_CQE_TYPE_SHIFT 0
|
|
+#define ETH_FAST_PATH_RX_CQE_PHY_DECODE_ERR_FLG (0x1<<1)
|
|
+#define ETH_FAST_PATH_RX_CQE_PHY_DECODE_ERR_FLG_SHIFT 1
|
|
+#define ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG (0x1<<2)
|
|
+#define ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG_SHIFT 2
|
|
+#define ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG (0x1<<3)
|
|
+#define ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG_SHIFT 3
|
|
+#define ETH_FAST_PATH_RX_CQE_START_FLG (0x1<<4)
|
|
+#define ETH_FAST_PATH_RX_CQE_START_FLG_SHIFT 4
|
|
+#define ETH_FAST_PATH_RX_CQE_END_FLG (0x1<<5)
|
|
+#define ETH_FAST_PATH_RX_CQE_END_FLG_SHIFT 5
|
|
+#define ETH_FAST_PATH_RX_CQE_RESERVED0 (0x3<<6)
|
|
+#define ETH_FAST_PATH_RX_CQE_RESERVED0_SHIFT 6
|
|
+ volatile __u8 status_flags;
|
|
+#define ETH_FAST_PATH_RX_CQE_RSS_HASH_TYPE (0x7<<0)
|
|
+#define ETH_FAST_PATH_RX_CQE_RSS_HASH_TYPE_SHIFT 0
|
|
+#define ETH_FAST_PATH_RX_CQE_RSS_HASH_FLG (0x1<<3)
|
|
+#define ETH_FAST_PATH_RX_CQE_RSS_HASH_FLG_SHIFT 3
|
|
+#define ETH_FAST_PATH_RX_CQE_BROADCAST_FLG (0x1<<4)
|
|
+#define ETH_FAST_PATH_RX_CQE_BROADCAST_FLG_SHIFT 4
|
|
+#define ETH_FAST_PATH_RX_CQE_MAC_MATCH_FLG (0x1<<5)
|
|
+#define ETH_FAST_PATH_RX_CQE_MAC_MATCH_FLG_SHIFT 5
|
|
+#define ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG (0x1<<6)
|
|
+#define ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG_SHIFT 6
|
|
+#define ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG (0x1<<7)
|
|
+#define ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG_SHIFT 7
|
|
+ volatile __u8 placement_offset;
|
|
+ volatile __u8 queue_index;
|
|
+ volatile __u32 rss_hash_result;
|
|
+ volatile __u16 vlan_tag;
|
|
+ volatile __u16 pkt_len;
|
|
+ volatile __u16 len_on_bd;
|
|
+ struct parsing_flags pars_flags;
|
|
+ volatile __u16 sgl[8];
|
|
+};
|
|
+
|
|
+union eth_sgl_or_raw_data {
|
|
+ volatile __u16 sgl[8];
|
|
+ volatile __u32 raw_data[4];
|
|
+};
|
|
+
|
|
+struct eth_fast_path_rx_cqe_64 {
|
|
+ volatile __u8 type_error_flags;
|
|
+#define ETH_FAST_PATH_RX_CQE_TYPE_64 (0x3<<0)
|
|
+#define ETH_FAST_PATH_RX_CQE_TYPE_SHIFT_64 0
|
|
+#define ETH_FAST_PATH_RX_CQE_SGL_RAW_SEL (0x1<<2)
|
|
+#define ETH_FAST_PATH_RX_CQE_SGL_RAW_SEL_SHIFT 2
|
|
+#define ETH_FAST_PATH_RX_CQE_PHY_DECODE_ERR_FLG_64 (0x1<<3)
|
|
+#define ETH_FAST_PATH_RX_CQE_PHY_DECODE_ERR_FLG_SHIFT_64 3
|
|
+#define ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG_64 (0x1<<4)
|
|
+#define ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG_SHIFT_64 4
|
|
+#define ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG_64 (0x1<<5)
|
|
+#define ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG_SHIFT_64 5
|
|
+#define ETH_FAST_PATH_RX_CQE_RESERVED0_64 (0x3<<6)
|
|
+#define ETH_FAST_PATH_RX_CQE_RESERVED0_SHIFT_64 6
|
|
+ volatile __u8 status_flags;
|
|
+#define ETH_FAST_PATH_RX_CQE_RSS_HASH_TYPE (0x7<<0)
|
|
+#define ETH_FAST_PATH_RX_CQE_RSS_HASH_TYPE_SHIFT 0
|
|
+#define ETH_FAST_PATH_RX_CQE_RSS_HASH_FLG (0x1<<3)
|
|
+#define ETH_FAST_PATH_RX_CQE_RSS_HASH_FLG_SHIFT 3
|
|
+#define ETH_FAST_PATH_RX_CQE_BROADCAST_FLG (0x1<<4)
|
|
+#define ETH_FAST_PATH_RX_CQE_BROADCAST_FLG_SHIFT 4
|
|
+#define ETH_FAST_PATH_RX_CQE_MAC_MATCH_FLG (0x1<<5)
|
|
+#define ETH_FAST_PATH_RX_CQE_MAC_MATCH_FLG_SHIFT 5
|
|
+#define ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG (0x1<<6)
|
|
+#define ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG_SHIFT 6
|
|
+#define ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG (0x1<<7)
|
|
+#define ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG_SHIFT 7
|
|
+ volatile __u8 queue_index;
|
|
+ volatile __u8 placement_offset;
|
|
+ volatile __u32 rss_hash_result;
|
|
+ volatile __u16 vlan_tag;
|
|
+ volatile __u16 pkt_len;
|
|
+ volatile __u16 len_on_bd;
|
|
+ struct parsing_flags pars_flags;
|
|
+ union eth_sgl_or_raw_data sgl_or_raw_data;
|
|
+};
|
|
+
|
|
+struct eth_fast_path_rx_cqe_70 {
|
|
+ volatile __u8 type_error_flags;
|
|
+ volatile __u8 status_flags;
|
|
+ volatile __u8 queue_index;
|
|
+ volatile __u8 placement_offset;
|
|
+ volatile __u32 rss_hash_result;
|
|
+ volatile __u16 vlan_tag;
|
|
+ volatile __u16 pkt_len;
|
|
+ volatile __u16 len_on_bd;
|
|
+ struct parsing_flags pars_flags;
|
|
+ union eth_sgl_or_raw_data sgl_or_raw_data;
|
|
+ __u32 reserved1[8];
|
|
+};
|
|
+
|
|
+struct eth_rx_cqe_next_page {
|
|
+ __u32 addr_lo;
|
|
+ __u32 addr_hi;
|
|
+ __u32 reserved[6];
|
|
+};
|
|
+
|
|
+struct eth_rx_cqe_next_page_70 {
|
|
+ __u32 addr_lo;
|
|
+ __u32 addr_hi;
|
|
+ __u32 reserved[14];
|
|
+};
|
|
+
|
|
+union eth_rx_cqe {
|
|
+ struct eth_fast_path_rx_cqe fast_path_cqe;
|
|
+ struct eth_fast_path_rx_cqe_64 fast_path_cqe_64;
|
|
+ struct common_ramrod_eth_rx_cqe ramrod_cqe;
|
|
+ struct eth_rx_cqe_next_page next_page_cqe;
|
|
+};
|
|
+
|
|
+union eth_rx_cqe_70 {
|
|
+ struct eth_fast_path_rx_cqe_70 fast_path_cqe_70;
|
|
+ struct common_ramrod_eth_rx_cqe_70 ramrod_cqe_70;
|
|
+ struct eth_rx_cqe_next_page_70 next_page_cqe_70;
|
|
+};
|
|
+
|
|
+struct client_init_general_data {
|
|
+ __u8 client_id;
|
|
+ __u8 statistics_counter_id;
|
|
+ __u8 statistics_en_flg;
|
|
+ __u8 is_fcoe_flg;
|
|
+ __u8 activate_flg;
|
|
+ __u8 sp_client_id;
|
|
+ __u16 mtu;
|
|
+ __u8 statistics_zero_flg;
|
|
+ __u8 func_id;
|
|
+ __u8 cos;
|
|
+ __u8 traffic_type;
|
|
+ __u32 reserved0;
|
|
+};
|
|
+
|
|
+/******************************************************************************
|
|
+ * BNX2X Registers and HSI
|
|
+ ******************************************************************************/
|
|
+#define BNX2X_BAR_SIZE 0x500000
|
|
+#define BNX2X_BAR2_SIZE 0x12000
|
|
+
|
|
+#define BNX2X_CHIP_ID(bp) (bp->chip_id & 0xfffffff0)
|
|
+
|
|
+#define PORT_MAX 2
|
|
+
|
|
+/* [R 4] This field indicates the type of the device. '0' - 2 Ports; '1' - 1
|
|
+ * Port. */
|
|
+#define BNX2X_MISC_REG_BOND_ID 0xa400
|
|
+/* [R 8] These bits indicate the metal revision of the chip. This value
|
|
+ * starts at 0x00 for each all-layer tape-out and increments by one for each
|
|
+ * tape-out. */
|
|
+#define BNX2X_MISC_REG_CHIP_METAL 0xa404
|
|
+/* [R 16] These bits indicate the part number for the chip. */
|
|
+#define BNX2X_MISC_REG_CHIP_NUM 0xa408
|
|
+/* [R 4] These bits indicate the base revision of the chip. This value
|
|
+ * starts at 0x0 for the A0 tape-out and increments by one for each
|
|
+ * all-layer tape-out. */
|
|
+#define BNX2X_MISC_REG_CHIP_REV 0xa40c
|
|
+
|
|
+#define BNX2X_CHIP_NUM(bp) (bp->chip_id >> 16)
|
|
+#define CHIP_NUM_57710 0x164e
|
|
+#define CHIP_NUM_57711 0x164f
|
|
+#define CHIP_NUM_57711E 0x1650
|
|
+#define CHIP_NUM_57712 0x1662
|
|
+#define CHIP_NUM_57712E 0x1663
|
|
+#define CHIP_NUM_57800 0x168a
|
|
+#define CHIP_NUM_57810 0x168e
|
|
+#define CHIP_NUM_57840 0x168d
|
|
+
|
|
+#define CHIP_IS_E1(bp) (BNX2X_CHIP_NUM(bp) == CHIP_NUM_57710)
|
|
+#define CHIP_IS_57711(bp) (BNX2X_CHIP_NUM(bp) == CHIP_NUM_57711)
|
|
+#define CHIP_IS_57711E(bp) (BNX2X_CHIP_NUM(bp) == CHIP_NUM_57711E)
|
|
+#define CHIP_IS_57712(bp) (BNX2X_CHIP_NUM(bp) == CHIP_NUM_57712)
|
|
+#define CHIP_IS_57712E(bp) (BNX2X_CHIP_NUM(bp) == CHIP_NUM_57712E)
|
|
+#define CHIP_IS_57800(bp) (BNX2X_CHIP_NUM(bp) == CHIP_NUM_57800)
|
|
+#define CHIP_IS_57810(bp) (BNX2X_CHIP_NUM(bp) == CHIP_NUM_57810)
|
|
+#define CHIP_IS_57840(bp) (BNX2X_CHIP_NUM(bp) == CHIP_NUM_57840)
|
|
+#define CHIP_IS_E1H(bp) (CHIP_IS_57711(bp) || \
|
|
+ CHIP_IS_57711E(bp))
|
|
+#define CHIP_IS_E2(bp) (CHIP_IS_57712(bp) || \
|
|
+ CHIP_IS_57712E(bp))
|
|
+#define CHIP_IS_E3(bp) (CHIP_IS_57800(bp) || \
|
|
+ CHIP_IS_57810(bp) || \
|
|
+ CHIP_IS_57840(bp))
|
|
+#define CHIP_IS_E2_PLUS(bp) (CHIP_IS_E2(bp) || CHIP_IS_E3(bp))
|
|
+#define IS_E1H_OFFSET CHIP_IS_E1H(bp)
|
|
+
|
|
+#define MISC_REG_SHARED_MEM_ADDR 0xa2b4
|
|
+
|
|
+#define MISC_REG_BOND_ID 0xa400
|
|
+#define MISC_REG_CHIP_METAL 0xa404
|
|
+#define MISC_REG_CHIP_NUM 0xa408
|
|
+#define MISC_REG_CHIP_REV 0xa40c
|
|
+
|
|
+#define MISC_REG_PORT4MODE_EN 0xa750
|
|
+#define MISC_REG_PORT4MODE_EN_OVWR 0xa720
|
|
+
|
|
+#define MISC_REG_GENERIC_CR_0 0xa460
|
|
+#define MISC_REG_GENERIC_CR_1 0xa464
|
|
+
|
|
+#define BAR_USTRORM_INTMEM 0x400000
|
|
+#define BAR_CSTRORM_INTMEM 0x410000
|
|
+#define BAR_XSTRORM_INTMEM 0x420000
|
|
+#define BAR_TSTRORM_INTMEM 0x430000
|
|
+
|
|
+#define USTORM_RX_PRODS_OFFSET(port, client_id) \
|
|
+ (IS_E1H_OFFSET ? (0x1000 + (port * 0x680) + (client_id * 0x40)) \
|
|
+ : (0x4000 + (port * 0x360) + (client_id * 0x30)))
|
|
+
|
|
+struct iro {
|
|
+ __u32 base;
|
|
+ __u16 m1;
|
|
+ __u16 m2;
|
|
+ __u16 m3;
|
|
+ __u16 size;
|
|
+};
|
|
+
|
|
+#define IRO_ENT bp->iro[bp->iro_idx]
|
|
+
|
|
+#define USTORM_RX_PRODS_E1X_OFFSET(port, client_id) \
|
|
+ (IRO_ENT.base + ((port) * IRO_ENT.m1) + ((client_id) * IRO_ENT.m2))
|
|
+
|
|
+#define USTORM_RX_PRODS_E2_OFFSET(qzone_id) \
|
|
+ (IRO_ENT.base + ((qzone_id) * IRO_ENT.m1))
|
|
+
|
|
+#define ETH_MAX_RX_CLIENTS_E1H 28
|
|
+#define ETH_MAX_RX_CLIENTS_E2 28
|
|
+
|
|
+#define BNX2X_CL_QZONE_ID(bp, cli) \
|
|
+ cli + (bp->port * (CHIP_IS_E2(bp) ? \
|
|
+ ETH_MAX_RX_CLIENTS_E2 : \
|
|
+ ETH_MAX_RX_CLIENTS_E1H))
|
|
+
|
|
+#define BNX2X_CL_QZONE_ID_64(bp, cli) \
|
|
+ (CHIP_IS_E2_PLUS(bp) ? (cli) : \
|
|
+ (cli + (bp->port * ETH_MAX_RX_CLIENTS_E1H)))
|
|
+
|
|
+#define BNX2X_PATH(bp) (!CHIP_IS_E2_PLUS(bp) ? 0 : (bp)->func & 1)
|
|
+
|
|
+#define SHMEM_P0_ISCSI_MAC_UPPER 0x4c
|
|
+#define SHMEM_P0_ISCSI_MAC_LOWER 0x50
|
|
+#define SHMEM_P1_ISCSI_MAC_UPPER 0x1dc
|
|
+#define SHMEM_P1_ISCSI_MAC_LOWER 0x1e0
|
|
+
|
|
+#define SHMEM_ISCSI_MAC_UPPER(bp) \
|
|
+ (((bp)->port == 0) ? SHMEM_P0_ISCSI_MAC_UPPER : SHMEM_P1_ISCSI_MAC_UPPER)
|
|
+
|
|
+#define SHMEM_ISCSI_MAC_LOWER(bp) \
|
|
+ (((bp)->port == 0) ? SHMEM_P0_ISCSI_MAC_LOWER : SHMEM_P1_ISCSI_MAC_LOWER)
|
|
+
|
|
+#define BNX2X_RCQ_DESC_CNT (4096 / sizeof(union eth_rx_cqe))
|
|
+#define BNX2X_RCQ_DESC_CNT_70 (4096 / sizeof(union eth_rx_cqe_70))
|
|
+#define BNX2X_MAX_RCQ_DESC_CNT(bp) \
|
|
+ ((bnx2x_is_ver70(bp) ? BNX2X_RCQ_DESC_CNT_70 : BNX2X_RCQ_DESC_CNT) - 1)
|
|
+
|
|
+#define BNX2X_RX_DESC_CNT (4096 / sizeof(struct eth_rx_bd))
|
|
+#define BNX2X_MAX_RX_DESC_CNT (BNX2X_RX_DESC_CNT - 2)
|
|
+#define BNX2X_NUM_RX_BD (BNX2X_RX_DESC_CNT * 1)
|
|
+#define BNX2X_MAX_RX_BD (BNX2X_NUM_RX_BD - 1)
|
|
+
|
|
+#define BNX2X_TX_DESC_CNT (4096 / sizeof(struct eth_tx_start_bd))
|
|
+#define BNX2X_MAX_TX_DESC_CNT (BNX2X_TX_DESC_CNT - 1)
|
|
+
|
|
+#define BNX2X_NEXT_RX_IDX(x) ((((x) & (BNX2X_RX_DESC_CNT - 1)) == \
|
|
+ (BNX2X_MAX_RX_DESC_CNT - 1)) ? (x) + 3 : (x) + 1)
|
|
+
|
|
+#define BNX2X_NEXT_RCQ_IDX(bp, x) \
|
|
+ ((((x) & BNX2X_MAX_RCQ_DESC_CNT(bp)) == \
|
|
+ (BNX2X_MAX_RCQ_DESC_CNT(bp) - 1)) ? (x) + 2 : (x) + 1)
|
|
+#define BNX2X_RX_BD(x) ((x) & BNX2X_MAX_RX_BD)
|
|
+
|
|
+#define BNX2X_NEXT_TX_BD(x) (((x) & (BNX2X_MAX_TX_DESC_CNT - 1)) == \
|
|
+ (BNX2X_MAX_TX_DESC_CNT - 1)) ? \
|
|
+ (x) + 2 : (x) + 1
|
|
+
|
|
+#define BNX2X_TX_RING_IDX(x) ((x) & BNX2X_MAX_TX_DESC_CNT)
|
|
+
|
|
+struct ustorm_eth_rx_producers {
|
|
+ __u16 cqe_prod;
|
|
+ __u16 bd_prod;
|
|
+ __u16 sge_prod;
|
|
+ __u16 reserved;
|
|
+};
|
|
+
|
|
+#define BNX2X_UNKNOWN_MAJOR_VERSION -1
|
|
+#define BNX2X_UNKNOWN_MINOR_VERSION -1
|
|
+#define BNX2X_UNKNOWN_SUB_MINOR_VERSION -1
|
|
+struct bnx2x_driver_version {
|
|
+ uint16_t major;
|
|
+ uint16_t minor;
|
|
+ uint16_t sub_minor;
|
|
+};
|
|
+
|
|
+typedef struct bnx2x {
|
|
+ nic_t *parent;
|
|
+
|
|
+ struct bnx2x_driver_version version;
|
|
+
|
|
+ uint16_t flags;
|
|
+#define CNIC_UIO_UNITIALIZED 0x0001
|
|
+#define CNIC_UIO_INITIALIZED 0x0002
|
|
+#define CNIC_UIO_ENABLED 0x0004
|
|
+#define CNIC_UIO_DISABLED 0x0008
|
|
+#define CNIC_UIO_IPv6_ENABLED 0x0010
|
|
+#define CNIC_UIO_ADDED_MULICAST 0x0020
|
|
+#define CNIC_UIO_MSIX_ENABLED 0x0200
|
|
+#define CNIC_UIO_TX_HAS_SENT 0x0400
|
|
+#define BNX2X_OPENED 0x0800
|
|
+
|
|
+ void *reg; /* Pointer to the BAR1 mapped registers */
|
|
+ void *reg2; /* Pointer to the BAR2 mapped registers */
|
|
+
|
|
+ int bar0_fd;
|
|
+ int bar2_fd;
|
|
+
|
|
+ __u32 chip_id;
|
|
+ __u32 shmem_base;
|
|
+ __u32 shmem_base2;
|
|
+ int func;
|
|
+ int port;
|
|
+ int pfid;
|
|
+ __u32 cid;
|
|
+ __u32 client_id;
|
|
+
|
|
+ struct iro *iro;
|
|
+ int iro_idx;
|
|
+
|
|
+ __u32 tx_doorbell;
|
|
+
|
|
+ __u16 tx_prod;
|
|
+ __u16 tx_bd_prod;
|
|
+ __u16 tx_cons;
|
|
+ __u8 tx_vlan_tag_bit;
|
|
+
|
|
+ __u32 rx_prod_io;
|
|
+
|
|
+ __u16 rx_prod;
|
|
+ __u16 rx_bd_prod;
|
|
+ __u16 rx_cons;
|
|
+ __u16 rx_bd_cons;
|
|
+ __u16 rx_hw_prod;
|
|
+
|
|
+ __u16(*get_rx_cons) (struct bnx2x *);
|
|
+ __u16(*get_tx_cons) (struct bnx2x *);
|
|
+
|
|
+ /* RX ring parameters */
|
|
+ uint32_t rx_ring_size;
|
|
+ uint32_t rx_buffer_size;
|
|
+
|
|
+ void *bufs; /* Pointer to the mapped buffer space */
|
|
+
|
|
+ /* Hardware Status Block locations */
|
|
+ void *sblk_map;
|
|
+ union {
|
|
+ struct host_def_status_block *def;
|
|
+ struct host_sp_status_block *sp;
|
|
+ } status_blk;
|
|
+
|
|
+ int status_blk_size;
|
|
+
|
|
+ uint16_t rx_index;
|
|
+ union {
|
|
+ union eth_rx_cqe *cqe;
|
|
+ union eth_rx_cqe_70 *cqe70;
|
|
+ } rx_comp_ring;
|
|
+ void **rx_pkt_ring;
|
|
+
|
|
+ struct eth_tx_start_bd *tx_ring;
|
|
+ void *tx_pkt;
|
|
+
|
|
+} bnx2x_t;
|
|
+
|
|
+/******************************************************************************
|
|
+ * bnx2x Function Declarations
|
|
+ ******************************************************************************/
|
|
+void bnx2x_start_xmit(nic_t * nic, size_t len, u16_t vlan_id);
|
|
+
|
|
+//struct nic_interface * bnx2x_find_nic_iface(nic_t * nic,
|
|
+// uint16_t vlan_id);
|
|
+
|
|
+struct nic_ops *bnx2x_get_ops();
|
|
+#endif /* __BNX2X_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/libs/cnic.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/libs/cnic.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/libs/cnic.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/libs/cnic.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,788 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * cnic.c - CNIC UIO uIP user space stack
|
|
+ *
|
|
+ */
|
|
+#include <errno.h>
|
|
+#include <pthread.h>
|
|
+#include <signal.h>
|
|
+#include <stdio.h>
|
|
+#include <stdlib.h>
|
|
+#include <string.h>
|
|
+#include <unistd.h>
|
|
+#include <arpa/inet.h>
|
|
+#include <linux/limits.h>
|
|
+#include <netinet/if_ether.h>
|
|
+#include <netinet/in.h>
|
|
+#include <netinet/ip6.h>
|
|
+#include <netinet/icmp6.h>
|
|
+#include <linux/netlink.h>
|
|
+#include <sys/ioctl.h>
|
|
+#include <sys/time.h>
|
|
+#include <sys/types.h>
|
|
+#include <sys/user.h>
|
|
+#include <sys/socket.h>
|
|
+
|
|
+#include "uip_arp.h"
|
|
+#include "nic.h"
|
|
+#include "nic_utils.h"
|
|
+#include "logger.h"
|
|
+#include "options.h"
|
|
+
|
|
+#include "cnic.h"
|
|
+#include "iscsi_if.h"
|
|
+#include "ipv6_ndpc.h"
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Constants
|
|
+ ******************************************************************************/
|
|
+#define PFX "CNIC "
|
|
+
|
|
+static const uip_ip6addr_t all_ones_addr6 =
|
|
+ { 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff };
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Constants shared between the bnx2 and bnx2x modules
|
|
+ ******************************************************************************/
|
|
+const char bnx2i_library_transport_name[] = "bnx2i";
|
|
+const size_t bnx2i_library_transport_name_size =
|
|
+ sizeof(bnx2i_library_transport_name);
|
|
+
|
|
+/******************************************************************************
|
|
+ * Netlink Functions
|
|
+ ******************************************************************************/
|
|
+
|
|
+static int cnic_arp_send(nic_t * nic, nic_interface_t * nic_iface, int fd,
|
|
+ __u8 * mac_addr, __u32 ip_addr, char *addr_str)
|
|
+{
|
|
+ struct ether_header *eth;
|
|
+ struct ether_arp *arp;
|
|
+ __u32 dst_ip = ip_addr;
|
|
+ int pkt_size = sizeof(*eth) + sizeof(*arp);
|
|
+ int rc;
|
|
+ struct in_addr addr;
|
|
+ static const uint8_t multicast_mac[] =
|
|
+ { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
|
|
+
|
|
+ rc = pthread_mutex_trylock(&nic->xmit_mutex);
|
|
+ if (rc != 0) {
|
|
+ LOG_DEBUG(PFX "%s: could not get xmit_mutex", nic->log_name);
|
|
+ return -EAGAIN;
|
|
+ }
|
|
+
|
|
+ eth = (*nic->ops->get_tx_pkt) (nic);
|
|
+ if (eth == NULL) {
|
|
+ LOG_WARN(PFX "%s: couldn't get tx packet", nic->log_name);
|
|
+ return -EAGAIN;
|
|
+ }
|
|
+
|
|
+ nic_fill_ethernet_header(nic_iface, eth,
|
|
+ nic->mac_addr, (void *)multicast_mac,
|
|
+ &pkt_size, (void *)&arp, ETHERTYPE_ARP);
|
|
+
|
|
+ arp->arp_hrd = htons(ARPHRD_ETHER);
|
|
+ arp->arp_pro = htons(ETHERTYPE_IP);
|
|
+ arp->arp_hln = ETH_ALEN;
|
|
+ arp->arp_pln = 4;
|
|
+ arp->arp_op = htons(ARPOP_REQUEST);
|
|
+ memcpy(arp->arp_sha, nic->mac_addr, ETH_ALEN);
|
|
+ memset(arp->arp_tha, 0, ETH_ALEN);
|
|
+
|
|
+ /* Copy the IP address's into the ARP response */
|
|
+ memcpy(arp->arp_spa, nic_iface->ustack.hostaddr, 4);
|
|
+ memcpy(arp->arp_tpa, &dst_ip, 4);
|
|
+
|
|
+ (*nic->nic_library->ops->start_xmit) (nic, pkt_size,
|
|
+ nic_iface->vlan_id);
|
|
+
|
|
+ memcpy(&addr.s_addr, &dst_ip, sizeof(addr.s_addr));
|
|
+ LOG_DEBUG(PFX "%s: Sent cnic arp request for IP: %s",
|
|
+ nic->log_name, addr_str);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static int cnic_neigh_soliciation_send(nic_t * nic,
|
|
+ nic_interface_t * nic_iface, int fd,
|
|
+ __u8 * mac_addr,
|
|
+ struct in6_addr *addr6_dst,
|
|
+ char *addr_str)
|
|
+{
|
|
+ struct ether_header *eth;
|
|
+ struct ip6_hdr *ipv6_hdr;
|
|
+ int rc, pkt_size;
|
|
+ char buf[INET6_ADDRSTRLEN];
|
|
+ NDPC_REQPTR req_ptr;
|
|
+
|
|
+ rc = pthread_mutex_trylock(&nic->xmit_mutex);
|
|
+ if (rc != 0) {
|
|
+ LOG_WARN(PFX "%s: could not get xmit_mutex", nic->log_name);
|
|
+ return -EAGAIN;
|
|
+ }
|
|
+
|
|
+ /* Build the ethernet header */
|
|
+ eth = (*nic->ops->get_tx_pkt) (nic);
|
|
+ if (eth == NULL) {
|
|
+ LOG_WARN(PFX "%s: couldn't get tx packet", nic->log_name);
|
|
+ return -EAGAIN;
|
|
+ }
|
|
+
|
|
+ /* Copy the requested target address to the ipv6.dst */
|
|
+ ipv6_hdr =
|
|
+ (struct ip6_hdr *)((u8_t *) eth + sizeof(struct ether_header));
|
|
+
|
|
+ memcpy(ipv6_hdr->ip6_dst.s6_addr, addr6_dst->s6_addr,
|
|
+ sizeof(struct in6_addr));
|
|
+
|
|
+ LOG_DEBUG(PFX "dst ip addr %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
|
|
+ ipv6_hdr->ip6_dst.s6_addr16[0],
|
|
+ ipv6_hdr->ip6_dst.s6_addr16[1],
|
|
+ ipv6_hdr->ip6_dst.s6_addr16[2],
|
|
+ ipv6_hdr->ip6_dst.s6_addr16[3],
|
|
+ ipv6_hdr->ip6_dst.s6_addr16[4],
|
|
+ ipv6_hdr->ip6_dst.s6_addr16[5],
|
|
+ ipv6_hdr->ip6_dst.s6_addr16[6],
|
|
+ ipv6_hdr->ip6_dst.s6_addr16[7]);
|
|
+ nic_fill_ethernet_header(nic_iface, eth, nic->mac_addr, nic->mac_addr,
|
|
+ &pkt_size, (void *)&ipv6_hdr, ETHERTYPE_IPV6);
|
|
+ req_ptr.eth = (void *)eth;
|
|
+ req_ptr.ipv6 = (void *)ipv6_hdr;
|
|
+ if (ndpc_request(&nic_iface->ustack, &req_ptr, &pkt_size,
|
|
+ NEIGHBOR_SOLICIT))
|
|
+ return -EAGAIN;
|
|
+
|
|
+ /* Debug to print out the pkt context */
|
|
+ inet_ntop(AF_INET6, ipv6_hdr->ip6_dst.s6_addr, buf, sizeof(buf));
|
|
+ LOG_DEBUG(PFX "%s: ipv6 dst addr: %s", nic->log_name, buf);
|
|
+ LOG_DEBUG(PFX "neighbor sol content "
|
|
+ "dst mac %02x:%02x:%02x:%02x:%02x:%02x",
|
|
+ eth->ether_dhost[0], eth->ether_dhost[1],
|
|
+ eth->ether_dhost[2], eth->ether_dhost[3],
|
|
+ eth->ether_dhost[4], eth->ether_dhost[5]);
|
|
+ LOG_DEBUG(PFX "src mac %02x:%02x:%02x:%02x:%02x:%02x",
|
|
+ eth->ether_shost[0], eth->ether_shost[1],
|
|
+ eth->ether_shost[2], eth->ether_shost[3],
|
|
+ eth->ether_shost[4], eth->ether_shost[5]);
|
|
+ (*nic->nic_library->ops->start_xmit) (nic, pkt_size,
|
|
+ nic_iface->vlan_id);
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: Sent cnic ICMPv6 neighbor request %s",
|
|
+ nic->log_name, addr_str);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static int cnic_nl_neigh_rsp(nic_t * nic, int fd,
|
|
+ struct iscsi_uevent *ev,
|
|
+ struct iscsi_path *path_req,
|
|
+ __u8 * mac_addr,
|
|
+ nic_interface_t * nic_iface, int status, int type)
|
|
+{
|
|
+ int rc;
|
|
+ uint8_t *ret_buf;
|
|
+ struct iscsi_uevent *ret_ev;
|
|
+ struct iscsi_path *path_rsp;
|
|
+ struct sockaddr_nl dest_addr;
|
|
+ char addr_dst_str[INET6_ADDRSTRLEN];
|
|
+
|
|
+ memset(&dest_addr, 0, sizeof(dest_addr));
|
|
+ dest_addr.nl_family = AF_NETLINK;
|
|
+ dest_addr.nl_pid = 0;
|
|
+ dest_addr.nl_groups = 0; /* unicast */
|
|
+
|
|
+ ret_buf = calloc(1, NLMSG_SPACE(sizeof(struct iscsi_uevent) + 256));
|
|
+ if (ret_buf == NULL) {
|
|
+ LOG_ERR(PFX "Could not allocate memory for path req resposne");
|
|
+ return -ENOMEM;
|
|
+ }
|
|
+
|
|
+ memset(ret_buf, 0, NLMSG_SPACE(sizeof(struct iscsi_uevent) + 256));
|
|
+
|
|
+ /* prepare the iscsi_uevent buffer */
|
|
+ ret_ev = (struct iscsi_uevent *)ret_buf;
|
|
+ ret_ev->type = ISCSI_UEVENT_PATH_UPDATE;
|
|
+ ret_ev->transport_handle = ev->transport_handle;
|
|
+ ret_ev->u.set_path.host_no = ev->r.req_path.host_no;
|
|
+
|
|
+ /* Prepare the iscsi_path buffer */
|
|
+ path_rsp = (struct iscsi_path *)(ret_buf + sizeof(*ret_ev));
|
|
+ path_rsp->handle = path_req->handle;
|
|
+ if (type == AF_INET) {
|
|
+ path_rsp->ip_addr_len = 4;
|
|
+ memcpy(&path_rsp->src.v4_addr, nic_iface->ustack.hostaddr,
|
|
+ sizeof(nic_iface->ustack.hostaddr));
|
|
+
|
|
+ inet_ntop(AF_INET, &path_rsp->src.v4_addr,
|
|
+ addr_dst_str, sizeof(addr_dst_str));
|
|
+ } else {
|
|
+ u8_t *src_ipv6;
|
|
+ int ret;
|
|
+
|
|
+ /* Depending on the IPv6 address of the target we will need to
|
|
+ * determine whether we use the assigned IPv6 address or the
|
|
+ * link local IPv6 address */
|
|
+ if (ndpc_request(&nic_iface->ustack, &path_req->dst.v6_addr,
|
|
+ &ret, CHECK_LINK_LOCAL_ADDR)) {
|
|
+ src_ipv6 = (u8_t *)all_zeroes_addr6;
|
|
+ LOG_DEBUG(PFX "RSP Check LL failed");
|
|
+ goto src_done;
|
|
+ }
|
|
+ if (ret) {
|
|
+ /* Get link local IPv6 address */
|
|
+ if (ndpc_request(&nic_iface->ustack, NULL,
|
|
+ &src_ipv6, GET_LINK_LOCAL_ADDR)) {
|
|
+ src_ipv6 = (u8_t *)all_zeroes_addr6;
|
|
+ LOG_DEBUG(PFX "RSP Get LL failed");
|
|
+ goto src_done;
|
|
+ }
|
|
+ } else {
|
|
+ if (ndpc_request(&nic_iface->ustack,
|
|
+ &path_req->dst.v6_addr,
|
|
+ &src_ipv6, GET_HOST_ADDR)) {
|
|
+ src_ipv6 = (u8_t *)all_zeroes_addr6;
|
|
+ LOG_DEBUG(PFX "RSP Get host addr failed");
|
|
+ }
|
|
+ if (src_ipv6 == NULL) {
|
|
+ src_ipv6 = (u8_t *)all_zeroes_addr6;
|
|
+ LOG_DEBUG(PFX "RSP no Best matched addr found");
|
|
+ }
|
|
+ }
|
|
+src_done:
|
|
+ path_rsp->ip_addr_len = 16;
|
|
+ memcpy(&path_rsp->src.v6_addr, src_ipv6,
|
|
+ sizeof(nic_iface->ustack.hostaddr6));
|
|
+
|
|
+ inet_ntop(AF_INET6, &path_rsp->src.v6_addr,
|
|
+ addr_dst_str, sizeof(addr_dst_str));
|
|
+ }
|
|
+ memcpy(path_rsp->mac_addr, mac_addr, 6);
|
|
+ path_rsp->vlan_id = path_req->vlan_id;
|
|
+ path_rsp->pmtu = path_req->pmtu;
|
|
+
|
|
+ rc = __kipc_call(fd, ret_ev, sizeof(*ret_ev) + sizeof(*path_rsp));
|
|
+ if (rc > 0) {
|
|
+ LOG_DEBUG(PFX "neighbor reply sent back to kernel "
|
|
+ "%s at %02x:%02x:%02x:%02x:%02x:%02x",
|
|
+ addr_dst_str,
|
|
+ mac_addr[0], mac_addr[1],
|
|
+ mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
|
|
+
|
|
+ } else {
|
|
+ LOG_ERR(PFX "send neighbor reply failed: %d", rc);
|
|
+ }
|
|
+
|
|
+ free(ret_buf);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+const static struct timeval tp_wait = {
|
|
+ .tv_sec = 0,
|
|
+ .tv_usec = 250000,
|
|
+};
|
|
+
|
|
+/**
|
|
+ * cnic_handle_ipv4_iscsi_path_req() - This function will handle the IPv4
|
|
+ * path req calls the bnx2i kernel module
|
|
+ * @param nic - The nic the message is directed towards
|
|
+ * @param fd - The file descriptor to be used to extract the private data
|
|
+ * @param ev - The iscsi_uevent
|
|
+ * @param buf - The private message buffer
|
|
+ */
|
|
+int cnic_handle_ipv4_iscsi_path_req(nic_t * nic, int fd,
|
|
+ struct iscsi_uevent *ev,
|
|
+ struct iscsi_path *path)
|
|
+{
|
|
+ nic_interface_t *nic_iface, *vlan_iface;
|
|
+ struct in_addr src_addr, dst_addr,
|
|
+ src_matching_addr, dst_matching_addr, netmask;
|
|
+ __u8 mac_addr[6];
|
|
+ int rc;
|
|
+ uint16_t arp_retry;
|
|
+ int status = 0;
|
|
+
|
|
+ memset(mac_addr, 0, sizeof(mac_addr));
|
|
+
|
|
+ pthread_mutex_lock(&nic_list_mutex);
|
|
+
|
|
+ /* Find the proper interface via VLAN id */
|
|
+ nic_iface = nic_find_nic_iface_protocol(nic, 0, AF_INET);
|
|
+ if (nic_iface == NULL) {
|
|
+ pthread_mutex_unlock(&nic_list_mutex);
|
|
+ LOG_ERR(PFX "%s: Couldn't find net_iface vlan_id: %d",
|
|
+ nic->log_name, path->vlan_id);
|
|
+ return -EINVAL;
|
|
+ }
|
|
+ if (path->vlan_id) {
|
|
+ vlan_iface = nic_find_vlan_iface_protocol(nic, nic_iface,
|
|
+ path->vlan_id,
|
|
+ AF_INET);
|
|
+ if (vlan_iface == NULL) {
|
|
+ LOG_INFO(PFX "%s couldn't find interface with VLAN = %d"
|
|
+ "ip_type: 0x%x creating it",
|
|
+ nic->log_name, path->vlan_id, AF_INET);
|
|
+
|
|
+ /* Create the nic interface */
|
|
+ vlan_iface = nic_iface_init();
|
|
+
|
|
+ if (vlan_iface == NULL) {
|
|
+ LOG_ERR(PFX "Couldn't allocate nic_iface for "
|
|
+ "VLAN: %d", vlan_iface,
|
|
+ path->vlan_id);
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ vlan_iface->protocol = nic_iface->protocol;
|
|
+ vlan_iface->vlan_id = path->vlan_id;
|
|
+ vlan_iface->ustack.ip_config =
|
|
+ nic_iface->ustack.ip_config;
|
|
+ memcpy(vlan_iface->ustack.hostaddr,
|
|
+ nic_iface->ustack.hostaddr,
|
|
+ sizeof(nic_iface->ustack.hostaddr));
|
|
+ memcpy(vlan_iface->ustack.netmask,
|
|
+ nic_iface->ustack.netmask,
|
|
+ sizeof(nic_iface->ustack.netmask));
|
|
+ nic_add_vlan_iface(nic, nic_iface, vlan_iface);
|
|
+ } else {
|
|
+ LOG_INFO(PFX "%s: using existing vlan interface",
|
|
+ nic->log_name);
|
|
+ }
|
|
+ nic_iface = vlan_iface;
|
|
+ }
|
|
+
|
|
+#define MAX_ARP_RETRY 4
|
|
+
|
|
+ memcpy(&dst_addr, &path->dst.v4_addr, sizeof(dst_addr));
|
|
+ memcpy(&src_addr, nic_iface->ustack.hostaddr, sizeof(src_addr));
|
|
+
|
|
+ if (nic_iface->ustack.netmask[0] | nic_iface->ustack.netmask[1])
|
|
+ memcpy(&netmask.s_addr, nic_iface->ustack.netmask,
|
|
+ sizeof(src_addr));
|
|
+ else
|
|
+ netmask.s_addr = calculate_default_netmask(dst_addr.s_addr);
|
|
+
|
|
+ src_matching_addr.s_addr = src_addr.s_addr & netmask.s_addr;
|
|
+ dst_matching_addr.s_addr = dst_addr.s_addr & netmask.s_addr;
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: src=%s", nic->log_name, inet_ntoa(src_addr));
|
|
+ LOG_DEBUG(PFX "%s: dst=%s", nic->log_name, inet_ntoa(dst_addr));
|
|
+ LOG_DEBUG(PFX "%s: nm=%s", nic->log_name, inet_ntoa(netmask));
|
|
+ if (src_matching_addr.s_addr != dst_matching_addr.s_addr) {
|
|
+ /* If there is an assigned gateway address then use it
|
|
+ * if the source address doesn't match */
|
|
+ if (nic_iface->ustack.default_route_addr[0] |
|
|
+ nic_iface->ustack.default_route_addr[1]) {
|
|
+ memcpy(&dst_addr,
|
|
+ &nic_iface->ustack.default_route_addr,
|
|
+ sizeof(dst_addr));
|
|
+ } else {
|
|
+ arp_retry = MAX_ARP_RETRY;
|
|
+ LOG_DEBUG(PFX "%s: no default", nic->log_name);
|
|
+ goto done;
|
|
+ }
|
|
+ }
|
|
+ arp_retry = 0;
|
|
+
|
|
+ rc = uip_lookup_arp_entry(dst_addr.s_addr, mac_addr);
|
|
+ if (rc != 0) {
|
|
+ while ((arp_retry < MAX_ARP_RETRY) && (event_loop_stop == 0)) {
|
|
+ char *dst_addr_str;
|
|
+ int count;
|
|
+ struct timespec ts;
|
|
+ struct timeval tp;
|
|
+ struct timeval tp_abs;
|
|
+
|
|
+ dst_addr_str = inet_ntoa(dst_addr);
|
|
+
|
|
+ LOG_INFO(PFX "%s: Didn't find IPv4: '%s' in ARP table",
|
|
+ nic->log_name, dst_addr_str);
|
|
+ rc = cnic_arp_send(nic, nic_iface, fd,
|
|
+ mac_addr,
|
|
+ dst_addr.s_addr, dst_addr_str);
|
|
+ if (rc != 0) {
|
|
+ status = -EIO;
|
|
+ goto done;
|
|
+ }
|
|
+
|
|
+ for (count = 0; count < 8; count++) {
|
|
+ /* Convert from timeval to timespec */
|
|
+ rc = gettimeofday(&tp, NULL);
|
|
+
|
|
+ timeradd(&tp, &tp_wait, &tp_abs);
|
|
+
|
|
+ ts.tv_sec = tp_abs.tv_sec;
|
|
+ ts.tv_nsec = tp_abs.tv_usec * 1000;
|
|
+
|
|
+ pthread_mutex_unlock(&nic_list_mutex);
|
|
+ rc = pthread_cond_timedwait
|
|
+ (&nl_process_if_down_cond,
|
|
+ &nl_process_mutex, &ts);
|
|
+
|
|
+ if (rc == ETIMEDOUT) {
|
|
+ pthread_mutex_unlock(&nl_process_mutex);
|
|
+
|
|
+ if (pthread_mutex_trylock
|
|
+ (&nic_list_mutex) != 0) {
|
|
+ arp_retry = MAX_ARP_RETRY;
|
|
+ goto done;
|
|
+
|
|
+ }
|
|
+
|
|
+ rc = uip_lookup_arp_entry(dst_addr.
|
|
+ s_addr,
|
|
+ mac_addr);
|
|
+ if (rc == 0)
|
|
+ goto done;
|
|
+ } else {
|
|
+ nl_process_if_down = 0;
|
|
+ pthread_mutex_unlock(&nl_process_mutex);
|
|
+
|
|
+ arp_retry = MAX_ARP_RETRY;
|
|
+ goto done;
|
|
+
|
|
+ }
|
|
+ }
|
|
+
|
|
+ arp_retry++;
|
|
+ }
|
|
+ }
|
|
+
|
|
+done:
|
|
+
|
|
+ if (arp_retry >= MAX_ARP_RETRY) {
|
|
+ status = -EIO;
|
|
+ rc = -EIO;
|
|
+ }
|
|
+
|
|
+ if (status != 0 || rc != 0)
|
|
+ pthread_mutex_unlock(&nic->xmit_mutex);
|
|
+
|
|
+ cnic_nl_neigh_rsp(nic, fd, ev, path, mac_addr,
|
|
+ nic_iface, status, AF_INET);
|
|
+
|
|
+ pthread_mutex_unlock(&nic_list_mutex);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * cnic_handle_ipv6_iscsi_path_req() - This function will handle the IPv4
|
|
+ * path req calls the bnx2i kernel module
|
|
+ * @param nic - The nic the message is directed towards
|
|
+ * @param fd - The file descriptor to be used to extract the private data
|
|
+ * @param ev - The iscsi_uevent
|
|
+ * @param buf - The private message buffer
|
|
+ */
|
|
+int cnic_handle_ipv6_iscsi_path_req(nic_t * nic, int fd,
|
|
+ struct iscsi_uevent *ev,
|
|
+ struct iscsi_path *path)
|
|
+{
|
|
+ nic_interface_t *nic_iface, *vlan_iface;
|
|
+ __u8 mac_addr[6];
|
|
+ int rc, i;
|
|
+ uint16_t neighbor_retry;
|
|
+ int status = 0;
|
|
+ char addr_dst_str[INET6_ADDRSTRLEN];
|
|
+ struct in6_addr src_addr, dst_addr,
|
|
+ src_matching_addr, dst_matching_addr, netmask;
|
|
+ struct in6_addr* addr;
|
|
+ NDPC_REQPTR req_ptr;
|
|
+
|
|
+ memset(mac_addr, 0, sizeof(mac_addr));
|
|
+
|
|
+ inet_ntop(AF_INET6, &path->dst.v6_addr,
|
|
+ addr_dst_str, sizeof(addr_dst_str));
|
|
+
|
|
+ pthread_mutex_lock(&nic_list_mutex);
|
|
+
|
|
+ /* Find the proper interface via VLAN id */
|
|
+ nic_iface = nic_find_nic_iface_protocol(nic, 0, AF_INET6);
|
|
+ if (nic_iface == NULL) {
|
|
+ pthread_mutex_unlock(&nic_list_mutex);
|
|
+ LOG_ERR(PFX "%s: Couldn't find net_iface vlan_id: %d",
|
|
+ nic->log_name, path->vlan_id);
|
|
+ return -EINVAL;
|
|
+ }
|
|
+ if (path->vlan_id) {
|
|
+ vlan_iface = nic_find_vlan_iface_protocol(nic, nic_iface,
|
|
+ path->vlan_id,
|
|
+ AF_INET6);
|
|
+ if (vlan_iface == NULL) {
|
|
+ LOG_INFO(PFX "%s couldn't find interface with VLAN = %d"
|
|
+ "ip_type: 0x%x creating it",
|
|
+ nic->log_name, path->vlan_id, AF_INET6);
|
|
+
|
|
+ /* Create the nic interface */
|
|
+ vlan_iface = nic_iface_init();
|
|
+
|
|
+ if (vlan_iface == NULL) {
|
|
+ LOG_ERR(PFX "Couldn't allocate nic_iface for "
|
|
+ "VLAN: %d", vlan_iface,
|
|
+ path->vlan_id);
|
|
+ return -EINVAL;
|
|
+ }
|
|
+ vlan_iface->protocol = nic_iface->protocol;
|
|
+ vlan_iface->vlan_id = path->vlan_id;
|
|
+ vlan_iface->ustack.ip_config =
|
|
+ nic_iface->ustack.ip_config;
|
|
+ memcpy(vlan_iface->ustack.hostaddr6,
|
|
+ nic_iface->ustack.hostaddr6,
|
|
+ sizeof(nic_iface->ustack.hostaddr6));
|
|
+ memcpy(vlan_iface->ustack.netmask6,
|
|
+ nic_iface->ustack.netmask6,
|
|
+ sizeof(nic_iface->ustack.netmask6));
|
|
+ nic_add_vlan_iface(nic, nic_iface, vlan_iface);
|
|
+ } else {
|
|
+ LOG_INFO(PFX "%s: using existing vlan interface",
|
|
+ nic->log_name);
|
|
+ }
|
|
+ nic_iface = vlan_iface;
|
|
+ }
|
|
+
|
|
+ /* Depending on the IPv6 address of the target we will need to
|
|
+ * determine whether we use the assigned IPv6 address or the
|
|
+ * link local IPv6 address */
|
|
+ memcpy(&dst_addr, &path->dst.v6_addr, sizeof(struct in6_addr));
|
|
+ if (ndpc_request(&nic_iface->ustack, &dst_addr,
|
|
+ &rc, CHECK_LINK_LOCAL_ADDR)) {
|
|
+ neighbor_retry = MAX_ARP_RETRY;
|
|
+ LOG_DEBUG(PFX "Check LL failed");
|
|
+ goto done;
|
|
+ }
|
|
+ if (rc) {
|
|
+ LOG_DEBUG(PFX "Use LL");
|
|
+ /* Get link local IPv6 address */
|
|
+ if (ndpc_request(&nic_iface->ustack, NULL,
|
|
+ &addr, GET_LINK_LOCAL_ADDR)) {
|
|
+ neighbor_retry = MAX_ARP_RETRY;
|
|
+ LOG_DEBUG(PFX "Use LL failed");
|
|
+ goto done;
|
|
+ }
|
|
+ } else {
|
|
+ LOG_DEBUG(PFX "Use Best matched");
|
|
+ if (ndpc_request(&nic_iface->ustack,
|
|
+ &dst_addr,
|
|
+ &addr, GET_HOST_ADDR)) {
|
|
+ neighbor_retry = MAX_ARP_RETRY;
|
|
+ LOG_DEBUG(PFX "Use Best matched failed");
|
|
+ goto done;
|
|
+ }
|
|
+ if (addr == NULL) {
|
|
+ neighbor_retry = MAX_ARP_RETRY;
|
|
+ LOG_DEBUG(PFX "No Best matched found");
|
|
+ goto done;
|
|
+ }
|
|
+ }
|
|
+ /* Got the best matched src IP address */
|
|
+ memcpy(&src_addr, addr, sizeof(struct in6_addr));
|
|
+
|
|
+ if (nic_iface->ustack.netmask6[0] | nic_iface->ustack.netmask6[1] |
|
|
+ nic_iface->ustack.netmask6[2] | nic_iface->ustack.netmask6[3] |
|
|
+ nic_iface->ustack.netmask6[4] | nic_iface->ustack.netmask6[5] |
|
|
+ nic_iface->ustack.netmask6[6] | nic_iface->ustack.netmask6[7])
|
|
+ memcpy(&netmask.s6_addr, nic_iface->ustack.netmask6,
|
|
+ sizeof(struct in6_addr));
|
|
+ else
|
|
+ memcpy(&netmask.s6_addr, all_zeroes_addr6,
|
|
+ sizeof(struct in6_addr));
|
|
+
|
|
+ LOG_DEBUG(PFX "src addr %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
|
|
+ src_addr.s6_addr16[0], src_addr.s6_addr16[1],
|
|
+ src_addr.s6_addr16[2], src_addr.s6_addr16[3],
|
|
+ src_addr.s6_addr16[4], src_addr.s6_addr16[5],
|
|
+ src_addr.s6_addr16[6], src_addr.s6_addr16[7]);
|
|
+ LOG_DEBUG(PFX "dst addr %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
|
|
+ dst_addr.s6_addr16[0], dst_addr.s6_addr16[1],
|
|
+ dst_addr.s6_addr16[2], dst_addr.s6_addr16[3],
|
|
+ dst_addr.s6_addr16[4], dst_addr.s6_addr16[5],
|
|
+ dst_addr.s6_addr16[6], dst_addr.s6_addr16[7]);
|
|
+ LOG_DEBUG(PFX "nm addr %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
|
|
+ netmask.s6_addr16[0], netmask.s6_addr16[1],
|
|
+ netmask.s6_addr16[2], netmask.s6_addr16[3],
|
|
+ netmask.s6_addr16[4], netmask.s6_addr16[5],
|
|
+ netmask.s6_addr16[6], netmask.s6_addr16[7]);
|
|
+
|
|
+ for (i = 0; i < 4; i++) {
|
|
+ src_matching_addr.s6_addr32[i] = src_addr.s6_addr32[i] &
|
|
+ netmask.s6_addr32[i];
|
|
+ dst_matching_addr.s6_addr32[i] = dst_addr.s6_addr32[i] &
|
|
+ netmask.s6_addr32[i];
|
|
+ if (src_matching_addr.s6_addr32[i] !=
|
|
+ dst_matching_addr.s6_addr32[i]) {
|
|
+ /* No match with the prefix mask, use default route */
|
|
+ if (ndpc_request(&nic_iface->ustack, NULL, &addr,
|
|
+ GET_DEFAULT_ROUTER_ADDR)) {
|
|
+ neighbor_retry = MAX_ARP_RETRY;
|
|
+ goto done;
|
|
+ }
|
|
+ if (memcmp(addr, all_zeroes_addr6, sizeof(*addr)))
|
|
+ memcpy(&dst_addr, addr, sizeof(dst_addr));
|
|
+ else {
|
|
+ neighbor_retry = MAX_ARP_RETRY;
|
|
+ goto done;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ LOG_DEBUG(PFX "dst addr %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
|
|
+ dst_addr.s6_addr16[0], dst_addr.s6_addr16[1],
|
|
+ dst_addr.s6_addr16[2], dst_addr.s6_addr16[3],
|
|
+ dst_addr.s6_addr16[4], dst_addr.s6_addr16[5],
|
|
+ dst_addr.s6_addr16[6], dst_addr.s6_addr16[7]);
|
|
+
|
|
+#define MAX_ARP_RETRY 4
|
|
+ neighbor_retry = 0;
|
|
+
|
|
+ req_ptr.eth = (void *)mac_addr;
|
|
+ req_ptr.ipv6 = (void *)&dst_addr;
|
|
+ if (ndpc_request(&nic_iface->ustack, &req_ptr, &rc, CHECK_ARP_TABLE)) {
|
|
+ /* ndpc request failed, skip neighbor solicit send */
|
|
+ neighbor_retry = MAX_ARP_RETRY;
|
|
+ goto done;
|
|
+ }
|
|
+ if (!rc) {
|
|
+ LOG_DEBUG(PFX
|
|
+ "%s: Preparing to send IPv6 neighbor solicitation "
|
|
+ "to dst: '%s'", nic->log_name, addr_dst_str);
|
|
+ while ((neighbor_retry < MAX_ARP_RETRY)
|
|
+ && (event_loop_stop == 0)) {
|
|
+ int count;
|
|
+ struct timespec ts;
|
|
+ struct timeval tp;
|
|
+ struct timeval tp_abs;
|
|
+
|
|
+ LOG_INFO(PFX "%s: Didn't find IPv6: '%s'\n",
|
|
+ nic->log_name, addr_dst_str);
|
|
+
|
|
+ rc = cnic_neigh_soliciation_send(nic, nic_iface, fd,
|
|
+ mac_addr,
|
|
+ &dst_addr,
|
|
+ addr_dst_str);
|
|
+ if (rc != 0) {
|
|
+ status = -EIO;
|
|
+ goto done;
|
|
+ }
|
|
+
|
|
+ for (count = 0; count < 8; count++) {
|
|
+ /* Convert from timeval to timespec */
|
|
+ rc = gettimeofday(&tp, NULL);
|
|
+
|
|
+ timeradd(&tp, &tp_wait, &tp_abs);
|
|
+
|
|
+ ts.tv_sec = tp_abs.tv_sec;
|
|
+ ts.tv_nsec = tp_abs.tv_usec * 1000;
|
|
+
|
|
+ pthread_mutex_unlock(&nic_list_mutex);
|
|
+ rc = pthread_cond_timedwait
|
|
+ (&nl_process_if_down_cond,
|
|
+ &nl_process_mutex, &ts);
|
|
+
|
|
+ if (rc == ETIMEDOUT) {
|
|
+ pthread_mutex_unlock(&nl_process_mutex);
|
|
+
|
|
+ if (pthread_mutex_trylock
|
|
+ (&nic_list_mutex) != 0) {
|
|
+ neighbor_retry = MAX_ARP_RETRY;
|
|
+ goto done;
|
|
+
|
|
+ }
|
|
+
|
|
+ req_ptr.eth = (void *)mac_addr;
|
|
+ req_ptr.ipv6 = (void *)&dst_addr;
|
|
+ if (ndpc_request
|
|
+ (&nic_iface->ustack, &req_ptr, &rc,
|
|
+ CHECK_ARP_TABLE)) {
|
|
+ /* ndpc request failed,
|
|
+ force retry */
|
|
+ rc = 0;
|
|
+ }
|
|
+ if (rc)
|
|
+ goto done;
|
|
+ } else {
|
|
+ nl_process_if_down = 0;
|
|
+ pthread_mutex_unlock(&nl_process_mutex);
|
|
+
|
|
+ neighbor_retry = MAX_ARP_RETRY;
|
|
+ goto done;
|
|
+ }
|
|
+ }
|
|
+ neighbor_retry++;
|
|
+ }
|
|
+ }
|
|
+
|
|
+done:
|
|
+ if (neighbor_retry >= MAX_ARP_RETRY) {
|
|
+ status = -EIO;
|
|
+ rc = -EIO;
|
|
+ }
|
|
+
|
|
+ if (status != 0 || rc != 0)
|
|
+ pthread_mutex_unlock(&nic->xmit_mutex);
|
|
+
|
|
+ cnic_nl_neigh_rsp(nic, fd, ev, path, mac_addr,
|
|
+ nic_iface, status, AF_INET6);
|
|
+
|
|
+ pthread_mutex_unlock(&nic_list_mutex);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * cnic_handle_iscsi_path_req() - This function will handle the path req calls
|
|
+ * the bnx2i kernel module
|
|
+ * @param nic - The nic the message is directed towards
|
|
+ * @param fd - The file descriptor to be used to extract the private data
|
|
+ * @param ev - The iscsi_uevent
|
|
+ * @param buf - The private message buffer
|
|
+ * @param buf_len - The private message buffer length
|
|
+ */
|
|
+int cnic_handle_iscsi_path_req(nic_t * nic, int fd, struct iscsi_uevent *ev,
|
|
+ struct iscsi_path *path)
|
|
+{
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: Netlink message with VLAN ID: %d, path MTU: %d "
|
|
+ "minor: %d ip_addr_len: %d",
|
|
+ nic->log_name, path->vlan_id, path->pmtu, 0 /* TODO FIX */ ,
|
|
+ path->ip_addr_len);
|
|
+
|
|
+ if (path->ip_addr_len == 4)
|
|
+ return cnic_handle_ipv4_iscsi_path_req(nic, fd, ev, path);
|
|
+ else if (path->ip_addr_len == 16)
|
|
+ return cnic_handle_ipv6_iscsi_path_req(nic, fd, ev, path);
|
|
+ else {
|
|
+ LOG_DEBUG(PFX "%s: unknown ip_addr_len: %d size dropping ",
|
|
+ nic->log_name, path->ip_addr_len);
|
|
+ return -EIO;
|
|
+ }
|
|
+}
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/libs/cnic.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/libs/cnic.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/libs/cnic.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/libs/cnic.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,53 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * cnic.h - CNIC UIO uIP user space stack
|
|
+ *
|
|
+ */
|
|
+#ifndef __CNIC_NL_H__
|
|
+#define __CNIC_NL_H__
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Constants shared between the bnx2 and bnx2x modules
|
|
+ ******************************************************************************/
|
|
+extern const char bnx2i_library_transport_name[];
|
|
+extern const size_t bnx2i_library_transport_name_size;
|
|
+
|
|
+int cnic_nl_open();
|
|
+void cnic_nl_close();
|
|
+
|
|
+int cnic_handle_iscsi_path_req(nic_t * nic, int, struct iscsi_uevent *,
|
|
+ struct iscsi_path *path);
|
|
+
|
|
+#endif /* __CNIC_NL_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/libs/Makefile.am open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/libs/Makefile.am
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/libs/Makefile.am 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/libs/Makefile.am 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,12 @@
|
|
+INCLUDES = -I${top_srcdir}/src/uip \
|
|
+ -I${top_srcdir}/src/unix \
|
|
+ -I${top_srcdir}/src/unix/libs \
|
|
+ -I${top_srcdir}/src/apps/dhcpc \
|
|
+ -I${top_srcdir}/include
|
|
+
|
|
+noinst_LIBRARIES = lib_iscsiuio_hw_cnic.a
|
|
+
|
|
+lib_iscsiuio_hw_cnic_a_SOURCES = ../build_date.c \
|
|
+ cnic.c \
|
|
+ bnx2.c \
|
|
+ bnx2x.c
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/libs/Makefile.in open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/libs/Makefile.in
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/libs/Makefile.in 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/libs/Makefile.in 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,449 @@
|
|
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
|
+# @configure_input@
|
|
+
|
|
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
|
+# 2003, 2004, 2005 Free Software Foundation, Inc.
|
|
+# This Makefile.in 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.
|
|
+
|
|
+# This program is distributed in the hope that it will be useful,
|
|
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
|
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
+# PARTICULAR PURPOSE.
|
|
+
|
|
+@SET_MAKE@
|
|
+
|
|
+srcdir = @srcdir@
|
|
+top_srcdir = @top_srcdir@
|
|
+VPATH = @srcdir@
|
|
+pkgdatadir = $(datadir)/@PACKAGE@
|
|
+pkglibdir = $(libdir)/@PACKAGE@
|
|
+pkgincludedir = $(includedir)/@PACKAGE@
|
|
+top_builddir = ../../..
|
|
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
|
+INSTALL = @INSTALL@
|
|
+install_sh_DATA = $(install_sh) -c -m 644
|
|
+install_sh_PROGRAM = $(install_sh) -c
|
|
+install_sh_SCRIPT = $(install_sh) -c
|
|
+INSTALL_HEADER = $(INSTALL_DATA)
|
|
+transform = $(program_transform_name)
|
|
+NORMAL_INSTALL = :
|
|
+PRE_INSTALL = :
|
|
+POST_INSTALL = :
|
|
+NORMAL_UNINSTALL = :
|
|
+PRE_UNINSTALL = :
|
|
+POST_UNINSTALL = :
|
|
+build_triplet = @build@
|
|
+host_triplet = @host@
|
|
+subdir = src/unix/libs
|
|
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
|
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
|
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
|
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
|
+ $(ACLOCAL_M4)
|
|
+mkinstalldirs = $(install_sh) -d
|
|
+CONFIG_HEADER = $(top_builddir)/config.h
|
|
+CONFIG_CLEAN_FILES =
|
|
+LIBRARIES = $(noinst_LIBRARIES)
|
|
+ARFLAGS = cru
|
|
+lib_iscsiuio_hw_cnic_a_AR = $(AR) $(ARFLAGS)
|
|
+lib_iscsiuio_hw_cnic_a_LIBADD =
|
|
+am_lib_iscsiuio_hw_cnic_a_OBJECTS = build_date.$(OBJEXT) \
|
|
+ cnic.$(OBJEXT) bnx2.$(OBJEXT) bnx2x.$(OBJEXT)
|
|
+lib_iscsiuio_hw_cnic_a_OBJECTS = $(am_lib_iscsiuio_hw_cnic_a_OBJECTS)
|
|
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
|
+depcomp = $(SHELL) $(top_srcdir)/depcomp
|
|
+am__depfiles_maybe = depfiles
|
|
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
|
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
|
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
|
|
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
|
+ $(AM_CFLAGS) $(CFLAGS)
|
|
+CCLD = $(CC)
|
|
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
|
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
|
+SOURCES = $(lib_iscsiuio_hw_cnic_a_SOURCES)
|
|
+DIST_SOURCES = $(lib_iscsiuio_hw_cnic_a_SOURCES)
|
|
+ETAGS = etags
|
|
+CTAGS = ctags
|
|
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
|
+ACLOCAL = @ACLOCAL@
|
|
+AMDEP_FALSE = @AMDEP_FALSE@
|
|
+AMDEP_TRUE = @AMDEP_TRUE@
|
|
+AMTAR = @AMTAR@
|
|
+AR = @AR@
|
|
+AUTOCONF = @AUTOCONF@
|
|
+AUTOHEADER = @AUTOHEADER@
|
|
+AUTOMAKE = @AUTOMAKE@
|
|
+AWK = @AWK@
|
|
+BASH = @BASH@
|
|
+CC = @CC@
|
|
+CCDEPMODE = @CCDEPMODE@
|
|
+CFLAGS = @CFLAGS@
|
|
+CPP = @CPP@
|
|
+CPPFLAGS = @CPPFLAGS@
|
|
+CXX = @CXX@
|
|
+CXXCPP = @CXXCPP@
|
|
+CXXDEPMODE = @CXXDEPMODE@
|
|
+CXXFLAGS = @CXXFLAGS@
|
|
+CYGPATH_W = @CYGPATH_W@
|
|
+DEBUG_FALSE = @DEBUG_FALSE@
|
|
+DEBUG_TRUE = @DEBUG_TRUE@
|
|
+DEFS = @DEFS@
|
|
+DEPDIR = @DEPDIR@
|
|
+ECHO = @ECHO@
|
|
+ECHO_C = @ECHO_C@
|
|
+ECHO_N = @ECHO_N@
|
|
+ECHO_T = @ECHO_T@
|
|
+EGREP = @EGREP@
|
|
+ENDIAN = @ENDIAN@
|
|
+EXEEXT = @EXEEXT@
|
|
+F77 = @F77@
|
|
+FFLAGS = @FFLAGS@
|
|
+INSTALL_DATA = @INSTALL_DATA@
|
|
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
|
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
|
+LDFLAGS = @LDFLAGS@
|
|
+LIBOBJS = @LIBOBJS@
|
|
+LIBS = @LIBS@
|
|
+LIBTOOL = @LIBTOOL@
|
|
+LN_S = @LN_S@
|
|
+LTLIBOBJS = @LTLIBOBJS@
|
|
+MAKEINFO = @MAKEINFO@
|
|
+OBJEXT = @OBJEXT@
|
|
+PACKAGE = @PACKAGE@
|
|
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
|
+PACKAGE_NAME = @PACKAGE_NAME@
|
|
+PACKAGE_STRING = @PACKAGE_STRING@
|
|
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
|
+PACKAGE_VERSION = @PACKAGE_VERSION@
|
|
+PATH_SEPARATOR = @PATH_SEPARATOR@
|
|
+RANLIB = @RANLIB@
|
|
+SED = @SED@
|
|
+SET_MAKE = @SET_MAKE@
|
|
+SHELL = @SHELL@
|
|
+STRIP = @STRIP@
|
|
+VERSION = @VERSION@
|
|
+ac_ct_AR = @ac_ct_AR@
|
|
+ac_ct_CC = @ac_ct_CC@
|
|
+ac_ct_CXX = @ac_ct_CXX@
|
|
+ac_ct_F77 = @ac_ct_F77@
|
|
+ac_ct_RANLIB = @ac_ct_RANLIB@
|
|
+ac_ct_STRIP = @ac_ct_STRIP@
|
|
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
|
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
|
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
|
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
|
+am__include = @am__include@
|
|
+am__leading_dot = @am__leading_dot@
|
|
+am__quote = @am__quote@
|
|
+am__tar = @am__tar@
|
|
+am__untar = @am__untar@
|
|
+bindir = @bindir@
|
|
+build = @build@
|
|
+build_alias = @build_alias@
|
|
+build_cpu = @build_cpu@
|
|
+build_os = @build_os@
|
|
+build_vendor = @build_vendor@
|
|
+datadir = @datadir@
|
|
+exec_prefix = @exec_prefix@
|
|
+host = @host@
|
|
+host_alias = @host_alias@
|
|
+host_cpu = @host_cpu@
|
|
+host_os = @host_os@
|
|
+host_vendor = @host_vendor@
|
|
+includedir = @includedir@
|
|
+infodir = @infodir@
|
|
+install_sh = @install_sh@
|
|
+libdir = @libdir@
|
|
+libexecdir = @libexecdir@
|
|
+localstatedir = @localstatedir@
|
|
+mandir = @mandir@
|
|
+mkdir_p = @mkdir_p@
|
|
+oldincludedir = @oldincludedir@
|
|
+prefix = @prefix@
|
|
+program_transform_name = @program_transform_name@
|
|
+sbindir = @sbindir@
|
|
+sharedstatedir = @sharedstatedir@
|
|
+sysconfdir = @sysconfdir@
|
|
+target_alias = @target_alias@
|
|
+INCLUDES = -I${top_srcdir}/src/uip \
|
|
+ -I${top_srcdir}/src/unix \
|
|
+ -I${top_srcdir}/src/unix/libs \
|
|
+ -I${top_srcdir}/src/apps/dhcpc \
|
|
+ -I${top_srcdir}/include
|
|
+
|
|
+noinst_LIBRARIES = lib_iscsiuio_hw_cnic.a
|
|
+lib_iscsiuio_hw_cnic_a_SOURCES = ../build_date.c \
|
|
+ cnic.c \
|
|
+ bnx2.c \
|
|
+ bnx2x.c
|
|
+
|
|
+all: all-am
|
|
+
|
|
+.SUFFIXES:
|
|
+.SUFFIXES: .c .lo .o .obj
|
|
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
|
+ @for dep in $?; do \
|
|
+ case '$(am__configure_deps)' in \
|
|
+ *$$dep*) \
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
|
+ && exit 0; \
|
|
+ exit 1;; \
|
|
+ esac; \
|
|
+ done; \
|
|
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/unix/libs/Makefile'; \
|
|
+ cd $(top_srcdir) && \
|
|
+ $(AUTOMAKE) --gnu src/unix/libs/Makefile
|
|
+.PRECIOUS: Makefile
|
|
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
|
+ @case '$?' in \
|
|
+ *config.status*) \
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
|
+ *) \
|
|
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
|
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
|
+ esac;
|
|
+
|
|
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+
|
|
+$(top_srcdir)/configure: $(am__configure_deps)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+
|
|
+clean-noinstLIBRARIES:
|
|
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
|
|
+lib_iscsiuio_hw_cnic.a: $(lib_iscsiuio_hw_cnic_a_OBJECTS) $(lib_iscsiuio_hw_cnic_a_DEPENDENCIES)
|
|
+ -rm -f lib_iscsiuio_hw_cnic.a
|
|
+ $(lib_iscsiuio_hw_cnic_a_AR) lib_iscsiuio_hw_cnic.a $(lib_iscsiuio_hw_cnic_a_OBJECTS) $(lib_iscsiuio_hw_cnic_a_LIBADD)
|
|
+ $(RANLIB) lib_iscsiuio_hw_cnic.a
|
|
+
|
|
+mostlyclean-compile:
|
|
+ -rm -f *.$(OBJEXT)
|
|
+
|
|
+distclean-compile:
|
|
+ -rm -f *.tab.c
|
|
+
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bnx2.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bnx2x.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/build_date.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cnic.Po@am__quote@
|
|
+
|
|
+.c.o:
|
|
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
|
|
+
|
|
+.c.obj:
|
|
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
|
|
+
|
|
+.c.lo:
|
|
+@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
|
|
+
|
|
+build_date.o: ../build_date.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT build_date.o -MD -MP -MF "$(DEPDIR)/build_date.Tpo" -c -o build_date.o `test -f '../build_date.c' || echo '$(srcdir)/'`../build_date.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/build_date.Tpo" "$(DEPDIR)/build_date.Po"; else rm -f "$(DEPDIR)/build_date.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../build_date.c' object='build_date.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o build_date.o `test -f '../build_date.c' || echo '$(srcdir)/'`../build_date.c
|
|
+
|
|
+build_date.obj: ../build_date.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT build_date.obj -MD -MP -MF "$(DEPDIR)/build_date.Tpo" -c -o build_date.obj `if test -f '../build_date.c'; then $(CYGPATH_W) '../build_date.c'; else $(CYGPATH_W) '$(srcdir)/../build_date.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/build_date.Tpo" "$(DEPDIR)/build_date.Po"; else rm -f "$(DEPDIR)/build_date.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../build_date.c' object='build_date.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o build_date.obj `if test -f '../build_date.c'; then $(CYGPATH_W) '../build_date.c'; else $(CYGPATH_W) '$(srcdir)/../build_date.c'; fi`
|
|
+
|
|
+mostlyclean-libtool:
|
|
+ -rm -f *.lo
|
|
+
|
|
+clean-libtool:
|
|
+ -rm -rf .libs _libs
|
|
+
|
|
+distclean-libtool:
|
|
+ -rm -f libtool
|
|
+uninstall-info-am:
|
|
+
|
|
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ mkid -fID $$unique
|
|
+tags: TAGS
|
|
+
|
|
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
|
+ $(TAGS_FILES) $(LISP)
|
|
+ tags=; \
|
|
+ here=`pwd`; \
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
|
+ test -n "$$unique" || unique=$$empty_fix; \
|
|
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
|
+ $$tags $$unique; \
|
|
+ fi
|
|
+ctags: CTAGS
|
|
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
|
+ $(TAGS_FILES) $(LISP)
|
|
+ tags=; \
|
|
+ here=`pwd`; \
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
|
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
|
+ $$tags $$unique
|
|
+
|
|
+GTAGS:
|
|
+ here=`$(am__cd) $(top_builddir) && pwd` \
|
|
+ && cd $(top_srcdir) \
|
|
+ && gtags -i $(GTAGS_ARGS) $$here
|
|
+
|
|
+distclean-tags:
|
|
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
|
+
|
|
+distdir: $(DISTFILES)
|
|
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
|
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
|
+ list='$(DISTFILES)'; for file in $$list; do \
|
|
+ case $$file in \
|
|
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
|
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
|
+ esac; \
|
|
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
|
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
|
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
|
+ dir="/$$dir"; \
|
|
+ $(mkdir_p) "$(distdir)$$dir"; \
|
|
+ else \
|
|
+ dir=''; \
|
|
+ fi; \
|
|
+ if test -d $$d/$$file; then \
|
|
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
|
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
|
+ fi; \
|
|
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
|
+ else \
|
|
+ test -f $(distdir)/$$file \
|
|
+ || cp -p $$d/$$file $(distdir)/$$file \
|
|
+ || exit 1; \
|
|
+ fi; \
|
|
+ done
|
|
+check-am: all-am
|
|
+check: check-am
|
|
+all-am: Makefile $(LIBRARIES)
|
|
+installdirs:
|
|
+install: install-am
|
|
+install-exec: install-exec-am
|
|
+install-data: install-data-am
|
|
+uninstall: uninstall-am
|
|
+
|
|
+install-am: all-am
|
|
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
|
+
|
|
+installcheck: installcheck-am
|
|
+install-strip:
|
|
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
|
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
|
+ `test -z '$(STRIP)' || \
|
|
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
|
+mostlyclean-generic:
|
|
+
|
|
+clean-generic:
|
|
+
|
|
+distclean-generic:
|
|
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
|
+
|
|
+maintainer-clean-generic:
|
|
+ @echo "This command is intended for maintainers to use"
|
|
+ @echo "it deletes files that may require special tools to rebuild."
|
|
+clean: clean-am
|
|
+
|
|
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
|
|
+ mostlyclean-am
|
|
+
|
|
+distclean: distclean-am
|
|
+ -rm -rf ./$(DEPDIR)
|
|
+ -rm -f Makefile
|
|
+distclean-am: clean-am distclean-compile distclean-generic \
|
|
+ distclean-libtool distclean-tags
|
|
+
|
|
+dvi: dvi-am
|
|
+
|
|
+dvi-am:
|
|
+
|
|
+html: html-am
|
|
+
|
|
+info: info-am
|
|
+
|
|
+info-am:
|
|
+
|
|
+install-data-am:
|
|
+
|
|
+install-exec-am:
|
|
+
|
|
+install-info: install-info-am
|
|
+
|
|
+install-man:
|
|
+
|
|
+installcheck-am:
|
|
+
|
|
+maintainer-clean: maintainer-clean-am
|
|
+ -rm -rf ./$(DEPDIR)
|
|
+ -rm -f Makefile
|
|
+maintainer-clean-am: distclean-am maintainer-clean-generic
|
|
+
|
|
+mostlyclean: mostlyclean-am
|
|
+
|
|
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
|
+ mostlyclean-libtool
|
|
+
|
|
+pdf: pdf-am
|
|
+
|
|
+pdf-am:
|
|
+
|
|
+ps: ps-am
|
|
+
|
|
+ps-am:
|
|
+
|
|
+uninstall-am: uninstall-info-am
|
|
+
|
|
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
|
+ clean-libtool clean-noinstLIBRARIES ctags distclean \
|
|
+ distclean-compile distclean-generic distclean-libtool \
|
|
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
|
|
+ install install-am install-data install-data-am install-exec \
|
|
+ install-exec-am install-info install-info-am install-man \
|
|
+ install-strip installcheck installcheck-am installdirs \
|
|
+ maintainer-clean maintainer-clean-generic mostlyclean \
|
|
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
|
|
+ pdf pdf-am ps ps-am tags uninstall uninstall-am \
|
|
+ uninstall-info-am
|
|
+
|
|
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
|
+# Otherwise a system limit (for SysV at least) may be exceeded.
|
|
+.NOEXPORT:
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/logger.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/logger.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/logger.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/logger.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,181 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * logger.c - Logging Utilities
|
|
+ *
|
|
+ */
|
|
+#include <errno.h>
|
|
+#include <string.h>
|
|
+#include <time.h>
|
|
+#include <stdarg.h>
|
|
+#include <stdlib.h>
|
|
+
|
|
+#include "options.h"
|
|
+#include "logger.h"
|
|
+
|
|
+/******************************************************************************
|
|
+ * Default logger values
|
|
+ ******************************************************************************/
|
|
+static const char default_logger_filename[] = "/var/log/iscsiuio.log";
|
|
+
|
|
+struct logger main_log = {
|
|
+ .enabled = LOGGER_ENABLED,
|
|
+ .fp = NULL,
|
|
+ .log_file = (char *)default_logger_filename,
|
|
+ .level = LOG_LEVEL_INFO,
|
|
+ .lock = PTHREAD_MUTEX_INITIALIZER,
|
|
+
|
|
+ .stats = {
|
|
+ .debug = 0,
|
|
+ .info = 0,
|
|
+ .warn = 0,
|
|
+ .error = 0,
|
|
+
|
|
+ .last_log_time = 0,
|
|
+ },
|
|
+};
|
|
+
|
|
+/******************************************************************************
|
|
+ * Logger Functions
|
|
+ ******************************************************************************/
|
|
+/**
|
|
+ * log_uip() - Main logging function
|
|
+ * @param level_str - log level string
|
|
+ * @param fmt - log format
|
|
+ */
|
|
+void log_uip(char *level_str, char *fmt, ...)
|
|
+{
|
|
+ char time_buf[32];
|
|
+ va_list ap, ap2;
|
|
+
|
|
+ pthread_mutex_lock(&main_log.lock);
|
|
+ va_start(ap, fmt);
|
|
+
|
|
+ if (main_log.fp == NULL) {
|
|
+ goto end;
|
|
+ }
|
|
+
|
|
+ main_log.stats.last_log_time = time(NULL);
|
|
+ strftime(time_buf, 26, "%a %b %d %T %Y",
|
|
+ localtime(&main_log.stats.last_log_time));
|
|
+ va_copy(ap2, ap);
|
|
+
|
|
+ if (main_log.enabled == LOGGER_ENABLED) {
|
|
+ fprintf(main_log.fp, "%s [%s]", level_str, time_buf);
|
|
+ vfprintf(main_log.fp, fmt, ap);
|
|
+ fprintf(main_log.fp, "\n");
|
|
+ }
|
|
+
|
|
+ if (opt.debug == DEBUG_ON) {
|
|
+ fprintf(stdout, "%s [%s]", level_str, time_buf);
|
|
+ vfprintf(stdout, fmt, ap2);
|
|
+ fprintf(stdout, "\n");
|
|
+
|
|
+ /* Force the printing of the log file */
|
|
+ fflush(main_log.fp);
|
|
+
|
|
+ /* Force the printing of the log out to standard output */
|
|
+ fflush(stdout);
|
|
+ }
|
|
+
|
|
+end:
|
|
+ va_end(ap2);
|
|
+ va_end(ap);
|
|
+ pthread_mutex_unlock(&main_log.lock);
|
|
+}
|
|
+
|
|
+/******************************************************************************
|
|
+ * Initialize/Clean up routines
|
|
+ ******************************************************************************/
|
|
+/**
|
|
+ * init_logger() - Prepare the logger
|
|
+ * @param filename - path to where the log will be written to
|
|
+ * @return 0 on success, <0 on failure
|
|
+ */
|
|
+int init_logger(char *filename)
|
|
+{
|
|
+ int rc = 0;
|
|
+
|
|
+ pthread_mutex_lock(&main_log.lock);
|
|
+
|
|
+ if (opt.debug != DEBUG_ON) {
|
|
+ rc = -EIO;
|
|
+ goto disable;
|
|
+ }
|
|
+ main_log.fp = fopen(filename, "a");
|
|
+ if (main_log.fp == NULL) {
|
|
+ printf("Could not create log file: %s <%s>\n",
|
|
+ filename, strerror(errno));
|
|
+ rc = -EIO;
|
|
+ }
|
|
+disable:
|
|
+ if (rc)
|
|
+ main_log.enabled = LOGGER_DISABLED;
|
|
+ else
|
|
+ main_log.enabled = LOGGER_ENABLED;
|
|
+
|
|
+ pthread_mutex_unlock(&main_log.lock);
|
|
+
|
|
+ if (!rc)
|
|
+ LOG_INFO("Initialize logger using log file: %s", filename);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+void fini_logger(int type)
|
|
+{
|
|
+ pthread_mutex_lock(&main_log.lock);
|
|
+
|
|
+ if (main_log.fp != NULL) {
|
|
+ fclose(main_log.fp);
|
|
+ main_log.fp = NULL;
|
|
+
|
|
+ if (opt.debug == DEBUG_ON) {
|
|
+ printf("Closed logger\n");
|
|
+ fflush(stdout);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (type == SHUTDOWN_LOGGER) {
|
|
+ if ((main_log.log_file != NULL) &&
|
|
+ (main_log.log_file != default_logger_filename)) {
|
|
+ free(main_log.log_file);
|
|
+ main_log.log_file = NULL;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ main_log.enabled = LOGGER_DISABLED;
|
|
+
|
|
+ pthread_mutex_unlock(&main_log.lock);
|
|
+}
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/logger.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/logger.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/logger.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/logger.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,128 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * logger.h - Logging Utilities
|
|
+ *
|
|
+ */
|
|
+#ifndef __LOGGER_H__
|
|
+#define __LOGGER_H__
|
|
+
|
|
+#include <pthread.h>
|
|
+#include <stdio.h>
|
|
+#include <time.h>
|
|
+#include <stdint.h>
|
|
+#include <sys/types.h>
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Logger Levels
|
|
+ ******************************************************************************/
|
|
+#define LOG_LEVEL_PACKET 5
|
|
+#define LOG_LEVEL_DEBUG 4
|
|
+#define LOG_LEVEL_INFO 3
|
|
+#define LOG_LEVEL_WARN 2
|
|
+#define LOG_LEVEL_ERR 1
|
|
+#define LOG_LEVEL_UNKNOWN 0
|
|
+
|
|
+#define LOG_LEVEL_PACKET_STR "PKT "
|
|
+#define LOG_LEVEL_DEBUG_STR "DBG "
|
|
+#define LOG_LEVEL_INFO_STR "INFO "
|
|
+#define LOG_LEVEL_WARN_STR "WARN "
|
|
+#define LOG_LEVEL_ERR_STR "ERR "
|
|
+#define LOG_LEVEL_UNKNOWN_STR "? "
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Logging Macro's
|
|
+ ******************************************************************************/
|
|
+#define LOG_PACKET(fmt, args...) { if (LOG_LEVEL_PACKET <= \
|
|
+ main_log.level) { \
|
|
+ log_uip(LOG_LEVEL_PACKET_STR, fmt,\
|
|
+ ##args);\
|
|
+ } }
|
|
+#define LOG_DEBUG(fmt, args...) { if (LOG_LEVEL_DEBUG <= main_log.level) { \
|
|
+ log_uip(LOG_LEVEL_DEBUG_STR, fmt,\
|
|
+ ##args);\
|
|
+ } }
|
|
+
|
|
+#define LOG_INFO(fmt, args...) { if (LOG_LEVEL_INFO <= main_log.level) { \
|
|
+ log_uip(LOG_LEVEL_INFO_STR, fmt,\
|
|
+ ##args); \
|
|
+ } }
|
|
+#define LOG_WARN(fmt, args...) { if (LOG_LEVEL_WARN <= main_log.level) { \
|
|
+ log_uip(LOG_LEVEL_WARN_STR, fmt,\
|
|
+ ##args); \
|
|
+ } }
|
|
+#define LOG_ERR(fmt, args...) { if (LOG_LEVEL_ERR <= main_log.level) { \
|
|
+ log_uip(LOG_LEVEL_ERR_STR, fmt,\
|
|
+ ##args); \
|
|
+ } }
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Logging Statistics
|
|
+ ******************************************************************************/
|
|
+struct logger_stats {
|
|
+ uint64_t debug;
|
|
+ uint64_t info;
|
|
+ uint64_t warn;
|
|
+ uint64_t error;
|
|
+
|
|
+ time_t last_log_time;
|
|
+};
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Logger Structure
|
|
+ ******************************************************************************/
|
|
+struct logger {
|
|
+ FILE *fp;
|
|
+ char *log_file;
|
|
+ int8_t level;
|
|
+
|
|
+#define LOGGER_ENABLED 0x01
|
|
+#define LOGGER_DISABLED 0x02
|
|
+ int8_t enabled;
|
|
+
|
|
+ pthread_mutex_t lock;
|
|
+
|
|
+ struct logger_stats stats;
|
|
+};
|
|
+
|
|
+extern struct logger main_log;
|
|
+
|
|
+int init_logger(char *);
|
|
+void log_uip(char *level_str, char *fmt, ...);
|
|
+void fini_logger(int);
|
|
+
|
|
+#define CLOSE_LOGGER 0x01
|
|
+#define SHUTDOWN_LOGGER 0x02
|
|
+
|
|
+#endif
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/main.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/main.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/main.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/main.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,402 @@
|
|
+/*
|
|
+ * Copyright (c) 2001, Adam Dunkels.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack.
|
|
+ *
|
|
+ * $Id: main.c,v 1.16 2006/06/11 21:55:03 adam Exp $
|
|
+ *
|
|
+ */
|
|
+
|
|
+#include <dlfcn.h>
|
|
+#include <errno.h>
|
|
+#include <fcntl.h>
|
|
+#include <string.h>
|
|
+#include <signal.h>
|
|
+#include <stdlib.h>
|
|
+#include <getopt.h>
|
|
+#include <unistd.h>
|
|
+#include <sys/types.h>
|
|
+#include <sys/stat.h>
|
|
+#include <sys/utsname.h>
|
|
+#include <net/ethernet.h>
|
|
+#include <arpa/inet.h>
|
|
+#include <sys/mman.h>
|
|
+
|
|
+#include "uip.h"
|
|
+#include "uip_arp.h"
|
|
+#include "uip_eth.h"
|
|
+
|
|
+#include "timer.h"
|
|
+
|
|
+#include "build_date.h"
|
|
+#include "config.h"
|
|
+#include "iscsid_ipc.h"
|
|
+#include "logger.h"
|
|
+#include "nic.h"
|
|
+#include "nic_id.h"
|
|
+#include "nic_nl.h"
|
|
+#include "nic_utils.h"
|
|
+#include "options.h"
|
|
+#include "packet.h"
|
|
+
|
|
+#include "dhcpc.h"
|
|
+
|
|
+#include "iscsid_ipc.h"
|
|
+#include "brcm_iscsi.h"
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Constants
|
|
+ ******************************************************************************/
|
|
+#define PFX "main "
|
|
+
|
|
+static char default_pid_filepath[] = "/var/run/iscsiuio.pid";
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Global Variables
|
|
+ ******************************************************************************/
|
|
+static const struct option long_options[] = {
|
|
+ {"debug", 0, 0, 0},
|
|
+ {"version", 0, 0, 0},
|
|
+ {"help", 0, 0, 0},
|
|
+ {0, 0, 0, 0}
|
|
+};
|
|
+
|
|
+struct options opt = {
|
|
+ .debug = DEBUG_OFF,
|
|
+};
|
|
+
|
|
+int event_loop_stop = 0;
|
|
+
|
|
+struct utsname cur_utsname;
|
|
+
|
|
+/**
|
|
+ * cleanup() - This function is called when this program is to be closed
|
|
+ * This function will clean up all the cnic uio interfaces and
|
|
+ * flush/close the logger
|
|
+ */
|
|
+static void cleanup()
|
|
+{
|
|
+ iscsid_cleanup();
|
|
+
|
|
+ nic_remove_all();
|
|
+
|
|
+ unload_all_nic_libraries();
|
|
+
|
|
+ LOG_INFO("Done waiting for cnic's/stacks to gracefully close");
|
|
+
|
|
+ fini_logger(SHUTDOWN_LOGGER);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * signal_handle_thread() - This is the signal handling thread of this program
|
|
+ * This is the only thread which will handle signals.
|
|
+ * All signals are routed here and handled here to
|
|
+ * provide consistant handling.
|
|
+ */
|
|
+static pthread_t signal_thread;
|
|
+static void *signal_handle_thread(void *arg)
|
|
+{
|
|
+ sigset_t set;
|
|
+ int rc;
|
|
+ int signal;
|
|
+
|
|
+ sigfillset(&set);
|
|
+
|
|
+ LOG_INFO("signal handling thread ready");
|
|
+
|
|
+signal_wait:
|
|
+ rc = sigwait(&set, &signal);
|
|
+
|
|
+ switch (signal) {
|
|
+ case SIGINT:
|
|
+ LOG_INFO("Caught SIGINT signal");
|
|
+ break;
|
|
+ case SIGUSR1:
|
|
+ LOG_INFO("Caught SIGUSR1 signal, rotate log");
|
|
+retry:
|
|
+ fini_logger(SHUTDOWN_LOGGER);
|
|
+ rc = init_logger(main_log.log_file);
|
|
+ if (rc != 0)
|
|
+ printf("Could not initialize the logger in "
|
|
+ "signal!\n");
|
|
+ goto signal_wait;
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
+ event_loop_stop = 1;
|
|
+
|
|
+ LOG_INFO("terminating...");
|
|
+
|
|
+ cleanup();
|
|
+ exit(EXIT_SUCCESS);
|
|
+}
|
|
+
|
|
+static void show_version()
|
|
+{
|
|
+ printf("%s: Version '%s', Build Date: '%s'\n",
|
|
+ APP_NAME, PACKAGE_VERSION, build_date);
|
|
+}
|
|
+
|
|
+static void main_usage()
|
|
+{
|
|
+ show_version();
|
|
+
|
|
+ printf("\nUsage: %s [OPTION]\n", APP_NAME);
|
|
+ printf("\
|
|
+iscsiuio daemon.\n\
|
|
+ -f, --foreground make the program run in the foreground\n\
|
|
+ -d, --debug debuglevel print debugging information\n\
|
|
+ -p, --pid=pidfile use pid file (default %s).\n\
|
|
+ -h, --help display this help and exit\n\
|
|
+ -v, --version display version and exit\n\
|
|
+", default_pid_filepath);
|
|
+}
|
|
+
|
|
+static void daemon_init()
|
|
+{
|
|
+ int fd;
|
|
+ int rc;
|
|
+
|
|
+ fd = open("/dev/null", O_RDWR);
|
|
+ if (fd == -1) {
|
|
+ exit(-1);
|
|
+ }
|
|
+
|
|
+ dup2(fd, 0);
|
|
+ dup2(fd, 1);
|
|
+ dup2(fd, 2);
|
|
+ setsid();
|
|
+ rc = chdir("/");
|
|
+}
|
|
+
|
|
+#define ISCSI_OOM_PATH_LEN 48
|
|
+
|
|
+int oom_adjust(void)
|
|
+{
|
|
+ int fd;
|
|
+ char path[ISCSI_OOM_PATH_LEN];
|
|
+ struct stat statb;
|
|
+
|
|
+ if (nice(-10) < 0)
|
|
+ LOG_DEBUG("Could not increase process priority: %s",
|
|
+ strerror(errno));
|
|
+
|
|
+ snprintf(path, ISCSI_OOM_PATH_LEN, "/proc/%d/oom_score_adj", getpid());
|
|
+ if (stat(path, &statb)) {
|
|
+ /* older kernel so use old oom_adj file */
|
|
+ snprintf(path, ISCSI_OOM_PATH_LEN, "/proc/%d/oom_adj",
|
|
+ getpid());
|
|
+ }
|
|
+ fd = open(path, O_WRONLY);
|
|
+ if (fd < 0)
|
|
+ return -1;
|
|
+ if (write(fd, "-16", 3) < 0) /* for 2.6.11 */
|
|
+ LOG_DEBUG("Could not set oom score to -16: %s",
|
|
+ strerror(errno));
|
|
+ if (write(fd, "-17", 3) < 0) /* for Andrea's patch */
|
|
+ LOG_DEBUG("Could not set oom score to -17: %s",
|
|
+ strerror(errno));
|
|
+ close(fd);
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Main routine
|
|
+ ******************************************************************************/
|
|
+int main(int argc, char *argv[])
|
|
+{
|
|
+ int rc;
|
|
+ sigset_t set;
|
|
+ char *pid_file = default_pid_filepath;
|
|
+ int fd;
|
|
+ int foreground = 0;
|
|
+ pid_t pid;
|
|
+
|
|
+ /* Record the start time for the user space daemon */
|
|
+ opt.start_time = time(NULL);
|
|
+
|
|
+ /* parse the parameters */
|
|
+ while (1) {
|
|
+ int c, option_index;
|
|
+
|
|
+ c = getopt_long(argc, argv, "fd:p:vh",
|
|
+ long_options, &option_index);
|
|
+
|
|
+ if (c == -1)
|
|
+ break;
|
|
+
|
|
+ switch (c) {
|
|
+
|
|
+ case 'f':
|
|
+ foreground = 1;
|
|
+ break;
|
|
+
|
|
+ /* Enable debugging mode */
|
|
+ case 'd':
|
|
+ main_log.level = atoi(optarg);
|
|
+ opt.debug = DEBUG_ON;
|
|
+ break;
|
|
+ case 'p':
|
|
+ pid_file = optarg;
|
|
+ break;
|
|
+ case 'v':
|
|
+ show_version();
|
|
+ exit(EXIT_SUCCESS);
|
|
+ case 'h':
|
|
+ default:
|
|
+ main_usage();
|
|
+ exit(EXIT_SUCCESS);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (main_log.enabled == LOGGER_ENABLED) {
|
|
+ /* initialize the logger */
|
|
+ rc = init_logger(main_log.log_file);
|
|
+ if (rc != 0 && opt.debug == DEBUG_ON)
|
|
+ printf("WARN: Could not initialize the logger\n");
|
|
+ }
|
|
+
|
|
+ LOG_INFO("Started iSCSI uio stack: Ver " PACKAGE_VERSION);
|
|
+ LOG_INFO("Build date: %s", build_date);
|
|
+
|
|
+ if (opt.debug == DEBUG_ON) {
|
|
+ LOG_INFO("Debug mode enabled");
|
|
+ }
|
|
+
|
|
+ /* Determine the current kernel version */
|
|
+ memset(&cur_utsname, 0, sizeof(cur_utsname));
|
|
+
|
|
+ rc = uname(&cur_utsname);
|
|
+ if (rc == 0) {
|
|
+ LOG_INFO("Running on sysname: '%s', release: '%s', "
|
|
+ "version '%s' machine: '%s'",
|
|
+ cur_utsname.sysname, cur_utsname.release,
|
|
+ cur_utsname.version, cur_utsname.machine);
|
|
+ } else
|
|
+ LOG_WARN("Could not determine kernel version");
|
|
+
|
|
+ /* Initialze the iscsid listener */
|
|
+ rc = iscsid_init();
|
|
+ if (rc != 0) {
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ if (!foreground) {
|
|
+ char buf[64];
|
|
+ ssize_t written_bytes;
|
|
+
|
|
+ fd = open(pid_file, O_WRONLY | O_CREAT, 0644);
|
|
+ if (fd < 0) {
|
|
+ printf("Unable to create pid file: %s", pid_file);
|
|
+ exit(1);
|
|
+ }
|
|
+
|
|
+ pid = fork();
|
|
+ if (pid < 0) {
|
|
+ printf("Starting daemon failed");
|
|
+ exit(1);
|
|
+ } else if (pid) {
|
|
+ exit(0);
|
|
+ }
|
|
+
|
|
+ rc = chdir("/");
|
|
+ if (rc == -1)
|
|
+ printf("Unable to chdir(\") [%s]", strerror(errno));
|
|
+
|
|
+ if (lockf(fd, F_TLOCK, 0) < 0) {
|
|
+ printf("Unable to lock pid file: %s [%s]",
|
|
+ pid_file, strerror(errno));
|
|
+ exit(1);
|
|
+ }
|
|
+
|
|
+ rc = ftruncate(fd, 0);
|
|
+ if (rc == -1)
|
|
+ printf("ftruncate(%d, 0) failed [%s]",
|
|
+ fd, strerror(errno));
|
|
+
|
|
+ sprintf(buf, "%d\n", getpid());
|
|
+ written_bytes = write(fd, buf, strlen(buf));
|
|
+ if (written_bytes == -1)
|
|
+ printf("Could not write lock file [%s]",
|
|
+ strerror(errno));
|
|
+
|
|
+ daemon_init();
|
|
+ }
|
|
+
|
|
+ /* Load the NIC libraries */
|
|
+ rc = load_all_nic_libraries();
|
|
+ if (rc != 0) {
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ brcm_iscsi_init();
|
|
+
|
|
+ /* ensure we don't see any signals */
|
|
+ sigemptyset(&set);
|
|
+ sigaddset(&set, SIGINT);
|
|
+ sigaddset(&set, SIGQUIT);
|
|
+ sigaddset(&set, SIGTERM);
|
|
+ sigaddset(&set, SIGUSR1);
|
|
+ rc = pthread_sigmask(SIG_SETMASK, &set, NULL);
|
|
+
|
|
+ /* Spin off the signal handling thread */
|
|
+ rc = pthread_create(&signal_thread, NULL, signal_handle_thread, NULL);
|
|
+ if (rc != 0) {
|
|
+ LOG_ERR("Could not create signal handling thread");
|
|
+ }
|
|
+
|
|
+ /* Using sysfs to discover iSCSI hosts */
|
|
+ nic_discover_iscsi_hosts();
|
|
+
|
|
+ /* oom-killer will not kill us at the night... */
|
|
+ if (oom_adjust())
|
|
+ LOG_DEBUG("Can not adjust oom-killer's pardon");
|
|
+
|
|
+ /* we don't want our active sessions to be paged out... */
|
|
+ if (mlockall(MCL_CURRENT | MCL_FUTURE)) {
|
|
+ LOG_ERR("failed to mlockall, exiting...");
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ /* Start the iscsid listener */
|
|
+ rc = iscsid_start();
|
|
+ if (rc != 0) {
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ /* NetLink connection to listen to NETLINK_ISCSI private messages */
|
|
+ nic_nl_open();
|
|
+
|
|
+error:
|
|
+ cleanup();
|
|
+ exit(EXIT_FAILURE);
|
|
+}
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/Makefile.am open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/Makefile.am
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/Makefile.am 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/Makefile.am 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,38 @@
|
|
+SUBDIRS= libs
|
|
+
|
|
+INCLUDES = -I${top_srcdir}/src/uip \
|
|
+ -I${top_srcdir}/src/apps/brcm-iscsi \
|
|
+ -I${top_srcdir}/src/apps/dhcpc \
|
|
+ -I${top_srcdir}/include \
|
|
+ -I${top_srcdir}/src/unix/libs/
|
|
+
|
|
+sbin_PROGRAMS = iscsiuio
|
|
+
|
|
+iscsiuio_SOURCES = build_date.c \
|
|
+ main.c \
|
|
+ clock-arch.c \
|
|
+ logger.c \
|
|
+ nic.c \
|
|
+ nic_id.c \
|
|
+ nic_vlan.c \
|
|
+ nic_nl.c \
|
|
+ nic_utils.c \
|
|
+ packet.c \
|
|
+ iscsid_ipc.c
|
|
+
|
|
+iscsiuio_CFLAGS = $(AM_CFLAGS) \
|
|
+ $(LIBNL_CFLAGS) \
|
|
+ -DBYTE_ORDER=@ENDIAN@
|
|
+
|
|
+iscsiuio_LDFLAGS= $(AM_LDADD) \
|
|
+ -ldl \
|
|
+ -rdynamic \
|
|
+ $(LIBNL_LIBS) \
|
|
+ -lpthread
|
|
+
|
|
+iscsiuio_LDADD = ${top_srcdir}/src/uip/lib_iscsi_uip.a \
|
|
+ ${top_srcdir}/src/apps/dhcpc/lib_apps_dhcpc.a\
|
|
+ ${top_srcdir}/src/apps/brcm-iscsi/lib_apps_brcm_iscsi.a \
|
|
+ ${top_srcdir}/src/unix/libs/lib_iscsiuio_hw_cnic.a
|
|
+
|
|
+iscsiuio_YFLAGS = -d
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/Makefile.in open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/Makefile.in
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/Makefile.in 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/Makefile.in 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,766 @@
|
|
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
|
+# @configure_input@
|
|
+
|
|
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
|
+# 2003, 2004, 2005 Free Software Foundation, Inc.
|
|
+# This Makefile.in 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.
|
|
+
|
|
+# This program is distributed in the hope that it will be useful,
|
|
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
|
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
+# PARTICULAR PURPOSE.
|
|
+
|
|
+@SET_MAKE@
|
|
+
|
|
+srcdir = @srcdir@
|
|
+top_srcdir = @top_srcdir@
|
|
+VPATH = @srcdir@
|
|
+pkgdatadir = $(datadir)/@PACKAGE@
|
|
+pkglibdir = $(libdir)/@PACKAGE@
|
|
+pkgincludedir = $(includedir)/@PACKAGE@
|
|
+top_builddir = ../..
|
|
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
|
+INSTALL = @INSTALL@
|
|
+install_sh_DATA = $(install_sh) -c -m 644
|
|
+install_sh_PROGRAM = $(install_sh) -c
|
|
+install_sh_SCRIPT = $(install_sh) -c
|
|
+INSTALL_HEADER = $(INSTALL_DATA)
|
|
+transform = $(program_transform_name)
|
|
+NORMAL_INSTALL = :
|
|
+PRE_INSTALL = :
|
|
+POST_INSTALL = :
|
|
+NORMAL_UNINSTALL = :
|
|
+PRE_UNINSTALL = :
|
|
+POST_UNINSTALL = :
|
|
+build_triplet = @build@
|
|
+host_triplet = @host@
|
|
+sbin_PROGRAMS = iscsiuio$(EXEEXT)
|
|
+subdir = src/unix
|
|
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
|
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
|
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
|
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
|
+ $(ACLOCAL_M4)
|
|
+mkinstalldirs = $(install_sh) -d
|
|
+CONFIG_HEADER = $(top_builddir)/config.h
|
|
+CONFIG_CLEAN_FILES =
|
|
+am__installdirs = "$(DESTDIR)$(sbindir)"
|
|
+sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
|
|
+PROGRAMS = $(sbin_PROGRAMS)
|
|
+am_iscsiuio_OBJECTS = iscsiuio-build_date.$(OBJEXT) \
|
|
+ iscsiuio-main.$(OBJEXT) iscsiuio-clock-arch.$(OBJEXT) \
|
|
+ iscsiuio-logger.$(OBJEXT) iscsiuio-nic.$(OBJEXT) \
|
|
+ iscsiuio-nic_id.$(OBJEXT) iscsiuio-nic_vlan.$(OBJEXT) \
|
|
+ iscsiuio-nic_nl.$(OBJEXT) iscsiuio-nic_utils.$(OBJEXT) \
|
|
+ iscsiuio-packet.$(OBJEXT) iscsiuio-iscsid_ipc.$(OBJEXT)
|
|
+iscsiuio_OBJECTS = $(am_iscsiuio_OBJECTS)
|
|
+iscsiuio_DEPENDENCIES = ${top_srcdir}/src/uip/lib_iscsi_uip.a \
|
|
+ ${top_srcdir}/src/apps/dhcpc/lib_apps_dhcpc.a \
|
|
+ ${top_srcdir}/src/apps/brcm-iscsi/lib_apps_brcm_iscsi.a \
|
|
+ ${top_srcdir}/src/unix/libs/lib_iscsiuio_hw_cnic.a
|
|
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
|
+depcomp = $(SHELL) $(top_srcdir)/depcomp
|
|
+am__depfiles_maybe = depfiles
|
|
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
|
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
|
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
|
|
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
|
+ $(AM_CFLAGS) $(CFLAGS)
|
|
+CCLD = $(CC)
|
|
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
|
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
|
+SOURCES = $(iscsiuio_SOURCES)
|
|
+DIST_SOURCES = $(iscsiuio_SOURCES)
|
|
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
|
+ html-recursive info-recursive install-data-recursive \
|
|
+ install-exec-recursive install-info-recursive \
|
|
+ install-recursive installcheck-recursive installdirs-recursive \
|
|
+ pdf-recursive ps-recursive uninstall-info-recursive \
|
|
+ uninstall-recursive
|
|
+ETAGS = etags
|
|
+CTAGS = ctags
|
|
+DIST_SUBDIRS = $(SUBDIRS)
|
|
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
|
+ACLOCAL = @ACLOCAL@
|
|
+AMDEP_FALSE = @AMDEP_FALSE@
|
|
+AMDEP_TRUE = @AMDEP_TRUE@
|
|
+AMTAR = @AMTAR@
|
|
+AR = @AR@
|
|
+AUTOCONF = @AUTOCONF@
|
|
+AUTOHEADER = @AUTOHEADER@
|
|
+AUTOMAKE = @AUTOMAKE@
|
|
+AWK = @AWK@
|
|
+BASH = @BASH@
|
|
+CC = @CC@
|
|
+CCDEPMODE = @CCDEPMODE@
|
|
+CFLAGS = @CFLAGS@
|
|
+CPP = @CPP@
|
|
+CPPFLAGS = @CPPFLAGS@
|
|
+CXX = @CXX@
|
|
+CXXCPP = @CXXCPP@
|
|
+CXXDEPMODE = @CXXDEPMODE@
|
|
+CXXFLAGS = @CXXFLAGS@
|
|
+CYGPATH_W = @CYGPATH_W@
|
|
+DEBUG_FALSE = @DEBUG_FALSE@
|
|
+DEBUG_TRUE = @DEBUG_TRUE@
|
|
+DEFS = @DEFS@
|
|
+DEPDIR = @DEPDIR@
|
|
+ECHO = @ECHO@
|
|
+ECHO_C = @ECHO_C@
|
|
+ECHO_N = @ECHO_N@
|
|
+ECHO_T = @ECHO_T@
|
|
+EGREP = @EGREP@
|
|
+ENDIAN = @ENDIAN@
|
|
+EXEEXT = @EXEEXT@
|
|
+F77 = @F77@
|
|
+FFLAGS = @FFLAGS@
|
|
+INSTALL_DATA = @INSTALL_DATA@
|
|
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
|
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
|
+LDFLAGS = @LDFLAGS@
|
|
+LIBOBJS = @LIBOBJS@
|
|
+LIBS = @LIBS@
|
|
+LIBTOOL = @LIBTOOL@
|
|
+LN_S = @LN_S@
|
|
+LTLIBOBJS = @LTLIBOBJS@
|
|
+MAKEINFO = @MAKEINFO@
|
|
+OBJEXT = @OBJEXT@
|
|
+PACKAGE = @PACKAGE@
|
|
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
|
+PACKAGE_NAME = @PACKAGE_NAME@
|
|
+PACKAGE_STRING = @PACKAGE_STRING@
|
|
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
|
+PACKAGE_VERSION = @PACKAGE_VERSION@
|
|
+PATH_SEPARATOR = @PATH_SEPARATOR@
|
|
+RANLIB = @RANLIB@
|
|
+SED = @SED@
|
|
+SET_MAKE = @SET_MAKE@
|
|
+SHELL = @SHELL@
|
|
+STRIP = @STRIP@
|
|
+VERSION = @VERSION@
|
|
+ac_ct_AR = @ac_ct_AR@
|
|
+ac_ct_CC = @ac_ct_CC@
|
|
+ac_ct_CXX = @ac_ct_CXX@
|
|
+ac_ct_F77 = @ac_ct_F77@
|
|
+ac_ct_RANLIB = @ac_ct_RANLIB@
|
|
+ac_ct_STRIP = @ac_ct_STRIP@
|
|
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
|
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
|
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
|
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
|
+am__include = @am__include@
|
|
+am__leading_dot = @am__leading_dot@
|
|
+am__quote = @am__quote@
|
|
+am__tar = @am__tar@
|
|
+am__untar = @am__untar@
|
|
+bindir = @bindir@
|
|
+build = @build@
|
|
+build_alias = @build_alias@
|
|
+build_cpu = @build_cpu@
|
|
+build_os = @build_os@
|
|
+build_vendor = @build_vendor@
|
|
+datadir = @datadir@
|
|
+exec_prefix = @exec_prefix@
|
|
+host = @host@
|
|
+host_alias = @host_alias@
|
|
+host_cpu = @host_cpu@
|
|
+host_os = @host_os@
|
|
+host_vendor = @host_vendor@
|
|
+includedir = @includedir@
|
|
+infodir = @infodir@
|
|
+install_sh = @install_sh@
|
|
+libdir = @libdir@
|
|
+libexecdir = @libexecdir@
|
|
+localstatedir = @localstatedir@
|
|
+mandir = @mandir@
|
|
+mkdir_p = @mkdir_p@
|
|
+oldincludedir = @oldincludedir@
|
|
+prefix = @prefix@
|
|
+program_transform_name = @program_transform_name@
|
|
+sbindir = @sbindir@
|
|
+sharedstatedir = @sharedstatedir@
|
|
+sysconfdir = @sysconfdir@
|
|
+target_alias = @target_alias@
|
|
+SUBDIRS = libs
|
|
+INCLUDES = -I${top_srcdir}/src/uip \
|
|
+ -I${top_srcdir}/src/apps/brcm-iscsi \
|
|
+ -I${top_srcdir}/src/apps/dhcpc \
|
|
+ -I${top_srcdir}/include \
|
|
+ -I${top_srcdir}/src/unix/libs/
|
|
+
|
|
+iscsiuio_SOURCES = build_date.c \
|
|
+ main.c \
|
|
+ clock-arch.c \
|
|
+ logger.c \
|
|
+ nic.c \
|
|
+ nic_id.c \
|
|
+ nic_vlan.c \
|
|
+ nic_nl.c \
|
|
+ nic_utils.c \
|
|
+ packet.c \
|
|
+ iscsid_ipc.c
|
|
+
|
|
+iscsiuio_CFLAGS = $(AM_CFLAGS) \
|
|
+ $(LIBNL_CFLAGS) \
|
|
+ -DBYTE_ORDER=@ENDIAN@
|
|
+
|
|
+iscsiuio_LDFLAGS = $(AM_LDADD) \
|
|
+ -ldl \
|
|
+ -rdynamic \
|
|
+ $(LIBNL_LIBS) \
|
|
+ -lpthread
|
|
+
|
|
+iscsiuio_LDADD = ${top_srcdir}/src/uip/lib_iscsi_uip.a \
|
|
+ ${top_srcdir}/src/apps/dhcpc/lib_apps_dhcpc.a\
|
|
+ ${top_srcdir}/src/apps/brcm-iscsi/lib_apps_brcm_iscsi.a \
|
|
+ ${top_srcdir}/src/unix/libs/lib_iscsiuio_hw_cnic.a
|
|
+
|
|
+iscsiuio_YFLAGS = -d
|
|
+all: all-recursive
|
|
+
|
|
+.SUFFIXES:
|
|
+.SUFFIXES: .c .lo .o .obj
|
|
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
|
+ @for dep in $?; do \
|
|
+ case '$(am__configure_deps)' in \
|
|
+ *$$dep*) \
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
|
+ && exit 0; \
|
|
+ exit 1;; \
|
|
+ esac; \
|
|
+ done; \
|
|
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/unix/Makefile'; \
|
|
+ cd $(top_srcdir) && \
|
|
+ $(AUTOMAKE) --gnu src/unix/Makefile
|
|
+.PRECIOUS: Makefile
|
|
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
|
+ @case '$?' in \
|
|
+ *config.status*) \
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
|
+ *) \
|
|
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
|
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
|
+ esac;
|
|
+
|
|
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+
|
|
+$(top_srcdir)/configure: $(am__configure_deps)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
|
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
+install-sbinPROGRAMS: $(sbin_PROGRAMS)
|
|
+ @$(NORMAL_INSTALL)
|
|
+ test -z "$(sbindir)" || $(mkdir_p) "$(DESTDIR)$(sbindir)"
|
|
+ @list='$(sbin_PROGRAMS)'; for p in $$list; do \
|
|
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
|
|
+ if test -f $$p \
|
|
+ || test -f $$p1 \
|
|
+ ; then \
|
|
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
|
|
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(sbinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(sbindir)/$$f'"; \
|
|
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(sbinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(sbindir)/$$f" || exit 1; \
|
|
+ else :; fi; \
|
|
+ done
|
|
+
|
|
+uninstall-sbinPROGRAMS:
|
|
+ @$(NORMAL_UNINSTALL)
|
|
+ @list='$(sbin_PROGRAMS)'; for p in $$list; do \
|
|
+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
|
|
+ echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \
|
|
+ rm -f "$(DESTDIR)$(sbindir)/$$f"; \
|
|
+ done
|
|
+
|
|
+clean-sbinPROGRAMS:
|
|
+ @list='$(sbin_PROGRAMS)'; for p in $$list; do \
|
|
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
|
|
+ echo " rm -f $$p $$f"; \
|
|
+ rm -f $$p $$f ; \
|
|
+ done
|
|
+iscsiuio$(EXEEXT): $(iscsiuio_OBJECTS) $(iscsiuio_DEPENDENCIES)
|
|
+ @rm -f iscsiuio$(EXEEXT)
|
|
+ $(LINK) $(iscsiuio_LDFLAGS) $(iscsiuio_OBJECTS) $(iscsiuio_LDADD) $(LIBS)
|
|
+
|
|
+mostlyclean-compile:
|
|
+ -rm -f *.$(OBJEXT)
|
|
+
|
|
+distclean-compile:
|
|
+ -rm -f *.tab.c
|
|
+
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iscsiuio-build_date.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iscsiuio-clock-arch.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iscsiuio-iscsid_ipc.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iscsiuio-logger.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iscsiuio-main.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iscsiuio-nic.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iscsiuio-nic_id.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iscsiuio-nic_nl.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iscsiuio-nic_utils.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iscsiuio-nic_vlan.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iscsiuio-packet.Po@am__quote@
|
|
+
|
|
+.c.o:
|
|
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
|
|
+
|
|
+.c.obj:
|
|
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
|
|
+
|
|
+.c.lo:
|
|
+@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
|
|
+
|
|
+iscsiuio-build_date.o: build_date.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-build_date.o -MD -MP -MF "$(DEPDIR)/iscsiuio-build_date.Tpo" -c -o iscsiuio-build_date.o `test -f 'build_date.c' || echo '$(srcdir)/'`build_date.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-build_date.Tpo" "$(DEPDIR)/iscsiuio-build_date.Po"; else rm -f "$(DEPDIR)/iscsiuio-build_date.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='build_date.c' object='iscsiuio-build_date.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-build_date.o `test -f 'build_date.c' || echo '$(srcdir)/'`build_date.c
|
|
+
|
|
+iscsiuio-build_date.obj: build_date.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-build_date.obj -MD -MP -MF "$(DEPDIR)/iscsiuio-build_date.Tpo" -c -o iscsiuio-build_date.obj `if test -f 'build_date.c'; then $(CYGPATH_W) 'build_date.c'; else $(CYGPATH_W) '$(srcdir)/build_date.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-build_date.Tpo" "$(DEPDIR)/iscsiuio-build_date.Po"; else rm -f "$(DEPDIR)/iscsiuio-build_date.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='build_date.c' object='iscsiuio-build_date.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-build_date.obj `if test -f 'build_date.c'; then $(CYGPATH_W) 'build_date.c'; else $(CYGPATH_W) '$(srcdir)/build_date.c'; fi`
|
|
+
|
|
+iscsiuio-main.o: main.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-main.o -MD -MP -MF "$(DEPDIR)/iscsiuio-main.Tpo" -c -o iscsiuio-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-main.Tpo" "$(DEPDIR)/iscsiuio-main.Po"; else rm -f "$(DEPDIR)/iscsiuio-main.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='main.c' object='iscsiuio-main.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
|
|
+
|
|
+iscsiuio-main.obj: main.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-main.obj -MD -MP -MF "$(DEPDIR)/iscsiuio-main.Tpo" -c -o iscsiuio-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-main.Tpo" "$(DEPDIR)/iscsiuio-main.Po"; else rm -f "$(DEPDIR)/iscsiuio-main.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='main.c' object='iscsiuio-main.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`
|
|
+
|
|
+iscsiuio-clock-arch.o: clock-arch.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-clock-arch.o -MD -MP -MF "$(DEPDIR)/iscsiuio-clock-arch.Tpo" -c -o iscsiuio-clock-arch.o `test -f 'clock-arch.c' || echo '$(srcdir)/'`clock-arch.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-clock-arch.Tpo" "$(DEPDIR)/iscsiuio-clock-arch.Po"; else rm -f "$(DEPDIR)/iscsiuio-clock-arch.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-arch.c' object='iscsiuio-clock-arch.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-clock-arch.o `test -f 'clock-arch.c' || echo '$(srcdir)/'`clock-arch.c
|
|
+
|
|
+iscsiuio-clock-arch.obj: clock-arch.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-clock-arch.obj -MD -MP -MF "$(DEPDIR)/iscsiuio-clock-arch.Tpo" -c -o iscsiuio-clock-arch.obj `if test -f 'clock-arch.c'; then $(CYGPATH_W) 'clock-arch.c'; else $(CYGPATH_W) '$(srcdir)/clock-arch.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-clock-arch.Tpo" "$(DEPDIR)/iscsiuio-clock-arch.Po"; else rm -f "$(DEPDIR)/iscsiuio-clock-arch.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-arch.c' object='iscsiuio-clock-arch.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-clock-arch.obj `if test -f 'clock-arch.c'; then $(CYGPATH_W) 'clock-arch.c'; else $(CYGPATH_W) '$(srcdir)/clock-arch.c'; fi`
|
|
+
|
|
+iscsiuio-logger.o: logger.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-logger.o -MD -MP -MF "$(DEPDIR)/iscsiuio-logger.Tpo" -c -o iscsiuio-logger.o `test -f 'logger.c' || echo '$(srcdir)/'`logger.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-logger.Tpo" "$(DEPDIR)/iscsiuio-logger.Po"; else rm -f "$(DEPDIR)/iscsiuio-logger.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='logger.c' object='iscsiuio-logger.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-logger.o `test -f 'logger.c' || echo '$(srcdir)/'`logger.c
|
|
+
|
|
+iscsiuio-logger.obj: logger.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-logger.obj -MD -MP -MF "$(DEPDIR)/iscsiuio-logger.Tpo" -c -o iscsiuio-logger.obj `if test -f 'logger.c'; then $(CYGPATH_W) 'logger.c'; else $(CYGPATH_W) '$(srcdir)/logger.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-logger.Tpo" "$(DEPDIR)/iscsiuio-logger.Po"; else rm -f "$(DEPDIR)/iscsiuio-logger.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='logger.c' object='iscsiuio-logger.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-logger.obj `if test -f 'logger.c'; then $(CYGPATH_W) 'logger.c'; else $(CYGPATH_W) '$(srcdir)/logger.c'; fi`
|
|
+
|
|
+iscsiuio-nic.o: nic.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-nic.o -MD -MP -MF "$(DEPDIR)/iscsiuio-nic.Tpo" -c -o iscsiuio-nic.o `test -f 'nic.c' || echo '$(srcdir)/'`nic.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-nic.Tpo" "$(DEPDIR)/iscsiuio-nic.Po"; else rm -f "$(DEPDIR)/iscsiuio-nic.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nic.c' object='iscsiuio-nic.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-nic.o `test -f 'nic.c' || echo '$(srcdir)/'`nic.c
|
|
+
|
|
+iscsiuio-nic.obj: nic.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-nic.obj -MD -MP -MF "$(DEPDIR)/iscsiuio-nic.Tpo" -c -o iscsiuio-nic.obj `if test -f 'nic.c'; then $(CYGPATH_W) 'nic.c'; else $(CYGPATH_W) '$(srcdir)/nic.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-nic.Tpo" "$(DEPDIR)/iscsiuio-nic.Po"; else rm -f "$(DEPDIR)/iscsiuio-nic.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nic.c' object='iscsiuio-nic.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-nic.obj `if test -f 'nic.c'; then $(CYGPATH_W) 'nic.c'; else $(CYGPATH_W) '$(srcdir)/nic.c'; fi`
|
|
+
|
|
+iscsiuio-nic_id.o: nic_id.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-nic_id.o -MD -MP -MF "$(DEPDIR)/iscsiuio-nic_id.Tpo" -c -o iscsiuio-nic_id.o `test -f 'nic_id.c' || echo '$(srcdir)/'`nic_id.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-nic_id.Tpo" "$(DEPDIR)/iscsiuio-nic_id.Po"; else rm -f "$(DEPDIR)/iscsiuio-nic_id.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nic_id.c' object='iscsiuio-nic_id.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-nic_id.o `test -f 'nic_id.c' || echo '$(srcdir)/'`nic_id.c
|
|
+
|
|
+iscsiuio-nic_id.obj: nic_id.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-nic_id.obj -MD -MP -MF "$(DEPDIR)/iscsiuio-nic_id.Tpo" -c -o iscsiuio-nic_id.obj `if test -f 'nic_id.c'; then $(CYGPATH_W) 'nic_id.c'; else $(CYGPATH_W) '$(srcdir)/nic_id.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-nic_id.Tpo" "$(DEPDIR)/iscsiuio-nic_id.Po"; else rm -f "$(DEPDIR)/iscsiuio-nic_id.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nic_id.c' object='iscsiuio-nic_id.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-nic_id.obj `if test -f 'nic_id.c'; then $(CYGPATH_W) 'nic_id.c'; else $(CYGPATH_W) '$(srcdir)/nic_id.c'; fi`
|
|
+
|
|
+iscsiuio-nic_vlan.o: nic_vlan.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-nic_vlan.o -MD -MP -MF "$(DEPDIR)/iscsiuio-nic_vlan.Tpo" -c -o iscsiuio-nic_vlan.o `test -f 'nic_vlan.c' || echo '$(srcdir)/'`nic_vlan.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-nic_vlan.Tpo" "$(DEPDIR)/iscsiuio-nic_vlan.Po"; else rm -f "$(DEPDIR)/iscsiuio-nic_vlan.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nic_vlan.c' object='iscsiuio-nic_vlan.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-nic_vlan.o `test -f 'nic_vlan.c' || echo '$(srcdir)/'`nic_vlan.c
|
|
+
|
|
+iscsiuio-nic_vlan.obj: nic_vlan.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-nic_vlan.obj -MD -MP -MF "$(DEPDIR)/iscsiuio-nic_vlan.Tpo" -c -o iscsiuio-nic_vlan.obj `if test -f 'nic_vlan.c'; then $(CYGPATH_W) 'nic_vlan.c'; else $(CYGPATH_W) '$(srcdir)/nic_vlan.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-nic_vlan.Tpo" "$(DEPDIR)/iscsiuio-nic_vlan.Po"; else rm -f "$(DEPDIR)/iscsiuio-nic_vlan.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nic_vlan.c' object='iscsiuio-nic_vlan.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-nic_vlan.obj `if test -f 'nic_vlan.c'; then $(CYGPATH_W) 'nic_vlan.c'; else $(CYGPATH_W) '$(srcdir)/nic_vlan.c'; fi`
|
|
+
|
|
+iscsiuio-nic_nl.o: nic_nl.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-nic_nl.o -MD -MP -MF "$(DEPDIR)/iscsiuio-nic_nl.Tpo" -c -o iscsiuio-nic_nl.o `test -f 'nic_nl.c' || echo '$(srcdir)/'`nic_nl.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-nic_nl.Tpo" "$(DEPDIR)/iscsiuio-nic_nl.Po"; else rm -f "$(DEPDIR)/iscsiuio-nic_nl.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nic_nl.c' object='iscsiuio-nic_nl.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-nic_nl.o `test -f 'nic_nl.c' || echo '$(srcdir)/'`nic_nl.c
|
|
+
|
|
+iscsiuio-nic_nl.obj: nic_nl.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-nic_nl.obj -MD -MP -MF "$(DEPDIR)/iscsiuio-nic_nl.Tpo" -c -o iscsiuio-nic_nl.obj `if test -f 'nic_nl.c'; then $(CYGPATH_W) 'nic_nl.c'; else $(CYGPATH_W) '$(srcdir)/nic_nl.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-nic_nl.Tpo" "$(DEPDIR)/iscsiuio-nic_nl.Po"; else rm -f "$(DEPDIR)/iscsiuio-nic_nl.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nic_nl.c' object='iscsiuio-nic_nl.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-nic_nl.obj `if test -f 'nic_nl.c'; then $(CYGPATH_W) 'nic_nl.c'; else $(CYGPATH_W) '$(srcdir)/nic_nl.c'; fi`
|
|
+
|
|
+iscsiuio-nic_utils.o: nic_utils.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-nic_utils.o -MD -MP -MF "$(DEPDIR)/iscsiuio-nic_utils.Tpo" -c -o iscsiuio-nic_utils.o `test -f 'nic_utils.c' || echo '$(srcdir)/'`nic_utils.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-nic_utils.Tpo" "$(DEPDIR)/iscsiuio-nic_utils.Po"; else rm -f "$(DEPDIR)/iscsiuio-nic_utils.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nic_utils.c' object='iscsiuio-nic_utils.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-nic_utils.o `test -f 'nic_utils.c' || echo '$(srcdir)/'`nic_utils.c
|
|
+
|
|
+iscsiuio-nic_utils.obj: nic_utils.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-nic_utils.obj -MD -MP -MF "$(DEPDIR)/iscsiuio-nic_utils.Tpo" -c -o iscsiuio-nic_utils.obj `if test -f 'nic_utils.c'; then $(CYGPATH_W) 'nic_utils.c'; else $(CYGPATH_W) '$(srcdir)/nic_utils.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-nic_utils.Tpo" "$(DEPDIR)/iscsiuio-nic_utils.Po"; else rm -f "$(DEPDIR)/iscsiuio-nic_utils.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nic_utils.c' object='iscsiuio-nic_utils.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-nic_utils.obj `if test -f 'nic_utils.c'; then $(CYGPATH_W) 'nic_utils.c'; else $(CYGPATH_W) '$(srcdir)/nic_utils.c'; fi`
|
|
+
|
|
+iscsiuio-packet.o: packet.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-packet.o -MD -MP -MF "$(DEPDIR)/iscsiuio-packet.Tpo" -c -o iscsiuio-packet.o `test -f 'packet.c' || echo '$(srcdir)/'`packet.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-packet.Tpo" "$(DEPDIR)/iscsiuio-packet.Po"; else rm -f "$(DEPDIR)/iscsiuio-packet.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='packet.c' object='iscsiuio-packet.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-packet.o `test -f 'packet.c' || echo '$(srcdir)/'`packet.c
|
|
+
|
|
+iscsiuio-packet.obj: packet.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-packet.obj -MD -MP -MF "$(DEPDIR)/iscsiuio-packet.Tpo" -c -o iscsiuio-packet.obj `if test -f 'packet.c'; then $(CYGPATH_W) 'packet.c'; else $(CYGPATH_W) '$(srcdir)/packet.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-packet.Tpo" "$(DEPDIR)/iscsiuio-packet.Po"; else rm -f "$(DEPDIR)/iscsiuio-packet.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='packet.c' object='iscsiuio-packet.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-packet.obj `if test -f 'packet.c'; then $(CYGPATH_W) 'packet.c'; else $(CYGPATH_W) '$(srcdir)/packet.c'; fi`
|
|
+
|
|
+iscsiuio-iscsid_ipc.o: iscsid_ipc.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-iscsid_ipc.o -MD -MP -MF "$(DEPDIR)/iscsiuio-iscsid_ipc.Tpo" -c -o iscsiuio-iscsid_ipc.o `test -f 'iscsid_ipc.c' || echo '$(srcdir)/'`iscsid_ipc.c; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-iscsid_ipc.Tpo" "$(DEPDIR)/iscsiuio-iscsid_ipc.Po"; else rm -f "$(DEPDIR)/iscsiuio-iscsid_ipc.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iscsid_ipc.c' object='iscsiuio-iscsid_ipc.o' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-iscsid_ipc.o `test -f 'iscsid_ipc.c' || echo '$(srcdir)/'`iscsid_ipc.c
|
|
+
|
|
+iscsiuio-iscsid_ipc.obj: iscsid_ipc.c
|
|
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -MT iscsiuio-iscsid_ipc.obj -MD -MP -MF "$(DEPDIR)/iscsiuio-iscsid_ipc.Tpo" -c -o iscsiuio-iscsid_ipc.obj `if test -f 'iscsid_ipc.c'; then $(CYGPATH_W) 'iscsid_ipc.c'; else $(CYGPATH_W) '$(srcdir)/iscsid_ipc.c'; fi`; \
|
|
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iscsiuio-iscsid_ipc.Tpo" "$(DEPDIR)/iscsiuio-iscsid_ipc.Po"; else rm -f "$(DEPDIR)/iscsiuio-iscsid_ipc.Tpo"; exit 1; fi
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iscsid_ipc.c' object='iscsiuio-iscsid_ipc.obj' libtool=no @AMDEPBACKSLASH@
|
|
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iscsiuio_CFLAGS) $(CFLAGS) -c -o iscsiuio-iscsid_ipc.obj `if test -f 'iscsid_ipc.c'; then $(CYGPATH_W) 'iscsid_ipc.c'; else $(CYGPATH_W) '$(srcdir)/iscsid_ipc.c'; fi`
|
|
+
|
|
+mostlyclean-libtool:
|
|
+ -rm -f *.lo
|
|
+
|
|
+clean-libtool:
|
|
+ -rm -rf .libs _libs
|
|
+
|
|
+distclean-libtool:
|
|
+ -rm -f libtool
|
|
+uninstall-info-am:
|
|
+
|
|
+# This directory's subdirectories are mostly independent; you can cd
|
|
+# into them and run `make' without going through this Makefile.
|
|
+# To change the values of `make' variables: instead of editing Makefiles,
|
|
+# (1) if the variable is set in `config.status', edit `config.status'
|
|
+# (which will cause the Makefiles to be regenerated when you run `make');
|
|
+# (2) otherwise, pass the desired values on the `make' command line.
|
|
+$(RECURSIVE_TARGETS):
|
|
+ @failcom='exit 1'; \
|
|
+ for f in x $$MAKEFLAGS; do \
|
|
+ case $$f in \
|
|
+ *=* | --[!k]*);; \
|
|
+ *k*) failcom='fail=yes';; \
|
|
+ esac; \
|
|
+ done; \
|
|
+ dot_seen=no; \
|
|
+ target=`echo $@ | sed s/-recursive//`; \
|
|
+ list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
+ echo "Making $$target in $$subdir"; \
|
|
+ if test "$$subdir" = "."; then \
|
|
+ dot_seen=yes; \
|
|
+ local_target="$$target-am"; \
|
|
+ else \
|
|
+ local_target="$$target"; \
|
|
+ fi; \
|
|
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
|
+ || eval $$failcom; \
|
|
+ done; \
|
|
+ if test "$$dot_seen" = "no"; then \
|
|
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
|
+ fi; test -z "$$fail"
|
|
+
|
|
+mostlyclean-recursive clean-recursive distclean-recursive \
|
|
+maintainer-clean-recursive:
|
|
+ @failcom='exit 1'; \
|
|
+ for f in x $$MAKEFLAGS; do \
|
|
+ case $$f in \
|
|
+ *=* | --[!k]*);; \
|
|
+ *k*) failcom='fail=yes';; \
|
|
+ esac; \
|
|
+ done; \
|
|
+ dot_seen=no; \
|
|
+ case "$@" in \
|
|
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
|
+ *) list='$(SUBDIRS)' ;; \
|
|
+ esac; \
|
|
+ rev=''; for subdir in $$list; do \
|
|
+ if test "$$subdir" = "."; then :; else \
|
|
+ rev="$$subdir $$rev"; \
|
|
+ fi; \
|
|
+ done; \
|
|
+ rev="$$rev ."; \
|
|
+ target=`echo $@ | sed s/-recursive//`; \
|
|
+ for subdir in $$rev; do \
|
|
+ echo "Making $$target in $$subdir"; \
|
|
+ if test "$$subdir" = "."; then \
|
|
+ local_target="$$target-am"; \
|
|
+ else \
|
|
+ local_target="$$target"; \
|
|
+ fi; \
|
|
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
|
+ || eval $$failcom; \
|
|
+ done && test -z "$$fail"
|
|
+tags-recursive:
|
|
+ list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
|
+ done
|
|
+ctags-recursive:
|
|
+ list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
|
+ done
|
|
+
|
|
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ mkid -fID $$unique
|
|
+tags: TAGS
|
|
+
|
|
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
|
+ $(TAGS_FILES) $(LISP)
|
|
+ tags=; \
|
|
+ here=`pwd`; \
|
|
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
|
+ include_option=--etags-include; \
|
|
+ empty_fix=.; \
|
|
+ else \
|
|
+ include_option=--include; \
|
|
+ empty_fix=; \
|
|
+ fi; \
|
|
+ list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
+ if test "$$subdir" = .; then :; else \
|
|
+ test ! -f $$subdir/TAGS || \
|
|
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
|
+ fi; \
|
|
+ done; \
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
|
+ test -n "$$unique" || unique=$$empty_fix; \
|
|
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
|
+ $$tags $$unique; \
|
|
+ fi
|
|
+ctags: CTAGS
|
|
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
|
+ $(TAGS_FILES) $(LISP)
|
|
+ tags=; \
|
|
+ here=`pwd`; \
|
|
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
+ unique=`for i in $$list; do \
|
|
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
+ done | \
|
|
+ $(AWK) ' { files[$$0] = 1; } \
|
|
+ END { for (i in files) print i; }'`; \
|
|
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
|
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
|
+ $$tags $$unique
|
|
+
|
|
+GTAGS:
|
|
+ here=`$(am__cd) $(top_builddir) && pwd` \
|
|
+ && cd $(top_srcdir) \
|
|
+ && gtags -i $(GTAGS_ARGS) $$here
|
|
+
|
|
+distclean-tags:
|
|
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
|
+
|
|
+distdir: $(DISTFILES)
|
|
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
|
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
|
+ list='$(DISTFILES)'; for file in $$list; do \
|
|
+ case $$file in \
|
|
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
|
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
|
+ esac; \
|
|
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
|
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
|
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
|
+ dir="/$$dir"; \
|
|
+ $(mkdir_p) "$(distdir)$$dir"; \
|
|
+ else \
|
|
+ dir=''; \
|
|
+ fi; \
|
|
+ if test -d $$d/$$file; then \
|
|
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
|
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
|
+ fi; \
|
|
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
|
+ else \
|
|
+ test -f $(distdir)/$$file \
|
|
+ || cp -p $$d/$$file $(distdir)/$$file \
|
|
+ || exit 1; \
|
|
+ fi; \
|
|
+ done
|
|
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
|
+ if test "$$subdir" = .; then :; else \
|
|
+ test -d "$(distdir)/$$subdir" \
|
|
+ || $(mkdir_p) "$(distdir)/$$subdir" \
|
|
+ || exit 1; \
|
|
+ distdir=`$(am__cd) $(distdir) && pwd`; \
|
|
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
|
+ (cd $$subdir && \
|
|
+ $(MAKE) $(AM_MAKEFLAGS) \
|
|
+ top_distdir="$$top_distdir" \
|
|
+ distdir="$$distdir/$$subdir" \
|
|
+ distdir) \
|
|
+ || exit 1; \
|
|
+ fi; \
|
|
+ done
|
|
+check-am: all-am
|
|
+check: check-recursive
|
|
+all-am: Makefile $(PROGRAMS)
|
|
+installdirs: installdirs-recursive
|
|
+installdirs-am:
|
|
+ for dir in "$(DESTDIR)$(sbindir)"; do \
|
|
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
|
+ done
|
|
+install: install-recursive
|
|
+install-exec: install-exec-recursive
|
|
+install-data: install-data-recursive
|
|
+uninstall: uninstall-recursive
|
|
+
|
|
+install-am: all-am
|
|
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
|
+
|
|
+installcheck: installcheck-recursive
|
|
+install-strip:
|
|
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
|
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
|
+ `test -z '$(STRIP)' || \
|
|
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
|
+mostlyclean-generic:
|
|
+
|
|
+clean-generic:
|
|
+
|
|
+distclean-generic:
|
|
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
|
+
|
|
+maintainer-clean-generic:
|
|
+ @echo "This command is intended for maintainers to use"
|
|
+ @echo "it deletes files that may require special tools to rebuild."
|
|
+clean: clean-recursive
|
|
+
|
|
+clean-am: clean-generic clean-libtool clean-sbinPROGRAMS \
|
|
+ mostlyclean-am
|
|
+
|
|
+distclean: distclean-recursive
|
|
+ -rm -rf ./$(DEPDIR)
|
|
+ -rm -f Makefile
|
|
+distclean-am: clean-am distclean-compile distclean-generic \
|
|
+ distclean-libtool distclean-tags
|
|
+
|
|
+dvi: dvi-recursive
|
|
+
|
|
+dvi-am:
|
|
+
|
|
+html: html-recursive
|
|
+
|
|
+info: info-recursive
|
|
+
|
|
+info-am:
|
|
+
|
|
+install-data-am:
|
|
+
|
|
+install-exec-am: install-sbinPROGRAMS
|
|
+
|
|
+install-info: install-info-recursive
|
|
+
|
|
+install-man:
|
|
+
|
|
+installcheck-am:
|
|
+
|
|
+maintainer-clean: maintainer-clean-recursive
|
|
+ -rm -rf ./$(DEPDIR)
|
|
+ -rm -f Makefile
|
|
+maintainer-clean-am: distclean-am maintainer-clean-generic
|
|
+
|
|
+mostlyclean: mostlyclean-recursive
|
|
+
|
|
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
|
+ mostlyclean-libtool
|
|
+
|
|
+pdf: pdf-recursive
|
|
+
|
|
+pdf-am:
|
|
+
|
|
+ps: ps-recursive
|
|
+
|
|
+ps-am:
|
|
+
|
|
+uninstall-am: uninstall-info-am uninstall-sbinPROGRAMS
|
|
+
|
|
+uninstall-info: uninstall-info-recursive
|
|
+
|
|
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
|
|
+ clean clean-generic clean-libtool clean-recursive \
|
|
+ clean-sbinPROGRAMS ctags ctags-recursive distclean \
|
|
+ distclean-compile distclean-generic distclean-libtool \
|
|
+ distclean-recursive distclean-tags distdir dvi dvi-am html \
|
|
+ html-am info info-am install install-am install-data \
|
|
+ install-data-am install-exec install-exec-am install-info \
|
|
+ install-info-am install-man install-sbinPROGRAMS install-strip \
|
|
+ installcheck installcheck-am installdirs installdirs-am \
|
|
+ maintainer-clean maintainer-clean-generic \
|
|
+ maintainer-clean-recursive mostlyclean mostlyclean-compile \
|
|
+ mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \
|
|
+ pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
|
|
+ uninstall-info-am uninstall-sbinPROGRAMS
|
|
+
|
|
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
|
+# Otherwise a system limit (for SysV at least) may be exceeded.
|
|
+.NOEXPORT:
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/nic.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/nic.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,1653 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * nic.c - Generic NIC management/utility functions
|
|
+ *
|
|
+ */
|
|
+#include <dlfcn.h>
|
|
+#include <errno.h>
|
|
+#include <pthread.h>
|
|
+#include <signal.h>
|
|
+#include <string.h>
|
|
+#include <time.h>
|
|
+#include <unistd.h>
|
|
+#include <sys/socket.h>
|
|
+#include <sys/time.h>
|
|
+#include <sys/types.h>
|
|
+#include <sys/stat.h>
|
|
+#include <netinet/in.h>
|
|
+#include <arpa/inet.h>
|
|
+
|
|
+#include "dhcpc.h"
|
|
+#include "ipv6_ndpc.h"
|
|
+
|
|
+#include "logger.h"
|
|
+#include "nic.h"
|
|
+#include "nic_utils.h"
|
|
+#include "options.h"
|
|
+
|
|
+#include "uip.h"
|
|
+#include "uip_arp.h"
|
|
+#include "uip_eth.h"
|
|
+#include "uip-neighbor.h"
|
|
+
|
|
+#include "bnx2.h"
|
|
+#include "bnx2x.h"
|
|
+
|
|
+/******************************************************************************
|
|
+ * Constants
|
|
+ *****************************************************************************/
|
|
+#define PFX "nic "
|
|
+#define PCI_ANY_ID (~0)
|
|
+
|
|
+/******************************************************************************
|
|
+ * Global variables
|
|
+ *****************************************************************************/
|
|
+/* Used to store a list of NIC libraries */
|
|
+pthread_mutex_t nic_lib_list_mutex = PTHREAD_MUTEX_INITIALIZER;
|
|
+nic_lib_handle_t *nic_lib_list;
|
|
+
|
|
+/* Used to store a list of active cnic devices */
|
|
+pthread_mutex_t nic_list_mutex = PTHREAD_MUTEX_INITIALIZER;
|
|
+nic_t *nic_list = NULL;
|
|
+
|
|
+/******************************************************************************
|
|
+ * Functions to handle NIC libraries
|
|
+ *****************************************************************************/
|
|
+/**
|
|
+ * alloc_nic_library_handle() - Used to allocate a NIC library handle
|
|
+ * @return NULL if memory couldn't be allocated, pointer to the handle
|
|
+ * to the NIC library handle
|
|
+ */
|
|
+static nic_lib_handle_t *alloc_nic_library_handle()
|
|
+{
|
|
+ nic_lib_handle_t *handle;
|
|
+
|
|
+ handle = malloc(sizeof(*handle));
|
|
+ if (handle == NULL) {
|
|
+ LOG_ERR("Could not allocate memory for library handle");
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ memset(handle, 0, sizeof(*handle));
|
|
+ handle->ops = NULL;
|
|
+
|
|
+ pthread_mutex_init(&handle->mutex, NULL);
|
|
+
|
|
+ return handle;
|
|
+}
|
|
+
|
|
+static void free_nic_library_handle(nic_lib_handle_t * handle)
|
|
+{
|
|
+ free(handle);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * load_nic_library() - This function is used to load a NIC library
|
|
+ * @param handle - This is the library handle to load
|
|
+ * @return 0 = Success; <0 = failure
|
|
+ */
|
|
+static int load_nic_library(nic_lib_handle_t * handle)
|
|
+{
|
|
+ int rc;
|
|
+ char *library_name;
|
|
+ size_t library_name_size;
|
|
+ char *library_version;
|
|
+ size_t library_version_size;
|
|
+ char *build_date_str;
|
|
+ size_t build_date_str_size;
|
|
+
|
|
+ pthread_mutex_lock(&handle->mutex);
|
|
+
|
|
+ /* Validate the NIC ops table ensure that all the fields are not NULL */
|
|
+ if ((handle->ops->open) == NULL ||
|
|
+ (handle->ops->close) == NULL ||
|
|
+ (handle->ops->read) == NULL ||
|
|
+ (handle->ops->write) == NULL ||
|
|
+ (handle->ops->clear_tx_intr == NULL)) {
|
|
+ LOG_ERR("Invalid NIC ops table: open: 0x%x, close: 0x%x,"
|
|
+ "read: 0x%x, write: 0x%x clear_tx_intr: 0x%x "
|
|
+ "lib_ops: 0x%x",
|
|
+ handle->ops->open, handle->ops->close,
|
|
+ handle->ops->read, handle->ops->write,
|
|
+ handle->ops->clear_tx_intr, handle->ops->lib_ops);
|
|
+ rc = -EINVAL;
|
|
+ handle->ops = NULL;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ /* Validate the NIC library ops table to ensure that all the proper
|
|
+ * fields are filled */
|
|
+ if ((handle->ops->lib_ops.get_library_name == NULL) ||
|
|
+ (handle->ops->lib_ops.get_pci_table == NULL) ||
|
|
+ (handle->ops->lib_ops.get_library_version == NULL) ||
|
|
+ (handle->ops->lib_ops.get_build_date == NULL) ||
|
|
+ (handle->ops->lib_ops.get_transport_name == NULL)) {
|
|
+ rc = -EINVAL;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ (*handle->ops->lib_ops.get_library_name) (&library_name,
|
|
+ &library_name_size);
|
|
+ (*handle->ops->lib_ops.get_library_version) (&library_version,
|
|
+ &library_version_size);
|
|
+ (*handle->ops->lib_ops.get_build_date) (&build_date_str,
|
|
+ &build_date_str_size);
|
|
+
|
|
+ LOG_DEBUG("Loaded nic library '%s' Version: '%s' build on %s'",
|
|
+ library_name, library_version, build_date_str);
|
|
+
|
|
+ pthread_mutex_unlock(&handle->mutex);
|
|
+
|
|
+ return 0;
|
|
+
|
|
+ error:
|
|
+ pthread_mutex_unlock(&handle->mutex);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+static struct nic_ops *(*nic_get_ops[]) () = {
|
|
+bnx2_get_ops, bnx2x_get_ops,};
|
|
+
|
|
+int load_all_nic_libraries()
|
|
+{
|
|
+ int rc, i = 0;
|
|
+ nic_lib_handle_t *handle;
|
|
+
|
|
+ for (i = 0; i < sizeof(nic_get_ops) / sizeof(nic_get_ops[0]); i++) {
|
|
+ /* Add the CNIC library */
|
|
+ handle = alloc_nic_library_handle();
|
|
+ if (handle == NULL) {
|
|
+ LOG_ERR("Could not allocate memory for CNIC nic lib");
|
|
+ return -ENOMEM;
|
|
+ }
|
|
+
|
|
+ handle->ops = (*nic_get_ops[i]) ();
|
|
+
|
|
+ rc = load_nic_library(handle);
|
|
+ if (rc != 0)
|
|
+ return rc;
|
|
+
|
|
+ /* Add the CNIC library to the list of library handles */
|
|
+ pthread_mutex_lock(&nic_lib_list_mutex);
|
|
+
|
|
+ /* Add this library to the list of nic libraries we
|
|
+ * know about */
|
|
+ if (nic_lib_list == NULL) {
|
|
+ nic_lib_list = handle;
|
|
+ } else {
|
|
+ nic_lib_handle_t *current = nic_lib_list;
|
|
+
|
|
+ while (current->next != NULL) {
|
|
+ current = current->next;
|
|
+ }
|
|
+
|
|
+ current->next = handle;
|
|
+ }
|
|
+ pthread_mutex_unlock(&nic_lib_list_mutex);
|
|
+
|
|
+ LOG_DEBUG("Added '%s' nic library", handle->ops->description);
|
|
+ }
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+int unload_all_nic_libraries()
|
|
+{
|
|
+ nic_lib_handle_t *current, *next;
|
|
+
|
|
+ pthread_mutex_lock(&nic_lib_list_mutex);
|
|
+ current = nic_lib_list;
|
|
+
|
|
+ while (current != NULL) {
|
|
+ next = current->next;
|
|
+ free_nic_library_handle(current);
|
|
+
|
|
+ current = next;
|
|
+ }
|
|
+
|
|
+ pthread_mutex_unlock(&nic_lib_list_mutex);
|
|
+
|
|
+ nic_lib_list = NULL;
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+NIC_LIBRARY_EXIST_T does_nic_uio_name_exist(char *name)
|
|
+{
|
|
+ NIC_LIBRARY_EXIST_T rc;
|
|
+ nic_lib_handle_t *current;
|
|
+
|
|
+ pthread_mutex_lock(&nic_lib_list_mutex);
|
|
+ current = nic_lib_list;
|
|
+
|
|
+ while (current != NULL) {
|
|
+ char *uio_name;
|
|
+ size_t uio_name_size;
|
|
+
|
|
+ (*current->ops->lib_ops.get_uio_name) (&uio_name,
|
|
+ &uio_name_size);
|
|
+
|
|
+ if (strncmp(name, uio_name, uio_name_size) == 0) {
|
|
+ rc = NIC_LIBRARY_EXSITS;
|
|
+ goto done;
|
|
+ }
|
|
+
|
|
+ current = current->next;
|
|
+ }
|
|
+
|
|
+ rc = NIC_LIBRARY_DOESNT_EXIST;
|
|
+
|
|
+ done:
|
|
+ pthread_mutex_unlock(&nic_lib_list_mutex);
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+NIC_LIBRARY_EXIST_T does_nic_library_exist(char *name)
|
|
+{
|
|
+ NIC_LIBRARY_EXIST_T rc;
|
|
+ nic_lib_handle_t *current;
|
|
+
|
|
+ pthread_mutex_lock(&nic_lib_list_mutex);
|
|
+ current = nic_lib_list;
|
|
+
|
|
+ while (current != NULL) {
|
|
+ char *library_name;
|
|
+ size_t library_name_size;
|
|
+
|
|
+ (*current->ops->lib_ops.get_library_name) (&library_name,
|
|
+ &library_name_size);
|
|
+
|
|
+ if (strncmp(name, library_name, library_name_size) == 0) {
|
|
+ rc = NIC_LIBRARY_EXSITS;
|
|
+ goto done;
|
|
+ }
|
|
+
|
|
+ current = current->next;
|
|
+ }
|
|
+
|
|
+ rc = NIC_LIBRARY_DOESNT_EXIST;
|
|
+
|
|
+ done:
|
|
+ pthread_mutex_unlock(&nic_lib_list_mutex);
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * find_nic_lib_using_pci_id() - Find the proper NIC library using the
|
|
+ * PCI ID's
|
|
+ * @param vendor - PCI vendor ID to search on
|
|
+ * @param device - PCI device ID to search on
|
|
+ * @param subvendor - PCI subvendor ID to search on
|
|
+ * @param subdevice - PCI subdevice ID to search on
|
|
+ * @param handle - This function will return the nic lib handle if found
|
|
+ * @return 0 if found, <0 not found
|
|
+ */
|
|
+int find_nic_lib_using_pci_id(uint32_t vendor, uint32_t device,
|
|
+ uint32_t subvendor, uint32_t subdevice,
|
|
+ nic_lib_handle_t ** handle,
|
|
+ struct pci_device_id **pci_entry)
|
|
+{
|
|
+ int rc;
|
|
+ nic_lib_handle_t *current;
|
|
+
|
|
+ pthread_mutex_lock(&nic_lib_list_mutex);
|
|
+ current = nic_lib_list;
|
|
+
|
|
+ while (current != NULL) {
|
|
+ struct pci_device_id *pci_table;
|
|
+ uint32_t entries;
|
|
+ int i;
|
|
+
|
|
+ current->ops->lib_ops.get_pci_table(&pci_table, &entries);
|
|
+
|
|
+ /* Sanity check the the pci table coming from the
|
|
+ * hardware library */
|
|
+ if (entries > MAX_PCI_DEVICE_ENTRIES) {
|
|
+ LOG_WARN(PFX "Too many pci_table entries(%d) skipping",
|
|
+ entries);
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ for (i = 0; i < entries; i++) {
|
|
+ LOG_DEBUG(PFX "Checking against: "
|
|
+ "vendor: 0x%x device:0x%x "
|
|
+ "subvendor:0x%x subdevice:0x%x",
|
|
+ pci_table[i].vendor, pci_table[i].device,
|
|
+ pci_table[i].subvendor,
|
|
+ pci_table[i].subdevice);
|
|
+
|
|
+ if ((pci_table[i].vendor == vendor) &&
|
|
+ (pci_table[i].device == device) &&
|
|
+ (pci_table[i].subvendor == PCI_ANY_ID ||
|
|
+ pci_table[i].subvendor == subvendor) &&
|
|
+ (pci_table[i].subdevice == PCI_ANY_ID ||
|
|
+ pci_table[i].subdevice == subdevice)) {
|
|
+ *handle = current;
|
|
+ *pci_entry = &pci_table[i];
|
|
+ rc = 0;
|
|
+ goto done;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ current = current->next;
|
|
+ }
|
|
+ rc = -EINVAL;
|
|
+
|
|
+ done:
|
|
+ pthread_mutex_unlock(&nic_lib_list_mutex);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * nic_init() - This will properly initialize a struct cnic_uio device
|
|
+ * @return NULL is there is a failure and pointer to an allocated/initialized
|
|
+ * struct cnic_uio on success
|
|
+ */
|
|
+nic_t *nic_init()
|
|
+{
|
|
+ nic_t *nic;
|
|
+
|
|
+ nic = malloc(sizeof(*nic));
|
|
+ if (nic == NULL) {
|
|
+ LOG_ERR("Couldn't malloc space for nic");
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ memset(nic, 0, sizeof(*nic));
|
|
+ nic->uio_minor = -1;
|
|
+ nic->fd = INVALID_FD;
|
|
+ nic->next = NULL;
|
|
+ nic->thread = INVALID_THREAD;
|
|
+ nic->enable_thread = INVALID_THREAD;
|
|
+ nic->flags |= NIC_UNITIALIZED | NIC_DISABLED;
|
|
+ nic->state |= NIC_STOPPED;
|
|
+ nic->free_packet_queue = NULL;
|
|
+ nic->tx_packet_queue = NULL;
|
|
+ nic->nic_library = NULL;
|
|
+ nic->pci_id = NULL;
|
|
+
|
|
+ pthread_mutex_init(&nic->nic_mutex, NULL);
|
|
+ pthread_mutex_init(&nic->xmit_mutex, NULL);
|
|
+ pthread_mutex_init(&nic->free_packet_queue_mutex, NULL);
|
|
+
|
|
+ pthread_cond_init(&nic->enable_wait_cond, NULL);
|
|
+ pthread_cond_init(&nic->enable_done_cond, NULL);
|
|
+ pthread_cond_init(&nic->nic_loop_started_cond, NULL);
|
|
+ pthread_cond_init(&nic->disable_wait_cond, NULL);
|
|
+
|
|
+ nic->rx_poll_usec = DEFAULT_RX_POLL_USEC;
|
|
+
|
|
+ return nic;
|
|
+}
|
|
+
|
|
+void nic_add(nic_t * nic)
|
|
+{
|
|
+ /* Add this device to our list of nics */
|
|
+ if (nic_list == NULL) {
|
|
+ nic_list = nic;
|
|
+ } else {
|
|
+ nic_t *current = nic_list;
|
|
+
|
|
+ while (current->next != NULL) {
|
|
+ current = current->next;
|
|
+ }
|
|
+
|
|
+ current->next = nic;
|
|
+ }
|
|
+}
|
|
+
|
|
+/**
|
|
+ * nic_remove() - Used to remove the NIC for the nic list
|
|
+ nic_list_mutex must be taken
|
|
+ * @param nic - the nic to remove
|
|
+ */
|
|
+int nic_remove(nic_t * nic)
|
|
+{
|
|
+ int rc;
|
|
+ nic_t *prev, *current;
|
|
+ struct stat file_stat;
|
|
+ void *res;
|
|
+ nic_interface_t *nic_iface, *next_nic_iface, *vlan_iface;
|
|
+
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+
|
|
+ /* Check if the file node exists before closing */
|
|
+ rc = stat(nic->uio_device_name, &file_stat);
|
|
+ if ((rc == 0) && (nic->ops))
|
|
+ nic->ops->close(nic, 0);
|
|
+
|
|
+ nic->state = NIC_EXIT;
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+
|
|
+ if (nic->enable_thread != INVALID_THREAD) {
|
|
+ LOG_ERR(PFX "%s: Canceling nic enable thread", nic->log_name);
|
|
+
|
|
+ rc = pthread_cancel(nic->enable_thread);
|
|
+ if (rc != 0)
|
|
+ LOG_ERR(PFX "%s: Couldn't send cancel to nic enable "
|
|
+ "thread", nic->log_name);
|
|
+
|
|
+ LOG_ERR(PFX "%s: Waiting to join nic enable thread",
|
|
+ nic->log_name);
|
|
+ rc = pthread_join(nic->enable_thread, &res);
|
|
+ if (rc != 0)
|
|
+ LOG_ERR(PFX "%s: Couldn't join to canceled enable nic "
|
|
+ "thread", nic->log_name);
|
|
+ nic->enable_thread = INVALID_THREAD;
|
|
+ }
|
|
+ if (nic->thread != INVALID_THREAD) {
|
|
+ LOG_ERR(PFX "%s: Canceling nic thread", nic->log_name);
|
|
+
|
|
+ rc = pthread_cancel(nic->thread);
|
|
+ if (rc != 0)
|
|
+ LOG_ERR(PFX "%s: Couldn't send cancel to nic",
|
|
+ nic->log_name);
|
|
+
|
|
+ LOG_ERR(PFX "%s: Waiting to join nic thread", nic->log_name);
|
|
+ rc = pthread_join(nic->thread, &res);
|
|
+ if (rc != 0)
|
|
+ LOG_ERR(PFX "%s: Couldn't join to canceled nic thread",
|
|
+ nic->log_name);
|
|
+
|
|
+ nic->thread = INVALID_THREAD;
|
|
+ } else {
|
|
+ LOG_ERR(PFX "%s: NIC thread already canceled", nic->log_name);
|
|
+ }
|
|
+
|
|
+ current = prev = nic_list;
|
|
+ while (current != NULL) {
|
|
+ if (current == nic)
|
|
+ break;
|
|
+
|
|
+ prev = current;
|
|
+ current = current->next;
|
|
+ }
|
|
+
|
|
+ if (current != NULL) {
|
|
+ if (current == nic_list)
|
|
+ nic_list = current->next;
|
|
+ else
|
|
+ prev->next = current->next;
|
|
+
|
|
+ /* Before freeing the nic, must free all the associated
|
|
+ nic_iface */
|
|
+ nic_iface = nic->nic_iface;
|
|
+ while (nic_iface != NULL) {
|
|
+ vlan_iface = nic_iface->vlan_next;
|
|
+ while (vlan_iface != NULL) {
|
|
+ next_nic_iface = vlan_iface->vlan_next;
|
|
+ free(vlan_iface);
|
|
+ vlan_iface = next_nic_iface;
|
|
+ }
|
|
+ next_nic_iface = nic_iface->next;
|
|
+ free(nic_iface);
|
|
+ nic_iface = next_nic_iface;
|
|
+ }
|
|
+ free(nic);
|
|
+ } else {
|
|
+ LOG_ERR(PFX "%s: Couldn't find nic to remove", nic->log_name);
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * nic_close() - Used to indicate to a NIC that it should close
|
|
+ * Must be called with nic->nic_mutex
|
|
+ * @param nic - the nic to close
|
|
+ * @param graceful - ALLOW_GRACEFUL_SHUTDOWN will check the nic state
|
|
+ * before proceeding to close()
|
|
+ * FORCE_SHUTDOWN will force the nic to close()
|
|
+ * reguardless of the state
|
|
+ * @param clean - this will free the proper strings assoicated
|
|
+ * with the NIC
|
|
+ *
|
|
+ */
|
|
+void nic_close(nic_t * nic, NIC_SHUTDOWN_T graceful, int clean)
|
|
+{
|
|
+ int rc;
|
|
+ nic_interface_t *nic_iface, *vlan_iface;
|
|
+ struct stat file_stat;
|
|
+
|
|
+ /* The NIC could be configured by the uIP config file
|
|
+ * but not assoicated with a hardware library just yet
|
|
+ * we will need to check for this */
|
|
+ if (nic->ops == NULL) {
|
|
+ LOG_WARN(PFX "%s: when closing nic->ops == NULL",
|
|
+ nic->log_name);
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ /* Check if the file node exists */
|
|
+ rc = stat(nic->uio_device_name, &file_stat);
|
|
+ if ((rc == 0) && (nic->ops))
|
|
+ rc = (*nic->ops->close) (nic, graceful);
|
|
+ if (rc != 0) {
|
|
+ LOG_ERR(PFX "%s: Could not close nic", nic->log_name);
|
|
+ } else {
|
|
+ nic->state = NIC_STOPPED;
|
|
+ nic->flags &= ~NIC_ENABLED;
|
|
+ nic->flags |= NIC_DISABLED;
|
|
+ }
|
|
+
|
|
+ nic_iface = nic->nic_iface;
|
|
+ while (nic_iface != NULL) {
|
|
+ if (!((nic_iface->flags & NIC_IFACE_PERSIST) ==
|
|
+ NIC_IFACE_PERSIST)) {
|
|
+ uip_reset(&nic_iface->ustack);
|
|
+ vlan_iface = nic_iface->vlan_next;
|
|
+ while (vlan_iface != NULL) {
|
|
+ uip_reset(&vlan_iface->ustack);
|
|
+ vlan_iface = vlan_iface->vlan_next;
|
|
+ }
|
|
+ }
|
|
+ nic_iface = nic_iface->next;
|
|
+ }
|
|
+
|
|
+ /* The NIC must be destroyed and init'ed once again,
|
|
+ * POSIX defines that the mutex will be undefined it
|
|
+ * init'ed twice without a destroy */
|
|
+ pthread_mutex_destroy(&nic->xmit_mutex);
|
|
+ pthread_mutex_init(&nic->xmit_mutex, NULL);
|
|
+
|
|
+ if (clean & FREE_CONFIG_NAME) {
|
|
+ /* Free any named strings we might be holding onto */
|
|
+ if (nic->flags & NIC_CONFIG_NAME_MALLOC) {
|
|
+ free(nic->config_device_name);
|
|
+ nic->flags &= ~NIC_CONFIG_NAME_MALLOC;
|
|
+ }
|
|
+ nic->config_device_name = NULL;
|
|
+ }
|
|
+
|
|
+ if (clean & FREE_UIO_NAME) {
|
|
+ if (nic->flags & NIC_UIO_NAME_MALLOC) {
|
|
+ free(nic->uio_device_name);
|
|
+ nic->uio_device_name = NULL;
|
|
+
|
|
+ nic->flags &= ~NIC_UIO_NAME_MALLOC;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ LOG_ERR(PFX "%s: nic closed", nic->log_name);
|
|
+error:
|
|
+ return;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * net_iface_init() - This function is used to add an interface to the
|
|
+ * structure cnic_uio
|
|
+ * @return 0 on success, <0 on failure
|
|
+ */
|
|
+nic_interface_t *nic_iface_init()
|
|
+{
|
|
+ nic_interface_t *nic_iface = malloc(sizeof(*nic_iface));
|
|
+ if (nic_iface == NULL) {
|
|
+ LOG_ERR("Could not allocate space for nic iface");
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ memset(nic_iface, 0, sizeof(*nic_iface));
|
|
+ nic_iface->next = NULL;
|
|
+ nic_iface->vlan_next = NULL;
|
|
+
|
|
+ return nic_iface;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * nic_add_nic_iface() - This function is used to add an interface to the
|
|
+ * nic structure
|
|
+ * @param nic - struct nic device to add the interface to
|
|
+ * @param nic_iface - network interface used to add to the nic
|
|
+ * @return 0 on success, <0 on failure
|
|
+ */
|
|
+int nic_add_nic_iface(nic_t * nic, nic_interface_t * nic_iface)
|
|
+{
|
|
+
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+
|
|
+ /* Add the nic_interface */
|
|
+ if (nic->nic_iface == NULL) {
|
|
+ nic->nic_iface = nic_iface;
|
|
+ } else {
|
|
+ nic_interface_t *current = nic->nic_iface;
|
|
+
|
|
+ /* Check to see if this interface already exists via 2
|
|
+ * conditions: 1) VLAN 2) protocol */
|
|
+ while (current != NULL) {
|
|
+ if ((current->protocol == nic_iface->protocol) &&
|
|
+ (current->vlan_id == nic_iface->vlan_id)) {
|
|
+ LOG_WARN(PFX "%s: nic interface alread exists"
|
|
+ "for VLAN: %d, protocol: %d",
|
|
+ nic->log_name, current->vlan_id,
|
|
+ current->protocol);
|
|
+ goto error;
|
|
+ }
|
|
+ current = current->next;
|
|
+ }
|
|
+
|
|
+ /* This interface doesn't exists, we can safely add
|
|
+ * this nic interface */
|
|
+ current = nic->nic_iface;
|
|
+ while (current->next != NULL) {
|
|
+ current = current->next;
|
|
+ }
|
|
+
|
|
+ current->next = nic_iface;
|
|
+ }
|
|
+
|
|
+ /* Set nic_interface common fields */
|
|
+ nic_iface->parent = nic;
|
|
+ nic->num_of_nic_iface++;
|
|
+
|
|
+ LOG_INFO(PFX "%s: Added nic interface for VLAN: %d, protocol: %d",
|
|
+ nic->log_name, nic_iface->vlan_id, nic_iface->protocol);
|
|
+
|
|
+error:
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * nic_add_vlan_iface() - This function is used to add a vlan interface to the
|
|
+ * nic structure
|
|
+ * @param nic - struct nic device to add the interface to
|
|
+ * @param nic_iface - network interface to be added to
|
|
+ * @param vlan_iface - vlan interface used to add to the nic_iface
|
|
+ * @return 0 on success, <0 on failure
|
|
+ */
|
|
+int nic_add_vlan_iface(nic_t *nic, nic_interface_t *nic_iface,
|
|
+ nic_interface_t *vlan_iface)
|
|
+{
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+
|
|
+ /* Add the nic_interface */
|
|
+ if (nic_iface == NULL)
|
|
+ goto error;
|
|
+ else {
|
|
+ nic_interface_t *current = nic_iface->vlan_next;
|
|
+
|
|
+ /* Check to see if this interface already exists via 2
|
|
+ * conditions: 1) VLAN 2) protocol */
|
|
+ while (current != NULL) {
|
|
+ if ((current->protocol == vlan_iface->protocol) &&
|
|
+ (current->vlan_id == vlan_iface->vlan_id)) {
|
|
+ LOG_WARN(PFX "%s: vlan interface already exists"
|
|
+ "for VLAN: %d, protocol: %d",
|
|
+ nic->log_name, current->vlan_id,
|
|
+ current->protocol);
|
|
+ goto error;
|
|
+ }
|
|
+ current = current->vlan_next;
|
|
+ }
|
|
+
|
|
+ /* This interface doesn't exists, we can safely add
|
|
+ * this nic interface */
|
|
+ current = nic_iface;
|
|
+ while (current->vlan_next != NULL)
|
|
+ current = current->vlan_next;
|
|
+
|
|
+ current->vlan_next = vlan_iface;
|
|
+ }
|
|
+
|
|
+ /* Set nic_interface common fields */
|
|
+ vlan_iface->parent = nic;
|
|
+ nic->num_of_nic_iface++;
|
|
+
|
|
+ LOG_INFO(PFX "%s: Added vlan interface for VLAN: %d, protocol: %d",
|
|
+ nic->log_name, vlan_iface->vlan_id, vlan_iface->protocol);
|
|
+
|
|
+error:
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+/******************************************************************************
|
|
+ * Routine to process interrupts from the NIC device
|
|
+ ******************************************************************************/
|
|
+/**
|
|
+ * nic_process_intr() - Routine used to process interrupts from the hardware
|
|
+ * @param nic - NIC hardware to process the interrupt on
|
|
+ * @return 0 on success, <0 on failure
|
|
+ */
|
|
+int nic_process_intr(nic_t * nic, int discard_check)
|
|
+{
|
|
+ fd_set fdset;
|
|
+ int ret;
|
|
+ int count;
|
|
+ struct timeval tv;
|
|
+
|
|
+ /* Simple sanity checks */
|
|
+ if ((discard_check != 1) && (nic->state & NIC_RUNNING) != NIC_RUNNING) {
|
|
+ LOG_ERR(PFX "%s: Couldn't process interupt NIC not running",
|
|
+ nic->log_name);
|
|
+ return -EBUSY;
|
|
+ }
|
|
+
|
|
+ if ((discard_check != 1) && (nic->fd == INVALID_FD)) {
|
|
+ LOG_ERR(PFX "%s: NIC fd not valid", nic->log_name);
|
|
+ return -EIO;
|
|
+ }
|
|
+
|
|
+ FD_ZERO(&fdset);
|
|
+ FD_SET(nic->fd, &fdset);
|
|
+
|
|
+ tv.tv_sec = 0;
|
|
+ if (nic->state & NIC_LONG_SLEEP) {
|
|
+ tv.tv_usec = 1000;
|
|
+ } else {
|
|
+ tv.tv_usec = nic->rx_poll_usec;
|
|
+ }
|
|
+
|
|
+ /* Wait for an interrupt to come in or timeout */
|
|
+ ret = select(nic->fd + 1, &fdset, NULL, NULL, &tv);
|
|
+ switch (ret) {
|
|
+ case 1:
|
|
+ /* Usually there should only be one file descriptor ready
|
|
+ * to read */
|
|
+ break;
|
|
+ case 0:
|
|
+ return ret;
|
|
+ case -1:
|
|
+ LOG_ERR(PFX "%s: error waiting for interrupt: %s",
|
|
+ nic->log_name, strerror(errno));
|
|
+ return 0;
|
|
+ default:
|
|
+ LOG_ERR(PFX "%s: unknown number of FD's, ignoring: %d ret",
|
|
+ nic->log_name, ret);
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
+ ret = read(nic->fd, &count, sizeof(count));
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+ if (ret > 0) {
|
|
+ nic->stats.interrupts++;
|
|
+ LOG_DEBUG(PFX "%s: interrupt count: %d prev: %d",
|
|
+ nic->log_name, count, nic->intr_count);
|
|
+
|
|
+ if (count == nic->intr_count) {
|
|
+ LOG_WARN(PFX "%s: got interrupt but count still the "
|
|
+ "same", nic->log_name, count);
|
|
+ }
|
|
+
|
|
+ /* Check if we missed an interrupt. With UIO,
|
|
+ * the count should be incremental */
|
|
+ if (count != nic->intr_count + 1) {
|
|
+ nic->stats.missed_interrupts++;
|
|
+ LOG_DEBUG(PFX "%s: Missed interrupt! on %d not %d",
|
|
+ nic->log_name, count, nic->intr_count);
|
|
+ }
|
|
+
|
|
+ nic->intr_count = count;
|
|
+
|
|
+ (*nic->ops->clear_tx_intr) (nic);
|
|
+ ret = 1;
|
|
+ }
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+
|
|
+ return ret;
|
|
+}
|
|
+
|
|
+static void prepare_ipv4_packet(nic_t * nic,
|
|
+ nic_interface_t * nic_iface,
|
|
+ struct uip_stack *ustack, packet_t * pkt)
|
|
+{
|
|
+ u16_t ipaddr[2];
|
|
+ arp_table_query_t arp_query;
|
|
+ dest_ipv4_addr_t dest_ipv4_addr;
|
|
+ struct arp_entry *tabptr;
|
|
+ int queue_rc;
|
|
+ int vlan_id = 0;
|
|
+
|
|
+ if (nic_iface->vlan_id && !(NIC_VLAN_STRIP_ENABLED & nic->flags))
|
|
+ vlan_id = nic_iface->vlan_id;
|
|
+
|
|
+ dest_ipv4_addr = uip_determine_dest_ipv4_addr(ustack, ipaddr);
|
|
+ if (dest_ipv4_addr == LOCAL_BROADCAST) {
|
|
+ uip_build_eth_header(ustack, ipaddr, NULL, pkt, vlan_id);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ arp_query = is_in_arp_table(ipaddr, &tabptr);
|
|
+
|
|
+ switch (arp_query) {
|
|
+ case IS_IN_ARP_TABLE:
|
|
+ uip_build_eth_header(ustack,
|
|
+ ipaddr, tabptr, pkt, vlan_id);
|
|
+ break;
|
|
+ case NOT_IN_ARP_TABLE:
|
|
+ queue_rc = nic_queue_tx_packet(nic, nic_iface, pkt);
|
|
+ uip_build_arp_request(ustack, ipaddr);
|
|
+ break;
|
|
+ default:
|
|
+ LOG_ERR("Unknown arp state");
|
|
+ break;
|
|
+ }
|
|
+}
|
|
+
|
|
+static void prepare_ipv6_packet(nic_t * nic,
|
|
+ nic_interface_t * nic_iface,
|
|
+ struct uip_stack *ustack, packet_t * pkt)
|
|
+{
|
|
+ struct uip_eth_hdr *eth;
|
|
+ struct uip_vlan_eth_hdr *eth_vlan;
|
|
+ int vlan_id = 0;
|
|
+
|
|
+ if (nic_iface->vlan_id && !(NIC_VLAN_STRIP_ENABLED & nic->flags))
|
|
+ vlan_id = nic_iface->vlan_id;
|
|
+
|
|
+ eth = (struct uip_eth_hdr *)ustack->data_link_layer;
|
|
+ eth_vlan = (struct uip_vlan_eth_hdr *)ustack->data_link_layer;
|
|
+ if (vlan_id == 0) {
|
|
+ eth->type = htons(UIP_ETHTYPE_IPv6);
|
|
+ } else {
|
|
+ eth_vlan->tpid = htons(UIP_ETHTYPE_8021Q);
|
|
+ eth_vlan->vid = htons(vlan_id);
|
|
+ eth_vlan->type = htons(UIP_ETHTYPE_IPv6);
|
|
+ }
|
|
+}
|
|
+
|
|
+static void prepare_ustack(nic_t * nic,
|
|
+ nic_interface_t * nic_iface,
|
|
+ struct uip_stack *ustack, struct packet *pkt)
|
|
+{
|
|
+ struct ether_header *eth = NULL;
|
|
+ ustack->uip_buf = pkt->buf;
|
|
+ ustack->uip_len = pkt->buf_size;
|
|
+
|
|
+ pkt->nic = nic;
|
|
+ pkt->nic_iface = nic_iface;
|
|
+
|
|
+ ustack->data_link_layer = pkt->buf;
|
|
+ /* Adjust the network layer pointer depending if
|
|
+ * there is a VLAN tag or not, or if the hardware
|
|
+ * has stripped out the
|
|
+ * VLAN tag */
|
|
+ if ((nic_iface->vlan_id == 0) || (NIC_VLAN_STRIP_ENABLED & nic->flags)) {
|
|
+ ustack->network_layer = ustack->data_link_layer +
|
|
+ sizeof(struct uip_eth_hdr);
|
|
+ } else {
|
|
+ ustack->network_layer = ustack->data_link_layer +
|
|
+ sizeof(struct uip_vlan_eth_hdr);
|
|
+ }
|
|
+ /* Init buffer to be IPv6 */
|
|
+ if (nic_iface->ustack.ip_config == IPV6_CONFIG_DHCP ||
|
|
+ nic_iface->ustack.ip_config == IPV6_CONFIG_STATIC) {
|
|
+ eth = (struct ether_header *)ustack->data_link_layer;
|
|
+ eth->ether_type = UIP_ETHTYPE_IPv6;
|
|
+ }
|
|
+}
|
|
+
|
|
+static int check_timers(nic_t * nic,
|
|
+ struct timer *periodic_timer, struct timer *arp_timer)
|
|
+{
|
|
+ if (timer_expired(periodic_timer)) {
|
|
+ int i;
|
|
+ nic_interface_t *current;
|
|
+
|
|
+ timer_reset(periodic_timer);
|
|
+
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+
|
|
+ current = nic->nic_iface;
|
|
+ while (current != NULL) {
|
|
+ packet_t *pkt;
|
|
+ struct uip_stack *ustack = ¤t->ustack;
|
|
+
|
|
+ pkt = get_next_free_packet(nic);
|
|
+ if (pkt == NULL) {
|
|
+ current = current->next;
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ for (i = 0; i < UIP_UDP_CONNS; i++) {
|
|
+ prepare_ustack(nic, current, ustack, pkt);
|
|
+
|
|
+ uip_udp_periodic(ustack, i);
|
|
+ /* If the above function invocation resulted
|
|
+ * in data that should be sent out on the
|
|
+ * network, the global variable uip_len is
|
|
+ * set to a value > 0. */
|
|
+ if (ustack->uip_len > 0) {
|
|
+ pkt->buf_size = ustack->uip_len;
|
|
+
|
|
+ prepare_ipv4_packet(nic,
|
|
+ current,
|
|
+ ustack, pkt);
|
|
+
|
|
+ (*nic->ops->write) (nic, current, pkt);
|
|
+ ustack->uip_len = 0;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /* Added periodic poll for IPv6 NDP engine */
|
|
+ if (ustack->ndpc != NULL) { /* If engine is active */
|
|
+ prepare_ustack(nic, current, ustack, pkt);
|
|
+
|
|
+ uip_ndp_periodic(ustack);
|
|
+ /* If the above function invocation resulted
|
|
+ * in data that should be sent out on the
|
|
+ * network, the global variable uip_len is
|
|
+ * set to a value > 0. */
|
|
+ if (ustack->uip_len > 0) {
|
|
+ pkt->buf_size = ustack->uip_len;
|
|
+ prepare_ipv6_packet(nic,
|
|
+ current,
|
|
+ ustack, pkt);
|
|
+ (*nic->ops->write) (nic, current, pkt);
|
|
+ ustack->uip_len = 0;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /* Call the ARP timer function every 10 seconds. */
|
|
+ if (timer_expired(arp_timer)) {
|
|
+ timer_reset(arp_timer);
|
|
+ uip_arp_timer();
|
|
+ }
|
|
+
|
|
+ put_packet_in_free_queue(pkt, nic);
|
|
+
|
|
+ current = current->next;
|
|
+ }
|
|
+
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+int process_packets(nic_t * nic,
|
|
+ struct timer *periodic_timer,
|
|
+ struct timer *arp_timer, nic_interface_t * nic_iface)
|
|
+{
|
|
+ int rc;
|
|
+ packet_t *pkt;
|
|
+
|
|
+ pkt = get_next_free_packet(nic);
|
|
+ if (pkt == NULL) {
|
|
+ LOG_DEBUG(PFX "%s: Couldn't get buffer for processing packet",
|
|
+ nic->log_name);
|
|
+ return -ENOMEM;
|
|
+ }
|
|
+
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+ rc = (*nic->ops->read) (nic, pkt);
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+
|
|
+ if ((rc != 0) && (pkt->buf_size > 0)) {
|
|
+ uint16_t type = 0;
|
|
+ int af_type = 0;
|
|
+ struct uip_stack *ustack;
|
|
+ nic_interface_t *vlan_iface;
|
|
+
|
|
+ if ((pkt->vlan_tag == 0) ||
|
|
+ (NIC_VLAN_STRIP_ENABLED & nic->flags)) {
|
|
+ type = ntohs(ETH_BUF(pkt->buf)->type);
|
|
+ } else {
|
|
+ type = ntohs(VLAN_ETH_BUF(pkt->buf)->type);
|
|
+ }
|
|
+
|
|
+ switch (type) {
|
|
+ case UIP_ETHTYPE_IPv6:
|
|
+ af_type = AF_INET6;
|
|
+ break;
|
|
+ case UIP_ETHTYPE_IPv4:
|
|
+ af_type = AF_INET;
|
|
+ break;
|
|
+ case UIP_ETHTYPE_ARP:
|
|
+ af_type = AF_INET;
|
|
+ break;
|
|
+ default:
|
|
+ LOG_DEBUG(PFX "%s: Ignoring vlan:0x%x ethertype:0x%x",
|
|
+ nic->log_name, pkt->vlan_tag, type);
|
|
+ goto done;
|
|
+ }
|
|
+
|
|
+ /* check if we have the given VLAN interface */
|
|
+ if (nic_iface == NULL) {
|
|
+ nic_iface = nic_find_nic_iface_protocol(nic, 0,
|
|
+ af_type);
|
|
+ if (nic_iface == NULL) {
|
|
+ LOG_INFO(PFX "%s: Couldn't find interface for "
|
|
+ "VLAN: %d af_type %d creating it",
|
|
+ nic->log_name, pkt->vlan_tag, af_type);
|
|
+
|
|
+ /* Create the vlan interface */
|
|
+ nic_iface = nic_iface_init();
|
|
+
|
|
+ if (nic_iface == NULL) {
|
|
+ LOG_WARN(PFX "%s: Couldn't "
|
|
+ "allocate "
|
|
+ "nic_iface for "
|
|
+ "VLAN: %d af_type %d",
|
|
+ nic->log_name, pkt->vlan_tag,
|
|
+ af_type);
|
|
+ rc = 0;
|
|
+ goto done;
|
|
+ }
|
|
+
|
|
+ nic_iface->protocol = af_type;
|
|
+ nic_iface->vlan_id = 0;
|
|
+ nic_add_nic_iface(nic, nic_iface);
|
|
+
|
|
+ persist_all_nic_iface(nic);
|
|
+ }
|
|
+ if (pkt->vlan_tag) {
|
|
+ vlan_iface = nic_find_vlan_iface_protocol(nic,
|
|
+ nic_iface, pkt->vlan_tag,
|
|
+ af_type);
|
|
+ if (vlan_iface == NULL) {
|
|
+ LOG_INFO(PFX "%s couldn't find "
|
|
+ "interface with VLAN ="
|
|
+ " %d ip_type: 0x%x "
|
|
+ "creating it",
|
|
+ nic->log_name, pkt->vlan_tag,
|
|
+ af_type);
|
|
+
|
|
+ /* Create the nic interface */
|
|
+ vlan_iface = nic_iface_init();
|
|
+
|
|
+ if (vlan_iface == NULL) {
|
|
+ LOG_ERR(PFX "Couldn't allocate "
|
|
+ "nic_iface for VLAN: %d",
|
|
+ vlan_iface,
|
|
+ pkt->vlan_tag);
|
|
+ rc = 0;
|
|
+ goto done;
|
|
+ }
|
|
+ vlan_iface->protocol = af_type;
|
|
+ vlan_iface->vlan_id = pkt->vlan_tag;
|
|
+ nic_add_vlan_iface(nic, nic_iface,
|
|
+ vlan_iface);
|
|
+ /* TODO: When VLAN support is placed */
|
|
+ /* in the iface file revisit this */
|
|
+ /* code */
|
|
+ memcpy(vlan_iface->ustack.hostaddr,
|
|
+ nic_iface->ustack.hostaddr,
|
|
+ sizeof(nic_iface->ustack.hostaddr));
|
|
+ memcpy(vlan_iface->ustack.netmask,
|
|
+ nic_iface->ustack.netmask,
|
|
+ sizeof(nic_iface->ustack.netmask));
|
|
+ memcpy(vlan_iface->ustack.netmask6,
|
|
+ nic_iface->ustack.netmask6,
|
|
+ sizeof(nic_iface->ustack.netmask6));
|
|
+ memcpy(vlan_iface->ustack.hostaddr6,
|
|
+ nic_iface->ustack.hostaddr6,
|
|
+ sizeof(nic_iface->ustack.hostaddr6));
|
|
+
|
|
+ persist_all_nic_iface(nic);
|
|
+ }
|
|
+ nic_iface = vlan_iface;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ pkt->nic_iface = nic_iface;
|
|
+
|
|
+ ustack = &nic_iface->ustack;
|
|
+
|
|
+ ustack->uip_buf = pkt->buf;
|
|
+ ustack->uip_len = pkt->buf_size;
|
|
+ ustack->data_link_layer = pkt->buf;
|
|
+
|
|
+ pkt->data_link_layer = pkt->buf;
|
|
+
|
|
+ /* Adjust the network layer pointer depending if there is a
|
|
+ * VLAN tag or not, or if the hardware has stripped out the
|
|
+ * VLAN tag */
|
|
+ if ((pkt->vlan_tag == 0) ||
|
|
+ (NIC_VLAN_STRIP_ENABLED & nic->flags)) {
|
|
+ ustack->network_layer = ustack->data_link_layer +
|
|
+ sizeof(struct uip_eth_hdr);
|
|
+ pkt->network_layer = pkt->data_link_layer +
|
|
+ sizeof(struct uip_eth_hdr);
|
|
+ type = ntohs(ETH_BUF(pkt->buf)->type);
|
|
+ } else {
|
|
+ ustack->network_layer = ustack->data_link_layer +
|
|
+ sizeof(struct uip_vlan_eth_hdr);
|
|
+ pkt->network_layer = pkt->data_link_layer +
|
|
+ sizeof(struct uip_vlan_eth_hdr);
|
|
+ type = ntohs(VLAN_ETH_BUF(pkt->buf)->type);
|
|
+ }
|
|
+
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+ /* determine how we should process this packet based on the
|
|
+ * ethernet type */
|
|
+ switch (type) {
|
|
+ case UIP_ETHTYPE_IPv6:
|
|
+ uip_input(ustack);
|
|
+ if (ustack->uip_len > 0) {
|
|
+ /* The pkt generated has already consulted
|
|
+ the IPv6 ARP table */
|
|
+ pkt->buf_size = ustack->uip_len;
|
|
+ prepare_ipv6_packet(nic, nic_iface,
|
|
+ ustack, pkt);
|
|
+
|
|
+ (*nic->ops->write) (nic, nic_iface, pkt);
|
|
+ }
|
|
+ break;
|
|
+ case UIP_ETHTYPE_IPv4:
|
|
+ uip_arp_ipin(ustack, pkt);
|
|
+ uip_input(ustack);
|
|
+ /* If the above function invocation resulted
|
|
+ * in data that should be sent out on the
|
|
+ * network, the global variable uip_len is
|
|
+ * set to a value > 0. */
|
|
+ if (ustack->uip_len > 0) {
|
|
+ prepare_ipv4_packet(nic, nic_iface,
|
|
+ ustack, pkt);
|
|
+
|
|
+ (*nic->ops->write) (nic, nic_iface, pkt);
|
|
+ }
|
|
+
|
|
+ break;
|
|
+ case UIP_ETHTYPE_ARP:
|
|
+ uip_arp_arpin(nic_iface, ustack, pkt);
|
|
+
|
|
+ /* If the above function invocation resulted
|
|
+ * in data that should be sent out on the
|
|
+ * network, the global variable uip_len
|
|
+ * is set to a value > 0. */
|
|
+ if (pkt->buf_size > 0) {
|
|
+ (*nic->ops->write) (nic, nic_iface, pkt);
|
|
+ }
|
|
+ break;
|
|
+ }
|
|
+ ustack->uip_len = 0;
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+ }
|
|
+
|
|
+done:
|
|
+ put_packet_in_free_queue(pkt, nic);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+static int process_dhcp_loop(nic_t * nic,
|
|
+ nic_interface_t * nic_iface,
|
|
+ struct timer *periodic_timer,
|
|
+ struct timer *arp_timer)
|
|
+{
|
|
+ struct dhcpc_state *s;
|
|
+ struct ndpc_state *n;
|
|
+ int rc;
|
|
+ struct timeval start_time;
|
|
+ struct timeval current_time;
|
|
+ struct timeval wait_time;
|
|
+ struct timeval total_time;
|
|
+
|
|
+ /* 10s loop time to wait for DHCP */
|
|
+ switch (nic_iface->ustack.ip_config) {
|
|
+ case IPV4_CONFIG_DHCP:
|
|
+ wait_time.tv_sec = 10;
|
|
+ break;
|
|
+ case IPV6_CONFIG_DHCP:
|
|
+ wait_time.tv_sec = 15;
|
|
+ break;
|
|
+ case IPV6_CONFIG_STATIC:
|
|
+ wait_time.tv_sec = 4;
|
|
+ break;
|
|
+ default:
|
|
+ wait_time.tv_sec = 2;
|
|
+ }
|
|
+ wait_time.tv_usec = 0;
|
|
+
|
|
+ s = nic_iface->ustack.dhcpc;
|
|
+ n = nic_iface->ustack.ndpc;
|
|
+
|
|
+ if (gettimeofday(&start_time, NULL)) {
|
|
+ LOG_ERR(PFX "%s: Couldn't get time of day to start DHCP timer",
|
|
+ nic->log_name);
|
|
+ return -EIO;
|
|
+ }
|
|
+
|
|
+ timeradd(&start_time, &wait_time, &total_time);
|
|
+
|
|
+ periodic_timer->start = periodic_timer->start -
|
|
+ periodic_timer->interval;
|
|
+
|
|
+ while ((event_loop_stop == 0) &&
|
|
+ (nic->flags & NIC_ENABLED) && !(nic->flags & NIC_GOING_DOWN)) {
|
|
+
|
|
+ if (nic_iface->ustack.ip_config == IPV4_CONFIG_DHCP) {
|
|
+ if (s->state == STATE_CONFIG_RECEIVED)
|
|
+ break;
|
|
+ }
|
|
+ if (nic_iface->ustack.ip_config == IPV6_CONFIG_DHCP ||
|
|
+ nic_iface->ustack.ip_config == IPV6_CONFIG_STATIC) {
|
|
+ if (n->state == NDPC_STATE_BACKGROUND_LOOP)
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ /* Check the periodic and ARP timer */
|
|
+ check_timers(nic, periodic_timer, arp_timer);
|
|
+
|
|
+ rc = nic_process_intr(nic, 1);
|
|
+
|
|
+ while ((rc > 0) && (!(nic->flags & NIC_GOING_DOWN))) {
|
|
+ rc = process_packets(nic,
|
|
+ periodic_timer,
|
|
+ arp_timer, nic_iface);
|
|
+ }
|
|
+
|
|
+ if (gettimeofday(¤t_time, NULL)) {
|
|
+ LOG_ERR(PFX "%s: Couldn't get current time for "
|
|
+ "DHCP start", nic->log_name);
|
|
+ return -EIO;
|
|
+ }
|
|
+
|
|
+ if (timercmp(&total_time, ¤t_time, <)) {
|
|
+ LOG_ERR(PFX "%s: timeout waiting for DHCP",
|
|
+ nic->log_name);
|
|
+ return -EIO;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (nic->flags & NIC_GOING_DOWN)
|
|
+ return -EIO;
|
|
+ else
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+void *nic_loop(void *arg)
|
|
+{
|
|
+ nic_t *nic = (nic_t *) arg;
|
|
+ int rc = -1;
|
|
+ struct timer periodic_timer, arp_timer;
|
|
+ sigset_t set;
|
|
+ void *res;
|
|
+
|
|
+ sigfillset(&set);
|
|
+ rc = pthread_sigmask(SIG_BLOCK, &set, NULL);
|
|
+ if (rc != 0) {
|
|
+ /* TODO: determine if we need to exit this thread if we fail
|
|
+ * to set the signal mask */
|
|
+ LOG_ERR(PFX "%s: Couldn't set signal mask", nic->log_name);
|
|
+ }
|
|
+
|
|
+ /* Signal the device to enable itself */
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+ pthread_cond_signal(&nic->nic_loop_started_cond);
|
|
+
|
|
+ while ((event_loop_stop == 0) &&
|
|
+ !(nic->flags & NIC_EXIT_MAIN_LOOP) &&
|
|
+ !(nic->flags & NIC_GOING_DOWN)) {
|
|
+ nic_interface_t *nic_iface;
|
|
+
|
|
+ if (nic->flags & NIC_DISABLED) {
|
|
+ LOG_DEBUG(PFX "%s: Waiting to be enabled",
|
|
+ nic->log_name);
|
|
+
|
|
+ /* Wait for the device to be enabled */
|
|
+ /* nic_mutex is already locked */
|
|
+ pthread_cond_wait(&nic->enable_wait_cond,
|
|
+ &nic->nic_mutex);
|
|
+
|
|
+ if (nic->state == NIC_EXIT) {
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+ pthread_exit(NULL);
|
|
+ }
|
|
+ LOG_DEBUG(PFX "%s: is now enabled", nic->log_name);
|
|
+ }
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+
|
|
+ /* initialize the device to send/rec data */
|
|
+ rc = (*nic->ops->open) (nic);
|
|
+ if (rc != 0) {
|
|
+ LOG_ERR(PFX "%s: Could not initialize CNIC UIO device",
|
|
+ nic->log_name);
|
|
+
|
|
+ if (rc == -ENOTSUP)
|
|
+ nic->flags &= NIC_EXIT_MAIN_LOOP;
|
|
+ else
|
|
+ nic->flags &= ~NIC_ENABLED;
|
|
+
|
|
+ /* Signal that the device enable is done */
|
|
+ pthread_cond_broadcast(&nic->enable_done_cond);
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+
|
|
+ goto dev_close;
|
|
+ }
|
|
+
|
|
+ nic_set_all_nic_iface_mac_to_parent(nic);
|
|
+
|
|
+ rc = alloc_free_queue(nic, 5);
|
|
+ if (rc != 5) {
|
|
+ if (rc != 0) {
|
|
+ LOG_WARN(PFX "%s: Allocated %d packets "
|
|
+ "instead of %d", nic->log_name, rc, 5);
|
|
+ } else {
|
|
+ LOG_ERR(PFX "%s: No packets allocated "
|
|
+ "instead of %d", nic->log_name, 5);
|
|
+ /* Signal that the device enable is done */
|
|
+ pthread_cond_broadcast(&nic->enable_done_cond);
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+ goto dev_close;
|
|
+ }
|
|
+ }
|
|
+ /* Indication for the nic_disable routine that the nic
|
|
+ has started running */
|
|
+ nic->state |= NIC_STARTED_RUNNING;
|
|
+
|
|
+ /* Initialize the system clocks */
|
|
+ timer_set(&periodic_timer, CLOCK_SECOND / 2);
|
|
+ timer_set(&arp_timer, CLOCK_SECOND * 10);
|
|
+
|
|
+ /* Prepare the stack for each of the VLAN interfaces */
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+
|
|
+ nic_iface = nic->nic_iface;
|
|
+ while (nic_iface != NULL) {
|
|
+ uip_init(&nic_iface->ustack,
|
|
+ nic->flags & NIC_IPv6_ENABLED);
|
|
+ memcpy(&nic_iface->ustack.uip_ethaddr.addr,
|
|
+ nic->mac_addr, 6);
|
|
+
|
|
+ LOG_INFO(PFX "%s: Initialized ip stack: VLAN: %d",
|
|
+ nic->log_name, nic_iface->vlan_id);
|
|
+
|
|
+ LOG_INFO(PFX "%s: mac: %02x:%02x:%02x:%02x:%02x:%02x",
|
|
+ nic->log_name,
|
|
+ nic_iface->mac_addr[0],
|
|
+ nic_iface->mac_addr[1],
|
|
+ nic_iface->mac_addr[2],
|
|
+ nic_iface->mac_addr[3],
|
|
+ nic_iface->mac_addr[4],
|
|
+ nic_iface->mac_addr[5]);
|
|
+
|
|
+ if (nic_iface->ustack.ip_config == IPV4_CONFIG_STATIC) {
|
|
+ struct in_addr addr;
|
|
+ uip_ip4addr_t tmp = { 0, 0 };
|
|
+
|
|
+ memcpy(&addr.s_addr, nic_iface->ustack.hostaddr,
|
|
+ sizeof(addr.s_addr));
|
|
+
|
|
+ LOG_INFO(PFX "%s: Using IP address: %s",
|
|
+ nic->log_name, inet_ntoa(addr));
|
|
+
|
|
+ memcpy(&addr.s_addr, nic_iface->ustack.netmask,
|
|
+ sizeof(addr.s_addr));
|
|
+
|
|
+ LOG_INFO(PFX "%s: Using netmask: %s",
|
|
+ nic->log_name, inet_ntoa(addr));
|
|
+
|
|
+ set_uip_stack(&nic_iface->ustack,
|
|
+ &nic_iface->ustack.hostaddr,
|
|
+ &nic_iface->ustack.netmask,
|
|
+ &tmp, nic_iface->mac_addr);
|
|
+
|
|
+ } else if (nic_iface->ustack.ip_config ==
|
|
+ IPV4_CONFIG_DHCP) {
|
|
+ struct uip_stack *ustack = &nic_iface->ustack;
|
|
+ uip_ip4addr_t tmp = { 0, 0 };
|
|
+
|
|
+ set_uip_stack(&nic_iface->ustack,
|
|
+ &nic_iface->ustack.hostaddr,
|
|
+ &nic_iface->ustack.netmask,
|
|
+ &tmp, nic_iface->mac_addr);
|
|
+ if (dhcpc_init(nic, ustack,
|
|
+ nic_iface->mac_addr, ETH_ALEN)) {
|
|
+ if (ustack->dhcpc) {
|
|
+ LOG_DEBUG(PFX "%s: DHCPv4 "
|
|
+ "engine already "
|
|
+ "initialized!",
|
|
+ nic->log_name);
|
|
+ goto skip;
|
|
+ } else {
|
|
+ LOG_DEBUG(PFX "%s: DHCPv4 "
|
|
+ "engine failed "
|
|
+ "initialization!",
|
|
+ nic->log_name);
|
|
+ goto dev_close_free;
|
|
+ }
|
|
+ }
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+ rc = process_dhcp_loop(nic, nic_iface,
|
|
+ &periodic_timer,
|
|
+ &arp_timer);
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+
|
|
+ if (rc) {
|
|
+ LOG_ERR(PFX "%s: DHCP failed",
|
|
+ nic->log_name);
|
|
+ nic->flags |= NIC_DISABLED |
|
|
+ NIC_RESET_UIP;
|
|
+ nic->flags &= ~NIC_ENABLED;
|
|
+ /* Signal that the device enable is
|
|
+ done */
|
|
+ pthread_cond_broadcast(
|
|
+ &nic->enable_done_cond);
|
|
+
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+
|
|
+ if (nic->enable_thread ==
|
|
+ INVALID_THREAD)
|
|
+ goto dev_close_free;
|
|
+
|
|
+ rc = pthread_join(nic->enable_thread,
|
|
+ &res);
|
|
+ if (rc != 0)
|
|
+ LOG_ERR(PFX "%s: Couldn't join "
|
|
+ "to canceled enable nic"
|
|
+ " thread",
|
|
+ nic->log_name);
|
|
+
|
|
+ goto dev_close_free;
|
|
+ }
|
|
+
|
|
+ if (nic->flags & NIC_DISABLED) {
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ LOG_INFO(PFX "%s: Initialized dhcp client",
|
|
+ nic->log_name);
|
|
+ } else if (nic_iface->ustack.ip_config ==
|
|
+ IPV6_CONFIG_DHCP ||
|
|
+ nic_iface->ustack.ip_config ==
|
|
+ IPV6_CONFIG_STATIC) {
|
|
+ struct in6_addr addr6;
|
|
+ char buf[INET6_ADDRSTRLEN];
|
|
+
|
|
+ /* Do router solicitation for both STATIC and
|
|
+ DHCP - all NDP handling will take place in
|
|
+ the DHCP loop
|
|
+ STATIC - router advertisement will be handled
|
|
+ in the uip background loop
|
|
+ */
|
|
+ if (ndpc_init(nic, &nic_iface->ustack,
|
|
+ nic_iface->mac_addr, ETH_ALEN)) {
|
|
+ LOG_DEBUG(PFX "%s: IPv6 engine already"
|
|
+ "initialized!",
|
|
+ nic->log_name);
|
|
+ goto skip;
|
|
+ }
|
|
+ if (nic_iface->ustack.ip_config ==
|
|
+ IPV6_CONFIG_DHCP) {
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+ rc = process_dhcp_loop(nic, nic_iface,
|
|
+ &periodic_timer,
|
|
+ &arp_timer);
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+ if (rc) {
|
|
+ /* Don't reset and allow to
|
|
+ use RA and LL */
|
|
+ LOG_ERR(PFX "%s: DHCPv6 failed",
|
|
+ nic->log_name);
|
|
+ }
|
|
+ if (nic->flags & NIC_DISABLED) {
|
|
+ pthread_mutex_unlock(&nic->
|
|
+ nic_mutex);
|
|
+ break;
|
|
+ }
|
|
+ } else {
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+ rc = process_dhcp_loop(nic, nic_iface,
|
|
+ &periodic_timer,
|
|
+ &arp_timer);
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+ if (rc) {
|
|
+ LOG_ERR(PFX "%s: IPv6 rtr "
|
|
+ "failed",
|
|
+ nic->log_name);
|
|
+ }
|
|
+ memcpy(&addr6.s6_addr,
|
|
+ nic_iface->ustack.hostaddr6,
|
|
+ sizeof(addr6.s6_addr));
|
|
+ inet_ntop(AF_INET6,
|
|
+ addr6.s6_addr,
|
|
+ buf, sizeof(buf));
|
|
+ LOG_INFO(PFX "%s: hostaddr IP: %s",
|
|
+ nic->log_name, buf);
|
|
+
|
|
+ memcpy(&addr6.s6_addr,
|
|
+ nic_iface->ustack.netmask6,
|
|
+ sizeof(addr6.s6_addr));
|
|
+ inet_ntop(AF_INET6,
|
|
+ addr6.s6_addr,
|
|
+ buf, sizeof(buf));
|
|
+ LOG_INFO(PFX "%s: netmask IP: %s",
|
|
+ nic->log_name, buf);
|
|
+ }
|
|
+ } else {
|
|
+ LOG_INFO(PFX "%s: ipconfig = %d?",
|
|
+ nic->log_name,
|
|
+ nic_iface->ustack.ip_config);
|
|
+ }
|
|
+skip:
|
|
+ LOG_INFO(PFX "%s: enabled vlan %d protocol: %d",
|
|
+ nic->log_name,
|
|
+ nic_iface->vlan_id, nic_iface->protocol);
|
|
+
|
|
+ nic_iface = nic_iface->vlan_next;
|
|
+ }
|
|
+
|
|
+ if (nic->flags & NIC_DISABLED) {
|
|
+ LOG_WARN(PFX "%s: nic was disabled during nic loop, "
|
|
+ "closing flag 0x%x",
|
|
+ nic->log_name, nic->flags);
|
|
+ /* Signal that the device enable is done */
|
|
+ pthread_cond_broadcast(&nic->enable_done_cond);
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+ goto dev_close_free;
|
|
+ }
|
|
+
|
|
+ /* This is when we start the processing of packets */
|
|
+ nic->start_time = time(NULL);
|
|
+ nic->flags &= ~NIC_UNITIALIZED;
|
|
+ nic->flags |= NIC_INITIALIZED;
|
|
+ nic->state &= ~NIC_STOPPED;
|
|
+ nic->state |= NIC_RUNNING;
|
|
+
|
|
+ nic->flags &= ~NIC_ENABLED_PENDING;
|
|
+
|
|
+ /* Signal that the device enable is done */
|
|
+ pthread_cond_broadcast(&nic->enable_done_cond);
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+
|
|
+ LOG_INFO(PFX "%s: entering main nic loop", nic->log_name);
|
|
+
|
|
+ while ((nic->state & NIC_RUNNING) &&
|
|
+ (event_loop_stop == 0) &&
|
|
+ !(nic->flags & NIC_GOING_DOWN)) {
|
|
+ /* Check the periodic and ARP timer */
|
|
+ check_timers(nic, &periodic_timer, &arp_timer);
|
|
+ rc = nic_process_intr(nic, 0);
|
|
+ while ((rc > 0) &&
|
|
+ (nic->state & NIC_RUNNING) &&
|
|
+ !(nic->flags & NIC_GOING_DOWN)) {
|
|
+ rc = process_packets(nic,
|
|
+ &periodic_timer,
|
|
+ &arp_timer, NULL);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ LOG_INFO(PFX "%s: exited main processing loop", nic->log_name);
|
|
+
|
|
+dev_close_free:
|
|
+ free_free_queue(nic);
|
|
+dev_close:
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+
|
|
+ if (nic->flags & NIC_GOING_DOWN) {
|
|
+ nic_close(nic, 1, FREE_NO_STRINGS);
|
|
+
|
|
+ nic->flags &= ~NIC_GOING_DOWN;
|
|
+ } else {
|
|
+ pthread_mutex_destroy(&nic->xmit_mutex);
|
|
+ pthread_mutex_init(&nic->xmit_mutex, NULL);
|
|
+
|
|
+ if (nic->flags & NIC_RESET_UIP) {
|
|
+ nic_interface_t *nic_iface = nic->nic_iface;
|
|
+ nic_interface_t *vlan_iface;
|
|
+ while (nic_iface != NULL) {
|
|
+ LOG_INFO(PFX "%s: resetting uIP stack",
|
|
+ nic->log_name);
|
|
+ uip_reset(&nic_iface->ustack);
|
|
+ vlan_iface = nic_iface->vlan_next;
|
|
+ while (vlan_iface != NULL) {
|
|
+ LOG_INFO(PFX "%s: resetting "
|
|
+ "vlan uIP stack",
|
|
+ nic->log_name);
|
|
+ uip_reset(&vlan_iface->ustack);
|
|
+ vlan_iface =
|
|
+ vlan_iface->vlan_next;
|
|
+ }
|
|
+ nic_iface = nic_iface->next;
|
|
+ }
|
|
+ nic->flags &= ~NIC_RESET_UIP;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ nic->flags |= NIC_UNITIALIZED;
|
|
+ nic->flags &= ~NIC_INITIALIZED;
|
|
+ nic->flags &= ~NIC_ENABLED_PENDING;
|
|
+
|
|
+ nic->pending_count = 0;
|
|
+
|
|
+ if (!(nic->flags & NIC_EXIT_MAIN_LOOP)) {
|
|
+ /* Signal we are done closing CNIC/UIO device */
|
|
+ pthread_cond_broadcast(&nic->disable_wait_cond);
|
|
+ }
|
|
+ }
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+
|
|
+ LOG_INFO(PFX "%s: nic loop thread exited", nic->log_name);
|
|
+
|
|
+ nic->thread = INVALID_THREAD;
|
|
+
|
|
+ pthread_exit(NULL);
|
|
+}
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/nic.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/nic.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,359 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * nic.h - NIC header file
|
|
+ *
|
|
+ */
|
|
+
|
|
+#include <errno.h>
|
|
+
|
|
+#ifndef __NIC_H__
|
|
+#define __NIC_H__
|
|
+
|
|
+#include <stdint.h>
|
|
+#include <netinet/if_ether.h>
|
|
+#include <linux/if.h>
|
|
+#include <linux/limits.h>
|
|
+#include <stdlib.h>
|
|
+#include <pthread.h>
|
|
+
|
|
+#include "nic_nl.h"
|
|
+#include "packet.h"
|
|
+#include "uip.h"
|
|
+
|
|
+#include "iscsi_if.h"
|
|
+
|
|
+/* Foward declarations */
|
|
+struct nic_ops;
|
|
+struct nic_lib_handle;
|
|
+struct packet;
|
|
+struct nic_op;
|
|
+
|
|
+extern pthread_mutex_t nic_lib_list_mutex;
|
|
+extern struct nic_lib_handle *nic_lib_list;
|
|
+
|
|
+/* Used to store a list of active cnic devices */
|
|
+extern pthread_mutex_t nic_list_mutex;
|
|
+extern struct nic *nic_list;
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Constants
|
|
+ ******************************************************************************/
|
|
+#define MAX_PCI_DEVICE_ENTRIES 64 /* Maxium number of pci_device_id
|
|
+ entries a hw library may contain */
|
|
+
|
|
+#define FREE_CONFIG_NAME 0x0001
|
|
+#define FREE_UIO_NAME 0x0002
|
|
+#define FREE_ALL_STRINGS FREE_CONFIG_NAME | FREE_UIO_NAME
|
|
+#define FREE_NO_STRINGS 0x0000
|
|
+
|
|
+/******************************************************************************
|
|
+ * Enumerations
|
|
+ ******************************************************************************/
|
|
+typedef enum {
|
|
+ ALLOW_GRACEFUL_SHUTDOWN = 1,
|
|
+ FORCE_SHUTDOWN = 2,
|
|
+} NIC_SHUTDOWN_T;
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Structure used to hold PCI vendor, device, subvendor and subdevice ID's
|
|
+ ******************************************************************************/
|
|
+struct pci_device_id {
|
|
+ const uint32_t vendor, device; /* Vendor and device ID or PCI_ANY_ID */
|
|
+ const uint32_t subvendor, subdevice; /* Subsystem ID's/PCI_ANY_ID */
|
|
+ const char *device_name; /* Data private to the driver */
|
|
+};
|
|
+
|
|
+/******************************************************************************
|
|
+ * NIC statistics structure
|
|
+ ******************************************************************************/
|
|
+struct nic_stats {
|
|
+ uint64_t interrupts;
|
|
+ uint64_t missed_interrupts;
|
|
+
|
|
+ struct {
|
|
+ uint64_t packets;
|
|
+ uint64_t bytes;
|
|
+ } tx;
|
|
+
|
|
+ struct {
|
|
+ uint64_t packets;
|
|
+ uint64_t bytes;
|
|
+ } rx;
|
|
+};
|
|
+
|
|
+/******************************************************************************
|
|
+ * NIC interface structure
|
|
+ ******************************************************************************/
|
|
+typedef struct nic_interface {
|
|
+ struct nic_interface *next;
|
|
+ struct nic *parent;
|
|
+
|
|
+ uint16_t protocol;
|
|
+ uint16_t flags;
|
|
+#define NIC_IFACE_PERSIST 0x0001
|
|
+ uint8_t mac_addr[ETH_ALEN];
|
|
+ uint8_t vlan_priority;
|
|
+ uint16_t vlan_id;
|
|
+
|
|
+ time_t start_time;
|
|
+
|
|
+ struct uip_stack ustack;
|
|
+ struct nic_interface *vlan_next;
|
|
+} nic_interface_t;
|
|
+
|
|
+/******************************************************************************
|
|
+ * NIC lib operations structure
|
|
+ ******************************************************************************/
|
|
+struct nic_lib_ops {
|
|
+ /* Used to get the NIC library name */
|
|
+ void (*get_library_name) (char **library_name,
|
|
+ size_t * library_name_size);
|
|
+
|
|
+ /* Used to get to the PCI table supported by the NIC library */
|
|
+ void (*get_pci_table) (struct pci_device_id ** table,
|
|
+ uint32_t * entries);
|
|
+
|
|
+ /* Used to get the version of this NIC library */
|
|
+ void (*get_library_version) (char **version_string,
|
|
+ size_t * version_string_size);
|
|
+
|
|
+ /* Used to get the NIC library build date */
|
|
+ void (*get_build_date) (char **build_date_string,
|
|
+ size_t * build_date_string_size);
|
|
+
|
|
+ /* Used to get the transport name assoicated with this library */
|
|
+ void (*get_transport_name) (char **transport_name,
|
|
+ size_t * transport_name_size);
|
|
+
|
|
+ /* Used to get the uio name assoicated with this library */
|
|
+ void (*get_uio_name) (char **uio_name, size_t * uio_name_size);
|
|
+
|
|
+};
|
|
+
|
|
+/*******************************************************************************
|
|
+ * NIC op table definition
|
|
+ ******************************************************************************/
|
|
+typedef struct nic_ops {
|
|
+ struct nic_lib_ops lib_ops;
|
|
+
|
|
+ char *description;
|
|
+ int (*open) (struct nic *);
|
|
+ int (*close) (struct nic *, NIC_SHUTDOWN_T);
|
|
+ int (*read) (struct nic *, struct packet *);
|
|
+ int (*write) (struct nic *, nic_interface_t *, struct packet *);
|
|
+ void *(*get_tx_pkt) (struct nic *);
|
|
+ void (*start_xmit) (struct nic *, size_t, u16_t vlan_id);
|
|
+ int (*clear_tx_intr) (struct nic *);
|
|
+ int (*handle_iscsi_path_req) (struct nic *,
|
|
+ int,
|
|
+ struct iscsi_uevent * ev,
|
|
+ struct iscsi_path * path);
|
|
+} net_ops_t;
|
|
+
|
|
+typedef struct nic_lib_handle {
|
|
+ struct nic_lib_handle *next;
|
|
+
|
|
+ pthread_mutex_t mutex;
|
|
+ struct nic_ops *ops;
|
|
+} nic_lib_handle_t;
|
|
+
|
|
+typedef struct nic {
|
|
+ struct nic *next;
|
|
+
|
|
+ uint32_t flags;
|
|
+#define NIC_UNITIALIZED 0x0001
|
|
+#define NIC_INITIALIZED 0x0002
|
|
+#define NIC_ENABLED 0x0004
|
|
+#define NIC_DISABLED 0x0008
|
|
+#define NIC_IPv6_ENABLED 0x0010
|
|
+#define NIC_ADDED_MULICAST 0x0020
|
|
+#define NIC_VLAN_STRIP_ENABLED 0x0100
|
|
+#define NIC_MSIX_ENABLED 0x0200
|
|
+#define NIC_TX_HAS_SENT 0x0400
|
|
+#define NIC_ENABLED_PENDING 0x0800
|
|
+
|
|
+#define NIC_UIO_NAME_MALLOC 0x1000
|
|
+#define NIC_CONFIG_NAME_MALLOC 0x2000
|
|
+#define NIC_EXIT_MAIN_LOOP 0x4000
|
|
+#define NIC_GOING_DOWN 0x8000
|
|
+#define NIC_RESET_UIP 0x10000
|
|
+
|
|
+ uint16_t state;
|
|
+#define NIC_STOPPED 0x0001
|
|
+#define NIC_STARTED_RUNNING 0x0002
|
|
+#define NIC_RUNNING 0x0004
|
|
+#define NIC_LONG_SLEEP 0x0008
|
|
+#define NIC_EXIT 0x0010
|
|
+
|
|
+ int fd; /* Holds the file descriptor to UIO */
|
|
+ uint16_t uio_minor; /* Holds the UIO minor number */
|
|
+
|
|
+ uint32_t host_no; /* Holds the associated host number */
|
|
+
|
|
+ char *library_name; /* Name of the library to assoicate with */
|
|
+ char *log_name; /* Human friendly name used in the log
|
|
+ file */
|
|
+ char *config_device_name; /* Name read from the XML configuration
|
|
+ file */
|
|
+ char eth_device_name[IFNAMSIZ]; /* Network interface name */
|
|
+ char *uio_device_name; /* UIO device name */
|
|
+
|
|
+ uint32_t intr_count; /* Total UIO interrupt count */
|
|
+
|
|
+ pthread_mutex_t nic_mutex;
|
|
+
|
|
+ /* iSCSI ring ethernet MAC address */
|
|
+ __u8 mac_addr[ETH_ALEN];
|
|
+
|
|
+ /* Used to manage the network interfaces of this device */
|
|
+ __u32 num_of_nic_iface;
|
|
+ nic_interface_t *nic_iface;
|
|
+
|
|
+ /* Wait for the device to be enabled */
|
|
+ pthread_cond_t enable_wait_cond;
|
|
+
|
|
+ /* Wait for the device to be finished enabled */
|
|
+ pthread_cond_t enable_done_cond;
|
|
+
|
|
+ /* Wait for the nic loop to start */
|
|
+ pthread_cond_t nic_loop_started_cond;
|
|
+
|
|
+ /* Wait for the device to be disabled */
|
|
+ pthread_cond_t disable_wait_cond;
|
|
+
|
|
+ /* Held when transmitting */
|
|
+ pthread_mutex_t xmit_mutex;
|
|
+
|
|
+ /* The thread this device is running on */
|
|
+ pthread_t thread;
|
|
+
|
|
+ /* The thread used to enable the device */
|
|
+ pthread_t enable_thread;
|
|
+
|
|
+ /* Statistical Information on this device */
|
|
+ time_t start_time;
|
|
+ struct nic_stats stats;
|
|
+
|
|
+ /* Number of retrys from iscsid */
|
|
+ uint32_t pending_count;
|
|
+
|
|
+#define DEFAULT_RX_POLL_USEC 100 /* usec */
|
|
+ /* options enabled by the user */
|
|
+ uint32_t rx_poll_usec;
|
|
+
|
|
+ /* Used to hold hardware specific data */
|
|
+ void *priv;
|
|
+
|
|
+ /* Used to hold the TX packets that are needed to be sent */
|
|
+ struct packet *tx_packet_queue;
|
|
+
|
|
+ /* Mutex to protect the list of free packets */
|
|
+ pthread_mutex_t free_packet_queue_mutex;
|
|
+
|
|
+ /* Used to hold the free packets that are needed to be sent */
|
|
+ struct packet *free_packet_queue;
|
|
+
|
|
+ /* Points to the NIC library */
|
|
+ nic_lib_handle_t *nic_library;
|
|
+
|
|
+ /* Points to the PCI table entry */
|
|
+ struct pci_device_id *pci_id;
|
|
+
|
|
+ /* Used to process the interrupt */
|
|
+ int (*process_intr) (struct nic * nic);
|
|
+
|
|
+ struct nic_ops *ops;
|
|
+} nic_t;
|
|
+
|
|
+/******************************************************************************
|
|
+ * Function Prototypes
|
|
+ *****************************************************************************/
|
|
+int load_all_nic_libraries();
|
|
+
|
|
+nic_t *nic_init();
|
|
+void nic_add(nic_t *nic);
|
|
+int nic_remove(nic_t *nic);
|
|
+
|
|
+int nic_add_nic_iface(nic_t *nic, nic_interface_t *nic_iface);
|
|
+int nic_add_vlan_iface(nic_t *nic, nic_interface_t *nic_iface,
|
|
+ nic_interface_t *vlan_iface);
|
|
+int nic_process_intr(nic_t *nic, int discard_check);
|
|
+
|
|
+nic_interface_t *nic_iface_init();
|
|
+
|
|
+typedef enum {
|
|
+ NIC_LIBRARY_EXSITS = 1,
|
|
+ NIC_LIBRARY_DOESNT_EXIST = 2,
|
|
+} NIC_LIBRARY_EXIST_T;
|
|
+
|
|
+NIC_LIBRARY_EXIST_T does_nic_uio_name_exist(char *name);
|
|
+NIC_LIBRARY_EXIST_T does_nic_library_exist(char *name);
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Packet management utility functions
|
|
+ ******************************************************************************/
|
|
+struct packet *get_next_tx_packet(nic_t * nic);
|
|
+struct packet *get_next_free_packet(nic_t * nic);
|
|
+void put_packet_in_tx_queue(struct packet *pkt, nic_t * nic);
|
|
+void put_packet_in_free_queue(struct packet *pkt, nic_t * nic);
|
|
+
|
|
+int unload_all_nic_libraries();
|
|
+void nic_close(nic_t * nic, NIC_SHUTDOWN_T graceful, int clean);
|
|
+
|
|
+/* Use this function to fill in minor number and uio, and eth names */
|
|
+int nic_fill_name(nic_t * nic);
|
|
+
|
|
+int enable_multicast(nic_t * nic);
|
|
+int disable_multicast(nic_t * nic);
|
|
+
|
|
+void nic_set_all_nic_iface_mac_to_parent(nic_t * nic);
|
|
+struct nic_interface *nic_find_nic_iface(nic_t * nic, uint16_t vlan_id);
|
|
+struct nic_interface *nic_find_nic_iface_protocol(nic_t * nic,
|
|
+ uint16_t vlan_id,
|
|
+ uint16_t protocol);
|
|
+struct nic_interface *nic_find_vlan_iface_protocol(nic_t *nic,
|
|
+ nic_interface_t *nic_iface,
|
|
+ uint16_t vlan_id,
|
|
+ uint16_t protocol);
|
|
+int find_nic_lib_using_pci_id(uint32_t vendor, uint32_t device,
|
|
+ uint32_t subvendor, uint32_t subdevice,
|
|
+ nic_lib_handle_t ** handle,
|
|
+ struct pci_device_id **pci_entry);
|
|
+
|
|
+void *nic_loop(void *arg);
|
|
+
|
|
+int nic_packet_capture(struct nic *, struct packet *pkt);
|
|
+
|
|
+#endif /* __NIC_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic_id.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/nic_id.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic_id.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/nic_id.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,364 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * nic_id.c - Using sysfs to determine the PCI vendor, device, subvendor and
|
|
+ * subdevice ID's
|
|
+ *
|
|
+ */
|
|
+#include <errno.h>
|
|
+#include <stdio.h>
|
|
+#include <stdlib.h>
|
|
+#include <string.h>
|
|
+#include <unistd.h>
|
|
+#include <sys/socket.h>
|
|
+
|
|
+#include <linux/if.h>
|
|
+
|
|
+#include "logger.h"
|
|
+#include "nic.h"
|
|
+
|
|
+#define PFX "nic_id "
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Sysfs constant strings used to get PCI vendor, and device ID's
|
|
+ ******************************************************************************/
|
|
+const char uio_vendor_id_template[] = "/sys/class/uio/uio%d/device/vendor";
|
|
+const char uio_subvendor_id_template[] =
|
|
+ "/sys/class/uio/uio%d/device/subsystem_vendor";
|
|
+const char uio_device_id_template[] = "/sys/class/uio/uio%d/device/device";
|
|
+const char uio_subdevice_id_template[] =
|
|
+ "/sys/class/uio/uio%d/device/subsystem_device";
|
|
+const char uio_device_symlink_template[] = "/sys/class/uio/uio%d/device";
|
|
+
|
|
+/**
|
|
+ * get_id() - Utility function to read hex values from sysfs
|
|
+ * @param nic - NIC device to use
|
|
+ * @param sysfs_template - sysfs path template to use
|
|
+ * @param sysfs_template_size - sysfs path template size in bytes
|
|
+ * @parm id - this is the value returned from the sysfs entry
|
|
+ * @return 0 on success <0 on failure
|
|
+ */
|
|
+static int get_id(nic_t * nic,
|
|
+ const char *sysfs_template,
|
|
+ const size_t sysfs_template_size, uint32_t * id)
|
|
+{
|
|
+ int rc = 0;
|
|
+ FILE *fp;
|
|
+ size_t chars_read;
|
|
+ char buf[7];
|
|
+ char *path;
|
|
+ size_t path_size;
|
|
+
|
|
+ path_size = sysfs_template_size + 4;
|
|
+ path = malloc(path_size);
|
|
+ if (path == NULL) {
|
|
+ LOG_ERR("Could not allocate memory for %s", sysfs_template);
|
|
+ return -ENOMEM;
|
|
+ }
|
|
+
|
|
+ snprintf(path, path_size, sysfs_template, nic->uio_minor);
|
|
+
|
|
+ fp = fopen(path, "r");
|
|
+ if (fp == NULL) {
|
|
+ LOG_ERR(PFX "%s: Could not open path: %s [%s]",
|
|
+ nic->log_name, path, strerror(errno));
|
|
+ rc = -EIO;
|
|
+ goto error_fopen;
|
|
+ }
|
|
+
|
|
+ chars_read = fread(buf, sizeof(buf), 1, fp);
|
|
+ if (chars_read != 1) {
|
|
+ LOG_ERR(PFX "%s: Could not read from: %s [%s]",
|
|
+ nic->log_name, path, strerror(ferror(fp)));
|
|
+ rc = -EIO;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ chars_read = sscanf(buf, "%x", id);
|
|
+ if (chars_read != 1) {
|
|
+ LOG_ERR(PFX "%s: Could interpret value: %s from: %s [%s]",
|
|
+ nic->log_name, buf, path, strerror(errno));
|
|
+ rc = -EIO;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ error:
|
|
+ fclose(fp);
|
|
+
|
|
+ error_fopen:
|
|
+ free(path);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+static int get_vendor(nic_t * nic, uint32_t * id)
|
|
+{
|
|
+ return get_id(nic,
|
|
+ uio_vendor_id_template, sizeof(uio_vendor_id_template),
|
|
+ id);
|
|
+}
|
|
+
|
|
+static int get_subvendor(nic_t * nic, uint32_t * id)
|
|
+{
|
|
+ return get_id(nic,
|
|
+ uio_subvendor_id_template,
|
|
+ sizeof(uio_subvendor_id_template), id);
|
|
+}
|
|
+
|
|
+static int get_device(nic_t * nic, uint32_t * id)
|
|
+{
|
|
+ return get_id(nic,
|
|
+ uio_device_id_template,
|
|
+ sizeof(uio_device_id_template), id);
|
|
+}
|
|
+
|
|
+static int get_subdevice(nic_t * nic, uint32_t * id)
|
|
+{
|
|
+ return get_id(nic,
|
|
+ uio_subdevice_id_template,
|
|
+ sizeof(uio_subdevice_id_template), id);
|
|
+}
|
|
+
|
|
+int get_bus_slot_func_num(nic_t * nic,
|
|
+ uint32_t * bus, uint32_t * slot, uint32_t * func)
|
|
+{
|
|
+ size_t size;
|
|
+ char *path, *tok, *tok2;
|
|
+ int path_tokens, i;
|
|
+ size_t path_size;
|
|
+ char *read_pci_bus_slot_func_str;
|
|
+ char pci_bus_slot_func_str[32];
|
|
+ int rc;
|
|
+ char *saveptr;
|
|
+
|
|
+ path_size = sizeof(uio_device_symlink_template) + 4;
|
|
+ path = malloc(path_size);
|
|
+ if (path == NULL) {
|
|
+ LOG_ERR(PFX "%s: Could not allocate path memory for %s",
|
|
+ nic->log_name, uio_device_symlink_template);
|
|
+ rc = -ENOMEM;
|
|
+ goto error_alloc_path;
|
|
+ }
|
|
+
|
|
+ read_pci_bus_slot_func_str = malloc(128);
|
|
+ if (read_pci_bus_slot_func_str == NULL) {
|
|
+ LOG_ERR(PFX "%s: Could not allocate read pci bus memory for %s",
|
|
+ nic->log_name, uio_device_symlink_template);
|
|
+ rc = -ENOMEM;
|
|
+ goto error_alloc_read_pci_bus;
|
|
+ }
|
|
+
|
|
+ snprintf(path, path_size, uio_device_symlink_template, nic->uio_minor);
|
|
+
|
|
+ size = readlink(path, read_pci_bus_slot_func_str, 128);
|
|
+ if (size == -1) {
|
|
+ LOG_ERR(PFX "%s: Error with %s: %s",
|
|
+ nic->log_name, path, strerror(errno));
|
|
+ rc = errno;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ if (size > ((128) - 1)) {
|
|
+ read_pci_bus_slot_func_str[128 - 1] = '\0';
|
|
+ LOG_ERR(PFX "%s: not enough space (%d) for reading PCI "
|
|
+ "slot:bus.func %s: %s",
|
|
+ nic->log_name, size, path, strerror(errno));
|
|
+ rc = -EIO;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ /* readlink() doesn't NULL terminate the string */
|
|
+ read_pci_bus_slot_func_str[size] = '\0';
|
|
+
|
|
+ path_tokens = 0;
|
|
+ tok = strtok_r(read_pci_bus_slot_func_str, "/", &saveptr);
|
|
+ while (tok != NULL) {
|
|
+ path_tokens++;
|
|
+ tok = strtok_r(NULL, "/", &saveptr);
|
|
+ }
|
|
+
|
|
+ size = readlink(path, read_pci_bus_slot_func_str, 128);
|
|
+ if (size == -1) {
|
|
+ LOG_ERR(PFX "%s: Error with %s: %s",
|
|
+ nic->log_name, path, strerror(errno));
|
|
+ rc = errno;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ if (size > ((128) - 1)) {
|
|
+ read_pci_bus_slot_func_str[128 - 1] = '\0';
|
|
+ LOG_ERR(PFX "%s: not enough space for reading PCI "
|
|
+ "slot:bus.func %s: %s",
|
|
+ nic->log_name, path, strerror(errno));
|
|
+ rc = -EIO;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ /* readlink() doesn't NULL terminate the string */
|
|
+ read_pci_bus_slot_func_str[size] = '\0';
|
|
+
|
|
+ tok = strtok_r(read_pci_bus_slot_func_str, "/", &saveptr);
|
|
+ for (i = 0; i < path_tokens - 1; i++) {
|
|
+ tok = strtok_r(NULL, "/", &saveptr);
|
|
+ }
|
|
+ strcpy(pci_bus_slot_func_str, tok);
|
|
+
|
|
+ tok = strtok_r(pci_bus_slot_func_str, ":", &saveptr);
|
|
+ if (tok == NULL) {
|
|
+ LOG_ERR(PFX "%s: Error with slot string: %s",
|
|
+ nic->log_name, pci_bus_slot_func_str);
|
|
+ rc = -EIO;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ tok = strtok_r(NULL, ":", &saveptr);
|
|
+ if (tok == NULL) {
|
|
+ LOG_ERR(PFX "%s: Error parsing slot: %s",
|
|
+ nic->log_name, pci_bus_slot_func_str);
|
|
+ rc = -EIO;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ sscanf(tok, "%x", bus);
|
|
+
|
|
+ /* Need to extract the next token "xx.x" */
|
|
+ tok = strtok_r(NULL, ":", &saveptr);
|
|
+ if (tok == NULL) {
|
|
+ LOG_ERR(PFX "%s: Error extracing bus.func: %s",
|
|
+ nic->log_name, pci_bus_slot_func_str);
|
|
+ rc = -EIO;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ tok2 = strtok_r(tok, ".", &saveptr);
|
|
+ if (tok2 == NULL) {
|
|
+ LOG_ERR(PFX "%s: Error parsing bus: %s",
|
|
+ nic->log_name, pci_bus_slot_func_str);
|
|
+ rc = -EIO;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ sscanf(tok2, "%x", slot);
|
|
+
|
|
+ tok2 = strtok_r(NULL, ".", &saveptr);
|
|
+ if (tok2 == NULL) {
|
|
+ LOG_ERR(PFX "%s: Error parsing func: %s",
|
|
+ nic->log_name, pci_bus_slot_func_str);
|
|
+ rc = -EIO;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ sscanf(tok2, "%x", func);
|
|
+ LOG_INFO(PFX "%s: is found at %02x:%02x.%02x", nic->log_name,
|
|
+ *bus, *slot, *func);
|
|
+ rc = 0;
|
|
+error:
|
|
+ free(read_pci_bus_slot_func_str);
|
|
+error_alloc_read_pci_bus:
|
|
+ free(path);
|
|
+error_alloc_path:
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * find_set_nic_lib() - Match the NIC library to the NIC
|
|
+ * @param nic - NIC device to determine which NIC library to use
|
|
+ * @return 0 on success <0 on failure
|
|
+ */
|
|
+int find_set_nic_lib(nic_t * nic)
|
|
+{
|
|
+ uint32_t vendor;
|
|
+ uint32_t subvendor;
|
|
+ uint32_t device;
|
|
+ uint32_t subdevice;
|
|
+
|
|
+ uint32_t pci_bus;
|
|
+ uint32_t pci_slot;
|
|
+ uint32_t pci_func;
|
|
+ int rc = 0;
|
|
+
|
|
+ nic_lib_handle_t *handle;
|
|
+ struct pci_device_id *pci_entry;
|
|
+
|
|
+ rc = get_vendor(nic, &vendor);
|
|
+ if (rc != 0) {
|
|
+ LOG_ERR(PFX "%s: Could not get vendor id [0x%x]",
|
|
+ nic->log_name, rc);
|
|
+ return rc;
|
|
+ }
|
|
+
|
|
+ rc = get_subvendor(nic, &subvendor);
|
|
+ if (rc != 0) {
|
|
+ LOG_ERR(PFX "%s: Could not get subvendor id [0x%x]",
|
|
+ nic->log_name, rc);
|
|
+ return rc;
|
|
+ }
|
|
+
|
|
+ rc = get_device(nic, &device);
|
|
+ if (rc != 0) {
|
|
+ LOG_ERR(PFX "%s: Could not get device id [0x%x]",
|
|
+ nic->log_name, rc);
|
|
+ return rc;
|
|
+ }
|
|
+
|
|
+ rc = get_subdevice(nic, &subdevice);
|
|
+ if (rc != 0) {
|
|
+ LOG_ERR(PFX "%s: Could not get subdevice id [0x%x]",
|
|
+ nic->log_name, rc);
|
|
+ return rc;
|
|
+ }
|
|
+
|
|
+ get_bus_slot_func_num(nic, &pci_bus, &pci_slot, &pci_func);
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: Looking for device vendor: "
|
|
+ "0x%x subvendor: 0x%x device: 0x%x subdevice: 0x%x",
|
|
+ nic->log_name, vendor, subvendor, device, subdevice);
|
|
+
|
|
+ rc = find_nic_lib_using_pci_id(vendor, device, subvendor, subdevice,
|
|
+ &handle, &pci_entry);
|
|
+
|
|
+ if (rc != 0) {
|
|
+ LOG_WARN(PFX "%s: Couldn't find proper NIC library",
|
|
+ nic->log_name);
|
|
+ return rc;
|
|
+ }
|
|
+
|
|
+ nic->nic_library = handle;
|
|
+ nic->pci_id = pci_entry;
|
|
+
|
|
+ /* Prepare the NIC library op table */
|
|
+ nic->ops = handle->ops;
|
|
+
|
|
+ return 0;
|
|
+}
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic_id.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/nic_id.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic_id.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/nic_id.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,46 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * nic_id.h - NIC uIP NetLink user space stack
|
|
+ *
|
|
+ */
|
|
+#ifndef __NIC_ID_H__
|
|
+#define __NIC_ID_H__
|
|
+
|
|
+int find_set_nic_lib(nic_t * nic);
|
|
+
|
|
+int get_bus_slot_func_num(nic_t * nic,
|
|
+ uint32_t * bus, uint32_t * slot, uint32_t * func);
|
|
+
|
|
+#endif /* __NIC_ID_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic_nl.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/nic_nl.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic_nl.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/nic_nl.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,627 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * nic_nl.c - NIC uIP NetLink user space stack
|
|
+ *
|
|
+ */
|
|
+#include <errno.h>
|
|
+#include <pthread.h>
|
|
+#include <signal.h>
|
|
+#include <stdio.h>
|
|
+#include <stdlib.h>
|
|
+#include <string.h>
|
|
+#include <unistd.h>
|
|
+#include <arpa/inet.h>
|
|
+#include <linux/limits.h>
|
|
+#include <netinet/if_ether.h>
|
|
+#include <netinet/in.h>
|
|
+#include <linux/netlink.h>
|
|
+#include <iscsi_if.h>
|
|
+#include <sys/ioctl.h>
|
|
+#include <sys/poll.h>
|
|
+#include <sys/types.h>
|
|
+#include <sys/user.h>
|
|
+#include <sys/socket.h>
|
|
+
|
|
+#include "uip_arp.h"
|
|
+#include "logger.h"
|
|
+#include "options.h"
|
|
+
|
|
+#include "nic.h"
|
|
+#include "nic_nl.h"
|
|
+#include "nic_utils.h"
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Constants
|
|
+ ******************************************************************************/
|
|
+#define PFX "NIC_NL "
|
|
+
|
|
+static u8_t nlm_sendbuf[NLM_BUF_DEFAULT_MAX];
|
|
+
|
|
+static struct sockaddr_nl src_addr;
|
|
+
|
|
+const static struct sockaddr_nl dest_addr = {
|
|
+ .nl_family = AF_NETLINK,
|
|
+ .nl_pid = 0, /* kernel */
|
|
+ .nl_groups = 0, /* unicast */
|
|
+};
|
|
+
|
|
+#define POLL_NL 0
|
|
+#define POLL_MAX 1
|
|
+
|
|
+/* Netlink */
|
|
+int nl_sock = INVALID_FD;
|
|
+
|
|
+/* Items used to handle the thread used to send/process ARP's */
|
|
+static pthread_t nl_process_thread;
|
|
+static pthread_cond_t nl_process_cond;
|
|
+pthread_cond_t nl_process_if_down_cond;
|
|
+pthread_mutex_t nl_process_mutex;
|
|
+int nl_process_if_down = 0;
|
|
+
|
|
+#define NL_PROCESS_MAX_RING_SIZE 128
|
|
+#define NL_PROCESS_LAST_ENTRY NL_PROCESS_MAX_RING_SIZE - 1
|
|
+#define NL_PROCESS_NEXT_ENTRY(x) ((x + 1) & NL_PROCESS_MAX_RING_SIZE)
|
|
+static int nl_process_head;
|
|
+static int nl_process_tail;
|
|
+static void *nl_process_ring[NL_PROCESS_MAX_RING_SIZE];
|
|
+
|
|
+#define MAX_TX_DESC_CNT (TX_DESC_CNT - 1)
|
|
+
|
|
+#define NEXT_TX_BD(x) (((x) & (MAX_TX_DESC_CNT - 1)) == \
|
|
+ (MAX_TX_DESC_CNT - 1)) ?
|
|
+
|
|
+static int nl_read(int ctrl_fd, char *data, int size, int flags)
|
|
+{
|
|
+ int rc;
|
|
+ struct iovec iov;
|
|
+ struct msghdr msg;
|
|
+
|
|
+ iov.iov_base = data;
|
|
+ iov.iov_len = size;
|
|
+
|
|
+ memset(&src_addr, 0, sizeof(src_addr));
|
|
+ src_addr.nl_family = AF_NETLINK;
|
|
+ src_addr.nl_pid = getpid();
|
|
+ src_addr.nl_groups = 1;
|
|
+
|
|
+ memset(&msg, 0, sizeof(msg));
|
|
+ msg.msg_name = (void *)&src_addr;
|
|
+ msg.msg_namelen = sizeof(src_addr);
|
|
+ msg.msg_iov = &iov;
|
|
+ msg.msg_iovlen = 1;
|
|
+
|
|
+ rc = recvmsg(ctrl_fd, &msg, flags);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+static int
|
|
+kwritev(int fd, enum iscsi_uevent_e type, struct iovec *iovp, int count)
|
|
+{
|
|
+ int i, rc;
|
|
+ struct nlmsghdr *nlh;
|
|
+ struct msghdr msg;
|
|
+ struct iovec iov;
|
|
+ int datalen = 0;
|
|
+
|
|
+ for (i = 0; i < count; i++) {
|
|
+ datalen += iovp[i].iov_len;
|
|
+ }
|
|
+
|
|
+ nlh = (struct nlmsghdr *)nlm_sendbuf;
|
|
+ memset(nlh, 0, NLMSG_SPACE(datalen));
|
|
+
|
|
+ nlh->nlmsg_len = NLMSG_SPACE(datalen);
|
|
+ nlh->nlmsg_pid = getpid();
|
|
+ nlh->nlmsg_flags = 0;
|
|
+ nlh->nlmsg_type = type;
|
|
+
|
|
+ datalen = 0;
|
|
+ for (i = 0; i < count; i++) {
|
|
+ memcpy(NLMSG_DATA(nlh) + datalen, iovp[i].iov_base,
|
|
+ iovp[i].iov_len);
|
|
+ datalen += iovp[i].iov_len;
|
|
+ }
|
|
+ iov.iov_base = (void *)nlh;
|
|
+ iov.iov_len = nlh->nlmsg_len;
|
|
+
|
|
+ memset(&msg, 0, sizeof(msg));
|
|
+ msg.msg_name = (void *)&dest_addr;
|
|
+ msg.msg_namelen = sizeof(dest_addr);
|
|
+ msg.msg_iov = &iov;
|
|
+ msg.msg_iovlen = 1;
|
|
+
|
|
+ do {
|
|
+ rc = sendmsg(fd, &msg, 0);
|
|
+ if (rc == -ENOMEM) {
|
|
+ LOG_ERR(PFX "sendmsg: alloc_skb() failed");
|
|
+ sleep(1);
|
|
+ } else if (rc < 0) {
|
|
+ LOG_ERR(PFX "sendmsg: bug?: on %d %s[0x%x]",
|
|
+ fd, strerror(errno), errno);
|
|
+ sleep(1);
|
|
+ }
|
|
+ } while ((rc < 0) && (event_loop_stop == 0));
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * __kipc_call() should never block. Therefore
|
|
+ * Netlink's xmit logic is serialized. This means we do not allocate on
|
|
+ * xmit path. Instead we reuse nlm_sendbuf buffer.
|
|
+ *
|
|
+ * Transport must assure non-blocking operations for:
|
|
+ *
|
|
+ * - session_create()
|
|
+ * - conn_create()
|
|
+ * - conn_bind()
|
|
+ * _ set_param()
|
|
+ * - conn_start()
|
|
+ * - conn_stop()
|
|
+ *
|
|
+ * Its OK to block for cleanup for short period of time in operatations for:
|
|
+ *
|
|
+ * - conn_destroy()
|
|
+ * - session_destroy()
|
|
+ *
|
|
+ * FIXME: interface needs to be extended to allow longer blocking on
|
|
+ * cleanup. (Dima)
|
|
+ */
|
|
+int __kipc_call(int fd, void *iov_base, int iov_len)
|
|
+{
|
|
+ int rc;
|
|
+ struct iovec iov;
|
|
+ struct iscsi_uevent *ev = iov_base;
|
|
+ enum iscsi_uevent_e type = ev->type;
|
|
+
|
|
+ /* Sanity check */
|
|
+ if (iov_base == NULL)
|
|
+ return -EINVAL;
|
|
+
|
|
+ iov.iov_base = iov_base;
|
|
+ iov.iov_len = iov_len;
|
|
+
|
|
+ rc = kwritev(fd, type, &iov, 1);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+static int pull_from_nl(char **buf)
|
|
+{
|
|
+ int rc;
|
|
+ size_t ev_size;
|
|
+ char nlm_ev[NLMSG_SPACE(sizeof(struct iscsi_uevent))];
|
|
+ struct nlmsghdr *nlh;
|
|
+ char *data = NULL;
|
|
+
|
|
+ /* Take a quick peek at what how much uIP will need to read */
|
|
+ rc = nl_read(nl_sock, nlm_ev,
|
|
+ NLMSG_SPACE(sizeof(struct iscsi_uevent)),
|
|
+ MSG_PEEK | MSG_WAITALL);
|
|
+ if (rc <= 0) {
|
|
+ LOG_ERR("can not read nlm_ev, error %s[%d]",
|
|
+ strerror(errno), rc);
|
|
+ if (rc == 0)
|
|
+ return -EIO;
|
|
+ else
|
|
+ return errno;
|
|
+ }
|
|
+ nlh = (struct nlmsghdr *)nlm_ev;
|
|
+
|
|
+ if (unlikely(nlh->nlmsg_len < NLMSG_ALIGN(sizeof(struct nlmsghdr)))) {
|
|
+ LOG_ERR(PFX "Invalid nlh->nlmsg_len length: "
|
|
+ "nlh->nlmsg_len(%d) < "
|
|
+ "NLMSG_ALIGN(sizeof(struct nlmsghdr))(%d)",
|
|
+ nlh->nlmsg_len, NLMSG_ALIGN(sizeof(struct nlmsghdr)));
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ data = (char *)malloc(nlh->nlmsg_len);
|
|
+ if (unlikely(data == NULL)) {
|
|
+ LOG_ERR(PFX "Couldn't allocate %d bytes for Netlink "
|
|
+ "iSCSI message", nlh->nlmsg_len);
|
|
+ return -ENOMEM;
|
|
+ }
|
|
+
|
|
+ memset(data, 0, nlh->nlmsg_len);
|
|
+ ev_size = nlh->nlmsg_len - NLMSG_ALIGN(sizeof(struct nlmsghdr));
|
|
+ rc = nl_read(nl_sock, data, (int)nlh->nlmsg_len, MSG_WAITALL);
|
|
+ if (rc <= 0) {
|
|
+ LOG_ERR("can not read nlm_ev, error %s[%d]",
|
|
+ strerror(errno), rc);
|
|
+ if (rc == 0)
|
|
+ rc = -EIO;
|
|
+ else
|
|
+ rc = errno;
|
|
+
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ *buf = data;
|
|
+ return 0;
|
|
+ error:
|
|
+ if (data != NULL)
|
|
+ free(data);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+const static struct timespec ctldev_sleep_req = {
|
|
+ .tv_sec = 0,
|
|
+ .tv_nsec = 250000000,
|
|
+};
|
|
+
|
|
+static int ctldev_handle(char *data)
|
|
+{
|
|
+ nic_t *nic = NULL;
|
|
+ int rc;
|
|
+ struct iscsi_uevent *ev;
|
|
+ uint8_t *payload;
|
|
+ struct iscsi_path *path;
|
|
+ char *msg_type_str;
|
|
+ uint32_t host_no;
|
|
+ int i;
|
|
+
|
|
+ ev = (struct iscsi_uevent *)NLMSG_DATA(data);
|
|
+ switch (ev->type) {
|
|
+ case ISCSI_KEVENT_PATH_REQ:
|
|
+ msg_type_str = "path_req";
|
|
+
|
|
+ host_no = ev->r.req_path.host_no;
|
|
+ break;
|
|
+ case ISCSI_KEVENT_IF_DOWN:
|
|
+ msg_type_str = "if_down";
|
|
+
|
|
+ host_no = ev->r.notify_if_down.host_no;
|
|
+ break;
|
|
+ default:
|
|
+ /* We don't care about other iSCSI Netlink messages */
|
|
+ LOG_DEBUG(PFX "Received ev->type: 0x%x", ev->type);
|
|
+ rc = 0;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ /* This is a message that drivers should be interested in */
|
|
+ LOG_INFO("Received: '%s': host_no: %d", msg_type_str, host_no);
|
|
+
|
|
+ rc = from_host_no_find_associated_eth_device(host_no, &nic);
|
|
+ if (rc != 0) {
|
|
+ LOG_ERR(PFX "Dropping msg, couldn't find nic with host no:%d",
|
|
+ host_no);
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ payload = (uint8_t *) ((uint8_t *) ev) + sizeof(*ev);
|
|
+ path = (struct iscsi_path *)payload;
|
|
+
|
|
+ if (ev->type == ISCSI_KEVENT_PATH_REQ) {
|
|
+ struct timespec sleep_rem;
|
|
+ nic_interface_t *nic_iface, *vlan_iface;
|
|
+ uint16_t ip_type;
|
|
+
|
|
+ if (path->ip_addr_len == 4)
|
|
+ ip_type = AF_INET;
|
|
+ else if (path->ip_addr_len == 16)
|
|
+ ip_type = AF_INET6;
|
|
+ else
|
|
+ ip_type = 0;
|
|
+
|
|
+ /* Find the parent nic_iface */
|
|
+ nic_iface = nic_find_nic_iface_protocol(nic, 0, ip_type);
|
|
+ if (nic_iface == NULL) {
|
|
+ LOG_ERR(PFX "%s: Couldn't find nic iface "
|
|
+ "vlan: %d ip_type: %d "
|
|
+ "ip_addr_len: %d to clone",
|
|
+ nic->log_name, path->vlan_id, ip_type,
|
|
+ path->ip_addr_len);
|
|
+ goto error;
|
|
+ }
|
|
+ if (path->vlan_id) {
|
|
+ vlan_iface = nic_find_vlan_iface_protocol(nic,
|
|
+ nic_iface, path->vlan_id, ip_type);
|
|
+ if (vlan_iface == NULL) {
|
|
+ /* Create a vlan_iface */
|
|
+ vlan_iface = nic_iface_init();
|
|
+ if (vlan_iface == NULL) {
|
|
+ LOG_ERR(PFX "%s: Couldn't allocate "
|
|
+ "space for vlan: %d ip_type: "
|
|
+ "%d ip_addr_len: %d",
|
|
+ nic->log_name, path->vlan_id,
|
|
+ ip_type, path->ip_addr_len);
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ vlan_iface->protocol = ip_type;
|
|
+ vlan_iface->vlan_id = path->vlan_id;
|
|
+ nic_add_vlan_iface(nic, nic_iface, vlan_iface);
|
|
+
|
|
+ /* TODO: When VLAN support is placed in */
|
|
+ /* the iface file revisit this code */
|
|
+ vlan_iface->ustack.ip_config =
|
|
+ nic_iface->ustack.ip_config;
|
|
+ memcpy(vlan_iface->ustack.hostaddr,
|
|
+ nic_iface->ustack.hostaddr,
|
|
+ sizeof(nic_iface->ustack.hostaddr));
|
|
+ memcpy(vlan_iface->ustack.netmask,
|
|
+ nic_iface->ustack.netmask,
|
|
+ sizeof(nic_iface->ustack.netmask));
|
|
+ memcpy(vlan_iface->ustack.netmask6,
|
|
+ nic_iface->ustack.netmask6,
|
|
+ sizeof(nic_iface->ustack.netmask6));
|
|
+ memcpy(vlan_iface->ustack.hostaddr6,
|
|
+ nic_iface->ustack.hostaddr6,
|
|
+ sizeof(nic_iface->ustack.hostaddr6));
|
|
+
|
|
+ persist_all_nic_iface(nic);
|
|
+ nic_disable(nic, 0);
|
|
+ nic_iface = vlan_iface;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /* Force enable the NIC */
|
|
+ if ((nic->state & NIC_STOPPED) &&
|
|
+ !(nic->flags & NIC_ENABLED_PENDING))
|
|
+ nic_enable(nic);
|
|
+
|
|
+ /* Ensure that the NIC is RUNNING */
|
|
+ rc = -EIO;
|
|
+ for (i = 0; i < 10; i++) {
|
|
+ if ((nic->state & NIC_RUNNING) == NIC_RUNNING) {
|
|
+ rc = 0;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ nanosleep(&ctldev_sleep_req, &sleep_rem);
|
|
+ }
|
|
+
|
|
+ if (rc != 0) {
|
|
+ LOG_WARN(PFX "%s[vlan: %d protocol: %d]: not running, "
|
|
+ "cmd: 0x%x nic state: 0x%x flags: 0x%x",
|
|
+ nic->log_name,
|
|
+ nic_iface->vlan_id, nic_iface->protocol,
|
|
+ ev->type, nic->state, nic->flags);
|
|
+ goto error;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (nic->ops) {
|
|
+ char eth_device_name[IFNAMSIZ];
|
|
+
|
|
+ switch (ev->type) {
|
|
+ case ISCSI_KEVENT_PATH_REQ:
|
|
+ /* pass the request up to the user space
|
|
+ * library driver */
|
|
+ if (nic->ops->handle_iscsi_path_req) {
|
|
+ nic->ops->handle_iscsi_path_req(nic,
|
|
+ nl_sock, ev,
|
|
+ path);
|
|
+ }
|
|
+
|
|
+ LOG_INFO(PFX "%s: 'path_req' operation finished",
|
|
+ nic->log_name);
|
|
+
|
|
+ rc = 0;
|
|
+ break;
|
|
+ case ISCSI_KEVENT_IF_DOWN:
|
|
+ memcpy(eth_device_name, nic->eth_device_name,
|
|
+ sizeof(eth_device_name));
|
|
+
|
|
+ pthread_mutex_lock(&nic_list_mutex);
|
|
+
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+ nic->flags |= NIC_EXIT_MAIN_LOOP;
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+
|
|
+ pthread_cond_broadcast(&nic->enable_done_cond);
|
|
+
|
|
+ nic_disable(nic, 1);
|
|
+
|
|
+ nic_remove(nic);
|
|
+ pthread_mutex_unlock(&nic_list_mutex);
|
|
+
|
|
+ pthread_mutex_lock(&nl_process_mutex);
|
|
+ nl_process_if_down = 0;
|
|
+ pthread_mutex_unlock(&nl_process_mutex);
|
|
+
|
|
+ rc = 0;
|
|
+
|
|
+ LOG_INFO(PFX "%s: 'if_down' operation finished",
|
|
+ eth_device_name);
|
|
+
|
|
+ break;
|
|
+ default:
|
|
+ rc = -EAGAIN;
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ error:
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+static void *nl_process_handle_thread(void *arg)
|
|
+{
|
|
+ int rc;
|
|
+
|
|
+ while (!event_loop_stop) {
|
|
+ char *data = NULL;
|
|
+
|
|
+ rc = pthread_cond_wait(&nl_process_cond, &nl_process_mutex);
|
|
+ if (rc != 0) {
|
|
+ LOG_ERR("Fatal error in NL processing thread "
|
|
+ "during wait[%s]", strerror(rc));
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ data = nl_process_ring[nl_process_head];
|
|
+ nl_process_ring[nl_process_head] = NULL;
|
|
+ nl_process_tail = NL_PROCESS_NEXT_ENTRY(nl_process_tail);
|
|
+
|
|
+ pthread_mutex_unlock(&nl_process_mutex);
|
|
+
|
|
+ if (data) {
|
|
+ ctldev_handle(data);
|
|
+ free(data);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return NULL;
|
|
+}
|
|
+
|
|
+static void flush_nl_process_ring()
|
|
+{
|
|
+ int i;
|
|
+
|
|
+ for (i = 0; i < NL_PROCESS_MAX_RING_SIZE; i++) {
|
|
+ if (nl_process_ring[i] != NULL) {
|
|
+ free(nl_process_ring[i]);
|
|
+ nl_process_ring[i] = NULL;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ nl_process_head = 0;
|
|
+ nl_process_tail = 0;
|
|
+
|
|
+ LOG_DEBUG(PFX "Flushed NL ring");
|
|
+}
|
|
+
|
|
+/**
|
|
+ * nic_nl_open() - This is called when opening/creating the Netlink listening
|
|
+ * thread
|
|
+ * @param dev - CNIC UIO device to create a NetLink listener on
|
|
+ * @return 0 on success, <0 on failure
|
|
+ */
|
|
+int nic_nl_open()
|
|
+{
|
|
+ int rc;
|
|
+
|
|
+ /* Prepare the thread to issue the ARP's */
|
|
+ nl_process_head = 0;
|
|
+ nl_process_tail = 0;
|
|
+ nl_process_if_down = 0;
|
|
+ memset(&nl_process_ring, 0, sizeof(nl_process_ring));
|
|
+
|
|
+ pthread_mutex_init(&nl_process_mutex, NULL);
|
|
+ pthread_cond_init(&nl_process_cond, NULL);
|
|
+ pthread_cond_init(&nl_process_if_down_cond, NULL);
|
|
+
|
|
+ rc = pthread_create(&nl_process_thread, NULL,
|
|
+ nl_process_handle_thread, NULL);
|
|
+ if (rc != 0) {
|
|
+ LOG_ERR("Could not create NL processing thread [%s]",
|
|
+ strerror(rc));
|
|
+ return -EIO;
|
|
+ }
|
|
+
|
|
+ nl_sock = socket(PF_NETLINK, SOCK_RAW, NETLINK_ISCSI);
|
|
+ if (nl_sock < 0) {
|
|
+ LOG_ERR(PFX "can not create NETLINK_ISCSI socket [%s]",
|
|
+ strerror(errno));
|
|
+ rc = -ENOMEM;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ memset(&src_addr, 0, sizeof(src_addr));
|
|
+ src_addr.nl_family = AF_NETLINK;
|
|
+ src_addr.nl_pid = getpid();
|
|
+ src_addr.nl_groups = ISCSI_NL_GRP_UIP;
|
|
+
|
|
+ while ((!event_loop_stop)) {
|
|
+ rc = bind(nl_sock,
|
|
+ (struct sockaddr *)&src_addr, sizeof(src_addr));
|
|
+ if (rc == 0)
|
|
+ break;
|
|
+
|
|
+ LOG_ERR(PFX "waiting binding to NETLINK_ISCSI socket");
|
|
+
|
|
+ sleep(1);
|
|
+ }
|
|
+
|
|
+ if (event_loop_stop) {
|
|
+ rc = -EINVAL;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ LOG_INFO(PFX "Netlink to CNIC on pid %d is ready", src_addr.nl_pid);
|
|
+
|
|
+ while (!event_loop_stop) {
|
|
+ struct iscsi_uevent *ev;
|
|
+ char *buf = NULL;
|
|
+
|
|
+ rc = pull_from_nl(&buf);
|
|
+ if (rc != 0)
|
|
+ continue;
|
|
+
|
|
+ /* Try to abort ARP'ing if a if_down was recieved */
|
|
+ ev = (struct iscsi_uevent *)NLMSG_DATA(buf);
|
|
+ if (ev->type == ISCSI_KEVENT_IF_DOWN) {
|
|
+ LOG_INFO(PFX "Received if_down event");
|
|
+
|
|
+ pthread_mutex_lock(&nl_process_mutex);
|
|
+ /* Don't flush the nl ring if another if_down
|
|
+ is in progress */
|
|
+ if (!nl_process_if_down) {
|
|
+ nl_process_if_down = 1;
|
|
+
|
|
+ flush_nl_process_ring();
|
|
+ }
|
|
+ pthread_mutex_unlock(&nl_process_mutex);
|
|
+ }
|
|
+
|
|
+ if ((nl_process_head + 1 == nl_process_tail) ||
|
|
+ (nl_process_tail == 0 &&
|
|
+ nl_process_head == NL_PROCESS_LAST_ENTRY)) {
|
|
+ LOG_WARN(PFX "No space on Netlink ring");
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ pthread_mutex_lock(&nl_process_mutex);
|
|
+ nl_process_ring[nl_process_head] = buf;
|
|
+ nl_process_head = NL_PROCESS_NEXT_ENTRY(nl_process_head);
|
|
+
|
|
+ pthread_cond_signal(&nl_process_cond);
|
|
+ pthread_mutex_unlock(&nl_process_mutex);
|
|
+
|
|
+ LOG_DEBUG(PFX "Pulled nl event");
|
|
+ }
|
|
+
|
|
+ LOG_INFO(PFX "Netlink thread exit'ing");
|
|
+ rc = 0;
|
|
+
|
|
+error:
|
|
+ return 0;
|
|
+}
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic_nl.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/nic_nl.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic_nl.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/nic_nl.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,53 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * nic_nl.h - NIC uIP NetLink user space stack
|
|
+ *
|
|
+ */
|
|
+
|
|
+#ifndef __NIC_NL_H__
|
|
+#define __NIC_NL_H__
|
|
+
|
|
+#include <pthread.h>
|
|
+
|
|
+int nic_nl_open();
|
|
+void nic_nl_close();
|
|
+
|
|
+int __kipc_call(int fd, void *iov_base, int iov_len);
|
|
+
|
|
+extern pthread_cond_t nl_process_if_down_cond;
|
|
+extern pthread_mutex_t nl_process_mutex;
|
|
+extern int nl_process_if_down;
|
|
+
|
|
+#endif /* __NIC_NL_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic_utils.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/nic_utils.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic_utils.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/nic_utils.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,1657 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * nic_util.c - shared NIC utility functions
|
|
+ *
|
|
+ */
|
|
+#include <dirent.h>
|
|
+#include <errno.h>
|
|
+#include <fcntl.h>
|
|
+#define _GNU_SOURCE
|
|
+#include <stdio.h>
|
|
+#include <string.h>
|
|
+#include <time.h>
|
|
+#include <unistd.h>
|
|
+#include <arpa/inet.h>
|
|
+#include <linux/sockios.h>
|
|
+#include <sys/ioctl.h>
|
|
+#include <sys/types.h>
|
|
+#include <sys/socket.h>
|
|
+#include <sys/stat.h>
|
|
+#include <sys/time.h>
|
|
+
|
|
+#include "logger.h"
|
|
+#include "nic.h"
|
|
+#include "nic_id.h"
|
|
+#include "nic_vlan.h"
|
|
+#include "nic_utils.h"
|
|
+#include "options.h"
|
|
+
|
|
+#define PFX "nic_utils "
|
|
+
|
|
+/******************************************************************************
|
|
+ * String constants
|
|
+ *****************************************************************************/
|
|
+static const char nic_uio_sysfs_name_tempate[] = "/sys/class/uio/uio%i/name";
|
|
+static const char cnic_sysfs_uio_event_template[] =
|
|
+ "/sys/class/uio/uio%d/event";
|
|
+static const char base_uio_sysfs_name[] = "/sys/class/uio/";
|
|
+static const char uio_name[] = "uio";
|
|
+
|
|
+static const char uio_base_dir[] = "/dev/uio";
|
|
+static const char uio_udev_path_template[] = "/dev/uio%hd";
|
|
+static const char uio_uevent_path_template[] = "/sys/class/uio/uio%d/uevent";
|
|
+
|
|
+static const char base_iscsi_host_name[] = "/sys/class/iscsi_host/";
|
|
+static const char host_template[] = "host%d";
|
|
+static const char iscsi_host_path_template[] = "/sys/class/iscsi_host/host%d";
|
|
+static const char iscsi_host_path_netdev_template[] =
|
|
+ "/sys/class/iscsi_host/host%d/netdev";
|
|
+static const char cnic_uio_sysfs_resc_template[] =
|
|
+ "/sys/class/uio/uio%i/device/resource%i";
|
|
+
|
|
+/**
|
|
+ * manually_trigger_uio_event() - If the uio file node doesn't exist then
|
|
+ * try to retrigger udev to create the file
|
|
+ * node by touch the uevent file in sysfs
|
|
+ * @param nic - the nic to trigger on
|
|
+ * @param uio_minor - UIO the minor number to use
|
|
+ * @return 0 on success
|
|
+ */
|
|
+int manually_trigger_uio_event(nic_t * nic, int uio_minor)
|
|
+{
|
|
+ int fd;
|
|
+ char uio_uevent_path[sizeof(uio_uevent_path_template) + 10];
|
|
+ char enable_str[] = "online";
|
|
+ int rc;
|
|
+ size_t bytes_wrote;
|
|
+
|
|
+ rc = sprintf(uio_uevent_path, uio_uevent_path_template, uio_minor);
|
|
+ if (rc < 0) {
|
|
+ LOG_ERR(PFX "%s: Could not build uio uevent path",
|
|
+ nic->log_name);
|
|
+ return -EIO;
|
|
+ }
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: triggering UIO uevent path: %s",
|
|
+ nic->log_name, uio_uevent_path);
|
|
+
|
|
+ fd = open(uio_uevent_path, O_WRONLY);
|
|
+ if (fd == -1) {
|
|
+ LOG_ERR(PFX "%s: Could not open uio uevent path: %s [%s]",
|
|
+ nic->log_name, uio_uevent_path, strerror(errno));
|
|
+ return -EIO;
|
|
+ }
|
|
+
|
|
+ bytes_wrote = write(fd, enable_str, sizeof(enable_str));
|
|
+ if (bytes_wrote != sizeof(enable_str)) {
|
|
+ LOG_ERR(PFX "%s: Could write to uio uevent path: %s [%s]",
|
|
+ nic->log_name, uio_uevent_path, strerror(errno));
|
|
+ rc = -EIO;
|
|
+ } else
|
|
+ rc = 0;
|
|
+
|
|
+ close(fd);
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+static int wait_for_file_node_timed(nic_t * nic, char *filepath, int seconds)
|
|
+{
|
|
+ struct timeval start_time;
|
|
+ struct timeval wait_time;
|
|
+ struct timeval total_time;
|
|
+ struct timespec sleep_req, sleep_rem;
|
|
+
|
|
+ sleep_req.tv_sec = 0;
|
|
+ sleep_req.tv_nsec = 250000000;
|
|
+
|
|
+ wait_time.tv_sec = seconds;
|
|
+ wait_time.tv_usec = 0;
|
|
+
|
|
+ if (gettimeofday(&start_time, NULL)) {
|
|
+ LOG_ERR(PFX "%s: Couldn't gettimeofday() during watch file: %s"
|
|
+ "[%s]", nic->log_name, filepath, strerror(errno));
|
|
+ return -EIO;
|
|
+ }
|
|
+
|
|
+ timeradd(&start_time, &wait_time, &total_time);
|
|
+
|
|
+ while (1) {
|
|
+ struct timeval current_time;
|
|
+ struct stat file_stat;
|
|
+
|
|
+ /* Check if the file node exists */
|
|
+ if (stat(filepath, &file_stat) == 0)
|
|
+ return 0;
|
|
+
|
|
+ if (gettimeofday(¤t_time, NULL)) {
|
|
+ LOG_ERR(PFX "%s: Couldn't get current time for "
|
|
+ "watching file: %s [%s]",
|
|
+ nic->log_name, filepath, strerror(errno));
|
|
+ return -EIO;
|
|
+ }
|
|
+
|
|
+ /* Timeout has excceded return -ETIME */
|
|
+ if (timercmp(&total_time, ¤t_time, <)) {
|
|
+ LOG_ERR(PFX "%s: timeout waiting %d secs for file: %s",
|
|
+ nic->log_name, seconds, filepath);
|
|
+ return -ETIME;
|
|
+ }
|
|
+
|
|
+ nanosleep(&sleep_req, &sleep_rem);
|
|
+ }
|
|
+}
|
|
+
|
|
+/******************************************************************************
|
|
+ * Autodiscovery of iscsi_hosts
|
|
+ *****************************************************************************/
|
|
+static int filter_host_name(const struct dirent *entry)
|
|
+{
|
|
+ if ((memcmp(entry->d_name, "host", 4) == 0))
|
|
+ return 1;
|
|
+ else
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+int nic_discover_iscsi_hosts()
|
|
+{
|
|
+ struct dirent **files;
|
|
+ int count;
|
|
+ int i;
|
|
+ int rc;
|
|
+
|
|
+ count = scandir(base_iscsi_host_name, &files, filter_host_name,
|
|
+ alphasort);
|
|
+
|
|
+ switch (count) {
|
|
+ case 0:
|
|
+ /* Currently there are no iSCSI hosts */
|
|
+ rc = 0;
|
|
+ break;
|
|
+
|
|
+ case -1:
|
|
+ LOG_WARN(PFX "Error when scanning path: %s[%s]",
|
|
+ base_iscsi_host_name, strerror(errno));
|
|
+ rc = -EINVAL;
|
|
+ break;
|
|
+
|
|
+ default:
|
|
+ /* There are iSCSI hosts */
|
|
+ for (i = 0; i < count; i++) {
|
|
+ int host_no;
|
|
+ char *raw = NULL;
|
|
+ uint32_t raw_size = 0;
|
|
+ char temp_path[sizeof(iscsi_host_path_netdev_template) +
|
|
+ 8];
|
|
+ rc = sscanf(files[i]->d_name, host_template, &host_no);
|
|
+ nic_t *nic;
|
|
+
|
|
+ LOG_INFO(PFX "Found host[%d]: %s",
|
|
+ host_no, files[i]->d_name);
|
|
+
|
|
+ /* Build the path to determine netdev name */
|
|
+ snprintf(temp_path, sizeof(temp_path),
|
|
+ iscsi_host_path_netdev_template, host_no);
|
|
+
|
|
+ rc = capture_file(&raw, &raw_size, temp_path);
|
|
+ if (rc != 0)
|
|
+ continue;
|
|
+
|
|
+ rc = from_host_no_find_associated_eth_device(host_no,
|
|
+ &nic);
|
|
+ if (rc != 0) {
|
|
+ /* Normalize the string */
|
|
+ if (raw[raw_size - 1] == '\n')
|
|
+ raw[raw_size - 1] = '\0';
|
|
+
|
|
+ nic = nic_init();
|
|
+ if (nic == NULL) {
|
|
+ LOG_ERR(PFX "Couldn't allocate "
|
|
+ "space for NIC %s "
|
|
+ "during scan", raw);
|
|
+
|
|
+ rc = -ENOMEM;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ strncpy(nic->eth_device_name, raw, raw_size);
|
|
+ nic->config_device_name = nic->eth_device_name;
|
|
+ nic->log_name = nic->eth_device_name;
|
|
+
|
|
+ if (nic_fill_name(nic) != 0) {
|
|
+ free(nic);
|
|
+ free(raw);
|
|
+ rc = -EIO;
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ nic_add(nic);
|
|
+
|
|
+ LOG_INFO(PFX "NIC not found creating an "
|
|
+ "instance for host_no: %d %s",
|
|
+ host_no, nic->eth_device_name);
|
|
+ } else
|
|
+ LOG_INFO(PFX "%s: NIC found host_no: %d",
|
|
+ nic->log_name, host_no);
|
|
+
|
|
+ free(raw);
|
|
+ }
|
|
+
|
|
+ /* Cleanup the scandir() call */
|
|
+ for (i = 0; i < count; i++)
|
|
+ free(files[i]);
|
|
+ free(files);
|
|
+
|
|
+ rc = 0;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/******************************************************************************
|
|
+ * Enable/Disable Multicast on physical interface
|
|
+ *****************************************************************************/
|
|
+static int nic_util_enable_disable_multicast(nic_t * nic, uint32_t cmd)
|
|
+{
|
|
+ int rc = 0;
|
|
+ struct uip_eth_addr multicast_addr;
|
|
+ int fd;
|
|
+ struct ifreq ifr;
|
|
+
|
|
+ /* adding ethernet multicast address for IPv6 */
|
|
+ memcpy(&multicast_addr, nic->mac_addr, ETH_ALEN);
|
|
+ multicast_addr.addr[0] = 0x33;
|
|
+ multicast_addr.addr[1] = 0x33;
|
|
+ multicast_addr.addr[2] = 0xff;
|
|
+
|
|
+ /* Prepare the request */
|
|
+ memset(&ifr, 0, sizeof(ifr));
|
|
+ strncpy(ifr.ifr_name, nic->eth_device_name,
|
|
+ sizeof(nic->eth_device_name));
|
|
+ memcpy(ifr.ifr_hwaddr.sa_data, multicast_addr.addr, ETH_ALEN);
|
|
+
|
|
+ fd = socket(AF_INET, SOCK_DGRAM, 0);
|
|
+ if (fd < 0) {
|
|
+ LOG_ERR(PFX "%s: Couldn't create socket to %s "
|
|
+ "multicast address: %s",
|
|
+ nic->log_name,
|
|
+ cmd == SIOCADDMULTI ? "added" : "delete",
|
|
+ strerror(errno));
|
|
+ return errno;
|
|
+ }
|
|
+
|
|
+ rc = fcntl(fd, F_SETFL, O_NONBLOCK);
|
|
+ if (rc != 0) {
|
|
+ LOG_WARN("%s: Couldn't set to ethtool IOCTL to "
|
|
+ "non-blocking [%s]", nic->log_name, strerror(errno));
|
|
+ }
|
|
+
|
|
+ if (ioctl(fd, cmd, (char *)&ifr) != 0) {
|
|
+ LOG_ERR("%s: Couldn't issue ioctl socket to %s "
|
|
+ "multicast address: %s",
|
|
+ nic->log_name,
|
|
+ cmd == SIOCADDMULTI ? "add" : "delete",
|
|
+ strerror(errno));
|
|
+ rc = errno;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ LOG_INFO(PFX "%s: %s address %02x:%02x:%02x:%02x:%02x:%02x "
|
|
+ "to multicast list",
|
|
+ nic->log_name,
|
|
+ cmd == SIOCADDMULTI ? "Added" : "Deleted",
|
|
+ multicast_addr.addr[0], multicast_addr.addr[1],
|
|
+ multicast_addr.addr[2], multicast_addr.addr[3],
|
|
+ multicast_addr.addr[4], multicast_addr.addr[5]);
|
|
+
|
|
+ if (cmd == SIOCADDMULTI) {
|
|
+ nic->flags |= NIC_ADDED_MULICAST;
|
|
+ } else {
|
|
+ nic->flags &= ~NIC_ADDED_MULICAST;
|
|
+ }
|
|
+
|
|
+error:
|
|
+ close(fd);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * enable_multicast() - This fuction is used to enable
|
|
+ * the listening of multicast addresses for a given network interface
|
|
+ * @param nic - NIC device to enable multicast on
|
|
+ * @return 0 for success or <0 for failure
|
|
+ */
|
|
+int enable_multicast(nic_t * nic)
|
|
+{
|
|
+ return nic_util_enable_disable_multicast(nic, SIOCADDMULTI);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * disable_multicast() - This fuction is used to disable
|
|
+ * the listening of multicast addresses for a given network interface
|
|
+ * @param dev - NIC device to disable multicast on
|
|
+ * @return 0 for success or <0 for failure
|
|
+ */
|
|
+int disable_multicast(nic_t * nic)
|
|
+{
|
|
+ return nic_util_enable_disable_multicast(nic, SIOCDELMULTI);
|
|
+}
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Finding associated UIO/physical network interfaces
|
|
+ ******************************************************************************/
|
|
+static int filter_net_name(const struct dirent *entry)
|
|
+{
|
|
+ if ((memcmp(entry->d_name, "net:", 4) == 0))
|
|
+ return 1;
|
|
+ else
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static char *extract_net_name(struct dirent **files)
|
|
+{
|
|
+ return strstr(files[0]->d_name, ":");
|
|
+}
|
|
+
|
|
+static int filter_dot_out(const struct dirent *entry)
|
|
+{
|
|
+ if ((memcmp(entry->d_name, ".", 1) == 0))
|
|
+ return 0;
|
|
+ else
|
|
+ return 1;
|
|
+}
|
|
+
|
|
+static char *extract_none(struct dirent **files)
|
|
+{
|
|
+ return (files[0]->d_name);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * from_host_no_find_nic() - Given the host number
|
|
+ * this function will try to find the assoicated nic interface
|
|
+ * @param host_no - minor number of the UIO device
|
|
+ * @param nic - pointer to the NIC will set if successful
|
|
+ * @return 0 on success, <0 on error
|
|
+ */
|
|
+int from_host_no_find_associated_eth_device(int host_no, nic_t ** nic)
|
|
+{
|
|
+ nic_t *current_nic = nic_list;
|
|
+ char *raw = NULL, *raw_tmp;
|
|
+ uint32_t raw_size = 0;
|
|
+
|
|
+ char temp_path[sizeof(iscsi_host_path_netdev_template) + 8];
|
|
+ int rc = -EIO;
|
|
+
|
|
+ /* Build the path to determine uio name */
|
|
+ snprintf(temp_path, sizeof(temp_path),
|
|
+ iscsi_host_path_netdev_template, host_no);
|
|
+
|
|
+ rc = capture_file(&raw, &raw_size, temp_path);
|
|
+ if (rc != 0)
|
|
+ goto error;
|
|
+
|
|
+ /* sanitize name string by replacing newline with null termination */
|
|
+ raw_tmp = raw;
|
|
+ while (*raw_tmp != '\n' && raw_size--)
|
|
+ raw_tmp++;
|
|
+ *raw_tmp = '\0';
|
|
+
|
|
+ rc = -EIO;
|
|
+
|
|
+ pthread_mutex_lock(&nic_list_mutex);
|
|
+ current_nic = nic_list;
|
|
+ while (current_nic != NULL) {
|
|
+ if (strcmp(raw, current_nic->eth_device_name) == 0) {
|
|
+ *nic = current_nic;
|
|
+ rc = 0;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ current_nic = current_nic->next;
|
|
+ }
|
|
+ pthread_mutex_unlock(&nic_list_mutex);
|
|
+
|
|
+ free(raw);
|
|
+
|
|
+error:
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/*******************************************************************************
|
|
+ * NIC packet handling functions
|
|
+ ******************************************************************************/
|
|
+/**
|
|
+ * from_uio_find_associated_eth_device() - Given the uio minor number
|
|
+ * this function will try to find the assoicated phyisical network
|
|
+ * interface
|
|
+ * @param uio_minor - minor number of the UIO device
|
|
+ * @param name - char buffer which will be filled if successful
|
|
+ * @param name_size - size of the name buffer
|
|
+ * @return >0 minor number <0 an error
|
|
+ */
|
|
+static int from_uio_find_associated_eth_device(nic_t * nic,
|
|
+ int uio_minor,
|
|
+ char *name, size_t name_size)
|
|
+{
|
|
+ char *path;
|
|
+ int rc;
|
|
+ int count;
|
|
+ struct dirent **files;
|
|
+ char *parsed_name;
|
|
+ int i;
|
|
+ int path_iterator;
|
|
+ char *search_paths[] = { "/sys/class/uio/uio%i/device/",
|
|
+ "/sys/class/uio/uio%i/device/net"
|
|
+ };
|
|
+ int path_to[] = { 5, 1 };
|
|
+ int (*search_filters[]) (const struct dirent *) = {
|
|
+ filter_net_name, filter_dot_out,};
|
|
+ char *(*extract_name[]) (struct dirent ** files) = {
|
|
+ extract_net_name, extract_none,};
|
|
+ int extract_name_offset[] = { 1, 0 };
|
|
+
|
|
+ path = malloc(PATH_MAX);
|
|
+ if (path == NULL) {
|
|
+ LOG_ERR(PFX "Could not allocate memory for path");
|
|
+ rc = -ENOMEM;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ for (path_iterator = 0;
|
|
+ path_iterator < sizeof(search_paths) / sizeof(search_paths[0]);
|
|
+ path_iterator++) {
|
|
+ /* Build the path to determine uio name */
|
|
+ rc = sprintf(path, search_paths[path_iterator], uio_minor);
|
|
+
|
|
+ wait_for_file_node_timed(nic, path, path_to[path_iterator]);
|
|
+
|
|
+ count = scandir(path, &files,
|
|
+ search_filters[path_iterator], alphasort);
|
|
+
|
|
+ switch (count) {
|
|
+ case 1:
|
|
+ parsed_name = (*extract_name[path_iterator]) (files);
|
|
+ if (parsed_name == NULL) {
|
|
+ LOG_WARN(PFX "Couldn't find delimiter in: %s",
|
|
+ files[0]->d_name);
|
|
+
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ strncpy(name,
|
|
+ parsed_name +
|
|
+ extract_name_offset[path_iterator], name_size);
|
|
+
|
|
+ free(files[0]);
|
|
+ free(files);
|
|
+
|
|
+ rc = 0;
|
|
+ break;
|
|
+
|
|
+ case 0:
|
|
+ rc = -EINVAL;
|
|
+ break;
|
|
+
|
|
+ case -1:
|
|
+ LOG_WARN(PFX "Error when scanning path: %s[%s]",
|
|
+ path, strerror(errno));
|
|
+ rc = -EINVAL;
|
|
+ break;
|
|
+
|
|
+ default:
|
|
+ LOG_WARN(PFX
|
|
+ "Too many entries when looking for device: %s",
|
|
+ path);
|
|
+
|
|
+ /* Cleanup the scandir() call */
|
|
+ for (i = 0; i < count; i++)
|
|
+ free(files[i]);
|
|
+ free(files);
|
|
+
|
|
+ rc = -EINVAL;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ if (rc == 0)
|
|
+ break;
|
|
+ }
|
|
+
|
|
+error:
|
|
+ free(path);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * filter_uio_name() - This is the callback used by scandir when looking for
|
|
+ * the number of uio entries
|
|
+ */
|
|
+static int filter_uio_name(const struct dirent *entry)
|
|
+{
|
|
+ /* Only return if the name of the file begins with 'uio' */
|
|
+ if ((memcmp(entry->d_name, uio_name, sizeof(uio_name) - 1) == 0))
|
|
+ return 1;
|
|
+ else
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * from_netdev_name_find_nic() - This is used to find the NIC device given
|
|
+ * the netdev name
|
|
+ * @param interface_name - name of the interface to search on
|
|
+ * @param nic - pointer of the pointer to the NIC
|
|
+ * @return 0 on success, <0 on failure
|
|
+ */
|
|
+int from_netdev_name_find_nic(char *interface_name, nic_t ** nic)
|
|
+{
|
|
+ nic_t *current_nic;
|
|
+
|
|
+ current_nic = nic_list;
|
|
+ while (current_nic != NULL) {
|
|
+ if (strcmp(interface_name, current_nic->eth_device_name) == 0)
|
|
+ break;
|
|
+
|
|
+ current_nic = current_nic->next;
|
|
+ }
|
|
+
|
|
+ if (current_nic == NULL)
|
|
+ return -EINVAL;
|
|
+
|
|
+ *nic = current_nic;
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * from_phys_name_find_assoicated_uio_device() - This is used to find the
|
|
+ * uio minor
|
|
+ * when given a network interface name
|
|
+ * @param interface_name - network interface name to search for
|
|
+ * @return >0 minor number <0 an error
|
|
+ */
|
|
+int from_phys_name_find_assoicated_uio_device(nic_t * nic)
|
|
+{
|
|
+ char *path = NULL;
|
|
+ int count;
|
|
+ struct dirent **files;
|
|
+ int i;
|
|
+ int rc;
|
|
+ char *interface_name = nic->config_device_name;
|
|
+
|
|
+ if (interface_name == NULL)
|
|
+ interface_name = nic->eth_device_name;
|
|
+
|
|
+ /* Wait at least 10 seconds for uio sysfs entries to appear */
|
|
+ rc = wait_for_file_node_timed(nic, (char *)base_uio_sysfs_name, 10);
|
|
+ if (rc != 0)
|
|
+ return rc;
|
|
+
|
|
+ count = scandir(base_uio_sysfs_name,
|
|
+ &files, filter_uio_name, alphasort);
|
|
+
|
|
+ switch (count) {
|
|
+ case 0:
|
|
+ LOG_WARN(PFX "Couldn't find %s to determine uio minor",
|
|
+ interface_name);
|
|
+ return -EINVAL;
|
|
+
|
|
+ case -1:
|
|
+ LOG_WARN(PFX "Error when scanning for %s in path: %s [%s]",
|
|
+ interface_name, base_uio_sysfs_name, strerror(errno));
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ path = malloc(PATH_MAX);
|
|
+ if (path == NULL) {
|
|
+ LOG_ERR(PFX "Could not allocate memory for path");
|
|
+ return -ENOMEM;
|
|
+ }
|
|
+
|
|
+ /* Run through the contents of the filtered files to see if the
|
|
+ * network interface name matches that of the uio device */
|
|
+ for (i = 0; i < count; i++) {
|
|
+ int uio_minor;
|
|
+ char eth_name[IFNAMSIZ];
|
|
+
|
|
+ rc = sscanf(files[i]->d_name, "uio%d", &uio_minor);
|
|
+ if (rc != 1) {
|
|
+ LOG_WARN("Could not parse: %s", files[i]->d_name);
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ rc = from_uio_find_associated_eth_device(nic,
|
|
+ uio_minor,
|
|
+ eth_name,
|
|
+ sizeof(eth_name));
|
|
+ if (rc != 0) {
|
|
+ LOG_WARN("uio minor: %d not valid [%D]", uio_minor, rc);
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ if (strncmp(eth_name, interface_name, sizeof(eth_name)) == 0) {
|
|
+ memcpy(nic->eth_device_name,
|
|
+ eth_name, sizeof(nic->eth_device_name));
|
|
+
|
|
+ LOG_INFO(PFX "%s associated with uio%d",
|
|
+ nic->eth_device_name, uio_minor);
|
|
+
|
|
+ rc = uio_minor;
|
|
+ goto done;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ LOG_WARN("Could not find assoicate uio device with %s", interface_name);
|
|
+
|
|
+ rc = -EINVAL;
|
|
+done:
|
|
+ if (path != NULL)
|
|
+ free(path);
|
|
+
|
|
+ for (i = 0; i < count; i++)
|
|
+ free(files[i]);
|
|
+ free(files);
|
|
+
|
|
+ return rc;
|
|
+
|
|
+}
|
|
+
|
|
+/**
|
|
+ * nic_verify_uio_sysfs_name() - Using the name entry in sysfs it will try to
|
|
+ * match the NIC library name
|
|
+ * @param nic - The NIC hardware to check
|
|
+ *
|
|
+ */
|
|
+int nic_verify_uio_sysfs_name(nic_t * nic)
|
|
+{
|
|
+ char *raw = NULL, *raw_tmp;
|
|
+ uint32_t raw_size = 0;
|
|
+ char temp_path[sizeof(nic_uio_sysfs_name_tempate) + 8];
|
|
+ int rc = 0;
|
|
+
|
|
+ /* Build the path to determine uio name */
|
|
+ snprintf(temp_path, sizeof(temp_path),
|
|
+ nic_uio_sysfs_name_tempate, nic->uio_minor);
|
|
+
|
|
+ rc = capture_file(&raw, &raw_size, temp_path);
|
|
+ if (rc != 0)
|
|
+ goto error;
|
|
+
|
|
+ /* sanitize name string by replacing newline with null termination */
|
|
+ raw_tmp = raw;
|
|
+ while (*raw_tmp != '\n' && raw_size--)
|
|
+ raw_tmp++;
|
|
+ *raw_tmp = '\0';
|
|
+
|
|
+ /* If the nic library is not set then check if there is a library
|
|
+ * which matches the library name */
|
|
+ if (nic->nic_library == NULL) {
|
|
+ NIC_LIBRARY_EXIST_T exist;
|
|
+
|
|
+ exist = does_nic_uio_name_exist(raw);
|
|
+ if (exist == NIC_LIBRARY_DOESNT_EXIST) {
|
|
+ LOG_ERR(PFX "%s: could not find library: %s ",
|
|
+ nic->log_name, raw);
|
|
+ rc = -EIO;
|
|
+ }
|
|
+ } else {
|
|
+ char *library_name;
|
|
+ size_t library_name_size;
|
|
+
|
|
+ /* Get the string name from the NIC library */
|
|
+ (*nic->ops->lib_ops.get_library_name) (&library_name,
|
|
+ &library_name_size);
|
|
+
|
|
+ if (strcmp(raw, library_name) != 0) {
|
|
+ LOG_ERR(PFX "%s: uio names not equal: "
|
|
+ "expecting %s got %s from %s",
|
|
+ nic->log_name, library_name, raw, temp_path);
|
|
+ rc = -EIO;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ free(raw);
|
|
+
|
|
+ LOG_INFO(PFX "%s: Verified is a cnic_uio device", nic->log_name);
|
|
+
|
|
+error:
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * nic_fill_name() - This will initialize all the hardware resources underneath
|
|
+ * a struct cnic_uio device
|
|
+ * @param nic - The nic device to attach the hardware with
|
|
+ * @return 0 on success, on failure a errno will be returned
|
|
+ */
|
|
+int nic_fill_name(nic_t * nic)
|
|
+{
|
|
+ int rc;
|
|
+
|
|
+ if ((nic->config_device_name != NULL) &&
|
|
+ (memcmp(uio_base_dir, nic->config_device_name,
|
|
+ sizeof(uio_base_dir) - 1) == 0)) {
|
|
+ uint16_t uio_minor;
|
|
+ char eth_name[sizeof(nic->eth_device_name)];
|
|
+
|
|
+ wait_for_file_node_timed(nic, nic->config_device_name, 5);
|
|
+
|
|
+ /* Determine the minor number for the UIO device */
|
|
+ rc = sscanf(nic->config_device_name, uio_udev_path_template,
|
|
+ &uio_minor);
|
|
+ if (rc != 1) {
|
|
+ LOG_WARN(PFX "%s: Could not parse for minor number",
|
|
+ nic->uio_device_name);
|
|
+ return -EINVAL;
|
|
+ } else
|
|
+ nic->uio_minor = uio_minor;
|
|
+
|
|
+ nic->uio_device_name = nic->config_device_name;
|
|
+
|
|
+ /* Determine the assoicated physical network interface */
|
|
+ rc = from_uio_find_associated_eth_device(nic,
|
|
+ nic->uio_minor,
|
|
+ eth_name,
|
|
+ sizeof(eth_name));
|
|
+ if (rc != 0) {
|
|
+ LOG_WARN(PFX "%s: Couldn't find associated eth device",
|
|
+ nic->uio_device_name);
|
|
+ } else {
|
|
+ memcpy(nic->eth_device_name,
|
|
+ eth_name, sizeof(eth_name));
|
|
+ }
|
|
+
|
|
+ LOG_INFO(PFX "%s: configured for uio device for %s",
|
|
+ nic->log_name, nic->uio_device_name);
|
|
+
|
|
+ } else {
|
|
+ LOG_INFO(PFX "looking for uio device for %s",
|
|
+ nic->config_device_name);
|
|
+
|
|
+ rc = from_phys_name_find_assoicated_uio_device(nic);
|
|
+ if (rc < 0) {
|
|
+ LOG_ERR(PFX "Could not determine UIO name for %s",
|
|
+ nic->config_device_name);
|
|
+
|
|
+ return -rc;
|
|
+ }
|
|
+
|
|
+ nic->uio_minor = rc;
|
|
+
|
|
+ if (nic->flags & NIC_UIO_NAME_MALLOC)
|
|
+ free(nic->uio_device_name);
|
|
+
|
|
+ nic->uio_device_name =
|
|
+ malloc(sizeof(uio_udev_path_template) + 8);
|
|
+ if (nic->uio_device_name == NULL) {
|
|
+ LOG_INFO(PFX "%s: Couldn't malloc space for uio name",
|
|
+ nic->log_name);
|
|
+ return -ENOMEM;
|
|
+ }
|
|
+
|
|
+ snprintf(nic->uio_device_name,
|
|
+ sizeof(uio_udev_path_template) + 8,
|
|
+ uio_udev_path_template, nic->uio_minor);
|
|
+
|
|
+ nic->flags |= NIC_UIO_NAME_MALLOC;
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+void cnic_get_sysfs_pci_resource_path(nic_t *nic, int resc_no,
|
|
+ char *sys_path, size_t size)
|
|
+{
|
|
+ /* Build the path to sysfs pci resource */
|
|
+ snprintf(sys_path, size,
|
|
+ cnic_uio_sysfs_resc_template, nic->uio_minor, resc_no);
|
|
+
|
|
+}
|
|
+
|
|
+void prepare_library(nic_t * nic)
|
|
+{
|
|
+ int rc;
|
|
+ NIC_LIBRARY_EXIST_T exist;
|
|
+
|
|
+ nic_fill_name(nic);
|
|
+
|
|
+ /* No assoicated library, we can skip it */
|
|
+ if (nic->library_name != NULL) {
|
|
+ /* Check that we have the proper NIC library loaded */
|
|
+ exist = does_nic_library_exist(nic->library_name);
|
|
+ if (exist == NIC_LIBRARY_DOESNT_EXIST) {
|
|
+ LOG_ERR(PFX "NIC library doesn't exists: %s",
|
|
+ nic->library_name);
|
|
+ goto error;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /* Determine the NIC library to use based on the PCI Id */
|
|
+ rc = find_set_nic_lib(nic);
|
|
+ if (rc != 0) {
|
|
+ LOG_ERR(PFX "%s: Couldn't find NIC library", nic->log_name);
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ LOG_INFO("%s: found NIC '%s'", nic->log_name, nic->pci_id->device_name);
|
|
+error:
|
|
+ return;
|
|
+}
|
|
+
|
|
+void prepare_nic_thread(nic_t * nic)
|
|
+{
|
|
+ int rc;
|
|
+
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+ if (nic->thread == INVALID_THREAD) {
|
|
+ struct timespec ts;
|
|
+ struct timeval tp;
|
|
+
|
|
+ LOG_INFO(PFX "%s: spinning up thread for nic", nic->log_name);
|
|
+
|
|
+ /* Try to spin up the nic thread */
|
|
+ rc = pthread_create(&nic->thread, NULL, nic_loop, nic);
|
|
+ if (rc != 0) {
|
|
+ LOG_ERR(PFX "%s: Couldn't create thread for nic",
|
|
+ nic->log_name);
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ /* Convert from timeval to timespec */
|
|
+ rc = gettimeofday(&tp, NULL);
|
|
+ ts.tv_sec = tp.tv_sec;
|
|
+ ts.tv_nsec = tp.tv_usec * 1000;
|
|
+ ts.tv_sec += 5; /* TODO: hardcoded wait for 5 seconds */
|
|
+
|
|
+ /* Wait for the nic loop thread to to running */
|
|
+ rc = pthread_cond_timedwait(&nic->nic_loop_started_cond,
|
|
+ &nic->nic_mutex, &ts);
|
|
+
|
|
+ LOG_INFO("Created nic thread: %s", nic->log_name);
|
|
+ }
|
|
+
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+
|
|
+error:
|
|
+ return;
|
|
+}
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Functions used to enable/disable the NIC
|
|
+ ******************************************************************************/
|
|
+/**
|
|
+ * nic_enable() - Function used to enable the NIC
|
|
+ * @param nic - NIC to enable
|
|
+ * @return 0 on success, <0 on failure
|
|
+ */
|
|
+int nic_enable(nic_t * nic)
|
|
+{
|
|
+ if (nic->flags & NIC_GOING_DOWN) {
|
|
+ LOG_INFO(PFX "%s: NIC device is going down, "
|
|
+ "flag: 0x%x state: 0x%x",
|
|
+ nic->log_name, nic->flags, nic->state);
|
|
+ return -EINVAL;
|
|
+ }
|
|
+ if (nic->state & NIC_STOPPED) {
|
|
+ struct timespec ts;
|
|
+ struct timeval tp;
|
|
+ int rc;
|
|
+
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+ /* Signal the device to enable itself */
|
|
+ pthread_cond_broadcast(&nic->enable_wait_cond);
|
|
+
|
|
+ nic->flags &= ~NIC_DISABLED;
|
|
+ nic->flags |= NIC_ENABLED;
|
|
+ nic->flags |= NIC_ENABLED_PENDING;
|
|
+
|
|
+ /* Convert from timeval to timespec */
|
|
+ rc = gettimeofday(&tp, NULL);
|
|
+ ts.tv_sec = tp.tv_sec;
|
|
+ ts.tv_nsec = tp.tv_usec * 1000;
|
|
+ ts.tv_sec += 10;
|
|
+
|
|
+ /* Wait for the device to be enabled */
|
|
+ rc = pthread_cond_timedwait(&nic->enable_done_cond,
|
|
+ &nic->nic_mutex, &ts);
|
|
+#if 0
|
|
+ if (rc || !nic->flags & NIC_ENABLED) {
|
|
+ /* Give it one more shout */
|
|
+ pthread_cond_broadcast(&nic->enable_wait_cond);
|
|
+ rc = gettimeofday(&tp, NULL);
|
|
+ ts.tv_sec = tp.tv_sec;
|
|
+ ts.tv_nsec = tp.tv_usec * 1000;
|
|
+ ts.tv_sec += 5;
|
|
+ rc = pthread_cond_timedwait(&nic->enable_done_cond,
|
|
+ &nic->nic_mutex, &ts);
|
|
+ }
|
|
+#endif
|
|
+ nic->flags &= ~NIC_ENABLED_PENDING;
|
|
+
|
|
+ if (rc == 0 && nic->flags & NIC_ENABLED) {
|
|
+ LOG_DEBUG(PFX "%s: device enabled", nic->log_name);
|
|
+ } else {
|
|
+ LOG_ERR(PFX "%s: waiting to finish nic_enable err:%s",
|
|
+ nic->log_name, strerror(rc));
|
|
+ /* Must clean up the ustack */
|
|
+ nic_interface_t *nic_iface = nic->nic_iface;
|
|
+ nic_interface_t *vlan_iface;
|
|
+ while (nic_iface != NULL) {
|
|
+ LOG_INFO(PFX "%s: resetting uIP stack",
|
|
+ nic->log_name);
|
|
+ uip_reset(&nic_iface->ustack);
|
|
+ vlan_iface = nic_iface->vlan_next;
|
|
+ while (vlan_iface != NULL) {
|
|
+ LOG_INFO(PFX "%s: resetting "
|
|
+ "vlan uIP stack",
|
|
+ nic->log_name);
|
|
+ uip_reset(&vlan_iface->ustack);
|
|
+ vlan_iface =
|
|
+ vlan_iface->vlan_next;
|
|
+ }
|
|
+ nic_iface = nic_iface->next;
|
|
+ }
|
|
+ }
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+
|
|
+ return rc;
|
|
+ } else {
|
|
+ LOG_INFO(PFX "%s: device already enabled: "
|
|
+ "flag: 0x%x state: 0x%x",
|
|
+ nic->log_name, nic->flags, nic->state);
|
|
+ return -EALREADY;
|
|
+ }
|
|
+}
|
|
+
|
|
+/**
|
|
+ * nic_disable() - Function used to disable the NIC
|
|
+ * @param nic - NIC to disble
|
|
+ * @return 0 on success, <0 on failure
|
|
+ */
|
|
+int nic_disable(nic_t * nic, int going_down)
|
|
+{
|
|
+ if (nic->state & (NIC_STARTED_RUNNING | NIC_RUNNING)) {
|
|
+ struct timespec ts;
|
|
+ struct timeval tp;
|
|
+ int rc;
|
|
+
|
|
+ /* Wait for the device to be disabled */
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+
|
|
+ nic->flags &= ~NIC_ENABLED;
|
|
+ nic->flags |= NIC_DISABLED;
|
|
+ nic->flags &= ~NIC_STARTED_RUNNING;
|
|
+ nic->state &= ~NIC_RUNNING;
|
|
+ nic->state |= NIC_STOPPED;
|
|
+
|
|
+ if (going_down)
|
|
+ nic->flags |= NIC_GOING_DOWN;
|
|
+
|
|
+ /* Convert from timeval to timespec */
|
|
+ rc = gettimeofday(&tp, NULL);
|
|
+ ts.tv_sec = tp.tv_sec;
|
|
+ ts.tv_nsec = tp.tv_usec * 1000;
|
|
+ ts.tv_sec += 5; /* TODO: hardcoded wait for 5 seconds */
|
|
+
|
|
+ /* Wait for the device to be disabled */
|
|
+ rc = pthread_cond_timedwait(&nic->disable_wait_cond,
|
|
+ &nic->nic_mutex, &ts);
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: device disabled", nic->log_name);
|
|
+
|
|
+ return 0;
|
|
+ } else {
|
|
+ LOG_WARN(PFX "%s: device already disabled: "
|
|
+ "flag: 0x%x state: 0x%x",
|
|
+ nic->log_name, nic->flags, nic->state);
|
|
+ return -EALREADY;
|
|
+ }
|
|
+}
|
|
+
|
|
+void nic_close_all()
|
|
+{
|
|
+ nic_t *nic;
|
|
+
|
|
+ pthread_mutex_lock(&nic_list_mutex);
|
|
+
|
|
+ /* Start the shutdown process */
|
|
+ nic = nic_list;
|
|
+ while (nic != NULL) {
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+ nic_close(nic, 1, FREE_ALL_STRINGS);
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+
|
|
+ nic = nic->next;
|
|
+ }
|
|
+ pthread_mutex_unlock(&nic_list_mutex);
|
|
+
|
|
+ LOG_INFO(PFX "All NICs closed");
|
|
+}
|
|
+
|
|
+void nic_remove_all()
|
|
+{
|
|
+ nic_t *nic, *nic_next;
|
|
+
|
|
+ pthread_mutex_lock(&nic_list_mutex);
|
|
+
|
|
+ /* Start the shutdown process */
|
|
+ nic = nic_list;
|
|
+ while (nic != NULL) {
|
|
+ nic_next = nic->next;
|
|
+ nic_close(nic, 1, FREE_ALL_STRINGS);
|
|
+ nic_remove(nic);
|
|
+ nic = nic_next;
|
|
+ }
|
|
+ pthread_mutex_unlock(&nic_list_mutex);
|
|
+
|
|
+ LOG_INFO(PFX "All NICs removed");
|
|
+}
|
|
+
|
|
+
|
|
+/******************************************************************************
|
|
+ * Routines to read initialized UIO values from sysfs
|
|
+ *****************************************************************************/
|
|
+/**
|
|
+ * determine_initial_uio_events() - This utility function will
|
|
+ * determine the number of uio events that have occured on the
|
|
+ * given device. This value is read from the UIO sysfs entry
|
|
+ * @param dev - device to read from
|
|
+ * @param num_of_event - number of UIO events
|
|
+ * @return 0 is success, <0 failure
|
|
+ */
|
|
+int detemine_initial_uio_events(nic_t * nic, uint32_t * num_of_events)
|
|
+{
|
|
+ char *raw = NULL;
|
|
+ uint32_t raw_size = 0;
|
|
+ ssize_t elements_read;
|
|
+ char temp_path[sizeof(cnic_sysfs_uio_event_template) + 8];
|
|
+ int rc;
|
|
+
|
|
+ /* Capture RX buffer size */
|
|
+ snprintf(temp_path, sizeof(temp_path),
|
|
+ cnic_sysfs_uio_event_template, nic->uio_minor);
|
|
+
|
|
+ rc = capture_file(&raw, &raw_size, temp_path);
|
|
+ if (rc != 0)
|
|
+ goto error;
|
|
+
|
|
+ elements_read = sscanf(raw, "%d", num_of_events);
|
|
+ if (elements_read != 1) {
|
|
+ LOG_ERR(PFX "%s: Couldn't parse UIO events size from %s",
|
|
+ nic->log_name, temp_path);
|
|
+ rc = -EIO;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ rc = 0;
|
|
+error:
|
|
+ if (raw != NULL)
|
|
+ free(raw);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * nic_set_all_nic_iface_mac_to_parent() - This is a utility function used to
|
|
+ * intialize all the MAC addresses of the network interfaces for a given
|
|
+ * CNIC UIO device
|
|
+ * @param dev - CNIC UIO device to initialize
|
|
+ */
|
|
+void nic_set_all_nic_iface_mac_to_parent(nic_t * nic)
|
|
+{
|
|
+ nic_interface_t *current, *vlan_current;
|
|
+
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+
|
|
+ current = nic->nic_iface;
|
|
+ while (current != NULL) {
|
|
+ /* Set the initial MAC address of this interface to the parent
|
|
+ * adapter */
|
|
+ memcpy(current->mac_addr, nic->mac_addr, 6);
|
|
+
|
|
+ vlan_current = current->vlan_next;
|
|
+ while (vlan_current != NULL) {
|
|
+ memcpy(vlan_current->mac_addr, nic->mac_addr, 6);
|
|
+ vlan_current = vlan_current->vlan_next;
|
|
+ }
|
|
+ current = current->next;
|
|
+ }
|
|
+
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+}
|
|
+
|
|
+/*******************************************************************************
|
|
+ * NIC packet handling functions
|
|
+ ******************************************************************************/
|
|
+/**
|
|
+ * nic_alloc_packet_buffer() - Used to allocate a packet buffer used to
|
|
+ * send a TX packet later
|
|
+ * @param nic - nic device to send the packet on
|
|
+ * @param nic_iface - nic interface to send out on
|
|
+ * @param buf - pointer to the buffer to send
|
|
+ * @param buf_size - size in bytes of the buffer to send
|
|
+ * @return pointer to the allocated packet buffer
|
|
+ * NULL if memory could not be allocated
|
|
+ */
|
|
+static packet_t *nic_alloc_packet_buffer(nic_t * nic,
|
|
+ nic_interface_t * nic_iface,
|
|
+ uint8_t * buf, size_t buf_size)
|
|
+{
|
|
+ packet_t *pkt;
|
|
+
|
|
+ pkt = malloc(sizeof(*pkt) + buf_size);
|
|
+ if (pkt == NULL) {
|
|
+ LOG_ERR(PFX "%s: Couldn't allocate space for packet buffer",
|
|
+ nic->log_name);
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ pkt->next = NULL;
|
|
+ pkt->nic = nic;
|
|
+ pkt->nic_iface = nic_iface;
|
|
+ pkt->buf_size = buf_size;
|
|
+ memcpy(pkt->buf, buf, buf_size);
|
|
+
|
|
+ return pkt;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * nic_queue_tx_packet() - Used to queue a TX packet buffer to send later
|
|
+ * @param nic - NIC device to send the packet on
|
|
+ * @param nic_iface - NIC interface to send on the packet on
|
|
+ * @param pkt - packet to queue
|
|
+ * @return 0 if successful or <0 if unsuccessful
|
|
+ */
|
|
+int nic_queue_tx_packet(nic_t * nic,
|
|
+ nic_interface_t * nic_iface, packet_t * pkt)
|
|
+{
|
|
+ packet_t *queued_pkt;
|
|
+
|
|
+ queued_pkt = nic_alloc_packet_buffer(nic, nic_iface,
|
|
+ pkt->buf, pkt->buf_size);
|
|
+ if (queued_pkt == NULL) {
|
|
+ LOG_ERR(PFX "%s: Couldn't allocate tx packet to queue",
|
|
+ nic->log_name);
|
|
+ return -ENOMEM;
|
|
+ }
|
|
+
|
|
+ if (nic->tx_packet_queue == NULL) {
|
|
+ nic->tx_packet_queue = queued_pkt;
|
|
+ } else {
|
|
+ packet_t *current_pkt;
|
|
+
|
|
+ current_pkt = nic->tx_packet_queue;
|
|
+ while (current_pkt->next != NULL)
|
|
+ current_pkt = current_pkt->next;
|
|
+
|
|
+ current_pkt->next = queued_pkt;
|
|
+ }
|
|
+
|
|
+ LOG_DEBUG(PFX "%s: tx packet queued", nic->log_name);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * nic_dequeue_tx_packet() - Used pop a TX packet buffer of the TX
|
|
+ * @param dev - cnic_uio device to send the packet on
|
|
+ * @param buf - pointer to the buffer to send
|
|
+ * @param buf_size - size in bytes of the buffer to send
|
|
+ * @return NULL if there are no more TX packet buffers to send
|
|
+ * pointer to the packet buffer which is detached from the device
|
|
+ */
|
|
+packet_t *nic_dequeue_tx_packet(nic_t * nic)
|
|
+{
|
|
+ packet_t *pkt;
|
|
+
|
|
+ pkt = nic->tx_packet_queue;
|
|
+
|
|
+ /* There is a packet buffer to send, time to detach it from the
|
|
+ * cnic_uio device */
|
|
+ if (pkt != NULL) {
|
|
+ nic->tx_packet_queue = pkt->next;
|
|
+ pkt->next = NULL;
|
|
+ }
|
|
+
|
|
+ return pkt;
|
|
+}
|
|
+
|
|
+void nic_fill_ethernet_header(nic_interface_t * nic_iface,
|
|
+ void *data,
|
|
+ void *src_addr, void *dest_addr,
|
|
+ int *pkt_size, void **start_addr,
|
|
+ uint16_t ether_type)
|
|
+{
|
|
+ struct ether_header *eth;
|
|
+ uint16_t *vlan_hdr;
|
|
+
|
|
+ eth = data;
|
|
+
|
|
+ memcpy(eth->ether_shost, src_addr, ETH_ALEN);
|
|
+ memcpy(eth->ether_dhost, dest_addr, ETH_ALEN);
|
|
+
|
|
+ vlan_hdr = (uint16_t *) (eth + 1);
|
|
+ eth->ether_type = htons(ether_type);
|
|
+
|
|
+ *start_addr = vlan_hdr;
|
|
+}
|
|
+
|
|
+/*******************************************************************************
|
|
+ * NIC interface management utility functions
|
|
+ ******************************************************************************/
|
|
+/**
|
|
+ * nic_find_nic_iface() - This function is used to find an interface from the
|
|
+ * NIC
|
|
+ * @param nic - NIC to look for network interfaces
|
|
+ * @param vlan_id - VLAN id to look for
|
|
+ * @return nic_iface - if found network interface with the given VLAN ID
|
|
+ * if not found a NULL is returned
|
|
+ */
|
|
+nic_interface_t *nic_find_nic_iface(nic_t * nic, uint16_t vlan_id)
|
|
+{
|
|
+ nic_interface_t *current;
|
|
+
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+
|
|
+ current = nic->nic_iface;
|
|
+ while (current != NULL) {
|
|
+ if (current->vlan_id == vlan_id) {
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+ return current;
|
|
+ }
|
|
+
|
|
+ current = current->next;
|
|
+ }
|
|
+
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+
|
|
+ return NULL;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * nic_find_nic_iface_protocol() - This function is used to find an interface
|
|
+ * from the NIC
|
|
+ * @param nic - NIC to look for network interfaces
|
|
+ * @param vlan_id - VLAN id to look for
|
|
+ * @param protocol - either AF_INET or AF_INET6
|
|
+ * @return nic_iface - if found network interface with the given VLAN ID
|
|
+ * if not found a NULL is returned
|
|
+ */
|
|
+nic_interface_t *nic_find_nic_iface_protocol(nic_t * nic,
|
|
+ uint16_t vlan_id,
|
|
+ uint16_t protocol)
|
|
+{
|
|
+ nic_interface_t *current;
|
|
+
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+
|
|
+ current = nic->nic_iface;
|
|
+ while (current != NULL) {
|
|
+ if ((current->vlan_id == vlan_id) &&
|
|
+ (current->protocol == protocol)) {
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+ return current;
|
|
+ }
|
|
+
|
|
+ current = current->next;
|
|
+ }
|
|
+
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+
|
|
+ return NULL;
|
|
+}
|
|
+
|
|
+void persist_all_nic_iface(nic_t * nic)
|
|
+{
|
|
+ nic_interface_t *current, *vlan_iface;
|
|
+
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+
|
|
+ current = nic->nic_iface;
|
|
+ while (current != NULL) {
|
|
+ current->flags |= NIC_IFACE_PERSIST;
|
|
+ vlan_iface = current->vlan_next;
|
|
+ while (vlan_iface != NULL) {
|
|
+ vlan_iface->flags |= NIC_IFACE_PERSIST;
|
|
+ vlan_iface = vlan_iface->vlan_next;
|
|
+ }
|
|
+ current = current->next;
|
|
+ }
|
|
+
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * nic_find_vlan_iface_protocol() - This function is used to find an interface
|
|
+ * from the NIC
|
|
+ * @param nic_iface - Base NIC to look for the vlan interfaces
|
|
+ * @param vlan_id - VLAN id to look for
|
|
+ * @param protocol - either AF_INET or AF_INET6
|
|
+ * @return nic_iface - if found network interface with the given VLAN ID
|
|
+ * if not found a NULL is returned
|
|
+ */
|
|
+nic_interface_t *nic_find_vlan_iface_protocol(nic_t *nic,
|
|
+ nic_interface_t *nic_iface,
|
|
+ uint16_t vlan_id,
|
|
+ uint16_t protocol)
|
|
+{
|
|
+ nic_interface_t *current;
|
|
+
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+
|
|
+ current = nic_iface->vlan_next;
|
|
+ while (current != NULL) {
|
|
+ if ((current->vlan_id == vlan_id) &&
|
|
+ (current->protocol == protocol)) {
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+ return current;
|
|
+ }
|
|
+ current = current->vlan_next;
|
|
+ }
|
|
+
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+ return NULL;
|
|
+}
|
|
+
|
|
+void set_nic_iface(nic_t *nic, nic_interface_t *nic_iface)
|
|
+{
|
|
+ nic_interface_t *current, *prev;
|
|
+
|
|
+ pthread_mutex_lock(&nic->nic_mutex);
|
|
+
|
|
+ if (nic->nic_iface == nic_iface)
|
|
+ goto done;
|
|
+
|
|
+ prev = nic->nic_iface;
|
|
+ current = nic->nic_iface->next;
|
|
+ while (current != NULL) {
|
|
+ if (current == nic_iface) {
|
|
+ prev->next = current->next;
|
|
+ current->next = nic->nic_iface;
|
|
+ nic->nic_iface = current;
|
|
+ goto done;
|
|
+ }
|
|
+ prev = current;
|
|
+ current = current->next;
|
|
+ }
|
|
+done:
|
|
+ pthread_mutex_unlock(&nic->nic_mutex);
|
|
+}
|
|
+/*******************************************************************************
|
|
+ * Packet management utility functions
|
|
+ ******************************************************************************/
|
|
+/**
|
|
+ * get_next_packet_in_queue() - This function will return the next packet in
|
|
+ * the queue
|
|
+ * @param queue - the queue to pull the packet from
|
|
+ * @return the packet in the queue
|
|
+ */
|
|
+static packet_t *get_next_packet_in_queue(packet_t ** queue)
|
|
+{
|
|
+ packet_t *pkt;
|
|
+
|
|
+ if (*queue == NULL)
|
|
+ return NULL;
|
|
+
|
|
+ pkt = *queue;
|
|
+ *queue = pkt->next;
|
|
+
|
|
+ return pkt;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * get_next_tx_packet() - This function will return the next packet in
|
|
+ * the TX queue
|
|
+ * @param nic - NIC to pull the TX packet from
|
|
+ * @return the packet in hte queue
|
|
+ */
|
|
+packet_t *get_next_tx_packet(nic_t * nic)
|
|
+{
|
|
+ return get_next_packet_in_queue(&nic->tx_packet_queue);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * get_next_free_packet() - This function will return the next packet in
|
|
+ * the free queue
|
|
+ * @param nic - NIC to pull the RX packet from
|
|
+ * @return the packet in hte queue
|
|
+ */
|
|
+packet_t *get_next_free_packet(nic_t * nic)
|
|
+{
|
|
+ packet_t *pkt;
|
|
+ pthread_mutex_lock(&nic->free_packet_queue_mutex);
|
|
+ pkt = get_next_packet_in_queue(&nic->free_packet_queue);
|
|
+ pthread_mutex_unlock(&nic->free_packet_queue_mutex);
|
|
+
|
|
+ if (pkt != NULL)
|
|
+ reset_packet(pkt);
|
|
+
|
|
+ return pkt;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * put_packet_in_queue() - This function will place the packet in the given
|
|
+ * queue
|
|
+ * @param pkt - the packet to place
|
|
+ * @param queue - the queue to place the packet
|
|
+ * @return the packet in the queue
|
|
+ */
|
|
+static void put_packet_in_queue(packet_t * pkt, packet_t ** queue)
|
|
+{
|
|
+ if (*queue == NULL)
|
|
+ *queue = pkt;
|
|
+ else {
|
|
+ pkt->next = *queue;
|
|
+ *queue = pkt;
|
|
+ }
|
|
+}
|
|
+
|
|
+/**
|
|
+ * put_packet_in_tx_queue() - This function will place the packet in
|
|
+ * the TX queue
|
|
+ * @param pkt - packet to place
|
|
+ * @param nic - NIC to pull the TX packet from
|
|
+ * @return the packet in hte queue
|
|
+ */
|
|
+void put_packet_in_tx_queue(packet_t * pkt, nic_t * nic)
|
|
+{
|
|
+ return put_packet_in_queue(pkt, &nic->tx_packet_queue);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * put_packet_in_free_queue() - This function will place the packet in
|
|
+ * the RX queue
|
|
+ * @param pkt - packet to place
|
|
+ * @param nic - NIC to pull the RX packet from
|
|
+ * @return the packet in hte queue
|
|
+ */
|
|
+void put_packet_in_free_queue(packet_t * pkt, nic_t * nic)
|
|
+{
|
|
+ pthread_mutex_lock(&nic->free_packet_queue_mutex);
|
|
+ put_packet_in_queue(pkt, &nic->free_packet_queue);
|
|
+ pthread_mutex_unlock(&nic->free_packet_queue_mutex);
|
|
+}
|
|
+
|
|
+uint32_t calculate_default_netmask(uint32_t ip_addr)
|
|
+{
|
|
+ uint32_t netmask;
|
|
+
|
|
+ if (IN_CLASSA(ntohl(ip_addr)))
|
|
+ netmask = htonl(IN_CLASSA_NET);
|
|
+ else if (IN_CLASSB(ntohl(ip_addr)))
|
|
+ netmask = htonl(IN_CLASSB_NET);
|
|
+ else if (IN_CLASSC(ntohl(ip_addr)))
|
|
+ netmask = htonl(IN_CLASSC_NET);
|
|
+ else {
|
|
+ LOG_ERR("Unable to guess netmask for address %x\n", &ip_addr);
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ return netmask;
|
|
+}
|
|
+
|
|
+void dump_packet_to_log(struct nic_interface *iface,
|
|
+ uint8_t * buf, uint16_t buf_len)
|
|
+{
|
|
+
|
|
+ FILE *file;
|
|
+ char str[80];
|
|
+ int i, count;
|
|
+
|
|
+ file = fmemopen(str, sizeof(str), "w+");
|
|
+ if (file == NULL) {
|
|
+ LOG_ERR(PFX "Could not create logging file stream for packet "
|
|
+ "logging: [%d: %s]", errno, strerror(errno));
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ LOG_PACKET(PFX "%s: Start packet dump len: %d", iface->parent->log_name,
|
|
+ buf_len);
|
|
+
|
|
+ for (i = 0; i < buf_len; i++) {
|
|
+ rewind(file);
|
|
+ fprintf(file, "%03x: ", i);
|
|
+
|
|
+ for (count = 0; (count < 8) && i < buf_len; count++, i++) {
|
|
+ fprintf(file, " %02x", buf[i]);
|
|
+ }
|
|
+ fflush(file);
|
|
+
|
|
+ LOG_PACKET(PFX "%s: %s", iface->parent->log_name, str);
|
|
+ }
|
|
+
|
|
+ LOG_PACKET(PFX "%s: end packet dump", iface->parent->log_name);
|
|
+
|
|
+ fclose(file);
|
|
+}
|
|
+
|
|
+/*******************************************************************************
|
|
+ * File Management
|
|
+ ******************************************************************************/
|
|
+ /**
|
|
+ * determine_file_size_read() - when fstat doesn't work on filepath
|
|
+ * within the /proc filesytem, we need to read/count the size of the file
|
|
+ * until we hit a EOF
|
|
+ * @parm filepath - path of the file in which to determine the filesize in
|
|
+ * bytes
|
|
+ * @return file size in bytes, <0 on failure
|
|
+ */
|
|
+int determine_file_size_read(const char *filepath)
|
|
+{
|
|
+ size_t total_size = 0;
|
|
+ ssize_t size = 1;
|
|
+ int fd;
|
|
+ char buf[1024];
|
|
+
|
|
+ fd = open(filepath, O_RDONLY);
|
|
+ if (fd == -1) {
|
|
+ LOG_ERR("Could not open file: %s [%s]",
|
|
+ filepath, strerror(errno));
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ while (size > 0) {
|
|
+ size = read(fd, buf, sizeof(buf));
|
|
+
|
|
+ switch (size) {
|
|
+ case 0:
|
|
+ break;
|
|
+ case -1:
|
|
+ LOG_ERR("Error reading file: %s [%s]",
|
|
+ filepath, strerror(errno));
|
|
+ total_size = -1;
|
|
+ break;
|
|
+ default:
|
|
+ total_size += size;
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ close(fd);
|
|
+
|
|
+ return total_size;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * capture_file() - Used to capture a file into a buffer
|
|
+ * @param raw - This pointer will be set to the buffer which will hold the
|
|
+ * file contents
|
|
+ * @param raw_size - This is the size of the buffer returned
|
|
+ * @param path - The file path to capture the data from
|
|
+ * @return 0 is returned on success, <0 is returned on failure
|
|
+ */
|
|
+int capture_file(char **raw, uint32_t * raw_size, const char *path)
|
|
+{
|
|
+ FILE *fp;
|
|
+ size_t read_size;
|
|
+ int rc = 0;
|
|
+ int file_size;
|
|
+
|
|
+ file_size = determine_file_size_read(path);
|
|
+ if (file_size < 0) {
|
|
+ LOG_ERR("Could not determine size %s", path);
|
|
+ return -EIO;
|
|
+ }
|
|
+
|
|
+ fp = fopen(path, "r");
|
|
+ if (fp == NULL) {
|
|
+ LOG_ERR("Could not open path %s [%s]", path, strerror(errno));
|
|
+ return -EIO;
|
|
+ }
|
|
+
|
|
+ *raw = malloc(file_size);
|
|
+ if (*raw == NULL) {
|
|
+ LOG_ERR("Could not malloc space for capture %s", path);
|
|
+ rc = -ENOMEM;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ read_size = fread(*raw, file_size, 1, fp);
|
|
+ if (read_size < 0) {
|
|
+ LOG_ERR("Could not read capture, path: %s len: %d [%s]",
|
|
+ path, file_size, strerror(ferror(fp)));
|
|
+ free(*raw);
|
|
+ *raw = NULL;
|
|
+ rc = errno;
|
|
+ } else
|
|
+ *raw_size = file_size;
|
|
+
|
|
+error:
|
|
+ fclose(fp);
|
|
+
|
|
+ LOG_INFO("Done capturing %s", path);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic_utils.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/nic_utils.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic_utils.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/nic_utils.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,99 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * nic_util.h - NIC utility functions
|
|
+ *
|
|
+ */
|
|
+#ifndef __NIC_UTILS_H__
|
|
+#define __NIC_UTILS_H__
|
|
+
|
|
+#include "nic.h"
|
|
+
|
|
+/******************************************************************************
|
|
+ * Function Prototype
|
|
+ ******************************************************************************/
|
|
+int manually_trigger_uio_event(nic_t * nic, int uio_minor);
|
|
+
|
|
+int nic_discover_iscsi_hosts();
|
|
+
|
|
+int enable_mutlicast(nic_t * nic);
|
|
+int disable_mutlicast(nic_t * nic);
|
|
+
|
|
+int from_netdev_name_find_nic(char *interface_name, nic_t ** nic);
|
|
+
|
|
+int from_host_no_find_associated_eth_device(int host_no, nic_t ** nic);
|
|
+
|
|
+int from_phys_name_find_assoicated_uio_device(nic_t * nic);
|
|
+
|
|
+int nic_queue_tx_packet(nic_t * nic,
|
|
+ nic_interface_t * nic_iface, packet_t * pkt);
|
|
+
|
|
+packet_t *nic_dequeue_tx_packet(nic_t * nic);
|
|
+
|
|
+void nic_fill_ethernet_header(nic_interface_t * nic_iface,
|
|
+ void *data,
|
|
+ void *src_addr, void *dest_addr,
|
|
+ int *pkt_size, void **start_addr,
|
|
+ uint16_t ether_type);
|
|
+
|
|
+nic_interface_t *nic_find_nic_iface(nic_t * nic, uint16_t vlan_id);
|
|
+void set_nic_iface(nic_t *nic, nic_interface_t *nic_iface);
|
|
+
|
|
+void persist_all_nic_iface(nic_t * nic);
|
|
+
|
|
+int add_vlan_interfaces(nic_t * nic);
|
|
+
|
|
+int nic_verify_uio_sysfs_name(nic_t * nic);
|
|
+void cnic_get_sysfs_pci_resource_path(nic_t *nic, int resc_no,
|
|
+ char *sys_path, size_t size);
|
|
+void nic_close_all();
|
|
+void nic_remove_all();
|
|
+
|
|
+int detemine_initial_uio_events(nic_t * nic, uint32_t * num_of_events);
|
|
+
|
|
+uint32_t calculate_default_netmask(uint32_t ip_addr);
|
|
+
|
|
+void prepare_nic_thread(nic_t * nic);
|
|
+void prepare_library(nic_t * nic);
|
|
+
|
|
+int nic_enable(nic_t * nic);
|
|
+int nic_disable(nic_t * nic, int going_down);
|
|
+
|
|
+void dump_packet_to_log(struct nic_interface *iface,
|
|
+ uint8_t * buf, uint16_t buf_len);
|
|
+
|
|
+int determine_file_size_read(const char *filepath);
|
|
+int capture_file(char **raw, uint32_t * raw_size, const char *path);
|
|
+
|
|
+#endif /* __NIC_UTILS_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic_vlan.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/nic_vlan.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic_vlan.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/nic_vlan.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,339 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * nic_vlan.c - uIP user space stack VLAN utilities
|
|
+ *
|
|
+ */
|
|
+#define _GNU_SOURCE
|
|
+#include <errno.h>
|
|
+#include <fcntl.h>
|
|
+#include <pthread.h>
|
|
+#include <string.h>
|
|
+#include <stdio.h>
|
|
+#include <stdlib.h>
|
|
+#include <unistd.h>
|
|
+#include <sys/types.h>
|
|
+#include <sys/stat.h>
|
|
+#include <sys/stat.h>
|
|
+
|
|
+#include <arpa/inet.h>
|
|
+#include <sys/types.h>
|
|
+#include <sys/socket.h>
|
|
+#include <sys/un.h>
|
|
+
|
|
+#include <linux/if.h>
|
|
+
|
|
+#include "logger.h"
|
|
+#include "nic.h"
|
|
+#include "nic_utils.h"
|
|
+#include "nic_vlan.h"
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Constants
|
|
+ ******************************************************************************/
|
|
+#define PFX "vlan"
|
|
+
|
|
+static const char proc_vlan_config_path[] = "/proc/net/vlan/config";
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Resolving Found VLAN's for CNIC
|
|
+ ******************************************************************************/
|
|
+int init_vlan_found_handle(struct vlan_found_handle *found_handle,
|
|
+ struct vlan_handle *handle)
|
|
+{
|
|
+ memset(found_handle, 0, sizeof(*found_handle));
|
|
+
|
|
+ found_handle->entries = malloc(found_handle->num_of_entries *
|
|
+ sizeof(struct vlan_found_entry));
|
|
+ if (found_handle->entries == NULL) {
|
|
+ LOG_ERR("Could not allocate space for found entries");
|
|
+ return -ENOMEM;
|
|
+ }
|
|
+
|
|
+ found_handle->handle = handle;
|
|
+ found_handle->num_of_entries = handle->num_of_entries;
|
|
+
|
|
+ memset(found_handle->entries, 0, found_handle->num_of_entries *
|
|
+ sizeof(struct vlan_found_entry));
|
|
+
|
|
+ handle->outstanding_found_handles++;
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+void release_vlan_found_handle(struct vlan_found_handle *found_handle)
|
|
+{
|
|
+ if (found_handle->entries != NULL) {
|
|
+ free(found_handle->entries);
|
|
+ found_handle->entries = NULL;
|
|
+ }
|
|
+
|
|
+ found_handle->num_of_entries = 0;
|
|
+
|
|
+ found_handle->handle->outstanding_found_handles--;
|
|
+
|
|
+ found_handle->handle = NULL;
|
|
+
|
|
+}
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Resolving VLAN's for CNIC
|
|
+ ******************************************************************************/
|
|
+/**
|
|
+ * init_vlan_handle() - Used to initialize struct ipv4_route_handle so
|
|
+ * that is can be used
|
|
+ * @param handle - Pointer to struct ipv4_route_handle to initialize
|
|
+ * @return 0 on success and <0 on failure
|
|
+ */
|
|
+void init_vlan_table(struct vlan_handle *handle)
|
|
+{
|
|
+ handle->entries = NULL;
|
|
+ handle->num_of_entries = 0;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * parse_vlan_table() - Given the raw dump of a Linux vlan table, this
|
|
+ * function will parse the into entries held by
|
|
+ * struct vlan_handle
|
|
+ * @param handle - struct vlan_handle used to hold the parsed contents
|
|
+ * @param raw - buffer to parse the contents from
|
|
+ * @param raw_size - size of the buffer in bytes
|
|
+ * @return 0 on success, <0 on failure
|
|
+ */
|
|
+int parse_vlan_table(struct vlan_handle *handle, char *raw, uint32_t raw_size)
|
|
+{
|
|
+ FILE *fp;
|
|
+ int i;
|
|
+ char *token;
|
|
+ size_t size;
|
|
+ int rc;
|
|
+
|
|
+ token = raw;
|
|
+
|
|
+ /* determine the number of entries */
|
|
+ while (*token != '\0') {
|
|
+ if (*token == '\n')
|
|
+ handle->num_of_entries++;
|
|
+
|
|
+ token++;
|
|
+ }
|
|
+
|
|
+ /* There are 2 lines which describe the vlan table
|
|
+ * This lines need to be skipped with counting */
|
|
+ handle->num_of_entries -= 2;
|
|
+
|
|
+ LOG_INFO("Number of vlan entries: %d", handle->num_of_entries);
|
|
+
|
|
+ size = handle->num_of_entries * sizeof(struct vlan_entry);
|
|
+ handle->entries = malloc(size);
|
|
+ if (handle->entries == NULL) {
|
|
+ LOG_ERR
|
|
+ ("Couldn't malloc space to parse vlan table. entires: %d "
|
|
+ "size: %d",
|
|
+ handle->num_of_entries, size);
|
|
+ return -ENOMEM;
|
|
+ }
|
|
+
|
|
+ fp = fmemopen(raw, raw_size, "r");
|
|
+ if (fp == NULL) {
|
|
+ LOG_ERR("Could not open raw dump of vlan table");
|
|
+ rc = errno;
|
|
+ goto fmemopen_error;
|
|
+ }
|
|
+
|
|
+ if (fscanf(fp, "%*[^\n]\n") < 0) { /* Skip the first line. */
|
|
+ LOG_ERR("Empty or missing line, or read error");
|
|
+ rc = -EIO;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ if (fscanf(fp, "%*[^\n]\n") < 0) { /* Skip the second line. */
|
|
+ LOG_ERR("Empty or missing line, or read error");
|
|
+ rc = -EIO;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ i = 0;
|
|
+ /* Time to parse the routing table */
|
|
+ while (1) {
|
|
+ struct vlan_entry *entry = &handle->entries[i];
|
|
+ int r;
|
|
+
|
|
+ r = fscanf(fp, "%15s |%hu |%15s",
|
|
+ entry->vlan_iface_name,
|
|
+ &entry->vlan_id, entry->phy_iface_name);
|
|
+ if (r != 3) {
|
|
+ if (feof(fp)) { /* EOF with no (nonspace) chars read. */
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ LOG_WARN("Parsing error: parsed %d elements", r);
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ i++;
|
|
+
|
|
+ LOG_DEBUG("Vlan %d: vlan iface:%s vlan id:%d phys iface:%s",
|
|
+ i,
|
|
+ entry->vlan_iface_name,
|
|
+ entry->vlan_id, entry->phy_iface_name);
|
|
+ }
|
|
+
|
|
+ fclose(fp);
|
|
+
|
|
+ return 0;
|
|
+
|
|
+ error:
|
|
+ fclose(fp);
|
|
+
|
|
+ fmemopen_error:
|
|
+ if (handle->entries != NULL)
|
|
+ free(handle->entries);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * capture_vlan_table() - This function will snapshot the Linux vlan
|
|
+ * routing table for further processing
|
|
+ * @param handle - struct vlan_handle used to hold the routing context
|
|
+ * @return 0 on success, <0 on failure
|
|
+ */
|
|
+int capture_vlan_table(struct vlan_handle *handle)
|
|
+{
|
|
+ char *raw = NULL;
|
|
+ uint32_t raw_size = 0;
|
|
+ int rc;
|
|
+
|
|
+ rc = capture_file(&raw, &raw_size, proc_vlan_config_path);
|
|
+ if (rc != 0) {
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ rc = parse_vlan_table(handle, raw, raw_size);
|
|
+ if (rc != 0) {
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ error:
|
|
+ if (raw != NULL)
|
|
+ free(raw);
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * release_vlan_table() - This function will free all resources used by
|
|
+ * the handle
|
|
+ * @param handle - struct vlan_handle used to hold the routing context
|
|
+ */
|
|
+void release_vlan_table(struct vlan_handle *handle)
|
|
+{
|
|
+ if (handle->entries != NULL) {
|
|
+ free(handle->entries);
|
|
+ handle->entries = NULL;
|
|
+ }
|
|
+
|
|
+ handle->num_of_entries = 0;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * find_phy_using_vlan_interface() - Given the interface name determine VLAN
|
|
+ * tag ID to match either the physical or VLAN interface name
|
|
+ * @param vlan_iface_name - VLAN interface used to find the physical
|
|
+ * interface
|
|
+ * @param phy_iface_name - returned value is the physical interface name
|
|
+ * @param vlan_id - returned value is the VLAN id
|
|
+ * @return 1 is returned if the interface is a VLAN, 0 if the interface is not
|
|
+ * <0 is returned if there is an error
|
|
+ */
|
|
+int find_phy_using_vlan_interface(struct vlan_handle *handle,
|
|
+ char *vlan_iface_name,
|
|
+ char **phy_iface_name, uint16_t * vlan_id)
|
|
+{
|
|
+ int i, rc = 0;
|
|
+
|
|
+ for (i = 0; i < handle->num_of_entries; i++) {
|
|
+ struct vlan_entry *entry = &handle->entries[i];
|
|
+
|
|
+ /* Compare VLAN interface names to find a match */
|
|
+ if (strcmp(entry->vlan_iface_name, vlan_iface_name) == 0) {
|
|
+ *phy_iface_name = entry->phy_iface_name;
|
|
+ *vlan_id = entry->vlan_id;
|
|
+ rc = 1;
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return rc;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * find_vlans_using_phy_interface() - Given the physical interface name this
|
|
+ * function will determine the VLAN interface name and VLAN ID
|
|
+ * @param iface_name - physical interface used to find the vlan interface
|
|
+ * @param vlan_iface_name - returned value is the VLAN interface name
|
|
+ * @return The number of VLAN interfaces found
|
|
+ */
|
|
+int find_vlans_using_phy_interface(struct vlan_handle *handle,
|
|
+ struct vlan_found_handle *found_handle,
|
|
+ char *phy_iface_name)
|
|
+{
|
|
+ int i, num_found = 0;
|
|
+
|
|
+ for (i = 0; i < handle->num_of_entries; i++) {
|
|
+ struct vlan_entry *entry = &handle->entries[i];
|
|
+
|
|
+ /* Compare interface names to find a match */
|
|
+ if (strcmp(entry->phy_iface_name, phy_iface_name) == 0) {
|
|
+ found_handle->entries[i].found = VLAN_ENTRY_FOUND;
|
|
+ num_found++;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return num_found;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * valid_vlan() - determine if the vlan value which is passed is valid
|
|
+ * @param vlan - vlan value to test
|
|
+ * @return 0 - not valid, 1 - valid
|
|
+ */
|
|
+int valid_vlan(short int vlan)
|
|
+{
|
|
+ if (vlan > 1 && vlan < 4095)
|
|
+ return 1;
|
|
+
|
|
+ return 0;
|
|
+}
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic_vlan.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/nic_vlan.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/nic_vlan.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/nic_vlan.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,88 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * nic_vlan.h - uIP user space stack VLAN utilities
|
|
+ *
|
|
+ */
|
|
+#ifndef __NIC_VLAN_H__
|
|
+#define __NIC_VLAN_H__
|
|
+
|
|
+#include <sys/types.h>
|
|
+
|
|
+/* Used to hold entries in the vlan table */
|
|
+struct vlan_entry {
|
|
+ char vlan_iface_name[16];
|
|
+ char phy_iface_name[16];
|
|
+ uint16_t vlan_id;
|
|
+};
|
|
+
|
|
+struct vlan_handle {
|
|
+ struct vlan_entry *entries;
|
|
+ uint32_t num_of_entries;
|
|
+
|
|
+ uint32_t outstanding_found_handles;
|
|
+};
|
|
+
|
|
+struct vlan_found_entry {
|
|
+#define VLAN_ENTRY_FOUND 1
|
|
+#define VLAN_ENTRY_NOT_FOUND 0
|
|
+ uint8_t found;
|
|
+};
|
|
+
|
|
+struct vlan_found_handle {
|
|
+ struct vlan_handle *handle;
|
|
+ uint32_t num_of_entries;
|
|
+ struct vlan_found_entry *entries;
|
|
+};
|
|
+
|
|
+/*******************************************************************************
|
|
+ * Function Prototypes
|
|
+ ******************************************************************************/
|
|
+void init_vlan_table(struct vlan_handle *handle);
|
|
+int capture_vlan_table(struct vlan_handle *handle);
|
|
+void release_vlan_table(struct vlan_handle *handle);
|
|
+
|
|
+int find_phy_using_vlan_interface(struct vlan_handle *handle,
|
|
+ char *vlan_iface_name,
|
|
+ char **phy_iface_name, uint16_t * vlan_id);
|
|
+int find_vlans_using_phy_interface(struct vlan_handle *handle,
|
|
+ struct vlan_found_handle *found_handle,
|
|
+ char *phy_iface_name);
|
|
+
|
|
+int init_vlan_found_handle(struct vlan_found_handle *found_handle,
|
|
+ struct vlan_handle *handle);
|
|
+void release_vlan_found_handle(struct vlan_found_handle *found_handle);
|
|
+
|
|
+int valid_vlan(short int vlan);
|
|
+#endif /* __NIC_VLAN_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/options.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/options.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/options.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/options.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,116 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * options.h - CNIC UIO uIP user space stack
|
|
+ *
|
|
+ */
|
|
+#ifndef __OPTIONS_H__
|
|
+#define __OPTIONS_H__
|
|
+
|
|
+#include <byteswap.h>
|
|
+#include <time.h>
|
|
+#include <sys/types.h>
|
|
+
|
|
+/******************************************************************************
|
|
+ * Constants which are tuned at compile time by the user
|
|
+ *****************************************************************************/
|
|
+
|
|
+/**
|
|
+ * MAX_COUNT_NIC_NL_RESP - This is the maximum number of polls uIP will
|
|
+ * try for a kernel response after a PATH_REQ
|
|
+ */
|
|
+#define MAX_COUNT_NIC_NL_RESP 128
|
|
+
|
|
+/**
|
|
+ * NLM_BUF_DEFAULT_MAX - This is the buffer size allocated for the send/receive
|
|
+ * buffers used by the uIP Netlink subsystem. This
|
|
+ * value is in bytes.
|
|
+ */
|
|
+#define NLM_BUF_DEFAULT_MAX 8192 /* bytes */
|
|
+
|
|
+/******************************************************************************
|
|
+ * Non adjustable constants
|
|
+ *****************************************************************************/
|
|
+#ifndef ETHERTYPE_IP
|
|
+#define ETHERTYPE_IP 0x0800 /* IP */
|
|
+#endif /* ETHERTYPE_IP */
|
|
+
|
|
+#ifndef ETHERTYPE_IPV6
|
|
+#define ETHERTYPE_IPV6 0x86dd /* IP protocol version 6 */
|
|
+#endif /* ETHERTYPE_IPV6 */
|
|
+
|
|
+#ifndef ETHERTYPE_ARP
|
|
+#define ETHERTYPE_ARP 0x0806 /* Address resolution */
|
|
+#endif /* ETHERTYPE_ARP */
|
|
+
|
|
+#ifndef ETHERTYPE_VLAN
|
|
+#define ETHERTYPE_VLAN 0x8100 /* IEEE 802.1Q VLAN tagging */
|
|
+#endif /* ETHERTYPE_VLAN */
|
|
+
|
|
+#define APP_NAME "iscsiuio"
|
|
+/* BUILD_DATE is automatically generated from the Makefile */
|
|
+
|
|
+#define DEBUG_OFF 0x1
|
|
+#define DEBUG_ON 0x2
|
|
+
|
|
+#define INVALID_FD -1
|
|
+#define INVALID_THREAD -1
|
|
+
|
|
+struct options {
|
|
+ char debug;
|
|
+
|
|
+ /* Time the userspace daemon was started */
|
|
+ time_t start_time;
|
|
+};
|
|
+
|
|
+extern int event_loop_stop;
|
|
+extern struct options opt;
|
|
+
|
|
+#ifdef WORDS_BIGENDIAN
|
|
+#define ntohll(x) (x)
|
|
+#define htonll(x) (x)
|
|
+#else
|
|
+#define ntohll(x) bswap_64(x)
|
|
+#define htonll(x) bswap_64(x)
|
|
+#endif
|
|
+
|
|
+# define likely(x) __builtin_expect(!!(x), 1)
|
|
+# define unlikely(x) __builtin_expect(!!(x), 0)
|
|
+
|
|
+/* taken from Linux kernel, include/linux/compiler-gcc.h */
|
|
+/* Optimization barrier */
|
|
+/* The "volatile" is due to gcc bugs */
|
|
+#define barrier() __asm__ __volatile__("": : :"memory")
|
|
+
|
|
+#endif
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/packet.c open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/packet.c
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/packet.c 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/packet.c 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,146 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * packet.c - packet management
|
|
+ *
|
|
+ */
|
|
+#include <errno.h>
|
|
+#include <stdio.h>
|
|
+
|
|
+#include "logger.h"
|
|
+#include "packet.h"
|
|
+#include "nic.h"
|
|
+
|
|
+/**
|
|
+ * alloc_packet() - Function used to allocate memory for a packet
|
|
+ * @param max_buf_size - max packet size
|
|
+ * @param priv_size - size of the assoicated private data
|
|
+ * @return NULL if failed, on success return a pointer to the packet
|
|
+ */
|
|
+struct packet *alloc_packet(size_t max_buf_size, size_t priv_size)
|
|
+{
|
|
+ struct packet *pkt;
|
|
+ void *priv;
|
|
+
|
|
+ pkt = malloc(max_buf_size + sizeof(struct packet));
|
|
+ if (pkt == NULL) {
|
|
+ LOG_ERR("Could not allocate any memory for packet");
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ priv = malloc(priv_size);
|
|
+ if (priv == NULL) {
|
|
+ LOG_ERR("Could not allocate any memory for private structure");
|
|
+ goto free_pkt;
|
|
+ }
|
|
+
|
|
+ pkt->max_buf_size = max_buf_size;
|
|
+ pkt->priv = priv;
|
|
+
|
|
+ return pkt;
|
|
+
|
|
+free_pkt:
|
|
+ free(pkt);
|
|
+
|
|
+ return NULL;
|
|
+}
|
|
+
|
|
+void free_packet(struct packet *pkt)
|
|
+{
|
|
+ if (pkt->priv != NULL)
|
|
+ free(pkt->priv);
|
|
+
|
|
+ free(pkt);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * reset_packet() - This will reset the packet fields to default values
|
|
+ * @param pkt - the packet to reset
|
|
+ */
|
|
+void reset_packet(packet_t * pkt)
|
|
+{
|
|
+ pkt->next = NULL;
|
|
+
|
|
+ pkt->flags = 0;
|
|
+ pkt->vlan_tag = 0;
|
|
+
|
|
+ pkt->buf_size = 0;
|
|
+
|
|
+ pkt->data_link_layer = NULL;
|
|
+ pkt->network_layer = NULL;
|
|
+}
|
|
+
|
|
+int alloc_free_queue(nic_t * nic, size_t num_of_packets)
|
|
+{
|
|
+ int rc, i;
|
|
+
|
|
+ pthread_mutex_lock(&nic->free_packet_queue_mutex);
|
|
+ for (i = 0; i < num_of_packets; i++) {
|
|
+ packet_t *pkt;
|
|
+
|
|
+ pkt = alloc_packet(1500, 1500);
|
|
+ if (pkt == NULL) {
|
|
+ rc = i;
|
|
+ goto done;
|
|
+ }
|
|
+
|
|
+ reset_packet(pkt);
|
|
+
|
|
+ pkt->next = nic->free_packet_queue;
|
|
+ nic->free_packet_queue = pkt;
|
|
+ }
|
|
+
|
|
+ rc = num_of_packets;
|
|
+
|
|
+done:
|
|
+ pthread_mutex_unlock(&nic->free_packet_queue_mutex);
|
|
+
|
|
+ return i;
|
|
+}
|
|
+
|
|
+void free_free_queue(nic_t *nic)
|
|
+{
|
|
+ packet_t *pkt, *pkt_next;
|
|
+
|
|
+ pthread_mutex_lock(&nic->free_packet_queue_mutex);
|
|
+ pkt = nic->free_packet_queue;
|
|
+ while (pkt) {
|
|
+ pkt_next = pkt->next;
|
|
+ free_packet(pkt);
|
|
+ pkt = pkt_next;
|
|
+ }
|
|
+ nic->free_packet_queue = NULL;
|
|
+ pthread_mutex_unlock(&nic->free_packet_queue_mutex);
|
|
+}
|
|
+
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/packet.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/packet.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/packet.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/packet.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,75 @@
|
|
+/*
|
|
+ * Copyright (c) 2009-2011, Broadcom Corporation
|
|
+ *
|
|
+ * Written by: Benjamin Li (benli@broadcom.com)
|
|
+ *
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. All advertising materials mentioning features or use of this software
|
|
+ * must display the following acknowledgement:
|
|
+ * This product includes software developed by Adam Dunkels.
|
|
+ * 4. The name of the author may not be used to endorse or promote
|
|
+ * products derived from this software without specific prior
|
|
+ * written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ *
|
|
+ * packet.h - packet definitions
|
|
+ *
|
|
+ */
|
|
+#include <errno.h>
|
|
+
|
|
+#ifndef __PACKET_H__
|
|
+#define __PACKET_H__
|
|
+
|
|
+#include "nic.h"
|
|
+
|
|
+struct nic;
|
|
+struct nic_interface;
|
|
+
|
|
+typedef struct packet {
|
|
+ struct packet *next;
|
|
+
|
|
+ uint32_t flags;
|
|
+#define VLAN_TAGGED 0x0001
|
|
+ uint16_t vlan_tag;
|
|
+
|
|
+ size_t max_buf_size;
|
|
+ size_t buf_size;
|
|
+
|
|
+ uint8_t *data_link_layer;
|
|
+ uint8_t *network_layer;
|
|
+
|
|
+ struct nic *nic;
|
|
+ struct nic_interface *nic_iface;
|
|
+
|
|
+ void *priv;
|
|
+ uint8_t buf[];
|
|
+} packet_t;
|
|
+
|
|
+/******************************************************************************
|
|
+ * Packet Function Declarations
|
|
+ *****************************************************************************/
|
|
+int alloc_free_queue(struct nic *, size_t num_of_packets);
|
|
+void free_free_queue(struct nic *nic);
|
|
+void reset_packet(packet_t * pkt);
|
|
+
|
|
+#endif /* __PACKET_H__ */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/uip-conf.h open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/uip-conf.h
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/src/unix/uip-conf.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/src/unix/uip-conf.h 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1,161 @@
|
|
+/**
|
|
+ * \addtogroup uipopt
|
|
+ * @{
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \name Project-specific configuration options
|
|
+ * @{
|
|
+ *
|
|
+ * uIP has a number of configuration options that can be overridden
|
|
+ * for each project. These are kept in a project-specific uip-conf.h
|
|
+ * file and all configuration names have the prefix UIP_CONF.
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * Copyright (c) 2006, Swedish Institute of Computer Science.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. Neither the name of the Institute nor the names of its contributors
|
|
+ * may be used to endorse or promote products derived from this software
|
|
+ * without specific prior written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
|
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
|
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
+ * SUCH DAMAGE.
|
|
+ *
|
|
+ * This file is part of the uIP TCP/IP stack
|
|
+ *
|
|
+ * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * \file
|
|
+ * An example uIP configuration file
|
|
+ * \author
|
|
+ * Adam Dunkels <adam@sics.se>
|
|
+ */
|
|
+
|
|
+#ifndef __UIP_CONF_H__
|
|
+#define __UIP_CONF_H__
|
|
+
|
|
+#include <inttypes.h>
|
|
+
|
|
+/**
|
|
+ * 8 bit datatype
|
|
+ *
|
|
+ * This typedef defines the 8-bit type used throughout uIP.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+typedef uint8_t u8_t;
|
|
+
|
|
+/**
|
|
+ * 16 bit datatype
|
|
+ *
|
|
+ * This typedef defines the 16-bit type used throughout uIP.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+typedef uint16_t u16_t;
|
|
+
|
|
+/**
|
|
+ * 32 bit datatype
|
|
+ *
|
|
+ * This typedef defines the 16-bit type used throughout uIP.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+typedef uint32_t u32_t;
|
|
+
|
|
+/**
|
|
+ * Statistics datatype
|
|
+ *
|
|
+ * This typedef defines the dataype used for keeping statistics in
|
|
+ * uIP.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+typedef uint64_t uip_stats_t;
|
|
+
|
|
+/**
|
|
+ * Maximum number of TCP connections.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define UIP_CONF_MAX_CONNECTIONS 40
|
|
+
|
|
+/**
|
|
+ * Maximum number of listening TCP ports.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define UIP_CONF_MAX_LISTENPORTS 40
|
|
+
|
|
+/**
|
|
+ * uIP buffer size.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define UIP_CONF_BUFFER_SIZE 420
|
|
+
|
|
+/**
|
|
+ * CPU byte order.
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define UIP_CONF_BYTE_ORDER LITTLE_ENDIAN
|
|
+
|
|
+/**
|
|
+ * Logging on or off
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define UIP_CONF_LOGGING 1
|
|
+
|
|
+/**
|
|
+ * UDP support on or off
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define UIP_CONF_UDP 1
|
|
+
|
|
+/**
|
|
+ * UDP checksums on or off
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define UIP_CONF_UDP_CHECKSUMS 1
|
|
+
|
|
+/**
|
|
+ * uIP statistics on or off
|
|
+ *
|
|
+ * \hideinitializer
|
|
+ */
|
|
+#define UIP_CONF_STATISTICS 1
|
|
+
|
|
+#define UIP_CONF_IPV6 0
|
|
+
|
|
+#define INET_ADDRSTRLEN 16
|
|
+#define INET6_ADDRSTRLEN 46
|
|
+
|
|
+#endif /* __UIP_CONF_H__ */
|
|
+
|
|
+/** @} */
|
|
+/** @} */
|
|
diff -Naurp open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/stamp-h1 open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/stamp-h1
|
|
--- open-iscsi-2.0-872-rc4-bnx2i/iscsiuio/stamp-h1 1969-12-31 18:00:00.000000000 -0600
|
|
+++ open-iscsi-2.0-872-rc4-bnx2i.work/iscsiuio/stamp-h1 2012-04-09 21:52:15.000000000 -0500
|
|
@@ -0,0 +1 @@
|
|
+timestamp for config.h
|