diff options
Diffstat (limited to 'macosx')
-rw-r--r-- | macosx/Makefile | 14 | ||||
-rw-r--r-- | macosx/README | 142 | ||||
-rw-r--r-- | macosx/Tcl.pbproj/default.pbxuser | 173 | ||||
-rw-r--r-- | macosx/Tcl.pbproj/jingham.pbxuser | 154 | ||||
-rw-r--r-- | macosx/Tcl.pbproj/project.pbxproj | 354 | ||||
-rw-r--r-- | macosx/tclMacOSXBundle.c | 4 | ||||
-rw-r--r-- | macosx/tclMacOSXNotify.c | 519 |
7 files changed, 967 insertions, 393 deletions
diff --git a/macosx/Makefile b/macosx/Makefile index 105ac08..39779db 100644 --- a/macosx/Makefile +++ b/macosx/Makefile @@ -4,7 +4,7 @@ # uses the standard unix build system in tcl/unix (which can be used directly instead of this # if you are not using the tk/macosx projects). # -# RCS: @(#) $Id: Makefile,v 1.5.2.13 2005/06/03 08:53:12 das Exp $ +# RCS: @(#) $Id: Makefile,v 1.5.2.14 2005/11/27 02:34:41 das Exp $ # ######################################################################################################## @@ -89,7 +89,7 @@ UNIX_DIR := ${CURDIR}/../unix VERSION := $(shell awk -F= '/^TCL_VERSION/ {print $$2; nextfile}' ${UNIX_DIR}/configure.in) TCLSH := tclsh${VERSION} -BUILD_TARGET := tclsh tcltest +BUILD_TARGET := all tcltest INSTALL_TARGET := install export CPPROG := cp -p @@ -108,7 +108,7 @@ endif MAKE_VARS := INSTALL_ROOT INSTALL_TARGETS VERSION GENERIC_FLAGS MAKE_ARGS_V = $(foreach v,${MAKE_VARS},$v='${$v}') -build-${PROJECT}: target = ${TARGET} +build-${PROJECT}: target = ${BUILD_TARGET} install-${PROJECT}: target = ${INSTALL_TARGET} clean-${PROJECT} distclean-${PROJECT} test-${PROJECT}: \ target = $* @@ -121,11 +121,13 @@ DO_MAKE = +${MAKE} -C ${OBJ_DIR} ${target} ${MAKE_ARGS_V} ${MAKE_ARGS} ${EXTRA ${PROJECT}: ${MAKE} install-${PROJECT} INSTALL_ROOT=${OBJ_DIR}/ -${OBJ_DIR}/Makefile: ${UNIX_DIR}/Makefile.in ${UNIX_DIR}/configure - mkdir -p ${OBJ_DIR} && cd ${OBJ_DIR} && ${UNIX_DIR}/configure \ +${OBJ_DIR}/Makefile: ${UNIX_DIR}/Makefile.in ${UNIX_DIR}/configure \ + ${UNIX_DIR}/tclConfig.sh.in Tcl-Info.plist.in + mkdir -p ${OBJ_DIR} && cd ${OBJ_DIR} && \ + if [ ${UNIX_DIR}/configure -nt config.status ]; then ${UNIX_DIR}/configure \ --prefix=${PREFIX} --bindir=${BINDIR} --libdir=${LIBDIR} \ --mandir=${MANDIR} --enable-threads --enable-framework \ - ${CONFIGURE_ARGS} ${EXTRA_CONFIGURE_ARGS} + ${CONFIGURE_ARGS} ${EXTRA_CONFIGURE_ARGS}; else ./config.status; fi build-${PROJECT}: ${OBJ_DIR}/Makefile ${DO_MAKE} diff --git a/macosx/README b/macosx/README index 7c0d4ee..46469cb 100644 --- a/macosx/README +++ b/macosx/README @@ -1,107 +1,123 @@ -Tcl MacOSX README +Tcl Mac OS X README ----------------- -RCS: @(#) $Id: README,v 1.1.2.3 2005/05/24 04:20:08 das Exp $ +RCS: @(#) $Id: README,v 1.1.2.4 2005/11/27 02:34:41 das Exp $ -This is the README file for the Mac OS X native version of Tcl (framework build). +This is the README file for the Mac OS X/Darwin version of Tcl. -1. General ----------- +1. Where to go for support +-------------------------- -- The tcl-mac mailing list on sourceforge is the canonical place for questions +- The tcl-mac mailing list on sourceforge is the best place to ask questions specific to Tcl & Tk on Mac OS X: http://lists.sourceforge.net/lists/listinfo/tcl-mac (this page also has a link to searchable archives of the list, please check them before asking on the list, many questions have already been answered). -- For general tcl/tk questions, the newsgroup comp.lang.tcl is your best bet, -but also check the Tcl'ers Wiki for a wealth of information: - http://wiki.tcl.tk/ +- For general Tcl/Tk questions, the newsgroup comp.lang.tcl is your best bet: + http://groups.google.com/group/comp.lang.tcl/ -- The wiki has a page listing known bugs in Mac OS X Tcl/Tk (and other tips) - http://wiki.tcl.tk/MacOS%20X -as well as a page with info on building Tcl/Tk on Mac OS X - http://wiki.tcl.tk/Steps%20to%20build%20Tcl/Tk%208.4.0%20on%20MacOS%20X +- The Tcl'ers Wiki also has many pages dealing with Tcl & Tk on Mac OS X, see + http://wiki.tcl.tk/references/3753! + http://wiki.tcl.tk/references/8361! -- You should report bugs to the sourceforge bug trackers as usual: - Tcl: https://sourceforge.net/tracker/?func=add&group_id=10894&atid=110894 - Tk: https://sourceforge.net/tracker/?func=add&group_id=12997&atid=112997 -please make sure that your report Tk specific bugs to the tktoolkit bug -tracker and not the tcl one. +- Please report bugs with Tcl or Tk on Mac OS X to the sourceforge bug trackers: + Tcl: http://sf.net/tracker/?func=add&group_id=10894&atid=110894 + Tk: http://sf.net/tracker/?func=add&group_id=12997&atid=112997 +please make sure that your report Tk specific bugs to the tktoolkit project bug +tracker rather than the tcl project bug tracker. +Mac OS X specific bugs should usually be assigned to 'das' or 'wolfsuit'. -2. Using Tcl on MacOSX ----------------------- +2. Using Tcl on Mac OS X +------------------------ -- Mac OS X 10.2 (or higher) is required to run Tcl on MacOSX. +- At a minimum, Mac OS X 10.1 is required to run Tcl, but OS X 10.3 or higher is +recommended (certain [file] operations behave incorrectly on earlier releases). -- Tcl built on Mac OS X 10.3 or higher will not run on 10.2 due to missing -symbols in libSystem, however Tcl built on 10.2 will run on 10.3 (but without -prebinding and other optimizations). +- Tcl built on Mac OS X 10.x will not run on 10.y for y < x, on the other hand +Tcl built on 10.y will run on 10.x for y < x (but without any of the fixes and +optimizations that would be available in a binary built on 10.x). -- Tcl extensions will be found in any of: +- Tcl extensions can be installed in any of: $HOME/Library/Tcl /Library/Tcl /Network/Library/Tcl /System/Library/Tcl $HOME/Library/Frameworks /Library/Frameworks /Network/Library/Frameworks /System/Library/Frameworks (searched in that order). Given a potential package directory $pkg, Tcl on OSX checks for the file $pkg/Resources/Scripts/pkgIndex.tcl as well as the usual $pkg/pkgIndex.tcl. -This allows building extensions as frameworks with all script files contained -in the Resources/Scripts directory of the framework. +This allows building extensions as frameworks with all script files contained in +the Resources/Scripts directory of the framework. -- The Tcl framework contains documentation in html format in the -standard location for frameworks: +- [load]able binary extensions can linked as either ordinary shared libraries +(.dylib) or as MachO bundles (since 8.4.10/8.5a3); only bundles can be unloaded, +and bundles are also loaded more efficiently from VFS (no temporary copy to the +native filesystem required). + +- The 'deploy' target of macosx/Makefile installs the html manpages into the +standard documentation location in the Tcl framework: Tcl.framework/Resources/Documentation/Reference/Tcl -No manpages are installed by default. +No nroff manpages are installed by default by the Makefile. -- the framework Tcl.framework can be placed in any of the system's standard +- The Tcl framework can be installed in any of the system's standard framework directories: $HOME/Library/Frameworks /Library/Frameworks /Network/Library/Frameworks /System/Library/Frameworks -and /usr/bin/tclsh will work. - -- the format of binary extensions expected by [load] is that of ordinary shared -libraries (.dylib) and not MachO bundles, at present loading of MachO bundles is -not supported. -3. Building Tcl.framework -------------------------- +3. Building Tcl on Mac OS X +--------------------------- -- Mac OS X 10.2 (or higher) is required to build Tcl on MacOSX. - -- Apple's Developer Tools CD needs to be installed (the most recent version -matching your OS release, but no earlier than December 2002). This CD should -have come with Mac OS X retail or should be present as a disk image on new macs -that came with OSX preinstalled. It can also be downloaded from +- At least Mac OS X 10.1 is required to build Tcl, and Apple's Developer Tools +need to be installed (only the most recent version matching your OS release is +supported). The Developer Tools installer is available on Mac OS X retail disks +or is present in /Applications/Installers on Macs that came with OS X +preinstalled. The most recent version can be downloaded from the ADC website http://connect.apple.com (after you register for free ADC membership). -- Tcl is built as a Mac OS X framework via the Makefile in tcl/macosx, but can -but can also be built directly with the standard unix configure and make -buildsystem in tcl/unix. - -- It is still possible to build with Apple's Xcode IDE using the Tcl.pbproj -project but this is not recommended anymore (currently Tcl.pbproj calls through -to the tcl/macosx/Makefile so there should be no build differences). +- Tcl is most easily built as a Mac OS X framework via Makefile in tcl/macosx +(see below for details), but can also be built with the standard unix configure +and make buildsystem in tcl/unix as on any other unix platform (indeed, the +Makefile is just a wrapper around the unix buildsystem). +The Mac OS X specifc configure flags are --enable-framework and +--disable-corefoundation (which disables CF and notably reverts to the standard +select based notifier, you will only need this if your require use of naked fork +(i.e. not followed by execve) in an unthreaded core). + +- It is also possible to build with Apple's IDE via the tcl/macosx/Tcl.pbproj +project, this simply calls through to the tcl/macosx/GNUMakefile. + +- To build universal binaires, set CFLAGS as follows: + export CFLAGS="-arch ppc -arch ppc64 -arch i386 \ + -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4" +This requires Mac OS X 10.4 and Xcode 2.2 (_not_ Xcode 2.1) and will work on any +of the architectures (on i386 DTKs, the -isysroot is not required). Note that it +is not possible to configure correctly if the current architecture is not +present in CFLAGS (i.e. -arch `arch` must always be there). Universal builds of +Tcl TEA extensions are also possible with CFLAGS set as above, they will be +[load]able by universal as well as thin binaries of Tcl. + +Detailed Instructions for building with macosx/Makefile +------------------------------------------------------- - Unpack the tcl source release archive. -- The following instructions assume the tcl source tree is named "tcl${ver}", -where ${ver} is a shell variable containing the tcl version number (for -example '8.4.2'). +- The following instructions assume the tcl source tree is named "tcl${ver}", +where ${ver} is a shell variable containing the tcl version number (for example +'8.4.12'). Setup the shell variable as follows: - set ver="8.4.2" ;: if your shell is csh - ver="8.4.2" ;: if your shell is sh + set ver="8.4.12" ;: if your shell is csh + ver="8.4.12" ;: if your shell is sh The source tree will be named this way only if you are building from a release archive, if you are building from CVS, the version numbers will be missing; so set ${ver} to the empty string instead: - set ver="" ;: if your shell is csh - ver="" ;: if your shell is sh + set ver="" ;: if your shell is csh + ver="" ;: if your shell is sh -- The following steps will build Tcl from the Terminal, assuming you are -located in the directory containing the tcl source tree: +- The following steps will build Tcl from the Terminal, assuming you are located +in the directory containing the tcl source tree: make -C tcl${ver}/macosx -and the following will then install Tcl onto the root volume (admin password +and the following will then install Tcl onto the root volume (admin password required): sudo make -C tcl${ver}/macosx install if you don't have the admin password, you can install into your home directory, @@ -109,8 +125,8 @@ instead by passing an INSTALL_ROOT argument to make: make -C tcl${ver}/macosx install INSTALL_ROOT="${HOME}/" - The default Makefile targets will build _both_ debug and optimized versions of -the Tcl framework with the standard convention of naming the debug -library Tcl.framework/Tcl_debug. +the Tcl framework with the standard convention of naming the debug library +Tcl.framework/Tcl_debug. This allows you to dynamically link to the debug libraries at runtime by setting setenv DYLD_IMAGE_SUFFIX _debug (c.f. man dyld for more details) diff --git a/macosx/Tcl.pbproj/default.pbxuser b/macosx/Tcl.pbproj/default.pbxuser new file mode 100644 index 0000000..22035d0 --- /dev/null +++ b/macosx/Tcl.pbproj/default.pbxuser @@ -0,0 +1,173 @@ +// !$*UTF8*$! +{ + 00E2F845016E82EB0ACA28DC = { + activeBuildStyle = 00E2F847016E82EB0ACA28DC; + activeExecutable = F594E5F1030774B1016F146B; + activeTarget = 00E2F84C016E8B780ACA28DC; + addToTargets = ( + ); + codeSenseManager = F9D167E40610239A0027C147; + executables = ( + F53ACC52031D9AFE016F146B, + F594E5F1030774B1016F146B, + ); + sourceControlManager = F9D167E30610239A0027C147; + userBuildSettings = { + SYMROOT = "${SRCROOT}/../../build/tcl"; + }; + }; + 00E2F84C016E8B780ACA28DC = { + activeExec = 0; + }; + F53ACC52031D9AFE016F146B = { + activeArgIndex = 2147483647; + activeArgIndices = ( + NO, + NO, + ); + argumentStrings = ( + "${SRCROOT}/../../tcl/tests/all.tcl", + "-verbose \"\"", + ); + configStateDict = { + "PBXLSLaunchAction-0" = { + PBXLSLaunchAction = 0; + PBXLSLaunchStartAction = 1; + PBXLSLaunchStdioStyle = 2; + PBXLSLaunchStyle = 0; + class = PBXLSRunLaunchConfig; + displayName = "Executable Runner"; + identifier = com.apple.Xcode.launch.runConfig; + remoteHostInfo = ""; + startActionInfo = ""; + }; + "PBXLSLaunchAction-1" = { + PBXLSLaunchAction = 1; + PBXLSLaunchStartAction = 1; + PBXLSLaunchStdioStyle = 2; + PBXLSLaunchStyle = 0; + class = PBXGDB_LaunchConfig; + displayName = GDB; + identifier = com.apple.Xcode.launch.GDBMI_Config; + remoteHostInfo = ""; + startActionInfo = ""; + }; + }; + cppStopOnCatchEnabled = 0; + cppStopOnThrowEnabled = 0; + customDataFormattersEnabled = 1; + debuggerPlugin = GDBDebugging; + disassemblyDisplayState = 0; + dylibVariantSuffix = _debug; + enableDebugStr = 0; + environmentEntries = ( + { + active = YES; + name = TCL_LIBRARY; + value = "${SRCROOT}/../../tcl/library"; + }, + { + active = NO; + name = DYLD_PRINT_LIBRARIES; + }, + ); + isa = PBXExecutable; + launchableReference = F5C37CF303D5BEDF016F146B; + libgmallocEnabled = 0; + name = tcltest; + shlibInfoDictList = ( + ); + sourceDirectories = ( + ); + startupPath = "<<ProductDirectory>>"; + }; + F594E5F1030774B1016F146B = { + activeArgIndex = 2147483647; + activeArgIndices = ( + ); + argumentStrings = ( + ); + configStateDict = { + "PBXLSLaunchAction-0" = { + PBXLSLaunchAction = 0; + PBXLSLaunchStartAction = 1; + PBXLSLaunchStdioStyle = 2; + PBXLSLaunchStyle = 0; + class = PBXLSRunLaunchConfig; + displayName = "Executable Runner"; + identifier = com.apple.Xcode.launch.runConfig; + remoteHostInfo = ""; + startActionInfo = ""; + }; + "PBXLSLaunchAction-1" = { + PBXLSLaunchAction = 1; + PBXLSLaunchStartAction = 1; + PBXLSLaunchStdioStyle = 2; + PBXLSLaunchStyle = 0; + class = PBXGDB_LaunchConfig; + displayName = GDB; + identifier = com.apple.Xcode.launch.GDBMI_Config; + remoteHostInfo = ""; + startActionInfo = ""; + }; + }; + cppStopOnCatchEnabled = 0; + cppStopOnThrowEnabled = 0; + customDataFormattersEnabled = 1; + debuggerPlugin = GDBDebugging; + disassemblyDisplayState = 0; + dylibVariantSuffix = _debug; + enableDebugStr = 0; + environmentEntries = ( + { + active = NO; + name = DYLD_PRINT_LIBRARIES; + }, + ); + isa = PBXExecutable; + launchableReference = F98F02E608E7EF9A00D0320A; + libgmallocEnabled = 0; + name = tclsh; + shlibInfoDictList = ( + ); + sourceDirectories = ( + ); + startupPath = "<<ProductDirectory>>"; + }; + F5C37CF303D5BEDF016F146B = { + isa = PBXFileReference; + lastKnownFileType = "compiled.mach-o.executable"; + path = tcltest; + refType = 3; + sourceTree = BUILT_PRODUCTS_DIR; + }; + F98F02E608E7EF9A00D0320A = { + isa = PBXFileReference; + lastKnownFileType = "compiled.mach-o.executable"; + path = tclsh8.4; + refType = 3; + sourceTree = BUILT_PRODUCTS_DIR; + }; + F9D167E30610239A0027C147 = { + fallbackIsa = XCSourceControlManager; + isSCMEnabled = 0; + isa = PBXSourceControlManager; + scmConfiguration = { + }; + scmType = scm.cvs; + }; + F9D167E40610239A0027C147 = { + indexTemplatePath = ""; + isa = PBXCodeSenseManager; + usesDefaults = 1; + wantsCodeCompletion = 1; + wantsCodeCompletionAutoSuggestions = 1; + wantsCodeCompletionCaseSensitivity = 1; + wantsCodeCompletionListAlways = 1; + wantsCodeCompletionOnlyMatchingItems = 1; + wantsCodeCompletionParametersIncluded = 1; + wantsCodeCompletionPlaceholdersInserted = 1; + wantsCodeCompletionTabCompletes = 1; + wantsIndex = 1; + }; +} diff --git a/macosx/Tcl.pbproj/jingham.pbxuser b/macosx/Tcl.pbproj/jingham.pbxuser index 10f0b57..22035d0 100644 --- a/macosx/Tcl.pbproj/jingham.pbxuser +++ b/macosx/Tcl.pbproj/jingham.pbxuser @@ -2,78 +2,172 @@ { 00E2F845016E82EB0ACA28DC = { activeBuildStyle = 00E2F847016E82EB0ACA28DC; - activeExecutable = F9A61CCE04C2B5A8006F5A0B; + activeExecutable = F594E5F1030774B1016F146B; activeTarget = 00E2F84C016E8B780ACA28DC; - breakpoints = ( + addToTargets = ( ); + codeSenseManager = F9D167E40610239A0027C147; executables = ( - F9A61CCE04C2B5A8006F5A0B, - F973FC3204852E75006F146B, + F53ACC52031D9AFE016F146B, + F594E5F1030774B1016F146B, ); - perUserDictionary = { - PBXPerProjectTemplateStateSaveDate = 79872121; - }; - projectwideBuildSettings = { + sourceControlManager = F9D167E30610239A0027C147; + userBuildSettings = { SYMROOT = "${SRCROOT}/../../build/tcl"; }; - wantsIndex = 1; - wantsSCM = -1; }; 00E2F84C016E8B780ACA28DC = { activeExec = 0; }; - F973FC3204852E75006F146B = { + F53ACC52031D9AFE016F146B = { activeArgIndex = 2147483647; activeArgIndices = ( + NO, + NO, ); argumentStrings = ( + "${SRCROOT}/../../tcl/tests/all.tcl", + "-verbose \"\"", ); configStateDict = { + "PBXLSLaunchAction-0" = { + PBXLSLaunchAction = 0; + PBXLSLaunchStartAction = 1; + PBXLSLaunchStdioStyle = 2; + PBXLSLaunchStyle = 0; + class = PBXLSRunLaunchConfig; + displayName = "Executable Runner"; + identifier = com.apple.Xcode.launch.runConfig; + remoteHostInfo = ""; + startActionInfo = ""; + }; + "PBXLSLaunchAction-1" = { + PBXLSLaunchAction = 1; + PBXLSLaunchStartAction = 1; + PBXLSLaunchStdioStyle = 2; + PBXLSLaunchStyle = 0; + class = PBXGDB_LaunchConfig; + displayName = GDB; + identifier = com.apple.Xcode.launch.GDBMI_Config; + remoteHostInfo = ""; + startActionInfo = ""; + }; }; + cppStopOnCatchEnabled = 0; + cppStopOnThrowEnabled = 0; + customDataFormattersEnabled = 1; debuggerPlugin = GDBDebugging; - dylibVariantSuffix = ""; - enableDebugStr = 1; + disassemblyDisplayState = 0; + dylibVariantSuffix = _debug; + enableDebugStr = 0; environmentEntries = ( + { + active = YES; + name = TCL_LIBRARY; + value = "${SRCROOT}/../../tcl/library"; + }, + { + active = NO; + name = DYLD_PRINT_LIBRARIES; + }, ); isa = PBXExecutable; - launchableReference = F9A61CCD04C2B5A5006F5A0B; - name = tclsh8.4; + launchableReference = F5C37CF303D5BEDF016F146B; + libgmallocEnabled = 0; + name = tcltest; shlibInfoDictList = ( ); sourceDirectories = ( ); + startupPath = "<<ProductDirectory>>"; }; - F9A61CCD04C2B5A5006F5A0B = { - isa = PBXFileReference; - name = tclsh8.4; - path = ../../build/tcl/tclsh8.4; - refType = 4; - }; - F9A61CCE04C2B5A8006F5A0B = { + F594E5F1030774B1016F146B = { activeArgIndex = 2147483647; activeArgIndices = ( ); argumentStrings = ( ); configStateDict = { + "PBXLSLaunchAction-0" = { + PBXLSLaunchAction = 0; + PBXLSLaunchStartAction = 1; + PBXLSLaunchStdioStyle = 2; + PBXLSLaunchStyle = 0; + class = PBXLSRunLaunchConfig; + displayName = "Executable Runner"; + identifier = com.apple.Xcode.launch.runConfig; + remoteHostInfo = ""; + startActionInfo = ""; + }; + "PBXLSLaunchAction-1" = { + PBXLSLaunchAction = 1; + PBXLSLaunchStartAction = 1; + PBXLSLaunchStdioStyle = 2; + PBXLSLaunchStyle = 0; + class = PBXGDB_LaunchConfig; + displayName = GDB; + identifier = com.apple.Xcode.launch.GDBMI_Config; + remoteHostInfo = ""; + startActionInfo = ""; + }; }; + cppStopOnCatchEnabled = 0; + cppStopOnThrowEnabled = 0; + customDataFormattersEnabled = 1; debuggerPlugin = GDBDebugging; - dylibVariantSuffix = ""; - enableDebugStr = 1; + disassemblyDisplayState = 0; + dylibVariantSuffix = _debug; + enableDebugStr = 0; environmentEntries = ( + { + active = NO; + name = DYLD_PRINT_LIBRARIES; + }, ); isa = PBXExecutable; - launchableReference = F9A61CD104C2B5B4006F5A0B; - name = tcltest; + launchableReference = F98F02E608E7EF9A00D0320A; + libgmallocEnabled = 0; + name = tclsh; shlibInfoDictList = ( ); sourceDirectories = ( ); + startupPath = "<<ProductDirectory>>"; }; - F9A61CD104C2B5B4006F5A0B = { + F5C37CF303D5BEDF016F146B = { isa = PBXFileReference; - name = tcltest; - path = ../../build/tcl/tcltest; - refType = 4; + lastKnownFileType = "compiled.mach-o.executable"; + path = tcltest; + refType = 3; + sourceTree = BUILT_PRODUCTS_DIR; + }; + F98F02E608E7EF9A00D0320A = { + isa = PBXFileReference; + lastKnownFileType = "compiled.mach-o.executable"; + path = tclsh8.4; + refType = 3; + sourceTree = BUILT_PRODUCTS_DIR; + }; + F9D167E30610239A0027C147 = { + fallbackIsa = XCSourceControlManager; + isSCMEnabled = 0; + isa = PBXSourceControlManager; + scmConfiguration = { + }; + scmType = scm.cvs; + }; + F9D167E40610239A0027C147 = { + indexTemplatePath = ""; + isa = PBXCodeSenseManager; + usesDefaults = 1; + wantsCodeCompletion = 1; + wantsCodeCompletionAutoSuggestions = 1; + wantsCodeCompletionCaseSensitivity = 1; + wantsCodeCompletionListAlways = 1; + wantsCodeCompletionOnlyMatchingItems = 1; + wantsCodeCompletionParametersIncluded = 1; + wantsCodeCompletionPlaceholdersInserted = 1; + wantsCodeCompletionTabCompletes = 1; + wantsIndex = 1; }; } diff --git a/macosx/Tcl.pbproj/project.pbxproj b/macosx/Tcl.pbproj/project.pbxproj index 4d2b2ca..7949108 100644 --- a/macosx/Tcl.pbproj/project.pbxproj +++ b/macosx/Tcl.pbproj/project.pbxproj @@ -3,9 +3,11 @@ archiveVersion = 1; classes = { }; - objectVersion = 38; + objectVersion = 39; objects = { 00E2F845016E82EB0ACA28DC = { + buildSettings = { + }; buildStyles = ( 00E2F847016E82EB0ACA28DC, 00E2F848016E82EB0ACA28DC, @@ -32,10 +34,9 @@ ); isa = PBXGroup; refType = 4; + sourceTree = "<group>"; }; 00E2F847016E82EB0ACA28DC = { - buildRules = ( - ); buildSettings = { MAKE_TARGET = develop; }; @@ -43,8 +44,6 @@ name = Development; }; 00E2F848016E82EB0ACA28DC = { - buildRules = ( - ); buildSettings = { MAKE_TARGET = deploy; }; @@ -53,38 +52,36 @@ }; 00E2F84A016E8A830ACA28DC = { children = ( - F9A61C9D04C2B4E3006F5A0B, - F53ACC5C031D9D11016F146B, F53ACC73031DA405016F146B, + F53ACC5C031D9D11016F146B, + F9A61C9D04C2B4E3006F5A0B, ); isa = PBXGroup; name = Products; refType = 4; + sourceTree = "<group>"; }; 00E2F84C016E8B780ACA28DC = { - buildArgumentsString = "-c \"if [ \\\"${ACTION}\\\" != \\\"clean\\\" ]; then if [ \\\"${ACTION}\\\" = \\\"install\\\" ]; then MAKE_ACTION=\"install-\"; fi; else MAKE_ACTION=\"distclean-\"; fi; gnumake \\${MAKE_ACTION:-}${MAKE_TARGET}"; + buildArgumentsString = "-c \"cd \\\"${TCL_SRCROOT}/macosx\\\" && ACTION=${ACTION} && gnumake \\${ACTION:+\\${ACTION/clean/distclean}-}${MAKE_TARGET} INSTALL_ROOT=\\\"${DSTROOT}\\\" INSTALL_PATH=\\\"${INSTALL_PATH}\\\" PREFIX=\\\"${PREFIX}\\\" BINDIR=\\\"${BINDIR}\\\" MANDIR=\\\"${MANDIR}\\\" \\${EXTRA_MAKE_FLAGS} ${ALL_SETTINGS}\""; buildPhases = ( ); buildSettings = { - EXTRA_CONFIGURE_ARGS = ""; - EXTRA_MAKE_ARGS = ""; + BINDIR = "${PREFIX}/bin"; INSTALL_PATH = /Library/Frameworks; - INSTALL_ROOT = "${DSTROOT}"; - PREFIX = /usr; + MANDIR = "${PREFIX}/man"; + PREFIX = /usr/local; PRODUCT_NAME = Tcl; - SYMROOT = "${SRCROOT}/../../build/tcl"; + TCL_SRCROOT = "${SRCROOT}/../../tcl"; + TEMP_DIR = "${PROJECT_TEMP_DIR}"; }; - buildToolPath = /bin/sh; + buildToolPath = /bin/bash; buildWorkingDirectory = "${SRCROOT}"; dependencies = ( ); isa = PBXLegacyTarget; name = Tcl; - passBuildSettingsInEnvironment = 1; + passBuildSettingsInEnvironment = 0; productName = Tcl; - settingsToExpand = 6; - settingsToPassInEnvironment = 287; - settingsToPassOnCommandLine = 280; }; 00E2F854016E922C0ACA28DC = { children = ( @@ -168,6 +165,7 @@ name = Sources; path = ""; refType = 4; + sourceTree = "<group>"; }; 00E2F855016E922C0ACA28DC = { children = ( @@ -177,6 +175,7 @@ isa = PBXGroup; name = generic; refType = 4; + sourceTree = "<group>"; }; 00E2F856016E92B00ACA28DC = { children = ( @@ -200,6 +199,7 @@ isa = PBXGroup; name = Headers; refType = 4; + sourceTree = "<group>"; }; 00E2F857016E92B00ACA28DC = { children = ( @@ -209,6 +209,7 @@ isa = PBXGroup; name = macosx; refType = 4; + sourceTree = "<group>"; }; 00E2F858016E92B00ACA28DC = { children = ( @@ -216,6 +217,7 @@ isa = PBXGroup; name = Headers; refType = 4; + sourceTree = "<group>"; }; 00E2F859016E92B00ACA28DC = { children = ( @@ -224,6 +226,7 @@ isa = PBXGroup; name = Sources; refType = 4; + sourceTree = "<group>"; }; 00E2F85A016E92B00ACA28DC = { children = ( @@ -233,6 +236,7 @@ isa = PBXGroup; name = unix; refType = 4; + sourceTree = "<group>"; }; 00E2F85B016E92B00ACA28DC = { children = ( @@ -242,6 +246,7 @@ isa = PBXGroup; name = Headers; refType = 4; + sourceTree = "<group>"; }; 00E2F85C016E92B00ACA28DC = { children = ( @@ -264,6 +269,7 @@ isa = PBXGroup; name = Sources; refType = 4; + sourceTree = "<group>"; }; //000 //001 @@ -284,51 +290,64 @@ isa = PBXGroup; name = "Build System"; refType = 4; + sourceTree = "<group>"; }; F5306CA003CAC9AE016F146B = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = text; name = ChangeLog; path = ../ChangeLog; refType = 2; + sourceTree = SOURCE_ROOT; }; F5306CA103CAC9DE016F146B = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = text.script.sh; name = configure.in; path = ../unix/configure.in; refType = 2; + sourceTree = SOURCE_ROOT; }; F5306CA203CAC9DE016F146B = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = text; name = Makefile.in; path = ../unix/Makefile.in; refType = 2; + sourceTree = SOURCE_ROOT; }; F5306CA303CAC9DE016F146B = { isa = PBXFileReference; + lastKnownFileType = text; name = tcl.m4; path = ../unix/tcl.m4; refType = 2; + sourceTree = SOURCE_ROOT; }; F53ACC5C031D9D11016F146B = { - isa = PBXExecutableFileReference; - name = tclsh8.4; - path = ../../build/tcl/tclsh8.4; - refType = 2; + isa = PBXFileReference; + lastKnownFileType = "compiled.mach-o.executable"; + path = tclsh8.4; + refType = 3; + sourceTree = BUILT_PRODUCTS_DIR; }; F53ACC73031DA405016F146B = { - isa = PBXExecutableFileReference; - name = tcltest; - path = ../../build/tcl/tcltest; - refType = 2; + isa = PBXFileReference; + lastKnownFileType = "compiled.mach-o.executable"; + path = tcltest; + refType = 3; + sourceTree = BUILT_PRODUCTS_DIR; }; F5A1836F018242A501DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; path = tclMacOSXBundle.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5C88655017D604601DC9062 = { children = ( @@ -339,780 +358,1003 @@ isa = PBXGroup; name = "Header Tools"; refType = 4; + sourceTree = "<group>"; }; F5C88656017D604601DC9062 = { isa = PBXFileReference; + lastKnownFileType = text; name = genStubs.tcl; path = ../tools/genStubs.tcl; refType = 2; + sourceTree = SOURCE_ROOT; }; F5C88657017D60C901DC9062 = { isa = PBXFileReference; + lastKnownFileType = text; name = tcl.decls; path = ../generic/tcl.decls; refType = 2; + sourceTree = SOURCE_ROOT; }; F5C88658017D60C901DC9062 = { isa = PBXFileReference; + lastKnownFileType = text; name = tclInt.decls; path = ../generic/tclInt.decls; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F6B016ECAA401DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = regcustom.h; path = ../generic/regcustom.h; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F6C016ECAA401DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = regerrs.h; path = ../generic/regerrs.h; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F6D016ECAA401DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = regguts.h; path = ../generic/regguts.h; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F6E016ECAA401DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = tcl.h; path = ../generic/tcl.h; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F6F016ECAA401DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = tclCompile.h; path = ../generic/tclCompile.h; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F70016ECAA401DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = tclDecls.h; path = ../generic/tclDecls.h; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F71016ECAA401DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = tclInitScript.h; path = ../generic/tclInitScript.h; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F72016ECAA401DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = tclInt.h; path = ../generic/tclInt.h; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F73016ECAA401DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = tclIntDecls.h; path = ../generic/tclIntDecls.h; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F74016ECAA401DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = tclIntPlatDecls.h; path = ../generic/tclIntPlatDecls.h; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F75016ECAA401DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = tclIO.h; path = ../generic/tclIO.h; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F76016ECAA401DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = tclMath.h; path = ../generic/tclMath.h; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F77016ECAA401DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = tclPlatDecls.h; path = ../generic/tclPlatDecls.h; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F78016ECAA401DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = tclRegexp.h; path = ../generic/tclRegexp.h; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F87016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = regc_color.c; path = ../generic/regc_color.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F88016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = regc_cvec.c; path = ../generic/regc_cvec.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F89016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = regc_lex.c; path = ../generic/regc_lex.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F8A016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = regc_locale.c; path = ../generic/regc_locale.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F8B016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = regc_nfa.c; path = ../generic/regc_nfa.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F8C016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = regcomp.c; path = ../generic/regcomp.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F8D016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = rege_dfa.c; path = ../generic/rege_dfa.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F8E016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = regerror.c; path = ../generic/regerror.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F8F016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = regexec.c; path = ../generic/regexec.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F90016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = regfree.c; path = ../generic/regfree.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F91016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = regfronts.c; path = ../generic/regfronts.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F92016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclAlloc.c; path = ../generic/tclAlloc.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F93016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclAsync.c; path = ../generic/tclAsync.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F94016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclBasic.c; path = ../generic/tclBasic.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F95016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclBinary.c; path = ../generic/tclBinary.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F96016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclCkalloc.c; path = ../generic/tclCkalloc.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F97016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclClock.c; path = ../generic/tclClock.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F98016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclCmdAH.c; path = ../generic/tclCmdAH.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F99016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclCmdIL.c; path = ../generic/tclCmdIL.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F9A016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclCmdMZ.c; path = ../generic/tclCmdMZ.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F9B016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclCompCmds.c; path = ../generic/tclCompCmds.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F9C016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclCompExpr.c; path = ../generic/tclCompExpr.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F9D016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclCompile.c; path = ../generic/tclCompile.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F9E016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclDate.c; path = ../generic/tclDate.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24F9F016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclEncoding.c; path = ../generic/tclEncoding.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FA0016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclEnv.c; path = ../generic/tclEnv.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FA1016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclEvent.c; path = ../generic/tclEvent.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FA2016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclExecute.c; path = ../generic/tclExecute.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FA3016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclFCmd.c; path = ../generic/tclFCmd.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FA4016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclFileName.c; path = ../generic/tclFileName.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FA5016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclGet.c; path = ../generic/tclGet.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FA6016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclHash.c; path = ../generic/tclHash.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FA7016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclHistory.c; path = ../generic/tclHistory.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FA8016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclIndexObj.c; path = ../generic/tclIndexObj.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FA9016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclInterp.c; path = ../generic/tclInterp.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FAA016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclIO.c; path = ../generic/tclIO.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FAB016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclIOCmd.c; path = ../generic/tclIOCmd.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FAC016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclIOGT.c; path = ../generic/tclIOGT.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FAD016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclIOSock.c; path = ../generic/tclIOSock.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FAE016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclIOUtil.c; path = ../generic/tclIOUtil.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FAF016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclLink.c; path = ../generic/tclLink.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FB0016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclListObj.c; path = ../generic/tclListObj.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FB1016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclLiteral.c; path = ../generic/tclLiteral.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FB2016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclLoad.c; path = ../generic/tclLoad.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FB3016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclLoadNone.c; path = ../generic/tclLoadNone.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FB4016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclMain.c; path = ../generic/tclMain.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FB5016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclNamesp.c; path = ../generic/tclNamesp.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FB6016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclNotify.c; path = ../generic/tclNotify.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FB7016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclObj.c; path = ../generic/tclObj.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FB8016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclPanic.c; path = ../generic/tclPanic.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FB9016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclParse.c; path = ../generic/tclParse.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FBA016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclParseExpr.c; path = ../generic/tclParseExpr.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FBB016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclPipe.c; path = ../generic/tclPipe.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FBC016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclPosixStr.c; path = ../generic/tclPosixStr.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FBD016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclPreserve.c; path = ../generic/tclPreserve.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FBE016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclProc.c; path = ../generic/tclProc.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FBF016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclRegexp.c; path = ../generic/tclRegexp.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FC0016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclResolve.c; path = ../generic/tclResolve.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FC1016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclResult.c; path = ../generic/tclResult.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FC2016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclScan.c; path = ../generic/tclScan.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FC3016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclStringObj.c; path = ../generic/tclStringObj.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FC4016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclStubInit.c; path = ../generic/tclStubInit.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FC5016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclStubLib.c; path = ../generic/tclStubLib.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FC6016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclTest.c; path = ../generic/tclTest.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FC7016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclTestObj.c; path = ../generic/tclTestObj.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FC8016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclTestProcBodyObj.c; path = ../generic/tclTestProcBodyObj.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FC9016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclThread.c; path = ../generic/tclThread.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FCA016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclThreadJoin.c; path = ../generic/tclThreadJoin.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FCB016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclThreadTest.c; path = ../generic/tclThreadTest.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FCC016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclTimer.c; path = ../generic/tclTimer.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FCD016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclUniData.c; path = ../generic/tclUniData.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FCE016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclUtf.c; path = ../generic/tclUtf.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FCF016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclUtil.c; path = ../generic/tclUtil.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FD0016ECAFC01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclVar.c; path = ../generic/tclVar.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FD1016ECB1E01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = regex.h; path = ../generic/regex.h; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FD2016ECB1E01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = tclPort.h; path = ../generic/tclPort.h; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FD3016ECB4901DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclPkg.c; path = ../generic/tclPkg.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FD6016ECC0F01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = tclUnixPort.h; path = ../unix/tclUnixPort.h; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FD7016ECC0F01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = tclUnixThrd.h; path = ../unix/tclUnixThrd.h; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FD8016ECC0F01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclAppInit.c; path = ../unix/tclAppInit.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FD9016ECC0F01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclLoadDyld.c; path = ../unix/tclLoadDyld.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FDB016ECC0F01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclUnixChan.c; path = ../unix/tclUnixChan.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FDC016ECC0F01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclUnixEvent.c; path = ../unix/tclUnixEvent.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FDD016ECC0F01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclUnixFCmd.c; path = ../unix/tclUnixFCmd.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FDE016ECC0F01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclUnixFile.c; path = ../unix/tclUnixFile.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FDF016ECC0F01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclUnixInit.c; path = ../unix/tclUnixInit.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FE0016ECC0F01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclUnixNotfy.c; path = ../unix/tclUnixNotfy.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FE1016ECC0F01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclUnixPipe.c; path = ../unix/tclUnixPipe.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FE2016ECC0F01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclUnixSock.c; path = ../unix/tclUnixSock.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FE3016ECC0F01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclUnixTest.c; path = ../unix/tclUnixTest.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FE4016ECC0F01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclUnixThrd.c; path = ../unix/tclUnixThrd.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FE5016ECC0F01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclUnixTime.c; path = ../unix/tclUnixTime.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FE6016ECC0F01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclXtNotify.c; path = ../unix/tclXtNotify.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FE7016ECC0F01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; name = tclXtTest.c; path = ../unix/tclXtTest.c; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FEE016ED0DF01DC9062 = { children = ( @@ -1137,117 +1379,152 @@ isa = PBXGroup; name = Scripts; refType = 4; + sourceTree = "<group>"; }; F5F24FEF016ED0DF01DC9062 = { isa = PBXFileReference; + lastKnownFileType = text; name = auto.tcl; path = ../library/auto.tcl; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FF0016ED0DF01DC9062 = { includeInIndex = 0; - isa = PBXFolderReference; + isa = PBXFileReference; + lastKnownFileType = folder; name = dde; path = ../library/dde; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FF3016ED0DF01DC9062 = { includeInIndex = 0; - isa = PBXFolderReference; + isa = PBXFileReference; + lastKnownFileType = folder; name = encoding; path = ../library/encoding; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FF4016ED0DF01DC9062 = { isa = PBXFileReference; + lastKnownFileType = text; name = history.tcl; path = ../library/history.tcl; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FF5016ED0DF01DC9062 = { includeInIndex = 0; - isa = PBXFolderReference; + isa = PBXFileReference; + lastKnownFileType = folder; name = http; path = ../library/http; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FF6016ED0DF01DC9062 = { includeInIndex = 0; - isa = PBXFolderReference; + isa = PBXFileReference; + lastKnownFileType = folder; name = http1.0; path = ../library/http1.0; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FFA016ED0DF01DC9062 = { isa = PBXFileReference; + lastKnownFileType = text; name = init.tcl; path = ../library/init.tcl; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FFB016ED0DF01DC9062 = { isa = PBXFileReference; + lastKnownFileType = text; name = ldAout.tcl; path = ../library/ldAout.tcl; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FFC016ED0DF01DC9062 = { includeInIndex = 0; - isa = PBXFolderReference; + isa = PBXFileReference; + lastKnownFileType = folder; name = msgcat; path = ../library/msgcat; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F24FFE016ED0DF01DC9062 = { includeInIndex = 0; - isa = PBXFolderReference; + isa = PBXFileReference; + lastKnownFileType = folder; name = opt; path = ../library/opt; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F25001016ED0DF01DC9062 = { isa = PBXFileReference; + lastKnownFileType = text; name = package.tcl; path = ../library/package.tcl; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F25002016ED0DF01DC9062 = { isa = PBXFileReference; + lastKnownFileType = text; name = parray.tcl; path = ../library/parray.tcl; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F25003016ED0DF01DC9062 = { includeInIndex = 0; - isa = PBXFolderReference; + isa = PBXFileReference; + lastKnownFileType = folder; name = reg; path = ../library/reg; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F25005016ED0DF01DC9062 = { isa = PBXFileReference; + lastKnownFileType = text; name = safe.tcl; path = ../library/safe.tcl; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F25007016ED0DF01DC9062 = { fileEncoding = 5; isa = PBXFileReference; + lastKnownFileType = text; name = tclIndex; path = ../library/tclIndex; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F25008016ED0DF01DC9062 = { includeInIndex = 0; - isa = PBXFolderReference; + isa = PBXFileReference; + lastKnownFileType = folder; name = tcltest; path = ../library/tcltest; refType = 2; + sourceTree = SOURCE_ROOT; }; F5F2500A016ED0DF01DC9062 = { isa = PBXFileReference; + lastKnownFileType = text; name = word.tcl; path = ../library/word.tcl; refType = 2; + sourceTree = SOURCE_ROOT; }; //F50 //F51 @@ -1260,10 +1537,11 @@ //F93 //F94 F9A61C9D04C2B4E3006F5A0B = { - isa = PBXFrameworkReference; - name = Tcl.framework; - path = ../../build/tcl/Tcl.framework; - refType = 2; + explicitFileType = wrapper.framework; + isa = PBXFileReference; + path = Tcl.framework; + refType = 3; + sourceTree = BUILT_PRODUCTS_DIR; }; }; rootObject = 00E2F845016E82EB0ACA28DC; diff --git a/macosx/tclMacOSXBundle.c b/macosx/tclMacOSXBundle.c index 75b871c..28e4977 100644 --- a/macosx/tclMacOSXBundle.c +++ b/macosx/tclMacOSXBundle.c @@ -51,13 +51,13 @@ * license. */ +#include "tclPort.h" + #ifdef HAVE_COREFOUNDATION #include <CoreFoundation/CoreFoundation.h> #include <mach-o/dyld.h> #endif /* HAVE_COREFOUNDATION */ -#include "tcl.h" - /* *---------------------------------------------------------------------- * diff --git a/macosx/tclMacOSXNotify.c b/macosx/tclMacOSXNotify.c index 898d075..cd09ccf 100644 --- a/macosx/tclMacOSXNotify.c +++ b/macosx/tclMacOSXNotify.c @@ -1,25 +1,25 @@ /* * tclMacOSXNotify.c -- * - * This file contains the implementation of a merged - * CFRunLoop/select-based notifier, which is the lowest-level part - * of the Tcl event loop. This file works together with - * generic/tclNotify.c. + * This file contains the implementation of a merged CFRunLoop/select() + * based notifier, which is the lowest-level part of the Tcl event loop. + * This file works together with generic/tclNotify.c. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright 2001, Apple Computer, Inc. - * Copyright 2005, Tcl Core Team. + * Copyright (c) 2005 Tcl Core Team. + * Copyright (c) 2005 Daniel A. Steffen <das@users.sourceforge.net> * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacOSXNotify.c,v 1.1.2.4 2005/05/20 02:50:36 das Exp $ + * RCS: @(#) $Id: tclMacOSXNotify.c,v 1.1.2.5 2005/11/27 02:34:41 das Exp $ */ -#ifdef HAVE_COREFOUNDATION /* Traditional unix select-based notifier - * is in tclUnixNotfy.c */ #include "tclInt.h" #include "tclPort.h" +#ifdef HAVE_COREFOUNDATION /* Traditional unix select-based notifier is + * in tclUnixNotfy.c */ #include <CoreFoundation/CoreFoundation.h> #include <pthread.h> @@ -27,42 +27,41 @@ extern TclStubs tclStubs; extern Tcl_NotifierProcs tclOriginalNotifier; /* - * This structure is used to keep track of the notifier info for a - * a registered file. + * This structure is used to keep track of the notifier info for a registered + * file. */ typedef struct FileHandler { int fd; int mask; /* Mask of desired events: TCL_READABLE, * etc. */ - int readyMask; /* Mask of events that have been seen since the - * last time file handlers were invoked for - * this file. */ - Tcl_FileProc *proc; /* Procedure to call, in the style of + int readyMask; /* Mask of events that have been seen since + * the last time file handlers were invoked + * for this file. */ + Tcl_FileProc *proc; /* Function to call, in the style of * Tcl_CreateFileHandler. */ ClientData clientData; /* Argument to pass to proc. */ struct FileHandler *nextPtr;/* Next in list of all files we care about. */ } FileHandler; /* - * The following structure is what is added to the Tcl event queue when - * file handlers are ready to fire. + * The following structure is what is added to the Tcl event queue when file + * handlers are ready to fire. */ typedef struct FileHandlerEvent { - Tcl_Event header; /* Information that is standard for - * all events. */ - int fd; /* File descriptor that is ready. Used - * to find the FileHandler structure for - * the file (can't point directly to the - * FileHandler structure because it could - * go away while the event is queued). */ + Tcl_Event header; /* Information that is standard for all + * events. */ + int fd; /* File descriptor that is ready. Used to find + * the FileHandler structure for the file + * (can't point directly to the FileHandler + * structure because it could go away while + * the event is queued). */ } FileHandlerEvent; /* - * - * The following structure contains a set of select() masks to track - * readable, writable, and exceptional conditions. + * The following structure contains a set of select() masks to track readable, + * writable, and exceptional conditions. */ typedef struct SelectMasks { @@ -73,49 +72,50 @@ typedef struct SelectMasks { /* * The following static structure contains the state information for the - * select based implementation of the Tcl notifier. One of these structures - * is created for each thread that is using the notifier. + * select based implementation of the Tcl notifier. One of these structures is + * created for each thread that is using the notifier. */ typedef struct ThreadSpecificData { FileHandler *firstFileHandlerPtr; /* Pointer to head of file handler list. */ - - SelectMasks checkMasks; /* This structure is used to build up the masks - * to be used in the next call to select. - * Bits are set in response to calls to - * Tcl_CreateFileHandler. */ + SelectMasks checkMasks; /* This structure is used to build up the + * masks to be used in the next call to + * select. Bits are set in response to calls + * to Tcl_CreateFileHandler. */ SelectMasks readyMasks; /* This array reflects the readable/writable * conditions that were found to exist by the * last call to select. */ - int numFdBits; /* Number of valid bits in checkMasks - * (one more than highest fd for which + int numFdBits; /* Number of valid bits in checkMasks (one + * more than highest fd for which * Tcl_WatchFile has been called). */ int onList; /* True if it is in this list */ - unsigned int pollState; /* pollState is used to implement a polling + unsigned int pollState; /* pollState is used to implement a polling * handshake between each thread and the * notifier thread. Bits defined below. */ struct ThreadSpecificData *nextPtr, *prevPtr; - /* All threads that are currently waiting on + /* All threads that are currently waiting on * an event have their ThreadSpecificData * structure on a doubly-linked listed formed - * from these pointers. You must hold the + * from these pointers. You must hold the * notifierLock before accessing these * fields. */ CFRunLoopSourceRef runLoopSource; - /* Any other thread alerts a notifier - * that an event is ready to be processed - * by signaling this CFRunLoopSource. */ - CFRunLoopRef runLoop; /* This thread's CFRunLoop, needs to be woken - * up whenever the runLoopSource is signaled. */ - int eventReady; /* True if an event is ready to be processed. */ + /* Any other thread alerts a notifier that an + * event is ready to be processed by signaling + * this CFRunLoopSource. */ + CFRunLoopRef runLoop; /* This thread's CFRunLoop, needs to be woken + * up whenever the runLoopSource is + * signaled. */ + int eventReady; /* True if an event is ready to be + * processed. */ } ThreadSpecificData; static Tcl_ThreadDataKey dataKey; /* - * The following static indicates the number of threads that have - * initialized notifiers. + * The following static indicates the number of threads that have initialized + * notifiers. * * You must hold the notifierInitLock before accessing this variable. */ @@ -123,9 +123,9 @@ static Tcl_ThreadDataKey dataKey; static int notifierCount = 0; /* - * The following variable points to the head of a doubly-linked list of - * of ThreadSpecificData structures for all threads that are currently - * waiting on an event. + * The following variable points to the head of a doubly-linked list of + * ThreadSpecificData structures for all threads that are currently waiting on + * an event. * * You must hold the notifierLock before accessing this list. */ @@ -133,16 +133,15 @@ static int notifierCount = 0; static ThreadSpecificData *waitingListPtr = NULL; /* - * The notifier thread spends all its time in select() waiting for a - * file descriptor associated with one of the threads on the waitingListPtr - * list to do something interesting. But if the contents of the - * waitingListPtr list ever changes, we need to wake up and restart - * the select() system call. You can wake up the notifier thread by - * writing a single byte to the file descriptor defined below. This - * file descriptor is the input-end of a pipe and the notifier thread is - * listening for data on the output-end of the same pipe. Hence writing - * to this file descriptor will cause the select() system call to return - * and wake up the notifier thread. + * The notifier thread spends all its time in select() waiting for a file + * descriptor associated with one of the threads on the waitingListPtr list to + * do something interesting. But if the contents of the waitingListPtr list + * ever changes, we need to wake up and restart the select() system call. You + * can wake up the notifier thread by writing a single byte to the file + * descriptor defined below. This file descriptor is the input-end of a pipe + * and the notifier thread is listening for data on the output-end of the same + * pipe. Hence writing to this file descriptor will cause the select() system + * call to return and wake up the notifier thread. * * You must hold the notifierLock lock before writing to the pipe. */ @@ -152,55 +151,64 @@ static int receivePipe = -1; /* Output end of triggerPipe */ /* * We use Darwin-native spinlocks instead of pthread mutexes for notifier - * locking: this radically simplifies the implementation and lowers - * overhead. Note that these are not pure spinlocks, they employ various - * strategies to back off, making them immune to most priority-inversion - * livelocks (c.f. man 3 OSSpinLockLock). + * locking: this radically simplifies the implementation and lowers overhead. + * Note that these are not pure spinlocks, they employ various strategies to + * back off, making them immune to most priority-inversion livelocks (c.f. man + * 3 OSSpinLockLock). */ #if defined(HAVE_LIBKERN_OSATOMIC_H) && defined(HAVE_OSSPINLOCKLOCK) -/* Use OSSpinLock API where available (Tiger or later) */ +/* + * Use OSSpinLock API where available (Tiger or later). + */ + #include <libkern/OSAtomic.h> + #else -/* Otherwise, use commpage spinlock SPI directly */ +/* + * Otherwise, use commpage spinlock SPI directly. + */ + typedef uint32_t OSSpinLock; -extern void _spin_lock(OSSpinLock *lock); -extern void _spin_unlock(OSSpinLock *lock); -#define OSSpinLockLock(p) _spin_lock(p) -#define OSSpinLockUnlock(p) _spin_unlock(p) -#endif +extern void _spin_lock(OSSpinLock *lock); +extern void _spin_unlock(OSSpinLock *lock); +#define OSSpinLockLock(p) _spin_lock(p) +#define OSSpinLockUnlock(p) _spin_unlock(p) + +#endif /* HAVE_LIBKERN_OSATOMIC_H && HAVE_OSSPINLOCKLOCK */ /* - * These spinlocks lock access to the global notifier state. + * These spinlocks lock access to the global notifier state. */ static OSSpinLock notifierInitLock = 0; static OSSpinLock notifierLock = 0; -/* +/* * Macros abstracting notifier locking/unlocking */ -#define LOCK_NOTIFIER_INIT OSSpinLockLock(¬ifierInitLock) -#define UNLOCK_NOTIFIER_INIT OSSpinLockUnlock(¬ifierInitLock) -#define LOCK_NOTIFIER OSSpinLockLock(¬ifierLock) -#define UNLOCK_NOTIFIER OSSpinLockUnlock(¬ifierLock) +#define LOCK_NOTIFIER_INIT OSSpinLockLock(¬ifierInitLock) +#define UNLOCK_NOTIFIER_INIT OSSpinLockUnlock(¬ifierInitLock) +#define LOCK_NOTIFIER OSSpinLockLock(¬ifierLock) +#define UNLOCK_NOTIFIER OSSpinLockUnlock(¬ifierLock) /* * The pollState bits * POLL_WANT is set by each thread before it waits on its condition - * variable. It is checked by the notifier before it does - * select. - * POLL_DONE is set by the notifier if it goes into select after - * seeing POLL_WANT. The idea is to ensure it tries a select - * with the same bits the initial thread had set. + * variable. It is checked by the notifier before it does select. + * POLL_DONE is set by the notifier if it goes into select after seeing + * POLL_WANT. The idea is to ensure it tries a select with the + * same bits the initial thread had set. */ + #define POLL_WANT 0x1 #define POLL_DONE 0x2 /* * This is the thread ID of the notifier thread that does select. */ + static pthread_t notifierThread; /* @@ -227,30 +235,30 @@ static int FileHandlerEventProc(Tcl_Event *evPtr, int flags); */ ClientData -Tcl_InitNotifier() +Tcl_InitNotifier(void) { ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); tsdPtr->eventReady = 0; - - /* + + /* * Initialize CFRunLoopSource and add it to CFRunLoop of this thread */ - + if (!tsdPtr->runLoop) { - CFRunLoopRef runLoop = CFRunLoopGetCurrent(); - CFRunLoopSourceRef runLoopSource; - CFRunLoopSourceContext runLoopSourceContext; - - bzero(&runLoopSourceContext, sizeof(CFRunLoopSourceContext)); - runLoopSourceContext.info = tsdPtr; - runLoopSource = CFRunLoopSourceCreate(NULL, 0, &runLoopSourceContext); - if (!runLoopSource) { - Tcl_Panic("Tcl_InitNotifier: could not create CFRunLoopSource."); - } - CFRunLoopAddSource(runLoop, runLoopSource, kCFRunLoopCommonModes); - tsdPtr->runLoopSource = runLoopSource; - tsdPtr->runLoop = runLoop; + CFRunLoopRef runLoop = CFRunLoopGetCurrent(); + CFRunLoopSourceRef runLoopSource; + CFRunLoopSourceContext runLoopSourceContext; + + bzero(&runLoopSourceContext, sizeof(CFRunLoopSourceContext)); + runLoopSourceContext.info = tsdPtr; + runLoopSource = CFRunLoopSourceCreate(NULL, 0, &runLoopSourceContext); + if (!runLoopSource) { + Tcl_Panic("Tcl_InitNotifier: could not create CFRunLoopSource."); + } + CFRunLoopAddSource(runLoop, runLoopSource, kCFRunLoopCommonModes); + tsdPtr->runLoopSource = runLoopSource; + tsdPtr->runLoop = runLoop; } /* @@ -259,40 +267,41 @@ Tcl_InitNotifier() LOCK_NOTIFIER_INIT; if (notifierCount == 0) { - int fds[2], status, result; - pthread_attr_t attr; - - if (pipe(fds) != 0) { - Tcl_Panic("Tcl_InitNotifier: could not create trigger pipe."); - } - - status = fcntl(fds[0], F_GETFL); - status |= O_NONBLOCK; - if (fcntl(fds[0], F_SETFL, status) < 0) { - Tcl_Panic("Tcl_InitNotifier: could not make receive pipe non blocking."); - } - status = fcntl(fds[1], F_GETFL); - status |= O_NONBLOCK; - if (fcntl(fds[1], F_SETFL, status) < 0) { - Tcl_Panic("Tcl_InitNotifier: could not make trigger pipe non blocking."); - } - - receivePipe = fds[0]; - triggerPipe = fds[1]; - - pthread_attr_init(&attr); - pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM); - pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); - pthread_attr_setstacksize(&attr, 60 * 1024); - result = pthread_create(¬ifierThread, &attr, (void * (*)(void *))NotifierThreadProc, NULL); - pthread_attr_destroy(&attr); + int fds[2], status, result; + pthread_attr_t attr; + + if (pipe(fds) != 0) { + Tcl_Panic("Tcl_InitNotifier: could not create trigger pipe."); + } + + status = fcntl(fds[0], F_GETFL); + status |= O_NONBLOCK; + if (fcntl(fds[0], F_SETFL, status) < 0) { + Tcl_Panic("Tcl_InitNotifier: could not make receive pipe non blocking."); + } + status = fcntl(fds[1], F_GETFL); + status |= O_NONBLOCK; + if (fcntl(fds[1], F_SETFL, status) < 0) { + Tcl_Panic("Tcl_InitNotifier: could not make trigger pipe non blocking."); + } + + receivePipe = fds[0]; + triggerPipe = fds[1]; + + pthread_attr_init(&attr); + pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setstacksize(&attr, 60 * 1024); + result = pthread_create(¬ifierThread, &attr, + (void * (*)(void *))NotifierThreadProc, NULL); + pthread_attr_destroy(&attr); if (result) { Tcl_Panic("Tcl_InitNotifier: unable to start notifier thread."); } } notifierCount++; UNLOCK_NOTIFIER_INIT; - + return (ClientData) tsdPtr; } @@ -301,15 +310,15 @@ Tcl_InitNotifier() * * Tcl_FinalizeNotifier -- * - * This function is called to cleanup the notifier state before - * a thread is terminated. + * This function is called to cleanup the notifier state before a thread + * is terminated. * * Results: * None. * * Side effects: - * May terminate the background notifier thread if this is the - * last notifier instance. + * May terminate the background notifier thread if this is the last + * notifier instance. * *---------------------------------------------------------------------- */ @@ -324,47 +333,52 @@ Tcl_FinalizeNotifier(clientData) notifierCount--; /* - * If this is the last thread to use the notifier, close the notifier - * pipe and wait for the background thread to terminate. + * If this is the last thread to use the notifier, close the notifier pipe + * and wait for the background thread to terminate. */ if (notifierCount == 0) { - int result; - + int result; + if (triggerPipe < 0) { Tcl_Panic("Tcl_FinalizeNotifier: notifier pipe not initialized."); } /* - * Send "q" message to the notifier thread so that it will - * terminate. The notifier will return from its call to select() - * and notice that a "q" message has arrived, it will then close - * its side of the pipe and terminate its thread. Note the we can - * not just close the pipe and check for EOF in the notifier - * thread because if a background child process was created with - * exec, select() would not register the EOF on the pipe until the - * child processes had terminated. [Bug: 4139] + * Send "q" message to the notifier thread so that it will terminate. + * The notifier will return from its call to select() and notice that + * a "q" message has arrived, it will then close its side of the pipe + * and terminate its thread. Note the we can not just close the pipe + * and check for EOF in the notifier thread because if a background + * child process was created with exec, select() would not register + * the EOF on the pipe until the child processes had terminated. [Bug: + * 4139] [Bug: 1222872] */ + write(triggerPipe, "q", 1); close(triggerPipe); - result = pthread_join(notifierThread, NULL); + result = pthread_join(notifierThread, NULL); if (result) { Tcl_Panic("Tcl_FinalizeNotifier: unable to join notifier thread."); } - + close(receivePipe); - triggerPipe = -1; + triggerPipe = -1; } UNLOCK_NOTIFIER_INIT; - - LOCK_NOTIFIER; /* for concurrency with Tcl_AlertNotifier */ + + LOCK_NOTIFIER; /* for concurrency with Tcl_AlertNotifier */ if (tsdPtr->runLoop) { - tsdPtr->runLoop = NULL; - /* Remove runLoopSource from all CFRunLoops and release it */ - CFRunLoopSourceInvalidate(tsdPtr->runLoopSource); - CFRelease(tsdPtr->runLoopSource); - tsdPtr->runLoopSource = NULL; + tsdPtr->runLoop = NULL; + + /* + * Remove runLoopSource from all CFRunLoops and release it. + */ + + CFRunLoopSourceInvalidate(tsdPtr->runLoopSource); + CFRelease(tsdPtr->runLoopSource); + tsdPtr->runLoopSource = NULL; } UNLOCK_NOTIFIER; } @@ -374,18 +388,16 @@ Tcl_FinalizeNotifier(clientData) * * Tcl_AlertNotifier -- * - * Wake up the specified notifier from any thread. This routine - * is called by the platform independent notifier code whenever - * the Tcl_ThreadAlert routine is called. This routine is - * guaranteed not to be called on a given notifier after - * Tcl_FinalizeNotifier is called for that notifier. + * Wake up the specified notifier from any thread. This routine is called + * by the platform independent notifier code whenever the Tcl_ThreadAlert + * routine is called. This routine is guaranteed not to be called on a + * given notifier after Tcl_FinalizeNotifier is called for that notifier. * * Results: * None. * * Side effects: - * Signals the notifier condition variable for the specified - * notifier. + * Signals the notifier condition variable for the specified notifier. * *---------------------------------------------------------------------- */ @@ -395,11 +407,12 @@ Tcl_AlertNotifier(clientData) ClientData clientData; { ThreadSpecificData *tsdPtr = (ThreadSpecificData *) clientData; + LOCK_NOTIFIER; if (tsdPtr->runLoop) { - tsdPtr->eventReady = 1; - CFRunLoopSourceSignal(tsdPtr->runLoopSource); - CFRunLoopWakeUp(tsdPtr->runLoop); + tsdPtr->eventReady = 1; + CFRunLoopSourceSignal(tsdPtr->runLoopSource); + CFRunLoopWakeUp(tsdPtr->runLoop); } UNLOCK_NOTIFIER; } @@ -409,9 +422,9 @@ Tcl_AlertNotifier(clientData) * * Tcl_SetTimer -- * - * This procedure sets the current notifier timer value. This - * interface is not implemented in this notifier because we are - * always running inside of Tcl_DoOneEvent. + * This function sets the current notifier timer value. This interface is + * not implemented in this notifier because we are always running inside + * of Tcl_DoOneEvent. * * Results: * None. @@ -427,9 +440,9 @@ Tcl_SetTimer(timePtr) Tcl_Time *timePtr; /* Timeout value, may be NULL. */ { /* - * The interval timer doesn't do anything in this implementation, - * because the only event loop is via Tcl_DoOneEvent, which passes - * timeout values to Tcl_WaitForEvent. + * The interval timer doesn't do anything in this implementation, because + * the only event loop is via Tcl_DoOneEvent, which passes timeout values + * to Tcl_WaitForEvent. */ if (tclStubs.tcl_SetTimer != tclOriginalNotifier.setTimerProc) { @@ -465,7 +478,7 @@ Tcl_ServiceModeHook(mode) * * Tcl_CreateFileHandler -- * - * This procedure registers a file handler with the select notifier. + * This function registers a file handler with the select notifier. * * Results: * None. @@ -480,17 +493,18 @@ void Tcl_CreateFileHandler(fd, mask, proc, clientData) int fd; /* Handle of stream to watch. */ int mask; /* OR'ed combination of TCL_READABLE, - * TCL_WRITABLE, and TCL_EXCEPTION: - * indicates conditions under which - * proc should be called. */ - Tcl_FileProc *proc; /* Procedure to call for each - * selected event. */ + * TCL_WRITABLE, and TCL_EXCEPTION: indicates + * conditions under which proc should be + * called. */ + Tcl_FileProc *proc; /* Function to call for each selected + * event. */ ClientData clientData; /* Arbitrary data to pass to proc. */ { ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); FileHandler *filePtr; - if (tclStubs.tcl_CreateFileHandler != tclOriginalNotifier.createFileHandlerProc) { + if (tclStubs.tcl_CreateFileHandler != + tclOriginalNotifier.createFileHandlerProc) { tclStubs.tcl_CreateFileHandler(fd, mask, proc, clientData); return; } @@ -541,8 +555,7 @@ Tcl_CreateFileHandler(fd, mask, proc, clientData) * * Tcl_DeleteFileHandler -- * - * Cancel a previously-arranged callback arrangement for - * a file. + * Cancel a previously-arranged callback arrangement for a file. * * Results: * None. @@ -555,13 +568,15 @@ Tcl_CreateFileHandler(fd, mask, proc, clientData) void Tcl_DeleteFileHandler(fd) - int fd; /* Stream id for which to remove callback procedure. */ + int fd; /* Stream id for which to remove callback + * function. */ { FileHandler *filePtr, *prevPtr; int i; ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); - if (tclStubs.tcl_DeleteFileHandler != tclOriginalNotifier.deleteFileHandlerProc) { + if (tclStubs.tcl_DeleteFileHandler != + tclOriginalNotifier.deleteFileHandlerProc) { tclStubs.tcl_DeleteFileHandler(fd); return; } @@ -627,19 +642,19 @@ Tcl_DeleteFileHandler(fd) * * FileHandlerEventProc -- * - * This procedure is called by Tcl_ServiceEvent when a file event - * reaches the front of the event queue. This procedure is - * responsible for actually handling the event by invoking the - * callback for the file handler. + * This function is called by Tcl_ServiceEvent when a file event reaches + * the front of the event queue. This function is responsible for + * actually handling the event by invoking the callback for the file + * handler. * * Results: - * Returns 1 if the event was handled, meaning it should be removed - * from the queue. Returns 0 if the event was not handled, meaning - * it should stay on the queue. The only time the event isn't - * handled is if the TCL_FILE_EVENTS flag bit isn't set. + * Returns 1 if the event was handled, meaning it should be removed from + * the queue. Returns 0 if the event was not handled, meaning it should + * stay on the queue. The only time the event isn't handled is if the + * TCL_FILE_EVENTS flag bit isn't set. * * Side effects: - * Whatever the file handler's callback procedure does. + * Whatever the file handler's callback function does. * *---------------------------------------------------------------------- */ @@ -647,8 +662,8 @@ Tcl_DeleteFileHandler(fd) static int FileHandlerEventProc(evPtr, flags) Tcl_Event *evPtr; /* Event to service. */ - int flags; /* Flags that indicate what events to - * handle, such as TCL_FILE_EVENTS. */ + int flags; /* Flags that indicate what events to handle, + * such as TCL_FILE_EVENTS. */ { int mask; FileHandler *filePtr; @@ -661,9 +676,9 @@ FileHandlerEventProc(evPtr, flags) /* * Search through the file handlers to find the one whose handle matches - * the event. We do this rather than keeping a pointer to the file - * handler directly in the event, so that the handler can be deleted - * while the event is queued without leaving a dangling pointer. + * the event. We do this rather than keeping a pointer to the file handler + * directly in the event, so that the handler can be deleted while the + * event is queued without leaving a dangling pointer. */ tsdPtr = TCL_TSD_INIT(&dataKey); @@ -675,14 +690,14 @@ FileHandlerEventProc(evPtr, flags) /* * The code is tricky for two reasons: - * 1. The file handler's desired events could have changed - * since the time when the event was queued, so AND the - * ready mask with the desired mask. - * 2. The file could have been closed and re-opened since - * the time when the event was queued. This is why the - * ready mask is stored in the file handler rather than - * the queued event: it will be zeroed when a new - * file handler is created for the newly opened file. + * 1. The file handler's desired events could have changed since the + * time when the event was queued, so AND the ready mask with the + * desired mask. + * 2. The file could have been closed and re-opened since the time + * when the event was queued. This is why the ready mask is stored + * in the file handler rather than the queued event: it will be + * zeroed when a new file handler is created for the newly opened + * file. */ mask = filePtr->readyMask & filePtr->mask; @@ -700,13 +715,12 @@ FileHandlerEventProc(evPtr, flags) * * Tcl_WaitForEvent -- * - * This function is called by Tcl_DoOneEvent to wait for new - * events on the message queue. If the block time is 0, then - * Tcl_WaitForEvent just polls without blocking. + * This function is called by Tcl_DoOneEvent to wait for new events on + * the message queue. If the block time is 0, then Tcl_WaitForEvent just + * polls without blocking. * * Results: - * Returns -1 if the select would block forever, otherwise - * returns 0. + * Returns -1 if the select would block forever, otherwise returns 0. * * Side effects: * Queues file events that are detected by the select. @@ -739,10 +753,10 @@ Tcl_WaitForEvent(timePtr) if (timePtr != NULL && timePtr->sec == 0 && timePtr->usec == 0) { /* * Cannot emulate a polling select with a polling condition variable. - * Instead, pretend to wait for files and tell the notifier - * thread what we are doing. The notifier thread makes sure - * it goes through select with its select mask in the same state - * as ours currently is. We block until that happens. + * Instead, pretend to wait for files and tell the notifier thread + * what we are doing. The notifier thread makes sure it goes through + * select with its select mask in the same state as ours currently is. + * We block until that happens. */ waitForFiles = 1; @@ -754,9 +768,9 @@ Tcl_WaitForEvent(timePtr) if (waitForFiles) { /* - * Add the ThreadSpecificData structure of this thread to the list - * of ThreadSpecificData structures of all threads that are waiting - * on file events. + * Add the ThreadSpecificData structure of this thread to the list of + * ThreadSpecificData structures of all threads that are waiting on + * file events. */ tsdPtr->nextPtr = waitingListPtr; @@ -775,23 +789,23 @@ Tcl_WaitForEvent(timePtr) FD_ZERO(&(tsdPtr->readyMasks.exceptional)); if (!tsdPtr->eventReady) { - CFTimeInterval waitTime; - - if (timePtr == NULL) { - waitTime = 1.0e10; /* Wait forever, as per CFRunLoop.c */ - } else { - waitTime = timePtr->sec + 1.0e-6 * timePtr->usec; - } - UNLOCK_NOTIFIER; - CFRunLoopRunInMode(kCFRunLoopDefaultMode, waitTime, TRUE); - LOCK_NOTIFIER; + CFTimeInterval waitTime; + + if (timePtr == NULL) { + waitTime = 1.0e10; /* Wait forever, as per CFRunLoop.c */ + } else { + waitTime = timePtr->sec + 1.0e-6 * timePtr->usec; + } + UNLOCK_NOTIFIER; + CFRunLoopRunInMode(kCFRunLoopDefaultMode, waitTime, TRUE); + LOCK_NOTIFIER; } tsdPtr->eventReady = 0; if (waitForFiles && tsdPtr->onList) { /* * Remove the ThreadSpecificData structure of this thread from the - * waiting list. Alert the notifier thread to recompute its select + * waiting list. Alert the notifier thread to recompute its select * masks - skipping this caused a hang when trying to close a pipe * which the notifier thread was still doing a select on. */ @@ -809,7 +823,6 @@ Tcl_WaitForEvent(timePtr) write(triggerPipe, "", 1); } - /* * Queue all detected file events before returning. */ @@ -833,8 +846,8 @@ Tcl_WaitForEvent(timePtr) } /* - * Don't bother to queue an event if the mask was previously - * non-zero since an event must still be on the queue. + * Don't bother to queue an event if the mask was previously non-zero + * since an event must still be on the queue. */ if (filePtr->readyMask == 0) { @@ -855,21 +868,20 @@ Tcl_WaitForEvent(timePtr) * NotifierThreadProc -- * * This routine is the initial (and only) function executed by the - * special notifier thread. Its job is to wait for file descriptors - * to become readable or writable or to have an exception condition - * and then to notify other threads who are interested in this - * information by signalling a condition variable. Other threads - * can signal this notifier thread of a change in their interests - * by writing a single byte to a special pipe that the notifier - * thread is monitoring. + * special notifier thread. Its job is to wait for file descriptors to + * become readable or writable or to have an exception condition and then + * to notify other threads who are interested in this information by + * signalling a condition variable. Other threads can signal this + * notifier thread of a change in their interests by writing a single + * byte to a special pipe that the notifier thread is monitoring. * * Result: - * None. Once started, this routine never exits. It dies with - * the overall process. + * None. Once started, this routine never exits. It dies with the overall + * process. * * Side effects: - * The trigger pipe used to signal the notifier thread is created - * when the notifier thread first starts. + * The trigger pipe used to signal the notifier thread is created when + * the notifier thread first starts. * *---------------------------------------------------------------------- */ @@ -897,8 +909,8 @@ NotifierThreadProc(clientData) FD_ZERO(&exceptionalMask); /* - * Compute the logical OR of the select masks from all the - * waiting notifiers. + * Compute the logical OR of the select masks from all the waiting + * notifiers. */ LOCK_NOTIFIER; @@ -920,8 +932,8 @@ NotifierThreadProc(clientData) } if (tsdPtr->pollState & POLL_WANT) { /* - * Here we make sure we go through select() with the same - * mask bits that were present when the thread tried to poll. + * Here we make sure we go through select() with the same mask + * bits that were present when the thread tried to poll. */ tsdPtr->pollState |= POLL_DONE; @@ -978,10 +990,10 @@ NotifierThreadProc(clientData) tsdPtr->eventReady = 1; if (tsdPtr->onList) { /* - * Remove the ThreadSpecificData structure of this - * thread from the waiting list. This prevents us from - * continuously spining on select until the other - * threads runs and services the file event. + * Remove the ThreadSpecificData structure of this thread + * from the waiting list. This prevents us from + * continuously spining on select until the other threads + * runs and services the file event. */ if (tsdPtr->prevPtr) { @@ -1006,8 +1018,8 @@ NotifierThreadProc(clientData) /* * Consume the next byte from the notifier pipe if the pipe was - * readable. Note that there may be multiple bytes pending, but - * to avoid a race condition we only read one at a time. + * readable. Note that there may be multiple bytes pending, but to + * avoid a race condition we only read one at a time. */ if (FD_ISSET(receivePipe, &readableMask)) { @@ -1015,9 +1027,9 @@ NotifierThreadProc(clientData) if ((i == 0) || ((i == 1) && (buf[0] == 'q'))) { /* - * Someone closed the write end of the pipe or sent us a - * Quit message [Bug: 4139] and then closed the write end - * of the pipe so we need to shut down the notifier thread. + * Someone closed the write end of the pipe or sent us a Quit + * message [Bug: 4139] and then closed the write end of the + * pipe so we need to shut down the notifier thread. */ break; @@ -1026,5 +1038,4 @@ NotifierThreadProc(clientData) } pthread_exit (0); } - #endif /* HAVE_COREFOUNDATION */ |