diff options
| author | das <das> | 2006-07-20 06:21:41 (GMT) | 
|---|---|---|
| committer | das <das> | 2006-07-20 06:21:41 (GMT) | 
| commit | bed796e06772e11d807d9394771ef16cf766b2cd (patch) | |
| tree | 87aa93a682398fe04c4b734c7ea00049bf6fba02 /unix/tclUnixInit.c | |
| parent | 8cb60c333409bcc5ab4d0388905e7840b41422b2 (diff) | |
| download | tcl-bed796e06772e11d807d9394771ef16cf766b2cd.zip tcl-bed796e06772e11d807d9394771ef16cf766b2cd.tar.gz tcl-bed796e06772e11d807d9394771ef16cf766b2cd.tar.bz2 | |
	* macosx/tclMacOSXNotify.c (Tcl_InitNotifier, Tcl_WaitForEvent): create
	notifier thread lazily upon first call to Tcl_WaitForEvent() rather than
	in Tcl_InitNotifier(). Allows calling exeve() in processes where the
	event loop has not yet been run (Darwin's execve() fails in processes
	with more than one thread), in particular allows embedders to call
	fork() followed by execve(), previously the pthread_atfork() child
	handler's call to Tcl_InitNotifier() would immediately recreate the
	notifier thread in the child after a fork.
	* macosx/tclMacOSXNotify.c (Tcl_InitNotifier):     add support for
	* unix/tclUnixFCmd.c (DoRenameFile, CopyFileAtts): weakly importing
	* unix/tclUnixInit.c (TclpSetInitialEncodings):    symbols not available
	on OSX 10.2 or 10.3, enables binaires built on later OSX versions to run
	on earlier ones.
	* macosx/README: document how to enable weak-linking; cleanup.
	* unix/tclUnixPort.h: add support for weak-linking; conditionalize
	AvailabilityMacros.h inclusion; only disable realpath on 10.2 or earlier
	when threads are enabled.
	* unix/tclLoadDyld.c (TclpLoadMemoryGetBuffer): change runtime Darwin
	* unix/tclUnixInit.c (TclpInitPlatform):        release check to use
	                                                global initialized once.
	* unix/tclUnixFCmd.c (DoRenameFile, TclpObjNormalizePath): add runtime
	Darwin release check to determine if realpath is threadsafe.
	* unix/configure.in: add check on Darwin for compiler support of weak
	* unix/tcl.m4:       import and for AvailabilityMacros.h header; move
	Darwin specific checks & defines that are only relevant to the tcl build
	out of tcl.m4; restrict framework option to Darwin; cleanup quoting.
	* unix/configure: autoconf-2.13
	* unix/tclLoadDyld.c (TclpLoadMemory):
	* unix/tclUnixPipe.c (TclpCreateProcess): fix signed-with-unsigned
	comparison and other warnings from gcc4 -Wextra.
Diffstat (limited to 'unix/tclUnixInit.c')
| -rw-r--r-- | unix/tclUnixInit.c | 36 | 
1 files changed, 33 insertions, 3 deletions
| diff --git a/unix/tclUnixInit.c b/unix/tclUnixInit.c index 34c36fb..1c1f8fc 100644 --- a/unix/tclUnixInit.c +++ b/unix/tclUnixInit.c @@ -7,7 +7,7 @@   * Copyright (c) 1999 by Scriptics Corporation.   * All rights reserved.   * - * RCS: @(#) $Id: tclUnixInit.c,v 1.34.2.12 2006/01/25 23:06:16 dkf Exp $ + * RCS: @(#) $Id: tclUnixInit.c,v 1.34.2.13 2006/07/20 06:21:46 das Exp $   */  #if defined(HAVE_COREFOUNDATION) @@ -17,7 +17,14 @@  #include "tclPort.h"  #include <locale.h>  #ifdef HAVE_LANGINFO -#include <langinfo.h> +#   include <langinfo.h> +#   ifdef __APPLE__ +#       if defined(HAVE_WEAK_IMPORT) && MAC_OS_X_VERSION_MIN_REQUIRED < 1030 +	    /* Support for weakly importing nl_langinfo on Darwin. */ +#           define WEAK_IMPORT_NL_LANGINFO +	    extern char *nl_langinfo(nl_item) WEAK_IMPORT_ATTRIBUTE; +#       endif +#    endif  #endif  #if defined(__FreeBSD__) && defined(__GNUC__)  #   include <floatingpoint.h> @@ -151,6 +158,16 @@ static int		MacOSXGetLibraryPath _ANSI_ARGS_((  			    Tcl_Interp *interp, int maxPathLen,  			    char *tclLibPath));  #endif /* HAVE_COREFOUNDATION */ +#if defined(__APPLE__) && (defined(TCL_LOAD_FROM_MEMORY) || ( \ +	defined(TCL_THREADS) && defined(MAC_OS_X_VERSION_MIN_REQUIRED) && \ +	MAC_OS_X_VERSION_MIN_REQUIRED < 1030)) +/* + * Need to check Darwin release at runtime in tclUnixFCmd.c and tclLoadDyld.c: + * initialize release global at startup from uname(). + */ +#define GET_DARWIN_RELEASE 1 +long tclMacOSXDarwinRelease = 0; +#endif  /* @@ -222,6 +239,15 @@ TclpInitPlatform()       */      (void) dlopen (NULL, RTLD_NOW);			/* INTL: Native. */  #endif + +#ifdef GET_DARWIN_RELEASE +    { +	struct utsname name; +	if (!uname(&name)) { +	    tclMacOSXDarwinRelease = strtol(name.release, NULL, 10); +	} +    } +#endif  }  /* @@ -510,7 +536,11 @@ TclpSetInitialEncodings()  	 * but this does not work on some systems (e.g. Linux/i386 RH 5.0).  	 */  #ifdef HAVE_LANGINFO -	if (setlocale(LC_CTYPE, "") != NULL) { +	if ( +#ifdef WEAK_IMPORT_NL_LANGINFO +		nl_langinfo != NULL && +#endif +		setlocale(LC_CTYPE, "") != NULL) {  	    Tcl_DString ds;  	    /* | 
