From ead00d5d7d7afa8be16eacf5a93a931c84b6749a Mon Sep 17 00:00:00 2001 From: nijtmans Date: Thu, 4 Mar 2010 22:29:04 +0000 Subject: Split tommath stub lib source file in separate file. Don't use -fvisibility=hidden for cygwin --- ChangeLog | 15 ++++++++ compat/strncasecmp.c | 4 +- compat/strtod.c | 11 +++--- compat/strtoul.c | 4 +- generic/tclStubLib.c | 57 +++------------------------- generic/tclTomMathStubLib.c | 91 +++++++++++++++++++++++++++++++++++++++++++++ unix/Makefile.in | 8 +++- unix/configure | 2 +- unix/tcl.m4 | 2 +- win/Makefile.in | 8 +++- win/makefile.bc | 7 ++++ win/makefile.vc | 6 ++- win/tcl.dsp | 8 ++++ 13 files changed, 157 insertions(+), 66 deletions(-) create mode 100644 generic/tclTomMathStubLib.c diff --git a/ChangeLog b/ChangeLog index 24dcbc3..30cedfe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2010-03-03 Jan Nijtmans + + * generic/tclStubLib.c Split tommath stub lib + * generic/tclTomMathStubLib.c in separate file. + * win/makefile.bc + * win/Makefile.in + * win/makefile.vc + * win/tcl.dsp + * unix/Makefile.in + * unix/tcl.m4 Cygwin only gives warning + * unix/configure using -fvisibility=hidden + * compat/strncasecmp.c A few more const's + * compat/strtod.c + * compat/strtoul.c + 2010-03-03 Andreas Kupries * doc/refchan.n: Followup to ChangeLog entry 2009-10-07 diff --git a/compat/strncasecmp.c b/compat/strncasecmp.c index f944aaa..6a17b32 100644 --- a/compat/strncasecmp.c +++ b/compat/strncasecmp.c @@ -9,7 +9,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: strncasecmp.c,v 1.4 2008/04/27 22:21:28 dkf Exp $ + * RCS: @(#) $Id: strncasecmp.c,v 1.5 2010/03/04 22:29:05 nijtmans Exp $ */ #include "tclPort.h" @@ -20,7 +20,7 @@ * sequences. */ -static unsigned char charmap[] = { +static const unsigned char charmap[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, diff --git a/compat/strtod.c b/compat/strtod.c index aa73ab0..7171101 100644 --- a/compat/strtod.c +++ b/compat/strtod.c @@ -9,7 +9,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: strtod.c,v 1.9 2008/04/27 22:21:28 dkf Exp $ + * RCS: @(#) $Id: strtod.c,v 1.10 2010/03/04 22:29:05 nijtmans Exp $ */ #include "tclInt.h" @@ -23,12 +23,12 @@ #define NULL 0 #endif -static int maxExponent = 511; /* Largest possible base 10 exponent. Any +static const int maxExponent = 511; /* Largest possible base 10 exponent. Any * exponent larger than this will already * produce underflow or overflow, so there's * no need to worry about additional digits. */ -static double powersOf10[] = { /* Table giving binary powers of 10. Entry */ +static const double powersOf10[] = { /* Table giving binary powers of 10. Entry */ 10., /* is 10^2^i. Used to convert decimal */ 100., /* exponents into floating-point numbers. */ 1.0e4, @@ -78,7 +78,8 @@ strtod( * address here. */ { int sign, expSign = FALSE; - double fraction, dblExp, *d; + double fraction, dblExp; + const double *d; register const char *p; register int c; int exp = 0; /* Exponent read from "EX" field. */ @@ -231,7 +232,7 @@ strtod( errno = ERANGE; } dblExp = 1.0; - for (d = powersOf10; exp != 0; exp >>= 1, d += 1) { + for (d = powersOf10; exp != 0; exp >>= 1, ++d) { if (exp & 01) { dblExp *= *d; } diff --git a/compat/strtoul.c b/compat/strtoul.c index 21ee445..0b2b625 100644 --- a/compat/strtoul.c +++ b/compat/strtoul.c @@ -9,7 +9,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: strtoul.c,v 1.8 2008/04/27 22:21:28 dkf Exp $ + * RCS: @(#) $Id: strtoul.c,v 1.9 2010/03/04 22:29:05 nijtmans Exp $ */ #include "tclInt.h" @@ -20,7 +20,7 @@ * characters). */ -static char cvtIn[] = { +static const char cvtIn[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* '0' - '9' */ 100, 100, 100, 100, 100, 100, 100, /* punctuation */ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, /* 'A' - 'Z' */ diff --git a/generic/tclStubLib.c b/generic/tclStubLib.c index b2f39fa..af14e2e 100644 --- a/generic/tclStubLib.c +++ b/generic/tclStubLib.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclStubLib.c,v 1.30 2010/02/21 20:09:38 nijtmans Exp $ + * RCS: @(#) $Id: tclStubLib.c,v 1.31 2010/03/04 22:29:05 nijtmans Exp $ */ /* @@ -145,54 +145,9 @@ Tcl_InitStubs( } /* - *---------------------------------------------------------------------- - * - * TclTomMathInitStubs -- - * - * Initializes the Stubs table for Tcl's subset of libtommath - * - * Results: - * Returns a standard Tcl result. - * - * This procedure should not be called directly, but rather through - * the TclTomMath_InitStubs macro, to insure that the Stubs table - * matches the header files used in compilation. - * - *---------------------------------------------------------------------- + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: */ - -MODULE_SCOPE const char * -TclTomMathInitializeStubs( - Tcl_Interp *interp, /* Tcl interpreter */ - const char *version, /* Tcl version needed */ - int epoch, /* Stubs table epoch from the header files */ - int revision) /* Stubs table revision number from the - * header files */ -{ - int exact = 0; - const char *packageName = "tcl::tommath"; - const char *errMsg = NULL; - ClientData pkgClientData = NULL; - const char *actualVersion = - Tcl_PkgRequireEx(interp, packageName, version, exact, &pkgClientData); - const TclTomMathStubs *stubsPtr = pkgClientData; - - if (actualVersion == NULL) { - return NULL; - } - if (pkgClientData == NULL) { - errMsg = "missing stub table pointer"; - } else if ((stubsPtr->tclBN_epoch)() != epoch) { - errMsg = "epoch number mismatch"; - } else if ((stubsPtr->tclBN_revision)() != revision) { - errMsg = "requires a later revision"; - } else { - tclTomMathStubsPtr = stubsPtr; - return actualVersion; - } - Tcl_ResetResult(interp); - Tcl_AppendResult(interp, "error loading ", packageName, - " (requested version ", version, ", actual version ", - actualVersion, "): ", errMsg, NULL); - return NULL; -} diff --git a/generic/tclTomMathStubLib.c b/generic/tclTomMathStubLib.c new file mode 100644 index 0000000..4139261 --- /dev/null +++ b/generic/tclTomMathStubLib.c @@ -0,0 +1,91 @@ +/* + * tclTomMathStubLib.c -- + * + * Stub object that will be statically linked into extensions that want + * to access Tcl. + * + * Copyright (c) 1998-1999 by Scriptics Corporation. + * Copyright (c) 1998 Paul Duffin. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + * + * RCS: @(#) $Id: tclTomMathStubLib.c,v 1.1 2010/03/04 22:29:05 nijtmans Exp $ + */ + +/* + * We need to ensure that we use the stub macros so that this file contains no + * references to any of the stub functions. This will make it possible to + * build an extension that references Tcl_InitStubs but doesn't end up + * including the rest of the stub functions. + */ + +#define USE_TCL_STUBS + +#include "tclInt.h" + +MODULE_SCOPE const TclTomMathStubs *tclTomMathStubsPtr; + +const TclTomMathStubs *tclTomMathStubsPtr = NULL; + + +/* + *---------------------------------------------------------------------- + * + * TclTomMathInitStubs -- + * + * Initializes the Stubs table for Tcl's subset of libtommath + * + * Results: + * Returns a standard Tcl result. + * + * This procedure should not be called directly, but rather through + * the TclTomMath_InitStubs macro, to insure that the Stubs table + * matches the header files used in compilation. + * + *---------------------------------------------------------------------- + */ + +MODULE_SCOPE const char * +TclTomMathInitializeStubs( + Tcl_Interp *interp, /* Tcl interpreter */ + const char *version, /* Tcl version needed */ + int epoch, /* Stubs table epoch from the header files */ + int revision) /* Stubs table revision number from the + * header files */ +{ + int exact = 0; + const char *packageName = "tcl::tommath"; + const char *errMsg = NULL; + ClientData pkgClientData = NULL; + const char *actualVersion = + Tcl_PkgRequireEx(interp, packageName, version, exact, &pkgClientData); + const TclTomMathStubs *stubsPtr = pkgClientData; + + if (actualVersion == NULL) { + return NULL; + } + if (pkgClientData == NULL) { + errMsg = "missing stub table pointer"; + } else if ((stubsPtr->tclBN_epoch)() != epoch) { + errMsg = "epoch number mismatch"; + } else if ((stubsPtr->tclBN_revision)() != revision) { + errMsg = "requires a later revision"; + } else { + tclTomMathStubsPtr = stubsPtr; + return actualVersion; + } + Tcl_ResetResult(interp); + Tcl_AppendResult(interp, "error loading ", packageName, + " (requested version ", version, ", actual version ", + actualVersion, "): ", errMsg, NULL); + return NULL; +} + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ diff --git a/unix/Makefile.in b/unix/Makefile.in index 92fefa2..b58f138 100644 --- a/unix/Makefile.in +++ b/unix/Makefile.in @@ -4,7 +4,7 @@ # "./configure", which is a configuration script generated by the "autoconf" # program (constructs like "@foo@" will get replaced in the actual Makefile. # -# RCS: @(#) $Id: Makefile.in,v 1.293 2010/02/27 11:51:30 dkf Exp $ +# RCS: @(#) $Id: Makefile.in,v 1.294 2010/03/04 22:29:06 nijtmans Exp $ VERSION = @TCL_VERSION@ MAJOR_VERSION = @TCL_MAJOR_VERSION@ @@ -335,7 +335,7 @@ TOMMATH_OBJS = bncore.o bn_reverse.o bn_fast_s_mp_mul_digs.o \ bn_mp_unsigned_bin_size.o bn_mp_xor.o bn_mp_zero.o bn_s_mp_add.o \ bn_s_mp_mul_digs.o bn_s_mp_sqr.o bn_s_mp_sub.o -STUB_LIB_OBJS = tclStubLib.o tclOOStubLib.o ${COMPAT_OBJS} +STUB_LIB_OBJS = tclStubLib.o tclTomMathStubLib.o tclOOStubLib.o ${COMPAT_OBJS} UNIX_OBJS = tclUnixChan.o tclUnixEvent.o tclUnixFCmd.o \ tclUnixFile.o tclUnixPipe.o tclUnixSock.o \ @@ -466,6 +466,7 @@ OO_SRCS = \ STUB_SRCS = \ $(GENERIC_DIR)/tclStubLib.c \ + $(GENERIC_DIR)/tclTomMathStubLib.c \ $(GENERIC_DIR)/tclOOStubLib.o TOMMATH_SRCS = \ @@ -1627,6 +1628,9 @@ Zzutil.o: $(ZLIB_DIR)/zutil.c tclStubLib.o: $(GENERIC_DIR)/tclStubLib.c $(CC) -c $(STUB_CC_SWITCHES) $(GENERIC_DIR)/tclStubLib.c +tclTomMathStubLib.o: $(GENERIC_DIR)/tclTomMathStubLib.c + $(CC) -c $(STUB_CC_SWITCHES) $(GENERIC_DIR)/tclTomMathStubLib.c + tclOOStubLib.o: $(GENERIC_DIR)/tclOOStubLib.c $(CC) -c $(STUB_CC_SWITCHES) $(GENERIC_DIR)/tclOOStubLib.c diff --git a/unix/configure b/unix/configure index 181bc7f..d0fcd74 100755 --- a/unix/configure +++ b/unix/configure @@ -6434,7 +6434,7 @@ if test "${tcl_cv_cc_visibility_hidden+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -fvisibility=hidden" + hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -fvisibility=hidden -Werror" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF diff --git a/unix/tcl.m4 b/unix/tcl.m4 index c5045c7..d6769af 100644 --- a/unix/tcl.m4 +++ b/unix/tcl.m4 @@ -1052,7 +1052,7 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [ AC_CACHE_CHECK([if compiler supports visibility "hidden"], tcl_cv_cc_visibility_hidden, [ - hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -fvisibility=hidden" + hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -fvisibility=hidden -Werror" AC_TRY_COMPILE(,, tcl_cv_cc_visibility_hidden=yes, tcl_cv_cc_visibility_hidden=no) CFLAGS=$hold_cflags]) diff --git a/win/Makefile.in b/win/Makefile.in index 2a5e97e..2ffc9fa 100644 --- a/win/Makefile.in +++ b/win/Makefile.in @@ -4,7 +4,7 @@ # "./configure", which is a configuration script generated by the "autoconf" # program (constructs like "@foo@" will get replaced in the actual Makefile. # -# RCS: @(#) $Id: Makefile.in,v 1.172 2010/02/26 14:38:36 dkf Exp $ +# RCS: @(#) $Id: Makefile.in,v 1.173 2010/03/04 22:29:05 nijtmans Exp $ VERSION = @TCL_VERSION@ @@ -381,6 +381,7 @@ REG_OBJS = tclWinReg.$(OBJEXT) STUB_OBJS = \ tclStubLib.$(OBJEXT) \ + tclTomMathStubLib.$(OBJEXT) \ tclOOStubLib.$(OBJEXT) TCLSH_OBJS = tclAppInit.$(OBJEXT) @@ -538,6 +539,11 @@ tclPkgConfig.${OBJEXT}: tclPkgConfig.c tclStubLib.${OBJEXT}: tclStubLib.c $(CC) -c $(CC_SWITCHES) -DSTATIC_BUILD @DEPARG@ $(CC_OBJNAME) +tclTomMathStubLib.${OBJEXT}: tclTomMathStubLib.c + $(CC) -c $(CC_SWITCHES) -DSTATIC_BUILD @DEPARG@ $(CC_OBJNAME) + +tclOOStubLib.${OBJEXT}: tclOOStubLib.c + $(CC) -c $(CC_SWITCHES) -DSTATIC_BUILD @DEPARG@ $(CC_OBJNAME) # Implicit rule for all object files that will end up in the Tcl library diff --git a/win/makefile.bc b/win/makefile.bc index 968805a..a0020bc 100644 --- a/win/makefile.bc +++ b/win/makefile.bc @@ -279,6 +279,7 @@ TCLOBJS = \ TCLSTUBOBJS = \ $(TMPDIR)\tclStubLib.obj \ + $(TMPDIR)\tclTomMathStubLib.obj \ $(TMPDIR)\tclOOStubLib.obj WINDIR = $(ROOT)\win @@ -534,6 +535,12 @@ $(TMPDIR)\tclWinDde.obj : $(WINDIR)\tclWinDde.c $(TMPDIR)\tclStubLib.obj : $(GENERICDIR)\tclStubLib.c $(cc32) $(TCL_CFLAGS) -DSTATIC_BUILD -o$(TMPDIR)\$@ $? +$(TMPDIR)\tclTomMathStubLib.obj : $(GENERICDIR)\tclTomMathStubLib.c + $(cc32) $(TCL_CFLAGS) -DSTATIC_BUILD -o$(TMPDIR)\$@ $? + +$(TMPDIR)\tclOOStubLib.obj : $(GENERICDIR)\tclOOStubLib.c + $(cc32) $(TCL_CFLAGS) -DSTATIC_BUILD -o$(TMPDIR)\$@ $? + # Dedependency rules diff --git a/win/makefile.vc b/win/makefile.vc index b72bb4a..73fa236 100644 --- a/win/makefile.vc +++ b/win/makefile.vc @@ -13,7 +13,7 @@ # Copyright (c) 2003-2008 Pat Thoyts. # #------------------------------------------------------------------------------ -# RCS: @(#) $Id: makefile.vc,v 1.207 2010/02/26 14:38:37 dkf Exp $ +# RCS: @(#) $Id: makefile.vc,v 1.208 2010/03/04 22:29:05 nijtmans Exp $ #------------------------------------------------------------------------------ # Check to see we are configured to build with MSVC (MSDEVDIR or MSVCDIR) @@ -431,6 +431,7 @@ TCLOBJS = $(COREOBJS) $(ZLIBOBJS) $(TOMMATHOBJS) $(PLATFORMOBJS) TCLSTUBOBJS = \ $(TMP_DIR)\tclStubLib.obj \ + $(TMP_DIR)\tclTomMathStubLib.obj \ $(TMP_DIR)\tclOOStubLib.obj ### The following paths CANNOT have spaces in them. @@ -970,6 +971,9 @@ $(TMP_DIR)\tclWinDde.obj: $(WINDIR)\tclWinDde.c $(TMP_DIR)\tclStubLib.obj: $(GENERICDIR)\tclStubLib.c $(cc32) $(STUB_CFLAGS) -Zl -DSTATIC_BUILD $(TCL_INCLUDES) -Fo$@ $? +$(TMP_DIR)\tclTomMathStubLib.obj: $(GENERICDIR)\tclTomMathStubLib.c + $(cc32) $(STUB_CFLAGS) -Zl -DSTATIC_BUILD $(TCL_INCLUDES) -Fo$@ $? + $(TMP_DIR)\tclOOStubLib.obj: $(GENERICDIR)\tclOOStubLib.c $(cc32) $(STUB_CFLAGS) -Zl -DSTATIC_BUILD $(TCL_INCLUDES) -Fo$@ $? diff --git a/win/tcl.dsp b/win/tcl.dsp index b3de0ff..b16a98d 100644 --- a/win/tcl.dsp +++ b/win/tcl.dsp @@ -1300,6 +1300,14 @@ SOURCE=..\generic\tclStubLib.c # End Source File # Begin Source File +SOURCE=..\generic\tclOOStubLib.c +# End Source File +# Begin Source File + +SOURCE=..\generic\tclTomMathStubLib.c +# End Source File +# Begin Source File + SOURCE=..\generic\tclTest.c # End Source File # Begin Source File -- cgit v0.12