diff options
46 files changed, 15216 insertions, 6468 deletions
diff --git a/Makefile.in b/Makefile.in index 7eca57a..7040b6f 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated automatically by automake 1.4 from Makefile.am +# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation @@ -64,15 +64,17 @@ AWK = @AWK@ AX25_LIB = @AX25_LIB@ CC = @CC@ DLLTOOL = @DLLTOOL@ -LD = @LD@ +ECHO = @ECHO@ +EXEEXT = @EXEEXT@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ NCURSES_LIB = @NCURSES_LIB@ -NM = @NM@ OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ RANLIB = @RANLIB@ +STRIP = @STRIP@ VERSION = @VERSION@ SUBDIRS = ax25ipd ax25rtd call listen ax25mond @@ -110,7 +112,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(ACLOCAL_M4): configure.in cd $(srcdir) && $(ACLOCAL) -config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) +config.status: $(srcdir)/configure.in $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) cd $(srcdir) && $(AUTOCONF) @@ -1,4 +1,4 @@ -dnl aclocal.m4 generated automatically by aclocal 1.4 +dnl aclocal.m4 generated automatically by aclocal 1.4-p4 dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation @@ -125,76 +125,72 @@ for am_file in <<$1>>; do done<<>>dnl>>) changequote([,]))]) +# libtool.m4 - Configure libtool for the host system. -*-Shell-script-*- -# serial 40 AC_PROG_LIBTOOL -AC_DEFUN(AC_PROG_LIBTOOL, -[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl - -# Save cache, so that ltconfig can load it -AC_CACHE_SAVE +# serial 46 AC_PROG_LIBTOOL -# Actually configure libtool. ac_aux_dir is where install-sh is found. -CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ -LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \ -LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \ -DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \ -${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \ -$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \ -|| AC_MSG_ERROR([libtool configure failed]) +builtin([undefine],[symbols]) -# Reload cache, that may have been modified by ltconfig -AC_CACHE_LOAD +AC_DEFUN([AC_PROG_LIBTOOL], +[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl # This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh" +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl -# Redirect the config.log output again, so that the ltconfig log is not -# clobbered by the next message. -exec 5>>./config.log +# Prevent multiple expansion +define([AC_PROG_LIBTOOL], []) ]) -AC_DEFUN(AC_LIBTOOL_SETUP, +AC_DEFUN([AC_LIBTOOL_SETUP], [AC_PREREQ(2.13)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_RANLIB])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 +AC_REQUIRE([AC_OBJEXT])dnl +AC_REQUIRE([AC_EXEEXT])dnl dnl -# Check for any special flags to pass to ltconfig. -libtool_flags="--cache-file=$cache_file" -test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" -test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" -test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install" -test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" -test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" -ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], -[libtool_flags="$libtool_flags --enable-dlopen"]) +_LT_AC_PROG_ECHO_BACKSLASH +# 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_CHECK_TOOL(RANLIB, ranlib, :) +AC_CHECK_TOOL(STRIP, strip, :) + +ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], -[libtool_flags="$libtool_flags --enable-win32-dll"]) +enable_win32_dll=yes, enable_win32_dll=no) + AC_ARG_ENABLE(libtool-lock, [ --disable-libtool-lock avoid locking (might break parallel builds)]) -test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" -test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" +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 +case $host in *-*-irix6*) # Find out which ABI we are using. echo '[#]line __oline__ "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then - case "`/usr/bin/file conftest.o`" in + case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; @@ -214,7 +210,10 @@ case "$host" in SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])]) + [AC_LANG_SAVE + AC_LANG_C + AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_RESTORE]) 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" @@ -222,33 +221,2779 @@ case "$host" in ;; ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], -[*-*-cygwin* | *-*-mingw*) +[*-*-cygwin* | *-*-mingw* | *-*-pw32*) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) + + # recent cygwin and mingw systems supply a stub DllMain which the user + # can override, but on older systems we have to supply one + AC_CACHE_CHECK([if libtool should supply DllMain function], lt_cv_need_dllmain, + [AC_TRY_LINK([], + [extern int __attribute__((__stdcall__)) DllMain(void*, int, void*); + DllMain (0, 0, 0);], + [lt_cv_need_dllmain=no],[lt_cv_need_dllmain=yes])]) + + case $host/$CC in + *-*-cygwin*/gcc*-mno-cygwin*|*-*-mingw*) + # old mingw systems require "-dll" to link a DLL, while more recent ones + # require "-mdll" + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -mdll" + AC_CACHE_CHECK([how to link DLLs], lt_cv_cc_dll_switch, + [AC_TRY_LINK([], [], [lt_cv_cc_dll_switch=-mdll],[lt_cv_cc_dll_switch=-dll])]) + CFLAGS="$SAVE_CFLAGS" ;; + *-*-cygwin* | *-*-pw32*) + # cygwin systems need to pass --dll to the linker, and not link + # crt.o which will require a WinMain@16 definition. + lt_cv_cc_dll_switch="-Wl,--dll -nostartfiles" ;; + esac ;; + ]) +esac + +_LT_AC_LTCONFIG_HACK + ]) + +# _LT_AC_CHECK_DLFCN +# -------------------- +AC_DEFUN(_LT_AC_CHECK_DLFCN, +[AC_CHECK_HEADERS(dlfcn.h) +])# _LT_AC_CHECK_DLFCN + +# 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]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [dnl + +# 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 the above into a raw symbol and a C symbol. +symxfrm='\1 \2\3 \3' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_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 + lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +irix*) + [symcode='[BCDEGRST]'] + ;; +solaris* | sysv5*) + [symcode='[BDT]'] + ;; +sysv4) + [symcode='[DFNSTU]'] + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $host_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. +if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then + [symcode='[ABCDGISTW]'] +fi + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # 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 egrep ' nm_test_var$' "$nlist" >/dev/null; then + if egrep ' 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_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext' + + cat <<EOF >> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr void * +#else +# define lt_ptr char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr address; +} +[lt_preloaded_symbols[] =] +{ +EOF + sed "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$no_builtin_flag" + if AC_TRY_EVAL(ac_link) && test -s conftest; then + pipe_works=yes + fi + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AC_FD_CC + fi + else + echo "cannot find nm_test_var in $nlist" >&AC_FD_CC + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AC_FD_CC + fi + else + echo "$progname: failed program was:" >&AC_FD_CC + 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 ]) +global_symbol_pipe="$lt_cv_sys_global_symbol_pipe" +if test -z "$lt_cv_sys_global_symbol_pipe"; then + global_symbol_to_cdecl= + global_symbol_to_c_name_address= +else + global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl" + global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address" +fi +if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address"; +then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi +]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE + +# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR +# --------------------------------- +AC_DEFUN([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR], +[# Find the correct PATH separator. Usually this is `:', but +# DJGPP uses `;' like DOS. +if test "X${PATH_SEPARATOR+set}" != Xset; then + UNAME=${UNAME-`uname 2>/dev/null`} + case X$UNAME in + *-DOS) lt_cv_sys_path_separator=';' ;; + *) lt_cv_sys_path_separator=':' ;; + esac +fi +])# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR + +# _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], +[ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR + +# 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. +if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +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. + + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for dir in $PATH /usr/ucb; do + 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="$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) +AC_DIVERT_POP +])# _LT_AC_PROG_ECHO_BACKSLASH + +# _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, +[if test "$cross_compiling" = yes; then : + [$4] +else + AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl + 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); */ + } + + exit (status); +}] +EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_unknown|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, +[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 + ;; + + cygwin* | mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + *) + 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" + AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + 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 + LDFLAGS="$LDFLAGS $link_static_flag" + 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_DEFUN([_LT_AC_LTCONFIG_HACK], +[AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])dnl +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^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' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" +need_locks="$enable_libtool_lock" + +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 "$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 "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +if test x"$host" != x"$build"; then + ac_tool_prefix=${host_alias}- +else + ac_tool_prefix= +fi + +# Transform linux* to *-*-linux-gnu*, to support old configure scripts. +case $host_os in +linux-gnu*) ;; +linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` +esac + +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 + +# 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="\$RANLIB -t \$oldlib~$old_postinstall_cmds" + ;; + *) + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +# Allow CC to be a program name with arguments. +set dummy $CC +compiler="[$]2" + +AC_MSG_CHECKING([for objdir]) +rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + objdir=_libs +fi +rmdir .libs 2>/dev/null +AC_MSG_RESULT($objdir) + + +AC_ARG_WITH(pic, +[ --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 + +# We assume here that the value for lt_cv_prog_cc_pic will not be cached +# in isolation, and that seeing it set (from the cache) indicates that +# the associated values are set (in the cache) correctly too. +AC_MSG_CHECKING([for $compiler option to produce PIC]) +AC_CACHE_VAL(lt_cv_prog_cc_pic, +[ lt_cv_prog_cc_pic= + lt_cv_prog_cc_shlib= + lt_cv_prog_cc_wl= + lt_cv_prog_cc_static= + lt_cv_prog_cc_no_builtin= + lt_cv_prog_cc_can_build_shared=$can_build_shared + + if test "$GCC" = yes; then + lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_static='-static' + + case $host_os in + aix*) + # Below there is a dirty hack to force normal static linking with -ldl + # The problem is because libdl dynamically linked with both libc and + # libC (AIX C++ library), which obviously doesn't included in libraries + # list by gcc. This cause undefined symbols with -static flags. + # This hack allows C programs to be linked with "-static -ldl", but + # not sure about C++ programs. + lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC" + ;; + 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_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | irix5* | irix6* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_cv_prog_cc_pic='-fno-common' + ;; + cygwin* | 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_cv_prog_cc_pic='-DDLL_EXPORT' + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_cv_prog_cc_pic=-Kconform_pic + fi + ;; + *) + lt_cv_prog_cc_pic='-fPIC' + ;; + esac + else + # PORTME Check for PIC flags for the system compiler. + case $host_os in + aix3* | aix4* | aix5*) + lt_cv_prog_cc_wl='-Wl,' + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_cv_prog_cc_static='-Bstatic' + else + lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + hpux9* | hpux10* | hpux11*) + # Is there a better lt_cv_prog_cc_static that works with the bundled CC? + lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive" + lt_cv_prog_cc_pic='+Z' + ;; + + irix5* | irix6*) + lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_static='-non_shared' + # PIC (with -KPIC) is the default. + ;; + + cygwin* | 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_cv_prog_cc_pic='-DDLL_EXPORT' + ;; + + newsos6) + lt_cv_prog_cc_pic='-KPIC' + lt_cv_prog_cc_static='-Bstatic' + ;; + + osf3* | osf4* | osf5*) + # All OSF/1 code is PIC. + lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_static='-non_shared' + ;; + + sco3.2v5*) + lt_cv_prog_cc_pic='-Kpic' + lt_cv_prog_cc_static='-dn' + lt_cv_prog_cc_shlib='-belf' + ;; + + solaris*) + lt_cv_prog_cc_pic='-KPIC' + lt_cv_prog_cc_static='-Bstatic' + lt_cv_prog_cc_wl='-Wl,' + ;; + + sunos4*) + lt_cv_prog_cc_pic='-PIC' + lt_cv_prog_cc_static='-Bstatic' + lt_cv_prog_cc_wl='-Qoption ld ' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_cv_prog_cc_pic='-KPIC' + lt_cv_prog_cc_static='-Bstatic' + if test "x$host_vendor" = xsni; then + lt_cv_prog_cc_wl='-LD' + else + lt_cv_prog_cc_wl='-Wl,' + fi + ;; + + uts4*) + lt_cv_prog_cc_pic='-pic' + lt_cv_prog_cc_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_cv_prog_cc_pic='-Kconform_pic' + lt_cv_prog_cc_static='-Bstatic' + fi + ;; + + *) + lt_cv_prog_cc_can_build_shared=no + ;; + esac + fi +]) +if test -z "$lt_cv_prog_cc_pic"; then + AC_MSG_RESULT([none]) +else + AC_MSG_RESULT([$lt_cv_prog_cc_pic]) + + # Check to make sure the pic_flag actually works. + AC_MSG_CHECKING([if $compiler PIC flag $lt_cv_prog_cc_pic works]) + AC_CACHE_VAL(lt_cv_prog_cc_pic_works, [dnl + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC" + AC_TRY_COMPILE([], [], [dnl + case $host_os in + hpux9* | hpux10* | hpux11*) + # On HP-UX, both CC and GCC only warn that PIC is supported... then + # they create non-PIC objects. So, if there were any warnings, we + # assume that PIC is not supported. + if test -s conftest.err; then + lt_cv_prog_cc_pic_works=no + else + lt_cv_prog_cc_pic_works=yes + fi + ;; + *) + lt_cv_prog_cc_pic_works=yes + ;; + esac + ], [dnl + lt_cv_prog_cc_pic_works=no + ]) + CFLAGS="$save_CFLAGS" + ]) + + if test "X$lt_cv_prog_cc_pic_works" = Xno; then + lt_cv_prog_cc_pic= + lt_cv_prog_cc_can_build_shared=no + else + lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic" + fi + + AC_MSG_RESULT([$lt_cv_prog_cc_pic_works]) +fi + +# Check for any special shared library compilation flags. +if test -n "$lt_cv_prog_cc_shlib"; then + AC_MSG_WARN([\`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries]) + if echo "$old_CC $old_CFLAGS " | [egrep -e "[ ]$lt_cv_prog_cc_shlib[ ]"] >/dev/null; then : + else + AC_MSG_WARN([add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure]) + lt_cv_prog_cc_can_build_shared=no + fi +fi + +AC_MSG_CHECKING([if $compiler static flag $lt_cv_prog_cc_static works]) +AC_CACHE_VAL([lt_cv_prog_cc_static_works], [dnl + lt_cv_prog_cc_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static" + AC_TRY_LINK([], [], [lt_cv_prog_cc_static_works=yes]) + LDFLAGS="$save_LDFLAGS" +]) + +# Belt *and* braces to stop my trousers falling down: +test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static= +AC_MSG_RESULT([$lt_cv_prog_cc_static_works]) + +pic_flag="$lt_cv_prog_cc_pic" +special_shlib_compile_flags="$lt_cv_prog_cc_shlib" +wl="$lt_cv_prog_cc_wl" +link_static_flag="$lt_cv_prog_cc_static" +no_builtin_flag="$lt_cv_prog_cc_no_builtin" +can_build_shared="$lt_cv_prog_cc_can_build_shared" + + +# Check to see if options -o and -c are simultaneously supported by compiler +AC_MSG_CHECKING([if $compiler supports -c -o file.$ac_objext]) +AC_CACHE_VAL([lt_cv_compiler_c_o], [ +$rm -r conftest 2>/dev/null +mkdir conftest +cd conftest +echo "int some_variable = 0;" > conftest.$ac_ext +mkdir out +# According to Tom Tromey, Ian Lance Taylor reported there are C compilers +# that will create temporary files in the current directory regardless of +# the output directory. Thus, making CWD read-only will cause this test +# to fail, enabling locking or at least warning the user not to do parallel +# builds. +chmod -w . +save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -o out/conftest2.$ac_objext" +compiler_c_o=no +if { (eval echo configure:__oline__: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && 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 + if test -s out/conftest.err; then + lt_cv_compiler_c_o=no + else + lt_cv_compiler_c_o=yes + fi +else + # Append any errors to the config.log. + cat out/conftest.err 1>&AC_FD_CC + lt_cv_compiler_c_o=no +fi +CFLAGS="$save_CFLAGS" +chmod u+w . +$rm conftest* out/* +rmdir out +cd .. +rmdir conftest +$rm -r conftest 2>/dev/null +]) +compiler_c_o=$lt_cv_compiler_c_o +AC_MSG_RESULT([$compiler_c_o]) + +if test x"$compiler_c_o" = x"yes"; then + # Check to see if we can write to a .lo + AC_MSG_CHECKING([if $compiler supports -c -o file.lo]) + AC_CACHE_VAL([lt_cv_compiler_o_lo], [ + lt_cv_compiler_o_lo=no + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -c -o conftest.lo" + save_objext="$ac_objext" + ac_objext=lo + AC_TRY_COMPILE([], [int some_variable = 0;], [dnl + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + lt_cv_compiler_o_lo=no + else + lt_cv_compiler_o_lo=yes + fi + ]) + ac_objext="$save_objext" + CFLAGS="$save_CFLAGS" + ]) + compiler_o_lo=$lt_cv_compiler_o_lo + AC_MSG_RESULT([$compiler_o_lo]) +else + compiler_o_lo=no +fi + +# Check to see if we can do hard links to lock some files if needed +hard_links="nottested" +if test "$compiler_c_o" = 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 + +if test "$GCC" = yes; then + # Check to see if options -fno-rtti -fno-exceptions are supported by compiler + AC_MSG_CHECKING([if $compiler supports -fno-rtti -fno-exceptions]) + echo "int some_variable = 0;" > conftest.$ac_ext + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext" + compiler_rtti_exceptions=no + AC_TRY_COMPILE([], [int some_variable = 0;], [dnl + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + compiler_rtti_exceptions=no + else + compiler_rtti_exceptions=yes + fi + ]) + CFLAGS="$save_CFLAGS" + AC_MSG_RESULT([$compiler_rtti_exceptions]) + + if test "$compiler_rtti_exceptions" = "yes"; then + no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions' + else + no_builtin_flag=' -fno-builtin' + fi +fi + +# See if the linker supports building shared libraries. +AC_MSG_CHECKING([whether the linker ($LD) supports shared libraries]) + +allow_undefined_flag= +no_undefined_flag= +need_lib_prefix=unknown +need_version=unknown +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +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_into_libs=no +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no +hardcode_shlibpath_var=unsupported +runpath_var= +link_all_deplibs=unknown +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 egrep regular expression 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= + +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 + ;; +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}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX, the GNU linker is very broken + # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available. + 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 + ;; + + 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 use + # them. + ld_shlibs=no + ;; + + beos*) + if $LD --help 2>&1 | egrep ': 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*) + # 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=yes + + extract_expsyms_cmds='test -f $output_objdir/impgen.c || \ + sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~ + test -f $output_objdir/impgen.exe || (cd $output_objdir && \ + if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \ + else $CC -o impgen impgen.c ; fi)~ + $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def' + + old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib' + + # cygwin and mingw dlls have different entry points and sets of symbols + # to exclude. + # FIXME: what about values for MSVC? + dll_entry=__cygwin_dll_entry@12 + dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~ + case $host_os in + mingw*) + # mingw values + dll_entry=_DllMainCRTStartup@12 + dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~ + ;; + esac + + # mingw and cygwin differ, and it's simplest to just exclude the union + # of the two symbol sets. + dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12 + + # recent cygwin and mingw systems supply a stub DllMain which the user + # can override, but on older systems we have to supply one (in ltdll.c) + if test "x$lt_cv_need_dllmain" = "xyes"; then + ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext " + ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < [$]0 > $output_objdir/$soname-ltdll.c~ + test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~' + else + ltdll_obj= + ltdll_cmds= + fi + + # Extract the symbol export list from an `--export-all' def file, + # then regenerate the def file from the symbol export list, so that + # the compiled dll only exports the symbol export list. + # Be careful not to strip the DATA tag left be newer dlltools. + export_symbols_cmds="$ltdll_cmds"' + $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~ + [sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//"] < $output_objdir/$soname-def > $export_symbols' + + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is. + # If DATA tags from a recent dlltool are present, honour them! + archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname-def; + else + echo EXPORTS > $output_objdir/$soname-def; + _lt_hint=1; + cat $export_symbols | while read symbol; do + set dummy \$symbol; + case \[$]# in + 2) echo " \[$]2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;; + *) echo " \[$]2 @ \$_lt_hint \[$]3 ; " >> $output_objdir/$soname-def;; + esac; + _lt_hint=`expr 1 + \$_lt_hint`; + done; + fi~ + '"$ltdll_cmds"' + $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ + $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~ + $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ + $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~ + $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags' + ;; + + 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 -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | egrep '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 | egrep ': 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 + ;; + + 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 | egrep ': 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" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + case $host_os in + cygwin* | mingw* | pw32*) + # dlltool doesn't understand --whole-archive et. al. + whole_archive_flag_spec= + ;; + *) + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + ;; + esac + 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 "$link_static_flag"; 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 + 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. + + hardcode_direct=yes + archive_cmds='' + hardcode_libdir_separator=':' + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + 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' + else + # not using gcc + if test "$host_cpu" = ia64; then + shared_flag='${wl}-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 can do strange things, 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' + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib' + archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${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 ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib' + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='${wl}-berok' + # This is a bit strange, but is similar to how AIX traditionally builds + # it's shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $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 + ;; + + 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 + # 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"`' + ;; + + darwin* | rhapsody*) + case "$host_os" in + rhapsody* | darwin1.[[012]]) + allow_undefined_flag='-undefined suppress' + ;; + *) # Darwin 1.3 on + allow_undefined_flag='-flat_namespace -undefined suppress' + ;; + esac + # FIXME: Relying on posixy $() will cause problems for + # cross-compilation, but unfortunately the echo tests do not + # yet detect zsh echo's removal of \ escapes. + archive_cmds='$nonopt $(test "x$module" = xyes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linker_flags -install_name $rpath/$soname $verstring' + # We need to add '_' to the symbols in $export_symbols first + #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols' + hardcode_direct=yes + hardcode_shlibpath_var=no + whole_archive_flag_spec='-all_load $convenience' + ;; + + 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*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9* | hpux10* | hpux11*) + case $host_os in + hpux9*) 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' ;; + *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; + esac + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_minus_L=yes # Not in the search PATH, but as the default + # location of the library. + export_dynamic_flag_spec='${wl}-E' + ;; + + irix5* | irix6*) + 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' + 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 $linker_flags' + 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 $linker_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 "-exported_symbol " >> $lib.exp; echo "\$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 ${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=: + ;; + + sco3.2v5*) + 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 + export_dynamic_flag_spec='${wl}-Bexport' + ;; + + solaris*) + no_undefined_flag=' -z defs' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + 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' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + [solaris2.[0-5] | solaris2.[0-5].*]) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; + 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) + if test "x$host_vendor" = xsno; then + archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + else + 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 + fi + 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' + ;; + + sysv5*) + no_undefined_flag=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + 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' + hardcode_libdir_flag_spec= + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + 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.2uw2*) + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=no + hardcode_shlibpath_var=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5uw7* | unixware7*) + no_undefined_flag='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac +fi +AC_MSG_RESULT([$ld_shlibs]) +test "$ld_shlibs" = no && can_build_shared=no + +# Check hardcoding attributes. +AC_MSG_CHECKING([how to hardcode library paths into programs]) +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var"; 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 "$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 +AC_MSG_RESULT([$hardcode_action]) + +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 + AC_MSG_RESULT([no]) +fi + +reload_cmds='$LD$reload_flag -o $output$reload_objs' +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +# PORTME Fill in your ld.so characteristics +AC_MSG_CHECKING([dynamic linker characteristics]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +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" +sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}.so$major' + ;; + +aix4* | aix5*) + version_type=linux + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so' + 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}.so$versuffix ${libname}${release}.so$major $libname.so' + 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}.so$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}.so' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$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" + export_dynamic_flag_spec=-rdynamic + # 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 + need_version=no + need_lib_prefix=no + case $GCC,$host_os in + yes,cygwin*) + library_names_spec='$libname.dll.a' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | [sed -e 's/[.]/-/g']`${versuffix}.dll' + postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog .libs/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + ;; + yes,mingw*) + library_names_spec='${libname}`echo ${release} | [sed -e 's/[.]/-/g']`${versuffix}.dll' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"` + ;; + yes,pw32*) + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll' + ;; + *) + library_names_spec='${libname}`echo ${release} | [sed -e 's/[.]/-/g']`${versuffix}.dll $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 + # FIXME: Relying on posixy $() will cause problems for + # cross-compilation, but unfortunately the echo tests do not + # yet detect zsh echo's removal of \ escapes. + library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)' + soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + *) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so' + soname_spec='${libname}${release}.so$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. + dynamic_linker="$host_os dld.sl" + version_type=sunos + need_lib_prefix=no + need_version=no + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl' + soname_spec='${libname}${release}.sl$major' + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6*) + version_type=irix + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}.so$major' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so' + case $host_os in + irix5*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 ") 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}" + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux-gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$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 + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so' + soname_spec='${libname}${release}.so$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}.so$versuffix ${libname}${release}.so$major $libname.so' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + 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 + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +os2*) + libname_spec='$name' + need_lib_prefix=no + library_names_spec='$libname.dll $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_version=no + soname_spec='${libname}${release}.so' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' + 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" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}.so$major' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$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}.so$versuffix ${libname}.so$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.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=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 + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so' + soname_spec='$libname.so.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +# Report the final consequences. +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*) + 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]) + +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 + +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_DLOPEN_SELF + +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. + AC_MSG_CHECKING([whether -lc should be explicitly linked in]) + AC_CACHE_VAL([lt_cv_archive_cmds_need_lc], + [$rm conftest* + echo 'static int dummy;' > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile); then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_cv_prog_cc_wl + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if AC_TRY_EVAL(archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi]) + AC_MSG_RESULT([$lt_cv_archive_cmds_need_lc]) + ;; + esac +fi +need_lc=${lt_cv_archive_cmds_need_lc-yes} + +# The second 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 + : +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. + test -f Makefile && make "$ltmain" +fi + +if test -f "$ltmain"; then + trap "$rm \"${ofile}T\"; exit 1" 1 2 15 + $rm -f "${ofile}T" + + echo creating $ofile + + # 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 CC LD LN_S NM SHELL \ + reload_flag reload_cmds wl \ + pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \ + thread_safe_flag_spec whole_archive_flag_spec libname_spec \ + library_names_spec soname_spec \ + RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ + old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \ + postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \ + old_striplib striplib file_magic_cmd export_symbols_cmds \ + deplibs_check_method allow_undefined_flag no_undefined_flag \ + finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \ + global_symbol_to_c_name_address \ + hardcode_libdir_flag_spec hardcode_libdir_separator \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do + + case $var in + reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + export_symbols_cmds | archive_cmds | archive_expsym_cmds | \ + extract_expsyms_cmds | old_archive_from_expsyms_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + finish_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 + + cat <<__EOF__ > "${ofile}T" +#! $SHELL + +# `$echo "$ofile" | 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-2000 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="sed -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +# ### 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=$need_lc + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# The default C compiler. +CC=$lt_CC + +# Is the compiler the GNU C compiler? +with_gcc=$GCC + +# 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=$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_wl + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_pic_flag +pic_mode=$pic_mode + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_compiler_c_o + +# Can we write directly to a .lo ? +compiler_o_lo=$lt_compiler_o_lo + +# 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_link_static_flag + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_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 to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# 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_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_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 + +# 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.so during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# 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=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$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 >> "${ofile}T" + +# 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 + + case $host_os in + cygwin* | mingw* | pw32* | os2*) + cat <<'EOF' >> "${ofile}T" + # This is a source program that is used to create dlls on Windows + # Don't remove nor modify the starting and closing comments +# /* 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 */ + # This is a source program that is used to create import libraries + # on Windows for dlls which lack them. Don't remove nor modify the + # starting and closing comments +# /* impgen.c starts here */ +# /* Copyright (C) 1999-2000 Free Software Foundation, Inc. +# +# This file is part of GNU libtool. +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# */ +# +# #include <stdio.h> /* for printf() */ +# #include <unistd.h> /* for open(), lseek(), read() */ +# #include <fcntl.h> /* for O_RDONLY, O_BINARY */ +# #include <string.h> /* for strdup() */ +# +# /* O_BINARY isn't required (or even defined sometimes) under Unix */ +# #ifndef O_BINARY +# #define O_BINARY 0 +# #endif +# +# static unsigned int +# pe_get16 (fd, offset) +# int fd; +# int offset; +# { +# unsigned char b[2]; +# lseek (fd, offset, SEEK_SET); +# read (fd, b, 2); +# return b[0] + (b[1]<<8); +# } +# +# static unsigned int +# pe_get32 (fd, offset) +# int fd; +# int offset; +# { +# unsigned char b[4]; +# lseek (fd, offset, SEEK_SET); +# read (fd, b, 4); +# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); +# } +# +# static unsigned int +# pe_as32 (ptr) +# void *ptr; +# { +# unsigned char *b = ptr; +# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); +# } +# +# int +# main (argc, argv) +# int argc; +# char *argv[]; +# { +# int dll; +# unsigned long pe_header_offset, opthdr_ofs, num_entries, i; +# unsigned long export_rva, export_size, nsections, secptr, expptr; +# unsigned long name_rvas, nexp; +# unsigned char *expdata, *erva; +# char *filename, *dll_name; +# +# filename = argv[1]; +# +# dll = open(filename, O_RDONLY|O_BINARY); +# if (dll < 1) +# return 1; +# +# dll_name = filename; +# +# for (i=0; filename[i]; i++) +# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':') +# dll_name = filename + i +1; +# +# pe_header_offset = pe_get32 (dll, 0x3c); +# opthdr_ofs = pe_header_offset + 4 + 20; +# num_entries = pe_get32 (dll, opthdr_ofs + 92); +# +# if (num_entries < 1) /* no exports */ +# return 1; +# +# export_rva = pe_get32 (dll, opthdr_ofs + 96); +# export_size = pe_get32 (dll, opthdr_ofs + 100); +# nsections = pe_get16 (dll, pe_header_offset + 4 +2); +# secptr = (pe_header_offset + 4 + 20 + +# pe_get16 (dll, pe_header_offset + 4 + 16)); +# +# expptr = 0; +# for (i = 0; i < nsections; i++) +# { +# char sname[8]; +# unsigned long secptr1 = secptr + 40 * i; +# unsigned long vaddr = pe_get32 (dll, secptr1 + 12); +# unsigned long vsize = pe_get32 (dll, secptr1 + 16); +# unsigned long fptr = pe_get32 (dll, secptr1 + 20); +# lseek(dll, secptr1, SEEK_SET); +# read(dll, sname, 8); +# if (vaddr <= export_rva && vaddr+vsize > export_rva) +# { +# expptr = fptr + (export_rva - vaddr); +# if (export_rva + export_size > vaddr + vsize) +# export_size = vsize - (export_rva - vaddr); +# break; +# } +# } +# +# expdata = (unsigned char*)malloc(export_size); +# lseek (dll, expptr, SEEK_SET); +# read (dll, expdata, export_size); +# erva = expdata - export_rva; +# +# nexp = pe_as32 (expdata+24); +# name_rvas = pe_as32 (expdata+32); +# +# printf ("EXPORTS\n"); +# for (i = 0; i<nexp; i++) +# { +# unsigned long name_rva = pe_as32 (erva+name_rvas+i*4); +# printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i); +# } +# +# return 0; +# } +# /* impgen.c ends here */ + +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" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1) + + mv -f "${ofile}T" "$ofile" || \ + (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T") + chmod +x "$ofile" +fi + +])# _LT_AC_LTCONFIG_HACK # AC_LIBTOOL_DLOPEN - enable checks for dlopen support -AC_DEFUN(AC_LIBTOOL_DLOPEN, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])]) +AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])]) # AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's -AC_DEFUN(AC_LIBTOOL_WIN32_DLL, [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])]) +AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])]) # AC_ENABLE_SHARED - implement the --enable-shared flag # Usage: AC_ENABLE_SHARED[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. -AC_DEFUN(AC_ENABLE_SHARED, [dnl -define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl +AC_DEFUN([AC_ENABLE_SHARED], +[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE(shared, changequote(<<, >>)dnl << --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT], changequote([, ])dnl [p=${PACKAGE-default} -case "$enableval" in +case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) @@ -267,21 +3012,22 @@ enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl ]) # AC_DISABLE_SHARED - set the default shared flag to --disable-shared -AC_DEFUN(AC_DISABLE_SHARED, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_DEFUN([AC_DISABLE_SHARED], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_SHARED(no)]) # AC_ENABLE_STATIC - implement the --enable-static flag # Usage: AC_ENABLE_STATIC[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. -AC_DEFUN(AC_ENABLE_STATIC, [dnl -define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl +AC_DEFUN([AC_ENABLE_STATIC], +[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE(static, changequote(<<, >>)dnl << --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT], changequote([, ])dnl [p=${PACKAGE-default} -case "$enableval" in +case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) @@ -300,7 +3046,8 @@ enable_static=AC_ENABLE_STATIC_DEFAULT)dnl ]) # AC_DISABLE_STATIC - set the default static flag to --disable-static -AC_DEFUN(AC_DISABLE_STATIC, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_DEFUN([AC_DISABLE_STATIC], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_STATIC(no)]) @@ -308,14 +3055,14 @@ AC_ENABLE_STATIC(no)]) # Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. -AC_DEFUN(AC_ENABLE_FAST_INSTALL, [dnl -define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl +AC_DEFUN([AC_ENABLE_FAST_INSTALL], +[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE(fast-install, changequote(<<, >>)dnl << --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT], changequote([, ])dnl [p=${PACKAGE-default} -case "$enableval" in +case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) @@ -333,12 +3080,98 @@ esac], enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl ]) -# AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install -AC_DEFUN(AC_DISABLE_FAST_INSTALL, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +# 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_LIBTOOL_PICMODE - implement the --with-pic flag +# Usage: AC_LIBTOOL_PICMODE[(MODE)] +# Where 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_PATH_TOOL_PREFIX - find a file program which can recognise shared library +AC_DEFUN([AC_PATH_TOOL_PREFIX], +[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_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path. + ;; + *) + ac_save_MAGIC_CMD="$MAGIC_CMD" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" +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 + 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="$ac_save_ifs" + MAGIC_CMD="$ac_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_MAGIC - find a file program which can recognise a shared library +AC_DEFUN([AC_PATH_MAGIC], +[AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl +AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin:$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) + else + MAGIC_CMD=: + fi +fi +]) + + # AC_PROG_LD - find the path to the GNU or non-GNU linker -AC_DEFUN(AC_PROG_LD, +AC_DEFUN([AC_PROG_LD], [AC_ARG_WITH(gnu-ld, [ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) @@ -346,16 +3179,20 @@ AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl ac_prog=ld -if test "$ac_cv_prog_gcc" = yes; then +if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) - ac_prog=`($CC -print-prog-name=ld) 2>&5` - case "$ac_prog" in + 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. -changequote(,)dnl - [\\/]* | [A-Za-z]:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' -changequote([,])dnl + [[\\/]* | [A-Za-z]:[\\/]*)] + [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do @@ -377,17 +3214,17 @@ elif test "$with_gnu_ld" = yes; then else AC_MSG_CHECKING([for non-GNU ld]) fi -AC_CACHE_VAL(ac_cv_path_LD, +AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - ac_cv_path_LD="$ac_dir/$ac_prog" + 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 GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. - if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break @@ -396,70 +3233,263 @@ AC_CACHE_VAL(ac_cv_path_LD, done IFS="$ac_save_ifs" else - ac_cv_path_LD="$LD" # Let the user override the test with a path. + lt_cv_path_LD="$LD" # Let the user override the test with a path. fi]) -LD="$ac_cv_path_LD" +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_SUBST(LD) AC_PROG_LD_GNU ]) -AC_DEFUN(AC_PROG_LD_GNU, -[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld, +# AC_PROG_LD_GNU - +AC_DEFUN([AC_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then - ac_cv_prog_gnu_ld=yes + lt_cv_prog_gnu_ld=yes else - ac_cv_prog_gnu_ld=no + lt_cv_prog_gnu_ld=no fi]) +with_gnu_ld=$lt_cv_prog_gnu_ld +]) + +# 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 +test -n "$reload_flag" && reload_flag=" $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 dependant 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 egrep 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 + ;; + +bsdi4*) + [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* | mingw* | pw32*) + 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='file_magic Mach-O dynamically linked shared library' + lt_cv_file_magic_cmd='/usr/bin/file -L' + case "$host_os" in + rhapsody* | darwin1.[[012]]) + lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1` + ;; + *) # Darwin 1.3 on + lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib' + ;; + esac + ;; + +freebsd*) + 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)/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_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'] + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + +irix5* | irix6*) + case $host_os in + irix5*) + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" + ;; + *) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + # this will be overridden with pass_all, but let us keep it just in case + [lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"] + ;; + esac + lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*` + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux-gnu*) + case $host_cpu in + alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* ) + lt_cv_deplibs_check_method=pass_all ;; + *) + # glibc up to 2.1.1 does not perform some relocations on ARM + [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;] + esac + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'] + else + [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$'] + 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 + ;; + +openbsd*) + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object' + else + lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' + fi + ;; + +osf3* | osf4* | osf5*) + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method='file_magic COFF format alpha shared library' + lt_cv_file_magic_test_file=/shlib/libc.so + lt_cv_deplibs_check_method=pass_all + ;; + +sco3.2v5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + lt_cv_file_magic_test_file=/lib/libc.so + ;; + +[sysv5uw[78]* | sysv4*uw2*)] + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + 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 + ;; + esac + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method ]) + # AC_PROG_NM - find the path to a BSD-compatible name lister -AC_DEFUN(AC_PROG_NM, +AC_DEFUN([AC_PROG_NM], [AC_MSG_CHECKING([for BSD-compatible nm]) -AC_CACHE_VAL(ac_cv_path_NM, +AC_CACHE_VAL(lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. - ac_cv_path_NM="$NM" + lt_cv_path_NM="$NM" else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then + tmp_nm=$ac_dir/${ac_tool_prefix}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 - if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -B" + # Tru64's nm complains that /dev/null is an invalid object file + if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then + lt_cv_path_NM="$tmp_nm -B" break - elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -p" + elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + lt_cv_path_NM="$tmp_nm -p" break else - ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but + 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 fi fi done IFS="$ac_save_ifs" - test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi]) -NM="$ac_cv_path_NM" +NM="$lt_cv_path_NM" AC_MSG_RESULT([$NM]) -AC_SUBST(NM) ]) # AC_CHECK_LIBM - check for math library -AC_DEFUN(AC_CHECK_LIBM, +AC_DEFUN([AC_CHECK_LIBM], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= -case "$host" in -*-*-beos* | *-*-cygwin*) +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32*) # These system don't have libm ;; *-ncr-sysv4.3*) @@ -473,33 +3503,39 @@ esac ]) # AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for -# the libltdl convenience library, adds --enable-ltdl-convenience to -# the configure arguments. Note that LIBLTDL is not AC_SUBSTed, nor -# is AC_CONFIG_SUBDIRS called. If DIR is not provided, it is assumed -# to be `${top_builddir}/libltdl'. Make sure you start DIR with -# '${top_builddir}/' (note the single quotes!) if your package is not -# flat, and, if you're not using automake, define top_builddir as -# appropriate in the Makefiles. -AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl - case "$enable_ltdl_convenience" in +# the libltdl convenience library and INCLTDL to the include flags for +# the libltdl header and adds --enable-ltdl-convenience to the +# configure arguments. Note that LIBLTDL and INCLTDL are not +# AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If DIR is not +# provided, it is assumed to be `libltdl'. LIBLTDL will be prefixed +# with '${top_builddir}/' and INCLTDL 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=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdlc.la - INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl']) + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la + INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) ]) # AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for -# the libltdl installable library, and adds --enable-ltdl-install to -# the configure arguments. Note that LIBLTDL is not AC_SUBSTed, nor -# is AC_CONFIG_SUBDIRS called. If DIR is not provided, it is assumed -# to be `${top_builddir}/libltdl'. Make sure you start DIR with -# '${top_builddir}/' (note the single quotes!) if your package is not -# flat, and, if you're not using automake, define top_builddir as -# appropriate in the Makefiles. +# the libltdl installable library and INCLTDL to the include flags for +# the libltdl header and adds --enable-ltdl-install to the configure +# arguments. Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is +# AC_CONFIG_SUBDIRS called. If DIR is not provided and an installed +# libltdl is not found, it is assumed to be `libltdl'. LIBLTDL will +# be prefixed with '${top_builddir}/' and INCLTDL 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. # 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_DEFUN([AC_LIBLTDL_INSTALLABLE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_CHECK_LIB(ltdl, main, [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], [if test x"$enable_ltdl_install" = xno; then @@ -510,8 +3546,8 @@ AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl ]) if test x"$enable_ltdl_install" = x"yes"; then ac_configure_args="$ac_configure_args --enable-ltdl-install" - LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdl.la - INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl']) + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la + INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) else ac_configure_args="$ac_configure_args --enable-ltdl-install=no" LIBLTDL="-lltdl" @@ -519,15 +3555,15 @@ AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl fi ]) -dnl old names -AC_DEFUN(AM_PROG_LIBTOOL, [indir([AC_PROG_LIBTOOL])])dnl -AC_DEFUN(AM_ENABLE_SHARED, [indir([AC_ENABLE_SHARED], $@)])dnl -AC_DEFUN(AM_ENABLE_STATIC, [indir([AC_ENABLE_STATIC], $@)])dnl -AC_DEFUN(AM_DISABLE_SHARED, [indir([AC_DISABLE_SHARED], $@)])dnl -AC_DEFUN(AM_DISABLE_STATIC, [indir([AC_DISABLE_STATIC], $@)])dnl -AC_DEFUN(AM_PROG_LD, [indir([AC_PROG_LD])])dnl -AC_DEFUN(AM_PROG_NM, [indir([AC_PROG_NM])])dnl - -dnl This is just to silence aclocal about the macro not being used -ifelse([AC_DISABLE_FAST_INSTALL])dnl +# 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]) diff --git a/ax25ipd/Makefile.in b/ax25ipd/Makefile.in index 513d44d..d2c6d30 100644 --- a/ax25ipd/Makefile.in +++ b/ax25ipd/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated automatically by automake 1.4 from Makefile.am +# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation @@ -64,15 +64,17 @@ AWK = @AWK@ AX25_LIB = @AX25_LIB@ CC = @CC@ DLLTOOL = @DLLTOOL@ -LD = @LD@ +ECHO = @ECHO@ +EXEEXT = @EXEEXT@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ NCURSES_LIB = @NCURSES_LIB@ -NM = @NM@ OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ RANLIB = @RANLIB@ +STRIP = @STRIP@ VERSION = @VERSION@ sbin_PROGRAMS = ax25ipd @@ -101,6 +103,7 @@ INCLUDES = -DAX25_SYSCONFDIR=\""$(AX25_SYSCONFDIR)"\" -DAX25_LOCALSTATEDIR=\ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = +sbin_PROGRAMS = ax25ipd$(EXEEXT) PROGRAMS = $(sbin_PROGRAMS) @@ -108,8 +111,8 @@ DEFS = @DEFS@ -I. -I$(srcdir) -I.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ -ax25ipd_OBJECTS = config.o crc.o io.o kiss.o ax25ipd.o process.o \ -routing.o +ax25ipd_OBJECTS = config.$(OBJEXT) crc.$(OBJEXT) io.$(OBJEXT) \ +kiss.$(OBJEXT) ax25ipd.$(OBJEXT) process.$(OBJEXT) routing.$(OBJEXT) ax25ipd_DEPENDENCIES = ax25ipd_LDFLAGS = COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -135,7 +138,7 @@ OBJECTS = $(ax25ipd_OBJECTS) all: all-redirect .SUFFIXES: -.SUFFIXES: .S .c .lo .o .s +.SUFFIXES: .S .c .lo .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps ax25ipd/Makefile @@ -172,6 +175,11 @@ uninstall-sbinPROGRAMS: .c.o: $(COMPILE) -c $< +# FIXME: We should only use cygpath when building on Windows, +# and only if it is available. +.c.obj: + $(COMPILE) -c `cygpath -w $<` + .s.o: $(COMPILE) -c $< @@ -180,6 +188,7 @@ uninstall-sbinPROGRAMS: mostlyclean-compile: -rm -f *.o core *.core + -rm -f *.$(OBJEXT) clean-compile: @@ -207,8 +216,8 @@ distclean-libtool: maintainer-clean-libtool: -ax25ipd: $(ax25ipd_OBJECTS) $(ax25ipd_DEPENDENCIES) - @rm -f ax25ipd +ax25ipd$(EXEEXT): $(ax25ipd_OBJECTS) $(ax25ipd_DEPENDENCIES) + @rm -f ax25ipd$(EXEEXT) $(LINK) $(ax25ipd_LDFLAGS) $(ax25ipd_OBJECTS) $(ax25ipd_LDADD) $(LIBS) install-man5: diff --git a/ax25ipd/ax25ipd.c b/ax25ipd/ax25ipd.c index e73f36b..45e59fa 100644 --- a/ax25ipd/ax25ipd.c +++ b/ax25ipd/ax25ipd.c @@ -33,16 +33,16 @@ int opt_help = 0; char opt_configfile[1024]; struct option options[] = { - "version", 0, &opt_version, 1, - "loglevel", 1, &opt_loglevel, 1, - "help", 0, &opt_help, 1, - "configfile", 1, NULL, 0, - 0,0,0,0 }; - -int -main(int argc, char **argv) + "version", 0, &opt_version, 1, + "loglevel", 1, &opt_loglevel, 1, + "help", 0, &opt_help, 1, + "configfile", 1, NULL, 0, + 0, 0, 0, 0 +}; + +int main(int argc, char **argv) { - if(setjmp(restart_env)==0) { + if (setjmp(restart_env) == 0) { signal(SIGHUP, hupper); } @@ -51,58 +51,65 @@ main(int argc, char **argv) signal(SIGINT, int_handler); signal(SIGTERM, term_handler); - while(1) { - int option_index = 0; - int c; - - c = getopt_long(argc, argv, "c:hl:v", options, &option_index); - if (c == -1) - break; - - switch (c) { - case 0: - break; - switch(option_index) { - case 0: case 2: - break; - case 1: - opt_loglevel = atoi(optarg); - break; - case 3: - strncpy(opt_configfile, optarg, 1023); - break; - - } - break; - case 'c' : - strncpy(opt_configfile, optarg, 1023); - break; - case 'v': - opt_version = 1; - break; - case 'l': - opt_loglevel = atoi(optarg); - break; - } - } - - if (optind < argc) { printf ("config %s\n", argv[optind++]); } - - if (opt_version == 1) { - greet_world(); - exit(0); - } - if (opt_help == 1) { - greet_world(); - printf ("Usage:\n"); - printf ("%s [flags]\n",argv[0]); - printf ("\nFlags:\n"); - printf (" --version, -v Print version of program\n"); - printf (" --help, -h This help screen\n"); - printf (" --loglevel NUM, -l NUM Set logging level to NUM\n"); - printf (" --configfile FILE, -c FILE Set confgiuration file to FILE\n"); - exit(0); - } + while (1) { + int option_index = 0; + int c; + + c = getopt_long(argc, argv, "c:hl:v", options, + &option_index); + if (c == -1) + break; + + switch (c) { + case 0: + break; + switch (option_index) { + case 0: + case 2: + break; + case 1: + opt_loglevel = atoi(optarg); + break; + case 3: + strncpy(opt_configfile, optarg, 1023); + break; + + } + break; + case 'c': + strncpy(opt_configfile, optarg, 1023); + break; + case 'v': + opt_version = 1; + break; + case 'l': + opt_loglevel = atoi(optarg); + break; + } + } + + if (optind < argc) { + printf("config %s\n", argv[optind++]); + } + + if (opt_version == 1) { + greet_world(); + exit(0); + } + if (opt_help == 1) { + greet_world(); + printf("Usage:\n"); + printf("%s [flags]\n", argv[0]); + printf("\nFlags:\n"); + printf + (" --version, -v Print version of program\n"); + printf(" --help, -h This help screen\n"); + printf + (" --loglevel NUM, -l NUM Set logging level to NUM\n"); + printf + (" --configfile FILE, -c FILE Set confgiuration file to FILE\n"); + exit(0); + } /* Initialize all routines */ config_init(); @@ -131,21 +138,21 @@ main(int argc, char **argv) /* and let the games begin */ io_start(); - return(0); + return (0); } -void -greet_world() +void greet_world() { printf("\nax25ipd %s / %s\n", VERS2, VERSION); - printf("Copyright 1991, Michael Westerhof, Sun Microsystems, Inc.\n"); - printf("This software may be freely used, distributed, or modified, providing\nthis header is not removed\n\n"); + printf + ("Copyright 1991, Michael Westerhof, Sun Microsystems, Inc.\n"); + printf + ("This software may be freely used, distributed, or modified, providing\nthis header is not removed\n\n"); fflush(stdout); } -void -do_stats() +void do_stats() { int save_loglevel; @@ -162,24 +169,24 @@ do_stats() dump_params(); printf("\nInput stats:\n"); - printf("KISS input packets: %d\n",stats.kiss_in); - printf(" too big: %d\n",stats.kiss_toobig); - printf(" bad type: %d\n",stats.kiss_badtype); - printf(" too short: %d\n",stats.kiss_tooshort); - printf(" not for me: %d\n",stats.kiss_not_for_me); - printf(" I am destination: %d\n",stats.kiss_i_am_dest); - printf(" no route found: %d\n",stats.kiss_no_ip_addr); - printf("UDP input packets: %d\n",stats.udp_in); - printf("IP input packets: %d\n",stats.ip_in); - printf(" failed CRC test: %d\n",stats.ip_failed_crc); - printf(" too short: %d\n",stats.ip_tooshort); - printf(" not for me: %d\n",stats.ip_not_for_me); - printf(" I am destination: %d\n",stats.ip_i_am_dest); + printf("KISS input packets: %d\n", stats.kiss_in); + printf(" too big: %d\n", stats.kiss_toobig); + printf(" bad type: %d\n", stats.kiss_badtype); + printf(" too short: %d\n", stats.kiss_tooshort); + printf(" not for me: %d\n", stats.kiss_not_for_me); + printf(" I am destination: %d\n", stats.kiss_i_am_dest); + printf(" no route found: %d\n", stats.kiss_no_ip_addr); + printf("UDP input packets: %d\n", stats.udp_in); + printf("IP input packets: %d\n", stats.ip_in); + printf(" failed CRC test: %d\n", stats.ip_failed_crc); + printf(" too short: %d\n", stats.ip_tooshort); + printf(" not for me: %d\n", stats.ip_not_for_me); + printf(" I am destination: %d\n", stats.ip_i_am_dest); printf("\nOutput stats:\n"); - printf("KISS output packets: %d\n",stats.kiss_out); - printf(" beacons: %d\n",stats.kiss_beacon_outs); - printf("UDP output packets: %d\n",stats.udp_out); - printf("IP output packets: %d\n",stats.ip_out); + printf("KISS output packets: %d\n", stats.kiss_out); + printf(" beacons: %d\n", stats.kiss_beacon_outs); + printf("UDP output packets: %d\n", stats.udp_out); + printf("IP output packets: %d\n", stats.ip_out); printf("\n"); fflush(stdout); @@ -188,33 +195,28 @@ do_stats() loglevel = save_loglevel; } -void -hupper(int i) +void hupper(int i) { printf("\nSIGHUP!\n"); longjmp(restart_env, 1); } -void -usr1_handler(int i) +void usr1_handler(int i) { printf("\nSIGUSR1!\n"); do_stats(); } -void -int_handler(int i) +void int_handler(int i) { printf("\nSIGINT!\n"); do_stats(); exit(1); } -void -term_handler(int i) +void term_handler(int i) { printf("\nSIGTERM!\n"); do_stats(); exit(1); } - diff --git a/ax25ipd/ax25ipd.h b/ax25ipd/ax25ipd.h index eeaf183..76a25b6 100644 --- a/ax25ipd/ax25ipd.h +++ b/ax25ipd/ax25ipd.h @@ -20,6 +20,9 @@ * added route flags, it's a little ugly, but is extensible fairly easily. * provided a mechanism for handling broadcast traffic * Terry Dawson, VK2KTJ, July 1997. + * + * Minor bug fixes. + * Terry Dawson, VK2KTJ, September 2001. */ /* Define the current version number diff --git a/ax25ipd/config.c b/ax25ipd/config.c index 243b82c..b80d113 100644 --- a/ax25ipd/config.c +++ b/ax25ipd/config.c @@ -23,21 +23,24 @@ #include "ax25ipd.h" /* Initialize the config table */ -void -config_init() +void config_init() { int i; *ttydevice = '\0'; - for(i=0;i<7;i++)mycallsign[i]='\0'; - for(i=0;i<7;i++)myalias[i]='\0'; - for(i=0;i<7;i++)mycallsign2[i]='\0'; - for(i=0;i<7;i++)myalias2[i]='\0'; + for (i = 0; i < 7; i++) + mycallsign[i] = '\0'; + for (i = 0; i < 7; i++) + myalias[i] = '\0'; + for (i = 0; i < 7; i++) + mycallsign2[i] = '\0'; + for (i = 0; i < 7; i++) + myalias2[i] = '\0'; digi = 1; ttyspeed = 9600; loglevel = 0; bc_interval = 0; - bc_text[0]='\0'; + bc_text[0] = '\0'; bc_every = 0; my_udp = htons(0); udp_mode = 0; @@ -65,8 +68,7 @@ config_init() /* Open and read the config file */ -void -config_read(f) +void config_read(f) char *f; { FILE *cf; @@ -74,252 +76,287 @@ char *f; int errflag, e, lineno; char *fname; - if (f) fname = f; - else fname = CONF_AX25IPD_FILE; + if (f) + fname = f; + else + fname = CONF_AX25IPD_FILE; - if((cf = fopen(fname,"r"))==NULL) { - fprintf(stderr,"Config file %s not found or could not be opened\n",fname); + if ((cf = fopen(fname, "r")) == NULL) { + fprintf(stderr, + "Config file %s not found or could not be opened\n", + fname); exit(1); } errflag = 0; lineno = 0; - while(fgets(buf, 255, cf)!=NULL) { + while (fgets(buf, 255, cf) != NULL) { strcpy(cbuf, buf); lineno++; - if((e = parse_line(buf)) < 0) { - fprintf(stderr,"Config error at line %d: ",lineno); - if(e==-1)fprintf(stderr,"Missing argument\n"); - else if(e==-2)fprintf(stderr,"Bad callsign format\n"); - else if(e==-3)fprintf(stderr,"Bad option - on/off\n"); - else if(e==-4)fprintf(stderr,"Bad option - tnc/digi\n"); - else if(e==-5)fprintf(stderr,"Host not known\n"); - else if(e==-6)fprintf(stderr,"Unknown command\n"); - else if(e==-7)fprintf(stderr,"Text string too long\n"); - else if(e==-8)fprintf(stderr,"Bad option - every/after\n"); - else if(e==-9)fprintf(stderr,"Bad option - ip/udp\n"); - else fprintf(stderr,"Unknown error\n"); - fprintf(stderr,"%s",cbuf); + if ((e = parse_line(buf)) < 0) { + fprintf(stderr, "Config error at line %d: ", + lineno); + if (e == -1) + fprintf(stderr, "Missing argument\n"); + else if (e == -2) + fprintf(stderr, "Bad callsign format\n"); + else if (e == -3) + fprintf(stderr, "Bad option - on/off\n"); + else if (e == -4) + fprintf(stderr, "Bad option - tnc/digi\n"); + else if (e == -5) + fprintf(stderr, "Host not known\n"); + else if (e == -6) + fprintf(stderr, "Unknown command\n"); + else if (e == -7) + fprintf(stderr, "Text string too long\n"); + else if (e == -8) + fprintf(stderr, + "Bad option - every/after\n"); + else if (e == -9) + fprintf(stderr, "Bad option - ip/udp\n"); + else + fprintf(stderr, "Unknown error\n"); + fprintf(stderr, "%s", cbuf); errflag++; } } - if(errflag)exit(1); + if (errflag) + exit(1); - if(strlen(ttydevice)==0) { - fprintf(stderr,"No device specified in config file\n"); + if (strlen(ttydevice) == 0) { + fprintf(stderr, "No device specified in config file\n"); exit(1); } - if((udp_mode == 0) && (ip_mode == 0)) { - fprintf(stderr,"Must specify ip and/or udp sockets\n"); + if ((udp_mode == 0) && (ip_mode == 0)) { + fprintf(stderr, "Must specify ip and/or udp sockets\n"); exit(1); } - if(digi) { - if(mycallsign[0]=='\0') { - fprintf(stderr,"No mycall line in config file\n"); + if (digi) { + if (mycallsign[0] == '\0') { + fprintf(stderr, "No mycall line in config file\n"); exit(1); } } - if((digi) && (dual_port)) { - if(mycallsign2[0]=='\0') { - fprintf(stderr,"No mycall2 line in config file\n"); + if ((digi) && (dual_port)) { + if (mycallsign2[0] == '\0') { + fprintf(stderr, + "No mycall2 line in config file\n"); exit(1); } } } /* Process each line from the config file. The return value is encoded. */ -int -parse_line(buf) +int parse_line(buf) char *buf; { char *p, *q; unsigned char tcall[7], tip[4]; struct hostent *he; - int i,j, uport; + int i, j, uport; unsigned int flags; p = strtok(buf, " \t\n\r"); - if(p==NULL)return 0; - if(*p=='#')return 0; + if (p == NULL) + return 0; + if (*p == '#') + return 0; - if(strcmp(p,"mycall")==0) { + if (strcmp(p, "mycall") == 0) { q = strtok(NULL, " \t\n\r"); - if(q==NULL)return -1; - if(a_to_call(q, mycallsign)!=0)return -2; + if (q == NULL) + return -1; + if (a_to_call(q, mycallsign) != 0) + return -2; return 0; - } else if(strcmp(p,"mycall2")==0) { + } else if (strcmp(p, "mycall2") == 0) { q = strtok(NULL, " \t\n\r"); - if(q==NULL)return -1; - if(a_to_call(q, mycallsign2)!=0)return -2; + if (q == NULL) + return -1; + if (a_to_call(q, mycallsign2) != 0) + return -2; return 0; - } else if(strcmp(p,"myalias")==0) { + } else if (strcmp(p, "myalias") == 0) { q = strtok(NULL, " \t\n\r"); - if(q==NULL)return -1; - if(a_to_call(q, myalias)!=0)return -2; + if (q == NULL) + return -1; + if (a_to_call(q, myalias) != 0) + return -2; dual_port = 1; - if(mycallsign2[0]=='\0') { - dual_port = 0; + if (mycallsign2[0] == '\0') { + dual_port = 0; } return 0; - } else if(strcmp(p,"myalias2")==0) { + } else if (strcmp(p, "myalias2") == 0) { q = strtok(NULL, " \t\n\r"); - if(q==NULL)return -1; - if(a_to_call(q, myalias2)!=0)return -2; + if (q == NULL) + return -1; + if (a_to_call(q, myalias2) != 0) + return -2; return 0; - } else if(strcmp(p,"device")==0) { + } else if (strcmp(p, "device") == 0) { q = strtok(NULL, " \t\n\r"); - if(q==NULL)return -1; + if (q == NULL) + return -1; strcpy(ttydevice, q); return 0; - } else if(strcmp(p,"mode")==0) { + } else if (strcmp(p, "mode") == 0) { q = strtok(NULL, " \t\n\r"); - if(q==NULL)return -1; - if(strcmp(q,"digi")==0) digi = 1; - else if(strcmp(q,"tnc")==0) digi = 0; - else return -4; + if (q == NULL) + return -1; + if (strcmp(q, "digi") == 0) + digi = 1; + else if (strcmp(q, "tnc") == 0) + digi = 0; + else + return -4; return 0; - } else if(strcmp(p,"speed")==0) { + } else if (strcmp(p, "speed") == 0) { q = strtok(NULL, " \t\n\r"); - if(q==NULL)return -1; + if (q == NULL) + return -1; ttyspeed = atoi(q); return 0; - } else if(strcmp(p,"socket")==0) { + } else if (strcmp(p, "socket") == 0) { q = strtok(NULL, " \t\n\r"); - if (q==NULL) + if (q == NULL) return -1; - if (strcmp(q,"ip")==0) { + if (strcmp(q, "ip") == 0) { ip_mode = 1; - } - else if(strcmp(q,"udp")==0) { + } else if (strcmp(q, "udp") == 0) { udp_mode = 1; my_udp = htons(DEFAULT_UDP_PORT); q = strtok(NULL, " \t\n\r"); - if (q!=NULL) { + if (q != NULL) { i = atoi(q); - if (i>0) + if (i > 0) my_udp = htons(i); } - } - else + } else return -9; return 0; - } else if(strcmp(p,"beacon")==0) { + } else if (strcmp(p, "beacon") == 0) { q = strtok(NULL, " \t\n\r"); - if (q==NULL) + if (q == NULL) return -1; - if (strcmp(q,"every")==0) + if (strcmp(q, "every") == 0) bc_every = 1; - else if (strcmp(q,"after")==0) + else if (strcmp(q, "after") == 0) bc_every = 0; else return -8; q = strtok(NULL, " \t\n\r"); - if (q==NULL) + if (q == NULL) return -1; bc_interval = atoi(q); return 0; /* This next one is a hack!!!!!! watch out!!!! */ - } else if(strcmp(p,"btext")==0) { + } else if (strcmp(p, "btext") == 0) { q = p + strlen(p) + 1; - if(strlen(q) < 2) return -1; /* line ends with a \n */ - if(strlen(q) > sizeof bc_text)return -7; - q[strlen(q)-1]='\0'; + if (strlen(q) < 2) + return -1; /* line ends with a \n */ + if (strlen(q) > sizeof bc_text) + return -7; + q[strlen(q) - 1] = '\0'; strcpy(bc_text, q); return 0; - } else if(strcmp(p,"loglevel")==0) { + } else if (strcmp(p, "loglevel") == 0) { q = strtok(NULL, " \t\n\r"); - if(q==NULL)return -1; + if (q == NULL) + return -1; loglevel = atoi(q); return 0; - } else if(strcmp(p,"route")==0) { + } else if (strcmp(p, "route") == 0) { uport = 0; flags = 0; q = strtok(NULL, " \t\n\r"); - if(q==NULL) + if (q == NULL) return -1; - if(a_to_call(q, tcall)!=0) + if (a_to_call(q, tcall) != 0) return -2; q = strtok(NULL, " \t\n\r"); - if(q==NULL) + if (q == NULL) return -1; he = gethostbyname(q); - if(he!=NULL) { + if (he != NULL) { memcpy(tip, he->h_addr_list[0], 4); - } else { /* maybe user specified a numeric addr? */ + } else { /* maybe user specified a numeric addr? */ j = inet_addr(q); - if(j==-1) - return -5; /* if -1, bad deal! */ - memcpy(tip, (char *)&j, 4); + if (j == -1) + return -5; /* if -1, bad deal! */ + memcpy(tip, (char *) &j, 4); } - while((q = strtok(NULL, " \t\n\r"))!=NULL) { - if(strcmp(q,"udp")==0) { + while ((q = strtok(NULL, " \t\n\r")) != NULL) { + if (strcmp(q, "udp") == 0) { uport = DEFAULT_UDP_PORT; q = strtok(NULL, " \t\n\r"); - if(q!=NULL) { + if (q != NULL) { i = atoi(q); - if(i>0) + if (i > 0) uport = i; } } else { /* Test for broadcast flag */ - if (strchr(q,'b')) { - flags|=AXRT_BCAST; + if (strchr(q, 'b')) { + flags |= AXRT_BCAST; } /* Test for Default flag */ - if (strchr(q,'d')) { - flags|=AXRT_DEFAULT; + if (strchr(q, 'd')) { + flags |= AXRT_DEFAULT; } } } route_add(tip, tcall, uport, flags); return 0; - } else if(strcmp(p,"broadcast")==0) { + } else if (strcmp(p, "broadcast") == 0) { - while ((q = strtok(NULL, " \t\n\r"))!=NULL) { - if (a_to_call(q, tcall)!=0) + while ((q = strtok(NULL, " \t\n\r")) != NULL) { + if (a_to_call(q, tcall) != 0) return -2; bcast_add(tcall); } return 0; - } else if(strcmp(p,"param")==0) { + } else if (strcmp(p, "param") == 0) { q = strtok(NULL, " \t\n\r"); - if(q==NULL)return -1; + if (q == NULL) + return -1; i = atoi(q); q = strtok(NULL, " \t\n\r"); - if(q==NULL)return -1; + if (q == NULL) + return -1; j = atoi(q); - param_add(i,j); + param_add(i, j); return 0; } return -999; } /* Convert ascii callsign to internal format */ -int -a_to_call(text, tcall) +int a_to_call(text, tcall) char *text; unsigned char *tcall; { @@ -327,32 +364,35 @@ unsigned char *tcall; int ssid; unsigned char c; - if(strlen(text)==0)return -1; + if (strlen(text) == 0) + return -1; ssid = 0; - for(i=0;i<6;i++) { - tcall[i]=(' '<<1); + for (i = 0; i < 6; i++) { + tcall[i] = (' ' << 1); } tcall[6] = '\0'; - for(i=0;i<strlen(text);i++) { + for (i = 0; i < strlen(text); i++) { c = text[i]; - if(c=='-') { - ssid = atoi(&text[i+1]); - if(ssid>15)return -1; - tcall[6] = (ssid<<1); + if (c == '-') { + ssid = atoi(&text[i + 1]); + if (ssid > 15) + return -1; + tcall[6] = (ssid << 1); return 0; } - if(islower(c))c = toupper(c); - if(i>5)return -1; - tcall[i]=(c<<1); + if (islower(c)) + c = toupper(c); + if (i > 5) + return -1; + tcall[i] = (c << 1); } return 0; } /* Convert internal callsign to printable format */ -char * -call_to_a(tcall) +char *call_to_a(tcall) unsigned char *tcall; { int i; @@ -360,17 +400,18 @@ unsigned char *tcall; char *tptr; static char t[10]; - for(i=0,tptr=t;i<6;i++) { - if(tcall[i]==(' '<<1))break; - *tptr = tcall[i]>>1; + for (i = 0, tptr = t; i < 6; i++) { + if (tcall[i] == (' ' << 1)) + break; + *tptr = tcall[i] >> 1; tptr++; } - ssid = (tcall[6]>>1)&0x0f; - if(ssid>0) { + ssid = (tcall[6] >> 1) & 0x0f; + if (ssid > 0) { *tptr = '-'; tptr++; - if(ssid>9) { + if (ssid > 9) { *tptr = '1'; tptr++; ssid -= 10; @@ -384,21 +425,25 @@ unsigned char *tcall; } /* print the configuration data out */ -void -dump_config() +void dump_config() { LOGL1("\nCurrent configuration:\n"); - if(ip_mode) LOGL1(" socket ip\n"); - if(udp_mode)LOGL1(" socket udp on port %d\n", ntohs(my_udp)); + if (ip_mode) + LOGL1(" socket ip\n"); + if (udp_mode) + LOGL1(" socket udp on port %d\n", ntohs(my_udp)); LOGL1(" mode %s\n", digi ? "digi" : "tnc"); LOGL1(" device %s\n", ttydevice); LOGL1(" speed %d\n", ttyspeed); - if(digi)LOGL1(" mycall %s\n", call_to_a(mycallsign)); - if(digi && myalias[0])LOGL1(" myalias %s\n", call_to_a(myalias)); - if(bc_interval>0) { - LOGL1(" beacon %s %d\n", bc_every ? "every" : "after", bc_interval); + if (digi) + LOGL1(" mycall %s\n", call_to_a(mycallsign)); + if (digi && myalias[0]) + LOGL1(" myalias %s\n", call_to_a(myalias)); + if (bc_interval > 0) { + LOGL1(" beacon %s %d\n", bc_every ? "every" : "after", + bc_interval); LOGL1(" btext %s\n", bc_text); } LOGL1(" loglevel %d\n", loglevel); - (void)fflush(stdout); + (void) fflush(stdout); } diff --git a/ax25ipd/crc.c b/ax25ipd/crc.c index ff07195..f6fc565 100644 --- a/ax25ipd/crc.c +++ b/ax25ipd/crc.c @@ -30,57 +30,57 @@ typedef unsigned short u16; * FCS lookup table as calculated by the table generator in section 2. */ static u16 fcstab[256] = { - 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, - 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, - 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, - 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, - 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, - 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, - 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, - 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, - 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, - 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, - 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, - 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, - 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, - 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, - 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, - 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, - 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, - 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, - 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, - 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, - 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, - 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, - 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, - 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, - 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, - 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, - 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, - 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, - 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, - 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, - 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, - 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 + 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, + 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, + 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, + 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, + 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, + 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, + 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, + 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, + 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, + 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, + 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, + 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, + 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, + 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, + 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, + 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, + 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, + 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, + 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, + 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, + 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, + 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, + 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, + 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, + 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, + 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, + 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, + 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, + 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, + 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, + 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, + 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 }; -#define PPPINITFCS 0xffff /* Initial FCS value */ -#define PPPGOODFCS 0xf0b8 /* Good final FCS value */ +#define PPPINITFCS 0xffff /* Initial FCS value */ +#define PPPGOODFCS 0xf0b8 /* Good final FCS value */ /* * Calculate a new fcs given the current fcs and the new data. */ u16 pppfcs(fcs, cp, len) - register u16 fcs; - register unsigned char *cp; - register int len; +register u16 fcs; +register unsigned char *cp; +register int len; { /* ASSERT(sizeof (u16) == 2); */ /* ASSERT(((u16) -1) > 0); */ - while (len--) - fcs = (fcs >> 8) ^ fcstab[(fcs ^ *cp++) & 0xff]; + while (len--) + fcs = (fcs >> 8) ^ fcstab[(fcs ^ *cp++) & 0xff]; - return (fcs); + return (fcs); } /* @@ -94,8 +94,7 @@ u16 pppfcs(fcs, cp, len) */ /* Return the computed CRC */ -unsigned short int -compute_crc(buf, l) +unsigned short int compute_crc(buf, l) unsigned char *buf; int l; { @@ -108,8 +107,7 @@ int l; } /* Return true if the CRC is correct */ -int -ok_crc(buf, l) +int ok_crc(buf, l) unsigned char *buf; int l; { @@ -127,45 +125,52 @@ int l; */ #ifdef TEST -void -main() +void main() { unsigned char buf[258]; int l, i; unsigned short int f; l = 256; - for(i=0;i<l;i++){ - buf[i]=i; + for (i = 0; i < l; i++) { + buf[i] = i; } - f = compute_crc(buf,l); - printf("computed crc=0x%04x\n",f); + f = compute_crc(buf, l); + printf("computed crc=0x%04x\n", f); - buf[l]=(f&0xff); - buf[l+1]=(f>>8); + buf[l] = (f & 0xff); + buf[l + 1] = (f >> 8); printf("crc should be good... "); - i = ok_crc(buf, l+2); - if(i)printf("CRC declared OK\n"); - else printf("CRC declared bad\n"); - - buf[l+1]=(f&0xff); - buf[l]=(f>>8); + i = ok_crc(buf, l + 2); + if (i) + printf("CRC declared OK\n"); + else + printf("CRC declared bad\n"); + + buf[l + 1] = (f & 0xff); + buf[l] = (f >> 8); printf("reversed the CRC byte order... CRC should be bad..."); - i = ok_crc(buf, l+2); - if(i)printf("CRC declared OK\n"); - else printf("CRC declared bad\n"); + i = ok_crc(buf, l + 2); + if (i) + printf("CRC declared OK\n"); + else + printf("CRC declared bad\n"); printf("changed the frame length... CRC should be bad..."); - i = ok_crc(buf, l+1); - if(i)printf("CRC declared OK\n"); - else printf("CRC declared bad\n"); + i = ok_crc(buf, l + 1); + if (i) + printf("CRC declared OK\n"); + else + printf("CRC declared bad\n"); - buf[0]-=1; + buf[0] -= 1; printf("corrupted the data... CRC should be bad..."); - i = ok_crc(buf, l+2); - if(i)printf("CRC declared OK\n"); - else printf("CRC declared bad\n"); + i = ok_crc(buf, l + 2); + if (i) + printf("CRC declared OK\n"); + else + printf("CRC declared bad\n"); } #endif diff --git a/ax25ipd/io.c b/ax25ipd/io.c index 88a4923..6371e5e 100644 --- a/ax25ipd/io.c +++ b/ax25ipd/io.c @@ -46,12 +46,12 @@ struct termios nterm; #ifdef USE_TERMIO #include <termio.h> -struct termio nterm; +struct termio nterm; #endif #ifdef USE_SGTTY #include <sys/ioctl.h> -struct sgttyb nterm; +struct sgttyb nterm; #endif int ttyfd = -1; @@ -88,8 +88,7 @@ time_t last_bc_time; * Initialize the io variables */ -void -io_init() +void io_init() { /* @@ -97,23 +96,22 @@ io_init() * will be able to support a re-initialization if sent a SIGHUP. */ - if(ttyfd>=0){ + if (ttyfd >= 0) { close(ttyfd); ttyfd = -1; } - if(sock>=0){ + if (sock >= 0) { close(sock); sock = -1; } - if(udpsock>=0){ + if (udpsock >= 0) { close(udpsock); udpsock = -1; } - #ifdef USE_ICMP - if(icmpsock>=0){ + if (icmpsock >= 0) { close(icmpsock); icmpsock = -1; } @@ -124,13 +122,13 @@ io_init() * address structure. Since both to and from are static, they are * already clear. */ - bzero( (char *)&to, sizeof(struct sockaddr) ); + bzero((char *) &to, sizeof(struct sockaddr)); to.sin_family = AF_INET; - bzero( (char *)&from, sizeof(struct sockaddr) ); + bzero((char *) &from, sizeof(struct sockaddr)); from.sin_family = AF_INET; - bzero( (char *)&udpbind, sizeof(struct sockaddr) ); + bzero((char *) &udpbind, sizeof(struct sockaddr)); udpbind.sin_family = AF_INET; } @@ -142,9 +140,9 @@ void io_open() { int baudrate; - if(ip_mode){ + if (ip_mode) { sock = socket(AF_INET, SOCK_RAW, IPPROTO_AX25); - if (sock<0) { + if (sock < 0) { perror("opening raw socket"); exit(1); } @@ -152,10 +150,9 @@ void io_open() perror("setting non-blocking I/O on raw socket"); exit(1); } - #ifdef USE_ICMP icmpsock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); - if (icmpsock<0) { + if (icmpsock < 0) { perror("opening raw ICMP socket"); exit(1); } @@ -166,9 +163,9 @@ void io_open() #endif } - if(udp_mode){ + if (udp_mode) { udpsock = socket(AF_INET, SOCK_DGRAM, 0); - if (udpsock<0) { + if (udpsock < 0) { perror("opening udp socket"); exit(1); } @@ -182,14 +179,16 @@ void io_open() */ udpbind.sin_addr.s_addr = INADDR_ANY; udpbind.sin_port = my_udp; - if(bind(udpsock,(struct sockaddr *)&udpbind,sizeof udpbind)<0){ + if (bind + (udpsock, (struct sockaddr *) &udpbind, + sizeof udpbind) < 0) { perror("binding udp socket"); exit(1); } } ttyfd = open(ttydevice, O_RDWR, 0); - if (ttyfd<0) { + if (ttyfd < 0) { perror("opening tty device"); exit(1); } @@ -197,257 +196,416 @@ void io_open() perror("setting non-blocking I/O on tty device"); exit(1); } - #ifdef USE_TERMIOS - if(ioctl(ttyfd, TCGETS, &nterm)<0){ + if (ioctl(ttyfd, TCGETS, &nterm) < 0) { #endif #ifdef USE_TERMIO - if(ioctl(ttyfd, TCGETA, &nterm)<0){ + if (ioctl(ttyfd, TCGETA, &nterm) < 0) { #endif #ifdef USE_SGTTY - if(ioctl(ttyfd, TIOCGETP, &nterm)<0){ + if (ioctl(ttyfd, TIOCGETP, &nterm) < 0) { #endif - perror("fetching tty device parameters"); - exit(1); - } + perror("fetching tty device parameters"); + exit(1); + } - if(ttyspeed==50)baudrate=B50; - else if(ttyspeed==50)baudrate=B50; - else if(ttyspeed==75)baudrate=B75; - else if(ttyspeed==110)baudrate=B110; - else if(ttyspeed==134)baudrate=B134; - else if(ttyspeed==150)baudrate=B150; - else if(ttyspeed==200)baudrate=B200; - else if(ttyspeed==300)baudrate=B300; - else if(ttyspeed==600)baudrate=B600; - else if(ttyspeed==1200)baudrate=B1200; - else if(ttyspeed==1800)baudrate=B1800; - else if(ttyspeed==2400)baudrate=B2400; - else if(ttyspeed==4800)baudrate=B4800; - else if(ttyspeed==9600)baudrate=B9600; + if (ttyspeed == 50) + baudrate = B50; + else if (ttyspeed == 50) + baudrate = B50; + else if (ttyspeed == 75) + baudrate = B75; + else if (ttyspeed == 110) + baudrate = B110; + else if (ttyspeed == 134) + baudrate = B134; + else if (ttyspeed == 150) + baudrate = B150; + else if (ttyspeed == 200) + baudrate = B200; + else if (ttyspeed == 300) + baudrate = B300; + else if (ttyspeed == 600) + baudrate = B600; + else if (ttyspeed == 1200) + baudrate = B1200; + else if (ttyspeed == 1800) + baudrate = B1800; + else if (ttyspeed == 2400) + baudrate = B2400; + else if (ttyspeed == 4800) + baudrate = B4800; + else if (ttyspeed == 9600) + baudrate = B9600; #ifdef B19200 - else if(ttyspeed==19200)baudrate=B19200; + else if (ttyspeed == 19200) + baudrate = B19200; #else #ifdef EXTA - else if(ttyspeed==19200)baudrate=EXTA; + else if (ttyspeed == 19200) + baudrate = EXTA; #endif #endif #ifdef B38400 - else if(ttyspeed==38400)baudrate=B38400; + else if (ttyspeed == 38400) + baudrate = B38400; #else #ifdef EXTB - else if(ttyspeed==38400)baudrate=EXTB; + else if (ttyspeed == 38400) + baudrate = EXTB; #endif #endif - else baudrate = B9600; + else + baudrate = B9600; #ifdef USE_SGTTY - nterm.sg_flags = (RAW | ANYP); - nterm.sg_ispeed = baudrate; - nterm.sg_ospeed = baudrate; + nterm.sg_flags = (RAW | ANYP); + nterm.sg_ispeed = baudrate; + nterm.sg_ospeed = baudrate; #else - nterm.c_iflag = 0; - nterm.c_oflag = 0; - nterm.c_cflag = baudrate | CS8 | CREAD | CLOCAL; - nterm.c_lflag = 0; - nterm.c_cc[VMIN] = 0; - nterm.c_cc[VTIME] = 0; + nterm.c_iflag = 0; + nterm.c_oflag = 0; + nterm.c_cflag = baudrate | CS8 | CREAD | CLOCAL; + nterm.c_lflag = 0; + nterm.c_cc[VMIN] = 0; + nterm.c_cc[VTIME] = 0; #endif #ifdef USE_TERMIOS - if(ioctl(ttyfd, TCSETS, &nterm)<0){ + if (ioctl(ttyfd, TCSETS, &nterm) < 0) { #endif #ifdef USE_TERMIO - if(ioctl(ttyfd, TCSETA, &nterm)<0){ + if (ioctl(ttyfd, TCSETA, &nterm) < 0) { #endif #ifdef USE_SGTTY - if(ioctl(ttyfd, TIOCSETP, &nterm)<0){ + if (ioctl + (ttyfd, TIOCSETP, + &nterm) < 0) { #endif - perror("setting tty device parameters"); - exit(1); - } + perror + ("setting tty device parameters"); + exit(1); + } - if(digi)send_params(); + if (digi) + send_params(); - last_bc_time = 0; /* force immediate id */ -} + last_bc_time = 0; /* force immediate id */ + } /* * Start up and run the I/O mechanisms. * run in a loop, using the select call to handle input. */ -void -io_start() -{ - int n, nb, hdr_len; - fd_set readfds; - unsigned char buf[MAX_FRAME]; - struct timeval wait; - struct iphdr *ipptr; - time_t now; - - for(;;){ - - if((bc_interval>0)&&digi){ - now = time(NULL); - if (last_bc_time + bc_interval < now){ - last_bc_time = now; - LOGL4("iostart: BEACON\n"); - do_beacon(); - } - } - - wait.tv_sec = 10; /* lets us keep the beacon going */ - wait.tv_usec = 0; - - FD_ZERO(&readfds); - - FD_SET(ttyfd, &readfds); - - if(ip_mode){ - FD_SET(sock, &readfds); + void io_start() { + int n, nb, hdr_len; + fd_set readfds; + unsigned char buf[MAX_FRAME]; + struct timeval wait; + struct iphdr *ipptr; + time_t now; + + for (;;) { + + if ((bc_interval > 0) + && digi) { + now = time(NULL); + if (last_bc_time + + bc_interval < + now) { + last_bc_time + = now; + LOGL4 + ("iostart: BEACON\n"); + do_beacon + (); + } + } + + wait.tv_sec = 10; /* lets us keep the beacon going */ + wait.tv_usec = 0; + + FD_ZERO(&readfds); + + FD_SET(ttyfd, &readfds); + + if (ip_mode) { + FD_SET(sock, + &readfds); #ifdef USE_ICMP - FD_SET(icmpsock, &readfds); + FD_SET(icmpsock, + &readfds); #endif - } - - if(udp_mode){ - FD_SET(udpsock, &readfds); - } - - nb = select(FD_SETSIZE,&readfds,(fd_set *)0,(fd_set *)0,&wait); - - if(nb < 0){ - if(errno == EINTR)continue; /* Ignore */ - perror("select"); - exit(1); - } - - if(nb == 0){ - fflush(stdout); - fflush(stderr); - /* just so we go back to the top of the loop! */ - continue; - } - - if(FD_ISSET(ttyfd, &readfds)){ - do { - n = read(ttyfd, buf, MAX_FRAME); - } while(io_error(n, buf, n, READ_MSG, TTY_MODE)); - LOGL4("ttydata l=%d\n",n); - if(n>0)assemble_kiss(buf,n); + } + + if (udp_mode) { + FD_SET(udpsock, + &readfds); + } + + nb = select + (FD_SETSIZE, + &readfds, + (fd_set *) 0, + (fd_set *) 0, &wait); + + if (nb < 0) { + if (errno == EINTR) + continue; /* Ignore */ + perror("select"); + exit(1); + } + + if (nb == 0) { + fflush(stdout); + fflush(stderr); + /* just so we go back to the top of the loop! */ + continue; + } + + if (FD_ISSET + (ttyfd, &readfds)) { + do { + n = read + (ttyfd, + buf, + MAX_FRAME); + } + while (io_error + (n, buf, n, + READ_MSG, + TTY_MODE)); + LOGL4 + ("ttydata l=%d\n", + n); + if (n > 0) + assemble_kiss + (buf, + n); /* * If we are in "beacon after" mode, reset the "last_bc_time" each time * we hear something on the channel. */ - if(!bc_every)last_bc_time = time(NULL); - } - - if(udp_mode){ - if(FD_ISSET(udpsock, &readfds)){ - do { - fromlen = sizeof from; - n = recvfrom(udpsock, buf, MAX_FRAME, 0, - (struct sockaddr *)&from, &fromlen); - } while(io_error(n, buf, n, READ_MSG, UDP_MODE)); - LOGL4("udpdata from=%s port=%d l=%d\n", - (char *)inet_ntoa(from.sin_addr), - ntohs(from.sin_port), n); - stats.udp_in++; - if(n>0)from_ip(buf, n); - } - } /* if udp_mode */ - - if(ip_mode){ - if(FD_ISSET(sock, &readfds)){ - do{ - fromlen = sizeof from; - n = recvfrom(sock, buf, MAX_FRAME, 0, - (struct sockaddr *)&from, &fromlen); - } while(io_error(n, buf, n, READ_MSG, IP_MODE)); - ipptr = (struct iphdr *)buf; - hdr_len = 4 * ipptr->ihl; - LOGL4("ipdata from=%s l=%d, hl=%d\n", - (char *)inet_ntoa(from.sin_addr), - n, hdr_len); - stats.ip_in++; - if(n>hdr_len)from_ip(buf+hdr_len, n-hdr_len); - } - + if (!bc_every) + last_bc_time + = + time + (NULL); + } + + if (udp_mode) { + if (FD_ISSET + (udpsock, + &readfds)) { + do { + fromlen + = + sizeof + from; + n = recvfrom(udpsock, buf, MAX_FRAME, 0, (struct sockaddr *) &from, &fromlen); + } + while + (io_error + (n, + buf, + n, + READ_MSG, + UDP_MODE)); + LOGL4 + ("udpdata from=%s port=%d l=%d\n", + (char + *) + inet_ntoa + (from. + sin_addr), + ntohs + (from. + sin_port), + n); + stats. + udp_in++; + if (n > 0) + from_ip + (buf, + n); + } + } + /* if udp_mode */ + if (ip_mode) { + if (FD_ISSET + (sock, + &readfds)) { + do { + fromlen + = + sizeof + from; + n = recvfrom(sock, buf, MAX_FRAME, 0, (struct sockaddr *) &from, &fromlen); + } + while + (io_error + (n, + buf, + n, + READ_MSG, + IP_MODE)); + ipptr = + (struct + iphdr + *) + buf; + hdr_len = + 4 * + ipptr-> + ihl; + LOGL4 + ("ipdata from=%s l=%d, hl=%d\n", + (char + *) + inet_ntoa + (from. + sin_addr), + n, + hdr_len); + stats. + ip_in++; + if (n > + hdr_len) + from_ip + (buf + + + hdr_len, + n + - + hdr_len); + } #ifdef USE_ICMP - if(FD_ISSET(icmpsock, &readfds)){ - do { - fromlen = sizeof from; - n = recvfrom(icmpsock, buf, MAX_FRAME, 0, - (struct sockaddr *)&from, &fromlen); - } while(io_error(n, buf, n, READ_MSG, ICMP_MODE)); - ipptr = (struct iphdr *)buf; - hdr_len = 4 * ipptr->ihl; - LOGL4("icmpdata from=%s l=%d, hl=%d\n", - (char *)inet_ntoa(from.sin_addr), - n, hdr_len); - } + if (FD_ISSET + (icmpsock, + &readfds)) { + do { + fromlen + = + sizeof + from; + n = recvfrom(icmpsock, buf, MAX_FRAME, 0, (struct sockaddr *) &from, &fromlen); + } + while + (io_error + (n, + buf, + n, + READ_MSG, + ICMP_MODE)); + ipptr = + (struct + iphdr + *) + buf; + hdr_len = + 4 * + ipptr-> + ihl; + LOGL4 + ("icmpdata from=%s l=%d, hl=%d\n", + (char + *) + inet_ntoa + (from. + sin_addr), + n, + hdr_len); + } #endif - } /* if ip_mode */ - - } /* for forever */ -} + } + /* if ip_mode */ + } /* for forever */ + } /* Send an IP frame */ -void -send_ip(buf, l, targetip) -unsigned char *buf; -int l; -unsigned char *targetip; -{ - int n; - - if(l<=0)return; - memcpy((char *)&to.sin_addr, targetip, 4); - memcpy((char *)&to.sin_port, &targetip[4], 2); - LOGL4("sendipdata to=%s %s %d l=%d\n", - (char *)inet_ntoa(to.sin_addr), - to.sin_port ? "udp" : "ip", - ntohs(to.sin_port), l); - if(to.sin_port){ - if(udp_mode){ - stats.udp_out++; - do { - n = sendto(udpsock, buf, l, 0, - (struct sockaddr *)&to, sizeof to); - } while(io_error(n, buf, l, SEND_MSG, UDP_MODE)); - } - } else { - if(ip_mode){ - stats.ip_out++; - do { - n = sendto(sock, buf, l, 0, - (struct sockaddr *)&to, sizeof to); - } while(io_error(n, buf, l, SEND_MSG, IP_MODE)); - } - } -} + void send_ip(buf, l, targetip) + unsigned char *buf; + int l; + unsigned char *targetip; + { + int n; + + if (l <= 0) + return; + memcpy((char *) &to.sin_addr, + targetip, 4); + memcpy((char *) &to.sin_port, + &targetip[4], 2); + LOGL4 + ("sendipdata to=%s %s %d l=%d\n", + (char *) inet_ntoa(to. + sin_addr), + to.sin_port ? "udp" : "ip", + ntohs(to.sin_port), l); + if (to.sin_port) { + if (udp_mode) { + stats.udp_out++; + do { + n = sendto + (udpsock, + buf, + l, 0, + (struct + sockaddr + *) + &to, + sizeof + to); + } + while (io_error + (n, buf, l, + SEND_MSG, + UDP_MODE)); + } + } else { + if (ip_mode) { + stats.ip_out++; + do { + n = sendto + (sock, + buf, + l, 0, + (struct + sockaddr + *) + &to, + sizeof + to); + } + while (io_error + (n, buf, l, + SEND_MSG, + IP_MODE)); + } + } + } /* Send a kiss frame */ -void -send_tty(buf, l) -unsigned char *buf; -int l; -{ - int n; - unsigned char *p; - int nc; + void send_tty(buf, l) + unsigned char *buf; + int l; + { + int n; + unsigned char *p; + int nc; - if(l<=0)return; - LOGL4("sendttydata l=%d\tsent: ",l); - stats.kiss_out++; + if (l <= 0) + return; + LOGL4("sendttydata l=%d\tsent: ", + l); + stats.kiss_out++; - p = buf; - nc = l; - n = 0; + p = buf; + nc = l; + n = 0; /* * we have to loop around here because each call to write may write a few @@ -459,116 +617,158 @@ int l; * compile-time options) by having io_error barf when it detects an EAGAIN * error code. */ - do { - if((n>0)&&(n<nc)) { /* did we put only write a bit? */ - p += n; /* point to the new data */ - nc -= n; /* drop the length */ - } - n = write(ttyfd, p, nc); - if(n>0){ - if(n!=nc){ - LOGL4("%d ",n); /* no-one said loglevel 4 */ - } else { - LOGL4("%d\n",n); /* was efficient!!! */ - } - } - } while( ((n>0)&&(n<nc)) || (io_error(n, p, nc, SEND_MSG, TTY_MODE))); -} + do { + if ((n > 0) + && (n < nc)) { /* did we put only write a bit? */ + p += n; /* point to the new data */ + nc -= n; /* drop the length */ + } + n = write(ttyfd, p, nc); + if (n > 0) { + if (n != nc) { + LOGL4("%d ", n); /* no-one said loglevel 4 */ + } else { + LOGL4("%d\n", n); /* was efficient!!! */ + } + } + } + while (((n > 0) && (n < nc)) + || + (io_error + (n, p, nc, SEND_MSG, + TTY_MODE))); + } /* process an I/O error; return true if a retry is needed */ -int -io_error(oops, buf, bufsize, dir, mode) -int oops; /* the error flag; < 0 indicates a problem */ -unsigned char *buf; /* the data in question */ -int bufsize; /* the size of the data buffer */ -int dir; /* the direction; input or output */ -int mode; /* the fd on which we got the error */ -{ + int io_error(oops, buf, bufsize, dir, mode) int oops; /* the error flag; < 0 indicates a problem */ + unsigned char *buf; /* the data in question */ + int bufsize; /* the size of the data buffer */ + int dir; /* the direction; input or output */ + int mode; /* the fd on which we got the error */ + { - if(oops >= 0) return 0; /* do we have an error ? */ + if (oops >= 0) + return 0; /* do we have an error ? */ #ifdef EAGAIN - if(errno == EAGAIN){ - perror("System 5 I/O error!"); - fprintf(stderr,"A System 5 style I/O error was detected. This program requires BSD 4.2\n"); - fprintf(stderr,"behaviour. This is probably a result of compile-time environment.\n"); - exit(3); - } + if (errno == EAGAIN) { + perror + ("System 5 I/O error!"); + fprintf(stderr, + "A System 5 style I/O error was detected. This program requires BSD 4.2\n"); + fprintf(stderr, + "behaviour. This is probably a result of compile-time environment.\n"); + exit(3); + } #endif - if(dir == READ_MSG){ - if(errno == EINTR) return 0; /* never retry read */ - if(errno == EWOULDBLOCK){ - LOGL4("READ would block (?!), sleeping and retrying!\n"); - usleep(100000); /* sleep a bit */ - return 1; /* and retry */ - } - if(mode == IP_MODE){ - perror("reading from raw ip socket"); - exit(2); - } else if(mode == UDP_MODE){ - perror("reading from udp socket"); - exit(2); - } else if(mode == TTY_MODE){ - perror("reading from tty device"); - exit(2); - } else { - perror("reading from unknown I/O"); - exit(2); - } - } else if(dir == SEND_MSG){ - if(errno == EINTR) return 1; /* always retry on writes */ - if(mode == IP_MODE){ - if(errno == EMSGSIZE){ /* msg too big, drop it */ - perror("message dropped on raw ip socket"); - fprintf(stderr,"message was %d bytes long.\n",bufsize); - return 0; - } - if(errno == ENOBUFS){ /* congestion; sleep + retry */ - LOGL4("send congestion on raw ip, sleeping and retrying!\n"); - usleep(100000); - return 1; - } - if(errno == EWOULDBLOCK){ - LOGL4("send on raw ip would block, sleeping and retrying!\n"); - usleep(100000); /* sleep a bit */ - return 1; /* and retry */ - } - perror("writing to raw ip socket"); - exit(2); - } else if(mode == UDP_MODE){ - if(errno == EMSGSIZE){ /* msg too big, drop it */ - perror("message dropped on udp socket"); - fprintf(stderr,"message was %d bytes long.\n",bufsize); - return 0; - } - if(errno == ENOBUFS){ /* congestion; sleep + retry */ - LOGL4("send congestion on udp, sleeping and retrying!\n"); - usleep(100000); - return 1; - } - if(errno == EWOULDBLOCK){ - LOGL4("send on udp would block, sleeping and retrying!\n"); - usleep(100000); /* sleep a bit */ - return 1; /* and retry */ - } - perror("writing to udp socket"); - exit(2); - } else if(mode == TTY_MODE){ - if(errno == EWOULDBLOCK){ - LOGL4("write to tty would block, sleeping and retrying!\n"); - usleep(100000); /* sleep a bit */ - return 1; /* and retry */ - } - perror("writing to tty device"); - exit(2); - } else { - perror("writing to unknown I/O"); - exit(2); - } - } else { - perror("Unknown direction and I/O"); - exit(2); - } - return 0; -} + if (dir == READ_MSG) { + if (errno == EINTR) + return 0; /* never retry read */ + if (errno == EWOULDBLOCK) { + LOGL4 + ("READ would block (?!), sleeping and retrying!\n"); + usleep(100000); /* sleep a bit */ + return 1; /* and retry */ + } + if (mode == IP_MODE) { + perror + ("reading from raw ip socket"); + exit(2); + } else if (mode == + UDP_MODE) { + perror + ("reading from udp socket"); + exit(2); + } else if (mode == + TTY_MODE) { + perror + ("reading from tty device"); + exit(2); + } else { + perror + ("reading from unknown I/O"); + exit(2); + } + } else if (dir == SEND_MSG) { + if (errno == EINTR) + return 1; /* always retry on writes */ + if (mode == IP_MODE) { + if (errno == EMSGSIZE) { /* msg too big, drop it */ + perror + ("message dropped on raw ip socket"); + fprintf + (stderr, + "message was %d bytes long.\n", + bufsize); + return 0; + } + if (errno == ENOBUFS) { /* congestion; sleep + retry */ + LOGL4 + ("send congestion on raw ip, sleeping and retrying!\n"); + usleep + (100000); + return 1; + } + if (errno == + EWOULDBLOCK) { + LOGL4 + ("send on raw ip would block, sleeping and retrying!\n"); + usleep(100000); /* sleep a bit */ + return 1; /* and retry */ + } + perror + ("writing to raw ip socket"); + exit(2); + } else if (mode == + UDP_MODE) { + if (errno == EMSGSIZE) { /* msg too big, drop it */ + perror + ("message dropped on udp socket"); + fprintf + (stderr, + "message was %d bytes long.\n", + bufsize); + return 0; + } + if (errno == ENOBUFS) { /* congestion; sleep + retry */ + LOGL4 + ("send congestion on udp, sleeping and retrying!\n"); + usleep + (100000); + return 1; + } + if (errno == + EWOULDBLOCK) { + LOGL4 + ("send on udp would block, sleeping and retrying!\n"); + usleep(100000); /* sleep a bit */ + return 1; /* and retry */ + } + perror + ("writing to udp socket"); + exit(2); + } else if (mode == + TTY_MODE) { + if (errno == + EWOULDBLOCK) { + LOGL4 + ("write to tty would block, sleeping and retrying!\n"); + usleep(100000); /* sleep a bit */ + return 1; /* and retry */ + } + perror + ("writing to tty device"); + exit(2); + } else { + perror + ("writing to unknown I/O"); + exit(2); + } + } else { + perror + ("Unknown direction and I/O"); + exit(2); + } + return 0; + } diff --git a/ax25ipd/kiss.c b/ax25ipd/kiss.c index 6042cf0..b43d969 100644 --- a/ax25ipd/kiss.c +++ b/ax25ipd/kiss.c @@ -43,8 +43,7 @@ int param_tbl_top; * Initialize the KISS variables */ -void -kiss_init() +void kiss_init() { ifptr = iframe; ifcount = 0; @@ -60,31 +59,33 @@ kiss_init() * frame has been assembled. */ -void -assemble_kiss(buf, l) +void assemble_kiss(buf, l) unsigned char *buf; int l; { int i; unsigned char c; - for(i=0;i<l;i++,buf++){ + for (i = 0; i < l; i++, buf++) { c = *buf; - if(c==FEND){ - if(ifcount>0){ + if (c == FEND) { + if (ifcount > 0) { /* Make sure that the control byte is zero */ - if(*iframe=='\0' || *iframe==0x10) { + if (*iframe == '\0' || *iframe == 0x10) { /* Room for CRC in buffer? */ - if(ifcount < (MAX_FRAME - 2)) { + if (ifcount < (MAX_FRAME - 2)) { stats.kiss_in++; - from_kiss(iframe+1,ifcount-1); + from_kiss(iframe + + 1, ifcount - 1); } else { stats.kiss_toobig++; - LOGL2("assemble_kiss: dumped - frame too large\n"); + LOGL2 + ("assemble_kiss: dumped - frame too large\n"); } } else { stats.kiss_badtype++; - LOGL2("assemble_kiss: dumped - control byte non-zero\n"); + LOGL2 + ("assemble_kiss: dumped - control byte non-zero\n"); } } ifcount = 0; @@ -92,26 +93,27 @@ int l; ifptr = iframe; continue; } - if(c==FESC){ - iescaped=1; + if (c == FESC) { + iescaped = 1; continue; } - if(iescaped){ - if(c==TFEND)c = FEND; - if(c==TFESC)c = FESC; + if (iescaped) { + if (c == TFEND) + c = FEND; + if (c == TFESC) + c = FESC; iescaped = 0; } - if(ifcount < MAX_FRAME){ + if (ifcount < MAX_FRAME) { *ifptr = c; ifptr++; ifcount++; } - } /* for every character in the buffer */ + } /* for every character in the buffer */ } /* convert a standard AX25 frame into a kiss frame */ -void -send_kiss(type, buf, l) +void send_kiss(type, buf, l) unsigned char type; unsigned char *buf; int l; @@ -125,27 +127,27 @@ int l; KISSEMIT(FEND); - if(type==FEND){ + if (type == FEND) { KISSEMIT(FESC); KISSEMIT(TFEND); - }else if (type==FESC){ + } else if (type == FESC) { KISSEMIT(FESC); KISSEMIT(TFESC); - }else { + } else { KISSEMIT(type); } - for(i=0;i<l;i++,buf++){ - if(*buf==FEND){ + for (i = 0; i < l; i++, buf++) { + if (*buf == FEND) { KISSEMIT(FESC); KISSEMIT(TFEND); - }else if (*buf==FESC){ + } else if (*buf == FESC) { KISSEMIT(FESC); KISSEMIT(TFESC); - }else { + } else { KISSEMIT(*buf); } - } /* for each character in the incoming AX25 frame */ + } /* for each character in the incoming AX25 frame */ KISSEMIT(FEND); @@ -153,49 +155,45 @@ int l; } /* Add an entry to the parameter table */ -void -param_add(p, v) +void param_add(p, v) int p; int v; { - if(param_tbl_top >= PTABLE_SIZE){ - fprintf(stderr,"param table is full; entry ignored.\n"); + if (param_tbl_top >= PTABLE_SIZE) { + fprintf(stderr, "param table is full; entry ignored.\n"); } - param_tbl[param_tbl_top].parameter = p&0xff; - param_tbl[param_tbl_top].value = v&0xff; + param_tbl[param_tbl_top].parameter = p & 0xff; + param_tbl[param_tbl_top].value = v & 0xff; LOGL4("added param: %d\t%d\n", - param_tbl[param_tbl_top].parameter, - param_tbl[param_tbl_top].value); + param_tbl[param_tbl_top].parameter, + param_tbl[param_tbl_top].value); param_tbl_top++; return; } /* dump the contents of the parameter table */ -void -dump_params() +void dump_params() { int i; - LOGL1("\n%d parameters\n",param_tbl_top); - for(i=0;i<param_tbl_top;i++){ + LOGL1("\n%d parameters\n", param_tbl_top); + for (i = 0; i < param_tbl_top; i++) { LOGL1(" %d\t%d\n", - param_tbl[i].parameter, - param_tbl[i].value); + param_tbl[i].parameter, param_tbl[i].value); } fflush(stdout); } /* send the parameters to the TNC */ -void -send_params() +void send_params() { int i; unsigned char p, v; - for(i=0;i<param_tbl_top;i++){ + for (i = 0; i < param_tbl_top; i++) { p = param_tbl[i].parameter; v = param_tbl[i].value; send_kiss(p, &v, 1); - LOGL2("send_params: param %d %d\n",p,v); + LOGL2("send_params: param %d %d\n", p, v); } } diff --git a/ax25ipd/process.c b/ax25ipd/process.c index fdf08ad..5767129 100644 --- a/ax25ipd/process.c +++ b/ax25ipd/process.c @@ -29,17 +29,16 @@ #define SETREPEATED(p) (*(p+6))|=0x80 #define SETLAST(p) (*(p+6))|=0x01 -unsigned char bcbuf[256]; /* Must be larger than bc_text!!! */ -int bclen; /* The size of bcbuf */ +unsigned char bcbuf[256]; /* Must be larger than bc_text!!! */ +int bclen; /* The size of bcbuf */ /* * Initialize the process variables */ -void -process_init() +void process_init() { - bclen = -1; /* flag that we need to rebuild the bctext */ + bclen = -1; /* flag that we need to rebuild the bctext */ } /* @@ -65,62 +64,66 @@ process_init() * the IP interface. */ -void -from_kiss(buf, l) +void from_kiss(buf, l) unsigned char *buf; int l; { unsigned char *a, *ipaddr; - if (l<15) { + if (l < 15) { LOGL2("from_kiss: dumped - length wrong!\n"); stats.kiss_tooshort++; return; } - if (loglevel>2) + if (loglevel > 2) dump_ax25frame("from_kiss: ", buf, l); - if(digi) { /* if we are in digi mode */ + if (digi) { /* if we are in digi mode */ a = next_addr(buf); - if(NOT_ME(a)){ + if (NOT_ME(a)) { stats.kiss_not_for_me++; LOGL4("from_kiss: (digi) dumped - not for me\n"); return; } - if (a==buf) { /* must be a digi */ + if (a == buf) { /* must be a digi */ stats.kiss_i_am_dest++; - LOGL2("from_kiss: (digi) dumped - I am destination!\n"); + LOGL2 + ("from_kiss: (digi) dumped - I am destination!\n"); return; } SETREPEATED(a); a = next_addr(buf); /* find who gets it after us */ - } else { /* must be tnc mode */ + } else { /* must be tnc mode */ a = next_addr(buf); #ifdef TNC_FILTER if (IS_ME(a)) { - LOGL2("from_kiss: (tnc) dumped - addressed to self!\n"); + LOGL2 + ("from_kiss: (tnc) dumped - addressed to self!\n"); return; } #endif - } /* end of tnc mode */ + } /* end of tnc mode */ /* Lookup the IP address for this route */ ipaddr = call_to_ip(a); - if (ipaddr==NULL) { + if (ipaddr == NULL) { if (is_call_bcast(a)) { /* Warning - assuming buffer has room for 2 bytes */ - add_crc(buf, l); l+=2; + add_crc(buf, l); + l += 2; send_broadcast(buf, l); } else { stats.kiss_no_ip_addr++; - LOGL2("from_kiss: dumped - cannot figure out where to send this!\n"); + LOGL2 + ("from_kiss: dumped - cannot figure out where to send this!\n"); } return; } else { /* Warning - assuming buffer has room for 2 bytes */ - add_crc(buf, l); l+=2; + add_crc(buf, l); + l += 2; send_ip(buf, l, ipaddr); if (is_call_bcast(a)) { send_broadcast(buf, l); @@ -144,54 +147,56 @@ int l; * We simply send the packet to the KISS send routine. */ -void -from_ip(buf, l) +void from_ip(buf, l) unsigned char *buf; int l; { int port = 0; unsigned char *a; - if(!ok_crc(buf, l)){ + if (!ok_crc(buf, l)) { stats.ip_failed_crc++; LOGL2("from_ip: dumped - CRC incorrect!\n"); return; } - l = l - 2; /* dump the blasted CRC */ + l = l - 2; /* dump the blasted CRC */ - if(l<15){ + if (l < 15) { stats.ip_tooshort++; LOGL2("from_ip: dumped - length wrong!\n"); return; } - if(loglevel>2)dump_ax25frame("from_ip: ", buf, l); + if (loglevel > 2) + dump_ax25frame("from_ip: ", buf, l); - if(digi){ /* if we are in digi mode */ + if (digi) { /* if we are in digi mode */ a = next_addr(buf); - if(NOT_ME(a)){ + if (NOT_ME(a)) { stats.ip_not_for_me++; LOGL2("from_ip: (digi) dumped - not for me!\n"); return; } - if(a==buf){ /* must be a digi */ + if (a == buf) { /* must be a digi */ stats.ip_i_am_dest++; - LOGL2("from_ip: (digi) dumped - I am destination!\n"); + LOGL2 + ("from_ip: (digi) dumped - I am destination!\n"); return; } - if(dual_port == 1 && FOR_PORT2(a)){ + if (dual_port == 1 && FOR_PORT2(a)) { port = 0x10; } SETREPEATED(a); - } else { /* must be tnc mode */ + } else { /* must be tnc mode */ a = next_addr(buf); #ifdef TNC_FILTER - if(NOT_ME(a)){ - LOGL2("from_ip: (tnc) dumped - I am not destination!\n"); + if (NOT_ME(a)) { + LOGL2 + ("from_ip: (tnc) dumped - I am not destination!\n"); return; } #endif - } /* end of tnc mode */ + } /* end of tnc mode */ send_kiss(port, buf, l); } @@ -199,38 +204,40 @@ int l; * Send an ID frame out the KISS port. */ -void -do_beacon() +void do_beacon() { int i; unsigned char *p; - if(bclen == 0) return; /* nothing to do! */ + if (bclen == 0) + return; /* nothing to do! */ - if(bclen < 0) { /* build the id string */ + if (bclen < 0) { /* build the id string */ p = bcbuf; - *p++ = ('I'<<1); - *p++ = ('D'<<1); - *p++ = (' '<<1); - *p++ = (' '<<1); - *p++ = (' '<<1); - *p++ = (' '<<1); - *p++ = '\0' | 0x60; /* SSID, set reserved bits */ + *p++ = ('I' << 1); + *p++ = ('D' << 1); + *p++ = (' ' << 1); + *p++ = (' ' << 1); + *p++ = (' ' << 1); + *p++ = (' ' << 1); + *p++ = '\0' | 0x60; /* SSID, set reserved bits */ - for(i=0;i<6;i++)*p++=mycallsign[i]; - *p++ = mycallsign[6] | 0x60; /* ensure reserved bits are set */ - SETLAST(bcbuf+7); /* Set the E bit -- last address */ + for (i = 0; i < 6; i++) + *p++ = mycallsign[i]; + *p++ = mycallsign[6] | 0x60; /* ensure reserved bits are set */ + SETLAST(bcbuf + 7); /* Set the E bit -- last address */ - *p++ = 0x03; /* Control field -- UI frame */ + *p++ = 0x03; /* Control field -- UI frame */ - *p++ = 0xf0; /* Protocol ID -- 0xf0 is no protocol */ + *p++ = 0xf0; /* Protocol ID -- 0xf0 is no protocol */ - strcpy(p, bc_text); /* add the text field */ + strcpy(p, bc_text); /* add the text field */ - bclen = 16 + strlen(bc_text); /* adjust the length nicely */ + bclen = 16 + strlen(bc_text); /* adjust the length nicely */ } - if(loglevel>2)dump_ax25frame("do_beacon: ", bcbuf, bclen); + if (loglevel > 2) + dump_ax25frame("do_beacon: ", bcbuf, bclen); stats.kiss_beacon_outs++; send_kiss(0, bcbuf, bclen); } @@ -239,20 +246,28 @@ do_beacon() * return true if the addresses supplied match * modified for wildcarding by vk5xxx */ -int -addrmatch(a,b) +int addrmatch(a, b) unsigned char *a, *b; { - if((*a=='\0') || (*b=='\0'))return 0; - - if((*a++^*b++)&0xfe)return 0; /* "K" */ - if((*a++^*b++)&0xfe)return 0; /* "A" */ - if((*a++^*b++)&0xfe)return 0; /* "9" */ - if((*a++^*b++)&0xfe)return 0; /* "W" */ - if((*a++^*b++)&0xfe)return 0; /* "S" */ - if((*a++^*b++)&0xfe)return 0; /* "B" */ - if(((*b++)&0x1e)==0)return 1; /* ssid 0 matches all ssid's */ - if((*a++^*b)&0x1e)return 0; /* ssid */ + if ((*a == '\0') || (*b == '\0')) + return 0; + + if ((*a++ ^ *b++) & 0xfe) + return 0; /* "K" */ + if ((*a++ ^ *b++) & 0xfe) + return 0; /* "A" */ + if ((*a++ ^ *b++) & 0xfe) + return 0; /* "9" */ + if ((*a++ ^ *b++) & 0xfe) + return 0; /* "W" */ + if ((*a++ ^ *b++) & 0xfe) + return 0; /* "S" */ + if ((*a++ ^ *b++) & 0xfe) + return 0; /* "B" */ + if (((*b++) & 0x1e) == 0) + return 1; /* ssid 0 matches all ssid's */ + if ((*a++ ^ *b) & 0x1e) + return 0; /* ssid */ /* if((*a++^*b++)&0x1e)return 0; ssid (how it was ...) */ return 1; } @@ -260,47 +275,47 @@ unsigned char *a, *b; /* * return pointer to the next station to get this packet */ -unsigned char * -next_addr(f) +unsigned char *next_addr(f) unsigned char *f; { unsigned char *a; /* If no digis, return the destination address */ - if(NO_DIGIS(f))return f; + if (NO_DIGIS(f)) + return f; /* check each digi field. The first one that hasn't seen it is the one */ a = f + 7; do { a += 7; - if(NOTREPEATED(a))return a; - }while(NOT_LAST(a)); + if (NOTREPEATED(a)) + return a; + } + while (NOT_LAST(a)); /* all the digis have seen it. return the destination address */ - return f; + return f; } /* * tack on the CRC for the frame. Note we assume the buffer is long * enough to have the two bytes tacked on. */ -void -add_crc(buf, l) +void add_crc(buf, l) unsigned char *buf; int l; { unsigned short int u; u = compute_crc(buf, l); - buf[l] = u&0xff; /* lsb first */ - buf[l+1] = (u>>8)&0xff; /* msb next */ + buf[l] = u & 0xff; /* lsb first */ + buf[l + 1] = (u >> 8) & 0xff; /* msb next */ } /* * Dump AX25 frame. */ -void -dump_ax25frame(t, buf, l) +void dump_ax25frame(t, buf, l) unsigned char *buf; char *t; int l; @@ -312,28 +327,31 @@ int l; printf("%s AX25: (l=%3d) ", t, l); - if(l<15){ + if (l < 15) { printf("Bogus size...\n"); return; } - printf("%s -> ", call_to_a(buf+7)); + printf("%s -> ", call_to_a(buf + 7)); printf("%s", call_to_a(buf)); - if(ARE_DIGIS(buf)){ + if (ARE_DIGIS(buf)) { printf(" v"); - a = buf+7; - do{ - a+=7; + a = buf + 7; + do { + a += 7; printf(" %s", call_to_a(a)); - if(REPEATED(a))printf("*"); - }while(NOT_LAST(a)); + if (REPEATED(a)) + printf("*"); + } + while (NOT_LAST(a)); } printf("\n"); #ifdef DEBUG - for(i=0;i<l;i++)printf("%02x ",buf[i]); + for (i = 0; i < l; i++) + printf("%02x ", buf[i]); printf("\n"); #endif diff --git a/ax25ipd/routing.c b/ax25ipd/routing.c index 3f771b3..b3af836 100644 --- a/ax25ipd/routing.c +++ b/ax25ipd/routing.c @@ -15,31 +15,30 @@ /* The routing table structure is not visible outside this module. */ struct route_table_entry { - unsigned char callsign[7]; /* the callsign and ssid */ - unsigned char padcall; /* always set to zero */ - unsigned char ip_addr[4]; /* the IP address */ - unsigned short udp_port; /* the port number if udp */ + unsigned char callsign[7]; /* the callsign and ssid */ + unsigned char padcall; /* always set to zero */ + unsigned char ip_addr[4]; /* the IP address */ + unsigned short udp_port; /* the port number if udp */ unsigned char pad1; unsigned char pad2; - unsigned int flags; /* route flags */ - struct route_table_entry* next; + unsigned int flags; /* route flags */ + struct route_table_entry *next; }; -struct route_table_entry* route_tbl; -struct route_table_entry* default_route; +struct route_table_entry *route_tbl; +struct route_table_entry *default_route; /* The Broadcast address structure is not visible outside this module either */ struct bcast_table_entry { - unsigned char callsign[7]; /* The broadcast address */ - struct bcast_table_entry* next; + unsigned char callsign[7]; /* The broadcast address */ + struct bcast_table_entry *next; }; -struct bcast_table_entry* bcast_tbl; +struct bcast_table_entry *bcast_tbl; /* Initialize the routing module */ -void -route_init() +void route_init() { route_tbl = NULL; default_route = NULL; @@ -47,8 +46,7 @@ route_init() } /* Add a new route entry */ -void -route_add(ip, call, udpport, flags) +void route_add(ip, call, udpport, flags) unsigned char *ip; unsigned char *call; int udpport; @@ -58,23 +56,24 @@ unsigned int flags; int i; /* Check we have an IP address */ - if (ip==NULL) + if (ip == NULL) return; /* Check we have a callsign */ - if (call==NULL) + if (call == NULL) return; /* Find the last entry in the list */ - rl=route_tbl; + rl = route_tbl; if (route_tbl) while (rl->next) - rl=rl->next; + rl = rl->next; - rn=(struct route_table_entry*)malloc(sizeof(struct route_table_entry)); + rn = (struct route_table_entry *) + malloc(sizeof(struct route_table_entry)); /* Build this entry ... */ - for (i=0; i<6; i++) + for (i = 0; i < 6; i++) rn->callsign[i] = call[i] & 0xfe; rn->callsign[6] = (call[6] & 0x1e) | 0x60; rn->padcall = 0; @@ -83,58 +82,57 @@ unsigned int flags; rn->pad1 = 0; rn->pad2 = 0; rn->flags = flags; - rn->next=NULL; + rn->next = NULL; /* Update the default_route pointer if this is a default route */ if (flags & AXRT_DEFAULT) - default_route=rn; + default_route = rn; - if (rl) /* ... the list is already started add the new route */ - rl->next=rn; - else /* ... start the list off */ - route_tbl=rn; + if (rl) /* ... the list is already started add the new route */ + rl->next = rn; + else /* ... start the list off */ + route_tbl = rn; /* Log this entry ... */ LOGL4("added route: %s\t%s\t%s\t%d\t%d\n", - call_to_a(rn->callsign), - (char *)inet_ntoa(*(struct in_addr *)rn->ip_addr), - rn->udp_port ? "udp" : "ip", - ntohs(rn->udp_port), flags); + call_to_a(rn->callsign), + (char *) inet_ntoa(*(struct in_addr *) rn->ip_addr), + rn->udp_port ? "udp" : "ip", ntohs(rn->udp_port), flags); return; } /* Add a new broadcast address entry */ -void -bcast_add(call) -unsigned char* call; +void bcast_add(call) +unsigned char *call; { struct bcast_table_entry *bl, *bn; int i; /* Check we have a callsign */ - if (call==NULL) + if (call == NULL) return; /* Find the last entry in the list */ - bl=bcast_tbl; + bl = bcast_tbl; if (bcast_tbl) while (bl->next) - bl=bl->next; + bl = bl->next; - bn=(struct bcast_table_entry*)malloc(sizeof(struct bcast_table_entry)); + bn = (struct bcast_table_entry *) + malloc(sizeof(struct bcast_table_entry)); /* Build this entry ... */ - for (i=0; i<6; i++) + for (i = 0; i < 6; i++) bn->callsign[i] = call[i] & 0xfe; bn->callsign[6] = (call[6] & 0x1e) | 0x60; - bn->next=NULL; + bn->next = NULL; - if (bl) /* ... the list is already started add the new route */ - bl->next=bn; - else /* ... start the list off */ - bcast_tbl=bn; + if (bl) /* ... the list is already started add the new route */ + bl->next = bn; + else /* ... start the list off */ + bcast_tbl = bn; /* Log this entry ... */ LOGL4("added broadcast address: %s\n", call_to_a(bn->callsign)); @@ -146,32 +144,32 @@ unsigned char* call; * immediately following the IP address. (UGLY coding; to be fixed later!) */ -unsigned char * -call_to_ip(call) +unsigned char *call_to_ip(call) unsigned char *call; { - struct route_table_entry* rp; + struct route_table_entry *rp; unsigned char mycall[7]; int i; - if(call==NULL) + if (call == NULL) return NULL; - for(i=0; i<6; i++) + for (i = 0; i < 6; i++) mycall[i] = call[i] & 0xfe; mycall[6] = (call[6] & 0x1e) | 0x60; - LOGL4("lookup call %s ",call_to_a(mycall)); + LOGL4("lookup call %s ", call_to_a(mycall)); - rp=route_tbl; + rp = route_tbl; while (rp) { - if (addrmatch(mycall,rp->callsign)) { + if (addrmatch(mycall, rp->callsign)) { LOGL4("found ip addr %s\n", - (char *)inet_ntoa(*(struct in_addr *)rp->ip_addr)); + (char *) inet_ntoa(*(struct in_addr *) + rp->ip_addr)); return rp->ip_addr; } - rp=rp->next; + rp = rp->next; } /* @@ -180,7 +178,8 @@ unsigned char *call; */ if (default_route) { LOGL4("failed, using default ip addr %s\n", - (char *)inet_ntoa(*(struct in_addr *)default_route->ip_addr)); + (char *) inet_ntoa(*(struct in_addr *) + default_route->ip_addr)); return default_route->ip_addr; } @@ -192,73 +191,70 @@ unsigned char *call; * Accept a callsign and return true if it is a broadcast address, or false * if it is not found on the list */ -int -is_call_bcast(call) +int is_call_bcast(call) unsigned char *call; { - struct bcast_table_entry* bp; + struct bcast_table_entry *bp; unsigned char bccall[7]; int i; - if(call==NULL) - return(FALSE); + if (call == NULL) + return (FALSE); - for(i=0; i<6; i++) + for (i = 0; i < 6; i++) bccall[i] = call[i] & 0xfe; bccall[6] = (call[6] & 0x1e) | 0x60; - LOGL4("lookup broadcast %s ",call_to_a(bccall)); + LOGL4("lookup broadcast %s ", call_to_a(bccall)); - bp=bcast_tbl; + bp = bcast_tbl; while (bp) { - if (addrmatch(bccall,bp->callsign)) { - LOGL4("found broadcast %s\n", call_to_a(bp->callsign)); - return(TRUE); + if (addrmatch(bccall, bp->callsign)) { + LOGL4("found broadcast %s\n", + call_to_a(bp->callsign)); + return (TRUE); } - bp=bp->next; + bp = bp->next; } - return(FALSE); + return (FALSE); } /* Traverse the routing table, transmitting the packet to each bcast route */ -void -send_broadcast(buf, l) +void send_broadcast(buf, l) unsigned char *buf; int l; { struct route_table_entry *rp; - rp=route_tbl; + rp = route_tbl; while (rp) { if (rp->flags & AXRT_BCAST) { send_ip(buf, l, rp->ip_addr); } - rp=rp->next; + rp = rp->next; } } /* print out the list of routes */ -void -dump_routes() +void dump_routes() { - struct route_table_entry* rp; + struct route_table_entry *rp; int i; - for (rp=route_tbl, i=0; rp; rp=rp->next) + for (rp = route_tbl, i = 0; rp; rp = rp->next) i++; - LOGL1("\n%d active routes.\n",i); + LOGL1("\n%d active routes.\n", i); - rp=route_tbl; + rp = route_tbl; while (rp) { LOGL1(" %s\t%s\t%s\t%d\t%d\n", - call_to_a(rp->callsign), - (char *)inet_ntoa(*(struct in_addr *)rp->ip_addr), - rp->udp_port ? "udp" : "ip", - ntohs(rp->udp_port), rp->flags); - rp=rp->next; + call_to_a(rp->callsign), + (char *) inet_ntoa(*(struct in_addr *) rp->ip_addr), + rp->udp_port ? "udp" : "ip", + ntohs(rp->udp_port), rp->flags); + rp = rp->next; } fflush(stdout); } - diff --git a/ax25mond/ax25mond.c b/ax25mond/ax25mond.c index 58a932a..928b8ed 100644 --- a/ax25mond/ax25mond.c +++ b/ax25mond/ax25mond.c @@ -49,15 +49,15 @@ // For older kernels #ifndef PF_PACKET - #define PF_PACKET PF_INET +#define PF_PACKET PF_INET #endif /*--------------------------------------------------------------------------*/ static union { - struct sockaddr sa; - struct sockaddr_in si; - struct sockaddr_un su; + struct sockaddr sa; + struct sockaddr_in si; + struct sockaddr_un su; } addr; /*--------------------------------------------------------------------------*/ @@ -65,313 +65,355 @@ static union { int sock_list[MAX_SOCKETS]; char sock_monmode[MAX_SOCKETS]; char sock_filename[MAX_SOCKETS][100]; -int sock_num=0; +int sock_num = 0; int conn_list[MAX_CONNECTS]; struct sockaddr conn_addr[MAX_CONNECTS]; int conn_addrlen[MAX_CONNECTS]; char conn_monmode[MAX_CONNECTS]; -int conn_num=0; +int conn_num = 0; int highest_sock_fd; -int end=0; +int end = 0; /*--------------------------------------------------------------------------*/ /* from buildsaddr.c */ struct sockaddr *build_sockaddr(const char *name, int *addrlen) -{ char *host_name; - char *serv_name; - char buf[1024]; - - memset((char *) &addr, 0, sizeof(addr)); - *addrlen=0; - - host_name=strcpy(buf, name); - serv_name=strchr(buf, ':'); - if(!serv_name) - return 0; - *serv_name++=0; - if(!*host_name || !*serv_name) - return 0; - - if(!strcmp(host_name, "local") || !strcmp(host_name, "unix")) { - addr.su.sun_family=AF_UNIX; - *addr.su.sun_path=0; - strcat(addr.su.sun_path, serv_name); - *addrlen=sizeof(struct sockaddr_un); - return &addr.sa; - } - - addr.si.sin_family=AF_INET; - - if(!strcmp(host_name, "*")) { - addr.si.sin_addr.s_addr=INADDR_ANY; - } else if(!strcmp(host_name, "loopback")) { - addr.si.sin_addr.s_addr=inet_addr("127.0.0.1"); - } else if((addr.si.sin_addr.s_addr=inet_addr(host_name))==-1L) { - struct hostent *hp=gethostbyname(host_name); - endhostent(); - if(!hp) - return 0; - addr.si.sin_addr.s_addr=((struct in_addr *) (hp->h_addr))->s_addr; - } - - if(isdigit(*serv_name & 0xff)) { - addr.si.sin_port=htons(atoi(serv_name)); - } else { - struct servent *sp=getservbyname(serv_name, (char *) 0); - endservent(); - if(!sp) - return 0; - addr.si.sin_port=sp->s_port; - } - - *addrlen=sizeof(struct sockaddr_in); - return &addr.sa; +{ + char *host_name; + char *serv_name; + char buf[1024]; + + memset((char *) &addr, 0, sizeof(addr)); + *addrlen = 0; + + host_name = strcpy(buf, name); + serv_name = strchr(buf, ':'); + if (!serv_name) + return 0; + *serv_name++ = 0; + if (!*host_name || !*serv_name) + return 0; + + if (!strcmp(host_name, "local") || !strcmp(host_name, "unix")) { + addr.su.sun_family = AF_UNIX; + *addr.su.sun_path = 0; + strcat(addr.su.sun_path, serv_name); + *addrlen = sizeof(struct sockaddr_un); + return &addr.sa; + } + + addr.si.sin_family = AF_INET; + + if (!strcmp(host_name, "*")) { + addr.si.sin_addr.s_addr = INADDR_ANY; + } else if (!strcmp(host_name, "loopback")) { + addr.si.sin_addr.s_addr = inet_addr("127.0.0.1"); + } else if ((addr.si.sin_addr.s_addr = inet_addr(host_name)) == -1L) { + struct hostent *hp = gethostbyname(host_name); + endhostent(); + if (!hp) + return 0; + addr.si.sin_addr.s_addr = + ((struct in_addr *) (hp->h_addr))->s_addr; + } + + if (isdigit(*serv_name & 0xff)) { + addr.si.sin_port = htons(atoi(serv_name)); + } else { + struct servent *sp = getservbyname(serv_name, (char *) 0); + endservent(); + if (!sp) + return 0; + addr.si.sin_port = sp->s_port; + } + + *addrlen = sizeof(struct sockaddr_in); + return &addr.sa; } /*--------------------------------------------------------------------------*/ -void add_socket(char *sockname, char monmode) { - struct sockaddr *saddr; - int saddrlen; - - if(sock_num==MAX_SOCKETS-1) { - fprintf(stderr, "WARNING: Too many sockets defined - only %d are " - "allowed\n", MAX_SOCKETS); - return; - } - - if(!(saddr=build_sockaddr(sockname,&saddrlen))) { - fprintf(stderr, "WARNING: Invalid socket name: \"%s\"\n", sockname); - return; - } - - if(saddr->sa_family==AF_UNIX) - strcpy(sock_filename[sock_num], strchr(sockname, ':')+1); - else - sock_filename[sock_num][0]=0; - - if((sock_list[sock_num]=socket(saddr->sa_family,SOCK_STREAM,0))<0) { - fprintf(stderr, "WARNING: Error opening socket \"%s\": %s\n", - sockname, strerror(errno)); - return; - } - - if(bind(sock_list[sock_num],saddr,saddrlen)<0) { - fprintf(stderr, "WARNING: Error binding socket \"%s\": %s\n", - sockname, strerror(errno)); - return; - } - - if(listen(sock_list[sock_num], 5)<0) { - fprintf(stderr, "WARNING: Error listening on socket \"%s\": %s\n", - sockname, strerror(errno)); - return; - } - - fcntl(sock_list[sock_num],F_SETFL,O_NONBLOCK); - - if(sock_list[sock_num] > highest_sock_fd) - highest_sock_fd=sock_list[sock_num]; - - sock_monmode[sock_num]=monmode; - sock_num++; +void add_socket(char *sockname, char monmode) +{ + struct sockaddr *saddr; + int saddrlen; + + if (sock_num == MAX_SOCKETS - 1) { + fprintf(stderr, + "WARNING: Too many sockets defined - only %d are " + "allowed\n", MAX_SOCKETS); + return; + } + + if (!(saddr = build_sockaddr(sockname, &saddrlen))) { + fprintf(stderr, "WARNING: Invalid socket name: \"%s\"\n", + sockname); + return; + } + + if (saddr->sa_family == AF_UNIX) + strcpy(sock_filename[sock_num], strchr(sockname, ':') + 1); + else + sock_filename[sock_num][0] = 0; + + if ((sock_list[sock_num] = + socket(saddr->sa_family, SOCK_STREAM, 0)) < 0) { + fprintf(stderr, + "WARNING: Error opening socket \"%s\": %s\n", + sockname, strerror(errno)); + return; + } + + if (bind(sock_list[sock_num], saddr, saddrlen) < 0) { + fprintf(stderr, + "WARNING: Error binding socket \"%s\": %s\n", + sockname, strerror(errno)); + return; + } + + if (listen(sock_list[sock_num], 5) < 0) { + fprintf(stderr, + "WARNING: Error listening on socket \"%s\": %s\n", + sockname, strerror(errno)); + return; + } + + fcntl(sock_list[sock_num], F_SETFL, O_NONBLOCK); + + if (sock_list[sock_num] > highest_sock_fd) + highest_sock_fd = sock_list[sock_num]; + + sock_monmode[sock_num] = monmode; + sock_num++; } /*--------------------------------------------------------------------------*/ -void close_sockets() { - int i; - - for(i=0;i<sock_num;i++) { - close(sock_list[i]); +void close_sockets() +{ + int i; - if(sock_filename[i][0]) - unlink(sock_filename[i]); - } + for (i = 0; i < sock_num; i++) { + close(sock_list[i]); + + if (sock_filename[i][0]) + unlink(sock_filename[i]); + } } /*--------------------------------------------------------------------------*/ -void quit_handler(int dummy) { - end=1; +void quit_handler(int dummy) +{ + end = 1; } /*--------------------------------------------------------------------------*/ -int main(int argc, char *argv[]) { - fd_set monavail; - int monrx_fd, monrxtx_fd; - struct sockaddr monfrom; - int monfromlen; - fd_set conn_request; - struct timeval tv; - char buf[500]; - int size; - int i; - struct ifreq ifr; - FILE *conffile; - char confline[100]; - char *mode; - char *sockname; - - if(argc>1) { - if(argc==2 && - (strcmp(argv[1],"-v")==0 || strcmp(argv[1],"--version")==0)) { - printf("%s: Version " VERSION "\n\n", argv[0]); - printf("Copyright (C) 1998-1999 Johann Hanne, DH3MB. All rights reserved.\n" - "This program is free software; you can redistribute it and/or modify\n" - "it under the terms of the GNU General Public License as published by\n" - "the Free Software Foundation; either version 2 of the License, or\n" - "(at your option) any later version.\n\n" - "This program is distributed in the hope that it will be useful,\n" - "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" - "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"); - exit(1); - } else { - printf("Usage: %s [-v|--version]\n", argv[0]); - exit(0); - } - } - - // At first, read the configuration file - if(!(conffile=fopen(CONFFILE, "r"))) { - fprintf(stderr, "Unable to open " CONFFILE ".\n"); - exit(1); - } - while(fgets(confline, 100, conffile)) { - if(confline[0]=='#') // Comment - continue; - - confline[strlen(confline)-1]=0; // Cut the LF - - if(!(sockname=strchr(confline, ' '))) { - fprintf(stderr, "WARNING: The following configuration line includes " - "one or more errors:\n%s\n", confline); - continue; - } - - *(sockname++)=0; - mode=confline; - if(strcasecmp(mode, "RX")==0) - add_socket(sockname, 0); - else if(strcasecmp(mode, "RXTX")==0) - add_socket(sockname, 1); - else - fprintf(stderr, "WARNING: Mode \"%s\" not supported\n", mode); - - } - fclose(conffile); - - if(sock_num==0) { - fprintf(stderr, "FATAL: No usable socket found\n"); - exit(1); - } - - // Fork into background - if(fork()) - exit(0); - - // Close stdout, stderr and stdin - fclose(stdout); - fclose(stderr); - fclose(stdin); - - // Set some signal handlers - signal(SIGPIPE, SIG_IGN); - signal(SIGTERM, quit_handler); - - openlog("ax25mond", LOG_PID, LOG_DAEMON); - - // Open AX.25 socket for monitoring RX traffic only - if((monrx_fd=socket(PF_PACKET,SOCK_PACKET,htons(ETH_P_AX25)))<0) { - syslog(LOG_ERR, "Error opening monitor socket: %s\n",strerror(errno)); - exit(1); - } - fcntl(monrx_fd,F_SETFL,O_NONBLOCK); - - // Open AX.25 socket for monitoring RX and TX traffic - if((monrxtx_fd=socket(PF_PACKET,SOCK_PACKET,htons(ETH_P_ALL)))<0) { - syslog(LOG_ERR, "Error opening monitor socket: %s\n",strerror(errno)); - exit(1); - } - fcntl(monrxtx_fd,F_SETFL,O_NONBLOCK); - - while(!end) { - - // Look for incoming connects on all open sockets - FD_ZERO(&conn_request); - for(i=0;i<sock_num;i++) - FD_SET(sock_list[i], &conn_request); - tv.tv_sec=0; - tv.tv_usec=0; - select(highest_sock_fd+1, &conn_request, 0, 0, &tv); - for(i=0;i<sock_num;i++) - if(FD_ISSET(sock_list[i], &conn_request)) { - conn_list[conn_num]=accept(sock_list[i], - &conn_addr[conn_num], - &conn_addrlen[conn_num]); - conn_monmode[conn_num]=sock_monmode[i]; - conn_num++; - } - - // Check if there is new data on the RX-only monitor socket - FD_ZERO(&monavail); - FD_SET(monrx_fd,&monavail); - tv.tv_sec=0; - tv.tv_usec=10; - select(monrx_fd+1, &monavail, 0, 0, &tv); - if(FD_ISSET(monrx_fd,&monavail)) { - monfromlen=sizeof(monfrom); - size=recvfrom(monrx_fd,buf,sizeof(buf),0,&monfrom,&monfromlen); - // Send the packet to all connected sockets - for(i=0;i<conn_num;i++) { - if(conn_monmode[i]==0) - if(send(conn_list[i],buf,size,0)<0) - if(errno!=EAGAIN) { - syslog(LOG_ERR, "Error sending monitor data: %s\n", - strerror(errno)); - close(conn_list[i]); - conn_list[i]=conn_list[conn_num-1]; - conn_num--; - } - } - } - - // Check if there is new data on the RX+TX monitor socket - FD_ZERO(&monavail); - FD_SET(monrxtx_fd,&monavail); - tv.tv_sec=0; - tv.tv_usec=10; - select(monrxtx_fd+1, &monavail, 0, 0, &tv); - if(FD_ISSET(monrxtx_fd,&monavail)) { - monfromlen=sizeof(monfrom); - size=recvfrom(monrxtx_fd,buf,sizeof(buf),0,&monfrom,&monfromlen); - // Check, if we have received a AX.25-packet - strcpy(ifr.ifr_name,monfrom.sa_data); - ioctl(monrxtx_fd,SIOCGIFHWADDR,&ifr); - if (ifr.ifr_hwaddr.sa_family==AF_AX25) - // Send the packet to all connected sockets - for(i=0;i<conn_num;i++) { - if(conn_monmode[i]==1) - if(send(conn_list[i],buf,size,0)<0) - if(errno!=EAGAIN) { - syslog(LOG_ERR, "Error sending monitor data: %s\n", - strerror(errno)); - close(conn_list[i]); - conn_list[i]=conn_list[conn_num-1]; - conn_num--; - } - } - } - - } - - for(i=0;i<conn_num;i++) - close(conn_list[i]); - close_sockets(); - close(monrx_fd); - close(monrxtx_fd); - closelog(); - return 0; +int main(int argc, char *argv[]) +{ + fd_set monavail; + int monrx_fd, monrxtx_fd; + struct sockaddr monfrom; + int monfromlen; + fd_set conn_request; + struct timeval tv; + char buf[500]; + int size; + int i; + struct ifreq ifr; + FILE *conffile; + char confline[100]; + char *mode; + char *sockname; + + if (argc > 1) { + if (argc == 2 && + (strcmp(argv[1], "-v") == 0 + || strcmp(argv[1], "--version") == 0)) { + printf("%s: Version " VERSION "\n\n", argv[0]); + printf + ("Copyright (C) 1998-1999 Johann Hanne, DH3MB. All rights reserved.\n" + "This program is free software; you can redistribute it and/or modify\n" + "it under the terms of the GNU General Public License as published by\n" + "the Free Software Foundation; either version 2 of the License, or\n" + "(at your option) any later version.\n\n" + "This program is distributed in the hope that it will be useful,\n" + "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" + "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"); + exit(1); + } else { + printf("Usage: %s [-v|--version]\n", argv[0]); + exit(0); + } + } + // At first, read the configuration file + if (!(conffile = fopen(CONFFILE, "r"))) { + fprintf(stderr, "Unable to open " CONFFILE ".\n"); + exit(1); + } + while (fgets(confline, 100, conffile)) { + if (confline[0] == '#') // Comment + continue; + + confline[strlen(confline) - 1] = 0; // Cut the LF + + if (!(sockname = strchr(confline, ' '))) { + fprintf(stderr, + "WARNING: The following configuration line includes " + "one or more errors:\n%s\n", confline); + continue; + } + + *(sockname++) = 0; + mode = confline; + if (strcasecmp(mode, "RX") == 0) + add_socket(sockname, 0); + else if (strcasecmp(mode, "RXTX") == 0) + add_socket(sockname, 1); + else + fprintf(stderr, + "WARNING: Mode \"%s\" not supported\n", + mode); + + } + fclose(conffile); + + if (sock_num == 0) { + fprintf(stderr, "FATAL: No usable socket found\n"); + exit(1); + } + // Fork into background + if (fork()) + exit(0); + + // Close stdout, stderr and stdin + fclose(stdout); + fclose(stderr); + fclose(stdin); + + // Set some signal handlers + signal(SIGPIPE, SIG_IGN); + signal(SIGTERM, quit_handler); + + openlog("ax25mond", LOG_PID, LOG_DAEMON); + + // Open AX.25 socket for monitoring RX traffic only + if ((monrx_fd = + socket(PF_PACKET, SOCK_PACKET, htons(ETH_P_AX25))) < 0) { + syslog(LOG_ERR, "Error opening monitor socket: %s\n", + strerror(errno)); + exit(1); + } + fcntl(monrx_fd, F_SETFL, O_NONBLOCK); + + // Open AX.25 socket for monitoring RX and TX traffic + if ((monrxtx_fd = + socket(PF_PACKET, SOCK_PACKET, htons(ETH_P_ALL))) < 0) { + syslog(LOG_ERR, "Error opening monitor socket: %s\n", + strerror(errno)); + exit(1); + } + fcntl(monrxtx_fd, F_SETFL, O_NONBLOCK); + + while (!end) { + + // Look for incoming connects on all open sockets + FD_ZERO(&conn_request); + for (i = 0; i < sock_num; i++) + FD_SET(sock_list[i], &conn_request); + tv.tv_sec = 0; + tv.tv_usec = 0; + select(highest_sock_fd + 1, &conn_request, 0, 0, &tv); + for (i = 0; i < sock_num; i++) + if (FD_ISSET(sock_list[i], &conn_request)) { + conn_list[conn_num] = accept(sock_list[i], + &conn_addr + [conn_num], + &conn_addrlen + [conn_num]); + conn_monmode[conn_num] = sock_monmode[i]; + conn_num++; + } + // Check if there is new data on the RX-only monitor socket + FD_ZERO(&monavail); + FD_SET(monrx_fd, &monavail); + tv.tv_sec = 0; + tv.tv_usec = 10; + select(monrx_fd + 1, &monavail, 0, 0, &tv); + if (FD_ISSET(monrx_fd, &monavail)) { + monfromlen = sizeof(monfrom); + size = + recvfrom(monrx_fd, buf, sizeof(buf), 0, + &monfrom, &monfromlen); + // Send the packet to all connected sockets + for (i = 0; i < conn_num; i++) { + if (conn_monmode[i] == 0) + if (send + (conn_list[i], buf, size, + 0) < 0) + if (errno != EAGAIN) { + syslog(LOG_ERR, + "Error sending monitor data: %s\n", + strerror + (errno)); + close(conn_list + [i]); + conn_list[i] = + conn_list + [conn_num - 1]; + conn_num--; + } + } + } + // Check if there is new data on the RX+TX monitor socket + FD_ZERO(&monavail); + FD_SET(monrxtx_fd, &monavail); + tv.tv_sec = 0; + tv.tv_usec = 10; + select(monrxtx_fd + 1, &monavail, 0, 0, &tv); + if (FD_ISSET(monrxtx_fd, &monavail)) { + monfromlen = sizeof(monfrom); + size = + recvfrom(monrxtx_fd, buf, sizeof(buf), 0, + &monfrom, &monfromlen); + // Check, if we have received a AX.25-packet + strcpy(ifr.ifr_name, monfrom.sa_data); + ioctl(monrxtx_fd, SIOCGIFHWADDR, &ifr); + if (ifr.ifr_hwaddr.sa_family == AF_AX25) + // Send the packet to all connected sockets + for (i = 0; i < conn_num; i++) { + if (conn_monmode[i] == 1) + if (send + (conn_list[i], buf, + size, 0) < 0) + if (errno != + EAGAIN) { + syslog + (LOG_ERR, + "Error sending monitor data: %s\n", + strerror + (errno)); + close + (conn_list + [i]); + conn_list + [i] = + conn_list + [conn_num + - 1]; + conn_num--; + } + } + } + + } + + for (i = 0; i < conn_num; i++) + close(conn_list[i]); + close_sockets(); + close(monrx_fd); + close(monrxtx_fd); + closelog(); + return 0; } diff --git a/ax25rtd/Makefile.in b/ax25rtd/Makefile.in index 87e7c17..04306cd 100644 --- a/ax25rtd/Makefile.in +++ b/ax25rtd/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated automatically by automake 1.4 from Makefile.am +# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation @@ -64,15 +64,17 @@ AWK = @AWK@ AX25_LIB = @AX25_LIB@ CC = @CC@ DLLTOOL = @DLLTOOL@ -LD = @LD@ +ECHO = @ECHO@ +EXEEXT = @EXEEXT@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ NCURSES_LIB = @NCURSES_LIB@ -NM = @NM@ OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ RANLIB = @RANLIB@ +STRIP = @STRIP@ VERSION = @VERSION@ etcfiles = ax25rtd.conf @@ -97,6 +99,7 @@ INCLUDES = -DAX25_SYSCONFDIR=\""$(AX25_SYSCONFDIR)"\" -DAX25_LOCALSTATEDIR=\ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = +sbin_PROGRAMS = ax25rtd$(EXEEXT) ax25rtctl$(EXEEXT) PROGRAMS = $(sbin_PROGRAMS) @@ -104,13 +107,13 @@ DEFS = @DEFS@ -I. -I$(srcdir) -I.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ -ax25rtd_OBJECTS = ax25rtd.o cache_ctl.o cache_dump.o config.o \ -listener.o +ax25rtd_OBJECTS = ax25rtd.$(OBJEXT) cache_ctl.$(OBJEXT) \ +cache_dump.$(OBJEXT) config.$(OBJEXT) listener.$(OBJEXT) ax25rtd_LDADD = $(LDADD) ax25rtd_DEPENDENCIES = ax25rtd_LDFLAGS = ax25rtctl_SOURCES = ax25rtctl.c -ax25rtctl_OBJECTS = ax25rtctl.o +ax25rtctl_OBJECTS = ax25rtctl.$(OBJEXT) ax25rtctl_LDADD = $(LDADD) ax25rtctl_DEPENDENCIES = ax25rtctl_LDFLAGS = @@ -129,11 +132,11 @@ DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best SOURCES = $(ax25rtd_SOURCES) ax25rtctl.c -OBJECTS = $(ax25rtd_OBJECTS) ax25rtctl.o +OBJECTS = $(ax25rtd_OBJECTS) ax25rtctl.$(OBJEXT) all: all-redirect .SUFFIXES: -.SUFFIXES: .S .c .lo .o .s +.SUFFIXES: .S .c .lo .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps ax25rtd/Makefile @@ -170,6 +173,11 @@ uninstall-sbinPROGRAMS: .c.o: $(COMPILE) -c $< +# FIXME: We should only use cygpath when building on Windows, +# and only if it is available. +.c.obj: + $(COMPILE) -c `cygpath -w $<` + .s.o: $(COMPILE) -c $< @@ -178,6 +186,7 @@ uninstall-sbinPROGRAMS: mostlyclean-compile: -rm -f *.o core *.core + -rm -f *.$(OBJEXT) clean-compile: @@ -205,12 +214,12 @@ distclean-libtool: maintainer-clean-libtool: -ax25rtd: $(ax25rtd_OBJECTS) $(ax25rtd_DEPENDENCIES) - @rm -f ax25rtd +ax25rtd$(EXEEXT): $(ax25rtd_OBJECTS) $(ax25rtd_DEPENDENCIES) + @rm -f ax25rtd$(EXEEXT) $(LINK) $(ax25rtd_LDFLAGS) $(ax25rtd_OBJECTS) $(ax25rtd_LDADD) $(LIBS) -ax25rtctl: $(ax25rtctl_OBJECTS) $(ax25rtctl_DEPENDENCIES) - @rm -f ax25rtctl +ax25rtctl$(EXEEXT): $(ax25rtctl_OBJECTS) $(ax25rtctl_DEPENDENCIES) + @rm -f ax25rtctl$(EXEEXT) $(LINK) $(ax25rtctl_LDFLAGS) $(ax25rtctl_OBJECTS) $(ax25rtctl_LDADD) $(LIBS) install-docDATA: $(doc_DATA) diff --git a/ax25rtd/ax25rtctl.c b/ax25rtd/ax25rtctl.c index 6b40451..222ee61 100644 --- a/ax25rtd/ax25rtctl.c +++ b/ax25rtd/ax25rtctl.c @@ -1,4 +1,4 @@ -/* $Id: ax25rtctl.c,v 1.1 2001/04/10 01:58:38 csmall Exp $ +/* $Id: ax25rtctl.c,v 1.2 2001/09/12 13:18:43 terry Exp $ * * Copyright (c) 1996 Jörg Reuter (jreuter@poboxes.com) * @@ -17,7 +17,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ - + #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -32,38 +32,40 @@ #include <config.h> #include "../pathnames.h" -static const struct option lopts[] = { - {"add", 1, 0, 'a'}, - {"del", 1, 0, 'd'}, - {"list", 1, 0, 'l'}, - {"expire", 1, 0, 'e'}, - {"save", 0, 0, 's'}, - {"reload", 0, 0, 'r'}, - {"shutdown", 0, 0, 'q'}, - {"Version", 0, 0, 'V'}, - {"help", 0, 0, 'h'}, - {"debug", 0, 0, 'x'}, - {"version", 0, 0, 'v'}, - {NULL, 0, 0, 0 } +static const struct option lopts[] = { + {"add", 1, 0, 'a'}, + {"del", 1, 0, 'd'}, + {"list", 1, 0, 'l'}, + {"expire", 1, 0, 'e'}, + {"save", 0, 0, 's'}, + {"reload", 0, 0, 'r'}, + {"shutdown", 0, 0, 'q'}, + {"Version", 0, 0, 'V'}, + {"help", 0, 0, 'h'}, + {"debug", 0, 0, 'x'}, + {"version", 0, 0, 'v'}, + {NULL, 0, 0, 0} }; - + static const char *sopts = "a:d:l:e:srqvVh"; static void usage(void) { - fprintf(stderr,"usage:\n"); - fprintf(stderr,"ax25rtctl -a|--add ax25 <callsign> <dev> <time> [digipeater]\n"); - fprintf(stderr," -a|--add ip <ip> <dev> <time> <call> <ipmode>\n"); - fprintf(stderr," -d|--del ax25 <callsign> <dev>\n"); - fprintf(stderr," -d|--del ip <ip>\n"); - fprintf(stderr," -l|--list ax25|ip\n"); - fprintf(stderr," -e|--expire <minutes>\n"); - fprintf(stderr," -s|--save\n"); - fprintf(stderr," -r|--reload\n"); - fprintf(stderr," -q|--shutdown\n"); - fprintf(stderr," -V|--Version\n"); - fprintf(stderr," -h|--help\n"); - fprintf(stderr," -v|--version\n"); + fprintf(stderr, "usage:\n"); + fprintf(stderr, + "ax25rtctl -a|--add ax25 <callsign> <dev> <time> [digipeater]\n"); + fprintf(stderr, + " -a|--add ip <ip> <dev> <time> <call> <ipmode>\n"); + fprintf(stderr, " -d|--del ax25 <callsign> <dev>\n"); + fprintf(stderr, " -d|--del ip <ip>\n"); + fprintf(stderr, " -l|--list ax25|ip\n"); + fprintf(stderr, " -e|--expire <minutes>\n"); + fprintf(stderr, " -s|--save\n"); + fprintf(stderr, " -r|--reload\n"); + fprintf(stderr, " -q|--shutdown\n"); + fprintf(stderr, " -V|--Version\n"); + fprintf(stderr, " -h|--help\n"); + fprintf(stderr, " -v|--version\n"); exit(1); } @@ -71,24 +73,23 @@ static int open_socket(void) { int sock, addrlen; struct sockaddr_un addr; - + sock = socket(AF_UNIX, SOCK_STREAM, 0); - if (sock < 0) - { + if (sock < 0) { perror("ax25rtctl socket"); exit(1); } - + addr.sun_family = AF_UNIX; strcpy(addr.sun_path, DATA_AX25ROUTED_CTL_SOCK); - addrlen = strlen(DATA_AX25ROUTED_CTL_SOCK) + sizeof(addr.sun_family); + addrlen = + strlen(DATA_AX25ROUTED_CTL_SOCK) + sizeof(addr.sun_family); - if (connect(sock, (struct sockaddr *) &addr, addrlen) < 0) - { + if (connect(sock, (struct sockaddr *) &addr, addrlen) < 0) { perror("ax25rtctl connect"); exit(1); } - + return sock; } @@ -99,24 +100,23 @@ static int wsock(int sock, char *s) static char *get_next_arg(char **p) { - char *p2; + char *p2; - if (p == NULL || *p == NULL) - return NULL; + if (p == NULL || *p == NULL) + return NULL; - p2 = *p; - for (; *p2 && *p2 == ' '; p2++) ; - if (!*p2) - return NULL; + p2 = *p; + for (; *p2 && *p2 == ' '; p2++); + if (!*p2) + return NULL; - *p = strchr(p2, ' '); - if (*p != NULL) - { - **p = '\0'; - (*p)++; - } + *p = strchr(p2, ' '); + if (*p != NULL) { + **p = '\0'; + (*p)++; + } - return p2; + return p2; } static void list_ax25(void) @@ -124,72 +124,66 @@ static void list_ax25(void) int sock, len, offs; char buf[512], *b, *s, *digi, *call, *dev, *ct; time_t t; - + sock = open_socket(); - + wsock(sock, "list ax25\n"); - + offs = 0; - + printf("Callsign Port Last update Path\n"); /* DB0PRA-15 scc3 Tue Aug 6 16:35:38 1996 */ - while(1) - { - len = read(sock, buf+offs, sizeof(buf)-offs-1); - if (len <= 0) - { + while (1) { + len = read(sock, buf + offs, sizeof(buf) - offs - 1); + if (len <= 0) { close(sock); return; } - buf[len+offs] = '\0'; + buf[len + offs] = '\0'; s = buf; - for (s = buf; (b = strchr(s, '\n')) != NULL; s = b+1) - { + for (s = buf; (b = strchr(s, '\n')) != NULL; s = b + 1) { *b = '\0'; - if (s[0] == '.') - { + if (s[0] == '.') { close(sock); return; } - + call = get_next_arg(&s); - dev = get_next_arg(&s); - t = strtol(get_next_arg(&s), NULL, 16); + dev = get_next_arg(&s); + t = strtol(get_next_arg(&s), NULL, 16); - if (t == 0) - { + if (t == 0) { ct = "(permanent)"; ct = strdup(ct); } else { ct = strdup(ctime(&t)); - ct[strlen(ct)-6] = '\0'; + ct[strlen(ct) - 6] = '\0'; } - + printf("%-9s %-6s %s", call, dev, ct); free(ct); - while ( (digi = get_next_arg(&s)) != NULL) + while ((digi = get_next_arg(&s)) != NULL) printf(" %s", digi); printf("\n"); } - - if (b == NULL && s != NULL) - { + + if (b == NULL && s != NULL) { offs = strlen(s); if (offs) memcpy(buf, s, offs); } } - close(sock); + close(sock); } static void list_ip(void) @@ -197,64 +191,59 @@ static void list_ip(void) int sock, len, offs; char buf[512], *b, *s, *ip, *call, *dev, *ct, *mode; time_t t; - + sock = open_socket(); - + wsock(sock, "list ip\n"); - + offs = 0; printf("IP Address Port Callsign Mode Last update\n"); /* 255.255.255.255 scc3 DB0PRA-15 v Thu Jan 7 06:54:19 1971 */ - while(1) - { - len = read(sock, buf+offs, sizeof(buf)-offs-1); - if (len <= 0) - { + while (1) { + len = read(sock, buf + offs, sizeof(buf) - offs - 1); + if (len <= 0) { close(sock); return; } - buf[len+offs] = '\0'; + buf[len + offs] = '\0'; s = buf; - for (s = buf; (b = strchr(s, '\n')) != NULL; s = b+1) - { + for (s = buf; (b = strchr(s, '\n')) != NULL; s = b + 1) { *b = '\0'; - if (s[0] == '.') - { + if (s[0] == '.') { close(sock); return; } - - ip = get_next_arg(&s); - dev = get_next_arg(&s); - t = strtol(get_next_arg(&s), NULL, 16); + + ip = get_next_arg(&s); + dev = get_next_arg(&s); + t = strtol(get_next_arg(&s), NULL, 16); call = get_next_arg(&s); mode = get_next_arg(&s); - if (t == 0) - { + if (t == 0) { ct = "(permanent)"; } else { - ct = ctime(&t); - ct[strlen(ct)-6] = '\0'; + ct = ctime(&t); + ct[strlen(ct) - 6] = '\0'; } - - printf("%-15s %-6s %-9s %-4s %s\n", ip, dev, call, mode, ct); + + printf("%-15s %-6s %-9s %-4s %s\n", ip, dev, call, + mode, ct); } - - if (b == NULL && s != NULL) - { + + if (b == NULL && s != NULL) { offs = strlen(s); if (offs) memcpy(buf, s, offs); } } - close(sock); + close(sock); } static void Version(void) @@ -262,7 +251,7 @@ static void Version(void) int sock; char buf[256]; - printf("ax25rtctl $Revision: 1.1 $\n"); + printf("ax25rtctl $Revision: 1.2 $\n"); sock = open_socket(); wsock(sock, "version\n"); read(sock, buf, sizeof(buf)); @@ -280,39 +269,34 @@ static void debug(void) sock = open_socket(); - while (1) - { + while (1) { FD_ZERO(&fd_set); FD_SET(0, &fd_set); FD_SET(sock, &fd_set); - + FD_ZERO(&fd_set2); FD_SET(sock, &fd_set2); - + tv.tv_sec = 0; tv.tv_usec = 0; - if (select(sock+1, &fd_set, NULL, &fd_set2, &tv) < 0) - { + if (select(sock + 1, &fd_set, NULL, &fd_set2, &tv) < 0) { perror("socket gone"); exit(1); } - + if (FD_ISSET(sock, &fd_set2)) exit(0); - - if (FD_ISSET(0, &fd_set)) - { + + if (FD_ISSET(0, &fd_set)) { n = read(0, buf, sizeof(buf)); - if (n) - { + if (n) { k = write(sock, buf, n); if (k <= 0) exit(0); } } - - if (FD_ISSET(sock, &fd_set)) - { + + if (FD_ISSET(sock, &fd_set)) { n = read(sock, buf, sizeof(buf)); if (n) write(0, buf, n); @@ -326,111 +310,105 @@ int main(int argc, char **argv) unsigned char buf[256]; int opt_ind = 0; long when; - + cmd = getopt_long(argc, argv, sopts, lopts, &opt_ind); - switch (cmd) - { - case 'a': - if (!strcmp(optarg, "ax25")) - { - if (argc < optind+3) - usage(); - - len = sprintf(buf, "add ax25"); - for (k = optind; k < argc; k++) - len += sprintf(buf+len, " %s", argv[k]); - sprintf(buf+len, "\n"); - - sock = open_socket(); - wsock(sock, buf); - close(sock); - } else - if (!strcmp(optarg, "ip")) - { - if (argc < optind+5) - usage(); - - len = sprintf(buf, "add ip"); - for (k = optind; k < argc; k++) - len += sprintf(buf+len, " %s", argv[k]); - sprintf(buf+len, "\n"); - - sock = open_socket(); - wsock(sock, buf); - close(sock); - } else + switch (cmd) { + case 'a': + if (!strcmp(optarg, "ax25")) { + if (argc < optind + 3) usage(); - return 0; - case 'd': - if (!strcmp(optarg, "ax25")) - { - if (argc < optind+2) - usage(); - - sprintf(buf, "del ax25 %s %s\n", argv[optind], argv[optind+1]); - - sock = open_socket(); - wsock(sock, buf); - close(sock); - } else - if (!strcmp(optarg, "ip")) - { - if (argc < optind+1) - usage(); - sprintf(buf, "del ip %s\n", argv[optind]); + len = sprintf(buf, "add ax25"); + for (k = optind; k < argc; k++) + len += sprintf(buf + len, " %s", argv[k]); + sprintf(buf + len, "\n"); - sock = open_socket(); - wsock(sock, buf); - close(sock); - } else - usage(); - return 0; - case 'l': - if (!strcmp(optarg, "ax25")) - list_ax25(); - else if (!strcmp(optarg, "ip")) - list_ip(); - else - usage(); - return 0; - case 'e': - when = atoi(optarg); - if (when <= 0) - usage(); sock = open_socket(); - sprintf(buf, "expire %ld\n", when); wsock(sock, buf); close(sock); - return 0; - case 's': + } else if (!strcmp(optarg, "ip")) { + if (argc < optind + 5) + usage(); + + len = sprintf(buf, "add ip"); + for (k = optind; k < argc; k++) + len += sprintf(buf + len, " %s", argv[k]); + sprintf(buf + len, "\n"); + sock = open_socket(); - wsock(sock, "save\n"); + wsock(sock, buf); close(sock); - return 0; - case 'r': + } else + usage(); + return 0; + case 'd': + if (!strcmp(optarg, "ax25")) { + if (argc < optind + 2) + usage(); + + sprintf(buf, "del ax25 %s %s\n", argv[optind], + argv[optind + 1]); + sock = open_socket(); - wsock(sock, "reload\n"); + wsock(sock, buf); close(sock); - return 0; - case 'q': + } else if (!strcmp(optarg, "ip")) { + if (argc < optind + 1) + usage(); + + sprintf(buf, "del ip %s\n", argv[optind]); + sock = open_socket(); - wsock(sock, "shutdown\n"); + wsock(sock, buf); close(sock); - return 0; - case 'V': - Version(); - return 0; - case 'v': - printf("ax25rtctl: %s\n", VERSION); - return 0; - case 'x': - debug(); - case ':': - case 'h': - case '?': - default: + } else + usage(); + return 0; + case 'l': + if (!strcmp(optarg, "ax25")) + list_ax25(); + else if (!strcmp(optarg, "ip")) + list_ip(); + else + usage(); + return 0; + case 'e': + when = atoi(optarg); + if (when <= 0) usage(); + sock = open_socket(); + sprintf(buf, "expire %ld\n", when); + wsock(sock, buf); + close(sock); + return 0; + case 's': + sock = open_socket(); + wsock(sock, "save\n"); + close(sock); + return 0; + case 'r': + sock = open_socket(); + wsock(sock, "reload\n"); + close(sock); + return 0; + case 'q': + sock = open_socket(); + wsock(sock, "shutdown\n"); + close(sock); + return 0; + case 'V': + Version(); + return 0; + case 'v': + printf("ax25rtctl: %s\n", VERSION); + return 0; + case 'x': + debug(); + case ':': + case 'h': + case '?': + default: + usage(); } usage(); return 1; diff --git a/ax25rtd/ax25rtd.c b/ax25rtd/ax25rtd.c index c7e8d2a..7aaa17f 100644 --- a/ax25rtd/ax25rtd.c +++ b/ax25rtd/ax25rtd.c @@ -1,4 +1,4 @@ -/* $Id: ax25rtd.c,v 1.1 2001/04/10 01:58:38 csmall Exp $ +/* $Id: ax25rtd.c,v 1.2 2001/09/12 13:18:43 terry Exp $ * * Copyright (c) 1996 Jörg Reuter (jreuter@poboxes.com) * @@ -17,7 +17,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ - + /* * This daemon tries to learn AX.25, ARP, IP route entries by listening * to the AX.25 traffic. It caches up to 256 entries (in "FIFO" mode) @@ -63,36 +63,36 @@ #include "../pathnames.h" #include "ax25rtd.h" -const char *Version = "ax25rtd $Revision: 1.1 $"; +const char *Version = "ax25rtd $Revision: 1.2 $"; config *Config = NULL; int reload = 0; -ip_rt_entry * ip_routes = NULL; -int ip_routes_cnt = 0; -int ip_maxroutes = IP_MAXROUTES; +ip_rt_entry *ip_routes = NULL; +int ip_routes_cnt = 0; +int ip_maxroutes = IP_MAXROUTES; -ax25_rt_entry * ax25_routes = NULL; -int ax25_routes_cnt = 0; -int ax25_maxroutes = AX25_MAXROUTES; +ax25_rt_entry *ax25_routes = NULL; +int ax25_routes_cnt = 0; +int ax25_maxroutes = AX25_MAXROUTES; -char ip_encaps_dev[32] = ""; +char ip_encaps_dev[32] = ""; config *dev_get_config(char *dev) { config *config; - + for (config = Config; config; config = config->next) if (!strcmp(config->dev, dev)) return config; - + return port_get_config(dev); } config *port_get_config(char *port) { config *config; - + for (config = Config; config; config = config->next) if (!strcmp(config->port, port)) return config; @@ -102,7 +102,7 @@ config *port_get_config(char *port) void sig_reload(int d) { reload = 1; - signal(SIGHUP, sig_reload); + signal(SIGHUP, sig_reload); } void sig_debug(int d) @@ -113,7 +113,7 @@ void sig_debug(int d) dump_ip_routes(2, 0); fprintf(stderr, "ax25-routes:\n"); dump_ax25_routes(2, 0); - signal(SIGUSR1, sig_debug); + signal(SIGUSR1, sig_debug); } void sig_term(int d) @@ -146,64 +146,59 @@ int main(int argc, char **argv) load_config(); load_cache(); - + if (fork()) return 0; - if ((s = socket(AF_INET, SOCK_PACKET, htons(ETH_P_AX25))) == -1) - { + if ((s = socket(AF_INET, SOCK_PACKET, htons(ETH_P_AX25))) == -1) { perror("AX.25 socket"); return 1; } - - if ((cntrl_s = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) - { + + if ((cntrl_s = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { perror("Control socket"); return 1; } - + unlink(DATA_AX25ROUTED_CTL_SOCK); cntrl_addr.sun_family = AF_UNIX; strcpy(cntrl_addr.sun_path, DATA_AX25ROUTED_CTL_SOCK); - cntrl_len = sizeof(cntrl_addr.sun_family) + strlen(DATA_AX25ROUTED_CTL_SOCK); + cntrl_len = + sizeof(cntrl_addr.sun_family) + + strlen(DATA_AX25ROUTED_CTL_SOCK); - if (bind(cntrl_s, (struct sockaddr *)&cntrl_addr, cntrl_len) < 0) - { + if (bind(cntrl_s, (struct sockaddr *) &cntrl_addr, cntrl_len) < 0) { perror("bind Control socket"); daemon_shutdown(1); } chmod(DATA_AX25ROUTED_CTL_SOCK, 0600); listen(cntrl_s, 1); - + signal(SIGUSR1, sig_debug); - signal(SIGHUP, sig_reload); + signal(SIGHUP, sig_reload); signal(SIGTERM, sig_term); - + cntrl_fd = -1; - - for (;;) - { + + for (;;) { fd_max = 0; FD_ZERO(&fd_set); FD_ZERO(&fd_set2); FD_MAX(s); - if (cntrl_fd > 0) - { + if (cntrl_fd > 0) { FD_MAX(cntrl_fd); FD_SET(cntrl_fd, &fd_set2); } else { FD_MAX(cntrl_s); } - if (select(fd_max+1, &fd_set, NULL, &fd_set2, NULL) < 0) - { + if (select(fd_max + 1, &fd_set, NULL, &fd_set2, NULL) < 0) { if (errno == EINTR) /* woops! */ continue; - if (!FD_ISSET(cntrl_fd, &fd_set2)) - { + if (!FD_ISSET(cntrl_fd, &fd_set2)) { perror("select"); save_cache(); daemon_shutdown(1); @@ -213,14 +208,11 @@ int main(int argc, char **argv) continue; } } - - if (cntrl_fd > 0) - { - if (FD_ISSET(cntrl_fd, &fd_set)) - { + + if (cntrl_fd > 0) { + if (FD_ISSET(cntrl_fd, &fd_set)) { size = read(cntrl_fd, buf, sizeof(buf)); - if (size > 0) - { + if (size > 0) { buf[size] = '\0'; interpret_command(cntrl_fd, buf); } else { @@ -228,11 +220,11 @@ int main(int argc, char **argv) cntrl_fd = -1; } } - } else - if (FD_ISSET(cntrl_s, &fd_set)) - { - if ((cntrl_fd=accept(cntrl_s, (struct sockaddr *) &cntrl_addr, &cntrl_len)) < 0) - { + } else if (FD_ISSET(cntrl_s, &fd_set)) { + if ((cntrl_fd = + accept(cntrl_s, + (struct sockaddr *) &cntrl_addr, + &cntrl_len)) < 0) { perror("accept Control"); save_cache(); daemon_shutdown(1); @@ -241,10 +233,10 @@ int main(int argc, char **argv) if (reload) reload_config(); - + if (FD_ISSET(s, &fd_set)) ax25_receive(s); } - - return 0; /* what ?! */ + + return 0; /* what ?! */ } diff --git a/ax25rtd/cache_ctl.c b/ax25rtd/cache_ctl.c index d204074..1f435b5 100644 --- a/ax25rtd/cache_ctl.c +++ b/ax25rtd/cache_ctl.c @@ -1,4 +1,4 @@ -/* $Id: cache_ctl.c,v 1.1 2001/04/10 01:58:39 csmall Exp $ +/* $Id: cache_ctl.c,v 1.2 2001/09/12 13:18:43 terry Exp $ * * Copyright (c) 1996 Jörg Reuter (jreuter@poboxes.com) * @@ -18,7 +18,7 @@ * */ -#include <stdlib.h> +#include <stdlib.h> #include <string.h> #include <time.h> #include <sys/socket.h> @@ -37,75 +37,69 @@ /* (later: haven't I seen this statement elsewere? hmm...) */ -int update_ip_route(config *config, unsigned long ip, int ipmode, ax25_address *call, time_t timestamp) +int update_ip_route(config * config, unsigned long ip, int ipmode, + ax25_address * call, time_t timestamp) { ip_rt_entry *bp = ip_routes; ip_rt_entry *bp_prev = ip_routes; char *iface; int action = 0; - + if (((ip ^ config->ip) & config->netmask) != 0) return 0; - + iface = config->dev; - - while (bp) - { - if (bp->ip == ip) - { + + while (bp) { + if (bp->ip == ip) { if (bp->timestamp == 0 && timestamp != 0) return 0; - if (strcmp(bp->iface, iface)) - { + if (strcmp(bp->iface, iface)) { action |= NEW_ROUTE; strcpy(bp->iface, iface); } - - if (memcmp(&bp->call, call, AXLEN)) - { + + if (memcmp(&bp->call, call, AXLEN)) { action |= NEW_ARP; memcpy(&bp->call, call, AXLEN); - } + } - if (ipmode != bp->ipmode) - { + if (ipmode != bp->ipmode) { action |= NEW_IPMODE; bp->ipmode = ipmode; } - + bp->timestamp = timestamp; - if (bp != ip_routes) - { + if (bp != ip_routes) { if (bp->next) bp->next->prev = bp->prev; if (bp->prev) bp->prev->next = bp->next; - bp->next = ip_routes; - bp->prev = NULL; + bp->next = ip_routes; + bp->prev = NULL; ip_routes->prev = bp; - ip_routes = bp; + ip_routes = bp; } - + return action; } bp_prev = bp; bp = bp->next; } - - if (ip_routes_cnt >= ip_maxroutes) - { + + if (ip_routes_cnt >= ip_maxroutes) { if (bp_prev == NULL) /* error */ return 0; - + bp_prev->prev->next = NULL; free(bp_prev); ip_routes_cnt--; } - + bp = (ip_rt_entry *) malloc(sizeof(ip_rt_entry)); if (bp == NULL) return 0; @@ -118,67 +112,67 @@ int update_ip_route(config *config, unsigned long ip, int ipmode, ax25_address * bp->timestamp = timestamp; strcpy(bp->iface, iface); - memcpy(&bp->call, call, AXLEN); + memcpy(&bp->call, call, AXLEN); - if (ip_routes == NULL) - { + if (ip_routes == NULL) { ip_routes = bp; bp->next = bp->prev = NULL; return action; } - - bp->next = ip_routes; - bp->prev = NULL; + + bp->next = ip_routes; + bp->prev = NULL; ip_routes->prev = bp; - ip_routes = bp; + ip_routes = bp; return action; } -ax25_rt_entry *update_ax25_route(config *config, ax25_address *call, int ndigi, ax25_address *digi, time_t timestamp) +ax25_rt_entry *update_ax25_route(config * config, ax25_address * call, + int ndigi, ax25_address * digi, + time_t timestamp) { ax25_rt_entry *bp = ax25_routes; ax25_rt_entry *bp_prev = ax25_routes; unsigned char *iface = config->dev; int action = 0; - - while (bp) - { - if (!memcmp(call, &bp->call, AXLEN) ) - { + + while (bp) { + if (!memcmp(call, &bp->call, AXLEN)) { if (bp->timestamp == 0 && timestamp != 0) return NULL; - if (strcmp(bp->iface, iface)) - { - del_kernel_ax25_route(bp->iface, &bp->call); - action |= NEW_ROUTE; - strcpy(bp->iface, iface); - } - - if (ndigi != bp->ndigi || memcmp(bp->digipeater, digi, bp->ndigi*AXLEN)) - { + if (strcmp(bp->iface, iface)) { + del_kernel_ax25_route(bp->iface, + &bp->call); + action |= NEW_ROUTE; + strcpy(bp->iface, iface); + } + + if (ndigi != bp->ndigi + || memcmp(bp->digipeater, digi, + bp->ndigi * AXLEN)) { action |= NEW_ROUTE; - memcpy(bp->digipeater, digi, ndigi*AXLEN); + memcpy(bp->digipeater, digi, + ndigi * AXLEN); bp->ndigi = ndigi; } - + bp->timestamp = timestamp; - if (bp != ax25_routes) - { + if (bp != ax25_routes) { if (bp->next) bp->next->prev = bp->prev; if (bp->prev) bp->prev->next = bp->next; - - bp->next = ax25_routes; - bp->prev = NULL; + + bp->next = ax25_routes; + bp->prev = NULL; ax25_routes->prev = bp; ax25_routes = bp; } - + if (action) return bp; else @@ -188,17 +182,16 @@ ax25_rt_entry *update_ax25_route(config *config, ax25_address *call, int ndigi, bp_prev = bp; bp = bp->next; } - - if (ax25_routes_cnt >= ax25_maxroutes) - { + + if (ax25_routes_cnt >= ax25_maxroutes) { if (bp_prev == NULL) /* error */ return NULL; - + bp_prev->prev->next = NULL; free(bp_prev); ax25_routes_cnt--; } - + bp = (ax25_rt_entry *) malloc(sizeof(ax25_rt_entry)); if (bp == NULL) return NULL; @@ -210,33 +203,32 @@ ax25_rt_entry *update_ax25_route(config *config, ax25_address *call, int ndigi, bp->call = *call; if (ndigi) - memcpy(bp->digipeater, digi, ndigi*AXLEN); + memcpy(bp->digipeater, digi, ndigi * AXLEN); bp->ndigi = ndigi; - if (ax25_routes == NULL) - { + if (ax25_routes == NULL) { ax25_routes = bp; bp->next = bp->prev = NULL; return bp; } - - bp->next = ax25_routes; - bp->prev = NULL; + + bp->next = ax25_routes; + bp->prev = NULL; ax25_routes->prev = bp; ax25_routes = bp; return bp; } -ip_rt_entry * remove_ip_route(ip_rt_entry *bp) +ip_rt_entry *remove_ip_route(ip_rt_entry * bp) { ip_rt_entry *bp2; - + bp2 = bp->next; if (bp2) bp2->prev = bp->prev; - if (bp->prev) + if (bp->prev) bp->prev->next = bp2; if (bp == ip_routes) ip_routes = bp2; @@ -248,7 +240,7 @@ ip_rt_entry * remove_ip_route(ip_rt_entry *bp) return bp2; } -ax25_rt_entry * remove_ax25_route(ax25_rt_entry *bp) +ax25_rt_entry *remove_ax25_route(ax25_rt_entry * bp) { ax25_rt_entry *bp2; ip_rt_entry *iprt; @@ -260,7 +252,7 @@ ax25_rt_entry * remove_ax25_route(ax25_rt_entry *bp) bp->prev->next = bp2; if (bp == ax25_routes) ax25_routes = bp2; - + for (iprt = ip_routes; iprt; iprt = iprt->next) if (!memcmp(&iprt->call, &bp->call, AXLEN)) remove_ip_route(iprt); @@ -275,17 +267,16 @@ ax25_rt_entry * remove_ax25_route(ax25_rt_entry *bp) int del_ip_route(unsigned long ip) { ip_rt_entry *bp; - + if (ip == 0) return 1; - for (bp=ip_routes; bp; bp = bp->next) - if (bp->ip == ip) - { + for (bp = ip_routes; bp; bp = bp->next) + if (bp->ip == ip) { remove_ip_route(bp); return 0; } - + return 1; } @@ -293,27 +284,26 @@ int invalidate_ip_route(unsigned long ip) { ip_rt_entry *bp; - for (bp=ip_routes; bp; bp = bp->next) - if (bp->ip == ip) - { + for (bp = ip_routes; bp; bp = bp->next) + if (bp->ip == ip) { bp->invalid = 1; return 1; } - + return 0; } -int del_ax25_route(config * config, ax25_address *call) +int del_ax25_route(config * config, ax25_address * call) { ax25_rt_entry *bp; - - for (bp=ax25_routes; bp; bp = bp->next) - if (!memcmp(call, &bp->call, AXLEN) && !strcmp(config->dev, bp->iface)) - { + + for (bp = ax25_routes; bp; bp = bp->next) + if (!memcmp(call, &bp->call, AXLEN) + && !strcmp(config->dev, bp->iface)) { remove_ax25_route(bp); return 0; } - + return 1; } @@ -322,9 +312,9 @@ void expire_ax25_route(time_t when) { ax25_rt_entry *bp; time_t now = time(NULL); - - for (bp = ax25_routes; bp; ) - if (bp->timestamp != 0 && bp->timestamp+when <= now) + + for (bp = ax25_routes; bp;) + if (bp->timestamp != 0 && bp->timestamp + when <= now) bp = remove_ax25_route(bp); else bp = bp->next; @@ -334,9 +324,9 @@ void expire_ip_route(time_t when) { ip_rt_entry *bp; time_t now = time(NULL); - - for (bp = ip_routes; bp; ) - if (bp->timestamp != 0 && bp->timestamp+when <= now) + + for (bp = ip_routes; bp;) + if (bp->timestamp != 0 && bp->timestamp + when <= now) bp = remove_ip_route(bp); else bp = bp->next; diff --git a/ax25rtd/cache_dump.c b/ax25rtd/cache_dump.c index 3b51db5..64cb8dd 100644 --- a/ax25rtd/cache_dump.c +++ b/ax25rtd/cache_dump.c @@ -1,4 +1,4 @@ -/* $Id: cache_dump.c,v 1.1 2001/04/10 01:58:39 csmall Exp $ +/* $Id: cache_dump.c,v 1.2 2001/09/12 13:18:43 terry Exp $ * * Copyright (c) 1996 Jörg Reuter (jreuter@poboxes.com) * @@ -17,7 +17,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ - + #include <stdio.h> #include <stdlib.h> #include <unistd.h> @@ -49,12 +49,10 @@ void dump_ip_routes(int fd, int cmd) unsigned long ip; int len; - for (bp = ip_routes; bp; bp = bp->next) - { + for (bp = ip_routes; bp; bp = bp->next) { ip = htonl(bp->ip); - if (cmd) - { + if (cmd) { len = sprintf(buf, "add ip "); dev = bp->iface; } else { @@ -66,24 +64,28 @@ void dump_ip_routes(int fd, int cmd) dev = bp->iface; } - len += sprintf(buf+len, "%d.%d.%d.%d", - (int) ((ip & 0xFF000000) >> 24), - (int) ((ip & 0x00FF0000) >> 16), - (int) ((ip & 0x0000FF00) >> 8), - (int) (ip & 0x000000FF)); - - len += sprintf(buf+len, " %-4s %8.8lx %-9s ", dev, bp->timestamp, ax25_ntoa(&bp->call)); + len += sprintf(buf + len, "%d.%d.%d.%d", + (int) ((ip & 0xFF000000) >> 24), + (int) ((ip & 0x00FF0000) >> 16), + (int) ((ip & 0x0000FF00) >> 8), + (int) (ip & 0x000000FF)); + + len += + sprintf(buf + len, " %-4s %8.8lx %-9s ", dev, + bp->timestamp, ax25_ntoa(&bp->call)); if (bp->invalid) - len += sprintf(buf+len, "X\n"); + len += sprintf(buf + len, "X\n"); else - len += sprintf(buf+len, "%c\n", bp->ipmode? 'v':'d'); + len += + sprintf(buf + len, "%c\n", + bp->ipmode ? 'v' : 'd'); write(fd, buf, len); } - + if (!cmd) write(fd, ".\n", 2); - + } void dump_ax25_routes(int fd, int cmd) @@ -93,10 +95,8 @@ void dump_ax25_routes(int fd, int cmd) char buf[256], *dev; int k, len; - for (bp = ax25_routes; bp; bp = bp->next) - { - if (cmd) - { + for (bp = ax25_routes; bp; bp = bp->next) { + if (cmd) { len = sprintf(buf, "add ax25 "); dev = bp->iface; } else { @@ -107,15 +107,19 @@ void dump_ax25_routes(int fd, int cmd) else dev = bp->iface; } - - len += sprintf(buf+len, "%-9s %-4s %8.8lx", ax25_ntoa(&bp->call), dev, bp->timestamp); - + + len += + sprintf(buf + len, "%-9s %-4s %8.8lx", + ax25_ntoa(&bp->call), dev, bp->timestamp); + for (k = 0; k < bp->ndigi; k++) - len += sprintf(buf+len, " %s", ax25_ntoa(&bp->digipeater[k])); - len += sprintf(buf+len, "\n"); + len += + sprintf(buf + len, " %s", + ax25_ntoa(&bp->digipeater[k])); + len += sprintf(buf + len, "\n"); write(fd, buf, len); } - + if (!cmd) write(fd, ".\n", 2); } @@ -126,26 +130,38 @@ void dump_config(int fd) int k; fprintf(stderr, "config:\n"); - for (config = Config; config; config = config->next) - { + for (config = Config; config; config = config->next) { fprintf(stderr, "Device = %s\n", config->dev); fprintf(stderr, "Port = %s\n", config->port); - fprintf(stderr, "ax25_add_route = %d\n", config->ax25_add_route); - fprintf(stderr, "ax25_for_me = %d\n", config->ax25_for_me); - fprintf(stderr, "ax25_add_default = %d\n", config->ax25_add_default); - fprintf(stderr, "ip_add_route = %d\n", config->ip_add_route); - fprintf(stderr, "ip_add_arp = %d\n", config->ip_add_arp); - fprintf(stderr, "ip_adjust_mode = %d\n", config->ip_adjust_mode); - fprintf(stderr, "netmask = %8.8lx\n", config->netmask); + fprintf(stderr, "ax25_add_route = %d\n", + config->ax25_add_route); + fprintf(stderr, "ax25_for_me = %d\n", + config->ax25_for_me); + fprintf(stderr, "ax25_add_default = %d\n", + config->ax25_add_default); + fprintf(stderr, "ip_add_route = %d\n", + config->ip_add_route); + fprintf(stderr, "ip_add_arp = %d\n", + config->ip_add_arp); + fprintf(stderr, "ip_adjust_mode = %d\n", + config->ip_adjust_mode); + fprintf(stderr, "netmask = %8.8lx\n", + config->netmask); fprintf(stderr, "ip = %8.8lx\n", config->ip); - fprintf(stderr, "nmycalls = %d\n", config->nmycalls); + fprintf(stderr, "nmycalls = %d\n", + config->nmycalls); fprintf(stderr, "calls ="); for (k = 0; k < config->nmycalls; k++) - fprintf(stderr, " %s", ax25_ntoa(&config->mycalls[k])); + fprintf(stderr, " %s", + ax25_ntoa(&config->mycalls[k])); fprintf(stderr, "\n"); fprintf(stderr, "ax25_default_path="); - for (k = 0; k < config->ax25_default_path.fsa_ax25.sax25_ndigis; k++) - fprintf(stderr, " %s", ax25_ntoa(&config->ax25_default_path.fsa_digipeater[k])); + for (k = 0; + k < config->ax25_default_path.fsa_ax25.sax25_ndigis; + k++) + fprintf(stderr, " %s", + ax25_ntoa(&config->ax25_default_path. + fsa_digipeater[k])); fprintf(stderr, "\n.\n"); } } diff --git a/ax25rtd/config.c b/ax25rtd/config.c index 1f92b2c..4d63b51 100644 --- a/ax25rtd/config.c +++ b/ax25rtd/config.c @@ -1,4 +1,4 @@ -/* $Id: config.c,v 1.1 2001/04/10 01:58:40 csmall Exp $ +/* $Id: config.c,v 1.2 2001/09/12 13:18:43 terry Exp $ * * Copyright (c) 1996 Jörg Reuter (jreuter@poboxes.com) * @@ -17,13 +17,13 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ - + #include <stdio.h> -#include <stdlib.h> +#include <stdlib.h> #include <unistd.h> -#include <fcntl.h> -#include <string.h> -#include <ctype.h> +#include <fcntl.h> +#include <string.h> +#include <ctype.h> #include <errno.h> #include <time.h> #include <sys/ioctl.h> @@ -45,13 +45,13 @@ #include "../pathnames.h" #include "ax25rtd.h" - + ax25_address *asc2ax(char *call) { static ax25_address callsign; - - ax25_aton_entry(call, (char *)&callsign); - + + ax25_aton_entry(call, (char *) &callsign); + return &callsign; } @@ -66,49 +66,46 @@ static long asc2ip(char *s) } -char * prepare_cmdline(char *buf) +char *prepare_cmdline(char *buf) { char *p; - for (p = buf; *p; p++) - { - if (*p == '\t') *p = ' '; + for (p = buf; *p; p++) { + if (*p == '\t') + *p = ' '; *p = tolower(*p); - - if (*p == '\n') - { + + if (*p == '\n') { *p = '\0'; break; } - - if (*p == '#') - { + + if (*p == '#') { *p = '\0'; break; } } - + return buf; } -char * get_next_arg(char **p) +char *get_next_arg(char **p) { char *p2; - + if (p == NULL || *p == NULL) return NULL; p2 = *p; - for (; *p2 && *p2 == ' '; p2++) ; + for (; *p2 && *p2 == ' '; p2++); if (!*p2) return NULL; - + *p = strchr(p2, ' '); - if (*p != NULL) - { + if (*p != NULL) { **p = '\0'; (*p)++; } - + return p2; } @@ -128,7 +125,7 @@ static int yesno(char *arg) return 0; if (!strcmp(arg, "yes") || !strcmp(arg, "1")) return 1; - if (!strcmp(arg, "no") || !strcmp(arg, "0")) + if (!strcmp(arg, "no") || !strcmp(arg, "0")) return 0; return -1; } @@ -136,7 +133,7 @@ static int yesno(char *arg) static ax25_address *get_mycall(char *port) { char *addr; - + if ((addr = ax25_config_get_addr(port)) == NULL) return NULL; @@ -149,36 +146,35 @@ void load_ports(void) config *config, *cfg, *ncfg; char buf[1024]; struct ifconf ifc; - struct ifreq ifr, *ifrp; + struct ifreq ifr, *ifrp; int k, fd; - if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) - { + if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { fprintf(stderr, "Unable to open socket\n"); exit(1); } - - ifc.ifc_len = sizeof(buf); - ifc.ifc_buf = buf; - if (ioctl(fd, SIOCGIFCONF, &ifc) < 0) - { - fprintf(stderr, "SIOCGIFCONF: %s\n", strerror(errno)); - return; - } + + ifc.ifc_len = sizeof(buf); + ifc.ifc_buf = buf; + if (ioctl(fd, SIOCGIFCONF, &ifc) < 0) { + fprintf(stderr, "SIOCGIFCONF: %s\n", strerror(errno)); + return; + } ifrp = ifc.ifc_req; - for (k = ifc.ifc_len / sizeof(struct ifreq); k > 0; k--, ifrp++) - { - strcpy(ifr.ifr_name, ifrp->ifr_name); - if (strcmp(ifr.ifr_name, "lo") == 0) continue; - - if (ioctl(fd, SIOCGIFFLAGS, &ifr) < 0) - { - fprintf(stderr, "SIOCGIFFLAGS: %s\n", strerror(errno)); + for (k = ifc.ifc_len / sizeof(struct ifreq); k > 0; k--, ifrp++) { + strcpy(ifr.ifr_name, ifrp->ifr_name); + if (strcmp(ifr.ifr_name, "lo") == 0) + continue; + + if (ioctl(fd, SIOCGIFFLAGS, &ifr) < 0) { + fprintf(stderr, "SIOCGIFFLAGS: %s\n", + strerror(errno)); exit(1); - } + } - if (!(ifr.ifr_flags & IFF_UP)) continue; + if (!(ifr.ifr_flags & IFF_UP)) + continue; ioctl(fd, SIOCGIFHWADDR, &ifr); @@ -186,14 +182,19 @@ void load_ports(void) continue; for (config = Config; config; config = config->next) - if (!memcmp(&config->mycalls[0], ifr.ifr_hwaddr.sa_data, AXLEN) && !*config->dev) - { + if (!memcmp + (&config->mycalls[0], ifr.ifr_hwaddr.sa_data, + AXLEN) && !*config->dev) { strcpy(config->dev, ifr.ifr_name); ioctl(fd, SIOCGIFADDR, &ifr); - config->ip = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr; + config->ip = + ((struct sockaddr_in *) &ifr. + ifr_addr)->sin_addr.s_addr; strcpy(ifr.ifr_name, config->dev); ioctl(fd, SIOCGIFNETMASK, &ifr); - config->netmask = ((struct sockaddr_in *) &ifr.ifr_netmask)->sin_addr.s_addr; + config->netmask = + ((struct sockaddr_in *) &ifr. + ifr_netmask)->sin_addr.s_addr; break; } } @@ -201,12 +202,9 @@ void load_ports(void) config = cfg = Config; - while(config) - { - if (!*config->dev) - { - if (config == Config) - { + while (config) { + if (!*config->dev) { + if (config == Config) { Config = config->next; cfg = Config; } else @@ -230,33 +228,39 @@ void load_listeners(void) FILE *fp; ax25_address *axcall; - + fp = fopen(PROC_AX25_FILE, "r"); - - if (fp == NULL) - { + + if (fp == NULL) { fprintf(stderr, "No AX.25 in kernel. Tss, tss...\n"); exit(1); } - - while (fgets(buf, sizeof(buf)-1, fp) != NULL) - { + + while (fgets(buf, sizeof(buf) - 1, fp) != NULL) { k = sscanf(buf, "%s %s %s %s", dummy, device, call, dcall); - if (k == 4 && !strcmp(dcall, "*")) - { + if (k == 4 && !strcmp(dcall, "*")) { axcall = asc2ax(call); if (!strcmp("*", device)) { - for (config = Config; config; config = config->next) { - if (call_is_mycall(config, axcall) || config->nmycalls > AX25_MAXCALLS) + for (config = Config; config; + config = config->next) { + if (call_is_mycall(config, axcall) + || config->nmycalls > + AX25_MAXCALLS) continue; - memcpy(&config->mycalls[config->nmycalls++], axcall, AXLEN); + memcpy(&config-> + mycalls[config->nmycalls++], + axcall, AXLEN); } } else { config = dev_get_config(device); - if (config == NULL || call_is_mycall(config, axcall) || config->nmycalls > AX25_MAXCALLS) + if (config == NULL + || call_is_mycall(config, axcall) + || config->nmycalls > AX25_MAXCALLS) continue; - memcpy(&config->mycalls[config->nmycalls++], axcall, AXLEN); + memcpy(&config-> + mycalls[config->nmycalls++], axcall, + AXLEN); } } } @@ -269,19 +273,18 @@ void load_config() char buf[1024], *p, *cmd, *arg; config *config, *cfg; ax25_address *axcall; - + config = NULL; - + fp = fopen(CONF_AX25ROUTED_FILE, "r"); - - if (fp == NULL) - { - fprintf(stderr, "config file %s not found\n", CONF_AX25ROUTED_FILE); + + if (fp == NULL) { + fprintf(stderr, "config file %s not found\n", + CONF_AX25ROUTED_FILE); exit(1); } - - while(fgets(buf, sizeof(buf)-1, fp) != NULL) - { + + while (fgets(buf, sizeof(buf) - 1, fp) != NULL) { p = prepare_cmdline(buf); if (!*p) continue; @@ -290,50 +293,46 @@ void load_config() if (cmd == NULL) continue; arg = get_next_arg(&p); - - if (*cmd == '[') - { + + if (*cmd == '[') { cmd++; p = strrchr(cmd, ']'); - if (p == NULL) - { - fprintf(stderr, "syntax error: [%s\n", cmd); + if (p == NULL) { + fprintf(stderr, "syntax error: [%s\n", + cmd); continue; } *p = '\0'; - + axcall = get_mycall(cmd); if (axcall == NULL) continue; - - cfg = (struct config_ *) malloc(sizeof(struct config_)); - if (cfg == NULL) - { + + cfg = + (struct config_ *) + malloc(sizeof(struct config_)); + if (cfg == NULL) { fprintf(stderr, "out of memory\n"); exit(1); } memset(cfg, 0, sizeof(struct config_)); - + if (config) config->next = cfg; else Config = cfg; - + cfg->next = NULL; config = cfg; strcpy(config->port, cmd); memcpy(&config->mycalls[0], axcall, AXLEN); config->nmycalls = 1; - } else - if (config && !strcmp(cmd, "ax25-learn-routes")) - { - /* ax25-learn-routes no|yes: learn digipeater path */ - if (arg) - { + } else if (config && !strcmp(cmd, "ax25-learn-routes")) { + /* ax25-learn-routes no|yes: learn digipeater path */ + if (arg) { int k = yesno(arg); - if (k == -1) - { + if (k == -1) { invalid_arg(cmd, arg); continue; } else { @@ -341,16 +340,12 @@ void load_config() } } else missing_arg(cmd); - } else - if (config && !strcmp(cmd, "ax25-learn-only-mine")) - { - /* ax25-learn-only-mine no|yes: learn only if addressed to me */ - if (arg) - { + } else if (config && !strcmp(cmd, "ax25-learn-only-mine")) { + /* ax25-learn-only-mine no|yes: learn only if addressed to me */ + if (arg) { int k = yesno(arg); - if (k == -1) - { + if (k == -1) { invalid_arg(cmd, arg); continue; } else { @@ -358,50 +353,46 @@ void load_config() } } else missing_arg(cmd); - } else - if (config && !strcmp(cmd, "ax25-add-path")) - { - /* ax25-add-path [no|<digis>]: add digis if digi-less frame rvd */ + } else if (config && !strcmp(cmd, "ax25-add-path")) { + /* ax25-add-path [no|<digis>]: add digis if digi-less frame rvd */ int k = 0; if (!arg || (arg && yesno(arg) == 0)) continue; config->ax25_add_default = 1; - while (arg && k < AX25_MAX_DIGIS) - { - memcpy(&config->ax25_default_path.fsa_digipeater[k], asc2ax(arg), AXLEN); + while (arg && k < AX25_MAX_DIGIS) { + memcpy(&config->ax25_default_path. + fsa_digipeater[k], asc2ax(arg), + AXLEN); arg = get_next_arg(&p); k++; } - config->ax25_default_path.fsa_ax25.sax25_ndigis = k; - } else - if (config && !strcmp(cmd, "ax25-more-mycalls")) - { - /* ax25-more-mycalls call1 call2: frames to this calls are for "me", too. */ - if (arg) - { - while(arg && config->nmycalls < AX25_MAXCALLS) - { + config->ax25_default_path.fsa_ax25.sax25_ndigis = + k; + } else if (config && !strcmp(cmd, "ax25-more-mycalls")) { + /* ax25-more-mycalls call1 call2: frames to this calls are for "me", too. */ + if (arg) { + while (arg + && config->nmycalls < + AX25_MAXCALLS) { axcall = asc2ax(arg); if (call_is_mycall(config, axcall)) { arg = get_next_arg(&p); continue; } - memcpy(&config->mycalls[config->nmycalls++], axcall, AXLEN); + memcpy(&config-> + mycalls[config->nmycalls++], + axcall, AXLEN); arg = get_next_arg(&p); } } else missing_arg(cmd); - } else - if (config && !strcmp(cmd, "ip-learn-routes")) - { - /* ip-learn-routes no|yes: learn ip routes */ - if (arg) - { + } else if (config && !strcmp(cmd, "ip-learn-routes")) { + /* ip-learn-routes no|yes: learn ip routes */ + if (arg) { int k = yesno(arg); - - if (k == -1) - { + + if (k == -1) { invalid_arg(cmd, arg); continue; } else { @@ -409,16 +400,12 @@ void load_config() } } else missing_arg(cmd); - } else - if (config && !strcmp(cmd, "irtt")) - { - /* irtt <irtt>: new routes will get this IRTT in msec */ - if (arg) - { + } else if (config && !strcmp(cmd, "irtt")) { + /* irtt <irtt>: new routes will get this IRTT in msec */ + if (arg) { int k = atoi(arg); - - if (k == 0) - { + + if (k == 0) { invalid_arg(cmd, arg); continue; } else { @@ -426,16 +413,12 @@ void load_config() } } else missing_arg(cmd); - } else - if (config && !strcmp(cmd, "dg-mtu")) - { - /* dg-mtu <mtu>: MTU for datagram mode routes (unused) */ - if (arg) - { + } else if (config && !strcmp(cmd, "dg-mtu")) { + /* dg-mtu <mtu>: MTU for datagram mode routes (unused) */ + if (arg) { int k = atoi(arg); - - if (k == 0) - { + + if (k == 0) { invalid_arg(cmd, arg); continue; } else { @@ -443,33 +426,25 @@ void load_config() } } else missing_arg(cmd); - } else - if (config && !strcmp(cmd, "vc-mtu")) - { + } else if (config && !strcmp(cmd, "vc-mtu")) { /* vc-mtu <mtu>: MTU for virtual connect mode routes (unused) */ - if (arg) - { - int k = atoi(arg); + if (arg) { + int k = atoi(arg); - if (k == 0) - { - invalid_arg(cmd, arg); - continue; - } else { - config->vc_mtu = k; + if (k == 0) { + invalid_arg(cmd, arg); + continue; + } else { + config->vc_mtu = k; } } else missing_arg(cmd); - } else - if (config && !strcmp(cmd, "ip-adjust-mode")) - { - /* ip-adjust-mode no|yes: adjust ip-mode? (dg or vc) */ - if (arg) - { + } else if (config && !strcmp(cmd, "ip-adjust-mode")) { + /* ip-adjust-mode no|yes: adjust ip-mode? (dg or vc) */ + if (arg) { int k = yesno(arg); - - if (k == -1) - { + + if (k == -1) { invalid_arg(cmd, arg); continue; } else { @@ -477,16 +452,12 @@ void load_config() } } else missing_arg(cmd); - } else - if (config && !strcmp(cmd, "arp-add")) - { - /* arp-add no|yes: adjust arp table? */ - if (arg) - { + } else if (config && !strcmp(cmd, "arp-add")) { + /* arp-add no|yes: adjust arp table? */ + if (arg) { int k = yesno(arg); - - if (k == -1) - { + + if (k == -1) { invalid_arg(cmd, arg); continue; } else { @@ -494,44 +465,38 @@ void load_config() } } else missing_arg(cmd); - } else - if (!strcmp(cmd, "ip-encaps-dev")) { + } else if (!strcmp(cmd, "ip-encaps-dev")) { if (arg) strcpy(ip_encaps_dev, arg); else missing_arg(cmd); - } else - if (!strcmp(cmd, "ax25-maxroutes")) - { + } else if (!strcmp(cmd, "ax25-maxroutes")) { if (arg) ax25_maxroutes = atoi(arg); else missing_arg(cmd); - } else - if (!strcmp(cmd, "ip-maxroutes")) - { + } else if (!strcmp(cmd, "ip-maxroutes")) { if (arg) ax25_maxroutes = atoi(arg); else missing_arg(cmd); - + } else fprintf(stderr, "invalid command %s\n", cmd); } fclose(fp); - + load_ports(); load_listeners(); - + reload = 0; } void reload_config(void) { config *cfg, *config = Config; - - while(config) - { + + while (config) { cfg = config->next; free(config); config = cfg; @@ -584,65 +549,68 @@ void interpret_command(int fd, unsigned char *buf) long ip; p = prepare_cmdline(buf); - - if (!*p) return; - + + if (!*p) + return; + cmd = get_next_arg(&p); arg = get_next_arg(&p); - - if (!strcmp(cmd, "add")) - { + + if (!strcmp(cmd, "add")) { if (arg == NULL) return; if ((arg2 = get_next_arg(&p)) == NULL) return; - if ( (dev = get_next_arg(&p)) == NULL) + if ((dev = get_next_arg(&p)) == NULL) return; - if ( (time = get_next_arg(&p)) == NULL) + if ((time = get_next_arg(&p)) == NULL) return; - if ( (config = dev_get_config(dev)) == NULL) + if ((config = dev_get_config(dev)) == NULL) return; sscanf(time, "%lx", &stamp); - if (!strcmp(arg, "ax25")) - { + if (!strcmp(arg, "ax25")) { ndigi = 0; arg = get_next_arg(&p); - while (arg != NULL) - { - memcpy(&digipeater[ndigi++], asc2ax(arg), AXLEN); + while (arg != NULL) { + memcpy(&digipeater[ndigi++], asc2ax(arg), + AXLEN); if (ndigi == AX25_MAX_DIGIS) break; arg = get_next_arg(&p); } - ax25rt = update_ax25_route(config, asc2ax(arg2), ndigi, digipeater, stamp); + ax25rt = + update_ax25_route(config, asc2ax(arg2), ndigi, + digipeater, stamp); if (ax25rt != NULL) set_ax25_route(config, ax25rt); - } else - if (!strcmp(arg, "ip")) - { + } else if (!strcmp(arg, "ip")) { ip = asc2ip(arg2); - + if ((arg2 = get_next_arg(&p)) == NULL) return; if ((arg = get_next_arg(&p)) == NULL) return; - + if (*arg == 'x') return; - + ipmode = (*arg == 'v'); - if ((config = dev_get_config(ip_encaps_dev)) == NULL) { - printf("no config for %s\n", ip_encaps_dev); + if ((config = + dev_get_config(ip_encaps_dev)) == NULL) { + printf("no config for %s\n", + ip_encaps_dev); return; } - action = update_ip_route(config, ip, ipmode, asc2ax(arg2), stamp); + action = + update_ip_route(config, ip, ipmode, + asc2ax(arg2), stamp); if (action & NEW_ROUTE) if (set_route(config, ip)) @@ -651,68 +619,57 @@ void interpret_command(int fd, unsigned char *buf) if (action & NEW_ARP) if (set_arp(config, ip, asc2ax(arg2))) return; - + if (action & NEW_IPMODE) - if (set_ipmode(config, asc2ax(arg2), ipmode)) + if (set_ipmode + (config, asc2ax(arg2), ipmode)) return; } - } else if (!strcmp(cmd, "del")) - { + } else if (!strcmp(cmd, "del")) { if (arg == NULL) return; arg2 = get_next_arg(&p); if (arg2 == NULL) return; - - if (!strcmp(arg, "ax25")) - { + + if (!strcmp(arg, "ax25")) { arg = get_next_arg(&p); - if (arg == NULL || (config = dev_get_config(arg)) == NULL) + if (arg == NULL + || (config = dev_get_config(arg)) == NULL) return; del_ax25_route(config, asc2ax(arg2)); - } else - if (!strcmp(arg, "ip")) - { + } else if (!strcmp(arg, "ip")) { del_ip_route(asc2ip(arg2)); } - } else if (!strcmp(cmd, "expire")) - { + } else if (!strcmp(cmd, "expire")) { if (arg == NULL) return; sscanf(arg, "%ld", &stamp); - if (stamp != 0) - { - stamp*=60; + if (stamp != 0) { + stamp *= 60; expire_ax25_route(stamp); expire_ip_route(stamp); } - } else if (!strcmp(cmd, "reload")) - { + } else if (!strcmp(cmd, "reload")) { reload_config(); - } else if (!strcmp(cmd, "list")) - { + } else if (!strcmp(cmd, "list")) { if (arg == NULL) return; - + if (!strcmp(arg, "ax25")) dump_ax25_routes(fd, 0); - else - if (!strcmp(arg, "ip")) + else if (!strcmp(arg, "ip")) dump_ip_routes(fd, 0); - } else if (!strcmp(cmd, "shutdown")) - { + } else if (!strcmp(cmd, "shutdown")) { save_cache(); daemon_shutdown(0); - } else if (!strcmp(cmd, "save")) - { + } else if (!strcmp(cmd, "save")) { save_cache(); - } else if (!strcmp(cmd, "version")) - { + } else if (!strcmp(cmd, "version")) { char buf[256]; sprintf(buf, "%s\n", Version); write(fd, buf, strlen(buf)); - } else if (!strcmp(cmd, "quit")) - { + } else if (!strcmp(cmd, "quit")) { close(fd); } } @@ -721,28 +678,28 @@ void load_cache(void) { FILE *fp; char buf[512]; - + fp = fopen(DATA_AX25ROUTED_AXRT_FILE, "r"); - if (fp != NULL) - { - while(fgets(buf, sizeof(buf), fp) != NULL) + if (fp != NULL) { + while (fgets(buf, sizeof(buf), fp) != NULL) interpret_command(2, buf); fclose(fp); - } else perror("open AX.25 route cache file"); - + } else + perror("open AX.25 route cache file"); + fp = fopen(DATA_AX25ROUTED_IPRT_FILE, "r"); - if (fp != NULL) - { - while(fgets(buf, sizeof(buf), fp) != NULL) + if (fp != NULL) { + while (fgets(buf, sizeof(buf), fp) != NULL) interpret_command(2, buf); fclose(fp); - } else perror("open IP route cache file"); + } else + perror("open IP route cache file"); } void save_cache(void) { int fd; - + fd = creat(DATA_AX25ROUTED_AXRT_FILE, 0664); dump_ax25_routes(fd, 1); close(fd); diff --git a/ax25rtd/listener.c b/ax25rtd/listener.c index bd6b7ad..b3636c4 100644 --- a/ax25rtd/listener.c +++ b/ax25rtd/listener.c @@ -1,4 +1,4 @@ -/* $Id: listener.c,v 1.1 2001/04/10 01:58:42 csmall Exp $ +/* $Id: listener.c,v 1.2 2001/09/12 13:18:43 terry Exp $ * * Copyright (c) 1996 Jörg Reuter (jreuter@poboxes.com) * @@ -17,14 +17,14 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ - + /* TODO: Should add partial path to ax25_route if we are one of the * digipeaters. */ #include <stdio.h> #include <string.h> -#include <unistd.h> +#include <unistd.h> #include <signal.h> #include <sys/ioctl.h> #include <sys/time.h> @@ -49,29 +49,29 @@ static unsigned long get_from_arp(unsigned char *data, int size) { if (size < 16) return 0; - + return ntohl(0); } static unsigned long get_from_ip(unsigned char *data, int size) { unsigned long adr; - - if ((*data & 0xf)*4 < IPLEN) + + if ((*data & 0xf) * 4 < IPLEN) return 0; - adr = data[12] << 24; /* NETWORK byte order */ + adr = data[12] << 24; /* NETWORK byte order */ adr += data[13] << 16; - adr += data[14] << 8; + adr += data[14] << 8; adr += data[15]; return ntohl(adr); /* HOST byte order */ } -int call_is_mycall(config *config, ax25_address *call) +int call_is_mycall(config * config, ax25_address * call) { int k; - + for (k = 0; k < config->nmycalls; k++) if (!memcmp(call, &config->mycalls[k], AXLEN)) return 1; @@ -84,30 +84,32 @@ int call_is_mycall(config *config, ax25_address *call) static int check_ax25_addr(unsigned char *buf) { - int k; - unsigned char c; - - /* must start with at least one capital letter or digit */ - for (k=0; k < 6; k++) { - c = buf[k] >> 1; - if (c == ' ') break; - if ((c < 'A' || c > 'Z') && (c < '0' || c > '9')) - return 1; - } - - /* NULL address is invalid */ - if (k == 0) - return 1; - - /* remaining fields must consist of spaces only */ - for (k++; k < 6; k++) - if (buf[k] >> 1 != ' ') - return 1; - - return 0; + int k; + unsigned char c; + + /* must start with at least one capital letter or digit */ + for (k = 0; k < 6; k++) { + c = buf[k] >> 1; + if (c == ' ') + break; + if ((c < 'A' || c > 'Z') && (c < '0' || c > '9')) + return 1; + } + + /* NULL address is invalid */ + if (k == 0) + return 1; + + /* remaining fields must consist of spaces only */ + for (k++; k < 6; k++) + if (buf[k] >> 1 != ' ') + return 1; + + return 0; } -static inline void invert_digipeater_path(ax25_address *digipeater, int ndigi) +static inline void invert_digipeater_path(ax25_address * digipeater, + int ndigi) { int k, m; ax25_address fdigi; @@ -115,43 +117,42 @@ static inline void invert_digipeater_path(ax25_address *digipeater, int ndigi) if (ndigi == 0) return; - for (m = 0,k = ndigi-1; k > m; k--, m++) { + for (m = 0, k = ndigi - 1; k > m; k--, m++) { memcpy(&fdigi, &digipeater[m], AXLEN); memcpy(&digipeater[m], &digipeater[k], AXLEN); memcpy(&digipeater[k], &fdigi, AXLEN); } } -int set_arp(config *config, long ip, ax25_address *call) +int set_arp(config * config, long ip, ax25_address * call) { - struct sockaddr_in *isa; + struct sockaddr_in *isa; struct sockaddr_ax25 *asa; struct arpreq arp; - int fds; - + int fds; + if (!config->ip_add_arp) return 0; - + fds = socket(AF_INET, SOCK_DGRAM, 0); memset((char *) &arp, 0, sizeof(arp)); - isa = (struct sockaddr_in *) &arp.arp_pa; + isa = (struct sockaddr_in *) &arp.arp_pa; asa = (struct sockaddr_ax25 *) &arp.arp_ha; - + isa->sin_family = AF_INET; isa->sin_port = 0; isa->sin_addr.s_addr = ip; asa->sax25_family = AF_AX25; asa->sax25_ndigis = 0; - asa->sax25_call = *call; + asa->sax25_call = *call; arp.arp_flags = ATF_PERM | ATF_COM; strcpy(arp.arp_dev, config->dev); - - if (ioctl(fds, SIOCSARP, &arp) < 0) - { + + if (ioctl(fds, SIOCSARP, &arp) < 0) { invalidate_ip_route(ip); perror("routspy: SIOCSARP"); close(fds); @@ -161,42 +162,37 @@ int set_arp(config *config, long ip, ax25_address *call) return 0; } -int set_route(config *config, long ip) +int set_route(config * config, long ip) { struct rtentry rt; struct sockaddr_in *isa; - char origdev[16], buf[1024]; + char origdev[16], buf[1024]; /* modif f5lct */ - long gwr; + long gwr; /* fin modif f5lct */ long ipr; int fds; FILE *fp; - + fp = fopen(PROC_IP_ROUTE_FILE, "r"); - if (fp == NULL) - { + if (fp == NULL) { invalidate_ip_route(ip); return 1; } - fgets(buf, sizeof(buf)-1, fp); /* discard header */ - while (fgets(buf, sizeof(buf)-1, fp) != NULL) - { + fgets(buf, sizeof(buf) - 1, fp); /* discard header */ + while (fgets(buf, sizeof(buf) - 1, fp) != NULL) { /* modif f5lct */ - /* sscanf(buf, "%s %lx", origdev, &ipr); */ + /* sscanf(buf, "%s %lx", origdev, &ipr); */ sscanf(buf, "%s %lx %lx", origdev, &ipr, &gwr); - if (ipr == ip && gwr == 00000000 ) + if (ipr == ip && gwr == 00000000) /* fin modif f5lct */ { - if (dev_get_config(origdev) == NULL) - { + if (dev_get_config(origdev) == NULL) { invalidate_ip_route(ip); fclose(fp); return 1; - } - else - { + } else { del_kernel_ip_route(origdev, ip); } } @@ -212,25 +208,23 @@ int set_route(config *config, long ip) memset((char *) &rt, 0, sizeof(rt)); isa = (struct sockaddr_in *) &rt.rt_dst; - + isa->sin_family = AF_INET; isa->sin_port = 0; isa->sin_addr.s_addr = ip; - + rt.rt_flags = RTF_UP | RTF_HOST; rt.rt_dev = config->dev; - if (config->tcp_irtt != 0) - { + if (config->tcp_irtt != 0) { rt.rt_irtt = config->tcp_irtt; rt.rt_flags |= RTF_IRTT; } isa = (struct sockaddr_in *) &rt.rt_genmask; isa->sin_addr.s_addr = 0xffffffff; - - if (ioctl(fds, SIOCADDRT, &rt) < 0) - { + + if (ioctl(fds, SIOCADDRT, &rt) < 0) { invalidate_ip_route(ip); perror("ax25rtd: IP SIOCADDRT"); close(fds); @@ -256,15 +250,14 @@ int del_kernel_ip_route(char *dev, long ip) memset((char *) &rt, 0, sizeof(struct rtentry)); isa = (struct sockaddr_in *) &rt.rt_dst; - + isa->sin_family = AF_INET; isa->sin_addr.s_addr = ip; - rt.rt_flags = RTF_UP | RTF_HOST; + rt.rt_flags = RTF_UP | RTF_HOST; rt.rt_dev = dev; - if (ioctl(fds, SIOCDELRT, &rt) < 0) - { + if (ioctl(fds, SIOCDELRT, &rt) < 0) { perror("ax25rtd: IP SIOCDELRT"); close(fds); return 1; @@ -273,77 +266,74 @@ int del_kernel_ip_route(char *dev, long ip) return 0; } -int set_ax25_route(config *config, ax25_rt_entry *rt) +int set_ax25_route(config * config, ax25_rt_entry * rt) { struct ax25_routes_struct ax25_route; int fds, k; - + if (!config->ax25_add_route) return 0; - ax25_route.port_addr = config->mycalls[0]; - ax25_route.dest_addr = rt->call; + ax25_route.port_addr = config->mycalls[0]; + ax25_route.dest_addr = rt->call; ax25_route.digi_count = rt->ndigi; for (k = 0; k < rt->ndigi; k++) ax25_route.digi_addr[k] = rt->digipeater[k]; fds = socket(AF_AX25, SOCK_SEQPACKET, 0); - - if (ioctl(fds, SIOCADDRT, &ax25_route) < 0) - { + + if (ioctl(fds, SIOCADDRT, &ax25_route) < 0) { perror("ax25rtd: AX.25 SIOCADDRT"); close(fds); return 1; } - + close(fds); return 0; } -int del_kernel_ax25_route(char *dev, ax25_address *call) +int del_kernel_ax25_route(char *dev, ax25_address * call) { struct ax25_routes_struct ax25_route; int fds; config *config; - + config = dev_get_config(dev); if (config == NULL || !config->ax25_add_route) return 0; - ax25_route.port_addr = config->mycalls[0]; - ax25_route.dest_addr = *call; + ax25_route.port_addr = config->mycalls[0]; + ax25_route.dest_addr = *call; fds = socket(AF_AX25, SOCK_SEQPACKET, 0); - - if (ioctl(fds, SIOCDELRT, &ax25_route) < 0) - { + + if (ioctl(fds, SIOCDELRT, &ax25_route) < 0) { perror("ax25rtd: AX.25 SIOCDELRT"); close(fds); return 1; } - + close(fds); return 0; } -int set_ipmode(config *config, ax25_address *call, int ipmode) +int set_ipmode(config * config, ax25_address * call, int ipmode) { struct ax25_route_opt_struct ax25_opt; int fds; - + if (!config->ip_adjust_mode) return 0; - + ax25_opt.port_addr = config->mycalls[0]; ax25_opt.dest_addr = *call; - ax25_opt.cmd = AX25_SET_RT_IPMODE; - ax25_opt.arg = ipmode? 'V':'D'; - + ax25_opt.cmd = AX25_SET_RT_IPMODE; + ax25_opt.arg = ipmode ? 'V' : 'D'; + fds = socket(AF_AX25, SOCK_SEQPACKET, 0); - - if (ioctl(fds, SIOCAX25OPTRT, &ax25_opt) < 0) - { + + if (ioctl(fds, SIOCAX25OPTRT, &ax25_opt) < 0) { perror("ax25rtd: SIOCAX25OPTRT"); close(fds); return 1; @@ -351,7 +341,7 @@ int set_ipmode(config *config, ax25_address *call, int ipmode) close(fds); return 0; - + } /* Yes, the code *IS* ugly... */ @@ -368,11 +358,10 @@ void ax25_receive(int sock) int size, asize, action, ipmode, ctl, pid, ndigi, kdigi, mine; time_t stamp; config *config; - ax25_rt_entry * ax25rt; + ax25_rt_entry *ax25rt; asize = sizeof(sa); - if ((size = recvfrom(sock, buf, sizeof(buf), 0, &sa, &asize)) < 0) - { + if ((size = recvfrom(sock, buf, sizeof(buf), 0, &sa, &asize)) < 0) { perror("recvfrom"); save_cache(); daemon_shutdown(1); @@ -383,7 +372,7 @@ void ax25_receive(int sock) pid = ctl = 0; config = dev_get_config(sa.sa_data); - + if (config == NULL) return; @@ -393,16 +382,16 @@ void ax25_receive(int sock) * KISS data? */ - if ((*data & 0x0f) != 0) + if ((*data & 0x0f) != 0) return; - + SKIP(1); /* valid frame? */ - - if (size < (2*AXLEN+1)) + + if (size < (2 * AXLEN + 1)) return; - + /* * Get destination callsign */ @@ -413,33 +402,32 @@ void ax25_receive(int sock) memcpy(&destcall, data, AXLEN); destcall.ax25_call[6] &= 0x1e; SKIP(AXLEN); - + mine = call_is_mycall(config, &destcall); - + /* * Get Source callsign */ - + if (check_ax25_addr(data)) return; memcpy(&srccall, data, AXLEN); srccall.ax25_call[6] &= 0x1e; SKIP(ALEN); - + /* * How long is our control field? */ - + extseq = ~(*data) & SSSID_SPARE; - + /* * Extract digipeaters */ ndigi = 0; - while (((*data) & HDLCAEB) != HDLCAEB) - { + while (((*data) & HDLCAEB) != HDLCAEB) { SKIP(1); if (size <= 0 || check_ax25_addr(data)) return; @@ -448,23 +436,22 @@ void ax25_receive(int sock) memcpy(&digipeater[ndigi++], data, AXLEN); else return; - + SKIP(ALEN); } - + SKIP(1); - if (size <= 0) + if (size <= 0) return; - + /* * Get type of frame */ if ((*data & LAPB_S) == LAPB_I) ctl = LAPB_I; - else - { + else { ctl = *data; if (extseq == 0) ctl &= ~LAPB_PF; @@ -474,68 +461,72 @@ void ax25_receive(int sock) * Check if info frame and get PID */ - if (ctl == LAPB_I || ctl == LAPB_UI) - { - SKIP(extseq? 2:1); + if (ctl == LAPB_I || ctl == LAPB_UI) { + SKIP(extseq ? 2 : 1); if (size <= 0) return; /* Get PID */ - + pid = *data; - if (pid == PID_SEGMENT) - { + if (pid == PID_SEGMENT) { SKIP(1); if (size <= 0) return; pid = 0; - - if (*data && SEG_FIRST) - { + + if (*data && SEG_FIRST) { pid = *data; - SKIP(1); + SKIP(1); if (size <= 0) return; - } + } } - } - + } + /* * See if it is fully digipeated (TODO: or if we are the next digipeater) */ - for (kdigi = 0; kdigi < ndigi; kdigi++) - { - if ((digipeater[kdigi].ax25_call[6] & AX25_REPEATED) != AX25_REPEATED) + for (kdigi = 0; kdigi < ndigi; kdigi++) { + if ((digipeater[kdigi].ax25_call[6] & AX25_REPEATED) != + AX25_REPEATED) return; - + digipeater[kdigi].ax25_call[6] &= 0x1e; } invert_digipeater_path(digipeater, ndigi); - + /* * Are we allowed to add it to our routing table? */ - if (mine || !config->ax25_for_me) - { - if (!mine && ndigi == 0 && config->ax25_add_default) - { - ndigi = config->ax25_default_path.fsa_ax25.sax25_ndigis; + if (mine || !config->ax25_for_me) { + if (!mine && ndigi == 0 && config->ax25_add_default) { + ndigi = + config->ax25_default_path.fsa_ax25. + sax25_ndigis; for (kdigi = 0; kdigi < ndigi; kdigi++) - if (!memcmp(&srccall, &config->ax25_default_path.fsa_digipeater[kdigi], AXLEN)) + if (!memcmp + (&srccall, + &config->ax25_default_path. + fsa_digipeater[kdigi], AXLEN)) break; if (ndigi == kdigi) - memcpy(digipeater, config->ax25_default_path.fsa_digipeater, ndigi*AXLEN); + memcpy(digipeater, + config->ax25_default_path. + fsa_digipeater, ndigi * AXLEN); else ndigi = 0; } - ax25rt = update_ax25_route(config, &srccall, ndigi, digipeater, stamp); - + ax25rt = + update_ax25_route(config, &srccall, ndigi, digipeater, + stamp); + if (ax25rt != NULL) set_ax25_route(config, ax25rt); } @@ -543,39 +534,38 @@ void ax25_receive(int sock) /* * Now see if it carries IP traffic */ - - switch(pid) - { - case PID_ARP: - SKIP(1); - if (size > 0) - ip = get_from_arp(data, size); - break; - case PID_IP: - if (!mine) - return; - SKIP(1); - if (size > 0) - ip = get_from_ip(data, size); - break; - default: + switch (pid) { + case PID_ARP: + SKIP(1); + if (size > 0) + ip = get_from_arp(data, size); + break; + case PID_IP: + if (!mine) return; + + SKIP(1); + if (size > 0) + ip = get_from_ip(data, size); + break; + default: + return; } - + /* * And adjust routes/arp/ipmode if we are allowed to... */ ipmode = (ctl == LAPB_I); - if (ip != 0) - { - if ((config = dev_get_config(ip_encaps_dev)) == NULL) - return; + if (ip != 0) { + if ((config = dev_get_config(ip_encaps_dev)) == NULL) + return; + + action = + update_ip_route(config, ip, ipmode, &srccall, stamp); - action = update_ip_route(config, ip, ipmode, &srccall, stamp); - if (action & NEW_ROUTE) if (set_route(config, ip)) return; @@ -583,7 +573,7 @@ void ax25_receive(int sock) if (action & NEW_ARP) if (set_arp(config, ip, &srccall)) return; - + if (action & NEW_IPMODE) if (set_ipmode(config, &srccall, ipmode)) return; diff --git a/call/Makefile.in b/call/Makefile.in index 979b9f8..65503be 100644 --- a/call/Makefile.in +++ b/call/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated automatically by automake 1.4 from Makefile.am +# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation @@ -64,15 +64,17 @@ AWK = @AWK@ AX25_LIB = @AX25_LIB@ CC = @CC@ DLLTOOL = @DLLTOOL@ -LD = @LD@ +ECHO = @ECHO@ +EXEEXT = @EXEEXT@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ NCURSES_LIB = @NCURSES_LIB@ -NM = @NM@ OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ RANLIB = @RANLIB@ +STRIP = @STRIP@ VERSION = @VERSION@ vardir = $(sysconfdir)/ax25 @@ -90,6 +92,7 @@ call_SOURCES = call.c call.h menu.c menu.h crc.c crc.h yapp.c do mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = +bin_PROGRAMS = call$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) @@ -97,7 +100,8 @@ DEFS = @DEFS@ -I. -I$(srcdir) -I.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ -call_OBJECTS = call.o menu.o crc.o yapp.o dostime.o +call_OBJECTS = call.$(OBJEXT) menu.$(OBJEXT) crc.$(OBJEXT) \ +yapp.$(OBJEXT) dostime.$(OBJEXT) call_DEPENDENCIES = call_LDFLAGS = CFLAGS = @CFLAGS@ @@ -121,7 +125,7 @@ OBJECTS = $(call_OBJECTS) all: all-redirect .SUFFIXES: -.SUFFIXES: .S .c .lo .o .s +.SUFFIXES: .S .c .lo .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps call/Makefile @@ -158,6 +162,11 @@ uninstall-binPROGRAMS: .c.o: $(COMPILE) -c $< +# FIXME: We should only use cygpath when building on Windows, +# and only if it is available. +.c.obj: + $(COMPILE) -c `cygpath -w $<` + .s.o: $(COMPILE) -c $< @@ -166,6 +175,7 @@ uninstall-binPROGRAMS: mostlyclean-compile: -rm -f *.o core *.core + -rm -f *.$(OBJEXT) clean-compile: @@ -193,8 +203,8 @@ distclean-libtool: maintainer-clean-libtool: -call: $(call_OBJECTS) $(call_DEPENDENCIES) - @rm -f call +call$(EXEEXT): $(call_OBJECTS) $(call_DEPENDENCIES) + @rm -f call$(EXEEXT) $(LINK) $(call_LDFLAGS) $(call_OBJECTS) $(call_LDADD) $(LIBS) install-man1: diff --git a/call/call.c b/call/call.c index 6139990..aa0412d 100644 --- a/call/call.c +++ b/call/call.c @@ -19,6 +19,7 @@ #include <sys/types.h> #include <utime.h> +#include <time.h> #include <stdio.h> #include <ctype.h> #include <dirent.h> @@ -91,22 +92,22 @@ int paclen = 0; int fd; typedef struct { - char file_name[255]; - long dwn_cnt; - int dwn_file; - int file_crc; - int calc_crc; - struct utimbuf ut; - int new_header; + char file_name[255]; + long dwn_cnt; + int dwn_file; + int file_crc; + int calc_crc; + struct utimbuf ut; + int new_header; } t_gp; typedef struct { - WINDOW *ptr; - int max_y; - int max_x; - char string[MAX_BUFLEN]; - int bytes; - int curs_pos; + WINDOW *ptr; + int max_y; + int max_x; + char string[MAX_BUFLEN]; + int bytes; + int curs_pos; } t_win; #define TALKMODE 001 /* two windows (outgoing and incoming) with menu */ @@ -114,1847 +115,2071 @@ typedef struct { #define RAWMODE 004 /* mode used by earlier versions */ WINDOW *win; -const char *key_words[] = -{"//", - "#BIN#", - " go_7+. ", - " stop_7+. ", - "\0" +const char *key_words[] = { "//", + "#BIN#", + " go_7+. ", + " stop_7+. ", + "\0" }; #define MAXCMDLEN 10 void convert_cr_lf(char *buf, int len) { - while (len--) { - if (*buf == '\r') - *buf = '\n'; - buf++; - } + while (len--) { + if (*buf == '\r') + *buf = '\n'; + buf++; + } } void convert_lf_cr(char *buf, int len) { - while (len--) { - if (*buf == '\n') - *buf = '\r'; - buf++; - } + while (len--) { + if (*buf == '\n') + *buf = '\r'; + buf++; + } } void convert_upper_lower(char *buf, int len) { - while (len--) { - *buf = tolower(*buf); - buf++; - } + while (len--) { + *buf = tolower(*buf); + buf++; + } } static int nr_convert_call(char *address, struct full_sockaddr_ax25 *addr) { - char buffer[100], *call, *alias; - FILE *fp; - int addrlen; + char buffer[100], *call, *alias; + FILE *fp; + int addrlen; - for (call = address; *call != '\0'; call++) - *call = toupper(*call); + for (call = address; *call != '\0'; call++) + *call = toupper(*call); - if ((fp = fopen(PROC_NR_NODES_FILE, "r")) == NULL) { - fprintf(stderr, "call: NET/ROM not included in the kernel\n"); - return -1; - } - fgets(buffer, 100, fp); - - while (fgets(buffer, 100, fp) != NULL) { - call = strtok(buffer, " \t\n\r"); - alias = strtok(NULL, " \t\n\r"); - - if (strcmp(address, call) == 0 || strcmp(address, alias) == 0) { - addrlen = ax25_aton(call, addr); - fclose(fp); - return (addrlen == -1) ? -1 : sizeof(struct sockaddr_ax25); + if ((fp = fopen(PROC_NR_NODES_FILE, "r")) == NULL) { + fprintf(stderr, + "call: NET/ROM not included in the kernel\n"); + return -1; + } + fgets(buffer, 100, fp); + + while (fgets(buffer, 100, fp) != NULL) { + call = strtok(buffer, " \t\n\r"); + alias = strtok(NULL, " \t\n\r"); + + if (strcmp(address, call) == 0 + || strcmp(address, alias) == 0) { + addrlen = ax25_aton(call, addr); + fclose(fp); + return (addrlen == + -1) ? -1 : sizeof(struct sockaddr_ax25); + } } - } - fclose(fp); + fclose(fp); - fprintf(stderr, "call: NET/ROM callsign or alias not found\n"); + fprintf(stderr, "call: NET/ROM callsign or alias not found\n"); - return -1; + return -1; } static int connect_to(char *address[]) { - int fd = 0; - int addrlen = 0; - union { - struct full_sockaddr_ax25 ax25; - struct sockaddr_rose rose; - } sockaddr; - char *digi; - int one = debug; - - switch (af_mode) { - case AF_ROSE: - if (address[0] == NULL || address[1] == NULL) { - fprintf(stderr, "call: too few arguments for Rose\n"); - return (-1); - } - if ((fd = socket(AF_ROSE, SOCK_SEQPACKET, 0)) < 0) { - perror("socket"); - return (-1); - } - break; + int fd = 0; + int addrlen = 0; + union { + struct full_sockaddr_ax25 ax25; + struct sockaddr_rose rose; + } sockaddr; + char *digi; + int one = debug; + + switch (af_mode) { + case AF_ROSE: + if (address[0] == NULL || address[1] == NULL) { + fprintf(stderr, + "call: too few arguments for Rose\n"); + return (-1); + } + if ((fd = socket(AF_ROSE, SOCK_SEQPACKET, 0)) < 0) { + perror("socket"); + return (-1); + } + break; - case AF_NETROM: - if (address[0] == NULL) { - fprintf(stderr, "call: too few arguments for NET/ROM\n"); - return (-1); - } - if ((fd = socket(AF_NETROM, SOCK_SEQPACKET, 0)) < 0) { - perror("socket"); - return (-1); - } - ax25_aton(nr_config_get_addr(port), &sockaddr.ax25); - sockaddr.ax25.fsa_ax25.sax25_family = AF_NETROM; - addrlen = sizeof(struct full_sockaddr_ax25); - break; - - case AF_AX25: - if (address[0] == NULL) { - fprintf(stderr, "call: too few arguments for AX.25\n"); - return (-1); - } - if ((fd = socket(AF_AX25, SOCK_SEQPACKET, 0)) < 0) { - perror("socket"); - return (-1); - } - ax25_aton(ax25_config_get_addr(port), &sockaddr.ax25); - if (sockaddr.ax25.fsa_ax25.sax25_ndigis == 0) { - ax25_aton_entry(ax25_config_get_addr(port), - sockaddr.ax25.fsa_digipeater[0].ax25_call); - sockaddr.ax25.fsa_ax25.sax25_ndigis = 1; - } - sockaddr.ax25.fsa_ax25.sax25_family = AF_AX25; - addrlen = sizeof(struct full_sockaddr_ax25); + case AF_NETROM: + if (address[0] == NULL) { + fprintf(stderr, + "call: too few arguments for NET/ROM\n"); + return (-1); + } + if ((fd = socket(AF_NETROM, SOCK_SEQPACKET, 0)) < 0) { + perror("socket"); + return (-1); + } + ax25_aton(nr_config_get_addr(port), &sockaddr.ax25); + sockaddr.ax25.fsa_ax25.sax25_family = AF_NETROM; + addrlen = sizeof(struct full_sockaddr_ax25); + break; - if (setsockopt(fd, SOL_AX25, AX25_WINDOW, &window, sizeof(window)) == -1) { - perror("AX25_WINDOW"); - close(fd); - return (-1); - } - if (setsockopt(fd, SOL_AX25, AX25_PACLEN, &paclen, sizeof(paclen)) == -1) { - perror("AX25_PACLEN"); - close(fd); - return (-1); + case AF_AX25: + if (address[0] == NULL) { + fprintf(stderr, + "call: too few arguments for AX.25\n"); + return (-1); + } + if ((fd = socket(AF_AX25, SOCK_SEQPACKET, 0)) < 0) { + perror("socket"); + return (-1); + } + ax25_aton(ax25_config_get_addr(port), &sockaddr.ax25); + if (sockaddr.ax25.fsa_ax25.sax25_ndigis == 0) { + ax25_aton_entry(ax25_config_get_addr(port), + sockaddr.ax25.fsa_digipeater[0]. + ax25_call); + sockaddr.ax25.fsa_ax25.sax25_ndigis = 1; + } + sockaddr.ax25.fsa_ax25.sax25_family = AF_AX25; + addrlen = sizeof(struct full_sockaddr_ax25); + + if (setsockopt + (fd, SOL_AX25, AX25_WINDOW, &window, + sizeof(window)) == -1) { + perror("AX25_WINDOW"); + close(fd); + return (-1); + } + if (setsockopt + (fd, SOL_AX25, AX25_PACLEN, &paclen, + sizeof(paclen)) == -1) { + perror("AX25_PACLEN"); + close(fd); + return (-1); + } + if (backoff != -1) { + if (setsockopt + (fd, SOL_AX25, AX25_BACKOFF, &backoff, + sizeof(backoff)) == -1) { + perror("AX25_BACKOFF"); + close(fd); + return (-1); + } + } + if (ax25mode != -1) { + if (setsockopt + (fd, SOL_AX25, AX25_EXTSEQ, &ax25mode, + sizeof(ax25mode)) == -1) { + perror("AX25_EXTSEQ"); + close(fd); + return (-1); + } + } + break; } - if (backoff != -1) { - if (setsockopt(fd, SOL_AX25, AX25_BACKOFF, &backoff, sizeof(backoff)) == -1) { - perror("AX25_BACKOFF"); + + if (debug + && setsockopt(fd, SOL_SOCKET, SO_DEBUG, &one, + sizeof(one)) == -1) { + perror("SO_DEBUG"); close(fd); return (-1); - } } - if (ax25mode != -1) { - if (setsockopt(fd, SOL_AX25, AX25_EXTSEQ, &ax25mode, sizeof(ax25mode)) == -1) { - perror("AX25_EXTSEQ"); - close(fd); - return (-1); - } + if (af_mode != AF_ROSE) { /* Let Rose autobind */ + if (bind(fd, (struct sockaddr *) &sockaddr, addrlen) == -1) { + perror("bind"); + close(fd); + return (-1); + } } - break; - } + switch (af_mode) { + case AF_ROSE: + memset(&sockaddr.rose, 0x00, sizeof(struct sockaddr_rose)); + + if (ax25_aton_entry + (address[0], + sockaddr.rose.srose_call.ax25_call) == -1) { + close(fd); + return (-1); + } + if (rose_aton + (address[1], + sockaddr.rose.srose_addr.rose_addr) == -1) { + close(fd); + return (-1); + } + if (address[2] != NULL) { + digi = address[2]; + if (strcasecmp(address[2], "VIA") == 0) { + if (address[3] == NULL) { + fprintf(stderr, + "call: callsign must follow 'via'\n"); + close(fd); + return (-1); + } + digi = address[3]; + } + if (ax25_aton_entry + (digi, + sockaddr.rose.srose_digi.ax25_call) == -1) { + close(fd); + return (-1); + } + sockaddr.rose.srose_ndigis = 1; + } + sockaddr.rose.srose_family = AF_ROSE; + addrlen = sizeof(struct sockaddr_rose); + break; - if (debug && setsockopt(fd, SOL_SOCKET, SO_DEBUG, &one, sizeof(one)) == -1) { - perror("SO_DEBUG"); - close(fd); - return (-1); - } - if (af_mode != AF_ROSE) { /* Let Rose autobind */ - if (bind(fd, (struct sockaddr *) &sockaddr, addrlen) == -1) { - perror("bind"); - close(fd); - return (-1); - } - } - switch (af_mode) { - case AF_ROSE: - memset(&sockaddr.rose, 0x00, sizeof(struct sockaddr_rose)); - - if (ax25_aton_entry(address[0], sockaddr.rose.srose_call.ax25_call) == -1) { - close(fd); - return (-1); - } - if (rose_aton(address[1], sockaddr.rose.srose_addr.rose_addr) == -1) { - close(fd); - return (-1); - } - if (address[2] != NULL) { - digi = address[2]; - if (strcasecmp(address[2], "VIA") == 0) { - if (address[3] == NULL) { - fprintf(stderr, "call: callsign must follow 'via'\n"); - close(fd); - return (-1); + case AF_NETROM: + if (nr_convert_call(address[0], &sockaddr.ax25) == -1) { + close(fd); + return (-1); } - digi = address[3]; - } - if (ax25_aton_entry(digi, sockaddr.rose.srose_digi.ax25_call) == -1) { - close(fd); - return (-1); - } - sockaddr.rose.srose_ndigis = 1; - } - sockaddr.rose.srose_family = AF_ROSE; - addrlen = sizeof(struct sockaddr_rose); - break; - - case AF_NETROM: - if (nr_convert_call(address[0], &sockaddr.ax25) == -1) { - close(fd); - return (-1); - } - sockaddr.rose.srose_family = AF_NETROM; - addrlen = sizeof(struct sockaddr_ax25); - break; - - case AF_AX25: - if (ax25_aton_arglist((const char**)address, &sockaddr.ax25) == -1) { - close(fd); - return (-1); + sockaddr.rose.srose_family = AF_NETROM; + addrlen = sizeof(struct sockaddr_ax25); + break; + + case AF_AX25: + if (ax25_aton_arglist + ((const char **) address, &sockaddr.ax25) == -1) { + close(fd); + return (-1); + } + sockaddr.rose.srose_family = AF_AX25; + addrlen = sizeof(struct full_sockaddr_ax25); + break; } - sockaddr.rose.srose_family = AF_AX25; - addrlen = sizeof(struct full_sockaddr_ax25); - break; - } - printf("Trying...\r"); - fflush(stdout); + printf("Trying...\r"); + fflush(stdout); - if (connect(fd, (struct sockaddr *) &sockaddr, addrlen)) { - printf("\n"); - perror("connect"); - close(fd); - return (-1); - } - printf("*** Connected to %s\n", address[0]); + if (connect(fd, (struct sockaddr *) &sockaddr, addrlen)) { + printf("\n"); + perror("connect"); + close(fd); + return (-1); + } + printf("*** Connected to %s\n", address[0]); - return (fd); + return (fd); } void cmd_intr(int sig) { - signal(SIGQUIT, cmd_intr); - interrupted = TRUE; + signal(SIGQUIT, cmd_intr); + interrupted = TRUE; } void statline(int mode, char *s) { - static int oldlen = 0; - int l, cnt; + static int oldlen = 0; + int l, cnt; + + if (*s == '\0') { + if (mode == RAWMODE) + return; + if (oldlen > 0) { + move(0, STATW_STAT); + attron(A_REVERSE); + for (cnt = 0; cnt < oldlen; cnt++) + addch(' '); + oldlen = 0; + attroff(A_REVERSE); + refresh(); + } + return; + } + if (mode == RAWMODE) { + printf(">>%s\n", s); + return; + } + if (strlen(s) > 80 - STATW_STAT) + s[80 - STATW_STAT] = '\0'; - if (*s == '\0') { - if (mode == RAWMODE) - return; - if (oldlen > 0) { - move(0, STATW_STAT); - attron(A_REVERSE); - for (cnt = 0; cnt < oldlen; cnt++) - addch(' '); - oldlen = 0; - attroff(A_REVERSE); - refresh(); + move(0, STATW_STAT); + + attron(A_REVERSE); + addstr(s); + + if (oldlen > strlen(s)) { + l = oldlen - strlen(s); + for (cnt = 0; cnt < l; cnt++) + addch(' '); } - return; - } - if (mode == RAWMODE) { - printf(">>%s\n", s); - return; - } - if (strlen(s) > 80 - STATW_STAT) - s[80 - STATW_STAT] = '\0'; - - move(0, STATW_STAT); - - attron(A_REVERSE); - addstr(s); - - if (oldlen > strlen(s)) { - l = oldlen - strlen(s); - for (cnt = 0; cnt < l; cnt++) - addch(' '); - } - attroff(A_REVERSE); - oldlen = strlen(s); - refresh(); + attroff(A_REVERSE); + oldlen = strlen(s); + refresh(); } -WINDOW * - opnstatw(int mode, wint * wintab, char *s, int lines, int cols) +WINDOW *opnstatw(int mode, wint * wintab, char *s, int lines, int cols) { - WINDOW *win; + WINDOW *win; - if (mode == RAWMODE) { - printf(">>%s\n", s); - return NULL; - } - win = winopen(wintab, lines, cols, ((LINES - 1) - lines) / 2, ((COLS) - cols) / 2, TRUE); - mvwaddstr(win, 1, 1 + (cols - strlen(s)) / 2, s); - wmove(win, 3, 2); + if (mode == RAWMODE) { + printf(">>%s\n", s); + return NULL; + } + win = + winopen(wintab, lines, cols, ((LINES - 1) - lines) / 2, + ((COLS) - cols) / 2, TRUE); + mvwaddstr(win, 1, 1 + (cols - strlen(s)) / 2, s); + wmove(win, 3, 2); - return win; + return win; } void wrdstatw(WINDOW * win, char s[]) { - int y, x; + int y, x; - if (win == NULL) { - printf(" %s\n", s); - return; - } - waddstr(win, s); - getyx(win, y, x); - wmove(win, y + 1, 2); - wrefresh(win); + if (win == NULL) { + printf(" %s\n", s); + return; + } + waddstr(win, s); + getyx(win, y, x); + wmove(win, y + 1, 2); + wrefresh(win); } void dupdstatw(WINDOW * win, char *s, int add) { - static char infostr[80]; - static int y, x; - static int oldlen; - int l, cnt; - - if (add) { - oldlen = 0; - strcpy(infostr, s); + static char infostr[80]; + static int y, x; + static int oldlen; + int l, cnt; + + if (add) { + oldlen = 0; + strcpy(infostr, s); + + if (win == NULL) { + printf(" %s", s); + return; + } + waddstr(win, s); + getyx(win, y, x); + wrefresh(win); + return; + } if (win == NULL) { - printf(" %s", s); - return; + printf("\r %s%s", infostr, s); + } else { + mvwaddstr(win, y, x, s); } - waddstr(win, s); - getyx(win, y, x); - wrefresh(win); - return; - } - if (win == NULL) { - printf("\r %s%s", infostr, s); - } else { - mvwaddstr(win, y, x, s); - } - - if (oldlen > strlen(s)) { - l = oldlen - strlen(s); - for (cnt = 0; cnt < l; cnt++) - if (win == NULL) - printf(" "); - else - waddch(win, ' '); - } - if (win == NULL) { - fflush(stdout); - } else { - wrefresh(win); - } + if (oldlen > strlen(s)) { + l = oldlen - strlen(s); + for (cnt = 0; cnt < l; cnt++) + if (win == NULL) + printf(" "); + else + waddch(win, ' '); + } + if (win == NULL) { + fflush(stdout); + } else { + wrefresh(win); + } - oldlen = strlen(s); + oldlen = strlen(s); } -int start_ab_download(int mode, WINDOW ** swin, wint * wintab, char parms[], int parmsbytes, char buf[], int bytes, t_gp * gp, char *address[]) +int start_ab_download(int mode, WINDOW ** swin, wint * wintab, + char parms[], int parmsbytes, char buf[], int bytes, + t_gp * gp, char *address[]) { - int crcst; /* startposition crc-field */ - int datest = 0; /* startposition date-field */ - int namest = 0; /* startposition name-field */ - int cnt; - int date = 0; - struct tm ft; - char s[80]; - - for (crcst = 2; (!(parms[crcst - 2] == '#' - && parms[crcst - 1] == '|') - && crcst < parmsbytes - 1); crcst++); - - if (crcst < parmsbytes - 1) { - gp->file_crc = atoi(parms + crcst); - - for (datest = crcst; (!(parms[datest - 2] == '#' - && parms[datest - 1] == '$')); datest++); - - date = (int) strtol(parms + datest, NULL, 16); - ft.tm_sec = (date & 0x1F) * 2; - date >>= 5; - ft.tm_min = date & 0x3F; - date >>= 6; - ft.tm_hour = date & 0x1F; - date >>= 5; - ft.tm_mday = date & 0x1F; - date >>= 5; - ft.tm_mon = date & 0x0F; - date >>= 4; - ft.tm_year = (date & 0x7F) + 70; - ft.tm_isdst = 0; - ft.tm_yday = 0; - ft.tm_wday = 0; - gp->ut.actime = mktime(&ft); - gp->ut.modtime = gp->ut.actime; - - for (namest = datest; (parms[namest - 1] != '#' && - namest < parmsbytes - 1); namest++); - } else { - gp->ut.actime = 0; - gp->ut.modtime = 0; - } - - gp->dwn_cnt = atol(parms); - strcpy(gp->file_name, STD_DWN_DIR); - - if (crcst == parmsbytes - 1 || datest - crcst > 7 || namest - datest > 10) { - *swin = opnstatw(mode, wintab, "Remote starts AutoBin transfer", 6, 52); - gp->new_header = FALSE; - wrdstatw(*swin, "old styled Header (no filename)"); - strcat(gp->file_name, address[0]); - strcat(gp->file_name, ".dwnfile"); - } else { - *swin = opnstatw(mode, wintab, "Remote starts AutoBin transfer", 10, 52); - gp->new_header = TRUE; - for (cnt = parmsbytes - namest; !(parms[cnt + namest - 1] == '\\' || parms[cnt + namest - 1] == '/') && cnt > 0; cnt--); - strncpy(s, &parms[namest + cnt], parmsbytes - namest - cnt); - convert_upper_lower(s, parmsbytes - namest - cnt); - strncat(gp->file_name, s, parmsbytes - namest - cnt); - gp->file_name[strlen(gp->file_name) + parmsbytes - namest - cnt - 1] = 0; - - sprintf(s, "size of file : %u", (unsigned int) gp->dwn_cnt); - wrdstatw(*swin, s); - sprintf(s, "filename : %s", gp->file_name); - wrdstatw(*swin, s); - sprintf(s, "last mod. date : %02i.%02i.%04i", ft.tm_mday, ft.tm_mon, ft.tm_year + 1900); - wrdstatw(*swin, s); - sprintf(s, "last mod. time : %02i:%02i:%02i", ft.tm_hour, ft.tm_min, ft.tm_sec); - wrdstatw(*swin, s); - } - - dupdstatw(*swin, "Bytes to receive: ", TRUE); - - if ((gp->dwn_file = open(gp->file_name, O_RDWR | O_CREAT, 0666)) == -1) { - sprintf(s, "Unable to open %s", gp->file_name); - statline(mode, s); - if (write(fd, "#ABORT#\r", 8) == -1) { - perror("write"); - gp->dwn_cnt = 0; - gp->file_name[0] = '\0'; - return -1; - } - } - if (bytes == 1) { - if (write(fd, "#OK#\r", 5) == -1) { - perror("write"); - gp->dwn_cnt = 0; - gp->file_name[0] = '\0'; - return -1; + int crcst; /* startposition crc-field */ + int datest = 0; /* startposition date-field */ + int namest = 0; /* startposition name-field */ + int cnt; + int date = 0; + struct tm ft; + char s[80]; + + for (crcst = 2; (!(parms[crcst - 2] == '#' + && parms[crcst - 1] == '|') + && crcst < parmsbytes - 1); crcst++); + + if (crcst < parmsbytes - 1) { + gp->file_crc = atoi(parms + crcst); + + for (datest = crcst; (!(parms[datest - 2] == '#' + && parms[datest - 1] == '$')); + datest++); + + date = (int) strtol(parms + datest, NULL, 16); + ft.tm_sec = (date & 0x1F) * 2; + date >>= 5; + ft.tm_min = date & 0x3F; + date >>= 6; + ft.tm_hour = date & 0x1F; + date >>= 5; + ft.tm_mday = date & 0x1F; + date >>= 5; + ft.tm_mon = date & 0x0F; + date >>= 4; + ft.tm_year = (date & 0x7F) + 70; + ft.tm_isdst = 0; + ft.tm_yday = 0; + ft.tm_wday = 0; + gp->ut.actime = mktime(&ft); + gp->ut.modtime = gp->ut.actime; + + for (namest = datest; (parms[namest - 1] != '#' && + namest < parmsbytes - 1); namest++); + } else { + gp->ut.actime = 0; + gp->ut.modtime = 0; } - gp->calc_crc = 0; - } else { - write(gp->dwn_file, buf, bytes); - gp->calc_crc = calc_crc(buf, bytes, 0); - gp->dwn_cnt -= bytes; - } - - return 0; -} -int ab_down(int mode, WINDOW * swin, wint * wintab, char buf[], int *bytes, t_gp * gp) -{ - int extrach = 0; - char s[80]; - - if (strncmp(buf, "#ABORT#\r", 8) == 0 && *bytes == 8) { - gp->dwn_cnt = 0; - close(gp->dwn_file); - statline(mode, "Remote aborts AutoBin transfer!"); - *bytes = 0; - if (mode != RAWMODE) { - delwin(swin); - winclose(wintab); + gp->dwn_cnt = atol(parms); + strcpy(gp->file_name, STD_DWN_DIR); + + if (crcst == parmsbytes - 1 || datest - crcst > 7 + || namest - datest > 10) { + *swin = + opnstatw(mode, wintab, + "Remote starts AutoBin transfer", 6, 52); + gp->new_header = FALSE; + wrdstatw(*swin, "old styled Header (no filename)"); + strcat(gp->file_name, address[0]); + strcat(gp->file_name, ".dwnfile"); } else { - printf("\n"); + *swin = + opnstatw(mode, wintab, + "Remote starts AutoBin transfer", 10, 52); + gp->new_header = TRUE; + for (cnt = parmsbytes - namest; + !(parms[cnt + namest - 1] == '\\' + || parms[cnt + namest - 1] == '/') && cnt > 0; + cnt--); + strncpy(s, &parms[namest + cnt], + parmsbytes - namest - cnt); + convert_upper_lower(s, parmsbytes - namest - cnt); + strncat(gp->file_name, s, parmsbytes - namest - cnt); + gp->file_name[strlen(gp->file_name) + parmsbytes - namest - + cnt - 1] = 0; + + sprintf(s, "size of file : %u", + (unsigned int) gp->dwn_cnt); + wrdstatw(*swin, s); + sprintf(s, "filename : %s", gp->file_name); + wrdstatw(*swin, s); + sprintf(s, "last mod. date : %02i.%02i.%04i", ft.tm_mday, + ft.tm_mon, ft.tm_year + 1900); + wrdstatw(*swin, s); + sprintf(s, "last mod. time : %02i:%02i:%02i", ft.tm_hour, + ft.tm_min, ft.tm_sec); + wrdstatw(*swin, s); } - return 0; - } - if (gp->dwn_cnt < *bytes) { - extrach = *bytes - gp->dwn_cnt; - *bytes = gp->dwn_cnt; - } - if (write(gp->dwn_file, buf, *bytes) != *bytes) { - close(gp->dwn_file); - gp->dwn_cnt = 0; - statline(mode, "Error while writing download file. Download aborted."); - - if (mode != RAWMODE) { - delwin(swin); - winclose(wintab); + dupdstatw(*swin, "Bytes to receive: ", TRUE); + + if ((gp->dwn_file = + open(gp->file_name, O_RDWR | O_CREAT, 0666)) == -1) { + sprintf(s, "Unable to open %s", gp->file_name); + statline(mode, s); + if (write(fd, "#ABORT#\r", 8) == -1) { + perror("write"); + gp->dwn_cnt = 0; + gp->file_name[0] = '\0'; + return -1; + } + } + if (bytes == 1) { + if (write(fd, "#OK#\r", 5) == -1) { + perror("write"); + gp->dwn_cnt = 0; + gp->file_name[0] = '\0'; + return -1; + } + gp->calc_crc = 0; } else { - printf("\n"); + write(gp->dwn_file, buf, bytes); + gp->calc_crc = calc_crc(buf, bytes, 0); + gp->dwn_cnt -= bytes; } - } else { - gp->calc_crc = calc_crc(buf, *bytes, gp->calc_crc); - gp->dwn_cnt -= *bytes; - - if (gp->dwn_cnt == 0) { - if (mode != RAWMODE) { - delwin(swin); - winclose(wintab); - } else - printf("\n"); - strcpy(s, "AutoBin download finished "); - if (gp->new_header) - if (gp->calc_crc == gp->file_crc) - strcat(s, "CRC check ok"); - else { - strcat(s, "CRC check failed!"); - } else { - sprintf(s + strlen(s), "CRC=%u", gp->calc_crc); - } - statline(mode, s); - close(gp->dwn_file); - utime(gp->file_name, &gp->ut); - if (extrach != 0) { - memmove(buf, buf + *bytes, extrach); - *bytes = extrach; - } else + return 0; +} + +int ab_down(int mode, WINDOW * swin, wint * wintab, char buf[], int *bytes, + t_gp * gp) +{ + int extrach = 0; + char s[80]; + + if (strncmp(buf, "#ABORT#\r", 8) == 0 && *bytes == 8) { + gp->dwn_cnt = 0; + close(gp->dwn_file); + statline(mode, "Remote aborts AutoBin transfer!"); *bytes = 0; + if (mode != RAWMODE) { + delwin(swin); + winclose(wintab); + } else { + printf("\n"); + } + + return 0; + } + if (gp->dwn_cnt < *bytes) { + extrach = *bytes - gp->dwn_cnt; + *bytes = gp->dwn_cnt; + } + if (write(gp->dwn_file, buf, *bytes) != *bytes) { + close(gp->dwn_file); + gp->dwn_cnt = 0; + statline(mode, + "Error while writing download file. Download aborted."); + + if (mode != RAWMODE) { + delwin(swin); + winclose(wintab); + } else { + printf("\n"); + } } else { - sprintf(s, "%u", (unsigned int) gp->dwn_cnt); - dupdstatw(swin, s, FALSE); - *bytes = 0; + gp->calc_crc = calc_crc(buf, *bytes, gp->calc_crc); + gp->dwn_cnt -= *bytes; + + if (gp->dwn_cnt == 0) { + if (mode != RAWMODE) { + delwin(swin); + winclose(wintab); + } else + printf("\n"); + + strcpy(s, "AutoBin download finished "); + if (gp->new_header) + if (gp->calc_crc == gp->file_crc) + strcat(s, "CRC check ok"); + else { + strcat(s, "CRC check failed!"); + } else { + sprintf(s + strlen(s), "CRC=%u", + gp->calc_crc); + } + statline(mode, s); + close(gp->dwn_file); + utime(gp->file_name, &gp->ut); + if (extrach != 0) { + memmove(buf, buf + *bytes, extrach); + *bytes = extrach; + } else + *bytes = 0; + } else { + sprintf(s, "%u", (unsigned int) gp->dwn_cnt); + dupdstatw(swin, s, FALSE); + *bytes = 0; + } } - } - return 0; + return 0; } int start_screen(char *call[]) { - int cnt; - char idString[11]; - sprintf(idString, " %8s ", call[0]); + int cnt; + char idString[11]; + sprintf(idString, " %8s ", call[0]); + + if ((win = initscr()) == NULL) + return -1; + + attron(A_REVERSE); + move(0, 0); + addstr(idString); + addch(ACS_VLINE); + addstr("--------"); + addch(ACS_VLINE); + for (cnt = STATW_STAT; cnt <= 80; cnt++) + addch(' '); + attroff(A_REVERSE); - if ((win = initscr()) == NULL) - return -1; + noecho(); + raw(); + nodelay(win, TRUE); + keypad(win, TRUE); + refresh(); - attron(A_REVERSE); - move(0, 0); - addstr(idString); - addch(ACS_VLINE); - addstr("--------"); - addch(ACS_VLINE); - for (cnt = STATW_STAT; cnt <= 80; cnt++) - addch(' '); - attroff(A_REVERSE); - - noecho(); - raw(); - nodelay(win, TRUE); - keypad(win, TRUE); - refresh(); - - return 0; + return 0; } int start_slave_mode(wint * wintab, t_win * win_in, t_win * win_out) { - win_in->max_y = LINES - 2; - win_in->max_x = COLS; - win_in->ptr = winopen(wintab, win_in->max_y + 1, win_in->max_x, 1, 0, FALSE); - win_out->ptr = win_in->ptr; + win_in->max_y = LINES - 2; + win_in->max_x = COLS; + win_in->ptr = + winopen(wintab, win_in->max_y + 1, win_in->max_x, 1, 0, FALSE); + win_out->ptr = win_in->ptr; - scrollok(win_in->ptr, TRUE); + scrollok(win_in->ptr, TRUE); - wclear(win_out->ptr); - wrefresh(win_out->ptr); + wclear(win_out->ptr); + wrefresh(win_out->ptr); - win_out->bytes = 0; - win_out->curs_pos = 0; - win_in->bytes = 0; - win_in->curs_pos = 0; + win_out->bytes = 0; + win_out->curs_pos = 0; + win_in->bytes = 0; + win_in->curs_pos = 0; - return 0; + return 0; } int start_talk_mode(wint * wintab, t_win * win_in, t_win * win_out) { - int cnt; - WINDOW *win; - - win_out->max_y = 4; /* TXLINES */ - win_out->max_x = COLS; - win_in->max_y = (LINES - 4) - win_out->max_y; - win_in->max_x = COLS; - - win_out->ptr = winopen(wintab, win_out->max_y + 1, win_out->max_x, (win_in->max_y + 3), 0, FALSE); - win_in->ptr = winopen(wintab, win_in->max_y + 1, win_in->max_x, 1, 0, FALSE); - win = winopen(wintab, 1, win_out->max_x, win_in->max_y + 2, 0, FALSE); - - for (cnt = 0; cnt < COLS; cnt++) - waddch(win, '-'); - wrefresh(win); + int cnt; + WINDOW *win; + + win_out->max_y = 4; /* TXLINES */ + win_out->max_x = COLS; + win_in->max_y = (LINES - 4) - win_out->max_y; + win_in->max_x = COLS; + + win_out->ptr = + winopen(wintab, win_out->max_y + 1, win_out->max_x, + (win_in->max_y + 3), 0, FALSE); + win_in->ptr = + winopen(wintab, win_in->max_y + 1, win_in->max_x, 1, 0, FALSE); + win = + winopen(wintab, 1, win_out->max_x, win_in->max_y + 2, 0, + FALSE); + + for (cnt = 0; cnt < COLS; cnt++) + waddch(win, '-'); + wrefresh(win); - scrollok(win_in->ptr, TRUE); - scrollok(win_out->ptr, TRUE); + scrollok(win_in->ptr, TRUE); + scrollok(win_out->ptr, TRUE); - wclear(win_out->ptr); - wrefresh(win_out->ptr); - wclear(win_in->ptr); - wrefresh(win_in->ptr); + wclear(win_out->ptr); + wrefresh(win_out->ptr); + wclear(win_in->ptr); + wrefresh(win_in->ptr); - win_out->bytes = 0; - win_out->curs_pos = 0; - win_in->bytes = 0; - win_out->curs_pos = 0; + win_out->bytes = 0; + win_out->curs_pos = 0; + win_in->bytes = 0; + win_out->curs_pos = 0; - return 0; + return 0; } -int change_mode(int oldmode, int newmode, wint * wintab, t_win * win_in, t_win * win_out, char *call[]) +int change_mode(int oldmode, int newmode, wint * wintab, t_win * win_in, + t_win * win_out, char *call[]) { - switch (oldmode) { - case RAWMODE: - if (newmode == TALKMODE) { - start_screen(call); - start_talk_mode(wintab, win_in, win_out); - } - if (newmode == SLAVEMODE) { - start_screen(call); - start_slave_mode(wintab, win_in, win_out); - } - break; - - case TALKMODE: - if (newmode == RAWMODE) { - wclear(win_out->ptr); - wrefresh(win_out->ptr); - wclear(win_in->ptr); - wrefresh(win_in->ptr); - wintab->next = 0; - endwin(); - } - if (newmode == SLAVEMODE) { - delwin(win_out->ptr); - delwin(win_in->ptr); - wintab->next = 0; - start_slave_mode(wintab, win_in, win_out); - } - break; - - case SLAVEMODE: - if (newmode == RAWMODE) { - wclear(win_out->ptr); - wrefresh(win_out->ptr); - wintab->next = 0; - endwin(); - } - if (newmode == TALKMODE) { - delwin(win_out->ptr); - wintab->next = 0; - start_talk_mode(wintab, win_in, win_out); + switch (oldmode) { + case RAWMODE: + if (newmode == TALKMODE) { + start_screen(call); + start_talk_mode(wintab, win_in, win_out); + } + if (newmode == SLAVEMODE) { + start_screen(call); + start_slave_mode(wintab, win_in, win_out); + } + break; + + case TALKMODE: + if (newmode == RAWMODE) { + wclear(win_out->ptr); + wrefresh(win_out->ptr); + wclear(win_in->ptr); + wrefresh(win_in->ptr); + wintab->next = 0; + endwin(); + } + if (newmode == SLAVEMODE) { + delwin(win_out->ptr); + delwin(win_in->ptr); + wintab->next = 0; + start_slave_mode(wintab, win_in, win_out); + } + break; + + case SLAVEMODE: + if (newmode == RAWMODE) { + wclear(win_out->ptr); + wrefresh(win_out->ptr); + wintab->next = 0; + endwin(); + } + if (newmode == TALKMODE) { + delwin(win_out->ptr); + wintab->next = 0; + start_talk_mode(wintab, win_in, win_out); + } + break; } - break; - } - return newmode; + return newmode; } void writeincom(int mode, t_win * win_in, unsigned char buf[], int bytes) { - int cnt; + int cnt; - if (mode & RAWMODE) { - write(STDOUT_FILENO, buf, bytes); - return; - } - for (cnt = 0; cnt < bytes; cnt++) { - switch (buf[cnt]) { - case 201: - case 218: - waddch(win_in->ptr, ACS_ULCORNER); - break; - case 187: - case 191: - waddch(win_in->ptr, ACS_URCORNER); - break; - case 200: - case 192: - waddch(win_in->ptr, ACS_LLCORNER); - break; - case 188: - case 217: - waddch(win_in->ptr, ACS_LRCORNER); - break; - case 204: - case 195: - waddch(win_in->ptr, ACS_LTEE); - break; - case 185: - case 180: - waddch(win_in->ptr, ACS_RTEE); - break; - case 203: - case 194: - waddch(win_in->ptr, ACS_TTEE); - break; - case 202: - case 193: - waddch(win_in->ptr, ACS_BTEE); - break; - case 205: - case 196: - waddch(win_in->ptr, ACS_HLINE); - break; - case 186: - case 179: - waddch(win_in->ptr, ACS_VLINE); - break; - case 129: - waddch(win_in->ptr, 252); /*u umlaut */ - break; - case 132: - waddch(win_in->ptr, 228); /*a umlaut */ - break; - case 142: - waddch(win_in->ptr, 196); /*A umlaut */ - break; - case 148: - waddch(win_in->ptr, 246); /*o umlaut */ - break; - case 153: - waddch(win_in->ptr, 214); /*O umlaut */ - break; - case 154: - waddch(win_in->ptr, 220); /*U umlaut */ - break; - case 225: - waddch(win_in->ptr, 223); /*sz */ - break; - default: - { - if (buf[cnt] > 127) - waddch(win_in->ptr, '.'); - else - waddch(win_in->ptr, buf[cnt]); - } + if (mode & RAWMODE) { + write(STDOUT_FILENO, buf, bytes); + return; + } + for (cnt = 0; cnt < bytes; cnt++) { + switch (buf[cnt]) { + case 201: + case 218: + waddch(win_in->ptr, ACS_ULCORNER); + break; + case 187: + case 191: + waddch(win_in->ptr, ACS_URCORNER); + break; + case 200: + case 192: + waddch(win_in->ptr, ACS_LLCORNER); + break; + case 188: + case 217: + waddch(win_in->ptr, ACS_LRCORNER); + break; + case 204: + case 195: + waddch(win_in->ptr, ACS_LTEE); + break; + case 185: + case 180: + waddch(win_in->ptr, ACS_RTEE); + break; + case 203: + case 194: + waddch(win_in->ptr, ACS_TTEE); + break; + case 202: + case 193: + waddch(win_in->ptr, ACS_BTEE); + break; + case 205: + case 196: + waddch(win_in->ptr, ACS_HLINE); + break; + case 186: + case 179: + waddch(win_in->ptr, ACS_VLINE); + break; + case 129: + waddch(win_in->ptr, 252); /*u umlaut */ + break; + case 132: + waddch(win_in->ptr, 228); /*a umlaut */ + break; + case 142: + waddch(win_in->ptr, 196); /*A umlaut */ + break; + case 148: + waddch(win_in->ptr, 246); /*o umlaut */ + break; + case 153: + waddch(win_in->ptr, 214); /*O umlaut */ + break; + case 154: + waddch(win_in->ptr, 220); /*U umlaut */ + break; + case 225: + waddch(win_in->ptr, 223); /*sz */ + break; + default: + { + if (buf[cnt] > 127) + waddch(win_in->ptr, '.'); + else + waddch(win_in->ptr, buf[cnt]); + } + } } - } /* waddnstr(win_in->ptr, buf, bytes); */ - wrefresh(win_in->ptr); + wrefresh(win_in->ptr); - return; + return; } int getstring(wint * wintab, char text[], char buf[]) { - int c; - int ypos = 0, xpos = 0; - int bytes = 0; + int c; + int ypos = 0, xpos = 0; + int bytes = 0; - WINDOW *win = winopen(wintab, 3, COLS, 10, 0, TRUE); + WINDOW *win = winopen(wintab, 3, COLS, 10, 0, TRUE); - wmove(win, 1, 2); - waddstr(win, text); - wrefresh(win); + wmove(win, 1, 2); + waddstr(win, text); + wrefresh(win); - do { - c = getch(); - if (c != ERR) { - switch (c) { - case KEY_BACKSPACE: - case 127: - { - getyx(win, ypos, xpos); - if (xpos > 0 && bytes > 0) { - wmove(win, ypos, --xpos); - waddch(win, ' '); - wmove(win, ypos, xpos); - bytes--; - } - } - break; - case (int) '\n': - case (int) '\r': - case KEY_ENTER: - { - waddch(win, '\n'); - buf[bytes++] = (char) '\n'; - wrefresh(win); - buf[bytes] = 0; - } - break; - default: - { - waddch(win, (char) c); - buf[bytes++] = (char) c; + do { + c = getch(); + if (c != ERR) { + switch (c) { + case KEY_BACKSPACE: + case 127: + { + getyx(win, ypos, xpos); + if (xpos > 0 && bytes > 0) { + wmove(win, ypos, --xpos); + waddch(win, ' '); + wmove(win, ypos, xpos); + bytes--; + } + } + break; + case (int) '\n': + case (int) '\r': + case KEY_ENTER: + { + waddch(win, '\n'); + buf[bytes++] = (char) '\n'; + wrefresh(win); + buf[bytes] = 0; + } + break; + default: + { + waddch(win, (char) c); + buf[bytes++] = (char) c; + } + } + wrefresh(win); } - } - wrefresh(win); } - } - while (c != '\n' && c != '\r' && c != KEY_ENTER); - delwin(win); - winclose(wintab); - return 0; + while (c != '\n' && c != '\r' && c != KEY_ENTER); + delwin(win); + winclose(wintab); + return 0; } -int readoutg(t_win * win_out, wint * wintab, menuitem * top, char buf[], int keyesc) +int readoutg(t_win * win_out, wint * wintab, menuitem * top, char buf[], + int keyesc) { - int out_cnt; - int c; - int ypos = 0, xpos = 0; - int value; + int out_cnt; + int c; + int ypos = 0, xpos = 0; + int value; - c = getch(); - if (c == ERR) - return 0; + c = getch(); + if (c == ERR) + return 0; - if (c == keyesc) { - if ((value = top_menu(wintab, top, 1)) == 0) - return 0; - buf[0] = '~'; - switch (value) { - case 0x01: - { - buf[1] = 'r'; - return 2; - } - case 0x02: - { - buf[1] = '.'; - return 2; - } - case 0x11: - { - buf[1] = 'o'; - getstring(wintab, "Please enter filename: ", &buf[2]); - return strlen(buf); - } - case 0x12: - { - buf[1] = 'c'; - return 2; - } - case 0x13: - case 0x14: - case 0x15: - { + if (c == keyesc) { + if ((value = top_menu(wintab, top, 1)) == 0) + return 0; + buf[0] = '~'; switch (value) { + case 0x01: + { + buf[1] = 'r'; + return 2; + } + case 0x02: + { + buf[1] = '.'; + return 2; + } + case 0x11: + { + buf[1] = 'o'; + getstring(wintab, + "Please enter filename: ", + &buf[2]); + return strlen(buf); + } + case 0x12: + { + buf[1] = 'c'; + return 2; + } case 0x13: - buf[1] = 'u'; - break; case 0x14: - buf[1] = 'b'; - break; case 0x15: - buf[1] = 'a'; + { + switch (value) { + case 0x13: + buf[1] = 'u'; + break; + case 0x14: + buf[1] = 'b'; + break; + case 0x15: + buf[1] = 'a'; + } + getstring(wintab, + "Please enter filename: ", + buf + 2); + return strlen(buf); + } + case 0x21: + { + buf[1] = '1'; + return 2; + } + case 0x22: + { + buf[1] = '2'; + return 2; + } + case 0x23: + { + buf[1] = '0'; + return 2; + } + case 0x31: + return -1; } - getstring(wintab, "Please enter filename: ", buf + 2); - return strlen(buf); - } - case 0x21: - { - buf[1] = '1'; - return 2; - } - case 0x22: - { - buf[1] = '2'; - return 2; - } - case 0x23: - { - buf[1] = '0'; + wrefresh(win_out->ptr); return 2; - } - case 0x31: - return -1; } - wrefresh(win_out->ptr); - return 2; - } - switch (c) { - case KEY_BACKSPACE: - case 127: - { - getyx(win_out->ptr, ypos, xpos); - if (win_out->bytes > 0) { + switch (c) { + case KEY_BACKSPACE: + case 127: + { + getyx(win_out->ptr, ypos, xpos); + if (win_out->bytes > 0) { + if (win_out->curs_pos < win_out->bytes) { + mvwaddnstr(win_out->ptr, ypos, + --xpos, + &win_out-> + string[win_out-> + curs_pos], + win_out->bytes - + win_out->curs_pos); + waddch(win_out->ptr, ' '); + memmove(&win_out-> + string[win_out->curs_pos - + 1], + &win_out->string[win_out-> + curs_pos], + win_out->bytes - + win_out->curs_pos); + } else + mvwaddch(win_out->ptr, ypos, + --xpos, ' '); + + wmove(win_out->ptr, ypos, xpos); + win_out->bytes--; + win_out->curs_pos--; + } + } + break; + case KEY_LEFT: + if (win_out->curs_pos > 0) { + win_out->curs_pos--; + getyx(win_out->ptr, ypos, xpos); + wmove(win_out->ptr, ypos, xpos - 1); + } + break; + case KEY_RIGHT: if (win_out->curs_pos < win_out->bytes) { - mvwaddnstr(win_out->ptr, ypos, --xpos, &win_out->string[win_out->curs_pos], win_out->bytes - win_out->curs_pos); - waddch(win_out->ptr, ' '); - memmove(&win_out->string[win_out->curs_pos - 1], &win_out->string[win_out->curs_pos], win_out->bytes - win_out->curs_pos); - } else - mvwaddch(win_out->ptr, ypos, --xpos, ' '); - - wmove(win_out->ptr, ypos, xpos); - win_out->bytes--; - win_out->curs_pos--; - } - } - break; - case KEY_LEFT: - if (win_out->curs_pos > 0) { - win_out->curs_pos--; - getyx(win_out->ptr, ypos, xpos); - wmove(win_out->ptr, ypos, xpos - 1); - } - break; - case KEY_RIGHT: - if (win_out->curs_pos < win_out->bytes) { - win_out->curs_pos++; - getyx(win_out->ptr, ypos, xpos); - wmove(win_out->ptr, ypos, xpos + 1); - } - break; - case KEY_ENTER: - case (int) '\n': - case (int) '\r': - { - if (win_out->curs_pos < win_out->bytes) { - getyx(win_out->ptr, ypos, xpos); - wmove(win_out->ptr, ypos, xpos + win_out->bytes - win_out->curs_pos); - } - waddch(win_out->ptr, '\n'); - win_out->string[win_out->bytes++] = (char) '\n'; - wrefresh(win_out->ptr); - strncpy(buf, win_out->string, win_out->bytes); - wrefresh(win_out->ptr); - out_cnt = win_out->bytes; - win_out->bytes = 0; - win_out->curs_pos = 0; - return out_cnt; - } - break; - default: - { - waddch(win_out->ptr, (char) c); - if (win_out->curs_pos < win_out->bytes) { - getyx(win_out->ptr, ypos, xpos); - waddnstr(win_out->ptr, &win_out->string[win_out->curs_pos], win_out->bytes - win_out->curs_pos); - memmove(&win_out->string[win_out->curs_pos + 1], &win_out->string[win_out->curs_pos], win_out->bytes - win_out->curs_pos); - win_out->string[win_out->curs_pos] = (char) c; - wmove(win_out->ptr, ypos, xpos); - } else - win_out->string[win_out->bytes] = (char) c; - - win_out->bytes++; - win_out->curs_pos++; + win_out->curs_pos++; + getyx(win_out->ptr, ypos, xpos); + wmove(win_out->ptr, ypos, xpos + 1); + } + break; + case KEY_ENTER: + case (int) '\n': + case (int) '\r': + { + if (win_out->curs_pos < win_out->bytes) { + getyx(win_out->ptr, ypos, xpos); + wmove(win_out->ptr, ypos, + xpos + win_out->bytes - + win_out->curs_pos); + } + waddch(win_out->ptr, '\n'); + win_out->string[win_out->bytes++] = (char) '\n'; + wrefresh(win_out->ptr); + strncpy(buf, win_out->string, win_out->bytes); + wrefresh(win_out->ptr); + out_cnt = win_out->bytes; + win_out->bytes = 0; + win_out->curs_pos = 0; + return out_cnt; + } + break; + default: + { + waddch(win_out->ptr, (char) c); + if (win_out->curs_pos < win_out->bytes) { + getyx(win_out->ptr, ypos, xpos); + waddnstr(win_out->ptr, + &win_out->string[win_out-> + curs_pos], + win_out->bytes - + win_out->curs_pos); + memmove(&win_out-> + string[win_out->curs_pos + 1], + &win_out->string[win_out-> + curs_pos], + win_out->bytes - + win_out->curs_pos); + win_out->string[win_out->curs_pos] = + (char) c; + wmove(win_out->ptr, ypos, xpos); + } else + win_out->string[win_out->bytes] = (char) c; + + win_out->bytes++; + win_out->curs_pos++; + } } - } - wrefresh(win_out->ptr); - return 0; + wrefresh(win_out->ptr); + return 0; } void writemsg(char fname[], char caller[]) { - char text_row[255]; - char *text_ptr; - char buf[255]; - FILE *f = fopen(fname, "r"); - - if (f == NULL) { - perror(fname); - return; - } - do { - if (fgets(text_row, 255, f) != 0) { - text_row[strlen(text_row) - 1] = '\r'; - text_ptr = strchr(text_row, '$'); - if (text_ptr != NULL) { - strcpy(buf, text_ptr + 2); - switch (*(text_ptr + 1)) { - case 'c': - { - strcpy(text_ptr, caller); - strcat(text_ptr, buf); - } + char text_row[255]; + char *text_ptr; + char buf[255]; + FILE *f = fopen(fname, "r"); + + if (f == NULL) { + perror(fname); + return; + } + do { + if (fgets(text_row, 255, f) != 0) { + text_row[strlen(text_row) - 1] = '\r'; + text_ptr = strchr(text_row, '$'); + if (text_ptr != NULL) { + strcpy(buf, text_ptr + 2); + switch (*(text_ptr + 1)) { + case 'c': + { + strcpy(text_ptr, caller); + strcat(text_ptr, buf); + } + } + } + write(fd, text_row, strlen(text_row)); } - } - write(fd, text_row, strlen(text_row)); } - } - while (!feof(f)); + while (!feof(f)); } void remotecommand(char buf[], int bytes) { - int firstchar; - if (bytes == 0) - return; + int firstchar; + if (bytes == 0) + return; - switch (buf[0]) { - case 'e': - case 'E': - { - for (firstchar = 0; buf[firstchar] != ' '; firstchar++); - firstchar++; - buf[bytes] = '\n'; - convert_lf_cr(buf + firstchar, bytes - firstchar + 1); - write(fd, buf + firstchar, bytes - firstchar + 1); + switch (buf[0]) { + case 'e': + case 'E': + { + for (firstchar = 0; buf[firstchar] != ' '; + firstchar++); + firstchar++; + buf[bytes] = '\n'; + convert_lf_cr(buf + firstchar, + bytes - firstchar + 1); + write(fd, buf + firstchar, bytes - firstchar + 1); + } + break; + default: + write(fd, "Unknown command\r", 16); } - break; - default: - write(fd, "Unknown command\r", 16); - } } int compstr(const char st1[], char st2[], int maxbytes) { - int cnt; - for (cnt = 0; st1[cnt] == st2[cnt] && cnt + 1 < maxbytes && st1[cnt + 1] != 0; cnt++); - if (st1[cnt] != st2[cnt]) - return -1; + int cnt; + for (cnt = 0; + st1[cnt] == st2[cnt] && cnt + 1 < maxbytes + && st1[cnt + 1] != 0; cnt++); + if (st1[cnt] != st2[cnt]) + return -1; + + if (st1[cnt + 1] == 0) + return 0; + if (cnt == maxbytes - 1) + return -2; - if (st1[cnt + 1] == 0) - return 0; - if (cnt == maxbytes - 1) - return -2; - - return -1; + return -1; } int eol(char c) { - if (c == '\r' || c == '\n' || c == 0x1A) - return TRUE; - else - return FALSE; + if (c == '\r' || c == '\n' || c == 0x1A) + return TRUE; + else + return FALSE; } -int searche_key_words(char buf[], int *bytes, char *parms, int *parmsbytes, char restbuf[], int *restbytes) +int searche_key_words(char buf[], int *bytes, char *parms, int *parmsbytes, + char restbuf[], int *restbytes) { - static char cmpstr[MAX_CMPSTRLEN]; - static int cmpstrbyte = 0; - static int command = -1; - - int cmdstpos = 0; - int cnt = 0; - int t = 0; - - if (cmpstrbyte != 0) { - memmove(buf + cmpstrbyte, buf, *bytes); - *bytes += cmpstrbyte; - strncpy(buf, cmpstr, cmpstrbyte); - cmpstrbyte = 0; - for (cnt = 0; !eol(buf[cnt]) && cnt < *bytes - 1; cnt++); - if (cnt == *bytes - 1 && !eol(buf[cnt])) { - printf("Problem!!!\n"); - command = -1; - *restbytes = 0; - *parmsbytes = 0; - return -1; + static char cmpstr[MAX_CMPSTRLEN]; + static int cmpstrbyte = 0; + static int command = -1; + + int cmdstpos = 0; + int cnt = 0; + int t = 0; + + if (cmpstrbyte != 0) { + memmove(buf + cmpstrbyte, buf, *bytes); + *bytes += cmpstrbyte; + strncpy(buf, cmpstr, cmpstrbyte); + cmpstrbyte = 0; + for (cnt = 0; !eol(buf[cnt]) && cnt < *bytes - 1; cnt++); + if (cnt == *bytes - 1 && !eol(buf[cnt])) { + printf("Problem!!!\n"); + command = -1; + *restbytes = 0; + *parmsbytes = 0; + return -1; + } } - } - if (command == -1) { - cnt = 0; - do { - command = 0; - cmdstpos = cnt; - - do { - if ((t = compstr(key_words[command], &buf[cnt], *bytes - cnt)) != -1) - break; - } - while (*key_words[++command] != '\0'); + if (command == -1) { + cnt = 0; + do { + command = 0; + cmdstpos = cnt; + + do { + if ((t = + compstr(key_words[command], &buf[cnt], + *bytes - cnt)) != -1) + break; + } + while (*key_words[++command] != '\0'); - for (; !eol(buf[cnt]) && cnt < *bytes - 1; cnt++); + for (; !eol(buf[cnt]) && cnt < *bytes - 1; cnt++); - if (cnt < *bytes - 1) - cnt++; - else - break; + if (cnt < *bytes - 1) + cnt++; + else + break; + } + while (t == -1); + if (t < 0) + command = -1; } - while (t == -1); - if (t < 0) - command = -1; - } - if (t == -2 || (command != -1 && cnt == *bytes - 1 && !eol(buf[*bytes - 1]))) { - cmpstrbyte = *bytes - cmdstpos; - strncpy(cmpstr, &buf[cmdstpos], cmpstrbyte); - cmpstr[cmpstrbyte] = 0; - *bytes -= cmpstrbyte; - *restbytes = 0; - return -1; - } - if (t == -1) { + if (t == -2 + || (command != -1 && cnt == *bytes - 1 + && !eol(buf[*bytes - 1]))) { + cmpstrbyte = *bytes - cmdstpos; + strncpy(cmpstr, &buf[cmdstpos], cmpstrbyte); + cmpstr[cmpstrbyte] = 0; + *bytes -= cmpstrbyte; + *restbytes = 0; + return -1; + } + if (t == -1) { + command = -1; + cmpstrbyte = 0; + *restbytes = 0; + return -1; + } + t = cmdstpos + strlen(key_words[command]); + *restbytes = *bytes - cnt; + strncpy(parms, &buf[t], cnt - t); + *parmsbytes = cnt - t; + strncpy(restbuf, buf + cnt, *restbytes); + *bytes = cmdstpos; + + t = command; command = -1; - cmpstrbyte = 0; - *restbytes = 0; - return -1; - } - t = cmdstpos + strlen(key_words[command]); - *restbytes = *bytes - cnt; - strncpy(parms, &buf[t], cnt - t); - *parmsbytes = cnt - t; - strncpy(restbuf, buf + cnt, *restbytes); - *bytes = cmdstpos; - - t = command; - command = -1; - return t; + return t; } -int sevenplname(int mode, WINDOW ** swin, wint * wintab, int *f, int* logfile, char parms[], int parmsbytes, char buf[], int bytes) +int sevenplname(int mode, WINDOW ** swin, wint * wintab, int *f, + int *logfile, char parms[], int parmsbytes, char buf[], + int bytes) { - int cnt; - int part; - int nrparts; - int lines; - char orgn[13]; - char prtn[13]; - char strn[255]; - char v[20]; - char s[80]; - if (parmsbytes >= 40) - if (strcmp(" of ", &parms[3]) == 0 - || parmsbytes < 41 - || parms[10] != ' ' - || parms[23] != ' ' - || parms[31] != ' ' - || parms[36] != ' ' - || parms[40] != ' ') { - return -1; + int cnt; + int part; + int nrparts; + int lines; + char orgn[13]; + char prtn[13]; + char strn[255]; + char v[20]; + char s[80]; + if (parmsbytes >= 40) + if (strcmp(" of ", &parms[3]) == 0 + || parmsbytes < 41 + || parms[10] != ' ' + || parms[23] != ' ' + || parms[31] != ' ' + || parms[36] != ' ' || parms[40] != ' ') { + return -1; + } + part = atof(parms); + lines = (int) strtol(parms + 37, NULL, 16); + nrparts = (int) strtol(parms + 7, NULL, 10); + + strncpy(orgn, &parms[11], 12); + convert_upper_lower(orgn, 12); + for (cnt = 11; orgn[cnt] == ' '; cnt--); + orgn[cnt + 1] = 0; + if (orgn[cnt - 3] == '.') { + strncpy(prtn, orgn, cnt - 2); + if (nrparts == 1) + sprintf(prtn + cnt - 2, "7pl"); + else + sprintf(prtn + cnt - 2, "p%02x", part); + } else { + strcpy(prtn, orgn); + if (nrparts == 1) + sprintf(prtn + cnt, ".7pl"); + else + sprintf(prtn + cnt, ".p%02x", part); } - part = atof(parms); - lines = (int) strtol(parms + 37, NULL, 16); - nrparts = (int) strtol(parms + 7, NULL, 10); - - strncpy(orgn, &parms[11], 12); - convert_upper_lower(orgn, 12); - for (cnt = 11; orgn[cnt] == ' '; cnt--); - orgn[cnt + 1] = 0; - if (orgn[cnt - 3] == '.') { - strncpy(prtn, orgn, cnt - 2); - if (nrparts == 1) - sprintf(prtn + cnt - 2, "7pl"); - else - sprintf(prtn + cnt - 2, "p%02x", part); - } else { - strcpy(prtn, orgn); - if (nrparts == 1) - sprintf(prtn + cnt, ".7pl"); - else - sprintf(prtn + cnt, ".p%02x", part); - } - strcpy(strn, STD_DWN_DIR); - strcat(strn, prtn); + strcpy(strn, STD_DWN_DIR); + strcat(strn, prtn); - for (cnt = 0; parms[cnt + 41] != ')' && cnt + 41 != parmsbytes; cnt++); - if (parms[cnt + 41] != ')') { - return -1; - } - strncpy(v, &parms[41], cnt + 1); - v[cnt + 1] = 0; - *swin = opnstatw(mode, wintab, "Remote starts 7+ Download", 11, 55); - sprintf(s, "7plus version : %s", v); - wrdstatw(*swin, s); - sprintf(s, "Name of decoded file : %s", orgn); - wrdstatw(*swin, s); - sprintf(s, "Storagename : %s", strn); - wrdstatw(*swin, s); - sprintf(s, "Parts : %i", nrparts); - wrdstatw(*swin, s); - sprintf(s, "Number of this Part : %i", part); - wrdstatw(*swin, s); - sprintf(s, "Lines : %i", lines); - wrdstatw(*swin, s); - dupdstatw(*swin, "Outstanding lines : ", TRUE); - - if (*f != -1) { - close(*f); - } - if ((*f = open(strn, O_RDWR | O_APPEND | O_CREAT, 0666)) == -1) { - sprintf(s, "Unable to open %s", strn); - statline(mode, s); - } - else - if (*logfile != -1) - { + for (cnt = 0; parms[cnt + 41] != ')' && cnt + 41 != parmsbytes; + cnt++); + if (parms[cnt + 41] != ')') { + return -1; + } + strncpy(v, &parms[41], cnt + 1); + v[cnt + 1] = 0; + *swin = + opnstatw(mode, wintab, "Remote starts 7+ Download", 11, 55); + sprintf(s, "7plus version : %s", v); + wrdstatw(*swin, s); + sprintf(s, "Name of decoded file : %s", orgn); + wrdstatw(*swin, s); + sprintf(s, "Storagename : %s", strn); + wrdstatw(*swin, s); + sprintf(s, "Parts : %i", nrparts); + wrdstatw(*swin, s); + sprintf(s, "Number of this Part : %i", part); + wrdstatw(*swin, s); + sprintf(s, "Lines : %i", lines); + wrdstatw(*swin, s); + dupdstatw(*swin, "Outstanding lines : ", TRUE); + + if (*f != -1) { + close(*f); + } + if ((*f = open(strn, O_RDWR | O_APPEND | O_CREAT, 0666)) == -1) { + sprintf(s, "Unable to open %s", strn); + statline(mode, s); + } else if (*logfile != -1) { sprintf(s, "*** 7plus download into file: %s ***\n", strn); write(*logfile, s, strlen(s)); } - write(*f, key_words[2], strlen(key_words[2])); - convert_cr_lf(parms, parmsbytes); - write(*f, parms, parmsbytes); + write(*f, key_words[2], strlen(key_words[2])); + convert_cr_lf(parms, parmsbytes); + write(*f, parms, parmsbytes); - return lines; + return lines; } void statbits(int mode, char stat, int m) { - if (mode == RAWMODE) + if (mode == RAWMODE) + return; + move(0, STATW_BITS + m); + attron(A_REVERSE); + addch(stat); + attroff(A_REVERSE); + refresh(); return; - move(0, STATW_BITS + m); - attron(A_REVERSE); - addch(stat); - attroff(A_REVERSE); - refresh(); - return; } int cmd_call(char *call[], int mode) { - menuitem con[] = - { - {"~Reconnect", 'R', M_ITEM, (void *) 0x01}, - {"~Exit", 'E', M_ITEM, (void *) 0x02}, - {"\0", 0, M_END, 0} - }; - - menuitem fil[] = - { - {"~Open Logfile", 'O', M_ITEM, 0}, - {"~Close Logfile", 'C', M_ITEM, 0}, - {"Send ~Textfile", 'T', M_ITEM, 0}, - {"Send ~Binary", 'B', M_ITEM, 0}, - {"Send ~AutoBin", 'A', M_ITEM, 0}, - {"\0", 0, M_END, 0} - }; - - menuitem mod[] = - { - {"~Slavemode", 'S', M_ITEM, 0}, - {"~Talkmode", 'T', M_ITEM, 0}, - {"~Rawmode", 'R', M_ITEM, 0}, - {"\0", 0, M_END, 0} - }; - - menuitem win[] = - { - {"~Clear", 'C', M_ITEM, 0}, - {"~Resize", 'R', M_ITEM, 0}, - {"\0", 0, M_END, 0} - }; - - menuitem top[] = - { - {"~Connect", 'C', M_P_DWN, con}, - {"~File", 'F', M_P_DWN, fil}, - {"~Mode", 'M', M_P_DWN, mod}, - {"~Window", 'W', M_P_DWN, win}, - {"\0", 0, M_END, 0} - }; - - wint wintab; - fd_set sock_read; - fd_set sock_write; - char buf[MAX_BUFLEN]; - char restbuf[MAX_PACKETLEN]; - char parms[256]; - int sevenplus = FALSE; - int sevenplcnt = 0; - int bytes; - int restbytes; - int parmsbytes; - int com_num; - int logfile = -1; - int uploadfile = -1; - int downloadfile = -1; - int binup = FALSE; - long uplsize = 0; - long uplpos = 0; - char uplbuf[128]; /* Upload buffer */ - int upldp = 0; - int upllen = 0; - char *c, *t; - int extrach = 0; - t_gp gp; - t_win win_in; - t_win win_out; - WINDOW *swin = 0; - int cnt; - int crc = 0; - char s[80]; - int flags = 0; - - init_crc(); - - gp.dwn_cnt = 0; - wintab.next = 0; - - if ((fd = connect_to(call)) == -1) - return FALSE; - - interrupted = FALSE; - signal(SIGQUIT, cmd_intr); - signal(SIGINT, SIG_IGN); - signal(SIGTSTP, SIG_IGN); - - fcntl(fd, F_SETFL, O_NONBLOCK); - fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK); - - if (mode != RAWMODE) - start_screen(call); - switch (mode) { - case TALKMODE: - start_talk_mode(&wintab, &win_in, &win_out); - break; - case SLAVEMODE: - start_slave_mode(&wintab, &win_in, &win_out); - break; - case RAWMODE: - printf("Rawmode\n"); - } - - while (TRUE) { - FD_ZERO(&sock_read); - FD_SET(STDIN_FILENO, &sock_read); - FD_SET(fd, &sock_read); - FD_ZERO(&sock_write); - - if (uploadfile != -1) - FD_SET(fd, &sock_write); - - if (select(fd + 1, &sock_read, &sock_write, NULL, NULL) == -1) { - if (!interrupted && errno == EAGAIN) - continue; - if (!interrupted) - perror("select"); - break; - } - if (FD_ISSET(fd, &sock_read)) { - bytes = read(fd, buf, 511); - if (bytes == -1 && errno != EWOULDBLOCK && errno != EAGAIN) { - if (errno != ENOTCONN) - perror("read"); + menuitem con[] = { + {"~Reconnect", 'R', M_ITEM, (void *) 0x01}, + {"~Exit", 'E', M_ITEM, (void *) 0x02}, + {"\0", 0, M_END, 0} + }; + + menuitem fil[] = { + {"~Open Logfile", 'O', M_ITEM, 0}, + {"~Close Logfile", 'C', M_ITEM, 0}, + {"Send ~Textfile", 'T', M_ITEM, 0}, + {"Send ~Binary", 'B', M_ITEM, 0}, + {"Send ~AutoBin", 'A', M_ITEM, 0}, + {"\0", 0, M_END, 0} + }; + + menuitem mod[] = { + {"~Slavemode", 'S', M_ITEM, 0}, + {"~Talkmode", 'T', M_ITEM, 0}, + {"~Rawmode", 'R', M_ITEM, 0}, + {"\0", 0, M_END, 0} + }; + + menuitem win[] = { + {"~Clear", 'C', M_ITEM, 0}, + {"~Resize", 'R', M_ITEM, 0}, + {"\0", 0, M_END, 0} + }; + + menuitem top[] = { + {"~Connect", 'C', M_P_DWN, con}, + {"~File", 'F', M_P_DWN, fil}, + {"~Mode", 'M', M_P_DWN, mod}, + {"~Window", 'W', M_P_DWN, win}, + {"\0", 0, M_END, 0} + }; + + wint wintab; + fd_set sock_read; + fd_set sock_write; + char buf[MAX_BUFLEN]; + char restbuf[MAX_PACKETLEN]; + char parms[256]; + int sevenplus = FALSE; + int sevenplcnt = 0; + int bytes; + int restbytes; + int parmsbytes; + int com_num; + int logfile = -1; + int uploadfile = -1; + int downloadfile = -1; + int binup = FALSE; + long uplsize = 0; + long uplpos = 0; + char uplbuf[128]; /* Upload buffer */ + int upldp = 0; + int upllen = 0; + char *c, *t; + int extrach = 0; + t_gp gp; + t_win win_in; + t_win win_out; + WINDOW *swin = 0; + int cnt; + int crc = 0; + char s[80]; + int flags = 0; + + init_crc(); + + gp.dwn_cnt = 0; + wintab.next = 0; + + if ((fd = connect_to(call)) == -1) + return FALSE; + + interrupted = FALSE; + signal(SIGQUIT, cmd_intr); + signal(SIGINT, SIG_IGN); + signal(SIGTSTP, SIG_IGN); + + fcntl(fd, F_SETFL, O_NONBLOCK); + fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK); + + if (mode != RAWMODE) + start_screen(call); + switch (mode) { + case TALKMODE: + start_talk_mode(&wintab, &win_in, &win_out); break; - } - if (gp.dwn_cnt != 0) { - ab_down(mode, swin, &wintab, buf, &bytes, &gp); - if (bytes == 0) - continue; - } - do { - com_num = searche_key_words(buf, &bytes, parms, &parmsbytes, restbuf, &restbytes); - - if (bytes != 0) { - convert_cr_lf(buf, bytes); - if (!sevenplus) { - - writeincom(mode, &win_in, buf, bytes); - } else { - for (cnt = 0; cnt < bytes; cnt++) - if (eol(buf[cnt])) - sevenplcnt--; - dupdstatw(swin, s, FALSE); - } - if (downloadfile != -1) - { - if (write(downloadfile, buf, bytes) != bytes) - { - close(downloadfile); - downloadfile = -1; - statline(mode, "Error while writing file. Downloadfile closed."); + case SLAVEMODE: + start_slave_mode(&wintab, &win_in, &win_out); + break; + case RAWMODE: + printf("Rawmode\n"); + } + + while (TRUE) { + FD_ZERO(&sock_read); + FD_SET(STDIN_FILENO, &sock_read); + FD_SET(fd, &sock_read); + FD_ZERO(&sock_write); + + if (uploadfile != -1) + FD_SET(fd, &sock_write); + + if (select(fd + 1, &sock_read, &sock_write, NULL, NULL) == + -1) { + if (!interrupted && errno == EAGAIN) + continue; + if (!interrupted) + perror("select"); + break; + } + if (FD_ISSET(fd, &sock_read)) { + bytes = read(fd, buf, 511); + if (bytes == -1 && errno != EWOULDBLOCK + && errno != EAGAIN) { + if (errno != ENOTCONN) + perror("read"); + break; } - } - else - if (logfile != -1) { - if (write(logfile, buf, bytes) != bytes) { - close(logfile); - logfile = -1; - statline(mode, "Error while writing log. Log closed."); + if (gp.dwn_cnt != 0) { + ab_down(mode, swin, &wintab, buf, &bytes, + &gp); + if (bytes == 0) + continue; } - } - } - switch (com_num) { - case 0: - { + do { + com_num = + searche_key_words(buf, &bytes, parms, + &parmsbytes, restbuf, + &restbytes); + + if (bytes != 0) { + convert_cr_lf(buf, bytes); + if (!sevenplus) { + + writeincom(mode, &win_in, + buf, bytes); + } else { + for (cnt = 0; cnt < bytes; + cnt++) + if (eol(buf[cnt])) + sevenplcnt--; + dupdstatw(swin, s, FALSE); + } + if (downloadfile != -1) { + if (write + (downloadfile, buf, + bytes) != bytes) { + close + (downloadfile); + downloadfile = -1; + statline(mode, + "Error while writing file. Downloadfile closed."); + } + } else if (logfile != -1) { + if (write + (logfile, buf, + bytes) != bytes) { + close(logfile); + logfile = -1; + statline(mode, + "Error while writing log. Log closed."); + } + } + } + switch (com_num) { + case 0: + { #if 0 - /* - FIXME! We should, no: WE MUST be able to turn off - all remote commands to avoid mail bombs generating - offensive mails with //e while sucking the BBS - */ - remotecommand(parms, parmsbytes); + /* + FIXME! We should, no: WE MUST be able to turn off + all remote commands to avoid mail bombs generating + offensive mails with //e while sucking the BBS + */ + remotecommand(parms, + parmsbytes); #endif - } - break; - case 1: - { - start_ab_download(mode, &swin, &wintab, parms, parmsbytes, restbuf, restbytes, &gp, call); - restbytes = 0; - extrach = 0; - } - break; - case 2: - { - if ((sevenplcnt = sevenplname(mode, &swin, &wintab, &downloadfile, &logfile, parms, parmsbytes, buf, bytes)) != -1) - sevenplus = TRUE; - } - break; - case 3: - { - if (!sevenplus) - break; - write(downloadfile, key_words[3], strlen(key_words[3])); - convert_cr_lf(parms, parmsbytes); - write(downloadfile, parms, parmsbytes); - if (mode != RAWMODE) { - delwin(swin); - winclose(&wintab); - } else - printf("\n"); - statline(mode, "7+ Download finished."); - sevenplus = FALSE; - close(downloadfile); - downloadfile = -1; - } - break; - } + } + break; + case 1: + { + start_ab_download(mode, + &swin, + &wintab, + parms, + parmsbytes, + restbuf, + restbytes, + &gp, + call); + restbytes = 0; + extrach = 0; + } + break; + case 2: + { + if ((sevenplcnt = + sevenplname(mode, + &swin, + &wintab, + &downloadfile, + &logfile, + parms, + parmsbytes, + buf, + bytes)) != + -1) + sevenplus = TRUE; + } + break; + case 3: + { + if (!sevenplus) + break; + write(downloadfile, + key_words[3], + strlen(key_words + [3])); + convert_cr_lf(parms, + parmsbytes); + write(downloadfile, parms, + parmsbytes); + if (mode != RAWMODE) { + delwin(swin); + winclose(&wintab); + } else + printf("\n"); + statline(mode, + "7+ Download finished."); + sevenplus = FALSE; + close(downloadfile); + downloadfile = -1; + } + break; + } - strncpy(buf, restbuf, restbytes); - bytes = restbytes; - } - while (restbytes != 0); - } - if (FD_ISSET(STDIN_FILENO, &sock_read)) { - if ((mode & RAWMODE) == RAWMODE) - bytes = read(STDIN_FILENO, buf, 511); - else { - bytes = readoutg(&win_out, &wintab, top, buf, 0x1d); - if (bytes == -1) { - wclear(win_in.ptr); - wrefresh(win_in.ptr); - wclear(win_out.ptr); - wrefresh(win_out.ptr); - bytes = 0; + strncpy(buf, restbuf, restbytes); + bytes = restbytes; + } + while (restbytes != 0); } - } - if (bytes > 0) - statline(mode, ""); - - if (bytes > 1 && *buf == '~') { - buf[bytes] = 0; - - switch (buf[1]) { - case '.': - { - bytes = 0; - interrupted = TRUE; - } - break; - case '!': - change_mode(mode, RAWMODE, &wintab, &win_in, &win_out, call); - if (buf[2] != '\0' && buf[2] != '\n') { - c = buf + 2; - if ((t = strchr(c, '\n')) != NULL) - *t = '\0'; - } else { - if ((c = getenv("SHELL")) == NULL) - c = "/bin/sh"; - } - - fcntl(STDIN_FILENO, F_SETFL, 0); - printf("\n[Spawning subshell]\n"); - system(c); - printf("\n[Returned to connect]\n"); - fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK); - change_mode(RAWMODE, mode, &wintab, &win_in, &win_out, call); - continue; - case 'z': - case 'Z': - case 'Z' - 64: - fcntl(STDIN_FILENO, F_SETFL, 0); - kill(getpid(), SIGSTOP); - statline(mode, "Resumed"); - fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK); - continue; - case '?': - case 'h': - case 'H': - printf("\n\rTilde escapes:\n\r. close\n\r! shell\n\rZ suspend\n\rs Stop upload\n\ro Open log\n\rc Close log\n\ru Upload\n\ryd YAPP Download\n\ryu YAPP Upload\n\r"); - continue; - case 'S': - case 's': - if (uploadfile != -1) { - statline(mode, "Upload file closed"); - close(uploadfile); - uploadfile = -1; - } else { - statline(mode, "No upload in progress"); - } - continue; - case 'A': - case 'a': - case 'b': - case 'B': - case 'u': - case 'U': - if (uploadfile != -1) { - statline(mode, "Already uploading"); - continue; - } - if ((t = strchr(buf, '\n')) != NULL) - *t = '\0'; - t = buf + 2; - while (*t != '\0' && isspace(*t)) - t++; - if (*t == '\0') { - statline(mode, "Upload requires a filename"); - continue; - } - uploadfile = open(t, O_RDONLY); - if (uploadfile == -1) { - statline(mode, "Unable to open upload file"); - continue; - } - if (lseek(uploadfile, 0L, SEEK_END) != -1) - uplsize = lseek(uploadfile, 0L, SEEK_CUR); - else - uplsize = 0; - lseek(uploadfile, 0L, SEEK_SET); - uplpos = 0; - upldp = -1; - upllen = 0; - if (uplsize != -1) { - sprintf(s, "Uploading %ld bytes from %s", uplsize, t); - swin = opnstatw(mode, &wintab, s, 6, 50); - dupdstatw(swin, "bytes sent : ", TRUE); - } else { - sprintf(s, "Uploading from %s", t); - swin = opnstatw(mode, &wintab, s, 6, 50); - dupdstatw(swin, "bytes sent : ", TRUE); - } - switch (buf[1]) { - case 'a': - case 'A': - { - binup = TRUE; - crc = 0; - - do { - upllen = read(uploadfile, uplbuf, 128); - - if (upllen == -1) { - close(uploadfile); - uploadfile = -1; - delwin(swin); - winclose(&wintab); - sprintf(s, "Error reading upload file: upload aborted"); - statline(mode, s); - break; + if (FD_ISSET(STDIN_FILENO, &sock_read)) { + if ((mode & RAWMODE) == RAWMODE) + bytes = read(STDIN_FILENO, buf, 511); + else { + bytes = + readoutg(&win_out, &wintab, top, buf, + 0x1d); + if (bytes == -1) { + wclear(win_in.ptr); + wrefresh(win_in.ptr); + wclear(win_out.ptr); + wrefresh(win_out.ptr); + bytes = 0; } - crc = calc_crc(uplbuf, upllen, crc); - } - while (upllen > 0); - lseek(uploadfile, 0L, SEEK_SET); - sprintf(s, "#BIN#%ld#$%u#|000000#%s\r", uplsize, crc, t); - write(fd, s, strlen(s)); - uplpos = 0; - upldp = -1; - upllen = 0; } - break; - case 'b': - case 'B': - binup = TRUE; - break; - case 'u': - case 'U': - binup = FALSE; - } - continue; - case 'O': - case 'o': - if ((t = strchr(buf, '\n')) != NULL) - *t = '\0'; - if (logfile != -1) { - close(logfile); - logfile = -1; - } - if (downloadfile != -1) - { - close(downloadfile); - downloadfile = -1; - } - t = buf + 2; - while (*t != '\0' && isspace(*t)) - t++; - if (*t == '\0') - t = "logfile.txt"; - if ((logfile = open(t, O_RDWR | O_APPEND | O_CREAT, 0666)) == -1) { - sprintf(s, "Unable to open %s", buf + 2); - statline(mode, s); - } else - statbits(mode, 'L', 1); - continue; - case 'C': - case 'c': - if (logfile != -1) { - close(logfile); - logfile = -1; - statbits(mode, '-', 1); - } else { - statline(mode, "Log file not open"); - } - continue; - case 'Y': - case 'y': - cmd_yapp(buf + 2, bytes - 2); - continue; - case '~': - bytes--; - memmove(buf, buf + 1, strlen(buf)); - break; - case 'R': - case 'r': - flags |= FLAG_RECONNECT; - bytes = 0; - interrupted = TRUE; - continue; - case '0': - mode = change_mode(mode, RAWMODE, &wintab, &win_in, &win_out, call); - continue; - case '1': - mode = change_mode(mode, SLAVEMODE, &wintab, &win_in, &win_out, call); - continue; - case '2': - mode = change_mode(mode, TALKMODE, &wintab, &win_in, &win_out, call); - continue; - default: - statline(mode, "Unknown '~' escape. Type ~h for a list"); - continue; - } - } - /* if (bytes == -1 && errno != EWOULDBLOCK && errno != EAGAIN) */ - /* if ((bytes == 0 && (mode & (TALKMODE|SLAVEMODE)) == 0) || (bytes == -1 && errno != EWOULDBLOCK && errno != EAGAIN)) */ - if (interrupted || (bytes == -1 && errno != EWOULDBLOCK && errno != EAGAIN)) { - if (!interrupted) - perror("input"); - break; - } - if (bytes > 0) { - sevenplus = FALSE; - if (uploadfile != -1) { - statline(mode, "Ignored. Type ~s to stop upload"); - continue; - } - convert_lf_cr(buf, bytes); - - if (write(fd, buf, bytes) == -1) { - perror("write"); - break; - } - } - if (uploadfile != -1) { - if (uplsize == 0) { - close(uploadfile); - uploadfile = -1; - delwin(swin); - winclose(&wintab); - statline(mode, "Upload complete: 0 bytes"); - continue; - } - if (upldp == -1) { - upllen = read(uploadfile, uplbuf, 128); - - if (upllen == 0) { - close(uploadfile); - uploadfile = -1; - delwin(swin); - winclose(&wintab); - sprintf(s, "Upload complete: %ld bytes", uplpos); - statline(mode, s); - continue; - } - if (upllen == -1) { - close(uploadfile); - uploadfile = -1; - delwin(swin); - winclose(&wintab); - sprintf(s, "Error reading upload file: upload aborted at %ld bytes", uplpos); - statline(mode, s); - continue; - } - if (!binup) - convert_lf_cr(uplbuf, upllen); - - upldp = 0; - } - bytes = write(fd, uplbuf + upldp, upllen - upldp); + if (bytes > 0) + statline(mode, ""); + + if (bytes > 1 && *buf == '~') { + buf[bytes] = 0; + + switch (buf[1]) { + case '.': + { + bytes = 0; + interrupted = TRUE; + } + break; + case '!': + change_mode(mode, RAWMODE, &wintab, + &win_in, &win_out, + call); + if (buf[2] != '\0' + && buf[2] != '\n') { + c = buf + 2; + if ((t = + strchr(c, + '\n')) != NULL) + *t = '\0'; + } else { + if ((c = + getenv("SHELL")) == + NULL) + c = "/bin/sh"; + } + + fcntl(STDIN_FILENO, F_SETFL, 0); + printf("\n[Spawning subshell]\n"); + system(c); + printf + ("\n[Returned to connect]\n"); + fcntl(STDIN_FILENO, F_SETFL, + O_NONBLOCK); + change_mode(RAWMODE, mode, &wintab, + &win_in, &win_out, + call); + continue; + case 'z': + case 'Z': + case 'Z' - 64: + fcntl(STDIN_FILENO, F_SETFL, 0); + kill(getpid(), SIGSTOP); + statline(mode, "Resumed"); + fcntl(STDIN_FILENO, F_SETFL, + O_NONBLOCK); + continue; + case '?': + case 'h': + case 'H': + printf + ("\n\rTilde escapes:\n\r. close\n\r! shell\n\rZ suspend\n\rs Stop upload\n\ro Open log\n\rc Close log\n\ru Upload\n\ryd YAPP Download\n\ryu YAPP Upload\n\r"); + continue; + case 'S': + case 's': + if (uploadfile != -1) { + statline(mode, + "Upload file closed"); + close(uploadfile); + uploadfile = -1; + } else { + statline(mode, + "No upload in progress"); + } + continue; + case 'A': + case 'a': + case 'b': + case 'B': + case 'u': + case 'U': + if (uploadfile != -1) { + statline(mode, + "Already uploading"); + continue; + } + if ((t = + strchr(buf, '\n')) != NULL) + *t = '\0'; + t = buf + 2; + while (*t != '\0' && isspace(*t)) + t++; + if (*t == '\0') { + statline(mode, + "Upload requires a filename"); + continue; + } + uploadfile = open(t, O_RDONLY); + if (uploadfile == -1) { + statline(mode, + "Unable to open upload file"); + continue; + } + if (lseek(uploadfile, 0L, SEEK_END) + != -1) + uplsize = + lseek(uploadfile, 0L, + SEEK_CUR); + else + uplsize = 0; + lseek(uploadfile, 0L, SEEK_SET); + uplpos = 0; + upldp = -1; + upllen = 0; + if (uplsize != -1) { + sprintf(s, + "Uploading %ld bytes from %s", + uplsize, t); + swin = + opnstatw(mode, &wintab, + s, 6, 50); + dupdstatw(swin, + "bytes sent : ", + TRUE); + } else { + sprintf(s, + "Uploading from %s", + t); + swin = + opnstatw(mode, &wintab, + s, 6, 50); + dupdstatw(swin, + "bytes sent : ", + TRUE); + } + switch (buf[1]) { + case 'a': + case 'A': + { + binup = TRUE; + crc = 0; + + do { + upllen = + read + (uploadfile, + uplbuf, + 128); + + if (upllen + == + -1) { + close + (uploadfile); + uploadfile + = + -1; + delwin + (swin); + winclose + (&wintab); + sprintf + (s, + "Error reading upload file: upload aborted"); + statline + (mode, + s); + break; + } + crc = + calc_crc + (uplbuf, + upllen, + crc); + } + while (upllen > 0); + lseek(uploadfile, + 0L, + SEEK_SET); + sprintf(s, + "#BIN#%ld#$%u#|000000#%s\r", + uplsize, + crc, t); + write(fd, s, + strlen(s)); + uplpos = 0; + upldp = -1; + upllen = 0; + } + break; + case 'b': + case 'B': + binup = TRUE; + break; + case 'u': + case 'U': + binup = FALSE; + } + continue; + case 'O': + case 'o': + if ((t = + strchr(buf, '\n')) != NULL) + *t = '\0'; + if (logfile != -1) { + close(logfile); + logfile = -1; + } + if (downloadfile != -1) { + close(downloadfile); + downloadfile = -1; + } + t = buf + 2; + while (*t != '\0' && isspace(*t)) + t++; + if (*t == '\0') + t = "logfile.txt"; + if ((logfile = + open(t, + O_RDWR | O_APPEND | + O_CREAT, 0666)) == -1) { + sprintf(s, + "Unable to open %s", + buf + 2); + statline(mode, s); + } else + statbits(mode, 'L', 1); + continue; + case 'C': + case 'c': + if (logfile != -1) { + close(logfile); + logfile = -1; + statbits(mode, '-', 1); + } else { + statline(mode, + "Log file not open"); + } + continue; + case 'Y': + case 'y': + cmd_yapp(buf + 2, bytes - 2); + continue; + case '~': + bytes--; + memmove(buf, buf + 1, strlen(buf)); + break; + case 'R': + case 'r': + flags |= FLAG_RECONNECT; + bytes = 0; + interrupted = TRUE; + continue; + case '0': + mode = + change_mode(mode, RAWMODE, + &wintab, &win_in, + &win_out, call); + continue; + case '1': + mode = + change_mode(mode, SLAVEMODE, + &wintab, &win_in, + &win_out, call); + continue; + case '2': + mode = + change_mode(mode, TALKMODE, + &wintab, &win_in, + &win_out, call); + continue; + default: + statline(mode, + "Unknown '~' escape. Type ~h for a list"); + continue; + } + } + /* if (bytes == -1 && errno != EWOULDBLOCK && errno != EAGAIN) */ + /* if ((bytes == 0 && (mode & (TALKMODE|SLAVEMODE)) == 0) || (bytes == -1 && errno != EWOULDBLOCK && errno != EAGAIN)) */ + if (interrupted + || (bytes == -1 && errno != EWOULDBLOCK + && errno != EAGAIN)) { + if (!interrupted) + perror("input"); + break; + } + if (bytes > 0) { + sevenplus = FALSE; + if (uploadfile != -1) { + statline(mode, + "Ignored. Type ~s to stop upload"); + continue; + } + convert_lf_cr(buf, bytes); - if ((bytes == 0 || bytes == -1) && errno != EWOULDBLOCK && errno != EAGAIN) { - sprintf(s, "Write error during upload. Connection lost"); - statline(mode, s); - perror("write"); - break; - } + if (write(fd, buf, bytes) == -1) { + perror("write"); + break; + } + } + if (uploadfile != -1) { + if (uplsize == 0) { + close(uploadfile); + uploadfile = -1; + delwin(swin); + winclose(&wintab); + statline(mode, + "Upload complete: 0 bytes"); + continue; + } + if (upldp == -1) { + upllen = + read(uploadfile, uplbuf, 128); + + if (upllen == 0) { + close(uploadfile); + uploadfile = -1; + delwin(swin); + winclose(&wintab); + sprintf(s, + "Upload complete: %ld bytes", + uplpos); + statline(mode, s); + continue; + } + if (upllen == -1) { + close(uploadfile); + uploadfile = -1; + delwin(swin); + winclose(&wintab); + sprintf(s, + "Error reading upload file: upload aborted at %ld bytes", + uplpos); + statline(mode, s); + continue; + } + if (!binup) + convert_lf_cr(uplbuf, + upllen); + + upldp = 0; + } + bytes = + write(fd, uplbuf + upldp, + upllen - upldp); + + if ((bytes == 0 || bytes == -1) + && errno != EWOULDBLOCK + && errno != EAGAIN) { + sprintf(s, + "Write error during upload. Connection lost"); + statline(mode, s); + perror("write"); + break; + } /* if (uplpos / 1024 != (uplpos + bytes) / 1024) { */ - /* printf("\r%ld bytes sent ", uplpos + bytes); */ - sprintf(s, "%ld", uplpos + bytes); - dupdstatw(swin, s, FALSE); + /* printf("\r%ld bytes sent ", uplpos + bytes); */ + sprintf(s, "%ld", uplpos + bytes); + dupdstatw(swin, s, FALSE); /* } */ - uplpos += bytes; - upldp += bytes; + uplpos += bytes; + upldp += bytes; - if (upldp >= upllen) - upldp = -1; - } + if (upldp >= upllen) + upldp = -1; + } + } } - } - close(fd); + close(fd); - if (logfile != -1) { - close(logfile); - logfile = -1; - } - if (downloadfile != -1) { - close(downloadfile); - downloadfile = -1; - } - fcntl(STDIN_FILENO, F_SETFL, 0); + if (logfile != -1) { + close(logfile); + logfile = -1; + } + if (downloadfile != -1) { + close(downloadfile); + downloadfile = -1; + } + fcntl(STDIN_FILENO, F_SETFL, 0); - signal(SIGQUIT, SIG_IGN); - signal(SIGINT, SIG_DFL); + signal(SIGQUIT, SIG_IGN); + signal(SIGINT, SIG_DFL); - if (mode != RAWMODE) - endwin(); + if (mode != RAWMODE) + endwin(); - printf("*** Cleared\n"); + printf("*** Cleared\n"); - if (flags & FLAG_RECONNECT) { - return TRUE; - } else { - return FALSE; - } + if (flags & FLAG_RECONNECT) { + return TRUE; + } else { + return FALSE; + } } int main(int argc, char **argv) { - int p; - int mode = TALKMODE; - - while ((p = getopt(argc, argv, "b:dhm:p:rtvw:")) != -1) { - switch (p) { - case 'b': - if (*optarg != 'e' && *optarg != 'l') { - fprintf(stderr, "call: invalid argument for option '-b'\n"); - return 1; - } - backoff = *optarg == 'e'; - break; - case 'd': - debug = TRUE; - break; - case 'h': - mode = SLAVEMODE; - break; - case 'm': - if (*optarg != 's' && *optarg != 'e') { - fprintf(stderr, "call: invalid argument for option '-m'\n"); - return 1; - } - ax25mode = *optarg == 'e'; - break; - case 'p': - if ((paclen = atoi(optarg)) == 0) { - fprintf(stderr, "call: option '-p' requires a numeric argument\n"); - return 1; - } - if (paclen < 1 || paclen > 500) { - fprintf(stderr, "call: paclen must be between 1 and 500\n"); - return 1; - } - break; - case 'r': - mode = RAWMODE; - break; - case 't': - mode = TALKMODE; - break; - case 'v': - printf("call: %s\n", VERSION); - return 0; - case 'w': - if ((window = atoi(optarg)) == 0) { - fprintf(stderr, "call: option '-w' requires a numeric argument\n"); - return 1; - } - if (ax25mode) { - if (window < 1 || window > 63) { - fprintf(stderr, "call: window must be between 1 and 63 frames\n"); - return 1; - } - } else { - if (window < 1 || window > 7) { - fprintf(stderr, "call: window must be between 1 and 7 frames\n"); - return 1; + int p; + int mode = TALKMODE; + + while ((p = getopt(argc, argv, "b:dhm:p:rtvw:")) != -1) { + switch (p) { + case 'b': + if (*optarg != 'e' && *optarg != 'l') { + fprintf(stderr, + "call: invalid argument for option '-b'\n"); + return 1; + } + backoff = *optarg == 'e'; + break; + case 'd': + debug = TRUE; + break; + case 'h': + mode = SLAVEMODE; + break; + case 'm': + if (*optarg != 's' && *optarg != 'e') { + fprintf(stderr, + "call: invalid argument for option '-m'\n"); + return 1; + } + ax25mode = *optarg == 'e'; + break; + case 'p': + if ((paclen = atoi(optarg)) == 0) { + fprintf(stderr, + "call: option '-p' requires a numeric argument\n"); + return 1; + } + if (paclen < 1 || paclen > 500) { + fprintf(stderr, + "call: paclen must be between 1 and 500\n"); + return 1; + } + break; + case 'r': + mode = RAWMODE; + break; + case 't': + mode = TALKMODE; + break; + case 'v': + printf("call: %s\n", VERSION); + return 0; + case 'w': + if ((window = atoi(optarg)) == 0) { + fprintf(stderr, + "call: option '-w' requires a numeric argument\n"); + return 1; + } + if (ax25mode) { + if (window < 1 || window > 63) { + fprintf(stderr, + "call: window must be between 1 and 63 frames\n"); + return 1; + } + } else { + if (window < 1 || window > 7) { + fprintf(stderr, + "call: window must be between 1 and 7 frames\n"); + return 1; + } + } + break; + case '?': + case ':': + fprintf(stderr, + "usage: call [-b l|e] [-d] [-h] [-m s|e] [-p paclen] [-r] [-t] [-v] [-w window] port callsign [[via] digipeaters...]\n"); + return 1; } - } - break; - case '?': - case ':': - fprintf(stderr, "usage: call [-b l|e] [-d] [-h] [-m s|e] [-p paclen] [-r] [-t] [-v] [-w window] port callsign [[via] digipeaters...]\n"); - return 1; } - } - - if (optind == argc || optind == argc - 1) { - fprintf(stderr, "usage: call [-b l|e] [-d] [-h] [-m s|e] [-p paclen] [-r] [-t] [-v] [-w window] port callsign [[via] digipeaters...]\n"); - return 1; - } - port = argv[optind]; - - if (ax25_config_load_ports() == 0) { - fprintf(stderr, "call: no AX.25 port data configured\n"); - return 1; - } - if (ax25_config_get_addr(port) == NULL) { - nr_config_load_ports(); - - if (nr_config_get_addr(port) == NULL) { - rs_config_load_ports(); - - if (rs_config_get_addr(port) == NULL) { - fprintf(stderr, "call: invalid port setting\n"); + + if (optind == argc || optind == argc - 1) { + fprintf(stderr, + "usage: call [-b l|e] [-d] [-h] [-m s|e] [-p paclen] [-r] [-t] [-v] [-w window] port callsign [[via] digipeaters...]\n"); + return 1; + } + port = argv[optind]; + + if (ax25_config_load_ports() == 0) { + fprintf(stderr, "call: no AX.25 port data configured\n"); return 1; - } else { - af_mode = AF_ROSE; - } + } + if (ax25_config_get_addr(port) == NULL) { + nr_config_load_ports(); + + if (nr_config_get_addr(port) == NULL) { + rs_config_load_ports(); + + if (rs_config_get_addr(port) == NULL) { + fprintf(stderr, + "call: invalid port setting\n"); + return 1; + } else { + af_mode = AF_ROSE; + } + } else { + af_mode = AF_NETROM; + } } else { - af_mode = AF_NETROM; + af_mode = AF_AX25; + } + + switch (af_mode) { + case AF_ROSE: + paclen = rs_config_get_paclen(port); + break; + + case AF_NETROM: + if (paclen == 0) + paclen = nr_config_get_paclen(port); + break; + case AF_AX25: + if (window == 0) + window = ax25_config_get_window(port); + if (paclen == 0) + paclen = ax25_config_get_paclen(port); + break; + } + + printf("GW4PTS AX.25 Connect v1.11\n"); + + while (cmd_call(argv + optind + 1, mode)) { + printf("Wait 60 sec before reconnect\n"); + sleep(60); } - } else { - af_mode = AF_AX25; - } - - switch (af_mode) { - case AF_ROSE: - paclen = rs_config_get_paclen(port); - break; - - case AF_NETROM: - if (paclen == 0) - paclen = nr_config_get_paclen(port); - break; - case AF_AX25: - if (window == 0) - window = ax25_config_get_window(port); - if (paclen == 0) - paclen = ax25_config_get_paclen(port); - break; - } - - printf("GW4PTS AX.25 Connect v1.11\n"); - - while (cmd_call(argv + optind + 1, mode)) { - printf("Wait 60 sec before reconnect\n"); - sleep(60); - } - - return 0; + + return 0; } @@ -8,31 +8,32 @@ */ static int crcbit[8] = { - 0x9188,0x48c4,0x2462,0x1231,0x8108,0x4084,0x2042,0x1021 - }; - -static int bittab[8] = { 128,64,32,16,8,4,2,1 }; + 0x9188, 0x48c4, 0x2462, 0x1231, 0x8108, 0x4084, 0x2042, 0x1021 +}; + +static int bittab[8] = { 128, 64, 32, 16, 8, 4, 2, 1 }; static int crctab[256]; void init_crc(void) { - int i,j; - - for (i = 0; i < 256; i++) { - crctab[i] = 0; - for (j = 0; j < 8; j++) { - if ((bittab[j] & i) != 0) { - crctab[i] = crctab[i] ^ crcbit[j]; - } - } - } + int i, j; + + for (i = 0; i < 256; i++) { + crctab[i] = 0; + for (j = 0; j < 8; j++) { + if ((bittab[j] & i) != 0) { + crctab[i] = crctab[i] ^ crcbit[j]; + } + } + } } /* calculate checksum for autobin-protocol */ -unsigned int calc_crc(unsigned char* buf, int n, unsigned crc) +unsigned int calc_crc(unsigned char *buf, int n, unsigned crc) { - while (--n >= 0) - crc = (crctab[(crc >> 8)] ^ ((crc << 8) | *buf++)) & 0xffff; - return crc; + while (--n >= 0) + crc = + (crctab[(crc >> 8)] ^ ((crc << 8) | *buf++)) & 0xffff; + return crc; } diff --git a/call/dostime.c b/call/dostime.c index f162010..defbaf4 100644 --- a/call/dostime.c +++ b/call/dostime.c @@ -14,72 +14,79 @@ /* Linear day numbers of the respective 1sts in non-leap years. */ -static int day_n[] = { 0,31,59,90,120,151,181,212,243,273,304,334,0,0,0,0 }; +static int day_n[] = + { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 0, 0, 0, 0 }; /* JanFebMarApr May Jun Jul Aug Sep Oct Nov Dec */ /* Convert a MS-DOS time/date pair to a UNIX date (seconds since 1 1 70). */ -int date_dos2unix(unsigned short time,unsigned short date) +int date_dos2unix(unsigned short time, unsigned short date) { - int month,year,secs; + int month, year, secs; - month = ((date >> 5) & 15)-1; + month = ((date >> 5) & 15) - 1; year = date >> 9; - secs = (time & 31)*2+60*((time >> 5) & 63)+(time >> 11)*3600+86400* - ((date & 31)-1+day_n[month]+(year/4)+year*365-((year & 3) == 0 && - month < 2 ? 1 : 0)+3653); - /* days since 1.1.70 plus 80's leap day */ + secs = + (time & 31) * 2 + 60 * ((time >> 5) & 63) + + (time >> 11) * 3600 + 86400 * ((date & 31) - 1 + day_n[month] + + (year / 4) + year * 365 - + ((year & 3) == 0 + && month < 2 ? 1 : 0) + 3653); + /* days since 1.1.70 plus 80's leap day */ return secs; } /* Convert linear UNIX date to a MS-DOS time/date pair. */ -void date_unix2dos(int unix_date,unsigned short *time, - unsigned short *date) +void date_unix2dos(int unix_date, unsigned short *time, + unsigned short *date) { - int day,year,nl_day,month; - - *time = (unix_date % 60)/2+(((unix_date/60) % 60) << 5)+ - (((unix_date/3600) % 24) << 11); - day = unix_date/86400-3652; - year = day/365; - if ((year+3)/4+365*year > day) year--; - day -= (year+3)/4+365*year; + int day, year, nl_day, month; + + *time = (unix_date % 60) / 2 + (((unix_date / 60) % 60) << 5) + + (((unix_date / 3600) % 24) << 11); + day = unix_date / 86400 - 3652; + year = day / 365; + if ((year + 3) / 4 + 365 * year > day) + year--; + day -= (year + 3) / 4 + 365 * year; if (day == 59 && !(year & 3)) { nl_day = day; month = 2; - } - else { - nl_day = (year & 3) || day <= 59 ? day : day-1; + } else { + nl_day = (year & 3) || day <= 59 ? day : day - 1; for (month = 0; month < 12; month++) - if (day_n[month] > nl_day) break; + if (day_n[month] > nl_day) + break; } - *date = nl_day-day_n[month-1]+1+(month << 5)+(year << 9); + *date = nl_day - day_n[month - 1] + 1 + (month << 5) + (year << 9); } /* Convert yapp format 8 hex characters into Unix time */ -int yapp2unix(char * ytime) +int yapp2unix(char *ytime) { int i; - unsigned short time,date; - if(strlen(ytime)!=8) return 0; - for(i=0;i<8;i++) if(!isxdigit(ytime[i])) return 0; - time = strtoul(ytime+4,(char **)NULL,16); - ytime[4]=0; - date = strtoul(ytime,(char **)NULL,16); - return(date_dos2unix(time,date)); + unsigned short time, date; + if (strlen(ytime) != 8) + return 0; + for (i = 0; i < 8; i++) + if (!isxdigit(ytime[i])) + return 0; + time = strtoul(ytime + 4, (char **) NULL, 16); + ytime[4] = 0; + date = strtoul(ytime, (char **) NULL, 16); + return (date_dos2unix(time, date)); } /* Convert unix time to 8 character yapp hex format */ -void unix2yapp(int unix_date, char * buffer) +void unix2yapp(int unix_date, char *buffer) { - unsigned short time,date; - date_unix2dos(unix_date,&time,&date); - sprintf(buffer,"%04X%04X",date,time); + unsigned short time, date; + date_unix2dos(unix_date, &time, &date); + sprintf(buffer, "%04X%04X", date, time); } - diff --git a/call/menu.c b/call/menu.c index 61e17ff..9ad397c 100644 --- a/call/menu.c +++ b/call/menu.c @@ -11,43 +11,44 @@ #include <string.h> #include "menu.h" -typedef struct -{ +typedef struct { char *st_ptr; int xpos; char key; } topmenuitem; -WINDOW* winopen(wint *wtab, int nlines, int ncols, int begin_y, int begin_x, int border) +WINDOW *winopen(wint * wtab, int nlines, int ncols, int begin_y, + int begin_x, int border) { while (wtab->next != NULL) wtab = wtab->next; - wtab->next = (wint *)malloc(sizeof(wint)); - wtab = wtab->next; + wtab->next = (wint *) malloc(sizeof(wint)); + wtab = wtab->next; wtab->next = NULL; - wtab->ptr = newwin(nlines, ncols, begin_y, begin_x); + wtab->ptr = newwin(nlines, ncols, begin_y, begin_x); if (wtab->ptr == NULL) return NULL; - wtab->fline = begin_y; + wtab->fline = begin_y; wtab->lline = begin_y + nlines; if (border) - wborder(wtab->ptr, ACS_VLINE, ACS_VLINE, ACS_HLINE, ACS_HLINE, - ACS_ULCORNER, ACS_URCORNER, ACS_LLCORNER, ACS_LRCORNER); - + wborder(wtab->ptr, ACS_VLINE, ACS_VLINE, ACS_HLINE, + ACS_HLINE, ACS_ULCORNER, ACS_URCORNER, + ACS_LLCORNER, ACS_LRCORNER); + return wtab->ptr; } -void winclose(wint *wtab) +void winclose(wint * wtab) { - wint* awin; - wint* lwin; + wint *awin; + wint *lwin; int awin_lines; if (wtab->next == NULL) @@ -61,31 +62,39 @@ void winclose(wint *wtab) awin_lines = awin->lline - awin->fline; while (wtab->next != NULL) { - if (awin->lline >= wtab->fline && awin->fline <= wtab->lline) { + if (awin->lline >= wtab->fline + && awin->fline <= wtab->lline) { if (wtab->fline <= awin->fline) { if (wtab->lline < awin->lline) { - wtouchln(wtab->ptr, awin->fline - wtab->fline, - awin_lines - (awin->lline - wtab->lline), 1); + wtouchln(wtab->ptr, + awin->fline - wtab->fline, + awin_lines - + (awin->lline - + wtab->lline), 1); } else { - wtouchln(wtab->ptr, awin->fline - wtab->fline, - awin_lines, 1); + wtouchln(wtab->ptr, + awin->fline - wtab->fline, + awin_lines, 1); } } else { - wtouchln(wtab->ptr, 0, awin_lines - wtab->fline + awin->fline, 1); + wtouchln(wtab->ptr, 0, + awin_lines - wtab->fline + + awin->fline, 1); } wnoutrefresh(wtab->ptr); } wtab = wtab->next; - } + } doupdate(); lwin->next = 0; free(awin); -} +} -void menu_write_line(WINDOW *win, int ypos ,int menu_breite, int reverse, char st[]) +void menu_write_line(WINDOW * win, int ypos, int menu_breite, int reverse, + char st[]) { int cnt; int high = FALSE; @@ -94,7 +103,7 @@ void menu_write_line(WINDOW *win, int ypos ,int menu_breite, int reverse, char s wattron(win, A_REVERSE); wmove(win, ypos + 1, 1); - for (cnt = 0; st[cnt] !=0; cnt++) { + for (cnt = 0; st[cnt] != 0; cnt++) { if (st[cnt] == '~') { if (!reverse) { wattron(win, A_BOLD); @@ -116,7 +125,7 @@ void menu_write_line(WINDOW *win, int ypos ,int menu_breite, int reverse, char s wattroff(win, A_REVERSE); } -int p_dwn_menu(wint *wtab, menuitem *menustr, int starty, int startx) +int p_dwn_menu(wint * wtab, menuitem * menustr, int starty, int startx) { int str_max_length = 0; int cnt = 0, pos; @@ -130,48 +139,58 @@ int p_dwn_menu(wint *wtab, menuitem *menustr, int starty, int startx) str_max_length = strlen(menustr[lines].st_ptr); } - menuwin = winopen(wtab, lines + 2, str_max_length + 1, starty, startx, TRUE); - + menuwin = + winopen(wtab, lines + 2, str_max_length + 1, starty, startx, + TRUE); + wrefresh(menuwin); pos = 0; - menu_write_line(menuwin, 0, str_max_length, TRUE, menustr[0].st_ptr); + menu_write_line(menuwin, 0, str_max_length, TRUE, + menustr[0].st_ptr); for (ypos = 1; ypos < lines; ypos++) - menu_write_line(menuwin, ypos, str_max_length, FALSE, menustr[ypos].st_ptr); + menu_write_line(menuwin, ypos, str_max_length, FALSE, + menustr[ypos].st_ptr); wrefresh(menuwin); ypos = 0; do { - while ((c=getch()) == ERR); - oldypos=ypos; - switch(c) { - case KEY_DOWN : - if (++ypos >= lines) ypos=0; - break; - case KEY_UP : - if (ypos == 0) - ypos = lines - 1; - else - ypos--; - break; - default : - if ((char)c >= 'a' && (char)c <= 'z') - c -= 'a'-'A'; - - for (cnt = 0; menustr[cnt].key !=(char)c && cnt < lines; cnt++); - if (menustr[cnt].key == (char)c) - ypos = cnt; - break; + while ((c = getch()) == ERR); + oldypos = ypos; + switch (c) { + case KEY_DOWN: + if (++ypos >= lines) + ypos = 0; + break; + case KEY_UP: + if (ypos == 0) + ypos = lines - 1; + else + ypos--; + break; + default: + if ((char) c >= 'a' && (char) c <= 'z') + c -= 'a' - 'A'; + + for (cnt = 0; + menustr[cnt].key != (char) c && cnt < lines; + cnt++); + if (menustr[cnt].key == (char) c) + ypos = cnt; + break; } if (ypos != oldypos) { - menu_write_line(menuwin, ypos, str_max_length, TRUE, menustr[ypos].st_ptr); - menu_write_line(menuwin, oldypos, str_max_length, FALSE, menustr[oldypos].st_ptr); + menu_write_line(menuwin, ypos, str_max_length, + TRUE, menustr[ypos].st_ptr); + menu_write_line(menuwin, oldypos, str_max_length, + FALSE, menustr[oldypos].st_ptr); wrefresh(menuwin); } - } while (c != KEY_ENTER && c != '\r' && c != '\n' && c != KEY_RIGHT && c != KEY_LEFT && c != 0x1b); + } while (c != KEY_ENTER && c != '\r' && c != '\n' && c != KEY_RIGHT + && c != KEY_LEFT && c != 0x1b); delwin(menuwin); @@ -181,13 +200,13 @@ int p_dwn_menu(wint *wtab, menuitem *menustr, int starty, int startx) return 0; - if (c == KEY_RIGHT || c == KEY_LEFT) + if (c == KEY_RIGHT || c == KEY_LEFT) return c; else return ypos + 1; } -void menu_write_item(WINDOW *win, int xpos, int reverse, const char st[]) +void menu_write_item(WINDOW * win, int xpos, int reverse, const char st[]) { int cnt; int high = FALSE; @@ -217,25 +236,26 @@ void menu_write_item(WINDOW *win, int xpos, int reverse, const char st[]) } -int top_menu(wint* wtab,menuitem menustr[],int ystart) +int top_menu(wint * wtab, menuitem menustr[], int ystart) { int str_max_length = 0; - int str_length=0; + int str_length = 0; int cnt, pos; int xpos, oldxpos; - int ypos=0; - int items=0; + int ypos = 0; + int items = 0; int c; WINDOW *menuwin; int items_xpos[12]; - curs_set(0); /*cursor visibility off*/ + curs_set(0); /*cursor visibility off */ for (items = 0; *(menustr[items].st_ptr) != 0; items++) { if (items == 0) items_xpos[0] = 1; else - items_xpos[items] = items_xpos[items - 1] + str_length; + items_xpos[items] = + items_xpos[items - 1] + str_length; if (strlen(menustr[items].st_ptr) > str_max_length) str_max_length = strlen(menustr[items].st_ptr); @@ -244,14 +264,15 @@ int top_menu(wint* wtab,menuitem menustr[],int ystart) } menuwin = winopen(wtab, 3, 80, ystart, 0, TRUE); - + wrefresh(menuwin); pos = 0; menu_write_item(menuwin, 1, TRUE, menustr[0].st_ptr); for (xpos = 1; xpos < items; xpos++) - menu_write_item(menuwin, items_xpos[xpos], FALSE, menustr[xpos].st_ptr); + menu_write_item(menuwin, items_xpos[xpos], FALSE, + menustr[xpos].st_ptr); wrefresh(menuwin); xpos = 0; @@ -262,64 +283,88 @@ int top_menu(wint* wtab,menuitem menustr[],int ystart) oldxpos = xpos; switch (c) { - case KEY_RIGHT: - if (++xpos >= items) - xpos = 0; - break; - - case KEY_LEFT: - if (xpos == 0) - xpos = items - 1; - else - xpos--; - break; - - case KEY_DOWN: - case KEY_ENTER: - case '\r': - case '\n': - ypos = 0; - do { - switch (ypos) { - case KEY_RIGHT: - if (++xpos >= items) - xpos = 0; - menu_write_item(menuwin, items_xpos[xpos], TRUE, menustr[xpos].st_ptr); - menu_write_item(menuwin, items_xpos[oldxpos], FALSE, menustr[oldxpos].st_ptr); - wrefresh(menuwin); - oldxpos = xpos; - break; - - case KEY_LEFT: - if (xpos == 0) - xpos = items - 1; - else - xpos--; - menu_write_item(menuwin, items_xpos[xpos], TRUE, menustr[xpos].st_ptr); - menu_write_item(menuwin, items_xpos[oldxpos], FALSE, menustr[oldxpos].st_ptr); - wrefresh(menuwin); - oldxpos = xpos; - break; - - } - - ypos = p_dwn_menu(wtab, (menuitem*)menustr[xpos].arg, ystart + 2, items_xpos[xpos] + 1); - touchwin(menuwin); + case KEY_RIGHT: + if (++xpos >= items) + xpos = 0; + break; + + case KEY_LEFT: + if (xpos == 0) + xpos = items - 1; + else + xpos--; + break; + + case KEY_DOWN: + case KEY_ENTER: + case '\r': + case '\n': + ypos = 0; + do { + switch (ypos) { + case KEY_RIGHT: + if (++xpos >= items) + xpos = 0; + menu_write_item(menuwin, + items_xpos[xpos], + TRUE, + menustr[xpos]. + st_ptr); + menu_write_item(menuwin, + items_xpos + [oldxpos], FALSE, + menustr[oldxpos]. + st_ptr); + wrefresh(menuwin); + oldxpos = xpos; + break; + + case KEY_LEFT: + if (xpos == 0) + xpos = items - 1; + else + xpos--; + menu_write_item(menuwin, + items_xpos[xpos], + TRUE, + menustr[xpos]. + st_ptr); + menu_write_item(menuwin, + items_xpos + [oldxpos], FALSE, + menustr[oldxpos]. + st_ptr); wrefresh(menuwin); - } while (ypos == KEY_RIGHT || ypos == KEY_LEFT); - break; - - default: - if ((char)c >= 'a' && (char)c <= 'z') - c -= 'a' - 'A'; - for (cnt = 0; menustr[cnt].key != (char)c && cnt <= items; cnt++); - if (menustr[cnt].key == (char)c) - xpos = cnt; + oldxpos = xpos; + break; + + } + + ypos = + p_dwn_menu(wtab, + (menuitem *) menustr[xpos]. + arg, ystart + 2, + items_xpos[xpos] + 1); + touchwin(menuwin); + wrefresh(menuwin); + } while (ypos == KEY_RIGHT || ypos == KEY_LEFT); + break; + + default: + if ((char) c >= 'a' && (char) c <= 'z') + c -= 'a' - 'A'; + for (cnt = 0; + menustr[cnt].key != (char) c && cnt <= items; + cnt++); + if (menustr[cnt].key == (char) c) + xpos = cnt; } if (xpos != oldxpos) { - menu_write_item(menuwin, items_xpos[xpos], TRUE, menustr[xpos].st_ptr); - menu_write_item(menuwin, items_xpos[oldxpos], FALSE, menustr[oldxpos].st_ptr); + menu_write_item(menuwin, items_xpos[xpos], TRUE, + menustr[xpos].st_ptr); + menu_write_item(menuwin, items_xpos[oldxpos], + FALSE, menustr[oldxpos].st_ptr); wrefresh(menuwin); } diff --git a/call/yapp.c b/call/yapp.c index 3deb6d1..35818ed 100644 --- a/call/yapp.c +++ b/call/yapp.c @@ -37,7 +37,7 @@ #include "call.h" -#define TIMEOUT 300 /* 5 Minutes */ +#define TIMEOUT 300 /* 5 Minutes */ #define NUL 0x00 #define SOH 0x01 @@ -62,11 +62,11 @@ static int state; static int total = 0; -static int readlen = 0; -static int outlen = 0; +static int readlen = 0; +static int outlen = 0; static int outbufptr = 0; static unsigned char outbuffer[512]; -static char yappc; /* Nonzero if using YAPP C */ +static char yappc; /* Nonzero if using YAPP C */ static void Write_Status(char *s) { @@ -77,27 +77,27 @@ static void Write_Status(char *s) static void Send_RR(void) { char buffer[2]; - + buffer[0] = ACK; buffer[1] = 0x01; - + write(fd, buffer, 2); } static void Send_RF(void) { char buffer[2]; - + buffer[0] = ACK; buffer[1] = 0x02; - + write(fd, buffer, 2); } static void Send_RT(void) { char buffer[2]; - + buffer[0] = ACK; buffer[1] = ACK; @@ -107,35 +107,35 @@ static void Send_RT(void) static void Send_AF(void) { char buffer[2]; - + buffer[0] = ACK; buffer[1] = 0x03; - + write(fd, buffer, 2); } static void Send_AT(void) { char buffer[2]; - + buffer[0] = ACK; buffer[1] = 0x04; - + write(fd, buffer, 2); } static void Send_NR(char *reason) { char buffer[257]; - int length; - + int length; + if ((length = strlen(reason)) > 255) length = 255; - + buffer[0] = NAK; buffer[1] = length; memcpy(buffer + 2, reason, length); - + write(fd, buffer, length + 2); } @@ -151,36 +151,36 @@ static void Send_RS(int length) buffer[3] = 0; len = sprintf(buffer + 4, "%d", length) + 5; - - buffer[len] = 'C'; + + buffer[len] = 'C'; buffer[len + 1] = 0; - buffer[1] = len; - + buffer[1] = len; + write(fd, buffer, len + 2); -} +} static void Send_SI(void) { char buffer[2]; - + buffer[0] = ENQ; buffer[1] = 0x01; - + write(fd, buffer, 2); } static void Send_CN(char *reason) { char buffer[257]; - int length; + int length; if ((length = strlen(reason)) > 255) length = 255; - + buffer[0] = CAN; buffer[1] = length; memcpy(buffer + 2, reason, length); - + write(fd, buffer, length + 2); } @@ -188,24 +188,23 @@ static void Send_HD(char *filename, long length) { char buffer[257]; char size_buffer[10]; - int len_filename; - int len_size; - int len; + int len_filename; + int len_size; + int len; struct stat sb; - + sprintf(size_buffer, "%ld", length); - - len_filename = strlen(filename) + 1; /* Include the NUL */ - len_size = strlen(size_buffer) + 1; /* Include the NUL */ - + + len_filename = strlen(filename) + 1; /* Include the NUL */ + len_size = strlen(size_buffer) + 1; /* Include the NUL */ + len = len_filename + len_size; - if (!stat(filename, &sb)) - { + if (!stat(filename, &sb)) { unix2yapp(sb.st_mtime, buffer + len + 2); len += 9; } - + buffer[0] = SOH; buffer[1] = len; @@ -218,32 +217,33 @@ static void Send_HD(char *filename, long length) static void Send_ET(void) { char buffer[2]; - + buffer[0] = EOT; buffer[1] = 0x01; - + write(fd, buffer, 2); } static void Send_DT(int length) { char buffer[2]; - - if (length > 255) length = 0; - + + if (length > 255) + length = 0; + buffer[0] = STX; - buffer[1] = length; - + buffer[1] = length; + write(fd, buffer, 2); } static void Send_EF(void) { char buffer[2]; - + buffer[0] = ETX; buffer[1] = 0x01; - + write(fd, buffer, 2); } @@ -260,157 +260,147 @@ static unsigned char checksum(unsigned char *buf, int len) static int yapp_download_data(int *filefd, unsigned char *buffer) { - int length,file_time; + int length, file_time; char Message[50]; - if (buffer[0] == CAN || buffer[0] == NAK) - { + if (buffer[0] == CAN || buffer[0] == NAK) { Write_Status("RcdABORT"); - return(FALSE); + return (FALSE); } - switch (state) - { - case STATE_R: - if (buffer[0] == ENQ && buffer[1] == 0x01) - { - Send_RR(); - Write_Status("RcvHeader"); - state = STATE_RH; - break; - } + switch (state) { + case STATE_R: + if (buffer[0] == ENQ && buffer[1] == 0x01) { + Send_RR(); + Write_Status("RcvHeader"); + state = STATE_RH; + break; + } - Send_CN("Unknown code"); - Write_Status("SndABORT"); - return(FALSE); - - case STATE_RH: - if (buffer[0] == SOH) - { - /* Parse header: 3 fields == YAPP C */ - char *hptr, *hfield[3]; - if ((length = buffer[1]) == 0) length = 256; - hptr = (char *)buffer + 2; - while (length > 0) - { - int hlen; - hlen = strlen(hptr) + 1; - hfield[(int)yappc++] = hptr; - hptr += hlen; - length -= hlen; - } + Send_CN("Unknown code"); + Write_Status("SndABORT"); + return (FALSE); + + case STATE_RH: + if (buffer[0] == SOH) { + /* Parse header: 3 fields == YAPP C */ + char *hptr, *hfield[3]; + if ((length = buffer[1]) == 0) + length = 256; + hptr = (char *) buffer + 2; + while (length > 0) { + int hlen; + hlen = strlen(hptr) + 1; + hfield[(int) yappc++] = hptr; + hptr += hlen; + length -= hlen; + } - if (yappc < 3) - { - yappc = 0; - } - else - { - file_time = yapp2unix(hfield[2]); - yappc = 1; - } + if (yappc < 3) { + yappc = 0; + } else { + file_time = yapp2unix(hfield[2]); + yappc = 1; + } - if (*filefd == -1) - { - if ((*filefd = open(hfield[0], O_RDWR | O_APPEND | O_CREAT, 0666)) == -1) - { - printf("\n[Unable to open %s]\n", hfield[0]); - Send_NR("Invalid filename"); - return(FALSE); - } + if (*filefd == -1) { + if ((*filefd = + open(hfield[0], + O_RDWR | O_APPEND | O_CREAT, + 0666)) == -1) { + printf("\n[Unable to open %s]\n", + hfield[0]); + Send_NR("Invalid filename"); + return (FALSE); } + } - printf("Receiving %s %s %s", hfield[0], hfield[1], - yappc ? ctime((time_t *)&file_time) : " "); + printf("Receiving %s %s %s", hfield[0], hfield[1], + yappc ? ctime((time_t *) & file_time) : + " "); - if (yappc) - { - struct stat sb; + if (yappc) { + struct stat sb; - if (!fstat(*filefd, &sb) && sb.st_size) - Send_RS(sb.st_size); - else - Send_RT(); - } + if (!fstat(*filefd, &sb) && sb.st_size) + Send_RS(sb.st_size); else - { - Send_RF(); - } - - state = STATE_RD; - break; + Send_RT(); + } else { + Send_RF(); } - if (buffer[0] == ENQ && buffer[1] == 0x01) - { - break; - } + state = STATE_RD; + break; + } - if (buffer[0] == EOT && buffer[1] == 0x01) - { - Send_AT(); - Write_Status("RcvEOT"); - return(FALSE); - } + if (buffer[0] == ENQ && buffer[1] == 0x01) { + break; + } - Send_CN("Unknown code"); - Write_Status("SndABORT"); - return(FALSE); - - case STATE_RD: - if (buffer[0] == STX) - { - if ((length = buffer[1]) == 0) length = 256; - total += length; - sprintf(Message, "RcvData %5d bytes received", total); - Write_Status(Message); - - if (yappc) - { - int i; - unsigned char checksum = 0; - - for (i = 0; i < length; i++) - checksum += buffer[i + 2]; - - if (checksum != buffer[length + 2]) - { - Send_CN("Bad Checksum"); - Write_Status("SndABORT: Bad Checksum"); - return(FALSE); - } - } + if (buffer[0] == EOT && buffer[1] == 0x01) { + Send_AT(); + Write_Status("RcvEOT"); + return (FALSE); + } - write(*filefd, buffer + 2, length); - break; + Send_CN("Unknown code"); + Write_Status("SndABORT"); + return (FALSE); + + case STATE_RD: + if (buffer[0] == STX) { + if ((length = buffer[1]) == 0) + length = 256; + total += length; + sprintf(Message, "RcvData %5d bytes received", + total); + Write_Status(Message); + + if (yappc) { + int i; + unsigned char checksum = 0; + + for (i = 0; i < length; i++) + checksum += buffer[i + 2]; + + if (checksum != buffer[length + 2]) { + Send_CN("Bad Checksum"); + Write_Status + ("SndABORT: Bad Checksum"); + return (FALSE); + } } - if (buffer[0] == ETX && buffer[1] == 0x01) - { - Send_AF(); - Write_Status("RcvEof"); - state = STATE_RH; - close(*filefd); - *filefd = -1; - break; - } + write(*filefd, buffer + 2, length); + break; + } - Send_CN("Unknown code"); - Write_Status("SndABORT"); - return(FALSE); + if (buffer[0] == ETX && buffer[1] == 0x01) { + Send_AF(); + Write_Status("RcvEof"); + state = STATE_RH; + close(*filefd); + *filefd = -1; + break; + } + + Send_CN("Unknown code"); + Write_Status("SndABORT"); + return (FALSE); } - - return(TRUE); + + return (TRUE); } static void yapp_download(int filefd) { struct timeval timeval; fd_set sock_read; - int n; - int buflen = 0; - int length; - int used; + int n; + int buflen = 0; + int length; + int used; unsigned char buffer[1024]; Write_Status("RcvWait"); @@ -419,19 +409,17 @@ static void yapp_download(int filefd) total = 0; yappc = 0; - while (TRUE) - { + while (TRUE) { FD_ZERO(&sock_read); FD_SET(STDIN_FILENO, &sock_read); FD_SET(fd, &sock_read); - + timeval.tv_usec = 0; - timeval.tv_sec = TIMEOUT; - + timeval.tv_sec = TIMEOUT; + n = select(fd + 1, &sock_read, NULL, NULL, &timeval); - - if (n == -1) - { + + if (n == -1) { if (!interrupted && errno == EAGAIN) continue; if (!interrupted) @@ -440,57 +428,56 @@ static void yapp_download(int filefd) Write_Status("SndABORT"); return; } - - if (n == 0) /* Timeout */ - { + + if (n == 0) { /* Timeout */ Send_CN("Timeout"); Write_Status("SndABORT"); return; } - - if (FD_ISSET(STDIN_FILENO, &sock_read)) - { + + if (FD_ISSET(STDIN_FILENO, &sock_read)) { Send_CN("Cancelled by user"); Write_Status("SndABORT"); return; } - - if (FD_ISSET(fd, &sock_read)) - { - if ((length = read(fd, buffer + buflen, 511)) > 0) - { + + if (FD_ISSET(fd, &sock_read)) { + if ((length = read(fd, buffer + buflen, 511)) > 0) { buflen += length; - - do - { + + do { used = FALSE; - - switch (buffer[0]) - { + + switch (buffer[0]) { case ACK: case ENQ: case ETX: case EOT: - if (buflen >= 2) - { + if (buflen >= 2) { if (!yapp_download_data(&filefd, buffer)) return; buflen -= 2; - memcpy(buffer, buffer + 2, buflen); + memcpy(buffer, + buffer + 2, + buflen); used = TRUE; } break; default: - if ((length = buffer[1]) == 0) + if ((length = + buffer[1]) == 0) length = 256; if (buffer[0] == STX) - length += yappc; - if (buflen >= (length + 2)) - { + length += yappc; + if (buflen >= (length + 2)) { if (!yapp_download_data(&filefd, buffer)) return; - buflen -= length + 2; - memcpy(buffer, buffer + length + 2, buflen); + buflen -= + length + 2; + memcpy(buffer, + buffer + + length + 2, + buflen); used = TRUE; } break; @@ -501,124 +488,123 @@ static void yapp_download(int filefd) } } } - -static int yapp_upload_data(int filefd, char *filename, int filelength, unsigned char *buffer) + +static int yapp_upload_data(int filefd, char *filename, int filelength, + unsigned char *buffer) { char Message[80]; - - if (buffer[0] == CAN || buffer[0] == NAK) - { + + if (buffer[0] == CAN || buffer[0] == NAK) { Write_Status("RcvABORT"); - return(FALSE); + return (FALSE); } - switch (state) - { - case STATE_S: - if (buffer[0] == ACK && buffer[1] == 0x01) - { - Write_Status("SendHeader"); - Send_HD(filename, filelength); - state = STATE_SH; - break; - } - - if (buffer[0] == ACK && buffer[1] == 0x02) - { - sprintf(Message, "SendData %5d bytes transmitted", total); - Write_Status(Message); - outlen = read(filefd, outbuffer, readlen); - outbufptr = 0; + switch (state) { + case STATE_S: + if (buffer[0] == ACK && buffer[1] == 0x01) { + Write_Status("SendHeader"); + Send_HD(filename, filelength); + state = STATE_SH; + break; + } - if (outlen) Send_DT(outlen); + if (buffer[0] == ACK && buffer[1] == 0x02) { + sprintf(Message, "SendData %5d bytes transmitted", + total); + Write_Status(Message); + outlen = read(filefd, outbuffer, readlen); + outbufptr = 0; - if (yappc) - { - outbuffer[outlen] = checksum(outbuffer, outlen); - outlen++; - } + if (outlen) + Send_DT(outlen); - state = STATE_SD; - break; + if (yappc) { + outbuffer[outlen] = + checksum(outbuffer, outlen); + outlen++; } - Send_CN("Unknown code"); - Write_Status("SndABORT"); - return(FALSE); - - case STATE_SH: + state = STATE_SD; + break; + } + + Send_CN("Unknown code"); + Write_Status("SndABORT"); + return (FALSE); + + case STATE_SH: /* Could get three replies here: * ACK 02 : normal acknowledge. * ACK ACK: yappc acknowledge. * NAK ...: resume request. */ - if (buffer[0] == NAK && buffer[2] == 'R') - { - int len; - off_t rpos; - - len = buffer[1]; - if (buffer[len] == 'C') yappc=1; - rpos = atol((char *)buffer + 4); - lseek(filefd, rpos, SEEK_SET); - buffer[0] = ACK; - buffer[1] = yappc ? ACK : 0x02; - } + if (buffer[0] == NAK && buffer[2] == 'R') { + int len; + off_t rpos; + + len = buffer[1]; + if (buffer[len] == 'C') + yappc = 1; + rpos = atol((char *) buffer + 4); + lseek(filefd, rpos, SEEK_SET); + buffer[0] = ACK; + buffer[1] = yappc ? ACK : 0x02; + } - if (buffer[0] == ACK && - (buffer[1] == 0x02 || buffer[1] == ACK)) - { - if (buffer[1] == ACK) yappc = 1; - - sprintf(Message, "SendData %5d bytes transmitted", total); - Write_Status(Message); - outlen = read(filefd, outbuffer, readlen); - outbufptr = 0; - if (outlen) Send_DT(outlen); - state = STATE_SD; - - if (yappc) - { - outbuffer[outlen] = checksum(outbuffer, outlen); - outlen++; - } - break; + if (buffer[0] == ACK && + (buffer[1] == 0x02 || buffer[1] == ACK)) { + if (buffer[1] == ACK) + yappc = 1; + + sprintf(Message, "SendData %5d bytes transmitted", + total); + Write_Status(Message); + outlen = read(filefd, outbuffer, readlen); + outbufptr = 0; + if (outlen) + Send_DT(outlen); + state = STATE_SD; + + if (yappc) { + outbuffer[outlen] = + checksum(outbuffer, outlen); + outlen++; } + break; + } - Send_CN("Unknown code"); - Write_Status("SndABORT"); - return(FALSE); - - case STATE_SD: - Send_CN("Unknown code"); - Write_Status("SndABORT"); - return(FALSE); - - case STATE_SE: - if (buffer[0] == ACK && buffer[1] == 0x03) - { - Write_Status("SendEOT"); - Send_ET(); - state = STATE_ST; - break; - } + Send_CN("Unknown code"); + Write_Status("SndABORT"); + return (FALSE); - Send_CN("Unknown code"); - Write_Status("SndABORT"); - return(FALSE); - - case STATE_ST: - if (buffer[0] == ACK && buffer[1] == 0x04) - { - return(FALSE); - } + case STATE_SD: + Send_CN("Unknown code"); + Write_Status("SndABORT"); + return (FALSE); - Send_CN("Unknown code"); - Write_Status("SndABORT"); - return(FALSE); + case STATE_SE: + if (buffer[0] == ACK && buffer[1] == 0x03) { + Write_Status("SendEOT"); + Send_ET(); + state = STATE_ST; + break; + } + + Send_CN("Unknown code"); + Write_Status("SndABORT"); + return (FALSE); + + case STATE_ST: + if (buffer[0] == ACK && buffer[1] == 0x04) { + return (FALSE); + } + + Send_CN("Unknown code"); + Write_Status("SndABORT"); + return (FALSE); } - return(TRUE); + return (TRUE); } static void yapp_upload(int filefd, char *filename, long filelength) @@ -626,45 +612,42 @@ static void yapp_upload(int filefd, char *filename, long filelength) struct timeval timeval; fd_set sock_read; fd_set sock_write; - int n; + int n; unsigned char buffer[1024]; - int buflen = 0; - int length; - int used; - char Message[80]; + int buflen = 0; + int length; + int used; + char Message[80]; Write_Status("SendInit"); readlen = (paclen - 2 > 253) ? 253 : paclen - 2; - state = STATE_S; - total = 0; - yappc = 0; + state = STATE_S; + total = 0; + yappc = 0; Send_SI(); - while (TRUE) - { + while (TRUE) { FD_ZERO(&sock_read); FD_ZERO(&sock_write); FD_SET(STDIN_FILENO, &sock_read); FD_SET(fd, &sock_read); - if (state == STATE_SD) - { + if (state == STATE_SD) { FD_SET(fd, &sock_write); - - n = select(fd + 1, &sock_read, &sock_write, NULL, NULL); - } - else - { + + n = select(fd + 1, &sock_read, &sock_write, NULL, + NULL); + } else { timeval.tv_usec = 0; - timeval.tv_sec = TIMEOUT; + timeval.tv_sec = TIMEOUT; - n = select(fd + 1, &sock_read, NULL, NULL, &timeval); + n = select(fd + 1, &sock_read, NULL, NULL, + &timeval); } - - if (n == -1) - { + + if (n == -1) { if (!interrupted && errno == EAGAIN) continue; if (!interrupted) @@ -673,93 +656,92 @@ static void yapp_upload(int filefd, char *filename, long filelength) Send_CN("Internal error"); return; } - - if (n == 0) /* Timeout, not STATE_SD */ - { + + if (n == 0) { /* Timeout, not STATE_SD */ Write_Status("SndABORT"); Send_CN("Timeout"); return; } - - if (FD_ISSET(STDIN_FILENO, &sock_read)) - { + + if (FD_ISSET(STDIN_FILENO, &sock_read)) { Write_Status("SndABORT"); Send_CN("Cancelled by user"); return; } - if (FD_ISSET(fd, &sock_write)) /* Writable, only STATE_SD */ - { - if (outlen > 0) - { - if ((n = write(fd, outbuffer + outbufptr, outlen)) > 0) - { + if (FD_ISSET(fd, &sock_write)) { /* Writable, only STATE_SD */ + if (outlen > 0) { + if ((n = + write(fd, outbuffer + outbufptr, + outlen)) > 0) { outbufptr += n; - outlen -= n; - total += n; + outlen -= n; + total += n; } } - - if (outlen == 0) - { + + if (outlen == 0) { total -= yappc; - if ((outlen = read(filefd, outbuffer, readlen)) > 0) - { - sprintf(Message, "SendData %5d bytes transmitted", total); + if ((outlen = + read(filefd, outbuffer, + readlen)) > 0) { + sprintf(Message, + "SendData %5d bytes transmitted", + total); Write_Status(Message); outbufptr = 0; - Send_DT(outlen); + Send_DT(outlen); - if (yappc) - { - outbuffer[outlen] = checksum(outbuffer, outlen); + if (yappc) { + outbuffer[outlen] = + checksum(outbuffer, + outlen); outlen++; } - } - else - { + } else { Write_Status("SendEof"); state = STATE_SE; Send_EF(); } } } - - if (FD_ISSET(fd, &sock_read)) - { - if ((length = read(fd, buffer + buflen, 511)) > 0) - { + + if (FD_ISSET(fd, &sock_read)) { + if ((length = read(fd, buffer + buflen, 511)) > 0) { buflen += length; - - do - { + + do { used = FALSE; - - switch (buffer[0]) - { + + switch (buffer[0]) { case ACK: case ENQ: case ETX: case EOT: - if (buflen >= 2) - { + if (buflen >= 2) { if (!yapp_upload_data(filefd, filename, filelength, buffer)) return; buflen -= 2; - memcpy(buffer, buffer + 2, buflen); + memcpy(buffer, + buffer + 2, + buflen); used = TRUE; } break; default: - if ((length = buffer[1]) == 0) + if ((length = + buffer[1]) == 0) length = 256; - if (buflen >= (length + 2)) - { + if (buflen >= (length + 2)) { if (!yapp_upload_data(filefd, filename, filelength, buffer)) return; - buflen -= length + 2; - memcpy(buffer, buffer + length + 2, buflen); + buflen -= + length + 2; + memcpy(buffer, + buffer + + length + 2, + buflen); used = TRUE; } break; @@ -770,71 +752,75 @@ static void yapp_upload(int filefd, char *filename, long filelength) } } } - + void cmd_yapp(char *buf, int bytes) { - int filefd; + int filefd; long size = 0L; char *t; - if (bytes == 0) return; - - switch (buf[0]) - { - case 'U': - case 'u': - if ((t = strchr(buf, '\n')) != NULL) - *t = '\0'; - t = buf + 2; - while (*t != '\0' && isspace(*t)) - t++; - if (*t == '\0') - { - printf("\n[YAPP Upload requires a filename - eg ~yu hello.txt]\n"); - Send_NR("No filename"); - return; - } - if ((filefd = open(t, O_RDONLY)) == -1) - { - printf("\n[Unable to open upload file]\n"); - Send_NR("Invalid filename"); - return; - } - if (lseek(filefd, 0L, SEEK_END) != -1) - size = lseek(filefd, 0L, SEEK_CUR); - lseek(filefd, 0L, SEEK_SET); - if (size != -1) - printf("\n[Uploading %ld bytes from %s using YAPP]\n", size, t); - else - printf("\n[Uploading from %s using YAPP]\n", t); - yapp_upload(filefd, t, size); - close(filefd); - printf("[Finished YAPP Upload, %d bytes Transmitted]\n", total); - break; - - case 'D': - case 'd': - if ((t = strchr(buf, '\n')) != NULL) - *t = '\0'; - t = buf + 2; - while (*t != '\0' && isspace(*t)) - t++; - if (*t == '\0') filefd=-1; - else if ((filefd = open(t, O_RDWR | O_APPEND | O_CREAT, 0666)) == -1) - { - printf("\n[Unable to open %s]\n", buf + 2); - Send_NR("Invalid filename"); - return; - } - printf("\n[Downloading using YAPP]\n"); - yapp_download(filefd); - close(filefd); - printf("[Finished YAPP Download, %d bytes received]\n", total); - break; - - default: - printf("\nUnknown '~y' escape. Type ~h for a list.\n"); - break; + if (bytes == 0) + return; + + switch (buf[0]) { + case 'U': + case 'u': + if ((t = strchr(buf, '\n')) != NULL) + *t = '\0'; + t = buf + 2; + while (*t != '\0' && isspace(*t)) + t++; + if (*t == '\0') { + printf + ("\n[YAPP Upload requires a filename - eg ~yu hello.txt]\n"); + Send_NR("No filename"); + return; + } + if ((filefd = open(t, O_RDONLY)) == -1) { + printf("\n[Unable to open upload file]\n"); + Send_NR("Invalid filename"); + return; + } + if (lseek(filefd, 0L, SEEK_END) != -1) + size = lseek(filefd, 0L, SEEK_CUR); + lseek(filefd, 0L, SEEK_SET); + if (size != -1) + printf + ("\n[Uploading %ld bytes from %s using YAPP]\n", + size, t); + else + printf("\n[Uploading from %s using YAPP]\n", t); + yapp_upload(filefd, t, size); + close(filefd); + printf("[Finished YAPP Upload, %d bytes Transmitted]\n", + total); + break; + + case 'D': + case 'd': + if ((t = strchr(buf, '\n')) != NULL) + *t = '\0'; + t = buf + 2; + while (*t != '\0' && isspace(*t)) + t++; + if (*t == '\0') + filefd = -1; + else if ((filefd = + open(t, O_RDWR | O_APPEND | O_CREAT, + 0666)) == -1) { + printf("\n[Unable to open %s]\n", buf + 2); + Send_NR("Invalid filename"); + return; + } + printf("\n[Downloading using YAPP]\n"); + yapp_download(filefd); + close(filefd); + printf("[Finished YAPP Download, %d bytes received]\n", + total); + break; + + default: + printf("\nUnknown '~y' escape. Type ~h for a list.\n"); + break; } } - diff --git a/config.guess b/config.guess index 6cb567b..dff9e48 100755 --- a/config.guess +++ b/config.guess @@ -1,8 +1,10 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999 +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. -# + +timestamp='2001-09-04' + # 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 @@ -23,51 +25,153 @@ # the same distribution terms that you use for the rest of that program. # Written by Per Bothner <bothner@cygnus.com>. -# The master version of this file is at the FSF in /home/gd/gnu/lib. -# Please send patches to the Autoconf mailing list <autoconf@gnu.org>. +# Please send patches to <config-patches@gnu.org>. # # 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 system type (host/target name). -# -# Only a few systems have been added to this list; please add others -# (but try to keep the structure clean). -# +# don't specify an explicit build system type. -# Use $HOST_CC if defined. $CC may point to a cross-compiler -if test x"$CC_FOR_BUILD" = x; then - if test x"$HOST_CC" != x; then - CC_FOR_BUILD="$HOST_CC" - else - if test x"$CC" != x; then - CC_FOR_BUILD="$CC" - else - CC_FOR_BUILD=cc - fi - fi +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 +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 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # 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 +dummy=dummy-$$ +trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int dummy(){}" > $dummy.c ; + for c in cc gcc c89 ; do + ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ; + if test $? = 0 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + rm -f $dummy.c $dummy.o $dummy.rel ; + 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' + # This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 8/24/94.) +# (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_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -dummy=dummy-$$ -trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15 - # 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. + # Determine the machine/vendor (is the vendor relevant). + case "${UNAME_MACHINE}" in + amiga) machine=m68k-unknown ;; + arm32) machine=arm-unknown ;; + atari*) machine=m68k-atari ;; + sun3*) machine=m68k-sun ;; + mac68k) machine=m68k-apple ;; + macppc) machine=powerpc-apple ;; + hp3[0-9][05]) machine=m68k-hp ;; + ibmrt|romp-ibm) machine=romp-ibm ;; + *) machine=${UNAME_MACHINE}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE}" in + i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k) + 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 + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + # 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 0 ;; alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` @@ -77,41 +181,55 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. cat <<EOF >$dummy.s + .data +\$Lformat: + .byte 37,100,45,37,120,10,0 # "%d-%x\n" + + .text .globl main + .align 4 .ent main main: - .frame \$30,0,\$26,0 - .prologue 0 - .long 0x47e03d80 # implver $0 - lda \$2,259 - .long 0x47e20c21 # amask $2,$1 - srl \$1,8,\$2 - sll \$2,2,\$2 - sll \$0,3,\$0 - addl \$1,\$0,\$0 - addl \$2,\$0,\$0 - ret \$31,(\$26),1 + .frame \$30,16,\$26,0 + ldgp \$29,0(\$27) + .prologue 1 + .long 0x47e03d80 # implver \$0 + lda \$2,-1 + .long 0x47e20c21 # amask \$2,\$1 + lda \$16,\$Lformat + mov \$0,\$17 + not \$1,\$18 + jsr \$26,printf + ldgp \$29,0(\$26) + mov 0,\$16 + jsr \$26,exit .end main EOF + eval $set_cc_for_build $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then - ./$dummy - case "$?" in - 7) + case `./$dummy` in + 0-0) UNAME_MACHINE="alpha" ;; - 15) + 1-0) UNAME_MACHINE="alphaev5" ;; - 14) + 1-1) UNAME_MACHINE="alphaev56" ;; - 10) + 1-101) UNAME_MACHINE="alphapca56" ;; - 16) + 2-303) UNAME_MACHINE="alphaev6" ;; + 2-307) + UNAME_MACHINE="alphaev67" + ;; + 2-1307) + UNAME_MACHINE="alphaev68" + ;; esac fi rm -f $dummy.s $dummy @@ -127,11 +245,8 @@ EOF echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) - echo m68k-cbm-sysv4 + echo m68k-unknown-sysv4 exit 0;; - amiga:NetBSD:*:*) - echo m68k-cbm-netbsd${UNAME_RELEASE} - exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; @@ -156,13 +271,13 @@ EOF wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; - arm32:NetBSD:*:*) - echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - exit 0 ;; - SR2?01:HI-UX/MPP:*:*) + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) @@ -218,15 +333,15 @@ EOF aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; - atari*:NetBSD:*:*) - echo m68k-atari-netbsd${UNAME_RELEASE} + sparc*:NetBSD:*) + echo `uname -p`-unknown-netbsd${UNAME_RELEASE} exit 0 ;; atari*:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; # 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 + # "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 @@ -250,15 +365,9 @@ EOF *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; - sun3*:NetBSD:*:*) - echo m68k-sun-netbsd${UNAME_RELEASE} - exit 0 ;; sun3*:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; - mac68k:NetBSD:*:*) - echo m68k-apple-netbsd${UNAME_RELEASE} - exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; @@ -271,9 +380,6 @@ EOF powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; - macppc:NetBSD:*:*) - echo powerpc-apple-netbsd${UNAME_RELEASE} - exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; @@ -287,8 +393,10 @@ EOF echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; 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[]; { @@ -309,10 +417,13 @@ EOF EOF $CC_FOR_BUILD $dummy.c -o $dummy \ && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ - && rm $dummy.c $dummy && exit 0 + && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; @@ -328,15 +439,18 @@ EOF AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ - -o ${TARGET_BINARY_INTERFACE}x = x ] ; then + 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 + else echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} fi - else echo i586-dg-dgux${UNAME_RELEASE} - fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 @@ -357,11 +471,20 @@ EOF ????????: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 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i?86:AIX:*:*) + i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; + 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 0 ;; *: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> @@ -373,7 +496,7 @@ EOF exit(0); } EOF - $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 + $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then @@ -382,9 +505,9 @@ EOF echo rs6000-ibm-aix3.2 fi exit 0 ;; - *:AIX:*:4) + *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` - if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc @@ -392,7 +515,7 @@ EOF if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else - IBM_REV=4.${UNAME_RELEASE} + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; @@ -402,7 +525,7 @@ EOF ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) @@ -418,11 +541,32 @@ EOF echo m68k-hp-bsd4.4 exit 0 ;; 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]) + case "${HPUX_REV}" in + 11.[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" ;; + esac ;; + esac + fi ;; + esac + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE #include <stdlib.h> #include <unistd.h> @@ -453,13 +597,19 @@ EOF exit (0); } EOF - ($CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` - rm -f $dummy.c $dummy + (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` + if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi + rm -f $dummy.c $dummy + fi ;; esac - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; 3050*:HI-UX:*:*) + eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include <unistd.h> int @@ -485,7 +635,7 @@ EOF exit (0); } EOF - $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 + $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo unknown-hitachi-hiuxwe2 exit 0 ;; @@ -495,7 +645,7 @@ EOF 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; - *9??*:MPE/iX:*:*) + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) @@ -504,7 +654,7 @@ EOF hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; - i?86:OSF1:*:*) + i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else @@ -539,37 +689,39 @@ EOF echo xmp-cray-unicos exit 0 ;; CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3D:*:*:*) + echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) - echo t3e-cray-unicosmk${UNAME_RELEASE} + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY-2:*:*:*) echo cray2-cray-unicos exit 0 ;; - F300:UNIX_System_V:*:*) + 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 "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; - F301:UNIX_System_V:*:*) - echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` - exit 0 ;; - hp3[0-9][05]:NetBSD:*:*) - echo m68k-hp-netbsd${UNAME_RELEASE} - exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; - i?86:BSD/386:*:* | i?86:BSD/OS:*:*) + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) @@ -579,17 +731,8 @@ EOF echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) - if test -x /usr/bin/objformat; then - if test "elf" = "`/usr/bin/objformat`"; then - echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'` - exit 0 - fi - fi echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; - *:NetBSD:*:*) - echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` exit 0 ;; @@ -599,6 +742,9 @@ EOF i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; 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 @@ -617,149 +763,99 @@ EOF *:GNU:*:*) echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; - *:Linux:*:*) - # uname on the ARM produces all sorts of strangeness, and we need to - # filter it out. - case "$UNAME_MACHINE" in - armv*) UNAME_MACHINE=$UNAME_MACHINE ;; - arm* | sa110*) UNAME_MACHINE="arm" ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit 0 ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux + exit 0 ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + mips:Linux:*:*) + case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in + big) echo mips-unknown-linux-gnu && exit 0 ;; + little) echo mipsel-unknown-linux-gnu && exit 0 ;; esac - + ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit 0 ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit 0 ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit 0 ;; + 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-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit 0 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit 0 ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit 0 ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit 0 ;; + 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. - ld_help_string=`cd /; ld --help 2>&1` - ld_supported_emulations=`echo $ld_help_string \ - | sed -ne '/supported emulations:/!d + ld_supported_targets=`cd /; ld --help 2>&1 \ + | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g - s/.*supported emulations: *// + s/.*supported targets: *// s/ .*// p'` - case "$ld_supported_emulations" in - i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;; - i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;; - sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; - armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; - m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; - elf32ppc) - # Determine Lib Version - cat >$dummy.c <<EOF -#include <features.h> -#if defined(__GLIBC__) -extern char __libc_version[]; -extern char __libc_release[]; -#endif -main(argc, argv) - int argc; - char *argv[]; -{ -#if defined(__GLIBC__) - printf("%s %s\n", __libc_version, __libc_release); -#else - printf("unkown\n"); -#endif - return 0; -} -EOF - LIBC="" - $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null - if test "$?" = 0 ; then - ./$dummy | grep 1\.99 > /dev/null - if test "$?" = 0 ; then - LIBC="libc1" - fi - fi - rm -f $dummy.c $dummy - echo powerpc-unknown-linux-gnu${LIBC} ; exit 0 ;; + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit 0 ;; esac - - if test "${UNAME_MACHINE}" = "alpha" ; then - sed 's/^ //' <<EOF >$dummy.s - .globl main - .ent main - main: - .frame \$30,0,\$26,0 - .prologue 0 - .long 0x47e03d80 # implver $0 - lda \$2,259 - .long 0x47e20c21 # amask $2,$1 - srl \$1,8,\$2 - sll \$2,2,\$2 - sll \$0,3,\$0 - addl \$1,\$0,\$0 - addl \$2,\$0,\$0 - ret \$31,(\$26),1 - .end main -EOF - LIBC="" - $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null - if test "$?" = 0 ; then - ./$dummy - case "$?" in - 7) - UNAME_MACHINE="alpha" - ;; - 15) - UNAME_MACHINE="alphaev5" - ;; - 14) - UNAME_MACHINE="alphaev56" - ;; - 10) - UNAME_MACHINE="alphapca56" - ;; - 16) - UNAME_MACHINE="alphaev6" - ;; - esac - - objdump --private-headers $dummy | \ - grep ld.so.1 > /dev/null - if test "$?" = 0 ; then - LIBC="libc1" - fi - fi - rm -f $dummy.s $dummy - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 - elif test "${UNAME_MACHINE}" = "mips" ; then - cat >$dummy.c <<EOF -#ifdef __cplusplus - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif -#ifdef __MIPSEB__ - printf ("%s-unknown-linux-gnu\n", argv[1]); -#endif -#ifdef __MIPSEL__ - printf ("%sel-unknown-linux-gnu\n", argv[1]); -#endif - return 0; -} -EOF - $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - else - # Either a pre-BFD a.out linker (linux-gnuoldld) - # or one that does not give us useful --help. - # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. - # If ld does not provide *any* "supported emulations:" - # that means it is gnuoldld. - echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:" - test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 - - case "${UNAME_MACHINE}" in - i?86) - VENDOR=pc; - ;; - *) - VENDOR=unknown; - ;; - esac - # Determine whether the default compiler is a.out or elf - cat >$dummy.c <<EOF + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + cat >$dummy.c <<EOF #include <features.h> #ifdef __cplusplus +#include <stdio.h> /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { @@ -767,28 +863,30 @@ EOF #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 - printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); + printf ("%s-pc-linux-gnu\n", argv[1]); # else - printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); + printf ("%s-pc-linux-gnulibc1\n", argv[1]); # endif # else - printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); + printf ("%s-pc-linux-gnulibc1\n", argv[1]); # endif #else - printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); + printf ("%s-pc-linux-gnuaout\n", argv[1]); #endif return 0; } EOF - $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - fi ;; -# 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. - i?86:DYNIX/ptx:4*:*) + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + ;; + 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 0 ;; - i?86:UNIX_SV:4.2MP:2.*) + 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, @@ -796,22 +894,23 @@ EOF # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; - i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) + 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_RELEASE} + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; - i?86:*:5:7*) - UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` - (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) && UNAME_MACHINE=i586 - (/bin/uname -X|egrep '^Machine.*Pent.*II' >/dev/null) && UNAME_MACHINE=i686 - (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) && UNAME_MACHINE=i585 - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}${UNAME_VERSION}-sysv${UNAME_RELEASE} + i*86:*:5:[78]*) + 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 0 ;; - i?86:*:3.2:*) + 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 @@ -829,7 +928,11 @@ EOF echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit 0 ;; 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 @@ -853,7 +956,7 @@ EOF exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; - 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) + 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` @@ -864,21 +967,24 @@ EOF 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; - m68*:LynxOS:2.*:*) + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; - i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*) + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; - rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) + rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; @@ -896,8 +1002,8 @@ EOF echo ns32k-sni-sysv fi exit 0 ;; - PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says <Richard.M.Bartel@ccMail.Census.GOV> + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says <Richard.M.Bartel@ccMail.Census.GOV> echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) @@ -909,10 +1015,14 @@ EOF # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; - news*:NEWS-OS:*:6*) + news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) @@ -943,11 +1053,76 @@ EOF *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; + *:Darwin:*:*) + echo `uname -p`-apple-darwin${UNAME_RELEASE} + exit 0 ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + if test "${UNAME_MACHINE}" = "x86pc"; then + UNAME_MACHINE=pc + fi + echo `uname -p`-${UNAME_MACHINE}-nto-qnx + exit 0 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit 0 ;; + NSR-[KW]:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit 0 ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit 0 ;; + *: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 0 ;; + 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 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit 0 ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit 0 ;; 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> @@ -1034,11 +1209,24 @@ main () #endif #if defined (vax) -#if !defined (ultrix) - printf ("vax-dec-bsd\n"); exit (0); -#else - printf ("vax-dec-ultrix\n"); exit (0); -#endif +# 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) @@ -1049,7 +1237,7 @@ main () } EOF -$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0 +$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy # Apollos put the system type in the environment. @@ -1082,6 +1270,48 @@ then esac fi -#echo '(Unable to guess system type)' 1>&2 +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 + + ftp://ftp.gnu.org/pub/gnu/config/ + +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 --git a/config.h.in b/config.h.in index fdd6f8c..63807b9 100644 --- a/config.h.in +++ b/config.h.in @@ -1,4 +1,4 @@ -/* config.h.in. Generated automatically from configure.in by autoheader. */ +/* config.h.in. Generated automatically from configure.in by autoheader 2.13. */ /* Define to empty if the keyword does not work. */ #undef const @@ -78,6 +78,9 @@ /* Define if you have the <dirent.h> header file. */ #undef HAVE_DIRENT_H +/* Define if you have the <dlfcn.h> header file. */ +#undef HAVE_DLFCN_H + /* Define if you have the <fcntl.h> header file. */ #undef HAVE_FCNTL_H @@ -1,6 +1,10 @@ #! /bin/sh -# Configuration validation subroutine script, version 1.1. -# Copyright (C) 1991, 92-97, 1998, 1999 Free Software Foundation, Inc. +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. + +timestamp='2001-09-07' + # 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. @@ -25,6 +29,8 @@ # 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>. +# # 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. @@ -45,30 +51,73 @@ # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. -if [ x$1 = x ] -then - echo Configuration name missing. 1>&2 - echo "Usage: $0 CPU-MFR-OPSYS" 1>&2 - echo "or $0 ALIAS" 1>&2 - echo where ALIAS is a recognized configuration type. 1>&2 - exit 1 -fi +me=`echo "$0" | sed -e 's,.*/,,'` -# First pass through any local machine types. -case $1 in - *local*) - echo $1 - exit 0 - ;; - *) - ;; +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 +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 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # 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 0;; + + * ) + 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 - linux-gnu*) + nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; @@ -94,7 +143,7 @@ case $os in -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple) + -apple | -axis) os= basic_machine=$1 ;; @@ -105,9 +154,17 @@ case $os in -scout) ;; -wrs) - os=vxworks + os=-vxworks basic_machine=$1 ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; -hiux*) os=-hiuxwe2 ;; @@ -156,33 +213,60 @@ case $os in -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. - tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ - | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \ - | 580 | i960 | h8300 \ - | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ - | alpha | alphaev[4-7] | alphaev56 | alphapca5[67] \ - | we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \ - | 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \ - | mips64orion | mips64orionel | mipstx39 | mipstx39el \ - | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ - | mips64vr5000 | miprs64vr5000el \ - | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \ - | thumb | d10v) + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | c4x | clipper \ + | d10v | d30v | dsp16xx \ + | fr30 \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | m32r | m68000 | m68k | m88k | mcore \ + | mips16 | mips64 | mips64el | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el | mips64vr4300 \ + | mips64vr4300el | mips64vr5000 | mips64vr5000el \ + | mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \ + | mipsisa32 \ + | mn10200 | mn10300 \ + | ns16k | ns32k \ + | openrisc \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | s390 | s390x \ + | sh | sh[34] | sh[34]eb | shbe | shle \ + | sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \ + | stormy16 | strongarm \ + | tahoe | thumb | tic80 | tron \ + | v850 \ + | we32k \ + | x86 | xscale \ + | z8k) basic_machine=$basic_machine-unknown ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65) + 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) ;; # 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[34567]86) + i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. @@ -191,23 +275,43 @@ case $basic_machine in exit 1 ;; # Recognize the basic CPU types with company name. - vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \ - | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ - | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ - | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ - | xmp-* | ymp-* \ - | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \ - | alpha-* | alphaev[4-7]-* | alphaev56-* | alphapca5[67]-* \ - | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ - | clipper-* | orion-* \ - | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ - | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \ - | mips64el-* | mips64orion-* | mips64orionel-* \ - | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ - | mipstx39-* | mipstx39el-* \ - | f301-* | armv*-* | t3e-* \ - | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ - | thumb-* | v850-* | d30v-* | tic30-* | c30-* ) + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alphapca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armv*-* \ + | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c54x-* \ + | clipper-* | cray2-* | cydra-* \ + | d10v-* | d30v-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | m32r-* \ + | m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | mcore-* \ + | mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \ + | mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \ + | mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | s390-* | s390x-* \ + | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \ + | sparc-* | sparc64-* | sparc86x-* | sparclite-* \ + | sparcv9-* | sparcv9b-* | stormy16-* | strongarm-* | sv1-* \ + | t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \ + | v850-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xmp-* | xps100-* | xscale-* \ + | ymp-* \ + | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. @@ -244,14 +348,14 @@ case $basic_machine in os=-sysv ;; amiga | amiga-*) - basic_machine=m68k-cbm + basic_machine=m68k-unknown ;; amigaos | amigados) - basic_machine=m68k-cbm + basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) - basic_machine=m68k-cbm + basic_machine=m68k-unknown os=-sysv4 ;; apollo68) @@ -298,13 +402,16 @@ case $basic_machine in basic_machine=cray2-cray os=-unicos ;; - [ctj]90-cray) - basic_machine=c90-cray + [cjt]90) + basic_machine=${basic_machine}-cray os=-unicos ;; crds | unos) basic_machine=m68k-crds ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; da30 | da30-*) basic_machine=m68k-da30 ;; @@ -352,6 +459,10 @@ case $basic_machine in basic_machine=tron-gmicro os=-sysv ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 @@ -425,22 +536,21 @@ case $basic_machine in ;; i370-ibm* | ibm*) basic_machine=i370-ibm - os=-mvs ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? - i[34567]86v32) + i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; - i[34567]86v4*) + i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; - i[34567]86v) + i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; - i[34567]86sol2) + i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; @@ -452,14 +562,6 @@ case $basic_machine in basic_machine=i386-unknown os=-vsta ;; - i386-go32 | go32) - basic_machine=i386-unknown - os=-go32 - ;; - i386-mingw32 | mingw32) - basic_machine=i386-unknown - os=-mingw32 - ;; iris | iris4d) basic_machine=mips-sgi case $os in @@ -485,10 +587,14 @@ case $basic_machine in basic_machine=ns32k-utek os=-sysv ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; miniframe) basic_machine=m68000-convergent ;; - *mint | *MiNT) + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; @@ -506,14 +612,22 @@ case $basic_machine in mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; + mmix*) + basic_machine=mmix-knuth + os=-mmixware + ;; monitor) basic_machine=m68k-rom68k os=-coff ;; msdos) - basic_machine=i386-unknown + basic_machine=i386-pc os=-msdos ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; ncr3000) basic_machine=i486-ncr os=-sysv4 @@ -523,7 +637,7 @@ case $basic_machine in os=-netbsd ;; netwinder) - basic_machine=armv4l-corel + basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) @@ -571,9 +685,16 @@ case $basic_machine in 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 @@ -603,28 +724,28 @@ case $basic_machine in pc532 | pc532-*) basic_machine=ns32k-pc532 ;; - pentium | p5 | k5 | k6 | nexen) + pentium | p5 | k5 | k6 | nexgen) basic_machine=i586-pc ;; - pentiumpro | p6 | 6x86) + pentiumpro | p6 | 6x86 | athlon) basic_machine=i686-pc ;; pentiumii | pentium2) - basic_machine=i786-pc + basic_machine=i686-pc ;; - pentium-* | p5-* | k5-* | k6-* | nexen-*) + pentium-* | p5-* | k5-* | k6-* | nexgen-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - pentiumpro-* | p6-* | 6x86-*) + pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; - power) basic_machine=rs6000-ibm + power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; @@ -636,9 +757,23 @@ case $basic_machine in 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 + ;; rom68k) basic_machine=m68k-rom68k os=-coff @@ -718,6 +853,10 @@ case $basic_machine in sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; symmetry) basic_machine=i386-sequent os=-dynix @@ -726,6 +865,10 @@ case $basic_machine in basic_machine=t3e-cray os=-unicos ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; tx39) basic_machine=mipstx39-unknown ;; @@ -778,6 +921,10 @@ case $basic_machine in basic_machine=hppa1.1-winbond os=-proelf ;; + windows32) + basic_machine=i386-pc + os=-windows32-msvcrt + ;; xmp) basic_machine=xmp-cray os=-unicos @@ -821,13 +968,20 @@ case $basic_machine in 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 ;; - sparc | sparcv9) + sh3 | sh4 | sh3eb | sh4eb) + basic_machine=sh-unknown + ;; + sparc | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) @@ -849,6 +1003,9 @@ case $basic_machine in basic_machine=c4x-none os=-coff ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 @@ -905,14 +1062,30 @@ case $os in | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -rhapsody* | -openstep* | -oskit*) + | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos*) # Remember, each alternative MUST END IN *, to match a version number. ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto*) + os=-nto-qnx + ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ - | -macos* | -mpw* | -magic* | -mon960* | -lnews*) + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` @@ -926,6 +1099,12 @@ case $os in -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; + -opened*) + os=-openedition + ;; + -wince*) + os=-wince + ;; -osfrose*) os=-osfrose ;; @@ -950,6 +1129,9 @@ case $os in -ns2 ) os=-nextstep2 ;; + -nsk*) + os=-nsk + ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` @@ -984,7 +1166,7 @@ case $os in -xenix) os=-xenix ;; - -*mint | -*MiNT) + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -none) @@ -1012,12 +1194,15 @@ case $basic_machine in *-acorn) os=-riscix1.2 ;; - arm*-corel) + arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; + pdp10-*) + os=-tops20 + ;; pdp11-*) os=-none ;; @@ -1126,7 +1311,7 @@ case $basic_machine in *-masscomp) os=-rtu ;; - f301-fujitsu) + f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) @@ -1186,7 +1371,7 @@ case $basic_machine in -genix*) vendor=ns ;; - -mvs*) + -mvs* | -opened*) vendor=ibm ;; -ptx*) @@ -1204,12 +1389,23 @@ case $basic_machine in -mpw* | -macos*) vendor=apple ;; - -*mint | -*MiNT) + -*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 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: @@ -19,8 +19,168 @@ ac_help="$ac_help --enable-fast-install[=PKGS] optimize for fast installation [default=yes]" ac_help="$ac_help --with-gnu-ld assume the C compiler uses GNU ld [default=no]" + +# Find the correct PATH separator. Usually this is `:', but +# DJGPP uses `;' like DOS. +if test "X${PATH_SEPARATOR+set}" != Xset; then + UNAME=${UNAME-`uname 2>/dev/null`} + case X$UNAME in + *-DOS) lt_cv_sys_path_separator=';' ;; + *) lt_cv_sys_path_separator=':' ;; + esac +fi + + +# 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. +if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +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. + + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for dir in $PATH /usr/ucb; do + 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="$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_help="$ac_help --disable-libtool-lock avoid locking (might break parallel builds)" +ac_help="$ac_help + --with-pic try to use only PIC/non-PIC objects [default=use both]" # Initialize some variables set by options. # The variables have the same names as the options, with @@ -565,7 +725,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:569: checking for a BSD compatible install" >&5 +echo "configure:729: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -618,7 +778,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 -echo "configure:622: checking whether build environment is sane" >&5 +echo "configure:782: checking whether build environment is sane" >&5 # Just in case sleep 1 echo timestamp > conftestfile @@ -675,7 +835,7 @@ test "$program_suffix" != NONE && test "$program_transform_name" = "" && program_transform_name="s,x,x," echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 -echo "configure:679: checking whether ${MAKE-make} sets \${MAKE}" >&5 +echo "configure:839: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -721,7 +881,7 @@ EOF missing_dir=`cd $ac_aux_dir && pwd` echo $ac_n "checking for working aclocal""... $ac_c" 1>&6 -echo "configure:725: checking for working aclocal" >&5 +echo "configure:885: checking for working aclocal" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. @@ -734,7 +894,7 @@ else fi echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 -echo "configure:738: checking for working autoconf" >&5 +echo "configure:898: checking for working autoconf" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. @@ -747,7 +907,7 @@ else fi echo $ac_n "checking for working automake""... $ac_c" 1>&6 -echo "configure:751: checking for working automake" >&5 +echo "configure:911: checking for working automake" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. @@ -760,7 +920,7 @@ else fi echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 -echo "configure:764: checking for working autoheader" >&5 +echo "configure:924: checking for working autoheader" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. @@ -773,7 +933,7 @@ else fi echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 -echo "configure:777: checking for working makeinfo" >&5 +echo "configure:937: checking for working makeinfo" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. @@ -796,7 +956,7 @@ 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:800: checking for $ac_word" >&5 +echo "configure:960: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -828,7 +988,7 @@ done # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:832: checking for $ac_word" >&5 +echo "configure:992: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -858,7 +1018,7 @@ 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:862: checking for $ac_word" >&5 +echo "configure:1022: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -909,7 +1069,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:913: checking for $ac_word" >&5 +echo "configure:1073: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -941,7 +1101,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:945: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:1105: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -952,12 +1112,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 956 "configure" +#line 1116 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1121: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -983,12 +1143,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:987: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:1147: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:992: checking whether we are using GNU C" >&5 +echo "configure:1152: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -997,7 +1157,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1001: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1161: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1016,7 +1176,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1020: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:1180: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1059,7 +1219,7 @@ fi # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1063: checking for a BSD compatible install" >&5 +echo "configure:1223: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1112,7 +1272,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 -echo "configure:1116: checking whether ln -s works" >&5 +echo "configure:1276: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1133,7 +1293,7 @@ else fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1137: checking how to run the C preprocessor" >&5 +echo "configure:1297: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1148,13 +1308,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext <<EOF -#line 1152 "configure" +#line 1312 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1158: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1318: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1165,13 +1325,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext <<EOF -#line 1169 "configure" +#line 1329 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1175: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1335: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1182,13 +1342,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext <<EOF -#line 1186 "configure" +#line 1346 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1192: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1352: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1214,13 +1374,13 @@ echo "$ac_t""$CPP" 1>&6 if test $ac_cv_prog_gcc = yes; then echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6 -echo "configure:1218: checking whether ${CC-cc} needs -traditional" >&5 +echo "configure:1378: checking whether ${CC-cc} needs -traditional" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_pattern="Autoconf.*'x'" cat > conftest.$ac_ext <<EOF -#line 1224 "configure" +#line 1384 "configure" #include "confdefs.h" #include <sgtty.h> Autoconf TIOCGETP @@ -1238,7 +1398,7 @@ rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat > conftest.$ac_ext <<EOF -#line 1242 "configure" +#line 1402 "configure" #include "confdefs.h" #include <termio.h> Autoconf TCGETA @@ -1259,11 +1419,73 @@ echo "$ac_t""$ac_cv_prog_gcc_traditional" 1>&6 fi fi +echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6 +echo "configure:1424: checking for Cygwin environment" >&5 +if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 1429 "configure" +#include "confdefs.h" + +int main() { + +#ifndef __CYGWIN__ +#define __CYGWIN__ __CYGWIN32__ +#endif +return __CYGWIN__; +; return 0; } +EOF +if { (eval echo configure:1440: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_cygwin=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_cygwin=no +fi +rm -f conftest* +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_cygwin" 1>&6 +CYGWIN= +test "$ac_cv_cygwin" = yes && CYGWIN=yes +echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6 +echo "configure:1457: checking for mingw32 environment" >&5 +if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 1462 "configure" +#include "confdefs.h" + +int main() { +return __MINGW32__; +; return 0; } +EOF +if { (eval echo configure:1469: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_mingw32=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_mingw32=no +fi +rm -f conftest* +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_mingw32" 1>&6 +MINGW32= +test "$ac_cv_mingw32" = yes && MINGW32=yes # 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 +case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) @@ -1286,7 +1508,7 @@ fi if test "${enable_static+set}" = set; then enableval="$enable_static" p=${PACKAGE-default} -case "$enableval" in +case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) @@ -1309,7 +1531,7 @@ fi if test "${enable_fast_install+set}" = set; then enableval="$enable_fast_install" p=${PACKAGE-default} -case "$enableval" in +case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) @@ -1335,7 +1557,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:1339: checking host system type" >&5 +echo "configure:1561: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -1356,7 +1578,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1360: checking build system type" >&5 +echo "configure:1582: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1373,36 +1595,6 @@ build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$build" 1>&6 -# Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1380: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_RANLIB="ranlib" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" -fi -fi -RANLIB="$ac_cv_prog_RANLIB" -if test -n "$RANLIB"; then - echo "$ac_t""$RANLIB" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" @@ -1412,12 +1604,18 @@ else fi ac_prog=ld -if test "$ac_cv_prog_gcc" = yes; then +if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 -echo "configure:1419: checking for ld used by GCC" >&5 - ac_prog=`($CC -print-prog-name=ld) 2>&5` - case "$ac_prog" in +echo "configure:1611: checking for ld used by GCC" >&5 + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' @@ -1439,12 +1637,12 @@ echo "configure:1419: checking for ld used by GCC" >&5 esac elif test "$with_gnu_ld" = yes; then echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 -echo "configure:1443: checking for GNU ld" >&5 +echo "configure:1641: checking for GNU ld" >&5 else echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 -echo "configure:1446: checking for non-GNU ld" >&5 +echo "configure:1644: checking for non-GNU ld" >&5 fi -if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then +if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -z "$LD"; then @@ -1452,11 +1650,11 @@ else for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - ac_cv_path_LD="$ac_dir/$ac_prog" + 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 GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. - if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break @@ -1465,80 +1663,830 @@ else done IFS="$ac_save_ifs" else - ac_cv_path_LD="$LD" # Let the user override the test with a path. + lt_cv_path_LD="$LD" # Let the user override the test with a path. fi fi -LD="$ac_cv_path_LD" +LD="$lt_cv_path_LD" if test -n "$LD"; then echo "$ac_t""$LD" 1>&6 else echo "$ac_t""no" 1>&6 fi test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; } - echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 -echo "configure:1482: checking if the linker ($LD) is GNU ld" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then +echo "configure:1679: checking if the linker ($LD) is GNU ld" >&5 +if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then - ac_cv_prog_gnu_ld=yes + lt_cv_prog_gnu_ld=yes else - ac_cv_prog_gnu_ld=no + lt_cv_prog_gnu_ld=no fi fi -echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 +echo "$ac_t""$lt_cv_prog_gnu_ld" 1>&6 +with_gnu_ld=$lt_cv_prog_gnu_ld +echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6 +echo "configure:1696: checking for $LD option to reload object files" >&5 +if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + lt_cv_ld_reload_flag='-r' +fi + +echo "$ac_t""$lt_cv_ld_reload_flag" 1>&6 +reload_flag=$lt_cv_ld_reload_flag +test -n "$reload_flag" && reload_flag=" $reload_flag" + echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6 -echo "configure:1498: checking for BSD-compatible nm" >&5 -if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then +echo "configure:1708: checking for BSD-compatible nm" >&5 +if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$NM"; then # Let the user override the test. - ac_cv_path_NM="$NM" + lt_cv_path_NM="$NM" else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then + tmp_nm=$ac_dir/${ac_tool_prefix}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 - if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -B" + # Tru64's nm complains that /dev/null is an invalid object file + if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then + lt_cv_path_NM="$tmp_nm -B" break - elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -p" + elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + lt_cv_path_NM="$tmp_nm -p" break else - ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but + 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 fi fi done IFS="$ac_save_ifs" - test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi fi -NM="$ac_cv_path_NM" +NM="$lt_cv_path_NM" echo "$ac_t""$NM" 1>&6 +echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6 +echo "configure:1746: checking how to recognise dependant libraries" >&5 +if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&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 egrep 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 + ;; + +bsdi4*) + 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* | mingw* | pw32*) + 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='file_magic Mach-O dynamically linked shared library' + lt_cv_file_magic_cmd='/usr/bin/file -L' + case "$host_os" in + rhapsody* | darwin1.[012]) + lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1` + ;; + *) # Darwin 1.3 on + lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib' + ;; + esac + ;; + +freebsd*) + 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)/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_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + +irix5* | irix6*) + case $host_os in + irix5*) + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" + ;; + *) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1" + ;; + esac + lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*` + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux-gnu*) + case $host_cpu in + alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* ) + lt_cv_deplibs_check_method=pass_all ;; + *) + # glibc up to 2.1.1 does not perform some relocations on ARM + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; + esac + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$' + 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 + ;; + +openbsd*) + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' + else + lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' + fi + ;; + +osf3* | osf4* | osf5*) + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method='file_magic COFF format alpha shared library' + lt_cv_file_magic_test_file=/shlib/libc.so + lt_cv_deplibs_check_method=pass_all + ;; + +sco3.2v5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + lt_cv_file_magic_test_file=/lib/libc.so + ;; + +sysv5uw[78]* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + 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 + ;; + esac + ;; +esac + +fi + +echo "$ac_t""$lt_cv_deplibs_check_method" 1>&6 +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method + +echo $ac_n "checking for object suffix""... $ac_c" 1>&6 +echo "configure:1929: checking for object suffix" >&5 +if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + rm -f conftest* +echo 'int i = 1;' > conftest.$ac_ext +if { (eval echo configure:1935: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + for ac_file in conftest.*; do + case $ac_file in + *.c) ;; + *) ac_cv_objext=`echo $ac_file | sed -e s/conftest.//` ;; + esac + done +else + { echo "configure: error: installation or configuration problem; compiler does not work" 1>&2; exit 1; } +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_objext" 1>&6 +OBJEXT=$ac_cv_objext +ac_objext=$ac_cv_objext + + + +echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 +echo "configure:1955: checking for executable suffix" >&5 +if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$CYGWIN" = yes || test "$MINGW32" = yes; then + ac_cv_exeext=.exe +else + rm -f conftest* + echo 'int main () { return 0; }' > conftest.$ac_ext + ac_cv_exeext= + if { (eval echo configure:1965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then + for file in conftest.*; do + case $file in + *.c | *.o | *.obj) ;; + *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;; + esac + done + else + { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; } + fi + rm -f conftest* + test x"${ac_cv_exeext}" = x && ac_cv_exeext=no +fi +fi + +EXEEXT="" +test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext} +echo "$ac_t""${ac_cv_exeext}" 1>&6 +ac_exeext=$EXEEXT + +if test $host != $build; then + ac_tool_prefix=${host_alias}- +else + ac_tool_prefix= +fi + + + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +echo $ac_n "checking command to parse $NM output""... $ac_c" 1>&6 +echo "configure:1996: checking command to parse $NM output" >&5 +if eval "test \"`echo '$''{'lt_cv_sys_global_symbol_pipe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&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 the above into a raw symbol and a C symbol. +symxfrm='\1 \2\3 \3' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_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 + lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +irix*) + symcode='[BCDEGRST]' + ;; +solaris* | sysv5*) + symcode='[BDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $host_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. +if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then + symcode='[ABCDGISTW]' +fi + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # 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 configure:2076: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { (eval echo configure:2079: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\") 1>&5; (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5; } && 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 egrep ' nm_test_var$' "$nlist" >/dev/null; then + if egrep ' 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_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext' + + cat <<EOF >> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr void * +#else +# define lt_ptr char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr address; +} +lt_preloaded_symbols[] = +{ +EOF + sed "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$no_builtin_flag" + if { (eval echo configure:2130: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + pipe_works=yes + fi + LIBS="$save_LIBS" + CFLAGS="$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 + +global_symbol_pipe="$lt_cv_sys_global_symbol_pipe" +if test -z "$lt_cv_sys_global_symbol_pipe"; then + global_symbol_to_cdecl= + global_symbol_to_c_name_address= +else + global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl" + global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address" +fi +if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address"; +then + echo "$ac_t""failed" 1>&6 +else + echo "$ac_t""ok" 1>&6 +fi + +for ac_hdr in dlfcn.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:2179: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2184 "configure" +#include "confdefs.h" +#include <$ac_hdr> +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2189: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <<EOF +#define $ac_tr_hdr 1 +EOF + +else + echo "$ac_t""no" 1>&6 +fi +done + + + + + +# 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 $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6 +echo "configure:2224: checking for ${ac_tool_prefix}file" >&5 +if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case $MAGIC_CMD in + /*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; + ?:/*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path. + ;; + *) + ac_save_MAGIC_CMD="$MAGIC_CMD" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="/usr/bin:$PATH" + for ac_dir in $ac_dummy; do + 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="$ac_save_ifs" + MAGIC_CMD="$ac_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + echo "$ac_t""$MAGIC_CMD" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + echo $ac_n "checking for file""... $ac_c" 1>&6 +echo "configure:2286: checking for file" >&5 +if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case $MAGIC_CMD in + /*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; + ?:/*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path. + ;; + *) + ac_save_MAGIC_CMD="$MAGIC_CMD" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="/usr/bin:$PATH" + for ac_dir in $ac_dummy; do + 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="$ac_save_ifs" + MAGIC_CMD="$ac_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + echo "$ac_t""$MAGIC_CMD" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:2357: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + +if test -z "$ac_cv_prog_RANLIB"; then +if test -n "$ac_tool_prefix"; then + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:2389: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +else + RANLIB=":" +fi +fi + +# 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:2424: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +STRIP="$ac_cv_prog_STRIP" +if test -n "$STRIP"; then + echo "$ac_t""$STRIP" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + +if test -z "$ac_cv_prog_STRIP"; then +if test -n "$ac_tool_prefix"; then + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:2456: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_STRIP="strip" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_STRIP" && ac_cv_prog_STRIP=":" +fi +fi +STRIP="$ac_cv_prog_STRIP" +if test -n "$STRIP"; then + echo "$ac_t""$STRIP" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi +else + STRIP=":" +fi +fi -# Check for any special flags to pass to ltconfig. -libtool_flags="--cache-file=$cache_file" -test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" -test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" -test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install" -test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" -test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" +enable_dlopen=no +enable_win32_dll=no # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then @@ -1546,17 +2494,16 @@ if test "${enable_libtool_lock+set}" = set; then : fi -test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" -test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" +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 +case $host in *-*-irix6*) # Find out which ABI we are using. - echo '#line 1558 "configure"' > conftest.$ac_ext - if { (eval echo configure:1559: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - case "`/usr/bin/file conftest.o`" in + echo '#line 2505 "configure"' > conftest.$ac_ext + if { (eval echo configure:2506: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; @@ -1576,19 +2523,27 @@ case "$host" in SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6 -echo "configure:1580: checking whether the C compiler needs -belf" >&5 +echo "configure:2527: checking whether the C compiler needs -belf" >&5 if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else - cat > conftest.$ac_ext <<EOF -#line 1585 "configure" + + ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + + cat > conftest.$ac_ext <<EOF +#line 2540 "configure" #include "confdefs.h" int main() { ; return 0; } EOF -if { (eval echo configure:1592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* lt_cv_cc_needs_belf=yes else @@ -1598,6 +2553,13 @@ else lt_cv_cc_needs_belf=no fi rm -f conftest* + ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + fi echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6 @@ -1610,90 +2572,2804 @@ echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6 esac +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^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' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" +need_locks="$enable_libtool_lock" + +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 "$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 "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +if test x"$host" != x"$build"; then + ac_tool_prefix=${host_alias}- +else + ac_tool_prefix= +fi -# Save cache, so that ltconfig can load it -cat > confcache <<\EOF -# 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. It is not useful on other systems. -# If it contains results you don't want to keep, you may remove or edit it. -# -# By default, configure uses ./config.cache as the cache file, -# creating it if it does not exist already. You can give configure -# the --cache-file=FILE option to use a different cache file; that is -# what configure does when it calls configure scripts in -# subdirectories, so they share the cache. -# Giving --cache-file=/dev/null disables caching, for debugging configure. -# config.status only pays attention to the cache file if you give it the -# --recheck option to rerun configure. -# +# Transform linux* to *-*-linux-gnu*, to support old configure scripts. +case $host_os in +linux-gnu*) ;; +linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` +esac + +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 + +# 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="\$RANLIB -t \$oldlib~$old_postinstall_cmds" + ;; + *) + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +# Allow CC to be a program name with arguments. +set dummy $CC +compiler="$2" + +echo $ac_n "checking for objdir""... $ac_c" 1>&6 +echo "configure:2667: checking for objdir" >&5 +rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + objdir=_libs +fi +rmdir .libs 2>/dev/null +echo "$ac_t""$objdir" 1>&6 + + +# 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 + +# We assume here that the value for lt_cv_prog_cc_pic will not be cached +# in isolation, and that seeing it set (from the cache) indicates that +# the associated values are set (in the cache) correctly too. +echo $ac_n "checking for $compiler option to produce PIC""... $ac_c" 1>&6 +echo "configure:2694: checking for $compiler option to produce PIC" >&5 +if eval "test \"`echo '$''{'lt_cv_prog_cc_pic'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + lt_cv_prog_cc_pic= + lt_cv_prog_cc_shlib= + lt_cv_prog_cc_wl= + lt_cv_prog_cc_static= + lt_cv_prog_cc_no_builtin= + lt_cv_prog_cc_can_build_shared=$can_build_shared + + if test "$GCC" = yes; then + lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_static='-static' + + case $host_os in + aix*) + # Below there is a dirty hack to force normal static linking with -ldl + # The problem is because libdl dynamically linked with both libc and + # libC (AIX C++ library), which obviously doesn't included in libraries + # list by gcc. This cause undefined symbols with -static flags. + # This hack allows C programs to be linked with "-static -ldl", but + # not sure about C++ programs. + lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC" + ;; + 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_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | irix5* | irix6* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_cv_prog_cc_pic='-fno-common' + ;; + cygwin* | 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_cv_prog_cc_pic='-DDLL_EXPORT' + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_cv_prog_cc_pic=-Kconform_pic + fi + ;; + *) + lt_cv_prog_cc_pic='-fPIC' + ;; + esac + else + # PORTME Check for PIC flags for the system compiler. + case $host_os in + aix3* | aix4* | aix5*) + lt_cv_prog_cc_wl='-Wl,' + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_cv_prog_cc_static='-Bstatic' + else + lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + hpux9* | hpux10* | hpux11*) + # Is there a better lt_cv_prog_cc_static that works with the bundled CC? + lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive" + lt_cv_prog_cc_pic='+Z' + ;; + + irix5* | irix6*) + lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_static='-non_shared' + # PIC (with -KPIC) is the default. + ;; + + cygwin* | 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_cv_prog_cc_pic='-DDLL_EXPORT' + ;; + + newsos6) + lt_cv_prog_cc_pic='-KPIC' + lt_cv_prog_cc_static='-Bstatic' + ;; + + osf3* | osf4* | osf5*) + # All OSF/1 code is PIC. + lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_static='-non_shared' + ;; + + sco3.2v5*) + lt_cv_prog_cc_pic='-Kpic' + lt_cv_prog_cc_static='-dn' + lt_cv_prog_cc_shlib='-belf' + ;; + + solaris*) + lt_cv_prog_cc_pic='-KPIC' + lt_cv_prog_cc_static='-Bstatic' + lt_cv_prog_cc_wl='-Wl,' + ;; + + sunos4*) + lt_cv_prog_cc_pic='-PIC' + lt_cv_prog_cc_static='-Bstatic' + lt_cv_prog_cc_wl='-Qoption ld ' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_cv_prog_cc_pic='-KPIC' + lt_cv_prog_cc_static='-Bstatic' + if test "x$host_vendor" = xsni; then + lt_cv_prog_cc_wl='-LD' + else + lt_cv_prog_cc_wl='-Wl,' + fi + ;; + + uts4*) + lt_cv_prog_cc_pic='-pic' + lt_cv_prog_cc_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_cv_prog_cc_pic='-Kconform_pic' + lt_cv_prog_cc_static='-Bstatic' + fi + ;; + + *) + lt_cv_prog_cc_can_build_shared=no + ;; + esac + fi + +fi + +if test -z "$lt_cv_prog_cc_pic"; then + echo "$ac_t""none" 1>&6 +else + echo "$ac_t""$lt_cv_prog_cc_pic" 1>&6 + + # Check to make sure the pic_flag actually works. + echo $ac_n "checking if $compiler PIC flag $lt_cv_prog_cc_pic works""... $ac_c" 1>&6 +echo "configure:2846: checking if $compiler PIC flag $lt_cv_prog_cc_pic works" >&5 + if eval "test \"`echo '$''{'lt_cv_prog_cc_pic_works'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC" + cat > conftest.$ac_ext <<EOF +#line 2853 "configure" +#include "confdefs.h" + +int main() { + +; return 0; } EOF -# 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 \ - -e "s/'/'\\\\''/g" \ - -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" +if { (eval echo configure:2860: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + case $host_os in + hpux9* | hpux10* | hpux11*) + # On HP-UX, both CC and GCC only warn that PIC is supported... then + # they create non-PIC objects. So, if there were any warnings, we + # assume that PIC is not supported. + if test -s conftest.err; then + lt_cv_prog_cc_pic_works=no + else + lt_cv_prog_cc_pic_works=yes + fi + ;; + *) + lt_cv_prog_cc_pic_works=yes + ;; + esac + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + lt_cv_prog_cc_pic_works=no + +fi +rm -f conftest* + CFLAGS="$save_CFLAGS" + +fi + + + if test "X$lt_cv_prog_cc_pic_works" = Xno; then + lt_cv_prog_cc_pic= + lt_cv_prog_cc_can_build_shared=no + else + lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic" + fi + + echo "$ac_t""$lt_cv_prog_cc_pic_works" 1>&6 +fi + +# Check for any special shared library compilation flags. +if test -n "$lt_cv_prog_cc_shlib"; then + echo "configure: warning: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" 1>&2 + if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$lt_cv_prog_cc_shlib[ ]" >/dev/null; then : + else + echo "configure: warning: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" 1>&2 + lt_cv_prog_cc_can_build_shared=no + fi +fi + +echo $ac_n "checking if $compiler static flag $lt_cv_prog_cc_static works""... $ac_c" 1>&6 +echo "configure:2912: checking if $compiler static flag $lt_cv_prog_cc_static works" >&5 +if eval "test \"`echo '$''{'lt_cv_prog_cc_static_works'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + lt_cv_prog_cc_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static" + cat > conftest.$ac_ext <<EOF +#line 2920 "configure" +#include "confdefs.h" + +int main() { + +; return 0; } +EOF +if { (eval echo configure:2927: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + lt_cv_prog_cc_static_works=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* + LDFLAGS="$save_LDFLAGS" + +fi + + +# Belt *and* braces to stop my trousers falling down: +test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static= +echo "$ac_t""$lt_cv_prog_cc_static_works" 1>&6 + +pic_flag="$lt_cv_prog_cc_pic" +special_shlib_compile_flags="$lt_cv_prog_cc_shlib" +wl="$lt_cv_prog_cc_wl" +link_static_flag="$lt_cv_prog_cc_static" +no_builtin_flag="$lt_cv_prog_cc_no_builtin" +can_build_shared="$lt_cv_prog_cc_can_build_shared" + + +# Check to see if options -o and -c are simultaneously supported by compiler +echo $ac_n "checking if $compiler supports -c -o file.$ac_objext""... $ac_c" 1>&6 +echo "configure:2954: checking if $compiler supports -c -o file.$ac_objext" >&5 +if eval "test \"`echo '$''{'lt_cv_compiler_c_o'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +$rm -r conftest 2>/dev/null +mkdir conftest +cd conftest +echo "int some_variable = 0;" > conftest.$ac_ext +mkdir out +# According to Tom Tromey, Ian Lance Taylor reported there are C compilers +# that will create temporary files in the current directory regardless of +# the output directory. Thus, making CWD read-only will cause this test +# to fail, enabling locking or at least warning the user not to do parallel +# builds. +chmod -w . +save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -o out/conftest2.$ac_objext" +compiler_c_o=no +if { (eval echo configure:2973: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && 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 + if test -s out/conftest.err; then + lt_cv_compiler_c_o=no + else + lt_cv_compiler_c_o=yes + fi +else + # Append any errors to the config.log. + cat out/conftest.err 1>&5 + lt_cv_compiler_c_o=no +fi +CFLAGS="$save_CFLAGS" +chmod u+w . +$rm conftest* out/* +rmdir out +cd .. +rmdir conftest +$rm -r conftest 2>/dev/null + +fi + +compiler_c_o=$lt_cv_compiler_c_o +echo "$ac_t""$compiler_c_o" 1>&6 + +if test x"$compiler_c_o" = x"yes"; then + # Check to see if we can write to a .lo + echo $ac_n "checking if $compiler supports -c -o file.lo""... $ac_c" 1>&6 +echo "configure:3002: checking if $compiler supports -c -o file.lo" >&5 + if eval "test \"`echo '$''{'lt_cv_compiler_o_lo'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + lt_cv_compiler_o_lo=no + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -c -o conftest.lo" + save_objext="$ac_objext" + ac_objext=lo + cat > conftest.$ac_ext <<EOF +#line 3013 "configure" +#include "confdefs.h" + +int main() { +int some_variable = 0; +; return 0; } +EOF +if { (eval echo configure:3020: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + lt_cv_compiler_o_lo=no + else + lt_cv_compiler_o_lo=yes + fi + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* + ac_objext="$save_objext" + CFLAGS="$save_CFLAGS" + +fi + + compiler_o_lo=$lt_cv_compiler_o_lo + echo "$ac_t""$compiler_o_lo" 1>&6 +else + compiler_o_lo=no +fi + +# Check to see if we can do hard links to lock some files if needed +hard_links="nottested" +if test "$compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo $ac_n "checking if we can lock with hard links""... $ac_c" 1>&6 +echo "configure:3051: checking if we can lock with hard links" >&5 + 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 "$ac_t""$hard_links" 1>&6 + if test "$hard_links" = no; then + echo "configure: warning: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" 1>&2 + need_locks=warn + fi +else + need_locks=no +fi + +if test "$GCC" = yes; then + # Check to see if options -fno-rtti -fno-exceptions are supported by compiler + echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions""... $ac_c" 1>&6 +echo "configure:3070: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 + echo "int some_variable = 0;" > conftest.$ac_ext + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext" + compiler_rtti_exceptions=no + cat > conftest.$ac_ext <<EOF +#line 3076 "configure" +#include "confdefs.h" + +int main() { +int some_variable = 0; +; return 0; } +EOF +if { (eval echo configure:3083: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + compiler_rtti_exceptions=no + else + compiler_rtti_exceptions=yes + fi + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* + CFLAGS="$save_CFLAGS" + echo "$ac_t""$compiler_rtti_exceptions" 1>&6 + + if test "$compiler_rtti_exceptions" = "yes"; then + no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions' + else + no_builtin_flag=' -fno-builtin' + fi +fi + +# See if the linker supports building shared libraries. +echo $ac_n "checking whether the linker ($LD) supports shared libraries""... $ac_c" 1>&6 +echo "configure:3110: checking whether the linker ($LD) supports shared libraries" >&5 + +allow_undefined_flag= +no_undefined_flag= +need_lib_prefix=unknown +need_version=unknown +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +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_into_libs=no +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no +hardcode_shlibpath_var=unsupported +runpath_var= +link_all_deplibs=unknown +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 egrep regular expression 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= + +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 + ;; +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}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX, the GNU linker is very broken + # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available. + 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 + ;; + + 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 use + # them. + ld_shlibs=no + ;; + + beos*) + if $LD --help 2>&1 | egrep ': 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*) + # 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=yes + + extract_expsyms_cmds='test -f $output_objdir/impgen.c || \ + sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~ + test -f $output_objdir/impgen.exe || (cd $output_objdir && \ + if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \ + else $CC -o impgen impgen.c ; fi)~ + $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def' + + old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib' + + # cygwin and mingw dlls have different entry points and sets of symbols + # to exclude. + # FIXME: what about values for MSVC? + dll_entry=__cygwin_dll_entry@12 + dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~ + case $host_os in + mingw*) + # mingw values + dll_entry=_DllMainCRTStartup@12 + dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~ + ;; + esac + + # mingw and cygwin differ, and it's simplest to just exclude the union + # of the two symbol sets. + dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12 + + # recent cygwin and mingw systems supply a stub DllMain which the user + # can override, but on older systems we have to supply one (in ltdll.c) + if test "x$lt_cv_need_dllmain" = "xyes"; then + ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext " + ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < [$]0 > $output_objdir/$soname-ltdll.c~ + test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~' + else + ltdll_obj= + ltdll_cmds= + fi + + # Extract the symbol export list from an `--export-all' def file, + # then regenerate the def file from the symbol export list, so that + # the compiled dll only exports the symbol export list. + # Be careful not to strip the DATA tag left be newer dlltools. + export_symbols_cmds="$ltdll_cmds"' + $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~ + sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols' + + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is. + # If DATA tags from a recent dlltool are present, honour them! + archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname-def; + else + echo EXPORTS > $output_objdir/$soname-def; + _lt_hint=1; + cat $export_symbols | while read symbol; do + set dummy \$symbol; + case \$# in + 2) echo " \$2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;; + *) echo " \$2 @ \$_lt_hint \$3 ; " >> $output_objdir/$soname-def;; + esac; + _lt_hint=`expr 1 + \$_lt_hint`; + done; + fi~ + '"$ltdll_cmds"' + $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ + $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~ + $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ + $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~ + $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags' ;; + + 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 -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | egrep '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 | egrep ': 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 + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + if $LD --help 2>&1 | egrep ': 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 >> confcache -if cmp -s $cache_file confcache; then - : + esac + + if test "$ld_shlibs" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + case $host_os in + cygwin* | mingw* | pw32*) + # dlltool doesn't understand --whole-archive et. al. + whole_archive_flag_spec= + ;; + *) + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + ;; + esac + fi else - if test -w $cache_file; then - echo "updating cache $cache_file" - cat confcache > $cache_file + # 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 "$link_static_flag"; 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 + 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. + + hardcode_direct=yes + archive_cmds='' + hardcode_libdir_separator=':' + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + 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' + else + # not using gcc + if test "$host_cpu" = ia64; then + shared_flag='${wl}-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 can do strange things, 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' + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib' + archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${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 ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib' + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='${wl}-berok' + # This is a bit strange, but is similar to how AIX traditionally builds + # it's shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $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 + ;; + + 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 + # 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"`' + ;; + + darwin* | rhapsody*) + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag='-undefined suppress' + ;; + *) # Darwin 1.3 on + allow_undefined_flag='-flat_namespace -undefined suppress' + ;; + esac + # FIXME: Relying on posixy $() will cause problems for + # cross-compilation, but unfortunately the echo tests do not + # yet detect zsh echo's removal of \ escapes. + archive_cmds='$nonopt $(test "x$module" = xyes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linker_flags -install_name $rpath/$soname $verstring' + # We need to add '_' to the symbols in $export_symbols first + #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols' + hardcode_direct=yes + hardcode_shlibpath_var=no + whole_archive_flag_spec='-all_load $convenience' + ;; + + 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*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9* | hpux10* | hpux11*) + case $host_os in + hpux9*) 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' ;; + *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; + esac + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_minus_L=yes # Not in the search PATH, but as the default + # location of the library. + export_dynamic_flag_spec='${wl}-E' + ;; + + irix5* | irix6*) + 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' + 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 $linker_flags' + 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 $linker_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 "-exported_symbol " >> $lib.exp; echo "\$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 ${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=: + ;; + + sco3.2v5*) + 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 + export_dynamic_flag_spec='${wl}-Bexport' + ;; + + solaris*) + no_undefined_flag=' -z defs' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + 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' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; + 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) + if test "x$host_vendor" = xsno; then + archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + else + 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 + fi + 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' + ;; + + sysv5*) + no_undefined_flag=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + 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' + hardcode_libdir_flag_spec= + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + 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.2uw2*) + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=no + hardcode_shlibpath_var=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5uw7* | unixware7*) + no_undefined_flag='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac +fi +echo "$ac_t""$ld_shlibs" 1>&6 +test "$ld_shlibs" = no && can_build_shared=no + +# Check hardcoding attributes. +echo $ac_n "checking how to hardcode library paths into programs""... $ac_c" 1>&6 +echo "configure:3766: checking how to hardcode library paths into programs" >&5 +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var"; 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 "$hardcode_shlibpath_var" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink else - echo "not updating unwritable cache $cache_file" + # 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 "$ac_t""$hardcode_action" 1>&6 + +striplib= +old_striplib= +echo $ac_n "checking whether stripping libraries is possible""... $ac_c" 1>&6 +echo "configure:3794: checking whether stripping libraries is possible" >&5 +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 "$ac_t""yes" 1>&6 +else + echo "$ac_t""no" 1>&6 fi -rm -f confcache +reload_cmds='$LD$reload_flag -o $output$reload_objs' +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +# PORTME Fill in your ld.so characteristics +echo $ac_n "checking dynamic linker characteristics""... $ac_c" 1>&6 +echo "configure:3808: checking dynamic linker characteristics" >&5 +library_names_spec= +libname_spec='lib$name' +soname_spec= +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" +sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}.so$major' + ;; -# Actually configure libtool. ac_aux_dir is where install-sh is found. -CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ -LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \ -LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \ -DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \ -${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \ -$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \ -|| { echo "configure: error: libtool configure failed" 1>&2; exit 1; } +aix4* | aix5*) + version_type=linux + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so' + 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}.so$versuffix ${libname}${release}.so$major $libname.so' + 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}.so$major' + fi + shlibpath_var=LIBPATH + fi + ;; -# Reload cache, that may have been modified by ltconfig -if test -r "$cache_file"; then - echo "loading cache $cache_file" - . $cache_file +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}.so' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$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" + export_dynamic_flag_spec=-rdynamic + # 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 + need_version=no + need_lib_prefix=no + case $GCC,$host_os in + yes,cygwin*) + library_names_spec='$libname.dll.a' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll' + postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog .libs/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + ;; + yes,mingw*) + library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"` + ;; + yes,pw32*) + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/./-/g'`${versuffix}.dll' + ;; + *) + library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $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 + # FIXME: Relying on posixy $() will cause problems for + # cross-compilation, but unfortunately the echo tests do not + # yet detect zsh echo's removal of \ escapes. + library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)' + soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + *) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so' + soname_spec='${libname}${release}.so$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. + dynamic_linker="$host_os dld.sl" + version_type=sunos + need_lib_prefix=no + need_version=no + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl' + soname_spec='${libname}${release}.sl$major' + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6*) + version_type=irix + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}.so$major' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so' + case $host_os in + irix5*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 ") 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}" + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux-gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$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 + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so' + soname_spec='${libname}${release}.so$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}.so$versuffix ${libname}${release}.so$major $libname.so' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + 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 + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +os2*) + libname_spec='$name' + need_lib_prefix=no + library_names_spec='$libname.dll $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_version=no + soname_spec='${libname}${release}.so' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' + 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" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}.so$major' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$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}.so$versuffix ${libname}.so$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.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=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 + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so' + soname_spec='$libname.so.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$ac_t""$dynamic_linker" 1>&6 +test "$dynamic_linker" = no && can_build_shared=no + +# Report the final consequences. +echo $ac_n "checking if libtool supports shared libraries""... $ac_c" 1>&6 +echo "configure:4205: checking if libtool supports shared libraries" >&5 +echo "$ac_t""$can_build_shared" 1>&6 + +echo $ac_n "checking whether to build shared libraries""... $ac_c" 1>&6 +echo "configure:4209: checking whether to build shared libraries" >&5 +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*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; +esac +echo "$ac_t""$enable_shared" 1>&6 + +echo $ac_n "checking whether to build static libraries""... $ac_c" 1>&6 +echo "configure:4232: checking whether to build static libraries" >&5 +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +echo "$ac_t""$enable_static" 1>&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 + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown else - echo "creating cache $cache_file" - > $cache_file + 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 + ;; + + cygwin* | mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + *) + echo $ac_n "checking for shl_load""... $ac_c" 1>&6 +echo "configure:4273: checking for shl_load" >&5 +if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 4278 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load(); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +/* 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() { + +/* 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 +shl_load(); +#endif + +; return 0; } +EOF +if { (eval echo configure:4301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_shl_load=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_shl_load=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="shl_load" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 +echo "configure:4319: checking for shl_load in -ldld" >&5 +ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldld $LIBS" +cat > conftest.$ac_ext <<EOF +#line 4327 "configure" +#include "confdefs.h" +/* Override any gcc2 internal prototype to avoid an error. */ +/* 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; } +EOF +if { (eval echo configure:4338: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for dlopen""... $ac_c" 1>&6 +echo "configure:4357: checking for dlopen" >&5 +if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 4362 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen(); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +/* 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() { + +/* 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 +dlopen(); +#endif + +; return 0; } +EOF +if { (eval echo configure:4385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_dlopen=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_dlopen=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="dlopen" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 +echo "configure:4403: checking for dlopen in -ldl" >&5 +ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldl $LIBS" +cat > conftest.$ac_ext <<EOF +#line 4411 "configure" +#include "confdefs.h" +/* Override any gcc2 internal prototype to avoid an error. */ +/* 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; } +EOF +if { (eval echo configure:4422: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for dlopen in -lsvld""... $ac_c" 1>&6 +echo "configure:4441: checking for dlopen in -lsvld" >&5 +ac_lib_var=`echo svld'_'dlopen | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lsvld $LIBS" +cat > conftest.$ac_ext <<EOF +#line 4449 "configure" +#include "confdefs.h" +/* Override any gcc2 internal prototype to avoid an error. */ +/* 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; } +EOF +if { (eval echo configure:4460: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6 +echo "configure:4479: checking for dld_link in -ldld" >&5 +ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldld $LIBS" +cat > conftest.$ac_ext <<EOF +#line 4487 "configure" +#include "confdefs.h" +/* Override any gcc2 internal prototype to avoid an error. */ +/* 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; } +EOF +if { (eval echo configure:4498: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +else + echo "$ac_t""no" 1>&6 +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" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6 +echo "configure:4554: checking whether a program can dlopen itself" >&5 +if eval "test \"`echo '$''{'lt_cv_dlopen_self'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&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 4564 "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); */ + } + + exit (status); +} +EOF + if { (eval echo configure:4625: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 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_unknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + fi +echo "$ac_t""$lt_cv_dlopen_self" 1>&6 + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6 +echo "configure:4648: checking whether a statically linked program can dlopen itself" >&5 +if eval "test \"`echo '$''{'lt_cv_dlopen_self_static'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&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 4658 "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); */ + } + + exit (status); +} +EOF + if { (eval echo configure:4719: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 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_unknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi + +echo "$ac_t""$lt_cv_dlopen_self_static" 1>&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 + + +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 $ac_n "checking whether -lc should be explicitly linked in""... $ac_c" 1>&6 +echo "configure:4768: checking whether -lc should be explicitly linked in" >&5 + if eval "test \"`echo '$''{'lt_cv_archive_cmds_need_lc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + $rm conftest* + echo 'static int dummy;' > conftest.$ac_ext + + if { (eval echo configure:4775: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_cv_prog_cc_wl + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { (eval echo configure:4788: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\") 1>&5; (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi +fi + + echo "$ac_t""$lt_cv_archive_cmds_need_lc" 1>&6 + ;; + esac +fi +need_lc=${lt_cv_archive_cmds_need_lc-yes} + +# The second 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 + : +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. + test -f Makefile && make "$ltmain" +fi + +if test -f "$ltmain"; then + trap "$rm \"${ofile}T\"; exit 1" 1 2 15 + $rm -f "${ofile}T" + + echo creating $ofile + + # 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 CC LD LN_S NM SHELL \ + reload_flag reload_cmds wl \ + pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \ + thread_safe_flag_spec whole_archive_flag_spec libname_spec \ + library_names_spec soname_spec \ + RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ + old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \ + postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \ + old_striplib striplib file_magic_cmd export_symbols_cmds \ + deplibs_check_method allow_undefined_flag no_undefined_flag \ + finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \ + global_symbol_to_c_name_address \ + hardcode_libdir_flag_spec hardcode_libdir_separator \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do + + case $var in + reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + export_symbols_cmds | archive_cmds | archive_expsym_cmds | \ + extract_expsyms_cmds | old_archive_from_expsyms_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + finish_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 + + cat <<__EOF__ > "${ofile}T" +#! $SHELL + +# `$echo "$ofile" | 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-2000 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="sed -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +# ### 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=$need_lc + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# The default C compiler. +CC=$lt_CC + +# Is the compiler the GNU C compiler? +with_gcc=$GCC + +# 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=$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_wl + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_pic_flag +pic_mode=$pic_mode + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_compiler_c_o + +# Can we write directly to a .lo ? +compiler_o_lo=$lt_compiler_o_lo + +# 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_link_static_flag + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_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 to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# 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_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_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 + +# 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.so during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# 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=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$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 >> "${ofile}T" + +# 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 + + case $host_os in + cygwin* | mingw* | pw32* | os2*) + cat <<'EOF' >> "${ofile}T" + # This is a source program that is used to create dlls on Windows + # Don't remove nor modify the starting and closing comments +# /* 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 */ + # This is a source program that is used to create import libraries + # on Windows for dlls which lack them. Don't remove nor modify the + # starting and closing comments +# /* impgen.c starts here */ +# /* Copyright (C) 1999-2000 Free Software Foundation, Inc. +# +# This file is part of GNU libtool. +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# */ +# +# #include <stdio.h> /* for printf() */ +# #include <unistd.h> /* for open(), lseek(), read() */ +# #include <fcntl.h> /* for O_RDONLY, O_BINARY */ +# #include <string.h> /* for strdup() */ +# +# /* O_BINARY isn't required (or even defined sometimes) under Unix */ +# #ifndef O_BINARY +# #define O_BINARY 0 +# #endif +# +# static unsigned int +# pe_get16 (fd, offset) +# int fd; +# int offset; +# { +# unsigned char b[2]; +# lseek (fd, offset, SEEK_SET); +# read (fd, b, 2); +# return b[0] + (b[1]<<8); +# } +# +# static unsigned int +# pe_get32 (fd, offset) +# int fd; +# int offset; +# { +# unsigned char b[4]; +# lseek (fd, offset, SEEK_SET); +# read (fd, b, 4); +# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); +# } +# +# static unsigned int +# pe_as32 (ptr) +# void *ptr; +# { +# unsigned char *b = ptr; +# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); +# } +# +# int +# main (argc, argv) +# int argc; +# char *argv[]; +# { +# int dll; +# unsigned long pe_header_offset, opthdr_ofs, num_entries, i; +# unsigned long export_rva, export_size, nsections, secptr, expptr; +# unsigned long name_rvas, nexp; +# unsigned char *expdata, *erva; +# char *filename, *dll_name; +# +# filename = argv[1]; +# +# dll = open(filename, O_RDONLY|O_BINARY); +# if (dll < 1) +# return 1; +# +# dll_name = filename; +# +# for (i=0; filename[i]; i++) +# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':') +# dll_name = filename + i +1; +# +# pe_header_offset = pe_get32 (dll, 0x3c); +# opthdr_ofs = pe_header_offset + 4 + 20; +# num_entries = pe_get32 (dll, opthdr_ofs + 92); +# +# if (num_entries < 1) /* no exports */ +# return 1; +# +# export_rva = pe_get32 (dll, opthdr_ofs + 96); +# export_size = pe_get32 (dll, opthdr_ofs + 100); +# nsections = pe_get16 (dll, pe_header_offset + 4 +2); +# secptr = (pe_header_offset + 4 + 20 + +# pe_get16 (dll, pe_header_offset + 4 + 16)); +# +# expptr = 0; +# for (i = 0; i < nsections; i++) +# { +# char sname[8]; +# unsigned long secptr1 = secptr + 40 * i; +# unsigned long vaddr = pe_get32 (dll, secptr1 + 12); +# unsigned long vsize = pe_get32 (dll, secptr1 + 16); +# unsigned long fptr = pe_get32 (dll, secptr1 + 20); +# lseek(dll, secptr1, SEEK_SET); +# read(dll, sname, 8); +# if (vaddr <= export_rva && vaddr+vsize > export_rva) +# { +# expptr = fptr + (export_rva - vaddr); +# if (export_rva + export_size > vaddr + vsize) +# export_size = vsize - (export_rva - vaddr); +# break; +# } +# } +# +# expdata = (unsigned char*)malloc(export_size); +# lseek (dll, expptr, SEEK_SET); +# read (dll, expdata, export_size); +# erva = expdata - export_rva; +# +# nexp = pe_as32 (expdata+24); +# name_rvas = pe_as32 (expdata+32); +# +# printf ("EXPORTS\n"); +# for (i = 0; i<nexp; i++) +# { +# unsigned long name_rva = pe_as32 (erva+name_rvas+i*4); +# printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i); +# } +# +# return 0; +# } +# /* impgen.c ends here */ + +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" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1) + + mv -f "${ofile}T" "$ofile" || \ + (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T") + chmod +x "$ofile" +fi + + + + # This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh" +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' -# Redirect the config.log output again, so that the ltconfig log is not -# clobbered by the next message. -exec 5>>./config.log +# Prevent multiple expansion + echo $ac_n "checking for ax25_config_load_ports in -lax25""... $ac_c" 1>&6 -echo "configure:1697: checking for ax25_config_load_ports in -lax25" >&5 +echo "configure:5373: checking for ax25_config_load_ports in -lax25" >&5 ac_lib_var=`echo ax25'_'ax25_config_load_ports | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1701,7 +5377,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lax25 $LIBS" cat > conftest.$ac_ext <<EOF -#line 1705 "configure" +#line 5381 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -1712,7 +5388,7 @@ int main() { ax25_config_load_ports() ; return 0; } EOF -if { (eval echo configure:1716: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5392: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1734,7 +5410,7 @@ else fi echo $ac_n "checking for initscr in -lncurses""... $ac_c" 1>&6 -echo "configure:1738: checking for initscr in -lncurses" >&5 +echo "configure:5414: checking for initscr in -lncurses" >&5 ac_lib_var=`echo ncurses'_'initscr | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1742,7 +5418,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lncurses $LIBS" cat > conftest.$ac_ext <<EOF -#line 1746 "configure" +#line 5422 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -1753,7 +5429,7 @@ int main() { initscr() ; return 0; } EOF -if { (eval echo configure:1757: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1776,9 +5452,9 @@ fi echo $ac_n "checking for working netax25/ax25.h header file""... $ac_c" 1>&6 -echo "configure:1780: checking for working netax25/ax25.h header file" >&5 +echo "configure:5456: checking for working netax25/ax25.h header file" >&5 cat > conftest.$ac_ext <<EOF -#line 1782 "configure" +#line 5458 "configure" #include "confdefs.h" #include <netax25/ax25.h> EOF @@ -1802,9 +5478,9 @@ else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for working netrom/netrom.h header file""... $ac_c" 1>&6 -echo "configure:1806: checking for working netrom/netrom.h header file" >&5 +echo "configure:5482: checking for working netrom/netrom.h header file" >&5 cat > conftest.$ac_ext <<EOF -#line 1808 "configure" +#line 5484 "configure" #include "confdefs.h" #include <netrom/netrom.h> EOF @@ -1828,9 +5504,9 @@ else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for working netrose/rose.h header file""... $ac_c" 1>&6 -echo "configure:1832: checking for working netrose/rose.h header file" >&5 +echo "configure:5508: checking for working netrose/rose.h header file" >&5 cat > conftest.$ac_ext <<EOF -#line 1834 "configure" +#line 5510 "configure" #include "confdefs.h" #include <netrose/rose.h> EOF @@ -1859,12 +5535,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:1863: checking for $ac_hdr that defines DIR" >&5 +echo "configure:5539: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1868 "configure" +#line 5544 "configure" #include "confdefs.h" #include <sys/types.h> #include <$ac_hdr> @@ -1872,7 +5548,7 @@ int main() { DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:1876: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:5552: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -1897,7 +5573,7 @@ done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:1901: checking for opendir in -ldir" >&5 +echo "configure:5577: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1905,7 +5581,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <<EOF -#line 1909 "configure" +#line 5585 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -1916,7 +5592,7 @@ int main() { opendir() ; return 0; } EOF -if { (eval echo configure:1920: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1938,7 +5614,7 @@ fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:1942: checking for opendir in -lx" >&5 +echo "configure:5618: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1946,7 +5622,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <<EOF -#line 1950 "configure" +#line 5626 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -1957,7 +5633,7 @@ int main() { opendir() ; return 0; } EOF -if { (eval echo configure:1961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5637: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1980,12 +5656,12 @@ fi fi echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1984: checking for ANSI C header files" >&5 +echo "configure:5660: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1989 "configure" +#line 5665 "configure" #include "confdefs.h" #include <stdlib.h> #include <stdarg.h> @@ -1993,7 +5669,7 @@ else #include <float.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1997: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5673: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2010,7 +5686,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext <<EOF -#line 2014 "configure" +#line 5690 "configure" #include "confdefs.h" #include <string.h> EOF @@ -2028,7 +5704,7 @@ 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 <<EOF -#line 2032 "configure" +#line 5708 "configure" #include "confdefs.h" #include <stdlib.h> EOF @@ -2049,7 +5725,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext <<EOF -#line 2053 "configure" +#line 5729 "configure" #include "confdefs.h" #include <ctype.h> #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -2060,7 +5736,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:2064: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:5740: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -2084,12 +5760,12 @@ EOF fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:2088: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:5764: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2093 "configure" +#line 5769 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/wait.h> @@ -2105,7 +5781,7 @@ wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:2109: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:5785: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -2129,17 +5805,17 @@ for ac_hdr in fcntl.h sys/file.h sys/ioctl.h sys/time.h syslog.h termio.h unistd do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2133: checking for $ac_hdr" >&5 +echo "configure:5809: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2138 "configure" +#line 5814 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2143: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5819: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2167,18 +5843,18 @@ done echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:2171: checking for working const" >&5 +echo "configure:5847: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2176 "configure" +#line 5852 "configure" #include "confdefs.h" int main() { /* Ultrix mips cc rejects this. */ -typedef int charset[2]; const charset x = {0,0}; +typedef int charset[2]; const charset x; /* SunOS 4.1.1 cc rejects this. */ char const *const *ccp; char **p; @@ -2221,7 +5897,7 @@ ccp = (char const *const *) p; ; return 0; } EOF -if { (eval echo configure:2225: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:5901: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -2242,21 +5918,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:2246: checking for inline" >&5 +echo "configure:5922: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <<EOF -#line 2253 "configure" +#line 5929 "configure" #include "confdefs.h" int main() { -} int $ac_kw foo() { +} $ac_kw foo() { ; return 0; } EOF -if { (eval echo configure:2260: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:5936: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -2282,12 +5958,12 @@ EOF esac echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:2286: checking for off_t" >&5 +echo "configure:5962: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2291 "configure" +#line 5967 "configure" #include "confdefs.h" #include <sys/types.h> #if STDC_HEADERS @@ -2315,12 +5991,12 @@ EOF fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:2319: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:5995: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2324 "configure" +#line 6000 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/time.h> @@ -2329,7 +6005,7 @@ int main() { struct tm *tp; ; return 0; } EOF -if { (eval echo configure:2333: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:6009: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -2350,12 +6026,12 @@ EOF fi echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 -echo "configure:2354: checking whether struct tm is in sys/time.h or time.h" >&5 +echo "configure:6030: checking whether struct tm is in sys/time.h or time.h" >&5 if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2359 "configure" +#line 6035 "configure" #include "confdefs.h" #include <sys/types.h> #include <time.h> @@ -2363,7 +6039,7 @@ int main() { struct tm *tp; tp->tm_sec; ; return 0; } EOF -if { (eval echo configure:2367: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:6043: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm=time.h else @@ -2385,7 +6061,7 @@ fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:2389: checking for 8-bit clean memcmp" >&5 +echo "configure:6065: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2393,7 +6069,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <<EOF -#line 2397 "configure" +#line 6073 "configure" #include "confdefs.h" main() @@ -2403,7 +6079,7 @@ main() } EOF -if { (eval echo configure:2407: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:6083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -2421,12 +6097,12 @@ echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6 test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:2425: checking return type of signal handlers" >&5 +echo "configure:6101: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2430 "configure" +#line 6106 "configure" #include "confdefs.h" #include <sys/types.h> #include <signal.h> @@ -2443,7 +6119,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:2447: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:6123: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -2462,7 +6138,7 @@ EOF echo $ac_n "checking whether utime accepts a null argument""... $ac_c" 1>&6 -echo "configure:2466: checking whether utime accepts a null argument" >&5 +echo "configure:6142: checking whether utime accepts a null argument" >&5 if eval "test \"`echo '$''{'ac_cv_func_utime_null'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2472,7 +6148,7 @@ if test "$cross_compiling" = yes; then ac_cv_func_utime_null=no else cat > conftest.$ac_ext <<EOF -#line 2476 "configure" +#line 6152 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/stat.h> @@ -2483,7 +6159,7 @@ exit(!(stat ("conftestdata", &s) == 0 && utime("conftestdata", (long *)0) == 0 && t.st_mtime - s.st_mtime < 120)); } EOF -if { (eval echo configure:2487: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:6163: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_utime_null=yes else @@ -2507,12 +6183,12 @@ EOF fi echo $ac_n "checking for vprintf""... $ac_c" 1>&6 -echo "configure:2511: checking for vprintf" >&5 +echo "configure:6187: checking for vprintf" >&5 if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2516 "configure" +#line 6192 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char vprintf(); below. */ @@ -2535,7 +6211,7 @@ vprintf(); ; return 0; } EOF -if { (eval echo configure:2539: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6215: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_vprintf=yes" else @@ -2559,12 +6235,12 @@ fi if test "$ac_cv_func_vprintf" != yes; then echo $ac_n "checking for _doprnt""... $ac_c" 1>&6 -echo "configure:2563: checking for _doprnt" >&5 +echo "configure:6239: checking for _doprnt" >&5 if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2568 "configure" +#line 6244 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char _doprnt(); below. */ @@ -2587,7 +6263,7 @@ _doprnt(); ; return 0; } EOF -if { (eval echo configure:2591: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func__doprnt=yes" else @@ -2614,12 +6290,12 @@ fi for ac_func in gettimeofday mktime select socket strdup strerror strspn strstr strtol strtoul uname do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2618: checking for $ac_func" >&5 +echo "configure:6294: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2623 "configure" +#line 6299 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -2642,7 +6318,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:2646: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -2832,9 +6508,11 @@ s%@build_alias@%$build_alias%g s%@build_cpu@%$build_cpu%g s%@build_vendor@%$build_vendor%g s%@build_os@%$build_os%g +s%@OBJEXT@%$OBJEXT%g +s%@EXEEXT@%$EXEEXT%g +s%@ECHO@%$ECHO%g s%@RANLIB@%$RANLIB%g -s%@LD@%$LD%g -s%@NM@%$NM%g +s%@STRIP@%$STRIP%g s%@LIBTOOL@%$LIBTOOL%g s%@AX25_LIB@%$AX25_LIB%g s%@NCURSES_LIB@%$NCURSES_LIB%g diff --git a/configure.in b/configure.in index fdb9103..ebca718 100644 --- a/configure.in +++ b/configure.in @@ -77,3 +77,4 @@ if test "x$GCC" = "xyes"; then fi AC_OUTPUT(call/Makefile ax25ipd/Makefile listen/Makefile Makefile ax25rtd/Makefile ax25mond/Makefile) + diff --git a/listen/Makefile.in b/listen/Makefile.in index 9f1fe31..2672438 100644 --- a/listen/Makefile.in +++ b/listen/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated automatically by automake 1.4 from Makefile.am +# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation @@ -64,15 +64,17 @@ AWK = @AWK@ AX25_LIB = @AX25_LIB@ CC = @CC@ DLLTOOL = @DLLTOOL@ -LD = @LD@ +ECHO = @ECHO@ +EXEEXT = @EXEEXT@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ NCURSES_LIB = @NCURSES_LIB@ -NM = @NM@ OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ RANLIB = @RANLIB@ +STRIP = @STRIP@ VERSION = @VERSION@ bin_PROGRAMS = listen @@ -88,6 +90,7 @@ listen_SOURCES = listen.c listen.h kissdump.c ax25dump.c nrdump.c arpdump mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = +bin_PROGRAMS = listen$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) @@ -95,9 +98,11 @@ DEFS = @DEFS@ -I. -I$(srcdir) -I.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ -listen_OBJECTS = listen.o kissdump.o ax25dump.o nrdump.o arpdump.o \ -ipdump.o icmpdump.o udpdump.o tcpdump.o rspfdump.o ripdump.o rosedump.o \ -flexnetdump.o utils.o +listen_OBJECTS = listen.$(OBJEXT) kissdump.$(OBJEXT) ax25dump.$(OBJEXT) \ +nrdump.$(OBJEXT) arpdump.$(OBJEXT) ipdump.$(OBJEXT) icmpdump.$(OBJEXT) \ +udpdump.$(OBJEXT) tcpdump.$(OBJEXT) rspfdump.$(OBJEXT) \ +ripdump.$(OBJEXT) rosedump.$(OBJEXT) flexnetdump.$(OBJEXT) \ +utils.$(OBJEXT) listen_LDADD = $(LDADD) listen_DEPENDENCIES = listen_LDFLAGS = @@ -122,7 +127,7 @@ OBJECTS = $(listen_OBJECTS) all: all-redirect .SUFFIXES: -.SUFFIXES: .S .c .lo .o .s +.SUFFIXES: .S .c .lo .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps listen/Makefile @@ -159,6 +164,11 @@ uninstall-binPROGRAMS: .c.o: $(COMPILE) -c $< +# FIXME: We should only use cygpath when building on Windows, +# and only if it is available. +.c.obj: + $(COMPILE) -c `cygpath -w $<` + .s.o: $(COMPILE) -c $< @@ -167,6 +177,7 @@ uninstall-binPROGRAMS: mostlyclean-compile: -rm -f *.o core *.core + -rm -f *.$(OBJEXT) clean-compile: @@ -194,8 +205,8 @@ distclean-libtool: maintainer-clean-libtool: -listen: $(listen_OBJECTS) $(listen_DEPENDENCIES) - @rm -f listen +listen$(EXEEXT): $(listen_OBJECTS) $(listen_DEPENDENCIES) + @rm -f listen$(EXEEXT) $(LINK) $(listen_LDFLAGS) $(listen_OBJECTS) $(listen_LDADD) $(LIBS) install-man1: diff --git a/listen/arpdump.c b/listen/arpdump.c index c399098..ef94c00 100644 --- a/listen/arpdump.c +++ b/listen/arpdump.c @@ -1,4 +1,4 @@ -/* @(#) $Header: /home/ax25-cvs/ax25-apps/listen/arpdump.c,v 1.1 2001/04/10 01:58:51 csmall Exp $ */ +/* @(#) $Header: /home/ax25-cvs/ax25-apps/listen/arpdump.c,v 1.2 2001/09/12 13:18:43 terry Exp $ */ /* ARP packet tracing routines * Copyright 1991 Phil Karn, KA9Q @@ -31,20 +31,18 @@ void arp_dump(unsigned char *data, int length) lprintf(T_PROTOCOL, "ARP: "); lprintf(T_IPHDR, "len %d", length); - if (length < 16) - { + if (length < 16) { lprintf(T_ERROR, " bad packet\n"); return; } - hardware = get16(data + 0); - protocol = get16(data + 2); - hwlen = data[4]; - pralen = data[5]; + hardware = get16(data + 0); + protocol = get16(data + 2); + hwlen = data[4]; + pralen = data[5]; operation = get16(data + 6); - - if (hardware != ARP_AX25) - { + + if (hardware != ARP_AX25) { lprintf(T_IPHDR, " non-AX25 ARP packet\n"); return; } @@ -57,18 +55,14 @@ void arp_dump(unsigned char *data, int length) if (hwlen != AXALEN) lprintf(T_IPHDR, " hwlen %d", hwlen); - if (protocol == PID_IP) - { + if (protocol == PID_IP) { lprintf(T_IPHDR, " prot IP"); is_ip = 1; - } - else - { + } else { lprintf(T_IPHDR, " prot 0x%x prlen %d", protocol, pralen); } - switch (operation) - { + switch (operation) { case ARP_REQUEST: lprintf(T_IPHDR, " op REQUEST"); break; @@ -85,21 +79,23 @@ void arp_dump(unsigned char *data, int length) lprintf(T_IPHDR, " op %d", operation); break; } - - shwaddr = data + 8; + + shwaddr = data + 8; sprotaddr = shwaddr + hwlen; - - thwaddr = sprotaddr + pralen; - tprotaddr = thwaddr + hwlen; - + + thwaddr = sprotaddr + pralen; + tprotaddr = thwaddr + hwlen; + lprintf(T_IPHDR, "\nsender"); - if (is_ip) lprintf(T_ADDR, " IPaddr %d.%d.%d.%d", + if (is_ip) + lprintf(T_ADDR, " IPaddr %d.%d.%d.%d", sprotaddr[0], sprotaddr[1], sprotaddr[2], sprotaddr[3]); lprintf(T_IPHDR, " hwaddr %s\n", pax25(tmp, shwaddr)); - lprintf(T_IPHDR,"target"); - if (is_ip) lprintf(T_ADDR, " IPaddr %d.%d.%d.%d", + lprintf(T_IPHDR, "target"); + if (is_ip) + lprintf(T_ADDR, " IPaddr %d.%d.%d.%d", tprotaddr[0], tprotaddr[1], tprotaddr[2], tprotaddr[3]); if (*thwaddr != 0) diff --git a/listen/ax25dump.c b/listen/ax25dump.c index 5265453..4c4a40c 100644 --- a/listen/ax25dump.c +++ b/listen/ax25dump.c @@ -1,4 +1,4 @@ -/* @(#) $Header: /home/ax25-cvs/ax25-apps/listen/ax25dump.c,v 1.1 2001/04/10 01:58:51 csmall Exp $ */ +/* @(#) $Header: /home/ax25-cvs/ax25-apps/listen/ax25dump.c,v 1.2 2001/09/12 13:18:43 terry Exp $ */ /* AX25 header tracing * Copyright 1991 Phil Karn, KA9Q @@ -57,7 +57,7 @@ #define Y 4 #define Z 8 -static int ftype(unsigned char *, int *, int *, int *, int *, int); +static int ftype(unsigned char *, int *, int *, int *, int *, int); static char *decode_type(int); #define NDAMA_STRING "" @@ -90,11 +90,13 @@ void ax25_dump(unsigned char *data, int length, int hexdump) tmp[4] = ' ' + (data[5] >> 2); tmp[5] = ' ' + ((data[5] << 4) & 0x30) + (data[6] >> 4); if (data[6] & 0xf) - sprintf(tmp+7, "-%d", data[6] & 0xf); - lprintf(T_ADDR, "%d->%s%s", (data[0] << 6) | ((data[1] >> 2) & 0x3f), strtok(tmp, " "), tmp+7); + sprintf(tmp + 7, "-%d", data[6] & 0xf); + lprintf(T_ADDR, "%d->%s%s", + (data[0] << 6) | ((data[1] >> 2) & 0x3f), + strtok(tmp, " "), tmp + 7); cmdrsp = (data[1] & 2) ? LAPB_COMMAND : LAPB_RESPONSE; dama = NDAMA_STRING; - data += 7; + data += 7; length -= 7; } else { /* Extract the address header */ @@ -103,124 +105,133 @@ void ax25_dump(unsigned char *data, int length, int hexdump) lprintf(T_ERROR, "AX25: bad header!\n"); return; } - + if ((data[AXLEN + ALEN] & SSSID_SPARE) == SSSID_SPARE) { extseq = 0; -// lprintf(T_PROTOCOL, " "); +// lprintf(T_PROTOCOL, " "); } else { extseq = 1; lprintf(T_PROTOCOL, "EAX25: "); } - + if ((data[AXLEN + ALEN] & ESSID_SPARE) == ESSID_SPARE) dama = NDAMA_STRING; else dama = DAMA_STRING; - - lprintf(T_AXHDR, "fm "); + + lprintf(T_AXHDR, "fm "); lprintf(T_ADDR, "%s", pax25(tmp, data + AXLEN)); lprintf(T_AXHDR, " to "); lprintf(T_ADDR, "%s", pax25(tmp, data)); - + cmdrsp = LAPB_UNKNOWN; - + if ((data[ALEN] & C) && !(data[AXLEN + ALEN] & C)) cmdrsp = LAPB_COMMAND; - + if ((data[AXLEN + ALEN] & C) && !(data[ALEN] & C)) cmdrsp = LAPB_RESPONSE; end = (data[AXLEN + ALEN] & HDLCAEB); - - data += (AXLEN + AXLEN); + + data += (AXLEN + AXLEN); length -= (AXLEN + AXLEN); if (!end) { lprintf(T_AXHDR, " via"); - + while (!end) { /* Print digi string */ - lprintf(T_ADDR," %s%s", pax25(tmp, data), (data[ALEN] & REPEATED) ? "*" : ""); - + lprintf(T_ADDR, " %s%s", pax25(tmp, data), + (data[ALEN] & REPEATED) ? "*" : + ""); + end = (data[ALEN] & HDLCAEB); - - data += AXLEN; + + data += AXLEN; length -= AXLEN; } } } - if (length == 0) return; - + if (length == 0) + return; + ctlen = ftype(data, &type, &ns, &nr, &pf, extseq); - - data += ctlen; + + data += ctlen; length -= ctlen; lprintf(T_AXHDR, " ctl %s", decode_type(type)); - if ((type & 0x3) != U) /* I or S frame? */ - lprintf(T_AXHDR, "%d", nr); + if ((type & 0x3) != U) /* I or S frame? */ + lprintf(T_AXHDR, "%d", nr); if (type == I) - lprintf(T_AXHDR, "%d", ns); - + lprintf(T_AXHDR, "%d", ns); + switch (cmdrsp) { - case LAPB_COMMAND: - if (pf) lprintf(T_AXHDR, "+"); - else lprintf(T_AXHDR, "^"); - break; - case LAPB_RESPONSE: - if (pf) lprintf(T_AXHDR, "-"); - else lprintf(T_AXHDR, "v"); - break; - default: - break; + case LAPB_COMMAND: + if (pf) + lprintf(T_AXHDR, "+"); + else + lprintf(T_AXHDR, "^"); + break; + case LAPB_RESPONSE: + if (pf) + lprintf(T_AXHDR, "-"); + else + lprintf(T_AXHDR, "v"); + break; + default: + break; } if (type == I || type == UI) { /* Decode I field */ - if (length > 0) { /* Get pid */ + if (length > 0) { /* Get pid */ pid = *data++; length--; - lprintf(T_AXHDR," pid=%X",pid); - - switch (pid) { - case PID_SEGMENT: - lprintf(T_AXHDR,"(segment)"); - break; - case PID_ARP: - lprintf(T_AXHDR,"(ARP)"); - break; - case PID_NETROM: - lprintf(T_AXHDR,"(NET/ROM)"); - break; - case PID_IP: - lprintf(T_AXHDR,"(IP)"); - break; - case PID_X25: - lprintf(T_AXHDR, "(X.25)"); - break; - case PID_TEXNET: - lprintf(T_AXHDR, "(TEXNET)"); - break; - case PID_FLEXNET: - lprintf(T_AXHDR, "(FLEXNET)"); - break; - case PID_NO_L3: - lprintf(T_AXHDR, "(Text)"); - break; + lprintf(T_AXHDR, " pid=%X", pid); + + switch (pid) { + case PID_SEGMENT: + lprintf(T_AXHDR, "(segment)"); + break; + case PID_ARP: + lprintf(T_AXHDR, "(ARP)"); + break; + case PID_NETROM: + lprintf(T_AXHDR, "(NET/ROM)"); + break; + case PID_IP: + lprintf(T_AXHDR, "(IP)"); + break; + case PID_X25: + lprintf(T_AXHDR, "(X.25)"); + break; + case PID_TEXNET: + lprintf(T_AXHDR, "(TEXNET)"); + break; + case PID_FLEXNET: + lprintf(T_AXHDR, "(FLEXNET)"); + break; + case PID_NO_L3: + lprintf(T_AXHDR, "(Text)"); + break; } - lprintf(T_AXHDR, "%s len %d ",dama,length); + lprintf(T_AXHDR, "%s len %d ", dama, length); - if(timestamp) + if (timestamp) display_timestamp(); if (pid == PID_SEGMENT) { seg = *data++; length--; - lprintf(T_AXHDR, "%s remain %u", seg & SEG_FIRST ? " First seg;" : "", seg & SEG_REM); + lprintf(T_AXHDR, "%s remain %u", + seg & SEG_FIRST ? " First seg;" : + "", seg & SEG_REM); if (seg & SEG_FIRST) { pid = *data++; @@ -230,99 +241,99 @@ void ax25_dump(unsigned char *data, int length, int hexdump) lprintf(T_AXHDR, "\n"); switch (pid) { - case PID_SEGMENT: - data_dump(data, length, hexdump); - break; - case PID_ARP: - arp_dump(data, length); - break; - case PID_NETROM: - netrom_dump(data, length, hexdump); - break; - case PID_IP: - ip_dump(data, length, hexdump); - break; - case PID_X25: - rose_dump(data, length, hexdump); - break; - case PID_TEXNET: - data_dump(data, length, hexdump); - break; - case PID_FLEXNET: - flexnet_dump(data, length, hexdump); - break; - case PID_NO_L3: - data_dump(data, length, hexdump); - break; - default: - data_dump(data, length, hexdump); - break; + case PID_SEGMENT: + data_dump(data, length, hexdump); + break; + case PID_ARP: + arp_dump(data, length); + break; + case PID_NETROM: + netrom_dump(data, length, hexdump); + break; + case PID_IP: + ip_dump(data, length, hexdump); + break; + case PID_X25: + rose_dump(data, length, hexdump); + break; + case PID_TEXNET: + data_dump(data, length, hexdump); + break; + case PID_FLEXNET: + flexnet_dump(data, length, hexdump); + break; + case PID_NO_L3: + data_dump(data, length, hexdump); + break; + default: + data_dump(data, length, hexdump); + break; } } } else if (type == FRMR && length >= 3) { - /* FIX ME XXX - lprintf(T_AXHDR, ": %s", decode_type(ftype(data[0]))); - */ + /* FIX ME XXX + lprintf(T_AXHDR, ": %s", decode_type(ftype(data[0]))); + */ lprintf(T_AXHDR, ": %02X", data[0]); lprintf(T_AXHDR, " Vr = %d Vs = %d", - (data[1] >> 5) & MMASK, - (data[1] >> 1) & MMASK); - if(data[2] & W) + (data[1] >> 5) & MMASK, (data[1] >> 1) & MMASK); + if (data[2] & W) lprintf(T_ERROR, " Invalid control field"); - if(data[2] & X) + if (data[2] & X) lprintf(T_ERROR, " Illegal I-field"); - if(data[2] & Y) + if (data[2] & Y) lprintf(T_ERROR, " Too-long I-field"); - if(data[2] & Z) + if (data[2] & Z) lprintf(T_ERROR, " Invalid seq number"); - lprintf(T_AXHDR,"%s ", dama); + lprintf(T_AXHDR, "%s ", dama); - if(timestamp) - display_timestamp(); - lprintf(T_AXHDR,"\n"); + if (timestamp) + display_timestamp(); + lprintf(T_AXHDR, "\n"); } else if ((type == SABM || type == UA) && length >= 2) { /* FlexNet transmits the QSO "handle" for header * compression in SABM and UA frame data fields */ - lprintf(T_AXHDR," [%d]%s ", (data[0] << 8) | data[1], dama); - if(timestamp) + lprintf(T_AXHDR, " [%d]%s ", (data[0] << 8) | data[1], + dama); + if (timestamp) display_timestamp(); - lprintf(T_AXHDR,"\n"); + lprintf(T_AXHDR, "\n"); } else { - lprintf(T_AXHDR,"%s ", dama); - if(timestamp) - display_timestamp(); - lprintf(T_AXHDR,"\n"); + lprintf(T_AXHDR, "%s ", dama); + if (timestamp) + display_timestamp(); + lprintf(T_AXHDR, "\n"); } } static char *decode_type(int type) { switch (type) { - case I: - return "I"; - case SABM: - return "SABM"; - case SABME: - return "SABME"; - case DISC: - return "DISC"; - case DM: - return "DM"; - case UA: - return "UA"; - case RR: - return "RR"; - case RNR: - return "RNR"; - case REJ: - return "REJ"; - case FRMR: - return "FRMR"; - case UI: - return "UI"; - default: - return "[invalid]"; + case I: + return "I"; + case SABM: + return "SABM"; + case SABME: + return "SABME"; + case DISC: + return "DISC"; + case DM: + return "DM"; + case UA: + return "UA"; + case RR: + return "RR"; + case RNR: + return "RNR"; + case REJ: + return "REJ"; + case FRMR: + return "FRMR"; + case UI: + return "UI"; + default: + return "[invalid]"; } } @@ -331,9 +342,9 @@ char *pax25(char *buf, unsigned char *data) int i, ssid; char *s; char c; - + s = buf; - + for (i = 0; i < ALEN; i++) { c = (data[i] >> 1) & 0x7F; @@ -341,56 +352,58 @@ char *pax25(char *buf, unsigned char *data) strcpy(buf, "[invalid]"); return buf; } - - if (c != ' ') *s++ = c; - } + + if (c != ' ') + *s++ = c; + } if ((ssid = (data[ALEN] & SSID)) != 0) sprintf(s, "-%d", ssid >> 1); else *s = '\0'; - return(buf); + return (buf); } -static int ftype(unsigned char *data, int *type, int *ns, int *nr, int *pf, int extseq) +static int ftype(unsigned char *data, int *type, int *ns, int *nr, int *pf, + int extseq) { if (extseq) { if ((*data & 0x01) == 0) { /* An I frame is an I-frame ... */ *type = I; - *ns = (*data >> 1) & 127; + *ns = (*data >> 1) & 127; data++; - *nr = (*data >> 1) & 127; - *pf = *data & EPF; + *nr = (*data >> 1) & 127; + *pf = *data & EPF; return 2; } if (*data & 0x02) { *type = *data & ~PF; - *pf = *data & PF; + *pf = *data & PF; return 1; } else { *type = *data; data++; - *nr = (*data >> 1) & 127; - *pf = *data & EPF; + *nr = (*data >> 1) & 127; + *pf = *data & EPF; return 2; } } else { if ((*data & 0x01) == 0) { /* An I frame is an I-frame ... */ *type = I; - *ns = (*data >> 1) & 7; - *nr = (*data >> 5) & 7; - *pf = *data & PF; + *ns = (*data >> 1) & 7; + *nr = (*data >> 5) & 7; + *pf = *data & PF; return 1; } - if (*data & 0x02) { /* U-frames use all except P/F bit for type */ + if (*data & 0x02) { /* U-frames use all except P/F bit for type */ *type = *data & ~PF; - *pf = *data & PF; + *pf = *data & PF; return 1; - } else { /* S-frames use low order 4 bits for type */ + } else { /* S-frames use low order 4 bits for type */ *type = *data & 0x0F; - *nr = (*data >> 5) & 7; - *pf = *data & PF; + *nr = (*data >> 5) & 7; + *pf = *data & PF; return 1; } } diff --git a/listen/flexnetdump.c b/listen/flexnetdump.c index 3269390..a96f00f 100644 --- a/listen/flexnetdump.c +++ b/listen/flexnetdump.c @@ -12,19 +12,19 @@ * some bits stolen from Dieter Deyke (Wampes), such as these defines :-) */ -#define FLEX_INIT '0' /* Link initialization */ -#define FLEX_RPRT '1' /* Poll answer */ -#define FLEX_POLL '2' /* Poll */ -#define FLEX_ROUT '3' /* Routing information */ -#define FLEX_QURY '6' /* Path query */ -#define FLEX_RSLT '7' /* Query result */ +#define FLEX_INIT '0' /* Link initialization */ +#define FLEX_RPRT '1' /* Poll answer */ +#define FLEX_POLL '2' /* Poll */ +#define FLEX_ROUT '3' /* Routing information */ +#define FLEX_QURY '6' /* Path query */ +#define FLEX_RSLT '7' /* Query result */ static int flx_get_number(unsigned char **data, int *length) { int l = *length; unsigned char *d = *data; int res = 0; - + if (l <= 0 || *d < '0' || *d > '9') return -1; while (l > 0 && *d >= '0' && *d <= '9') { @@ -51,26 +51,27 @@ void flexnet_dump(unsigned char *data, int length, int hexdump) int hopcnt, qsonr; unsigned char *cp; - lprintf(T_PROTOCOL, "FlexNet:"); + lprintf(T_PROTOCOL, "FlexNet:"); if (length < 1) { - lprintf(T_ERROR, " bad packet\n"); - return; - } + lprintf(T_ERROR, " bad packet\n"); + return; + } switch (data[0]) { default: - lprintf(T_ERROR, " unknown packet type\n"); + lprintf(T_ERROR, " unknown packet type\n"); data_dump(data, length, hexdump); return; case FLEX_INIT: if (length < 2) { lprintf(T_ERROR, " bad packet\n"); - dump_end(data+1, length-1); + dump_end(data + 1, length - 1); return; } - lprintf(T_FLEXNET, " Link setup - max SSID %d ", data[1] & 0xf); - dump_end(data+1, length-1); + lprintf(T_FLEXNET, " Link setup - max SSID %d ", + data[1] & 0xf); + dump_end(data + 1, length - 1); return; case FLEX_RPRT: @@ -98,29 +99,35 @@ void flexnet_dump(unsigned char *data, int length, int hexdump) if (isdigit(*data) || isupper(*data)) { if (length < 10) goto too_short; - lprintf(T_FLEXNET, " %.6s %2d-%2d ", data, data[6]-'0', data[7]-'0'); + lprintf(T_FLEXNET, " %.6s %2d-%2d ", data, + data[6] - '0', data[7] - '0'); data += 8; length -= 8; i = flx_get_number(&data, &length); data++; length--; - if (!i) + if (!i) lprintf(T_FLEXNET, "link down\n"); - else - lprintf(T_FLEXNET, "delay: %d\n", i); + else + lprintf(T_FLEXNET, "delay: %d\n", + i); } else { - if (*data == '+') - lprintf(T_FLEXNET, " Request token\n"); + if (*data == '+') + lprintf(T_FLEXNET, + " Request token\n"); else if (*data == '-') - lprintf(T_FLEXNET, " Release token\n"); + lprintf(T_FLEXNET, + " Release token\n"); else if (*data != '\r') - lprintf(T_FLEXNET, " invalid char: %02x\n", *data); + lprintf(T_FLEXNET, + " invalid char: %02x\n", + *data); data++; length--; } } return; - + case FLEX_QURY: case FLEX_RSLT: lprintf(T_FLEXNET, " Route query"); @@ -134,7 +141,8 @@ void flexnet_dump(unsigned char *data, int length, int hexdump) qsonr = flx_get_number(&data, &length); data++; length--; - lprintf(T_FLEXNET, " - hop count: %d QSO number: %d\n", hopcnt, qsonr); + lprintf(T_FLEXNET, " - hop count: %d QSO number: %d\n", + hopcnt, qsonr); cp = memchr(data, '\r', length); if (cp) *cp = 0; @@ -142,8 +150,7 @@ void flexnet_dump(unsigned char *data, int length, int hexdump) return; } -too_short: + too_short: lprintf(T_ERROR, " packet too short\n"); dump_end(data, length); } - diff --git a/listen/icmpdump.c b/listen/icmpdump.c index 2b51e7f..dcec1b0 100644 --- a/listen/icmpdump.c +++ b/listen/icmpdump.c @@ -1,4 +1,4 @@ -/* @(#) $Header: /home/ax25-cvs/ax25-apps/listen/icmpdump.c,v 1.1 2001/04/10 01:58:52 csmall Exp $ */ +/* @(#) $Header: /home/ax25-cvs/ax25-apps/listen/icmpdump.c,v 1.2 2001/09/12 13:18:44 terry Exp $ */ /* ICMP header tracing * Copyright 1991 Phil Karn, KA9Q @@ -29,14 +29,14 @@ void icmp_dump(unsigned char *data, int length, int hexdump) unsigned char *address; int id, seq; - type = data[0]; - code = data[1]; + type = data[0]; + code = data[1]; pointer = data[4]; address = data + 4; - id = get16(data + 4); - seq = get16(data + 6); + id = get16(data + 4); + seq = get16(data + 6); - data += ICMPLEN; + data += ICMPLEN; length -= ICMPLEN; lprintf(T_IPHDR, "ICMP: type "); @@ -119,8 +119,7 @@ void icmp_dump(unsigned char *data, int length, int hexdump) break; } lprintf(T_IPHDR, " new gateway %d.%d.%d.%d", - address[0], address[1], - address[2], address[3]); + address[0], address[1], address[2], address[3]); lprintf(T_IPHDR, "\nReturned "); ip_dump(data, length, hexdump); break; @@ -168,22 +167,26 @@ void icmp_dump(unsigned char *data, int length, int hexdump) break; case ICMP_INFO_RQST: - lprintf(T_IPHDR, "Information Request id %d seq %d\n", id, seq); + lprintf(T_IPHDR, "Information Request id %d seq %d\n", id, + seq); data_dump(data, length, hexdump); break; case ICMP_INFO_REPLY: - lprintf(T_IPHDR, "Information Reply id %d seq %d\n", id, seq); + lprintf(T_IPHDR, "Information Reply id %d seq %d\n", id, + seq); data_dump(data, length, hexdump); break; case ICMP_TIMESTAMP: - lprintf(T_IPHDR, "Timestamp Request id %d seq %d\n", id, seq); + lprintf(T_IPHDR, "Timestamp Request id %d seq %d\n", id, + seq); data_dump(data, length, hexdump); break; case ICMP_TIME_REPLY: - lprintf(T_IPHDR, "Timestamp Reply id %d seq %d\n", id, seq); + lprintf(T_IPHDR, "Timestamp Reply id %d seq %d\n", id, + seq); data_dump(data, length, hexdump); break; @@ -193,4 +196,3 @@ void icmp_dump(unsigned char *data, int length, int hexdump) break; } } - diff --git a/listen/ipdump.c b/listen/ipdump.c index fc14461..8dfc433 100644 --- a/listen/ipdump.c +++ b/listen/ipdump.c @@ -1,4 +1,4 @@ -/* @(#) $Header: /home/ax25-cvs/ax25-apps/listen/ipdump.c,v 1.1 2001/04/10 01:58:52 csmall Exp $ */ +/* @(#) $Header: /home/ax25-cvs/ax25-apps/listen/ipdump.c,v 1.2 2001/09/12 13:18:44 terry Exp $ */ /* IP header tracing routines * Copyright 1991 Phil Karn, KA9Q @@ -12,8 +12,8 @@ #define DF 0x4000 #define CE 0x8000 -#define IPIPNEW_PTCL 4 -#define IPIPOLD_PTCL 94 +#define IPIPNEW_PTCL 4 +#define IPIPOLD_PTCL 94 #define TCP_PTCL 6 #define UDP_PTCL 17 #define ICMP_PTCL 1 @@ -37,42 +37,45 @@ void ip_dump(unsigned char *data, int length, int hexdump) /* Sneak peek at IP header and find length */ hdr_length = (data[0] & 0xf) << 2; - - if (hdr_length < IPLEN) - { + + if (hdr_length < IPLEN) { lprintf(T_ERROR, " bad header\n"); return; } - tos = data[1]; + tos = data[1]; ip_length = get16(data + 2); - id = get16(data + 4); - fl_offs = get16(data + 6); - flags = fl_offs & 0xE000; - offset = (fl_offs & 0x1FFF) << 3; - ttl = data[8]; - protocol = data[9]; - source = data + 12; - dest = data + 16; + id = get16(data + 4); + fl_offs = get16(data + 6); + flags = fl_offs & 0xE000; + offset = (fl_offs & 0x1FFF) << 3; + ttl = data[8]; + protocol = data[9]; + source = data + 12; + dest = data + 16; lprintf(T_IPHDR, " len %d", ip_length); - + lprintf(T_ADDR, " %d.%d.%d.%d->%d.%d.%d.%d", - source[0], source[1], source[2], source[3], - dest[0], dest[1], dest[2], dest[3]); - + source[0], source[1], source[2], source[3], + dest[0], dest[1], dest[2], dest[3]); + lprintf(T_IPHDR, " ihl %d ttl %d", hdr_length, ttl); - - if (tos != 0) lprintf(T_IPHDR, " tos %d", tos); - + + if (tos != 0) + lprintf(T_IPHDR, " tos %d", tos); + if (offset != 0 || (flags & MF)) lprintf(T_IPHDR, " id %d offs %d", id, offset); - - if (flags & DF) lprintf(T_IPHDR, " DF"); - if (flags & MF) lprintf(T_IPHDR, " MF"); - if (flags & CE) lprintf(T_IPHDR, " CE"); - - data += hdr_length; + + if (flags & DF) + lprintf(T_IPHDR, " DF"); + if (flags & MF) + lprintf(T_IPHDR, " MF"); + if (flags & CE) + lprintf(T_IPHDR, " CE"); + + data += hdr_length; length -= hdr_length; if (offset != 0) { diff --git a/listen/kissdump.c b/listen/kissdump.c index 0066f63..14c7909 100644 --- a/listen/kissdump.c +++ b/listen/kissdump.c @@ -1,4 +1,4 @@ -/* @(#) $Header: /home/ax25-cvs/ax25-apps/listen/kissdump.c,v 1.1 2001/04/10 01:58:53 csmall Exp $ */ +/* @(#) $Header: /home/ax25-cvs/ax25-apps/listen/kissdump.c,v 1.2 2001/09/12 13:18:44 terry Exp $ */ /* Tracing routines for KISS TNC * Copyright 1991 Phil Karn, KA9Q @@ -13,7 +13,7 @@ #define PARAM_TXTAIL 4 #define PARAM_FULLDUP 5 #define PARAM_HW 6 -#define PARAM_RETURN 15 /* Should be 255, but is ANDed with 0x0F */ +#define PARAM_RETURN 15 /* Should be 255, but is ANDed with 0x0F */ void ki_dump(unsigned char *data, int length, int hexdump) { @@ -22,16 +22,14 @@ void ki_dump(unsigned char *data, int length, int hexdump) type = data[0] & 0xf; - if (type == PARAM_DATA) - { + if (type == PARAM_DATA) { ax25_dump(data + 1, length - 1, hexdump); return; } - + val = data[1]; - - switch (type) - { + + switch (type) { case PARAM_TXDELAY: lprintf(T_KISS, "TX Delay: %lu ms\n", val * 10L); break; @@ -45,7 +43,8 @@ void ki_dump(unsigned char *data, int length, int hexdump) lprintf(T_KISS, "TX Tail time: %lu ms\n", val * 10L); break; case PARAM_FULLDUP: - lprintf(T_KISS, "Duplex: %s\n", val == 0 ? "Half" : "Full"); + lprintf(T_KISS, "Duplex: %s\n", + val == 0 ? "Half" : "Full"); break; case PARAM_HW: lprintf(T_KISS, "Hardware %u\n", val); diff --git a/listen/listen.c b/listen/listen.c index f603f12..be6dfbe 100644 --- a/listen/listen.c +++ b/listen/listen.c @@ -42,12 +42,13 @@ static void display_port(char *dev) void display_timestamp(void) { time_t timenowx; - struct tm* timenow; + struct tm *timenow; time(&timenowx); timenow = localtime(&timenowx); - lprintf(T_TIMESTAMP, "%02d:%02d:%02d", timenow->tm_hour, timenow->tm_min, timenow->tm_sec); + lprintf(T_TIMESTAMP, "%02d:%02d:%02d", timenow->tm_hour, + timenow->tm_min, timenow->tm_sec); } #define ASCII 0 @@ -59,7 +60,7 @@ void display_timestamp(void) int main(int argc, char **argv) { unsigned char buffer[BUFSIZE]; - int dumpstyle = ASCII; + int dumpstyle = ASCII; int size; int s; char *port = NULL, *dev = NULL; @@ -68,43 +69,45 @@ int main(int argc, char **argv) struct ifreq ifr; int proto = ETH_P_AX25; - timestamp = 0; + timestamp = 0; while ((s = getopt(argc, argv, "8achip:rtv")) != -1) { switch (s) { - case '8': - sevenbit = 0; - break; - case 'a': - proto = ETH_P_ALL; - break; - case 'c': - color = 1; - break; - case 'h': - dumpstyle = HEX; - break; - case 'i': - ibmhack = 1; - break; - case 'p': - port = optarg; - break; - case 'r': - dumpstyle = READABLE; - break; - case 't': - timestamp = 1; - break; - case 'v': - printf("listen: %s\n", VERSION); - return 0; - case ':': - fprintf(stderr, "listen: option -p needs a port name\n"); - return 1; - case '?': - fprintf(stderr, "Usage: listen [-8] [-a] [-c] [-h] [-i] [-p port] [-r] [-t] [-v]\n"); - return 1; + case '8': + sevenbit = 0; + break; + case 'a': + proto = ETH_P_ALL; + break; + case 'c': + color = 1; + break; + case 'h': + dumpstyle = HEX; + break; + case 'i': + ibmhack = 1; + break; + case 'p': + port = optarg; + break; + case 'r': + dumpstyle = READABLE; + break; + case 't': + timestamp = 1; + break; + case 'v': + printf("listen: %s\n", VERSION); + return 0; + case ':': + fprintf(stderr, + "listen: option -p needs a port name\n"); + return 1; + case '?': + fprintf(stderr, + "Usage: listen [-8] [-a] [-c] [-h] [-i] [-p port] [-r] [-t] [-v]\n"); + return 1; } } @@ -113,7 +116,8 @@ int main(int argc, char **argv) if (port != NULL) { if ((dev = ax25_config_get_dev(port)) == NULL) { - fprintf(stderr, "listen: invalid port name - %s\n", port); + fprintf(stderr, "listen: invalid port name - %s\n", + port); return 1; } } @@ -122,7 +126,7 @@ int main(int argc, char **argv) perror("socket"); return 1; } - + if (color) { color = initcolor(); /* Initialize color support */ if (!color) @@ -130,18 +134,20 @@ int main(int argc, char **argv) } setservent(1); - + for (;;) { asize = sizeof(sa); - if ((size = recvfrom(s, buffer, sizeof(buffer), 0, &sa, &asize)) == -1) { + if ((size = + recvfrom(s, buffer, sizeof(buffer), 0, &sa, + &asize)) == -1) { perror("recv"); return 1; } - + if (dev != NULL && strcmp(dev, sa.sa_data) != 0) continue; - + if (proto == ETH_P_ALL) { strcpy(ifr.ifr_name, sa.sa_data); if (ioctl(s, SIOCGIFHWADDR, &ifr) < 0) @@ -154,16 +160,16 @@ int main(int argc, char **argv) #else ki_dump(buffer, size, dumpstyle); #endif -// lprintf(T_DATA, "\n"); +// lprintf(T_DATA, "\n"); } } else { display_port(sa.sa_data); #ifdef NEW_AX25_STACK ax25_dump(buffer, size, dumpstyle); #else - ki_dump(buffer, size, dumpstyle); + ki_dump(buffer, size, dumpstyle); #endif -// lprintf(T_DATA, "\n"); +// lprintf(T_DATA, "\n"); } if (color) refresh(); @@ -173,22 +179,22 @@ int main(int argc, char **argv) static void ascii_dump(unsigned char *data, int length) { unsigned char c; - int i, j; + int i, j; char buf[100]; for (i = 0; length > 0; i += 64) { sprintf(buf, "%04X ", i); - + for (j = 0; j < 64 && length > 0; j++) { c = *data++; length--; - + if ((c != '\0') && (c != '\n')) strncat(buf, &c, 1); else strcat(buf, "."); } - + lprintf(T_DATA, "%s\n", buf); } } @@ -196,27 +202,27 @@ static void ascii_dump(unsigned char *data, int length) static void readable_dump(unsigned char *data, int length) { unsigned char c; - int i; - int cr = 1; + int i; + int cr = 1; char buf[BUFSIZE]; for (i = 0; length > 0; i++) { - + c = *data++; length--; - + switch (c) { - case 0x00: - buf[i] = ' '; - case 0x0A: /* hum... */ - case 0x0D: - if (cr) - buf[i] = '\n'; - else - i--; - break; - default: - buf[i] = c; + case 0x00: + buf[i] = ' '; + case 0x0A: /* hum... */ + case 0x0D: + if (cr) + buf[i] = '\n'; + else + i--; + break; + default: + buf[i] = c; } cr = (buf[i] != '\n'); } @@ -228,22 +234,22 @@ static void readable_dump(unsigned char *data, int length) static void hex_dump(unsigned char *data, int length) { - int i, j, length2; + int i, j, length2; unsigned char c; char *data2; char buf[4], hexd[49], ascd[17]; length2 = length; - data2 = data; - + data2 = data; + for (i = 0; length > 0; i += 16) { - + hexd[0] = '\0'; for (j = 0; j < 16; j++) { c = *data2++; length2--; - + if (length2 >= 0) sprintf(buf, "%2.2X ", c); else @@ -253,13 +259,14 @@ static void hex_dump(unsigned char *data, int length) ascd[0] = '\0'; for (j = 0; j < 16 && length > 0; j++) { - c = *data++; - length--; - - sprintf(buf, "%c", ((c != '\0') && (c != '\n')) ? c : '.'); - strcat(ascd, buf); + c = *data++; + length--; + + sprintf(buf, "%c", + ((c != '\0') && (c != '\n')) ? c : '.'); + strcat(ascd, buf); } - + lprintf(T_DATA, "%04X %s | %s\n", i, hexd, ascd); } } @@ -282,18 +289,18 @@ void data_dump(unsigned char *data, int length, int dumpstyle) int get16(unsigned char *cp) { int x; - + x = *cp++; x <<= 8; x |= *cp++; - - return(x); + + return (x); } int get32(unsigned char *cp) { int x; - + x = *cp++; x <<= 8; x |= *cp++; @@ -301,6 +308,6 @@ int get32(unsigned char *cp) x |= *cp++; x <<= 8; x |= *cp; - - return(x); + + return (x); } diff --git a/listen/nrdump.c b/listen/nrdump.c index a5a2bfc..42965e5 100644 --- a/listen/nrdump.c +++ b/listen/nrdump.c @@ -1,4 +1,4 @@ -/* @(#) $Header: /home/ax25-cvs/ax25-apps/listen/nrdump.c,v 1.1 2001/04/10 01:58:54 csmall Exp $ */ +/* @(#) $Header: /home/ax25-cvs/ax25-apps/listen/nrdump.c,v 1.2 2001/09/12 13:18:44 terry Exp $ */ /* NET/ROM header tracing routines * Copyright 1991 Phil Karn, KA9Q @@ -41,23 +41,26 @@ void netrom_dump(unsigned char *data, int length, int hexdump) memcpy(tmp, data + 1, ALEN); tmp[ALEN] = '\0'; lprintf(T_AXHDR, "NET/ROM Routing: %s\n", tmp); - - data += (ALEN + 1); + + data += (ALEN + 1); length -= (ALEN + 1); - for(i = 0;i < NRDESTPERPACK;i++) { - if (length < AXLEN) break; - - lprintf(T_DATA," %12s", pax25(tmp, data)); + for (i = 0; i < NRDESTPERPACK; i++) { + if (length < AXLEN) + break; + + lprintf(T_DATA, " %12s", pax25(tmp, data)); memcpy(tmp, data + AXLEN, ALEN); tmp[ALEN] = '\0'; lprintf(T_DATA, "%8s", tmp); - lprintf(T_DATA, " %12s", pax25(tmp, data + AXLEN + ALEN)); - lprintf(T_DATA, " %3u\n", data[AXLEN + ALEN + AXLEN]); + lprintf(T_DATA, " %12s", + pax25(tmp, data + AXLEN + ALEN)); + lprintf(T_DATA, " %3u\n", + data[AXLEN + ALEN + AXLEN]); - data += (AXLEN + ALEN + AXLEN + 1); + data += (AXLEN + ALEN + AXLEN + 1); length -= (AXLEN + ALEN + AXLEN + 1); } @@ -76,63 +79,73 @@ void netrom_dump(unsigned char *data, int length, int hexdump) lprintf(T_AXHDR, "NET/ROM: "); lprintf(T_ADDR, "%s->", pax25(tmp, data)); lprintf(T_ADDR, "%s", pax25(tmp, data + AXLEN)); - lprintf(T_AXHDR," ttl %d\n", data[AXLEN + AXLEN]); + lprintf(T_AXHDR, " ttl %d\n", data[AXLEN + AXLEN]); - data += (AXLEN + AXLEN + 1); + data += (AXLEN + AXLEN + 1); length -= (AXLEN + AXLEN + 1); switch (data[4] & NR4OPCODE) { - case NR4OPPID: /* network PID extension */ + case NR4OPPID: /* network PID extension */ if (data[0] == NRPROTO_IP && data[1] == NRPROTO_IP) { ip_dump(data + 5, length - 5, hexdump); return; } else { - lprintf(T_AXHDR, " protocol family %x, proto %x", - data[0], data[1]); + lprintf(T_AXHDR, + " protocol family %x, proto %x", + data[0], data[1]); } break; - case NR4OPCONRQ: /* Connect request */ - lprintf(T_AXHDR, " conn rqst: my ckt %02X/%02X", data[0], data[1]); + case NR4OPCONRQ: /* Connect request */ + lprintf(T_AXHDR, " conn rqst: my ckt %02X/%02X", + data[0], data[1]); lprintf(T_AXHDR, " wnd %d", data[5]); lprintf(T_ADDR, " %s", pax25(tmp, data + 6)); lprintf(T_ADDR, "@%s", pax25(tmp, data + 6 + AXLEN)); - data += AXLEN + AXLEN + 6; + data += AXLEN + AXLEN + 6; length -= AXLEN + AXLEN + 6; if (length > 0) - lprintf(T_AXHDR, " timeout %d", data[1] * 256 + data[0]); + lprintf(T_AXHDR, " timeout %d", + data[1] * 256 + data[0]); lprintf(T_AXHDR, "\n"); break; - case NR4OPCONAK: /* Connect acknowledgement */ - lprintf(T_AXHDR," conn ack: ur ckt %02X/%02X my ckt %02X/%02X", data[0], data[1], data[2], data[3]); + case NR4OPCONAK: /* Connect acknowledgement */ + lprintf(T_AXHDR, + " conn ack: ur ckt %02X/%02X my ckt %02X/%02X", + data[0], data[1], data[2], data[3]); lprintf(T_AXHDR, " wnd %d", data[5]); netrom_flags(data[4]); break; - case NR4OPDISRQ: /* Disconnect request */ - lprintf(T_AXHDR, " disc: ur ckt %02X/%02X\n", data[0], data[1]); + case NR4OPDISRQ: /* Disconnect request */ + lprintf(T_AXHDR, " disc: ur ckt %02X/%02X\n", + data[0], data[1]); break; - case NR4OPDISAK: /* Disconnect acknowledgement */ - lprintf(T_AXHDR, " disc ack: ur ckt %02X/%02X\n", data[0], data[1]); + case NR4OPDISAK: /* Disconnect acknowledgement */ + lprintf(T_AXHDR, " disc ack: ur ckt %02X/%02X\n", + data[0], data[1]); break; - case NR4OPINFO: /* Information (data) */ - lprintf(T_AXHDR, " info: ur ckt %02X/%02X", data[0], data[1]); + case NR4OPINFO: /* Information (data) */ + lprintf(T_AXHDR, " info: ur ckt %02X/%02X", + data[0], data[1]); lprintf(T_AXHDR, " txseq %d rxseq %d", data[2], data[3]); netrom_flags(data[4]); data_dump(data + 5, length - 5, hexdump); break; - case NR4OPACK: /* Information acknowledgement */ - lprintf(T_AXHDR, " info ack: ur ckt %02X/%02X", data[0], data[1]); + case NR4OPACK: /* Information acknowledgement */ + lprintf(T_AXHDR, " info ack: ur ckt %02X/%02X", + data[0], data[1]); lprintf(T_AXHDR, " rxseq %d", data[3]); netrom_flags(data[4]); break; default: - lprintf(T_AXHDR, " unknown transport type %d\n", data[4] & 0x0f) ; + lprintf(T_AXHDR, " unknown transport type %d\n", + data[4] & 0x0f); break; } } @@ -141,15 +154,13 @@ void netrom_dump(unsigned char *data, int length, int hexdump) static void netrom_flags(int flags) { if (flags & NR4CHOKE) - lprintf(T_AXHDR," CHOKE"); + lprintf(T_AXHDR, " CHOKE"); if (flags & NR4NAK) - lprintf(T_AXHDR," NAK"); + lprintf(T_AXHDR, " NAK"); if (flags & NR4MORE) - lprintf(T_AXHDR," MORE"); + lprintf(T_AXHDR, " MORE"); lprintf(T_AXHDR, "\n"); } - - diff --git a/listen/ripdump.c b/listen/ripdump.c index 9f3a799..8a3f966 100644 --- a/listen/ripdump.c +++ b/listen/ripdump.c @@ -23,59 +23,56 @@ #define RIP_HEADER 4 #define RIP_ENTRY 20 -#define RIP_AF_INET 2 /* IP Family */ +#define RIP_AF_INET 2 /* IP Family */ -#define RIPCMD_REQUEST 1 /* want info */ -#define RIPCMD_RESPONSE 2 /* responding to request */ +#define RIPCMD_REQUEST 1 /* want info */ +#define RIPCMD_RESPONSE 2 /* responding to request */ #define RIP98_ENTRY 6 -static struct mask_struct -{ +static struct mask_struct { unsigned int mask; unsigned int width; -} -mask_table[] = -{ - {0xFFFFFFFF, 32}, - {0xFFFFFFFE, 31}, - {0xFFFFFFFC, 30}, - {0xFFFFFFF8, 29}, - {0xFFFFFFF0, 28}, - {0xFFFFFFE0, 27}, - {0xFFFFFFC0, 26}, - {0xFFFFFF80, 25}, - {0xFFFFFF00, 24}, - {0xFFFFFE00, 23}, - {0xFFFFFC00, 22}, - {0xFFFFF800, 21}, - {0xFFFFF000, 20}, - {0xFFFFE000, 19}, - {0xFFFFC000, 18}, - {0xFFFF8000, 17}, - {0xFFFF0000, 16}, - {0xFFFE0000, 15}, - {0xFFFC0000, 14}, - {0xFFF80000, 13}, - {0xFFF00000, 12}, - {0xFFE00000, 11}, - {0xFFC00000, 10}, - {0xFF800000, 9}, - {0xFF000000, 8}, - {0xFE000000, 7}, - {0xFC000000, 6}, - {0xF8000000, 5}, - {0xF0000000, 4}, - {0xE0000000, 3}, - {0xC0000000, 2}, - {0x80000000, 1}, - {0x00000000, 0}, -}; +} mask_table[] = { + { + 0xFFFFFFFF, 32}, { + 0xFFFFFFFE, 31}, { + 0xFFFFFFFC, 30}, { + 0xFFFFFFF8, 29}, { + 0xFFFFFFF0, 28}, { + 0xFFFFFFE0, 27}, { + 0xFFFFFFC0, 26}, { + 0xFFFFFF80, 25}, { + 0xFFFFFF00, 24}, { + 0xFFFFFE00, 23}, { + 0xFFFFFC00, 22}, { + 0xFFFFF800, 21}, { + 0xFFFFF000, 20}, { + 0xFFFFE000, 19}, { + 0xFFFFC000, 18}, { + 0xFFFF8000, 17}, { + 0xFFFF0000, 16}, { + 0xFFFE0000, 15}, { + 0xFFFC0000, 14}, { + 0xFFF80000, 13}, { + 0xFFF00000, 12}, { + 0xFFE00000, 11}, { + 0xFFC00000, 10}, { + 0xFF800000, 9}, { + 0xFF000000, 8}, { + 0xFE000000, 7}, { + 0xFC000000, 6}, { + 0xF8000000, 5}, { + 0xF0000000, 4}, { + 0xE0000000, 3}, { + 0xC0000000, 2}, { + 0x80000000, 1}, { +0x00000000, 0},}; static unsigned int mask2width(unsigned int mask) { struct mask_struct *t; - + for (t = mask_table; t->mask != 0; t++) if (mask == t->mask) return t->width; @@ -90,85 +87,87 @@ void rip_dump(unsigned char *data, int length) int version; int domain; char ipaddmask[25]; - + lprintf(T_PROTOCOL, "RIP: "); - cmd = data[0]; + cmd = data[0]; version = data[1]; - domain = get16(data + 2); + domain = get16(data + 2); length -= RIP_HEADER; - data += RIP_HEADER; + data += RIP_HEADER; - switch (cmd) - { - case RIPCMD_REQUEST: - lprintf(T_IPHDR, "REQUEST"); - break; + switch (cmd) { + case RIPCMD_REQUEST: + lprintf(T_IPHDR, "REQUEST"); + break; - case RIPCMD_RESPONSE: - lprintf(T_IPHDR, "RESPONSE"); - break; + case RIPCMD_RESPONSE: + lprintf(T_IPHDR, "RESPONSE"); + break; - default: - lprintf(T_IPHDR, " cmd %u", cmd); - break; + default: + lprintf(T_IPHDR, " cmd %u", cmd); + break; } - - switch (version) - { - case RIP_VERSION_98: /* IPGATE **/ - lprintf(T_IPHDR, " vers %u entries %u\n", version, length / RIP98_ENTRY); - - i = 0; - while (length >= RIP98_ENTRY) - { - sprintf(ipaddmask, "%u.%u.%u.%u/%-2u", data[0], data[1], data[2], data[3], data[4]); - lprintf(T_ADDR, "%-16s %-3u ", ipaddmask, data[5]); - - if ((++i % 3) == 0) lprintf(T_IPHDR, "\n"); - - length -= RIP98_ENTRY; - data += RIP98_ENTRY; - } - if ((i % 3) != 0) lprintf(T_IPHDR, "\n"); - break; - - default: - lprintf(T_IPHDR, " vers %u entries %u domain %u:\n", version, length / RIP_ENTRY, domain); - - i = 0; - while (length >= RIP_ENTRY) - { - if (get16(data + 0) != RIP_AF_INET) - { - /* Skip non-IP addresses */ - length -= RIP_ENTRY; - data += RIP_ENTRY; - continue; - } - - if (version >= RIP_VERSION_2) - { - sprintf(ipaddmask, "%u.%u.%u.%u/%-4d", data[4], data[5], data[6], data[7], - mask2width(get32(data + 8))); - } - else - { - sprintf(ipaddmask, "%u.%u.%u.%u/??", data[4], data[5], data[6], data[7]); - } - - lprintf(T_ADDR, "%-20s%-3u", ipaddmask, get32(data + 16)); - - if ((++i % 3) == 0) lprintf(T_IPHDR, "\n"); + switch (version) { + case RIP_VERSION_98: /* IPGATE * */ + lprintf(T_IPHDR, " vers %u entries %u\n", version, + length / RIP98_ENTRY); + + i = 0; + while (length >= RIP98_ENTRY) { + sprintf(ipaddmask, "%u.%u.%u.%u/%-2u", data[0], + data[1], data[2], data[3], data[4]); + lprintf(T_ADDR, "%-16s %-3u ", ipaddmask, data[5]); + if ((++i % 3) == 0) + lprintf(T_IPHDR, "\n"); + + length -= RIP98_ENTRY; + data += RIP98_ENTRY; + } + + if ((i % 3) != 0) + lprintf(T_IPHDR, "\n"); + break; + + default: + lprintf(T_IPHDR, " vers %u entries %u domain %u:\n", + version, length / RIP_ENTRY, domain); + + i = 0; + while (length >= RIP_ENTRY) { + if (get16(data + 0) != RIP_AF_INET) { + /* Skip non-IP addresses */ length -= RIP_ENTRY; - data += RIP_ENTRY; + data += RIP_ENTRY; + continue; + } + + if (version >= RIP_VERSION_2) { + sprintf(ipaddmask, "%u.%u.%u.%u/%-4d", + data[4], data[5], data[6], data[7], + mask2width(get32(data + 8))); + } else { + sprintf(ipaddmask, "%u.%u.%u.%u/??", + data[4], data[5], data[6], + data[7]); } - if ((i % 3) != 0) lprintf(T_IPHDR, "\n"); - break; + lprintf(T_ADDR, "%-20s%-3u", ipaddmask, + get32(data + 16)); + + if ((++i % 3) == 0) + lprintf(T_IPHDR, "\n"); + + length -= RIP_ENTRY; + data += RIP_ENTRY; + } + + if ((i % 3) != 0) + lprintf(T_IPHDR, "\n"); + break; } } - diff --git a/listen/rosedump.c b/listen/rosedump.c index c4d26b0..7665313 100644 --- a/listen/rosedump.c +++ b/listen/rosedump.c @@ -56,7 +56,7 @@ void rose_dump(unsigned char *data, int length, int hexdump) unsigned char *source = NULL; unsigned char *dest = NULL; unsigned int len, hlen; - unsigned int lci = ((unsigned)(data[0] & 0x0F) << 8) + data[1]; + unsigned int lci = ((unsigned) (data[0] & 0x0F) << 8) + data[1]; lprintf(T_ROSEHDR, "X.25: LCI %3.3X : ", lci); switch (data[2]) { @@ -64,26 +64,22 @@ void rose_dump(unsigned char *data, int length, int hexdump) len = 4; hlen = (((data[3] >> 4) & 0x0F) + 1) / 2; hlen += (((data[3] >> 0) & 0x0F) + 1) / 2; - if (hlen == 10) - { - dest = data+4; - source = data+9; + if (hlen == 10) { + dest = data + 4; + source = data + 9; } - len += hlen; - data += len; + len += hlen; + data += len; length -= len; lprintf(T_ROSEHDR, "CALL REQUEST - "); - if (length) - { - unsigned int flen = data[0]+1; + if (length) { + unsigned int flen = data[0] + 1; facility(data, length); length -= flen; data += flen; if (length > 0) data_dump(data, length, 1); - } - else - { + } else { lprintf(T_ROSEHDR, "\n"); } return; @@ -95,9 +91,8 @@ void rose_dump(unsigned char *data, int length, int hexdump) case CLEAR_REQUEST: lprintf(T_ROSEHDR, "CLEAR REQUEST - Cause %s - Diag %d\n", clear_code(data[3]), data[4]); - if (length > 6) - { - facility(data+6, length-6); + if (length > 6) { + facility(data + 6, length - 6); } return; @@ -126,12 +121,13 @@ void rose_dump(unsigned char *data, int length, int hexdump) case RESET_CONFIRMATION: lprintf(T_ROSEHDR, "RESET CONFIRMATION\n"); return; - + case RESTART_REQUEST: - lprintf(T_ROSEHDR, "RESTART REQUEST - Cause %s - Diag %d\n", + lprintf(T_ROSEHDR, + "RESTART REQUEST - Cause %s - Diag %d\n", restart_code(data[3]), data[4]); return; - + case RESTART_CONFIRMATION: lprintf(T_ROSEHDR, "RESTART CONFIRMATION\n"); return; @@ -139,7 +135,7 @@ void rose_dump(unsigned char *data, int length, int hexdump) case REGISTRATION_REQUEST: lprintf(T_ROSEHDR, "REGISTRATION REQUEST\n"); return; - + case REGISTRATION_CONFIRMATION: lprintf(T_ROSEHDR, "REGISTRATION CONFIRMATION\n"); return; @@ -151,53 +147,59 @@ void rose_dump(unsigned char *data, int length, int hexdump) (data[0] & QBIT) ? "Q" : "", (data[0] & DBIT) ? "D" : "", (data[2] & MBIT) ? "M" : ""); - if ((length >= 5) && (data[0] & QBIT) && (data[3] == 0x7f)) - { + if ((length >= 5) && (data[0] & QBIT) && (data[3] == 0x7f)) { /* pid transport */ int pid = data[4]; data += 5; length -= 5; switch (pid) { - case PID_SEGMENT: - lprintf(T_ROSEHDR," len %d\n", length - 5); - data_dump(data, length, hexdump); - break; - case PID_ARP: - lprintf(T_ROSEHDR," pid=ARP len %d\n", length - 5); - arp_dump(data, length); - break; - case PID_NETROM: - lprintf(T_ROSEHDR," pid=NET/ROM len %d\n", length - 5); - netrom_dump(data, length, hexdump); - break; - case PID_IP: - lprintf(T_ROSEHDR," pid=IP len %d\n", length - 5); - ip_dump(data, length, hexdump); - break; - case PID_X25: - lprintf(T_ROSEHDR, " pid=X.25 len %d\n", length - 5); - rose_dump(data, length, hexdump); - break; - case PID_TEXNET: - lprintf(T_ROSEHDR, " pid=TEXNET len %d\n", length - 5); - data_dump(data, length, hexdump); - break; - case PID_FLEXNET: - lprintf(T_ROSEHDR, " pid=FLEXNET len %d\n", length - 5); - flexnet_dump(data, length, hexdump); - break; - case PID_NO_L3: - lprintf(T_ROSEHDR, " pid=Text len %d\n", length - 5); - data_dump(data, length, hexdump); - break; - default: - lprintf(T_ROSEHDR, " pid=0x%x len %d\n", pid, length - 5); - data_dump(data, length, hexdump); - break; + case PID_SEGMENT: + lprintf(T_ROSEHDR, " len %d\n", + length - 5); + data_dump(data, length, hexdump); + break; + case PID_ARP: + lprintf(T_ROSEHDR, " pid=ARP len %d\n", + length - 5); + arp_dump(data, length); + break; + case PID_NETROM: + lprintf(T_ROSEHDR, " pid=NET/ROM len %d\n", + length - 5); + netrom_dump(data, length, hexdump); + break; + case PID_IP: + lprintf(T_ROSEHDR, " pid=IP len %d\n", + length - 5); + ip_dump(data, length, hexdump); + break; + case PID_X25: + lprintf(T_ROSEHDR, " pid=X.25 len %d\n", + length - 5); + rose_dump(data, length, hexdump); + break; + case PID_TEXNET: + lprintf(T_ROSEHDR, " pid=TEXNET len %d\n", + length - 5); + data_dump(data, length, hexdump); + break; + case PID_FLEXNET: + lprintf(T_ROSEHDR, " pid=FLEXNET len %d\n", + length - 5); + flexnet_dump(data, length, hexdump); + break; + case PID_NO_L3: + lprintf(T_ROSEHDR, " pid=Text len %d\n", + length - 5); + data_dump(data, length, hexdump); + break; + default: + lprintf(T_ROSEHDR, " pid=0x%x len %d\n", + pid, length - 5); + data_dump(data, length, hexdump); + break; } - } - else - { + } else { lprintf(T_ROSEHDR, " len %d\n", length - 3); data_dump(data + 3, length - 3, hexdump); } @@ -205,15 +207,15 @@ void rose_dump(unsigned char *data, int length, int hexdump) } switch (data[2] & 0x1F) { - case RR: - lprintf(T_ROSEHDR, "RR R%d\n", (data[2] >> 5) & 0x07); - return; - case RNR: - lprintf(T_ROSEHDR, "RNR R%d\n", (data[2] >> 5) & 0x07); - return; - case REJ: - lprintf(T_ROSEHDR, "REJ R%d\n", (data[2] >> 5) & 0x07); - return; + case RR: + lprintf(T_ROSEHDR, "RR R%d\n", (data[2] >> 5) & 0x07); + return; + case RNR: + lprintf(T_ROSEHDR, "RNR R%d\n", (data[2] >> 5) & 0x07); + return; + case REJ: + lprintf(T_ROSEHDR, "REJ R%d\n", (data[2] >> 5) & 0x07); + return; } lprintf(T_ROSEHDR, "UNKNOWN\n"); @@ -234,7 +236,7 @@ static char *clear_code(unsigned char code) return "Remote Procedure Error"; if (code == 0x19) return "Reverse Charging Acceptance Not Subscribed"; - if (code == 0x21) + if (code == 0x21) return "Incompatible Destination"; if (code == 0x29) return "Fast Select Acceptance Not Subscribed"; @@ -252,9 +254,9 @@ static char *clear_code(unsigned char code) return "Not Obtainable"; if (code == 0x15) return "RPOA Out Of Order"; - + sprintf(buffer, "Unknown %02X", code); - + return buffer; } @@ -266,15 +268,15 @@ static char *reset_code(unsigned char code) return "DTE Originated"; if (code == 0x03) return "Remote Procedure Error"; - if (code == 0x11) + if (code == 0x11) return "Incompatible Destination"; if (code == 0x05) return "Local Procedure Error"; if (code == 0x07) return "Network Congestion"; - + sprintf(buffer, "Unknown %02X", code); - + return buffer; } @@ -290,9 +292,9 @@ static char *restart_code(unsigned char code) return "Network Congestion"; if (code == 0x07) return "Network Operational"; - + sprintf(buffer, "Unknown %02X", code); - + return buffer; } @@ -300,7 +302,8 @@ static char *dump_x25_addr(unsigned char *data) { static char buffer[25]; - sprintf(buffer, "%02X%02X,%02X%02X%02X", data[0], data[1], data[2], data[3], data[4]); + sprintf(buffer, "%02X%02X,%02X%02X%02X", data[0], data[1], data[2], + data[3], data[4]); return buffer; } @@ -311,8 +314,7 @@ static char *dump_ax25_call(unsigned char *data, int l_data) char *ptr = buffer; int ssid; - while (l_data-- > 1) - { + while (l_data-- > 1) { *ptr = *data++ >> 1; if (*ptr != ' ') ++ptr; @@ -320,8 +322,7 @@ static char *dump_ax25_call(unsigned char *data, int l_data) *ptr++ = '-'; ssid = (*data & 0x1F) >> 1; - if (ssid >= 10) - { + if (ssid >= 10) { *ptr++ = '1'; ssid -= 10; } @@ -343,7 +344,7 @@ static void facility(unsigned char *data, int lgtot) char *result = buf; factot = data; - + lgfac = *data++; lg = lgfac; @@ -351,12 +352,10 @@ static void facility(unsigned char *data, int lgtot) digid[0] = digis[0] = '\0'; indorig[0] = inddest[0] = '\0'; - while (lg > 0) - { + while (lg > 0) { fct = *data++; lg--; - switch (fct) - { + switch (fct) { case 0: /* Marker=0 National Fac ou Marker=15 CCITT */ data++; @@ -364,12 +363,13 @@ static void facility(unsigned char *data, int lgtot) break; case 0x3F: /* Used if call request via L2 digi instead of L3 */ - lprintf (T_ROSEHDR, "Facility 3F%2.2X\n", *data++); + lprintf(T_ROSEHDR, "Facility 3F%2.2X\n", *data++); lg--; break; case 0x7F: /* Random number to avoid loops */ - lprintf (T_ROSEHDR, "NbAlea: %2.2X%2.2X\n", *data, *(data + 1)); + lprintf(T_ROSEHDR, "NbAlea: %2.2X%2.2X\n", *data, + *(data + 1)); data += 2; lg -= 2; break; @@ -377,7 +377,8 @@ static void facility(unsigned char *data, int lgtot) /* Destination digi (for compatibility) */ lgdigi = *data++; if (!digi_fac) - strcpy(digid, dump_ax25_call(data, lgdigi)); + strcpy(digid, + dump_ax25_call(data, lgdigi)); data += lgdigi; lg -= 1 + lgdigi; break; @@ -385,14 +386,16 @@ static void facility(unsigned char *data, int lgtot) /* Origin digi (for compatibility) */ lgdigi = *data++; if (!digi_fac) - strcpy(digis, dump_ax25_call(data, lgdigi)); + strcpy(digis, + dump_ax25_call(data, lgdigi)); data += lgdigi; lg -= 1 + lgdigi; break; case 0xED: /* Out of order : callsign */ lgaddcall = *data++; - lprintf(T_ROSEHDR, "at %s", dump_ax25_call(data, lgaddcall)); + lprintf(T_ROSEHDR, "at %s", + dump_ax25_call(data, lgaddcall)); data += lgaddcall; lg -= 1 + lgaddcall; break; @@ -407,21 +410,19 @@ static void facility(unsigned char *data, int lgtot) break; case 0xEF: lgaddcall = *data++; - for (d = data, l = 0; l < lgaddcall ; l += 7, d += 7) - { - if (l > (6 * 7)) - { + for (d = data, l = 0; l < lgaddcall; + l += 7, d += 7) { + if (l > (6 * 7)) { /* 6 digis maximum */ break; } - if (d[6] & AX25_HBIT) - { - strcat(digis, dump_ax25_call(d, 7)); + if (d[6] & AX25_HBIT) { + strcat(digis, + dump_ax25_call(d, 7)); strcat(digis, " "); - } - else - { - strcat(digid, dump_ax25_call(d, 7)); + } else { + strcat(digid, + dump_ax25_call(d, 7)); strcat(digid, " "); } } @@ -439,50 +440,47 @@ static void facility(unsigned char *data, int lgtot) lgad = *data++; lg -= 6; lgaddr = lgad; - + if (fct == 0xCB) - strcpy (addstorig, dump_x25_addr(data)); + strcpy(addstorig, dump_x25_addr(data)); else - strcpy (addstdest, dump_x25_addr(data)); - + strcpy(addstdest, dump_x25_addr(data)); + data += (lgad + 1) / 2; lg -= (lgad + 1) / 2; lgadind = lgaddcall - (lgad + 1) / 2 - 5; - - if (fct == 0xCB) - { - strncpy (indorig, data, lgadind); + + if (fct == 0xCB) { + strncpy(indorig, data, lgadind); indorig[lgadind] = '\0'; - } - else - { - strncpy (inddest, data, lgadind); + } else { + strncpy(inddest, data, lgadind); inddest[lgadind] = '\0'; } - + data += lgadind; lg -= lgadind; break; default: - lprintf (T_ROSEHDR, "Unknown Facility Type %2.2X\n", fct); + lprintf(T_ROSEHDR, "Unknown Facility Type %2.2X\n", + fct); data_dump(factot, lgtot, 1); lg = 0; break; } - result += strlen (result); + result += strlen(result); } - if (*indorig && *inddest) - { + if (*indorig && *inddest) { /* Build the displayed string */ - lprintf (T_ROSEHDR, "fm %-9s @%s", indorig, addstorig); + lprintf(T_ROSEHDR, "fm %-9s @%s", indorig, addstorig); if (*digis) - lprintf (T_ROSEHDR, " via %s", digis); - lprintf (T_ROSEHDR, "\n"); - lprintf (T_ROSEHDR, "to %-9s @%s", inddest, addstdest); + lprintf(T_ROSEHDR, " via %s", digis); + lprintf(T_ROSEHDR, "\n"); + lprintf(T_ROSEHDR, "to %-9s @%s", inddest, addstdest); if (*digid) - lprintf (T_ROSEHDR, " via %s", digid); - lprintf (T_ROSEHDR, "\n"); + lprintf(T_ROSEHDR, " via %s", digid); + lprintf(T_ROSEHDR, "\n"); } } diff --git a/listen/rspfdump.c b/listen/rspfdump.c index e05e0fa..4a84b42 100644 --- a/listen/rspfdump.c +++ b/listen/rspfdump.c @@ -9,45 +9,60 @@ void rspf_dump(unsigned char *data, int length) { int bptr, nodes, links, adjs; - + lprintf(T_IPHDR, "RSPF: version %u ", data[0]); - - switch(data[1]) - { - case 3: /* RRH */ - lprintf(T_IPHDR, "type RRH seq %#04x flags %d\n",ntohs(*((u_short*)(&data[8]))), data[10]); - bptr = 11; - while (bptr < length) - lprintf(T_IPHDR, "%c", data[bptr++]); - lprintf(T_IPHDR, "\n"); - break; - case 1: /*Routing update*/ - lprintf(T_IPHDR, "type ROUTING UPDATE "); - lprintf(T_IPHDR, "fragment %u frag total %u sync %u #nodes %u env_id %u\n", data[2], data[3], data[6], data[7], ntohs(*((u_short*)(&data[8])))); - - bptr = data[6] + 6; - nodes = data[7]; - while(nodes-- && (length - bptr) > 7) - { - lprintf(T_DATA, " Reporting Router: %s Seq %u Subseq %u #links %u\n", inet_ntoa(*((struct in_addr*)(&data[bptr]))), ntohs(*((u_short*)(&data[bptr+4]))), data[bptr+6], data[bptr+7]); - links = data[bptr+7]; - bptr += 8; - while(links-- && (length - bptr) > 4) - { - lprintf(T_DATA, " horizon %u ERP factor %u cost %u #adjacencies %u\n", data[bptr], data[bptr+1], data[bptr+2], data[bptr+3]); - adjs = data[bptr+3]; - bptr += 4; - while(adjs-- && (length - bptr) > 4) - { - lprintf(T_DATA, " %s/%d \n", inet_ntoa(*((struct in_addr*)(&data[bptr+1]))), data[bptr] & 0x3f); - bptr += 5; - } + + switch (data[1]) { + case 3: /* RRH */ + lprintf(T_IPHDR, "type RRH seq %#04x flags %d\n", + ntohs(*((u_short *) (&data[8]))), data[10]); + bptr = 11; + while (bptr < length) + lprintf(T_IPHDR, "%c", data[bptr++]); + lprintf(T_IPHDR, "\n"); + break; + case 1: /*Routing update */ + lprintf(T_IPHDR, "type ROUTING UPDATE "); + lprintf(T_IPHDR, + "fragment %u frag total %u sync %u #nodes %u env_id %u\n", + data[2], data[3], data[6], data[7], + ntohs(*((u_short *) (&data[8])))); + + bptr = data[6] + 6; + nodes = data[7]; + while (nodes-- && (length - bptr) > 7) { + lprintf(T_DATA, + " Reporting Router: %s Seq %u Subseq %u #links %u\n", + inet_ntoa(* + ((struct in_addr + *) (&data[bptr]))), + ntohs(*((u_short *) (&data[bptr + 4]))), + data[bptr + 6], data[bptr + 7]); + links = data[bptr + 7]; + bptr += 8; + while (links-- && (length - bptr) > 4) { + lprintf(T_DATA, + " horizon %u ERP factor %u cost %u #adjacencies %u\n", + data[bptr], data[bptr + 1], + data[bptr + 2], data[bptr + 3]); + adjs = data[bptr + 3]; + bptr += 4; + while (adjs-- && (length - bptr) > 4) { + lprintf(T_DATA, + " %s/%d \n", + inet_ntoa(* + ((struct in_addr + *) (&data[bptr + + + 1]))), + data[bptr] & 0x3f); + bptr += 5; } - } - break; - default: - lprintf(T_ERROR, "Unknown packet type %d\n", data[1]); - break; + } + } + break; + default: + lprintf(T_ERROR, "Unknown packet type %d\n", data[1]); + break; } } - diff --git a/listen/tcpdump.c b/listen/tcpdump.c index 3a9520f..23c9686 100644 --- a/listen/tcpdump.c +++ b/listen/tcpdump.c @@ -1,4 +1,4 @@ -/* @(#) $Header: /home/ax25-cvs/ax25-apps/listen/tcpdump.c,v 1.1 2001/04/10 01:58:56 csmall Exp $ */ +/* @(#) $Header: /home/ax25-cvs/ax25-apps/listen/tcpdump.c,v 1.2 2001/09/12 13:18:44 terry Exp $ */ /* TCP header tracing routines * Copyright 1991 Phil Karn, KA9Q @@ -38,37 +38,46 @@ void tcp_dump(unsigned char *data, int length, int hexdump) int mss = 0; source = get16(data + 0); - dest = get16(data + 2); - seq = get32(data + 4); - ack = get32(data + 8); + dest = get16(data + 2); + seq = get32(data + 4); + ack = get32(data + 8); hdrlen = (data[12] & 0xF0) >> 2; - flags = data[13]; - wnd = get16(data + 14); - up = get16(data + 18); + flags = data[13]; + wnd = get16(data + 14); + up = get16(data + 18); lprintf(T_PROTOCOL, "TCP:"); lprintf(T_TCPHDR, " %s->", servname(source, "tcp")); lprintf(T_TCPHDR, "%s Seq x%x", servname(dest, "tcp"), seq); - if (flags & ACK) lprintf(T_TCPHDR, " Ack x%x", ack); + if (flags & ACK) + lprintf(T_TCPHDR, " Ack x%x", ack); - if (flags & CE) lprintf(T_TCPHDR, " CE"); + if (flags & CE) + lprintf(T_TCPHDR, " CE"); - if (flags & URG) lprintf(T_TCPHDR, " URG"); + if (flags & URG) + lprintf(T_TCPHDR, " URG"); - if (flags & ACK) lprintf(T_TCPHDR, " ACK"); + if (flags & ACK) + lprintf(T_TCPHDR, " ACK"); - if (flags & PSH) lprintf(T_TCPHDR, " PSH"); + if (flags & PSH) + lprintf(T_TCPHDR, " PSH"); - if (flags & RST) lprintf(T_TCPHDR, " RST"); + if (flags & RST) + lprintf(T_TCPHDR, " RST"); - if (flags & SYN) lprintf(T_TCPHDR, " SYN"); + if (flags & SYN) + lprintf(T_TCPHDR, " SYN"); - if (flags & FIN) lprintf(T_TCPHDR, " FIN"); + if (flags & FIN) + lprintf(T_TCPHDR, " FIN"); lprintf(T_TCPHDR, " Wnd %d", wnd); - if (flags & URG) lprintf(T_TCPHDR, " UP x%x", up); + if (flags & URG) + lprintf(T_TCPHDR, " UP x%x", up); /* Process options, if any */ if (hdrlen > TCPLEN && length >= hdrlen) { @@ -95,29 +104,30 @@ void tcp_dump(unsigned char *data, int length, int hexdump) optlen = *cp++; /* Process valid multi-byte options */ - switch (kind) { + switch (kind) { case MSS_KIND: - if (optlen == MSS_LENGTH) + if (optlen == MSS_LENGTH) mss = get16(cp); break; } - optlen = max(2, optlen); /* Enforce legal minimum */ + optlen = max(2, optlen); /* Enforce legal minimum */ i -= optlen; cp += optlen - 2; } } - if (mss != 0) lprintf(T_TCPHDR," MSS %d", mss); + if (mss != 0) + lprintf(T_TCPHDR, " MSS %d", mss); length -= hdrlen; - data += hdrlen; + data += hdrlen; if (length > 0) { lprintf(T_TCPHDR, " Data %d\n", length); data_dump(data, length, hexdump); return; } - + lprintf(T_TCPHDR, "\n"); } diff --git a/listen/udpdump.c b/listen/udpdump.c index 4eb75a1..f80a134 100644 --- a/listen/udpdump.c +++ b/listen/udpdump.c @@ -1,4 +1,4 @@ -/* @(#) $Header: /home/ax25-cvs/ax25-apps/listen/udpdump.c,v 1.1 2001/04/10 01:58:56 csmall Exp $ */ +/* @(#) $Header: /home/ax25-cvs/ax25-apps/listen/udpdump.c,v 1.2 2001/09/12 13:18:44 terry Exp $ */ /* UDP packet tracing * Copyright 1991 Phil Karn, KA9Q @@ -18,27 +18,28 @@ void udp_dump(unsigned char *data, int length, int hexdump) int dest; hdr_length = get16(data + 4); - source = get16(data + 0); - dest = get16(data + 2); + source = get16(data + 0); + dest = get16(data + 2); lprintf(T_PROTOCOL, "UDP:"); - lprintf(T_TCPHDR, " len %d %s->", hdr_length, servname(source, "udp")); + lprintf(T_TCPHDR, " len %d %s->", hdr_length, + servname(source, "udp")); lprintf(T_TCPHDR, "%s", servname(dest, "udp")); - + if (hdr_length > UDPHDR) { length -= UDPHDR; - data += UDPHDR; - + data += UDPHDR; + switch (dest) { - case RIP_PORT: - lprintf(T_TCPHDR, "\n"); - rip_dump(data, length); - break; - default: - lprintf(T_TCPHDR, " Data %d\n", length); - data_dump(data, length, hexdump); - break; + case RIP_PORT: + lprintf(T_TCPHDR, "\n"); + rip_dump(data, length); + break; + default: + lprintf(T_TCPHDR, " Data %d\n", length); + data_dump(data, length, hexdump); + break; } } } diff --git a/listen/utils.c b/listen/utils.c index ce7ecb9..0d978ee 100644 --- a/listen/utils.c +++ b/listen/utils.c @@ -14,33 +14,32 @@ #include "listen.h" -int color = 0; /* Colorized? */ -int sevenbit = 1; /* Are we on a 7-bit terminal? */ -int ibmhack = 0; /* IBM mapping? */ +int color = 0; /* Colorized? */ +int sevenbit = 1; /* Are we on a 7-bit terminal? */ +int ibmhack = 0; /* IBM mapping? */ /* mapping of IBM codepage 437 chars 128-159 to ISO latin1 equivalents * (158 and 159 are mapped to space) */ -unsigned char ibm_map[32] = -{ +unsigned char ibm_map[32] = { 199, 252, 233, 226, 228, 224, 229, 231, 234, 235, 232, 239, 238, 236, 196, 197, 201, 230, 198, 244, 246, 242, 251, 249, - 255, 214, 220, 162, 163, 165, 32, 32 + 255, 214, 220, 162, 163, 165, 32, 32 }; - + /* * Printf in Technicolor (TM) (available in selected theatres only) */ - + void lprintf(int dtype, char *fmt, ...) { va_list args; char str[1024]; unsigned char *p; chtype ch; - + va_start(args, fmt); vsnprintf(str, 1024, fmt, args); va_end(args); @@ -51,17 +50,17 @@ void lprintf(int dtype, char *fmt, ...) if (sevenbit && ch > 127) ch = '.'; - + if ((ch > 127 && ch < 160) && ibmhack) ch = ibm_map[ch - 128] | A_BOLD; else if ((ch < 32) && (ch != '\n')) ch = (ch + 64) | A_REVERSE; - if ((dtype == T_ADDR) || (dtype == T_PROTOCOL) - || (dtype == T_AXHDR) || (dtype == T_IPHDR) + if ((dtype == T_ADDR) || (dtype == T_PROTOCOL) + || (dtype == T_AXHDR) || (dtype == T_IPHDR) || (dtype == T_ROSEHDR) || (dtype == T_PORT) || (dtype == T_TIMESTAMP)) - ch |= A_BOLD; + ch |= A_BOLD; ch |= COLOR_PAIR(dtype); @@ -76,7 +75,7 @@ void lprintf(int dtype, char *fmt, ...) fflush(stdout); } } - + int initcolor(void) { if (!has_colors) @@ -91,7 +90,7 @@ int initcolor(void) idlok(stdscr, TRUE); /* Use hardware ins/del of the terminal */ nodelay(stdscr, TRUE); /* Make getch() nonblocking */ - /* Pick colors for each type */ + /* Pick colors for each type */ init_pair(T_PORT, COLOR_GREEN, COLOR_BLACK); init_pair(T_DATA, COLOR_WHITE, COLOR_BLACK); init_pair(T_ERROR, COLOR_RED, COLOR_BLACK); @@ -104,8 +103,8 @@ int initcolor(void) init_pair(T_KISS, COLOR_MAGENTA, COLOR_BLACK); init_pair(T_BPQ, COLOR_MAGENTA, COLOR_BLACK); init_pair(T_TCPHDR, COLOR_BLUE, COLOR_BLACK); - init_pair(T_FLEXNET, COLOR_BLUE, COLOR_BLACK); - + init_pair(T_FLEXNET, COLOR_BLUE, COLOR_BLACK); + return 1; } @@ -114,7 +113,7 @@ char *servname(int port, char *proto) { struct servent *serv; static char str[16]; - + if ((serv = getservbyport(htons(port), proto))) strncpy(str, serv->s_name, 16); else @@ -1,7 +1,8 @@ # ltmain.sh - Provide generalized library-building support services. -# NOTE: Changing this file will not affect anything until you rerun ltconfig. +# NOTE: Changing this file will not affect anything until you rerun configure. # -# Copyright (C) 1996-1999 Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# 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 @@ -54,8 +55,8 @@ modename="$progname" # Constants. PROGRAM=ltmain.sh PACKAGE=libtool -VERSION=1.3.3 -TIMESTAMP=" (1.385.2.181 1999/07/02 15:49:11)" +VERSION=1.4.1 +TIMESTAMP=" (1.922.2.34 2001/09/03 01:22:13)" default_mode= help="Try \`$progname --help' for more information." @@ -83,12 +84,6 @@ if test "${LANG+set}" = set; then save_LANG="$LANG"; LANG=C; export LANG fi -if test "$LTCONFIG_VERSION" != "$VERSION"; then - echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2 - echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 - exit 1 -fi - 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 @@ -113,16 +108,16 @@ do arg="$1" shift - case "$arg" in + 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 + case $prev in execute_dlfiles) - eval "$prev=\"\$$prev \$arg\"" + execute_dlfiles="$execute_dlfiles $arg" ;; *) eval "$prev=\$arg" @@ -135,7 +130,7 @@ do fi # Have we seen a non-optional argument yet? - case "$arg" in + case $arg in --help) show_help=yes ;; @@ -146,7 +141,7 @@ do ;; --config) - sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0 + sed -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0 exit 0 ;; @@ -207,16 +202,21 @@ if test -n "$prevopt"; then exit 1 fi +# 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 - case "$nonopt" in + case $nonopt in *cc | *++ | gcc* | *-gcc*) mode=link for arg do - case "$arg" in + case $arg in -c) mode=compile break @@ -261,12 +261,13 @@ if test -z "$show_help"; then 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 + case $mode in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= + prev= lastarg= srcfile="$nonopt" suppress_output= @@ -274,8 +275,34 @@ if test -z "$show_help"; then user_target=no for arg do + case $prev in + "") ;; + xcompiler) + # Aesthetically quote the previous argument. + prev= + lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + + case $arg in + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + + # Add the previous argument to base_compile. + if test -z "$base_compile"; then + base_compile="$lastarg" + else + base_compile="$base_compile $lastarg" + fi + continue + ;; + esac + # Accept any command-line options. - case "$arg" in + case $arg in -o) if test "$user_target" != "no"; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 @@ -288,9 +315,53 @@ if test -z "$show_help"; then build_old_libs=yes continue ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` + lastarg= + IFS="${IFS= }"; 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. + if test -z "$base_compile"; then + base_compile="$lastarg" + else + base_compile="$base_compile $lastarg" + fi + continue + ;; esac - case "$user_target" in + case $user_target in next) # The next one is the -o target name user_target=yes @@ -316,10 +387,10 @@ if test -z "$show_help"; then lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` # Double-quote args containing other shell metacharacters. - # Many Bourne shells cannot handle close brackets correctly in scan - # sets, so we specify it separately. - case "$lastarg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + case $lastarg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac @@ -332,7 +403,7 @@ if test -z "$show_help"; then fi done - case "$user_target" in + case $user_target in set) ;; no) @@ -348,7 +419,7 @@ if test -z "$show_help"; then # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSfmso]' - case "$libobj" in + case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; @@ -363,7 +434,7 @@ if test -z "$show_help"; then libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` - case "$libobj" in + case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 @@ -387,10 +458,21 @@ if test -z "$show_help"; then $run $rm $removelist trap "$run $rm $removelist; exit 1" 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} + 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 1" 1 2 15 @@ -402,7 +484,7 @@ if test -z "$show_help"; then # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then - until ln "$0" "$lockfile" 2>/dev/null; do + until $run ln "$0" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done @@ -434,8 +516,13 @@ compiler." # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile - # All platforms use -DPIC, to notify preprocessed assembler code. - command="$base_compile $pic_flag -DPIC $srcfile" + if test "$pic_mode" != no; then + # All platforms use -DPIC, to notify preprocessed assembler code. + command="$base_compile $srcfile $pic_flag -DPIC" + else + # Don't build PIC code + command="$base_compile $srcfile" + fi if test "$build_old_libs" = yes; then lo_libobj="$libobj" dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` @@ -506,7 +593,8 @@ compiler." fi # If we have no pic_flag, then copy the object into place and finish. - if test -z "$pic_flag" && test "$build_old_libs" = yes; then + if (test -z "$pic_flag" || test "$pic_mode" != default) && + test "$build_old_libs" = yes; then # Rename the .lo from within objdir to obj if test -f $obj; then $show $rm $obj @@ -521,9 +609,21 @@ compiler." exit $error fi + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir="." + else + xdir="$xdir" + fi + baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"` + libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` # Now arrange that obj and lo_libobj become the same file - $show "$LN_S $obj $lo_libobj" - if $run $LN_S $obj $lo_libobj; then + $show "(cd $xdir && $LN_S $baseobj $libobj)" + if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + $run $rm "$lockfile" + fi exit 0 else error=$? @@ -538,7 +638,13 @@ compiler." # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then - command="$base_compile $srcfile" + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $srcfile" + else + # All platforms use -DPIC, to notify preprocessed assembler code. + command="$base_compile $srcfile $pic_flag -DPIC" + fi if test "$compiler_c_o" = yes; then command="$command -o $obj" output_obj="$obj" @@ -604,19 +710,17 @@ compiler." # Unlock the critical section if it was locked if test "$need_locks" != no; then - $rm "$lockfile" + $run $rm "$lockfile" fi exit 0 ;; # libtool link mode - link) + link | relink) modename="$modename: link" - C_compiler="$CC" # save it, to compile generated C sources - CC="$nonopt" - case "$host" in - *-*-cygwin* | *-*-mingw* | *-*-os2*) + 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 @@ -629,181 +733,14 @@ compiler." # -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 - - # This is a source program that is used to create dlls on Windows - # Don't remove nor modify the starting and closing comments -# /* 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 */ - # This is a source program that is used to create import libraries - # on Windows for dlls which lack them. Don't remove nor modify the - # starting and closing comments -# /* impgen.c starts here */ -# /* Copyright (C) 1999 Free Software Foundation, Inc. -# -# This file is part of GNU libtool. -# -# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# */ -# -# #include <stdio.h> /* for printf() */ -# #include <unistd.h> /* for open(), lseek(), read() */ -# #include <fcntl.h> /* for O_RDONLY, O_BINARY */ -# #include <string.h> /* for strdup() */ -# -# static unsigned int -# pe_get16 (fd, offset) -# int fd; -# int offset; -# { -# unsigned char b[2]; -# lseek (fd, offset, SEEK_SET); -# read (fd, b, 2); -# return b[0] + (b[1]<<8); -# } -# -# static unsigned int -# pe_get32 (fd, offset) -# int fd; -# int offset; -# { -# unsigned char b[4]; -# lseek (fd, offset, SEEK_SET); -# read (fd, b, 4); -# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); -# } -# -# static unsigned int -# pe_as32 (ptr) -# void *ptr; -# { -# unsigned char *b = ptr; -# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); -# } -# -# int -# main (argc, argv) -# int argc; -# char *argv[]; -# { -# int dll; -# unsigned long pe_header_offset, opthdr_ofs, num_entries, i; -# unsigned long export_rva, export_size, nsections, secptr, expptr; -# unsigned long name_rvas, nexp; -# unsigned char *expdata, *erva; -# char *filename, *dll_name; -# -# filename = argv[1]; -# -# dll = open(filename, O_RDONLY|O_BINARY); -# if (!dll) -# return 1; -# -# dll_name = filename; -# -# for (i=0; filename[i]; i++) -# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':') -# dll_name = filename + i +1; -# -# pe_header_offset = pe_get32 (dll, 0x3c); -# opthdr_ofs = pe_header_offset + 4 + 20; -# num_entries = pe_get32 (dll, opthdr_ofs + 92); -# -# if (num_entries < 1) /* no exports */ -# return 1; -# -# export_rva = pe_get32 (dll, opthdr_ofs + 96); -# export_size = pe_get32 (dll, opthdr_ofs + 100); -# nsections = pe_get16 (dll, pe_header_offset + 4 +2); -# secptr = (pe_header_offset + 4 + 20 + -# pe_get16 (dll, pe_header_offset + 4 + 16)); -# -# expptr = 0; -# for (i = 0; i < nsections; i++) -# { -# char sname[8]; -# unsigned long secptr1 = secptr + 40 * i; -# unsigned long vaddr = pe_get32 (dll, secptr1 + 12); -# unsigned long vsize = pe_get32 (dll, secptr1 + 16); -# unsigned long fptr = pe_get32 (dll, secptr1 + 20); -# lseek(dll, secptr1, SEEK_SET); -# read(dll, sname, 8); -# if (vaddr <= export_rva && vaddr+vsize > export_rva) -# { -# expptr = fptr + (export_rva - vaddr); -# if (export_rva + export_size > vaddr + vsize) -# export_size = vsize - (export_rva - vaddr); -# break; -# } -# } -# -# expdata = (unsigned char*)malloc(export_size); -# lseek (dll, expptr, SEEK_SET); -# read (dll, expdata, export_size); -# erva = expdata - export_rva; -# -# nexp = pe_as32 (expdata+24); -# name_rvas = pe_as32 (expdata+32); -# -# printf ("EXPORTS\n"); -# for (i = 0; i<nexp; i++) -# { -# unsigned long name_rva = pe_as32 (erva+name_rvas+i*4); -# printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i); -# } -# -# return 0; -# } -# /* impgen.c ends here */ ;; *) allow_undefined=yes ;; esac - compile_command="$CC" - finalize_command="$CC" + libtool_args="$nonopt" + compile_command="$nonopt" + finalize_command="$nonopt" compile_rpath= finalize_rpath= @@ -812,18 +749,12 @@ compiler." convenience= old_convenience= deplibs= - linkopts= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval lib_search_path=\`\$echo \"X \${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` - else - lib_search_path= - fi - # now prepend the system-specific ones - eval lib_search_path=\"$sys_lib_search_path_spec\$lib_search_path\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - avoid_version=no dlfiles= dlprefiles= @@ -833,9 +764,9 @@ compiler." export_symbols_regex= generated= libobjs= - link_against_libtool_libs= ltlibs= module=no + no_install=no objs= prefer_static_libs=no preload=no @@ -852,7 +783,7 @@ compiler." # We need to know -static, to get the right output filenames. for arg do - case "$arg" in + case $arg in -all-static | -static) if test "X$arg" = "X-all-static"; then if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then @@ -881,17 +812,24 @@ compiler." 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 + case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac - case "$prev" in + case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. @@ -899,7 +837,7 @@ compiler." finalize_command="$finalize_command @SYMFILE@" preload=yes fi - case "$arg" in + case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then @@ -928,6 +866,7 @@ compiler." dlprefiles="$dlprefiles $arg" fi prev= + continue ;; esac ;; @@ -952,7 +891,7 @@ compiler." ;; rpath | xrpath) # We need an absolute path. - case "$arg" in + case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 @@ -973,17 +912,32 @@ compiler." 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 + ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac - fi + fi # test -n $prev prevarg="$arg" - case "$arg" in + case $arg in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" @@ -1020,7 +974,7 @@ compiler." -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - $echo "$modename: not more than one -exported-symbols argument allowed" + $echo "$modename: more than one -exported-symbols argument is not allowed" exit 1 fi if test "X$arg" = "X-export-symbols"; then @@ -1031,58 +985,77 @@ compiler." 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*) + 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 + case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then - $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 - $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 - absdir="$dir" + $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 + exit 1 fi dir="$absdir" ;; esac - case " $deplibs " in - *" $arg "*) ;; - *) deplibs="$deplibs $arg";; - esac - case " $lib_search_path " in - *" $dir "*) ;; - *) lib_search_path="$lib_search_path $dir";; + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; esac - case "$host" in - *-*-cygwin* | *-*-mingw* | *-*-os2*) - dllsearchdir=`cd "$dir" && pwd || echo "$dir"` - case ":$dllsearchpath:" in - ::) dllsearchpath="$dllsearchdir";; - *":$dllsearchdir:"*) ;; - *) dllsearchpath="$dllsearchpath:$dllsearchdir";; + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$dir:"*) ;; + *) dllsearchpath="$dllsearchpath:$dir";; esac ;; esac + continue ;; -l*) - if test "$arg" = "-lc"; then - case "$host" in - *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*) - # These systems don't actually have c library (as such) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-pw32* | *-*-beos*) + # These systems don't actually have a C or math library (as such) continue ;; + *-*-mingw* | *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; esac - elif test "$arg" = "-lm"; then - case "$host" in - *-*-cygwin* | *-*-beos*) - # These systems don't actually have math library (as such) + fi + if test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd*) + # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" + continue ;; -module) @@ -1090,6 +1063,25 @@ compiler." 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 @@ -1115,7 +1107,7 @@ compiler." -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. - case "$dir" in + case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 @@ -1130,11 +1122,11 @@ compiler." ;; -static) - # If we have no pic_flag, then this is the same as -all-static. - if test -z "$pic_flag" && test -n "$link_static_flag"; then - compile_command="$compile_command $link_static_flag" - finalize_command="$finalize_command $link_static_flag" - fi + # 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 ;; @@ -1148,28 +1140,71 @@ compiler." continue ;; + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` + arg= + IFS="${IFS= }"; 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= + IFS="${IFS= }"; 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 + ;; + # 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 - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; - *.o | *.obj | *.a | *.lib) - # A standard object. - objs="$objs $arg" - ;; - - *.lo) - # A library object. + *.lo | *.$objext) + # A library or standard object. if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - if test "$build_libtool_libs" = yes && test "$dlopen" = yes; then + # This file was specified with -dlopen. + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $arg" prev= continue else @@ -1182,357 +1217,890 @@ compiler." # Preload the old-style object. dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"` prev= + else + case $arg in + *.lo) libobjs="$libobjs $arg" ;; + *) objs="$objs $arg" ;; + esac fi - libobjs="$libobjs $arg" + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue ;; *.la) # A libtool-controlled library. - dlname= - libdir= - library_names= - old_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 1 + 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 + + # 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 + status=$? + if test $status -ne 0 && test ! -d $output_objdir; then + 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 1 + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + 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 + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + libs="$libs $deplib" + done + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + case $linkmode in + lib) + passes="conv link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 + exit 1 + ;; + 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 = prog; then + # Determine which files to process + case $pass in + dlopen) + libs="$dlfiles" + save_deplibs="$deplibs" # Collect dlpreopened libraries + deplibs= + ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + for deplib in $libs; do + lib= + found=no + case $deplib in + -l*) + if test $linkmode = oldlib && test $linkmode = obj; then + $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2 + continue + fi + if test $pass = conv; then + deplibs="$deplib $deplibs" + 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 + # Search the libtool library + lib="$searchdir/lib${name}.la" + if test -f "$lib"; then + found=yes + break + fi + 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 + 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" + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + ;; + *) + $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 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) + if test "$deplibs_check_method" != pass_all; then + echo + echo "*** Warning: This library needs some functionality provided by $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." + 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 = 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 + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + if test $found = yes || test -f "$lib"; then : + else + $echo "$modename: cannot find the library \`$lib'" 1>&2 + exit 1 + fi # Check to see that this really is a libtool archive. - if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + if (sed -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else - $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2 + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit 1 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 variable installed. installed=yes # Read the .la file - # If there is no directory component, then add one. - case "$arg" in - */* | *\\*) . $arg ;; - *) . ./$arg ;; + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; esac + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test $linkmode = oldlib && test $linkmode = obj; }; then + # Add dl[pre]opened files of deplib + 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 1 + 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" + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + 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 1 + 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 \`$arg'" 1>&2 + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit 1 fi - # Find the relevant object directory and library name. - name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'` - - if test "X$installed" = Xyes; then - dir="$libdir" - else - dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` - if test "X$dir" = "X$arg"; then - dir="$objdir" + # 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 1 + 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. + dlprefiles="$dlprefiles $lib" else - dir="$dir/$objdir" + newdlfiles="$newdlfiles $lib" fi - fi - - if test -n "$dependency_libs"; then - # Extract -R and -L from dependency_libs - temp_deplibs= - for deplib in $dependency_libs; do - case "$deplib" in - -R*) temp_xrpath=`$echo "X$deplib" | $Xsed -e 's/^-R//'` - case " $rpath $xrpath " in - *" $temp_xrpath "*) ;; - *) xrpath="$xrpath $temp_xrpath";; - esac;; - -L*) case "$compile_command $temp_deplibs " in - *" $deplib "*) ;; - *) temp_deplibs="$temp_deplibs $deplib";; - esac - temp_dir=`$echo "X$deplib" | $Xsed -e 's/^-L//'` - case " $lib_search_path " in - *" $temp_dir "*) ;; - *) lib_search_path="$lib_search_path $temp_dir";; - esac - ;; - *) temp_deplibs="$temp_deplibs $deplib";; - esac - done - dependency_libs="$temp_deplibs" - fi - - if test -z "$libdir"; then - # It is a libtool convenience library, so add in its objects. - convenience="$convenience $dir/$old_library" - old_convenience="$old_convenience $dir/$old_library" - deplibs="$deplibs$dependency_libs" - compile_command="$compile_command $dir/$old_library$dependency_libs" - finalize_command="$finalize_command $dir/$old_library$dependency_libs" continue - fi + fi # $pass = dlopen - # This library was specified with -dlopen. - if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - if test -z "$dlname" || test "$dlopen" != yes || test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking statically, - # we need to preload. - prev=dlprefiles - else - # We should not create a dependency on this library, but we - # may need any libraries it requires. - compile_command="$compile_command$dependency_libs" - finalize_command="$finalize_command$dependency_libs" - prev= - continue + # 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 - fi + ;; + esac + laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` - # The library was specified with -dlpreopen. - if test "$prev" = dlprefiles; then + # 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 + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + 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 1 + fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then - dlprefiles="$dlprefiles $dir/$old_library" + 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 - dlprefiles="$dlprefiles $dir/$linklib" + newdlprefiles="$newdlprefiles $dir/$linklib" fi - prev= + 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" + fi + continue fi - if test -n "$library_names" && - { test "$prefer_static_libs" = no || test -z "$old_library"; }; then - link_against_libtool_libs="$link_against_libtool_libs $arg" - if test -n "$shlibpath_var"; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath " in - *" $dir "*) ;; - *) temp_rpath="$temp_rpath $dir" ;; - esac + 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 - # 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 - $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 - absdir="$dir" + 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 - ;; - esac - - # This is the magic to use -rpath. - # Skip directories that are in the system default run-time - # search path, unless they have been requested with -R. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac - ;; - esac + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in + link_static=no # Whether the deplib will be linked statically + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + # Link against this shared library + + if test "$linkmode,$pass" = "prog,link" || + { 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 "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; esac - ;; - esac + if test $linkmode = prog; then + # We need to hardcode the library path + if test -n "$shlibpath_var"; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + *" $dir "*) ;; + *" $absdir "*) ;; + *) temp_rpath="$temp_rpath $dir" ;; + esac + fi + fi + fi # $linkmode,$pass = prog,link... - lib_linked=yes - case "$hardcode_action" in - immediate | unsupported) - if test "$hardcode_direct" = no; then - compile_command="$compile_command $dir/$linklib" - deplibs="$deplibs $dir/$linklib" - case "$host" in - *-*-cygwin* | *-*-mingw* | *-*-os2*) - dllsearchdir=`cd "$dir" && pwd || echo "$dir"` - if test -n "$dllsearchpath"; then - dllsearchpath="$dllsearchpath:$dllsearchdir" - else - dllsearchpath="$dllsearchdir" - fi - ;; - esac - elif test "$hardcode_minus_L" = no; then - case "$host" in - *-*-sunos*) - compile_shlibpath="$compile_shlibpath$dir:" + 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 + + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + 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*) + major=`expr $current - $age` + versuffix="-$major" ;; esac - case "$compile_command " in - *" -L$dir "*) ;; - *) compile_command="$compile_command -L$dir";; - esac - compile_command="$compile_command -l$name" - deplibs="$deplibs -L$dir -l$name" - elif test "$hardcode_shlibpath_var" = no; then - case ":$compile_shlibpath:" in - *":$dir:"*) ;; - *) compile_shlibpath="$compile_shlibpath$dir:";; + 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'" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + eval cmds=\"$extract_expsyms_cmds\" + for cmd in $cmds; do + IFS="$save_ifs" + $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'" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + eval cmds=\"$old_archive_from_expsyms_cmds\" + for cmd in $cmds; do + IFS="$save_ifs" + $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" + 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" + 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 1 + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac - compile_command="$compile_command -l$name" - deplibs="$deplibs -l$name" + 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 - lib_linked=no + 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 - relink) + 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 - compile_command="$compile_command $absdir/$linklib" - deplibs="$deplibs $absdir/$linklib" + add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then - case "$compile_command " in - *" -L$absdir "*) ;; - *) compile_command="$compile_command -L$absdir";; - esac - compile_command="$compile_command -l$name" - deplibs="$deplibs -L$absdir -l$name" + add_dir="-L$libdir" + add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then - case ":$compile_shlibpath:" in - *":$absdir:"*) ;; - *) compile_shlibpath="$compile_shlibpath$absdir:";; + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac - compile_command="$compile_command -l$name" - deplibs="$deplibs -l$name" + add="-l$name" else - lib_linked=no + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + add="-l$name" fi - ;; - *) - lib_linked=no - ;; - esac - - if test "$lib_linked" != yes; then - $echo "$modename: configuration error: unsupported hardcode properties" - exit 1 - fi - - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes; then - finalize_command="$finalize_command $libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - case "$finalize_command " in - *" -L$libdir "*) ;; - *) finalize_command="$finalize_command -L$libdir";; - esac - finalize_command="$finalize_command -l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case ":$finalize_shlibpath:" in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:";; - esac - finalize_command="$finalize_command -l$name" - else - # We cannot seem to hardcode it, guess we'll fake it. - case "$finalize_command " in - *" -L$dir "*) ;; - *) finalize_command="$finalize_command -L$libdir";; - esac - finalize_command="$finalize_command -l$name" + 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 - else - # Transform directly to old archives if we don't build new libraries. - if test -n "$pic_flag" && test -z "$old_library"; then - $echo "$modename: cannot find static library for \`$arg'" 1>&2 - exit 1 + elif test $linkmode = prog; then + 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 + # Try to link the static library # 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_command="$compile_command $dir/$linklib" - finalize_command="$finalize_command $dir/$linklib" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" else - case "$compile_command " in - *" -L$dir "*) ;; - *) compile_command="$compile_command -L$dir";; - esac - compile_command="$compile_command -l$name" - case "$finalize_command " in - *" -L$dir "*) ;; - *) finalize_command="$finalize_command -L$dir";; - esac - finalize_command="$finalize_command -l$name" + 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 library needs some functionality provided by $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 "*** Therefore, libtool will create a static module, that should work " + echo "*** as long as the dlopening 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 + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + convenience="$convenience $dir/$old_library" + old_convenience="$old_convenience $dir/$old_library" + 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 - fi - - # Add in any libraries that this one depends upon. - compile_command="$compile_command$dependency_libs" - finalize_command="$finalize_command$dependency_libs" - 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 + 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" + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + tmp_libs="$tmp_libs $deplib" + done - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" + 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="-L$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 1 + fi + if test "$absdir" != "$libdir"; then + $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 + fi + path="-L$absdir" + fi + ;; + *) continue ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$deplibs $path" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test $pass = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done fi - done - - if test -n "$prev"; then - $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 - $echo "$help" 1>&2 - exit 1 - 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" - - case "$output" in - "") - $echo "$modename: you must specify an output file" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; + if test $pass != dlopen; then + test $pass != scan && dependency_libs="$newdependency_libs" + 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 - *.a | *.lib) - if test -n "$link_against_libtool_libs"; then - $echo "$modename: error: cannot link libtool libraries into archives" 1>&2 - exit 1 + 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 + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + *) + 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 - - if test -n "$deplibs"; then - $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 + if test "$pass" = "conv" && + { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then + libs="$deplibs" # reset libs + deplibs= fi + done # for pass + if test $linkmode = prog; then + dlfiles="$newdlfiles" + dlprefiles="$newdlprefiles" + fi + case $linkmode in + oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi @@ -1560,11 +2128,12 @@ compiler." # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" + objs="$objs$old_deplibs" ;; - *.la) + lib) # Make sure we only generate libraries of the form `libNAME.la'. - case "$outputname" in + case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval libname=\"$libname_spec\" @@ -1585,26 +2154,20 @@ compiler." ;; esac - 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 - if test -n "$objs"; then - $echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1 - exit 1 - fi - - # How the heck are we supposed to write a wrapper for a shared library? - if test -n "$link_against_libtool_libs"; then - $echo "$modename: error: cannot link shared libraries into libtool libraries" 1>&2 - exit 1 + 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 1 + 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 -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen' is ignored for libtool libraries" 1>&2 + if test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath @@ -1622,7 +2185,6 @@ compiler." build_libtool_libs=convenience build_old_libs=yes fi - dependency_libs="$deplibs" if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2 @@ -1649,8 +2211,8 @@ compiler." age="$4" # Check that each of the things are valid numbers. - case "$current" in - 0 | [1-9] | [1-9][0-9]*) ;; + case $current in + 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; *) $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 @@ -1658,8 +2220,8 @@ compiler." ;; esac - case "$revision" in - 0 | [1-9] | [1-9][0-9]*) ;; + case $revision in + 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; *) $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 @@ -1667,8 +2229,8 @@ compiler." ;; esac - case "$age" in - 0 | [1-9] | [1-9][0-9]*) ;; + case $age in + 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; *) $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 @@ -1686,12 +2248,31 @@ compiler." major= versuffix= verstring= - case "$version_type" in + 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="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current"; + ;; + irix) major=`expr $current - $age + 1` - versuffix="$major.$revision" verstring="sgi$major.$revision" # Add in all the interfaces that we are compatible with. @@ -1701,6 +2282,10 @@ compiler." loop=`expr $loop - 1` verstring="sgi$major.$iface:$verstring" done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" ;; linux) @@ -1730,21 +2315,11 @@ compiler." versuffix=".$current.$revision" ;; - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; - - freebsd-elf) - major=".$current" - versuffix=".$current"; - ;; - windows) - # Like Linux, but with '-' rather than '.', since we only - # want one extension on Windows 95. + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. major=`expr $current - $age` - versuffix="-$major-$age-$revision" + versuffix="-$major" ;; *) @@ -1758,6 +2333,16 @@ compiler." if test -z "$vinfo" && test -n "$release"; then major= verstring="0.0" + 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 @@ -1771,7 +2356,7 @@ compiler." 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 @@ -1783,30 +2368,12 @@ compiler." # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi - - dependency_libs="$deplibs" - case "$host" in - *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*) - # these systems don't actually have a c library (as such)! - ;; - *) - # Add libc to deplibs on all other systems. - deplibs="$deplibs -lc" - ;; - esac fi - # Create the output directory, or remove our outputs if we need to. - if test -d $output_objdir; then + if test "$mode" != relink; then + # Remove our outputs. $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*" $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.* - else - $show "$mkdir $output_objdir" - $run $mkdir $output_objdir - status=$? - if test $status -ne 0 && test ! -d $output_objdir; then - exit $status - fi fi # Now set the variables for building old libraries. @@ -1817,7 +2384,73 @@ compiler." 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*) + # Do not include libc due to us having libc/libc_r. + ;; + *) + # 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 @@ -1832,7 +2465,7 @@ compiler." major="" newdeplibs= droppeddeps=no - case "$deplibs_check_method" in + 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 @@ -1851,13 +2484,13 @@ compiler." int main() { return 0; } EOF $rm conftest - $C_compiler -o conftest conftest.c $deplibs + $CC -o conftest conftest.c $deplibs if test $? -eq 0 ; 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" != "" ; then + if test -n "$name" && test "$name" != "0"; then libname=`eval \\$echo \"$libname_spec\"` deplib_matches=`eval \\$echo \"$library_names_spec\"` set dummy $deplib_matches @@ -1882,9 +2515,9 @@ EOF for i in $deplibs; do name="`expr $i : '-l\(.*\)'`" # If $name is empty we are operating on a -L argument. - if test "$name" != "" ; then + if test -n "$name" && test "$name" != "0"; then $rm conftest - $C_compiler -o conftest conftest.c $i + $CC -o conftest conftest.c $i # Did it work? if test $? -eq 0 ; then ldd_output=`ldd conftest` @@ -1918,19 +2551,19 @@ EOF ;; file_magic*) set dummy $deplibs_check_method - file_magic_regex="`expr \"$deplibs_check_method\" : \"$2 \(.*\)\"`" + 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" != "" ; then + if test -n "$name" && test "$name" != "0"; then libname=`eval \\$echo \"$libname_spec\"` - for i in $lib_search_path; do + 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 + continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. @@ -1940,7 +2573,7 @@ EOF potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | sed 's/.* -> //'` - case "$potliblink" in + case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac @@ -1968,6 +2601,40 @@ EOF 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 + 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 + 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 + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + echo "*** Warning: This library needs some functionality provided by $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." + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; none | unknown | *) newdeplibs="" if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ @@ -1990,6 +2657,13 @@ EOF 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 @@ -2015,6 +2689,21 @@ EOF 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! @@ -2025,9 +2714,64 @@ EOF 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" + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + 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 library_names=\"$library_names_spec\" set dummy $library_names @@ -2039,6 +2783,7 @@ EOF else soname="$realname" fi + test -z "$dlname" && dlname=$soname lib="$output_objdir/$realname" for link @@ -2047,12 +2792,19 @@ EOF done # Ensure that we have .o objects for linkers which dislike .lo - # (e.g. aix) incase we are running --disable-static + # (e.g. aix) in case we are running --disable-static for obj in $libobjs; do - oldobj=`$echo "X$obj" | $Xsed -e "$lo2o"` - if test ! -f $oldobj; then - $show "${LN_S} $obj $oldobj" - $run ${LN_S} $obj $oldobj || exit $? + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir="." + else + xdir="$xdir" + fi + baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` + if test ! -f $xdir/$oldobj; then + $show "(cd $xdir && ${LN_S} $baseobj $oldobj)" + $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $? fi done @@ -2103,7 +2855,7 @@ EOF for xlib in $convenience; do # Extract the objects. - case "$xlib" in + case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac @@ -2128,7 +2880,12 @@ EOF if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" - linkopts="$linkopts $flag" + 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. @@ -2145,6 +2902,12 @@ EOF 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 $? + exit 0 + fi + # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then @@ -2161,12 +2924,7 @@ EOF fi ;; - *.lo | *.o | *.obj) - if test -n "$link_against_libtool_libs"; then - $echo "$modename: error: cannot link libtool libraries into objects" 1>&2 - exit 1 - fi - + obj) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi @@ -2191,9 +2949,9 @@ EOF $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi - case "$output" in + case $output in *.lo) - if test -n "$objs"; then + if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit 1 fi @@ -2217,7 +2975,7 @@ EOF gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec - wl= + wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then @@ -2236,7 +2994,7 @@ EOF for xlib in $convenience; do # Extract the objects. - case "$xlib" in + case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac @@ -2260,7 +3018,7 @@ EOF fi # Create the old-style object. - reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" + 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" eval cmds=\"$reload_cmds\" @@ -2295,7 +3053,7 @@ EOF exit 0 fi - if test -n "$pic_flag"; then + 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" @@ -2311,8 +3069,16 @@ EOF # Just create a symlink. $show $rm $libobj $run $rm $libobj - $show "$LN_S $obj $libobj" - $run $LN_S $obj $libobj || exit $? + xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$libobj"; then + xdir="." + else + xdir="$xdir" + fi + baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` + oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` + $show "(cd $xdir && $LN_S $oldobj $baseobj)" + $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $? fi if test -n "$gentop"; then @@ -2323,8 +3089,10 @@ EOF exit 0 ;; - # Anything else should be a program. - *) + 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 @@ -2334,20 +3102,27 @@ EOF fi if test "$preload" = yes; then - if test "$dlopen" = unknown && test "$dlopen_self" = unknown && + 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 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 + + 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 "$compile_rpath " in - *" $libdir "*) ;; - *) compile_rpath="$compile_rpath $libdir" ;; - esac case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; @@ -2365,7 +3140,7 @@ EOF hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. - case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) @@ -2383,6 +3158,14 @@ EOF *) perm_rpath="$perm_rpath $libdir" ;; esac fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$libdir:"*) ;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + ;; + esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && @@ -2401,7 +3184,7 @@ EOF hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. - case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) @@ -2428,23 +3211,6 @@ EOF fi finalize_rpath="$rpath" - 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 binary in the object directory, then wrap it. - if test ! -d $output_objdir; then - $show "$mkdir $output_objdir" - $run $mkdir $output_objdir - status=$? - if test $status -ne 0 && test ! -d $output_objdir; then - exit $status - fi - fi - 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` @@ -2461,7 +3227,7 @@ EOF fi if test -n "$dlsyms"; then - case "$dlsyms" in + case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. @@ -2493,7 +3259,7 @@ extern \"C\" { test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. - progfiles=`$echo "X$objs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + 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'" @@ -2503,7 +3269,7 @@ extern \"C\" { $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"' @@ -2555,27 +3321,25 @@ extern \"C\" { #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ -# define lt_ptr_t void * +# define lt_ptr void * #else -# define lt_ptr_t char * +# define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; - lt_ptr_t address; + lt_ptr address; } lt_preloaded_symbols[] = {\ " - sed -n -e 's/^: \([^ ]*\) $/ {\"\1\", (lt_ptr_t) 0},/p' \ - -e 's/^. \([^ ]*\) \([^ ]*\)$/ {"\2", (lt_ptr_t) \&\2},/p' \ - < "$nlist" >> "$output_objdir/$dlsyms" + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ - {0, (lt_ptr_t) 0} + {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ @@ -2592,22 +3356,27 @@ static const void *lt_preloaded_setup() { fi pic_flag_for_symtable= - case "$host" in + 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*) + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";; + esac;; + *-*-hpux*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DPIC";; esac esac # Now compile the dynamic symbol file. - $show "(cd $output_objdir && $C_compiler -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" - $run eval '(cd $output_objdir && $C_compiler -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? + $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" + $run eval '(cd $output_objdir && $CC -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" @@ -2632,7 +3401,7 @@ static const void *lt_preloaded_setup() { finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi - if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then + if test $need_relink = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" @@ -2641,7 +3410,7 @@ static const void *lt_preloaded_setup() { $show "$link_command" $run eval "$link_command" status=$? - + # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" @@ -2655,7 +3424,7 @@ static const void *lt_preloaded_setup() { # We should set the shlibpath_var rpath= for dir in $temp_rpath; do - case "$dir" in + case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" @@ -2697,11 +3466,24 @@ static const void *lt_preloaded_setup() { 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 0 + 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 @@ -2721,7 +3503,7 @@ static const void *lt_preloaded_setup() { # 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 @@ -2733,12 +3515,24 @@ static const void *lt_preloaded_setup() { # 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" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $0 --fallback-echo"; then - case "$0" in + case $0 in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";; *) qecho="$SHELL `pwd`/$0 --fallback-echo";; esac @@ -2754,6 +3548,11 @@ static const void *lt_preloaded_setup() { 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 ;; + *) exeext= ;; + esac $rm $output trap "$rm $output; exit 1" 1 2 15 @@ -2776,14 +3575,14 @@ sed_quote_subst='$sed_quote_subst' # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. -if test \"\${CDPATH+set}\" = set; then CDPATH=; export CDPATH; fi +if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: - link_against_libtool_libs='$link_against_libtool_libs' + 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 @@ -2816,7 +3615,7 @@ else # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in - [\\/]* | [A-Za-z]:[\\/]*) thisdir=\"\$destdir\" ;; + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi @@ -2832,9 +3631,9 @@ else if test "$fast_install" = yes; then echo >> $output "\ - program=lt-'$outputname' + 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 @@ -2851,8 +3650,9 @@ else # relink executable if necessary if test -n \"\$relink_command\"; then - if (cd \"\$thisdir\" && eval \$relink_command); then : + if relink_command_output=\`eval \$relink_command 2>&1\`; then : else + $echo \"\$relink_command_output\" >&2 $rm \"\$progdir/\$file\" exit 1 fi @@ -2865,7 +3665,7 @@ else fi" else echo >> $output "\ - program='$outputname$exeext' + program='$outputname' progdir=\"\$thisdir/$objdir\" " fi @@ -2901,13 +3701,21 @@ else # Run the actual program with our arguments. " case $host in - *-*-cygwin* | *-*-mingw | *-*-os2*) - # win32 systems need to use the prog path for dll - # lookup to work + # win32 systems need to use the prog path for dll + # lookup to work + *-*-cygwin* | *-*-pw32*) + $echo >> $output "\ + exec \$progdir/\$program \${1+\"\$@\"} +" + ;; + + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2*) $echo >> $output "\ exec \$progdir\\\\\$program \${1+\"\$@\"} " ;; + *) $echo >> $output "\ # Export the path to the program. @@ -2949,7 +3757,7 @@ fi\ oldobjs="$libobjs_save" build_libtool_libs=no else - oldobjs="$objs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP` + oldobjs="$objs$old_deplibs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP` fi addlibs="$old_convenience" fi @@ -2965,11 +3773,11 @@ fi\ exit $status fi generated="$generated $gentop" - + # Add in members from convenience archives. for xlib in $addlibs; do # Extract the objects. - case "$xlib" in + case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac @@ -2995,14 +3803,21 @@ fi\ if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then eval cmds=\"$old_archive_from_new_cmds\" else - # Ensure that we have .o objects in place incase we decided + # Ensure that we have .o objects in place in case we decided # not to build a shared library, and have fallen back to building # static libs even though --disable-static was passed! for oldobj in $oldobjs; do if test ! -f $oldobj; then - obj=`$echo "X$oldobj" | $Xsed -e "$o2lo"` - $show "${LN_S} $obj $oldobj" - $run ${LN_S} $obj $oldobj || exit $? + xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$oldobj"; then + xdir="." + else + xdir="$xdir" + fi + baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'` + obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` + $show "(cd $xdir && ${LN_S} $obj $baseobj)" + $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $? fi done @@ -3023,19 +3838,26 @@ fi\ fi # Now create the libtool archive. - case "$output" in + case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" - if test -n "$xrpath"; then - temp_xrpath= - for libdir in $xrpath; do - temp_xrpath="$temp_xrpath -R$libdir" - done - dependency_libs="$temp_xrpath $dependency_libs" - fi + # 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 $0 --mode=relink $libtool_args" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` # Only create the output if not a dry run. if test -z "$run"; then @@ -3045,8 +3867,52 @@ fi\ 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 1 + 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 1 + 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 1 + fi + newdlprefiles="$newdlprefiles $libdir/$name" + 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) tdlname=../bin/$dlname ;; + esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP @@ -3055,7 +3921,7 @@ fi\ # It is necessary for linking the library. # The name that we can dlopen(3). -dlname='$dlname' +dlname='$tdlname' # Names of this library. library_names='$library_names' @@ -3074,16 +3940,23 @@ revision=$revision # Is this an already installed library? installed=$installed +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + # Directory that this library needs to be installed in: -libdir='$install_libdir'\ -" +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 $? + $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit 0 @@ -3095,10 +3968,12 @@ libdir='$install_libdir'\ # 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; then + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` - case "$arg" in + case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; @@ -3114,7 +3989,7 @@ libdir='$install_libdir'\ # 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 + case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; @@ -3137,7 +4012,7 @@ libdir='$install_libdir'\ continue fi - case "$arg" in + case $arg in -d) isdir=yes ;; -f) prev="-f" ;; -g) prev="-g" ;; @@ -3162,7 +4037,7 @@ libdir='$install_libdir'\ # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case "$arg" in + case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; @@ -3213,11 +4088,11 @@ libdir='$install_libdir'\ exit 1 fi fi - case "$destdir" in + case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do - case "$file" in + case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 @@ -3239,8 +4114,8 @@ libdir='$install_libdir'\ for file in $files; do # Do each installation. - case "$file" in - *.a | *.lib) + case $file in + *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; @@ -3256,8 +4131,9 @@ libdir='$install_libdir'\ library_names= old_library= + relink_command= # If there is no directory component, then add one. - case "$file" in + case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac @@ -3276,10 +4152,20 @@ libdir='$install_libdir'\ esac fi - dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/" + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$dir$objdir" + if test -n "$relink_command"; then + $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 + continue + fi + fi + # See the names of the shared library. set dummy $library_names if test -n "$2"; then @@ -3287,9 +4173,16 @@ libdir='$install_libdir'\ shift shift + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + # Install the shared library and build the symlinks. - $show "$install_prog $dir/$realname $destdir/$realname" - $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $? + $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. @@ -3336,11 +4229,11 @@ libdir='$install_libdir'\ fi # Deduce the name of the destination old-style object file. - case "$destfile" in + case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; - *.o | *.obj) + *.$objext) staticdest="$destfile" destfile= ;; @@ -3379,39 +4272,46 @@ libdir='$install_libdir'\ # Do a test to see if this is really a libtool program. if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - link_against_libtool_libs= + notinst_deplibs= relink_command= # If there is no directory component, then add one. - case "$file" in + case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Check the variables that should have been set. - if test -z "$link_against_libtool_libs"; then + if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2 exit 1 fi finalize=yes - for lib in $link_against_libtool_libs; do + 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 + case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi - libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`" + 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= + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then @@ -3423,6 +4323,7 @@ libdir='$install_libdir'\ $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 continue fi + file=`$echo "X$file" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` @@ -3444,6 +4345,23 @@ libdir='$install_libdir'\ fi fi + # remove .exe since cygwin /usr/bin/install will append another + # one anyways + 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" @@ -3460,6 +4378,11 @@ libdir='$install_libdir'\ $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? + if test -n "$stripme" && test -n "$striplib"; then + $show "$old_striplib $oldlib" + $run eval "$old_striplib $oldlib" || exit $? + fi + # Do each command in the postinstall commands. eval cmds=\"$old_postinstall_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' @@ -3478,11 +4401,10 @@ libdir='$install_libdir'\ if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" - exec $SHELL $0 --finish$current_libdirs - exit 1 + exec_cmd='$SHELL $0 --finish$current_libdirs' + else + exit 0 fi - - exit 0 ;; # libtool finish mode @@ -3520,7 +4442,7 @@ libdir='$install_libdir'\ fi # Exit here if they wanted silent mode. - test "$show" = : && exit 0 + test "$show" = ":" && exit 0 echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" @@ -3530,7 +4452,7 @@ libdir='$install_libdir'\ 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 \`-LLIBDIR'" + 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" @@ -3580,7 +4502,7 @@ libdir='$install_libdir'\ fi dir= - case "$file" in + case $file in *.la) # Check to see that this really is a libtool archive. if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : @@ -3595,7 +4517,7 @@ libdir='$install_libdir'\ library_names= # If there is no directory component, then add one. - case "$file" in + case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac @@ -3650,13 +4572,13 @@ libdir='$install_libdir'\ args= for file do - case "$file" in + case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. - case "$file" in + case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac @@ -3672,8 +4594,10 @@ libdir='$install_libdir'\ done if test -z "$run"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi # Restore saved enviroment variables if test "${save_LC_ALL+set}" = set; then @@ -3683,29 +4607,35 @@ libdir='$install_libdir'\ LANG="$save_LANG"; export LANG fi - # Now actually exec the command. - eval "exec \$cmd$args" - - $echo "$modename: cannot exec \$cmd$args" - exit 1 + # Now prepare to actually exec the command. + exec_cmd='"$cmd"$args' else # Display what would be done. - eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" - $echo "export $shlibpath_var" + if test -n "$shlibpath_var"; then + eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" + $echo "export $shlibpath_var" + fi $echo "$cmd$args" exit 0 fi ;; - # libtool uninstall mode - uninstall) - modename="$modename: uninstall" + # 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 + case $arg in + -f) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac @@ -3717,14 +4647,42 @@ libdir='$install_libdir'\ exit 1 fi + rmdirs= + for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "X$dir" = "X$file" && dir=. + if test "X$dir" = "X$file"; then + dir=. + objdir="$objdir" + else + objdir="$dir/$objdir" + 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 + case $name in *.la) # Possibly a libtool archive, so verify it. if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then @@ -3732,38 +4690,43 @@ libdir='$install_libdir'\ # Delete the libtool libraries and symlinks. for n in $library_names; do - rmfiles="$rmfiles $dir/$n" + rmfiles="$rmfiles $objdir/$n" done - test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library" - - $show "$rm $rmfiles" - $run $rm $rmfiles - - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - eval cmds=\"$postuninstall_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + + if test $mode = uninstall; then + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + eval cmds=\"$postuninstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + if test $? != 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" - done - IFS="$save_ifs" - fi + fi - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - eval cmds=\"$old_postuninstall_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + eval cmds=\"$old_postuninstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + if test $? != 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" - done - IFS="$save_ifs" + fi + # FIXME: should reinstall the best remaining shared library. fi - - # FIXME: should reinstall the best remaining shared library. fi ;; @@ -3772,17 +4735,35 @@ libdir='$install_libdir'\ oldobj=`$echo "X$name" | $Xsed -e "$lo2o"` rmfiles="$rmfiles $dir/$oldobj" fi - $show "$rm $rmfiles" - $run $rm $rmfiles ;; *) - $show "$rm $rmfiles" - $run $rm $rmfiles + # Do a test to see if this is a libtool program. + if test $mode = clean && + (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + relink_command= + . $dir/$file + + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + fi ;; esac + $show "$rm $rmfiles" + $run $rm $rmfiles || exit_status=1 done - exit 0 + + # 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 ;; "") @@ -3792,13 +4773,20 @@ libdir='$install_libdir'\ ;; esac - $echo "$modename: invalid operation mode \`$mode'" 1>&2 - $echo "$generic_help" 1>&2 - exit 1 + if test -z "$exec_cmd"; then + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 + fi fi # test -z "$show_help" +if test -n "$exec_cmd"; then + eval exec $exec_cmd + exit 1 +fi + # We need to display help for each of the modes. -case "$mode" in +case $mode in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... @@ -3817,6 +4805,7 @@ Provide generalized library-building support services. 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 @@ -3829,6 +4818,20 @@ a more detailed description of MODE." exit 0 ;; +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 @@ -3838,6 +4841,8 @@ 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 @@ -3917,6 +4922,8 @@ The following components of LINK-COMMAND are treated specially: -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 -release RELEASE specify package release information |