Upgraded TEA to 3.6 and update the version to 1.0.9. Regenerated configure.
authorpatthoyts <patthoyts>
Fri, 30 Mar 2007 21:22:54 +0000 (21:22 +0000)
committerpatthoyts <patthoyts>
Fri, 30 Mar 2007 21:22:54 +0000 (21:22 +0000)
Improved the error reporting by making use of strerror() if present.

ChangeLog
Makefile.in
aclocal.m4
configure
configure.in
generic/udp_tcl.c
tclconfig/tcl.m4
tests/udp-srv.test

index e950ae23feddc37768ab0b3a792ea36e4511001c..1674cab3828e2c1b74e1f25d673f0ee6bc724869 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,11 @@
 
        * generic/udp_tcl.c: Added support for IP_MULTICAST_LOOP for
        Konstantin Khomoutov to control multicast loopback transmission.
+       Improved the error reporting by using strerror if available.
+       * Makefile.in: Fix 'make shell' to load the built library.
+       * configure.in: Incremented version and use TEA 3.6
+       * tclconfig/*: Upgraded to TEA 3.6
+       * aclocal.m4: Check for strerror presence.
 
 2007-01-31  Pat Thoyts  <patthoyts@users.sourceforge.net>
 
index 33246d7dcbbfb04a5491f47607f5b153cef1dc95..9ec6714e3acf504f4673f96f4a129d687fad6352 100644 (file)
@@ -235,7 +235,7 @@ test: binaries libraries
        $(TCLSH) `@CYGPATH@ $(srcdir)/tests/all.tcl` $(TESTFLAGS)
 
 shell: binaries libraries
-       @$(TCLSH) $(SCRIPT)
+       echo "load $(PKG_LIB_FILE);set argv $(SCRIPT)" | $(TCLSH)
 
 gdb:
        $(TCLSH_ENV) gdb $(TCLSH_PROG) $(SCRIPT)
index 55df735739eed0852ae5be9e3657ec0ae8260289..83a84ab48501c9089f8f036eea33b957fca8271e 100644 (file)
@@ -86,6 +86,23 @@ AC_DEFUN(TCLUDP_CHECK_CLOEXEC, [
     fi
 ])
 
+#-------------------------------------------------------------------------
+# TCLUDP_CHECK_STRERROR
+#
+#      Do we have strerror()
+#
+# Results
+#      Sets HAVE_STRERROR
+#
+#-------------------------------------------------------------------------
+
+AC_DEFUN(TCLUDP_CHECK_STRERROR, [
+    AC_CHECK_LIB(c,strerror,[tcludp_strerror_ok=yes],[tcludp_strerror_ok=no])
+    if test "$tcludp_strerror_ok" = "yes"; then
+        TEA_ADD_CFLAGS([-DHAVE_STRERROR])
+    fi
+])
+
 #-------------------------------------------------------------------------
 # TCLUDP_CONFIG
 #
@@ -98,4 +115,5 @@ AC_DEFUN(TCLUDP_CHECK_CLOEXEC, [
 
 AC_DEFUN(TCLUDP_CONFIG, [
     TCLUDP_CHECK_CLOEXEC
+    TCLUDP_CHECK_STRERROR
 ])
index 11ebb8ec631468003c99ef644652d8d637328ecc..1bca3ce78bd9ab0b2b069b43119a13de7c367ae8 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59 for udp 1.0.8.
+# Generated by GNU Autoconf 2.59 for udp 1.0.9.
 #
 # Copyright (C) 2003 Free Software Foundation, Inc.
 # This configure script is free software; the Free Software Foundation
@@ -267,8 +267,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
 # Identity of this package.
 PACKAGE_NAME='udp'
 PACKAGE_TARNAME='udp'
-PACKAGE_VERSION='1.0.8'
-PACKAGE_STRING='udp 1.0.8'
+PACKAGE_VERSION='1.0.9'
+PACKAGE_STRING='udp 1.0.9'
 PACKAGE_BUGREPORT=''
 
 # Factoring default headers for most tests.
@@ -777,7 +777,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures udp 1.0.8 to adapt to many kinds of systems.
+\`configure' configures udp 1.0.9 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -834,7 +834,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of udp 1.0.8:";;
+     short | recursive ) echo "Configuration of udp 1.0.9:";;
    esac
   cat <<\_ACEOF
 
@@ -965,7 +965,7 @@ fi
 test -n "$ac_init_help" && exit 0
 if $ac_init_version; then
   cat <<\_ACEOF
-udp configure 1.0.8
+udp configure 1.0.9
 generated by GNU Autoconf 2.59
 
 Copyright (C) 2003 Free Software Foundation, Inc.
@@ -979,7 +979,7 @@ cat >&5 <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by udp $as_me 1.0.8, which was
+It was created by udp $as_me 1.0.9, which was
 generated by GNU Autoconf 2.59.  Invocation command line was
 
   $ $0 $@
@@ -1325,7 +1325,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
     # TEA extensions pass this us the version of TEA they think they
     # are compatible with.
-    TEA_VERSION="3.5"
+    TEA_VERSION="3.6"
 
     echo "$as_me:$LINENO: checking for correct TEA configuration" >&5
 echo $ECHO_N "checking for correct TEA configuration... $ECHO_C" >&6
@@ -1336,15 +1336,15 @@ echo "$as_me: error:
 The PACKAGE_NAME variable must be defined by your TEA configure.in" >&2;}
    { (exit 1); exit 1; }; }
     fi
-    if test x"3.5" = x ; then
+    if test x"3.6" = x ; then
        { { echo "$as_me:$LINENO: error:
 TEA version not specified." >&5
 echo "$as_me: error:
 TEA version not specified." >&2;}
    { (exit 1); exit 1; }; }
-    elif test "3.5" != "${TEA_VERSION}" ; then
-       echo "$as_me:$LINENO: result: warning: requested TEA version \"3.5\", have \"${TEA_VERSION}\"" >&5
-echo "${ECHO_T}warning: requested TEA version \"3.5\", have \"${TEA_VERSION}\"" >&6
+    elif test "3.6" != "${TEA_VERSION}" ; then
+       echo "$as_me:$LINENO: result: warning: requested TEA version \"3.6\", have \"${TEA_VERSION}\"" >&5
+echo "${ECHO_T}warning: requested TEA version \"3.6\", have \"${TEA_VERSION}\"" >&6
     else
        echo "$as_me:$LINENO: result: ok (TEA ${TEA_VERSION})" >&5
 echo "${ECHO_T}ok (TEA ${TEA_VERSION})" >&6
@@ -3360,9 +3360,12 @@ done
     if test -z "$no_pipe" -a -n "$GCC"; then
        echo "$as_me:$LINENO: checking if the compiler understands -pipe" >&5
 echo $ECHO_N "checking if the compiler understands -pipe... $ECHO_C" >&6
-       OLDCC="$CC"
-       CC="$CC -pipe"
-       cat >conftest.$ac_ext <<_ACEOF
+if test "${tcl_cv_cc_pipe+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+           hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe"
+           cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -3399,17 +3402,21 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+  tcl_cv_cc_pipe=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-CC="$OLDCC"
-           echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+tcl_cv_cc_pipe=no
 fi
 rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+           CFLAGS=$hold_cflags
+fi
+echo "$as_me:$LINENO: result: $tcl_cv_cc_pipe" >&5
+echo "${ECHO_T}$tcl_cv_cc_pipe" >&6
+       if test $tcl_cv_cc_pipe = yes; then
+           CFLAGS="$CFLAGS -pipe"
+       fi
     fi
 
     #--------------------------------------------------------------------
@@ -7443,7 +7450,6 @@ fi
     TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`'
     ECHO_VERSION='`echo ${PACKAGE_VERSION}`'
     TCL_LIB_VERSIONS_OK=ok
-    CFLAGS="${CPPFLAGS} ${CFLAGS}"
     CFLAGS_DEBUG=-g
     CFLAGS_OPTIMIZE=-O
     if test "$GCC" = "yes" ; then
@@ -8060,7 +8066,11 @@ _ACEOF
            #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?])
            #LIBS="$LIBS -lxnet"               # Use the XOPEN network library
 
-           SHLIB_SUFFIX=".sl"
+           if test "`uname -m`" = "ia64" ; then
+               SHLIB_SUFFIX=".so"
+           else
+               SHLIB_SUFFIX=".sl"
+           fi
            echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
 if test "${ac_cv_lib_dld_shl_load+set}" = set; then
@@ -8600,11 +8610,14 @@ echo "${ECHO_T}$tcl_cv_ld_elf" >&6
            CFLAGS_OPTIMIZE="-Os"
            SHLIB_CFLAGS="-fno-common"
            # To avoid discrepancies between what headers configure sees during
-           # preprocessing tests and compiling tests, add any -isysroot and
-           # -mmacosx-version-min flags present in CFLAGS to CPPFLAGS:
+           # preprocessing tests and compiling tests, move any -isysroot and
+           # -mmacosx-version-min flags from CFLAGS to CPPFLAGS:
            CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \
-               awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=1;i<=NF;i++) \
+               awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
                if ($i~/^(isysroot|mmacosx-version-min)/) print "-"$i}'`"
+           CFLAGS="`echo " ${CFLAGS}" | \
+               awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
+               if (!($i~/^(isysroot|mmacosx-version-min)/)) print "-"$i}'`"
            if test $do64bit = yes; then
                case `arch` in
                    ppc)
@@ -8812,7 +8825,7 @@ echo "${ECHO_T}$tcl_cv_ld_single_module" >&6
            DL_LIBS=""
            # Don't use -prebind when building for Mac OS X 10.4 or later only:
            test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int($2)}'`" -lt 4 -a \
-               "`echo "${CFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int($2)}'`" -lt 4 && \
+               "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int($2)}'`" -lt 4 && \
                LDFLAGS="$LDFLAGS -prebind"
            LDFLAGS="$LDFLAGS -headerpad_max_install_names"
            echo "$as_me:$LINENO: checking if ld accepts -search_paths_first flag" >&5
@@ -9227,6 +9240,8 @@ echo "${ECHO_T}$tcl_cv_ld_Bexport" >&6
 echo "$as_me: WARNING: 64bit support being disabled -- don't know magic for this platform" >&2;}
     fi
 
+
+
     # Step 4: disable dynamic loading if requested via a command-line switch.
 
     # Check whether --enable-load or --disable-load was given.
@@ -10358,6 +10373,84 @@ _ACEOF
     fi
 
 
+    echo "$as_me:$LINENO: checking for strerror in -lc" >&5
+echo $ECHO_N "checking for strerror in -lc... $ECHO_C" >&6
+if test "${ac_cv_lib_c_strerror+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lc  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char strerror ();
+int
+main ()
+{
+strerror ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"
+                        || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_c_strerror=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_c_strerror=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_c_strerror" >&5
+echo "${ECHO_T}$ac_cv_lib_c_strerror" >&6
+if test $ac_cv_lib_c_strerror = yes; then
+  tcludp_strerror_ok=yes
+else
+  tcludp_strerror_ok=no
+fi
+
+    if test "$tcludp_strerror_ok" = "yes"; then
+
+    PKG_CFLAGS="$PKG_CFLAGS -DHAVE_STRERROR"
+
+
+    fi
+
+
 
 #--------------------------------------------------------------------
 # This macro generates a line to use when building a library.  It
@@ -10707,6 +10800,7 @@ LIBOBJS=$ac_libobjs
 LTLIBOBJS=$ac_ltlibobjs
 
 
+CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""
 
 : ${CONFIG_STATUS=./config.status}
 ac_clean_files_save=$ac_clean_files
@@ -10978,7 +11072,7 @@ _ASBOX
 } >&5
 cat >&5 <<_CSEOF
 
-This file was extended by udp $as_me 1.0.8, which was
+This file was extended by udp $as_me 1.0.9, which was
 generated by GNU Autoconf 2.59.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -11033,7 +11127,7 @@ _ACEOF
 
 cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
-udp config.status 1.0.8
+udp config.status 1.0.9
 configured by $0, generated by GNU Autoconf 2.59,
   with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
 
index 3cba1e173f81fe6a041bbe65824c6d938fb666ca..8292034f065db9d93134b326f58f2d6166b043f5 100644 (file)
@@ -19,7 +19,7 @@ dnl   to configure the system for the local environment.
 # so you can encode the package version directly into the source files.
 #-----------------------------------------------------------------------
 
-AC_INIT([udp], [1.0.8])
+AC_INIT([udp], [1.0.9])
 
 #--------------------------------------------------------------------
 # Call TEA_INIT as the first TEA_ macro to set up initial vars.
@@ -27,7 +27,7 @@ AC_INIT([udp], [1.0.8])
 # as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE.
 #--------------------------------------------------------------------
 
-TEA_INIT([3.5])
+TEA_INIT([3.6])
 
 AC_CONFIG_AUX_DIR(tclconfig)
 
index 51fac952fd36f00be9a083abfa29d33e52e02929..1a04aee7203f3c0965e302742c63af52e1de6d23 100644 (file)
@@ -110,6 +110,7 @@ static int UdpSockGetPort(Tcl_Interp *interp, const char *s,
 static void udpTrace(const char *format, ...);
 static int  udpGetService(Tcl_Interp *interp, const char *service,
                           unsigned short *servicePort);
+static Tcl_Obj *ErrorToObj(const char * prefix);
 
 
 /*
@@ -1189,7 +1190,7 @@ UdpMulticast(ClientData instanceData, Tcl_Interp *interp,
     mreq.imr_interface.s_addr = INADDR_ANY;
     if (setsockopt(statePtr->sock, IPPROTO_IP, action,
                    (const char*)&mreq, sizeof(mreq)) < 0) {
-       Tcl_SetResult(interp, "error changing multicast group", TCL_STATIC);
+       Tcl_SetObjResult(interp, ErrorToObj("error changing multicast group"));
         return TCL_ERROR;
     }
 
@@ -1233,7 +1234,7 @@ udpGetOption(ClientData instanceData, Tcl_Interp *interp,
              CONST84 char *optionName, Tcl_DString *optionValue)
 {
     UdpState *statePtr = (UdpState *)instanceData;
-    CONST84 char * options[] = { "myport", "remote", "peer", "mcastgroups", "mcastloopback", "broadcast", "ttl", NULL};
+    CONST84 char * options[] = { "myport", "remote", "peer", "mcastgroups", "mcastloop", "broadcast", "ttl", NULL};
     int r = TCL_OK;
 
     if (optionName == NULL) {
@@ -1293,22 +1294,20 @@ udpGetOption(ClientData instanceData, Tcl_Interp *interp,
             socklen_t optlen = sizeof(int);
             if (getsockopt(statePtr->sock, SOL_SOCKET, SO_BROADCAST, 
                            (char *)&tmp, &optlen)) {
-                UDPTRACE("UDP error - getsockopt\n");
-                Tcl_SetResult(interp, "error in getsockopt", TCL_STATIC);
+               Tcl_SetObjResult(interp, ErrorToObj("error reading -broadcast"));
                 r = TCL_ERROR;
             } else {
                 Tcl_DStringSetLength(&ds, TCL_INTEGER_SPACE);
                 sprintf(Tcl_DStringValue(&ds), "%d", tmp);
             }
 
-       } else if (!strcmp("-mcastloopback", optionName)) {
+       } else if (!strcmp("-mcastloop", optionName)) {
 
             unsigned char tmp = 0;
             socklen_t optlen = sizeof(unsigned char);
             if (getsockopt(statePtr->sock, IPPROTO_IP, IP_MULTICAST_LOOP, 
                            (char *)&tmp, &optlen)) {
-                UDPTRACE("UDP error - getsockopt\n");
-                Tcl_SetResult(interp, "error in getsockopt", TCL_STATIC);
+               Tcl_SetObjResult(interp, ErrorToObj("error reading -mcastloop"));
                 r = TCL_ERROR;
             } else {
                 Tcl_DStringSetLength(&ds, TCL_INTEGER_SPACE);
@@ -1324,8 +1323,7 @@ udpGetOption(ClientData instanceData, Tcl_Interp *interp,
                cmd = IP_MULTICAST_TTL;
             if (getsockopt(statePtr->sock, IPPROTO_IP, cmd,
                (char *)&tmp, &optlen)) {
-                UDPTRACE("UDP error - getsockopt");
-                Tcl_SetResult(interp, "error in getsockopt", TCL_STATIC);
+               Tcl_SetObjResult(interp, ErrorToObj("error reading -ttl"));
                 r = TCL_ERROR;
             } else {
                 Tcl_DStringSetLength(&ds, TCL_INTEGER_SPACE);
@@ -1365,7 +1363,7 @@ udpSetOption(ClientData instanceData, Tcl_Interp *interp,
              CONST84 char *optionName, CONST84 char *newValue)
 {
     UdpState *statePtr = (UdpState *)instanceData;
-    CONST84 char * options = "remote mcastadd mcastdrop mcastloopback broadcast ttl";
+    CONST84 char * options = "remote mcastadd mcastdrop mcastloop broadcast ttl";
     int r = TCL_OK;
 
     if (!strcmp("-remote", optionName)) {
@@ -1410,15 +1408,13 @@ udpSetOption(ClientData instanceData, Tcl_Interp *interp,
         if (r == TCL_OK) {
             if (setsockopt(statePtr->sock, SOL_SOCKET, SO_BROADCAST, 
                            (const char *)&tmp, sizeof(int))) {
-                sprintf(errBuf, "%s", "udp - setsockopt");
-                UDPTRACE("UDP error - setsockopt\n");
-                Tcl_SetObjResult(interp, Tcl_NewStringObj(errBuf, -1));
+                Tcl_SetObjResult(interp, ErrorToObj("error setting -broadcast"));
                 r = TCL_ERROR;
             } else {
                 Tcl_SetObjResult(interp, Tcl_NewIntObj(tmp));
             }
         }
-    } else if (!strcmp("-mcastloopback", optionName)) {
+    } else if (!strcmp("-mcastloop", optionName)) {
 
         int tmp = 1;
         r = Tcl_GetInt(interp, newValue, &tmp);
@@ -1426,9 +1422,7 @@ udpSetOption(ClientData instanceData, Tcl_Interp *interp,
            unsigned char ctmp = (unsigned char)tmp;
             if (setsockopt(statePtr->sock, IPPROTO_IP, IP_MULTICAST_LOOP,
                            (const char *)&ctmp, sizeof(unsigned char))) {
-                sprintf(errBuf, "%s", "udp - setsockopt");
-                UDPTRACE("UDP error - setsockopt\n");
-                Tcl_SetObjResult(interp, Tcl_NewStringObj(errBuf, -1));
+                Tcl_SetObjResult(interp, ErrorToObj("error setting -mcastloop"));
                 r = TCL_ERROR;
             } else {
                 Tcl_SetObjResult(interp, Tcl_NewIntObj(tmp));
@@ -1445,9 +1439,7 @@ udpSetOption(ClientData instanceData, Tcl_Interp *interp,
         if (r == TCL_OK) {
             if (setsockopt(statePtr->sock, IPPROTO_IP, cmd,
                            (const char *)&tmp, sizeof(unsigned int))) {
-                sprintf(errBuf, "udp - setsockopt ttl");
-                UDPTRACE("UDP error - setsockopt\n");
-                Tcl_SetObjResult(interp, Tcl_NewStringObj(errBuf, -1));
+                Tcl_SetObjResult(interp, ErrorToObj("error setting -ttl"));
                 r = TCL_ERROR;
             } else {
                 Tcl_SetObjResult(interp, Tcl_NewIntObj(tmp));
@@ -1463,6 +1455,17 @@ udpSetOption(ClientData instanceData, Tcl_Interp *interp,
     return r;
 }
 
+static Tcl_Obj *
+ErrorToObj(const char * prefix)
+{
+    extern int errno;
+    Tcl_Obj *errObj = Tcl_NewStringObj(prefix, -1);
+#ifdef HAVE_STRERROR
+    Tcl_AppendStringsToObj(errObj, ": ", strerror(errno), NULL);
+#endif
+    return errObj;
+}
+
 /*
  * ----------------------------------------------------------------------
  * udpTrace --
index c3acbae1ec26b70ba376be7edc7896226cfbd240..5a03112ada5dd1d688f7720fab0f80b017b63bae 100644 (file)
 #
 # RCS: @(#) $Id$
 
-AC_PREREQ(2.50)
+AC_PREREQ(2.57)
 
 dnl TEA extensions pass us the version of TEA they think they
 dnl are compatible with (must be set in TEA_INIT below)
-dnl TEA_VERSION="3.5"
+dnl TEA_VERSION="3.6"
 
 # Possible values for key variables defined:
 #
@@ -980,7 +980,6 @@ AC_DEFUN([TEA_CONFIG_CFLAGS], [
     TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`'
     ECHO_VERSION='`echo ${PACKAGE_VERSION}`'
     TCL_LIB_VERSIONS_OK=ok
-    CFLAGS="${CPPFLAGS} ${CFLAGS}"
     CFLAGS_DEBUG=-g
     CFLAGS_OPTIMIZE=-O
     if test "$GCC" = "yes" ; then
@@ -1318,7 +1317,11 @@ dnl AC_CHECK_TOOL(AR, ar)
            #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?])
            #LIBS="$LIBS -lxnet"               # Use the XOPEN network library
 
-           SHLIB_SUFFIX=".sl"
+           if test "`uname -m`" = "ia64" ; then
+               SHLIB_SUFFIX=".so"
+           else
+               SHLIB_SUFFIX=".sl"
+           fi
            AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no)
            if test "$tcl_ok" = yes; then
                SHLIB_CFLAGS="+z"
@@ -1619,11 +1622,14 @@ dnl AC_CHECK_TOOL(AR, ar)
            CFLAGS_OPTIMIZE="-Os"
            SHLIB_CFLAGS="-fno-common"
            # To avoid discrepancies between what headers configure sees during
-           # preprocessing tests and compiling tests, add any -isysroot and
-           # -mmacosx-version-min flags present in CFLAGS to CPPFLAGS:
+           # preprocessing tests and compiling tests, move any -isysroot and
+           # -mmacosx-version-min flags from CFLAGS to CPPFLAGS:
            CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \
-               awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=1;i<=NF;i++) \
+               awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
                if ([$]i~/^(isysroot|mmacosx-version-min)/) print "-"[$]i}'`"
+           CFLAGS="`echo " ${CFLAGS}" | \
+               awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
+               if (!([$]i~/^(isysroot|mmacosx-version-min)/)) print "-"[$]i}'`"
            if test $do64bit = yes; then
                case `arch` in
                    ppc)
@@ -1675,7 +1681,7 @@ dnl AC_CHECK_TOOL(AR, ar)
            DL_LIBS=""
            # Don't use -prebind when building for Mac OS X 10.4 or later only:
            test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \
-               "`echo "${CFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4 && \
+               "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4 && \
                LDFLAGS="$LDFLAGS -prebind"
            LDFLAGS="$LDFLAGS -headerpad_max_install_names"
            AC_CACHE_CHECK([if ld accepts -search_paths_first flag], tcl_cv_ld_search_paths_first, [
@@ -1963,6 +1969,12 @@ dnl AC_CHECK_TOOL(AR, ar)
        AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform])
     fi
 
+dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so
+dnl # until the end of configure, as configure's compile and link tests use
+dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's
+dnl # preprocessing tests use only CPPFLAGS.
+    AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""])
+
     # Step 4: disable dynamic loading if requested via a command-line switch.
 
     AC_ARG_ENABLE(load,
@@ -2771,7 +2783,7 @@ AC_DEFUN([TEA_TCL_64BIT_FLAGS], [
 AC_DEFUN([TEA_INIT], [
     # TEA extensions pass this us the version of TEA they think they
     # are compatible with.
-    TEA_VERSION="3.5"
+    TEA_VERSION="3.6"
 
     AC_MSG_CHECKING([for correct TEA configuration])
     if test x"${PACKAGE_NAME}" = x ; then
@@ -3147,11 +3159,14 @@ AC_DEFUN([TEA_SETUP_COMPILER], [
     #------------------------------------------------------------------------
 
     if test -z "$no_pipe" -a -n "$GCC"; then
-       AC_MSG_CHECKING([if the compiler understands -pipe])
-       OLDCC="$CC"
-       CC="$CC -pipe"
-       AC_TRY_COMPILE(,, AC_MSG_RESULT([yes]), CC="$OLDCC"
-           AC_MSG_RESULT([no]))
+       AC_CACHE_CHECK([if the compiler understands -pipe],
+           tcl_cv_cc_pipe, [
+           hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe"
+           AC_TRY_COMPILE(,, tcl_cv_cc_pipe=yes, tcl_cv_cc_pipe=no)
+           CFLAGS=$hold_cflags])
+       if test $tcl_cv_cc_pipe = yes; then
+           CFLAGS="$CFLAGS -pipe"
+       fi
     fi
 
     #--------------------------------------------------------------------
@@ -3391,8 +3406,13 @@ AC_DEFUN([TEA_PRIVATE_TCL_HEADERS], [
                TCL_INCLUDES="${TCL_INCLUDES} ${TCL_INCLUDE_SPEC} `echo "${TCL_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"; fi
                ;;
        esac
+    else
+       if test ! -f "${TCL_SRC_DIR}/generic/tclInt.h" ; then
+           AC_MSG_ERROR([Cannot find private header tclInt.h in ${TCL_SRC_DIR}])
+       fi
     fi
 
+
     AC_SUBST(TCL_TOP_DIR_NATIVE)
     AC_SUBST(TCL_GENERIC_DIR_NATIVE)
     AC_SUBST(TCL_UNIX_DIR_NATIVE)
@@ -3547,6 +3567,10 @@ AC_DEFUN([TEA_PRIVATE_TK_HEADERS], [
                TK_INCLUDES="-I\"${TK_BIN_DIR}/Headers\" -I\"${TK_BIN_DIR}/PrivateHeaders\" ${TK_INCLUDES}"; fi
                ;;
        esac
+    else
+       if test ! -f "${TK_SRC_DIR}/generic/tkInt.h" ; then
+           AC_MSG_ERROR([Cannot find private header tkInt.h in ${TK_SRC_DIR}])
+       fi
     fi
 
     AC_SUBST(TK_TOP_DIR_NATIVE)
index de58ba574f1be9ed55c73f9c4dfef535031f4790..6079cb24e7af215eb815f10d972b742107737a52 100644 (file)
@@ -11,10 +11,10 @@ package require udp
 # Some tests are marked as slow as they can take 30s to test a volume of packets.
 # We generally just test for correctness and these do not significantly contribute
 # in testing correctness.
-::tcltest::testConstraint slow 0
+::tcltest::testConstraint slow 1
 
 # Enable printing timing information during some tests.
-::tcltest::testConstraint timestamp 0
+::tcltest::testConstraint timestamp 1
 
 set scriptName [makeFile {} udptest2.tcl]
 set script {