diff --git a/Makefile.am b/Makefile.am index 8df03fd9..f5d800b3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -8,3 +8,4 @@ SUBDIRS = libsrc ng tutorials doc windows nglib + diff --git a/configure.ac b/configure.ac index 7aa25f86..72542762 100644 --- a/configure.ac +++ b/configure.ac @@ -239,14 +239,15 @@ AM_CONDITIONAL([NGPYTHON], [test x$pythonon = xtrue]) # echo "libs = $LIBS" # echo "TOGL_LIB = $MYTOGL_LIB" +AC_CONFIG_SUBDIRS([ng/Togl-1.7]) AC_CONFIG_FILES(Makefile libsrc/Makefile libsrc/csg/Makefile libsrc/general/Makefile libsrc/geom2d/Makefile libsrc/gprim/Makefile libsrc/include/Makefile libsrc/interface/Makefile libsrc/linalg/Makefile libsrc/meshing/Makefile libsrc/occ/Makefile - libsrc/stlgeom/Makefile - libsrc/visualization/Makefile ng/Makefile nglib/Makefile - tutorials/Makefile doc/Makefile windows/Makefile ) +libsrc/stlgeom/Makefile +libsrc/visualization/Makefile ng/Makefile nglib/Makefile +tutorials/Makefile doc/Makefile windows/Makefile ) AC_OUTPUT diff --git a/ng/Makefile.am b/ng/Makefile.am index c771a144..913e681f 100644 --- a/ng/Makefile.am +++ b/ng/Makefile.am @@ -2,6 +2,7 @@ include_HEADERS = AM_CPPFLAGS = -I$(top_srcdir)/libsrc/include -I$(top_srcdir)/libsrc/interface -DOPENGL -D$(TOGL_WINDOWINGSYSTEM) $(TCL_INCLUDES) $(MPI_INCLUDES) $(FFMPEG_INCLUDES) $(JPEGLIB_INCLUDES) +SUBDIRS = Togl-1.7 if NGGUI bin_PROGRAMS = netgen diff --git a/ng/Togl-1.7/.indent.pro b/ng/Togl-1.7/.indent.pro new file mode 100644 index 00000000..365338e4 --- /dev/null +++ b/ng/Togl-1.7/.indent.pro @@ -0,0 +1,72 @@ +--blank-before-sizeof +--blank-lines-after-declarations +--blank-lines-after-procedures +--blank-lines-before-block-comments +--braces-after-struct-decl-line +--braces-on-if-line +--break-before-boolean-operator +--case-brace-indentation0 +--case-indentation2 +--comment-line-length80 +--continuation-indentation8 +--cuddle-do-while +--cuddle-else +--declaration-indentation8 +--dont-line-up-parentheses +--format-all-comments +--format-first-column-comments +--indent-level4 +--leave-optional-blank-lines +--line-length80 +--no-space-after-function-call-names +--no-space-after-parentheses +--no-tabs +--parameter-indentation8 +--preprocessor-indentation2 +--procnames-start-lines +--space-after-cast +--space-after-for +--space-after-if +--space-after-while +--space-special-semicolon +--start-left-side-of-comments +--struct-brace-indentation0 +--tab-size8 +-T AGLContext +-T CALLBACK +-T ClientData +-T Colormap +-T Display +-T GLXContext +-T GLbitfield +-T GLboolean +-T GLenum +-T GLfloat +-T GLint +-T GLuint +-T HDC +-T HGLRC +-T HWND +-T LPARAM +-T PIXELFORMATDESCRIPTOR +-T Tcl_Command +-T Tcl_Interp +-T TkClassCreateProc +-T TkClassGeometryProc +-T TkClassModalProc +-T TkClassProcs +-T TkWinColormap +-T Tk_ConfigSpec +-T Tk_Cursor +-T Tk_Window +-T Togl_Callback +-T Togl_CmdProc +-T UINT +-T WPARAM +-T WinFont +-T Window +-T XColor +-T XEvent +-T XVisualInfo +-T TOGL_EXTERN +-T Togl diff --git a/ng/Togl-1.7/LICENSE b/ng/Togl-1.7/LICENSE new file mode 100644 index 00000000..e9badb74 --- /dev/null +++ b/ng/Togl-1.7/LICENSE @@ -0,0 +1,27 @@ +This software is copyrighted by Brian Paul (brian@mesa3d.org) +and Benjamin Bederson (bederson@cs.umd.edu). The following +terms apply to all files associated with the software unless explicitly +disclaimed in individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. diff --git a/ng/Togl-1.7/Makefile.in b/ng/Togl-1.7/Makefile.in new file mode 100644 index 00000000..5c9d99de --- /dev/null +++ b/ng/Togl-1.7/Makefile.in @@ -0,0 +1,471 @@ +# Makefile.in -- +# +# This file is a Makefile for Sample TEA Extension. If it has the name +# "Makefile.in" then it is a template for a Makefile; to generate the +# actual Makefile, run "./configure", which is a configuration script +# generated by the "autoconf" program (constructs like "@foo@" will get +# replaced in the actual Makefile. +# +# Copyright (c) 1999 Scriptics Corporation. +# Copyright (c) 2002-2005 ActiveState Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# +# RCS: @(#) $Id: Makefile.in,v 1.7 2006/01/06 00:09:00 gregcouch Exp $ + +#======================================================================== +# Add additional lines to handle any additional AC_SUBST cases that +# have been added in a customized configure script. +#======================================================================== + +#SAMPLE_NEW_VAR = @SAMPLE_NEW_VAR@ +SHLIB_SUFFIX = @SHLIB_SUFFIX@ +MATH_LIBS = @MATH_LIBS@ +LIBGLU = @LIBGLU@ + +DEMO_SRCS = double.c gears.c index.c overlay.c stereo.c texture.c +DEMO_OBJS = $(DEMO_SRCS:.c=.$(OBJEXT)) +DEMO_SHLIBS = $(DEMO_SRCS:.c=$(SHLIB_SUFFIX)) + +#======================================================================== +# Nothing of the variables below this line should need to be changed. +# Please check the TARGETS section below to make sure the make targets +# are correct. +#======================================================================== + +#======================================================================== +# The names of the source files is defined in the configure script. +# The object files are used for linking into the final library. +# This will be used when a dist target is added to the Makefile. +# It is not important to specify the directory, as long as it is the +# $(srcdir) or in the generic, win or unix subdirectory. +#======================================================================== + +PKG_SOURCES = @PKG_SOURCES@ +PKG_OBJECTS = @PKG_OBJECTS@ + +PKG_STUB_SOURCES = @PKG_STUB_SOURCES@ +PKG_STUB_OBJECTS = @PKG_STUB_OBJECTS@ + +#======================================================================== +# PKG_TCL_SOURCES identifies Tcl runtime files that are associated with +# this package that need to be installed, if any. +#======================================================================== + +PKG_TCL_SOURCES = @PKG_TCL_SOURCES@ + +#======================================================================== +# This is a list of public header files to be installed, if any. +#======================================================================== + +PKG_HEADERS = @PKG_HEADERS@ togl_ws.h + +#======================================================================== +# "PKG_LIB_FILE" refers to the library (dynamic or static as per +# configuration options) composed of the named objects. +#======================================================================== + +PKG_LIB_FILE = @PKG_LIB_FILE@ +PKG_STUB_LIB_FILE = @PKG_STUB_LIB_FILE@ + +lib_BINARIES = $(PKG_LIB_FILE) +BINARIES = $(lib_BINARIES) + +SHELL = @SHELL@ + +srcdir = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +libdir = @libdir@ +datadir = @datadir@ +mandir = @mandir@ +includedir = @includedir@ + +DESTDIR = + +PKG_DIR = $(PACKAGE_NAME)$(PACKAGE_VERSION) +pkgdatadir = $(datadir)/$(PKG_DIR) +pkglibdir = $(libdir)/$(PKG_DIR) +pkgincludedir = $(includedir)/$(PKG_DIR) + +top_builddir = . + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ + +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +CC = @CC@ +CFLAGS_DEFAULT = @CFLAGS_DEFAULT@ +CFLAGS_WARNING = @CFLAGS_WARNING@ +CLEANFILES = @CLEANFILES@ $(DEMO_OBJS) $(DEMO_SHLIBS) +EXEEXT = @EXEEXT@ +LDFLAGS_DEFAULT = @LDFLAGS_DEFAULT@ +MAKE_LIB = @MAKE_LIB@ +MAKE_SHARED_LIB = @MAKE_SHARED_LIB@ +MAKE_STATIC_LIB = @MAKE_STATIC_LIB@ +MAKE_STUB_LIB = @MAKE_STUB_LIB@ +OBJEXT = @OBJEXT@ +RANLIB = @RANLIB@ +RANLIB_STUB = @RANLIB_STUB@ +SHLIB_CFLAGS = @SHLIB_CFLAGS@ +SHLIB_LD = @SHLIB_LD@ +SHLIB_LD_LIBS = @SHLIB_LD_LIBS@ +STLIB_LD = @STLIB_LD@ +#TCL_DEFS = @TCL_DEFS@ +TCL_BIN_DIR = @TCL_BIN_DIR@ +TCL_SRC_DIR = @TCL_SRC_DIR@ +#TK_BIN_DIR = @TK_BIN_DIR@ +#TK_SRC_DIR = @TK_SRC_DIR@ + +# Not used, but retained for reference of what libs Tcl required +#TCL_LIBS = @TCL_LIBS@ + +#======================================================================== +# TCLLIBPATH seeds the auto_path in Tcl's init.tcl so we can test our +# package without installing. The other environment variables allow us +# to test against an uninstalled Tcl. Add special env vars that you +# require for testing here (like TCLX_LIBRARY). +#======================================================================== + +#EXTRA_PATH = $(top_builddir):$(TCL_BIN_DIR) +EXTRA_PATH = $(top_builddir):$(TCL_BIN_DIR):$(TK_BIN_DIR) +TCLLIBPATH = $(top_builddir) +TCLSH_ENV = TCL_LIBRARY=`@CYGPATH@ $(TCL_SRC_DIR)/library` \ + @LD_LIBRARY_PATH_VAR@="$(EXTRA_PATH):$(@LD_LIBRARY_PATH_VAR@)" \ + PATH="$(EXTRA_PATH):$(PATH)" \ + TCLLIBPATH="$(TCLLIBPATH)" +# TK_LIBRARY=`@CYGPATH@ $(TK_SRC_DIR)/library` + +TCLSH_PROG = @TCLSH_PROG@ +TCLSH = $(TCLSH_ENV) $(TCLSH_PROG) + +WISH_PROG = @WISH_PROG@ +WISH = $(TCLSH_ENV) $(WISH_PROG) + + +SHARED_BUILD = @SHARED_BUILD@ + +#INCLUDES = @PKG_INCLUDES@ @TCL_INCLUDES@ +INCLUDES = @PKG_INCLUDES@ @TCL_INCLUDES@ @TK_INCLUDES@ @TK_XINCLUDES@ + +PKG_CFLAGS = @PKG_CFLAGS@ + +# TCL_DEFS is not strictly need here, but if you remove it, then you +# must make sure that configure.in checks for the necessary components +# that your library may use. TCL_DEFS can actually be a problem if +# you do not compile with a similar machine setup as the Tcl core was +# compiled with. +#DEFS = $(TCL_DEFS) @DEFS@ $(PKG_CFLAGS) +DEFS = @DEFS@ $(PKG_CFLAGS) + +CONFIG_CLEAN_FILES = Makefile + +CPPFLAGS = @CPPFLAGS@ +LIBS = @PKG_LIBS@ @LIBS@ +AR = @AR@ +CFLAGS = @CFLAGS@ +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) + +#======================================================================== +# Start of user-definable TARGETS section +#======================================================================== + +#======================================================================== +# TEA TARGETS. Please note that the "libraries:" target refers to platform +# independent files, and the "binaries:" target inclues executable programs and +# platform-dependent libraries. Modify these targets so that they install +# the various pieces of your package. The make and install rules +# for the BINARIES that you specified above have already been done. +#======================================================================== + +all: binaries libraries doc + +#======================================================================== +# The binaries target builds executable programs, Windows .dll's, unix +# shared/static libraries, and any other platform-dependent files. +# The list of targets to build for "binaries:" is specified at the top +# of the Makefile, in the "BINARIES" variable. +#======================================================================== + +binaries: $(BINARIES) + +libraries: + + +#======================================================================== +# Demo section. These are binaries because we don't want to install them. +# And they're not tests because we currently have no automatic way to see +# if they work. +#======================================================================== + +demos: $(DEMO_SHLIBS) + +double$(SHLIB_SUFFIX): double.$(OBJEXT) togl.$(OBJEXT) + $(SHLIB_LD) -o $@ double.$(OBJEXT) togl.$(OBJEXT) $(SHLIB_LD_LIBS) + +gears$(SHLIB_SUFFIX): gears.$(OBJEXT) togl.$(OBJEXT) + $(SHLIB_LD) -o $@ gears.$(OBJEXT) togl.$(OBJEXT) $(SHLIB_LD_LIBS) $(MATH_LIBS) + +index$(SHLIB_SUFFIX): index.$(OBJEXT) togl.$(OBJEXT) + $(SHLIB_LD) -o $@ index.$(OBJEXT) togl.$(OBJEXT) $(SHLIB_LD_LIBS) + +overlay$(SHLIB_SUFFIX): overlay.$(OBJEXT) togl.$(OBJEXT) + $(SHLIB_LD) -o $@ overlay.$(OBJEXT) togl.$(OBJEXT) $(SHLIB_LD_LIBS) + +stereo$(SHLIB_SUFFIX): stereo.$(OBJEXT) togl.$(OBJEXT) + $(SHLIB_LD) -o $@ stereo.$(OBJEXT) togl.$(OBJEXT) $(SHLIB_LD_LIBS) + +texture$(SHLIB_SUFFIX): texture.$(OBJEXT) image.$(OBJEXT) togl.$(OBJEXT) + $(SHLIB_LD) -o $@ texture.$(OBJEXT) image.$(OBJEXT) \ + togl.$(OBJEXT) $(LIBGLU) $(SHLIB_LD_LIBS) + +#======================================================================== +# Your doc target should differentiate from doc builds (by the developer) +# and doc installs (see install-doc), which just install the docs on the +# end user machine when building from source. +#======================================================================== + +doc: +# @echo "If you have documentation to create, place the commands to" +# @echo "build the docs in the 'doc:' target. For example:" +# @echo " xml2nroff sample.xml > sample.n" +# @echo " xml2html sample.xml > sample.html" + +install: all install-binaries install-libraries install-doc + +install-binaries: binaries install-lib-binaries install-bin-binaries + +#======================================================================== +# This rule installs platform-independent files, such as header files. +# The list=...; for p in $$list handles the empty list case x-platform. +#======================================================================== + +install-libraries: libraries + @mkdir -p $(DESTDIR)$(includedir) + @echo "Installing header files in $(DESTDIR)$(includedir)" + @list='$(PKG_HEADERS)'; for i in $$list; do \ + echo "Installing $(srcdir)/$$i" ; \ + $(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(includedir) ; \ + done; + +#======================================================================== +# Install documentation. Unix manpages should go in the $(mandir) +# directory. +#======================================================================== + +install-doc: doc +# @mkdir -p $(DESTDIR)$(mandir)/mann +# @echo "Installing documentation in $(DESTDIR)$(mandir)" +# @list='$(srcdir)/doc/*.n'; for i in $$list; do \ +# echo "Installing $$i"; \ +# rm -f $(DESTDIR)$(mandir)/mann/`basename $$i`; \ +# $(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/mann ; \ +# done + +test: binaries libraries + $(TCLSH) `@CYGPATH@ $(srcdir)/tests/all.tcl` $(TESTFLAGS) + +shell: binaries libraries + @$(TCLSH) $(SCRIPT) + +gdb: + $(TCLSH_ENV) gdb $(TCLSH_PROG) $(SCRIPT) + +depend: + +#======================================================================== +# $(PKG_LIB_FILE) should be listed as part of the BINARIES variable +# mentioned above. That will ensure that this target is built when you +# run "make binaries". +# +# The $(PKG_OBJECTS) objects are created and linked into the final +# library. In most cases these object files will correspond to the +# source files above. +#======================================================================== + +$(PKG_LIB_FILE): $(PKG_OBJECTS) + -rm -f $(PKG_LIB_FILE) + ${MAKE_LIB} + $(RANLIB) $(PKG_LIB_FILE) + +$(PKG_STUB_LIB_FILE): $(PKG_STUB_OBJECTS) + -rm -f $(PKG_STUB_LIB_FILE) + ${MAKE_STUB_LIB} + $(RANLIB_STUB) $(PKG_STUB_LIB_FILE) + +#======================================================================== +# We need to enumerate the list of .c to .o lines here. +# +# In the following lines, $(srcdir) refers to the toplevel directory +# containing your extension. If your sources are in a subdirectory, +# you will have to modify the paths to reflect this: +# +# sample.$(OBJEXT): $(srcdir)/generic/sample.c +# $(COMPILE) -c `@CYGPATH@ $(srcdir)/generic/sample.c` -o $@ +# +# Setting the VPATH variable to a list of paths will cause the makefile +# to look into these paths when resolving .c to .obj dependencies. +# As necessary, add $(srcdir):$(srcdir)/compat:.... +#======================================================================== + +VPATH = $(srcdir):$(srcdir)/generic:$(srcdir)/unix:$(srcdir)/win + +.c.@OBJEXT@: + $(COMPILE) -c `@CYGPATH@ $<` -o $@ + +#======================================================================== +# Distribution creation +# You may need to tweak this target to make it work correctly. +#======================================================================== + +#COMPRESS = tar cvf $(PKG_DIR).tar $(PKG_DIR); compress $(PKG_DIR).tar +COMPRESS = gtar zcvf $(PKG_DIR).tar.gz $(PKG_DIR) +DIST_ROOT = /tmp/dist +DIST_DIR = $(DIST_ROOT)/$(PKG_DIR) + +dist-clean: + rm -rf $(DIST_DIR) $(DIST_ROOT)/$(PKG_DIR).tar.* + +dist: dist-clean + mkdir -p $(DIST_DIR) + cp -p $(srcdir)/ChangeLog $(srcdir)/README* $(srcdir)/license* \ + $(srcdir)/aclocal.m4 $(srcdir)/configure $(srcdir)/*.in \ + $(DIST_DIR)/ + chmod 664 $(DIST_DIR)/Makefile.in $(DIST_DIR)/aclocal.m4 + chmod 775 $(DIST_DIR)/configure $(DIST_DIR)/configure.in + + for i in $(srcdir)/*.[ch]; do \ + if [ -f $$i ]; then \ + cp -p $$i $(DIST_DIR)/ ; \ + fi; \ + done; + + mkdir $(DIST_DIR)/tclconfig + cp $(srcdir)/tclconfig/install-sh $(srcdir)/tclconfig/tcl.m4 \ + $(DIST_DIR)/tclconfig/ + chmod 664 $(DIST_DIR)/tclconfig/tcl.m4 + chmod +x $(DIST_DIR)/tclconfig/install-sh + + list='demos doc generic library mac tests unix win'; \ + for p in $$list; do \ + if test -d $(srcdir)/$$p ; then \ + mkdir $(DIST_DIR)/$$p; \ + cp -p $(srcdir)/$$p/*.* $(DIST_DIR)/$$p/; \ + fi; \ + done + + (cd $(DIST_ROOT); $(COMPRESS);) + +#======================================================================== +# End of user-definable section +#======================================================================== + +#======================================================================== +# Don't modify the file to clean here. Instead, set the "CLEANFILES" +# variable in configure.in +#======================================================================== + +clean: + -test -z "$(BINARIES)" || rm -f $(BINARIES) + -rm -f *.$(OBJEXT) core *.core + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean: clean + -rm -f *.tab.c + -rm -f $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log config.status + +#======================================================================== +# Install binary object libraries. On Windows this includes both .dll and +# .lib files. Because the .lib files are not explicitly listed anywhere, +# we need to deduce their existence from the .dll file of the same name. +# Library files go into the lib directory. +# In addition, this will generate the pkgIndex.tcl +# file in the install location (assuming it can find a usable tclsh shell) +# +# You should not have to modify this target. +#======================================================================== + +install-lib-binaries: binaries + @mkdir -p $(DESTDIR)$(pkglibdir) + @list='$(lib_BINARIES)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(pkglibdir)/$$p"; \ + $(INSTALL_PROGRAM) $$p $(DESTDIR)$(pkglibdir)/$$p; \ + stub=`echo $$p|sed -e "s/.*\(stub\).*/\1/"`; \ + if test "x$$stub" = "xstub"; then \ + echo " $(RANLIB_STUB) $(DESTDIR)$(pkglibdir)/$$p"; \ + $(RANLIB_STUB) $(DESTDIR)$(pkglibdir)/$$p; \ + else \ + echo " $(RANLIB) $(DESTDIR)$(pkglibdir)/$$p"; \ + $(RANLIB) $(DESTDIR)$(pkglibdir)/$$p; \ + fi; \ + ext=`echo $$p|sed -e "s/.*\.//"`; \ + if test "x$$ext" = "xdll"; then \ + lib=`basename $$p|sed -e 's/.[^.]*$$//'`.lib; \ + if test -f $$lib; then \ + echo " $(INSTALL_DATA) $$lib $(DESTDIR)$(pkglibdir)/$$lib"; \ + $(INSTALL_DATA) $$lib $(DESTDIR)$(pkglibdir)/$$lib; \ + fi; \ + fi; \ + fi; \ + done + @list='$(PKG_TCL_SOURCES)'; for p in $$list; do \ + if test -f $(srcdir)/$$p; then \ + destp=`basename $$p`; \ + echo " Install $$destp $(DESTDIR)$(pkglibdir)/$$destp"; \ + $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkglibdir)/$$destp; \ + fi; \ + done + @if test "x$(SHARED_BUILD)" = "x1"; then \ + echo " Install pkgIndex.tcl $(DESTDIR)$(pkglibdir)"; \ + $(INSTALL_DATA) pkgIndex.tcl $(DESTDIR)$(pkglibdir); \ + fi + +#======================================================================== +# Install binary executables (e.g. .exe files and dependent .dll files) +# This is for files that must go in the bin directory (located next to +# wish and tclsh), like dependent .dll files on Windows. +# +# You should not have to modify this target, except to define bin_BINARIES +# above if necessary. +#======================================================================== + +install-bin-binaries: binaries + @mkdir -p $(DESTDIR)$(bindir) + @list='$(bin_BINARIES)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p"; \ + $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p; \ + fi; \ + done + +.SUFFIXES: .c .$(OBJEXT) + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status + +uninstall-binaries: + list='$(lib_BINARIES)'; for p in $$list; do \ + rm -f $(DESTDIR)$(pkglibdir)/$$p; \ + done + list='$(PKG_TCL_SOURCES)'; for p in $$list; do \ + p=`basename $$p`; \ + rm -f $(DESTDIR)$(pkglibdir)/$$p; \ + done + list='$(bin_BINARIES)'; for p in $$list; do \ + rm -f $(DESTDIR)$(bindir)/$$p; \ + done + +.PHONY: all binaries clean depend distclean doc install libraries test + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/ng/Togl-1.7/README.stubs b/ng/Togl-1.7/README.stubs new file mode 100644 index 00000000..2950a981 --- /dev/null +++ b/ng/Togl-1.7/README.stubs @@ -0,0 +1,21 @@ +This version of Togl is entirely free from +dependencies on Tcl/Tk's internal functions. It uses the public stubs +interface, witch means that the same binary works with any stubs-aware +wish (i.e. version >= 8.1) + +It has been tested on Windows NT/2000 and Linux for several Tcl/Tk versions up +to 8.4a3. I haven't been able to test the Mac port, it propably needs mending +but I can't see why it shouldn't work in principle. + +Implementation wise, what differs from Togl 1.5 is that Togl_MakeWindowExist() +is replaced by Togl_CreateWindow(), a function that gets registered in Tk as a callback for window creation. In Tk/Tk 8.4a3, there is a new public API call +Tk_SetClassProcs() to register this callback, but for earlier versions of Tk +one needs to do this using some pointer magic. +There is a run-time check to determine which method to use, hence the +same binary runs on all versions of Wish from 8.1 and up. For this to +work you need to compile against the headers from Tcl/Tk 8.4a3 or later, or +the binary will only work for Tcl/Tk 8.1-8.4a2. +The tk8.4a3 public headers (tk8.4a3.h + tkDecls.h) are included for +conveniance, and they are used if the flag -DUSE_LOCAL_TK_H is specified. + +Jonas Beskow, December 2001 \ No newline at end of file diff --git a/ng/Togl-1.7/TODO b/ng/Togl-1.7/TODO new file mode 100644 index 00000000..26c734d6 --- /dev/null +++ b/ng/Togl-1.7/TODO @@ -0,0 +1,20 @@ +In no particular order: +----------------------- + +stubify C API. + +replace EPS support with TK photo image support + +Add command arguments for create, destroy, etc. so there would be a +-createcommand option to the togl command (etc.) (and phase out +Togl_*Func from the C API) + +multisampling support (can be worked-around by passing in a pixelformat) + +add vertical sync control + +update documention + - update build instructions + - update stereo documentation + - separate Tcl API from C API + - say togl hides window system dependent (glX/wgl/agl) calls diff --git a/ng/Togl-1.7/Togl.html b/ng/Togl-1.7/Togl.html new file mode 100644 index 00000000..53de3e58 --- /dev/null +++ b/ng/Togl-1.7/Togl.html @@ -0,0 +1,1081 @@ + + + + + + + Togl + + + + +
+

Togl — a Tk OpenGL widget

+

Copyright (C) 1996-2002 Brian Paul and Ben Bederson

+
+ + +
+

Contents

+ + + + +
+

Introduction

+ + Togl is a Tk widget for OpenGL rendering. + Togl was originally based on OGLTK, written by Benjamin Bederson at + the University of New Mexico. + Togl adds the new features: + + + +

+ Togl allows one to create and manage a special Tk/OpenGL widget + with Tcl and render into it with a C program. That is, + a typical Togl program will have Tcl code for managing the user interface + and a C program for computations and OpenGL rendering. + +

+ Togl is copyrighted by + Brian Paul + (brian_e_paul@yahoo.com) and + Benjamin Bederson + (bederson@cs.umd.edu). + See the LICENSE file for details. + +

+ The + Togl project and + home page are + hosted by SourceForge. + + +
+

Prerequisites

+ +

+ You should have + Tcl and Tk + installed on your computer. Togl works with Tcl/Tk + version 8.0 and up. The Mac OS X version requires version 8.4. + +

+ You must also have + OpenGL or + Mesa + (a free alternative to OpenGL) installed on your computer. + +

+ One should be familiar with Tcl, Tk, OpenGL, and C programming to use Togl + effectively. + + +
+

Getting Togl

+ +

+ The current version of Togl is 1.7. + Togl can be downloaded from + + SourceForge. + + +
+

Mailing list

+ +

+ See the + Togl project at SourceForge for mailing list information. + + +
+

Using Togl With Your Application

+ +

+ There are basically two ways of using Togl with your application: +

+ Since Togl is compiled into a shared library using the Tcl/Tk stubs-interface, + the same binary can be used with any version of Tck/Tk from 8.06 and up. + See README.stubs for more info. + +

Unix/X11 usage

+ +

+ Unix/X systems only need the togl.c, togl.h + and the public Tcl/Tk include files. + +

Windows 95/NT/2000/XP usage

+ +

+ Windows platforms need tkWinInt.h + and other internal Tk header files. So you need a Tcl/Tk + source distribution in addition to the Togl distribution + (or copy over the various include files). +

+ Here's the minimal way to build Togl with Tcl/Tk + using the gcc that is distributed + as part of the cygwin tools + (Microsoft's compilers work too): +

+VER=8.4.12
+SRCDIR=`pwd`
+
+cd $SRCDIR/tcl$VER/win
+env 'CC=gcc -mno-cygwin' ./configure --enable-threads
+make libtclstub84.a
+
+cd $SRCDIR/tk$VER/win
+env 'CC=gcc -mno-cygwin' ./configure --enable-threads
+make libtkstub84.a
+
+cd $SRCDIR/Togl
+env 'CC=gcc -mno-cygwin' ./configure --with-tcl=../tcl$VER/win --with-tk=../tk$VER/win
+
+make
+
+ The resulting Togl17.dll and pkgIndex.tcl + should be installed into your Tcl distribution just like any other package. + +

Mac OS X usage

+ +

+ These special instructions are for building the Aqua version of Togl. + Mac OS X needs tkMacOSXInt.h + and other internal Tk header files. Unfortunately, the Tcl and Tk + frameworks that Apple distributes are missing the internal headers. + So you need a Tcl/Tk source distribution in addition to the Togl + distribution (or copy over the various include files). + You would probably want a newer version of Tcl and Tk anyway + because each minor revision of 8.4 has many Aqua bug fixes. +

+ Here's one way to build Tcl, Tk, and Togl on Mac OS X (assuming they + are all in the same directory) to install in your home directory: +

+VER=8.4.12
+
+mkdir -p ~/bin
+make -C tcl$VER/macosx install PREFIX="${HOME}" INSTALL_PATH="${HOME}/Library/Frameworks"
+make -C tk$VER/macosx install PREFIX="${HOME}" INSTALL_PATH="${HOME}/Library/Frameworks"
+
+(cd Togl; ./configure --prefix="${HOME}")
+make -C Togl install
+
+ + +
+

C Togl Functions

+ +

+ These are the Togl functions one may call from a C program. + +

+ + #include "togl.h" + +
+ +

+ For portability, you should include the togl.h header + before any other OpenGL header so that various + Windows 95/NT/2000/XP stuff falls into place. + + +

Setup and Initialization Functions

+ +
+
int Togl_Init(Tcl_Interp *interp) +
+ Initializes the Togl module. This is typically called from the + Tk_Main() function + or via Tcl's package require command. +
+ +
+
void Togl_CreateFunc(Togl_Callback *proc) +
+ void Togl_DisplayFunc(Togl_Callback *proc) +
+ void Togl_ReshapeFunc(Togl_Callback *proc) +
+ void Togl_DestroyFunc(Togl_Callback *proc) +
+
+ Register C functions to be called by Tcl/Tk when a widget is realized, + must be redrawn, is resized, or is destroyed respectively. +

+ Each C callback must be of the form: +

+	void callback(Togl *togl)
+	{
+	   ...your code...
+	}
+
+
+ +
+
void Togl_TimerFunc(Togl_Callback *proc) +
+ Register a C timer callback function which will be called every + n milliseconds. The interval n is specified + by the -time option to the Togl Tcl command. +

+ The C callback must be of the form: +

+	void my_timer_callback(Togl *togl)
+	{
+	   ...your code...
+	}
+
+
+ +
+
void Togl_ResetDefaultCallbacks(void) +
+ Reset all default callback pointers to NULL. +
+ +
+
void Togl_CreateCommand(char *cmd_name, Togl_CmdProc *cmd_proc) +
+ Used to create a new Togl sub-command. The C function which implements + the command must be of the form: +

+

+	int callback(Togl *togl, int argc, char *argv[])
+	{
+	   ...your code...
+	   return TCL_OK or TCL_ERROR;
+	}
+
+
+ +

Drawing-related Commands

+ +
+
void Togl_PostRedisplay(Togl *togl) +
+ Signals that the widget should be redrawn. When Tk is next idle the + user's C render callback will be invoked. This is typically called + from within a Togl sub-command which was registered with + Togl_CreateCommand(). +
+ +
+
void Togl_SwapBuffers(const Togl *togl) +
+ Swaps the front and back color buffers for a double-buffered widget. + glFlush() is executed if the window is single-buffered. This is + typically called in the rendering function which was registered with + Togl_DisplayFunc(). +
+ +
+
void Togl_MakeCurrent(const Togl *togl) +
+ Sets the current rendering context to the given widget. This is done + automatically before the Togl callback functions are called. So the + call is only needed if you have multiple widgets with separate OpenGL + contexts. If the argument is NULL, then the rendering context is cleared + and subsequent OpenGL commands will fail. +
+ +

Query Functions

+ +
+
char *Togl_Ident(const Togl *togl) +
+ Returns a pointer to the identification string associated with a Togl + widget or NULL if there's no identifier string. +
+ +
+
int Togl_Width(const Togl *togl) +
+ Returns the width of the given Togl widget. Typically called in the + function registered with Togl_ReshapeFunc(). +
+ +
+
int Togl_Height(const Togl *togl) +
+ Returns the height of the given Togl widget. Typically called in the + function registered with Togl_ReshapeFunc(). +
+ +
+
Tcl_Interp *Togl_Interp(const Togl *togl) +
+ Returns the Tcl interpreter associated with the given Togl widget. +
+
+
+ Tk_Window Togl_TkWin(const Togl *togl) +
+ Returns the Tk window associated with the given Togl widget. +
+ +

Color Index Mode Functions

+ +

+ These functions are only used for color index mode. + +

+
unsigned long Togl_AllocColor(Togl *togl, float red, float green, float blue) +
+ Allocate a color from a read-only colormap. Given a color specified + by red, green, and blue return a colormap index (aka pixel value) + whose entry most closely matches the red, green, blue color. Red, + green, and blue are values in [0,1]. This function is only used in + color index mode when the -privatecmap option is false. +
+ +
+
void Togl_FreeColor(Togl *togl, unsigned long index) +
+ Free a color in a read-only colormap. Index is a value which was + returned by the Togl_AllocColor() function. This function is only + used in color index mode when the -privatecmap option + is false. +
+ +
+
void Togl_SetColor(Togl *togl, + int index, float red, float green, float blue) +
+ Load the colormap entry specified by index with the given red, green + and blue values. Red, green, and blue are values in [0,1]. This + function is only used in color index mode when the + -privatecmap option is true. +
+ + +

Font Functions

+ +
+
GLuint Togl_LoadBitmapFont(Togl *togl, + const char *fontname) +
+ Load the named font as a set of glBitmap display lists. + fontname may be one of + + + Zero is returned if this function fails. +
+ After Togl_LoadBitmapFont() has been called, returning fontbase, + you can render a string s with: +
+ + glListBase(fontbase); +
+ glCallLists(strlen(s), GL_BYTE, s); +
+
+ To maximize the portability of your application it is best to use one + of the predefined TOGL_BITMAP_* fonts. +
+ +
+
void Togl_UnloadBitmapFont(Togl *togl, GLuint fontbase) + +
+ Destroys the bitmap display lists created by by Togl_LoadBitmapFont(). +
+ +

Client Data Functions

+ +
+
void Togl_SetClientData(Togl *togl, ClientData clientData) +
+ clientData is a pointer to an arbitrary user data structure. + Each Togl struct has such a pointer. + This function sets the Togl widget's client data pointer. +
+ +
+
ClientData Togl_GetClientData(const Togl *togl) +
+ clientData is a pointer to an arbitrary user data structure. + Each Togl struct has such a pointer. + This function returns the Togl widget's client data pointer. +
+ +
+
void Togl_ClientData(ClientData clientData) +
+ clientData is a pointer to an arbitrary user data structure. + Set default client data pointer for subsequent new Togl widgets. + Default value is NULL. +
+ + +

Overlay Functions

+ +

+ These functions are modelled after GLUT's overlay sub-API. + +

+
void Togl_UseLayer(Togl *togl, int layer) +
+ Select the layer into which subsequent OpenGL rendering will be + directed. layer may be either TOGL_OVERLAY or + TOGL_NORMAL. +
+ +
+
void Togl_ShowOverlay(Togl *togl) +
+ Display the overlay planes, if any. +
+ +
+
void Togl_HideOverlay(Togl *togl) +
+ Hide the overlay planes, if any. +
+ +
+
void Togl_PostOverlayRedisplay(Togl *togl) +
+ Signal that the overlay planes should be redraw. + When Tk is next idle the user's C overlay display callback will be invoked. + This is typically called from within a Togl sub-command which was + registered with Togl_CreateCommand(). +
+ +
+
void Togl_OverlayDisplayFunc(Togl_Callback *proc) +
+ Registers the C callback function which should be called to redraw the + overlay planes. This is the function which will be called in + response to Togl_PostOverlayRedisplay(). + The callback must be of the form: +

+

+	void RedrawOverlay(Togl *togl)
+	{
+	   ...your code...
+	}
+
+
+ +
+
int Togl_ExistsOverlay(Togl *togl) +
+ Returns 1 if overlay planes exist, 0 otherwise. +
+ +
+
int Togl_GetOverlayTransparentValue(const Togl *togl) +
+ Returns the color index of the overlay's transparent pixel value. +
+ +
+
int Togl_IsMappedOverlay(const Togl *togl) +
+ Returns 1 if the overlay planes are currently displayed, 0 otherwise. +
+ +
+
unsigned long Togl_AllocColorOverlay(const Togl *togl, + float red, float green, float blue) +
+ Allocate a color in the overlay planes. Red, green, and blue are + values in [0,1]. Return the color index or -1 if the allocation + fails. +
+ +
+
void Togl_FreeColorOverlay(const Togl *togl, unsigned long index) +
+ Free a color which was allocated with Togl_AllocColorOverlay(). +
+ + +

X11-only Functions

+ +

+ These functions are only implemented on systems using the X Window System. + We recommend that you avoid using these functions in your application since + they are not portable to other operating/window systems + (use Togl_TkWin() and normal Tk functions instead). +

+ +

+
Display *Togl_Display(const Togl *togl) +
+ Returns the X Display of a Togl widget. +
+ +
+
Screen *Togl_Screen(const Togl *togl) +
+ Returns the X Screen of a Togl widget. +
+ +
+
int Togl_ScreenNumber(const Togl *togl) +
+ Returns the X screen number of a Togl widget. +
+ +
+
Colormap Togl_Colormap(const Togl *togl) +
+ Returns the X Colormap used by a Togl widget. +
+ + +

Postscript Output

+

+ +

+
int Togl_DumpToEpsFile(const Togl *togl, + const char *filename, int rgbFlag, void (*user_redraw)()) +
+ Generate an encapsulated Postscript file of the image in a Togl widget. + filename is the name of the file to generate. + If rgbFlag is non-zero then an RGB image file is written, + else a grayscale image file is written. + user_redraw is a pointer to the function which will render the + desired image. This will typically be the same as the function passed + to Togl_DisplayFunc(). +
+ + +
+

Tcl Togl commands

+ +

+ These are the Togl commands one may call from a Tcl program. + +

+
togl pathName [options] +
+ Creates a new togl widget with name pathName and + an optional list of configuration options. Options include: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Option Default Comments
-width 400 + Width of widget in pixels.
-height 400 + Height of widget in pixels.
 
-ident "" + A user identification string. This is used match widgets + for the -sharecontext + and the -sharelist options (see below). + This is also useful in your callback functions + to determine which Togl widget is the caller. +
 
-rgba true + If true, use RGB(A) mode, otherwise use Color Index mode.
-redsize 1 + Minimum number of bits in red component.
-greensize 1 + Minimum number of bits in green component.
-bluesize 1 + Minimum number of bits in blue component.
-alpha 1 + If true and -rgba is true, request an alpha channel.
-alphasize 1 + Minimum number of bits in alpha component.
 
-double false + If true, request a double-buffered window, otherwise + request a single-buffered window.
 
-depth false + If true, request a depth buffer.
-depthsize 1 + Minimum number of bits in depth buffer.
 
-accum false + If true, request an accumulation buffer.
-accumredsize 1 + Minimum number of bits in accumulation buffer red component.
-accumgreensize 1 + Minimum number of bits in accumulation buffer green component.
-accumbluesize 1 + Minimum number of bits in accumulation buffer blue component.
-accumalphasize 1 + Minimum number of bits in accumulation buffer alpha component.
 
-stencil false + If true, request a stencil buffer.
-stencilsize 1 + Minimum number of bits in stencil component.
 
-auxbuffers 0 + Desired number of auxiliary buffers.
 
-privatecmap false + Only applicable in color index mode. + If false, use a shared read-only colormap. + If true, use a private read/write colormap. +
 
-overlay false + If true, request overlay planes.
 
-stereo false + If true, request a stereo-capable window.
-oldstereo false + On SGI workstations only: if true, request divided-screen stereo. +
 
-time 1 + Specifies the interval, in milliseconds, for + calling the C timer callback function which + was registered with Togl_TimerFunc.
 
-sharelist "" + Name of an existing Togl widget with which to + share display lists. +
-sharecontext "" + Name of an existing Togl widget with which to + share the OpenGL context. NOTE: most other + attributes such as double buffering, RGBA vs CI, + ancillary buffer specs, etc are then ignored. +
 
-indirect false + If present, request an indirect rendering context. + A direct rendering context is normally requested. + Only significant on Unix/X11. +
 
-cursor "" + Set the cursor in the widget window.
 
-pixelformat 0 + Set the pixel format to the (platform-dependent) given value.
+

+ + +
+
pathName configure +
+ Returns all configuration records for the named togl widget. +
+ +
+
pathName configure -option +
+ Returns configuration information for the specifed option + which may be one of: +
+
-width +
+ Returns the width configuration of the widget in the form: +
+ -width width Width W w +
+ where W is the default width in pixels + and w is the current width in pixels +
+
+
-height +
+ Returns the height configuration of the widget in the form: +
+ -height height Height H h +
+ where H is the default height in pixels + and h is the current height in pixels +
+
+
-extensions +
+ Returns a list of OpenGL extensions available. For example: + GL_EXT_polygon_offset GL_EXT_vertex_array +
+
+ +
+
pathName configure -option value +
+ Reconfigure a Togl widget. option may be any one of the + options listed in the togl command above. +
+ +
+
pathName render +
+ Causes the render callback function to be called for pathName. +
+ +
+
pathName swapbuffers +
+ Causes front/back buffers to be swapped if in double buffer mode. + And flushs the OpenGL command buffer if in single buffer mode. + (So this is appropriate to call after every frame is drawn.) +
+ +
+
pathName makecurrent +
+ Make the widget specified by pathName and its OpenGL context + the current ones. +
+ + +
+

Demo Programs

+ +

+ There are six demo programs: + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
double.tcl— compares single vs double buffering with two Togl widgets
texture.tcl— lets you play with texture mapping options
index.tcl— demo of using color index mode
overlay.tcl— example of using overlay planes (requires overlay hardware)
stereo.tcl— stereo example
gears.tcl— spinning gears demo
+
+ +

+ To compile the demos, edit the Makefile to suit your system, then + type make demos. + The demos are compiled into shared libraries, + that can are loaded into the Tcl interpreter as Tcl/Tk-extensions. + Demos are started by running the corrsponding Tcl script. + To run a demo just type ./double.tcl or ./texture.tcl etc. + + +
+

Stereo Rendering

+ +

+ Quad-buffered stereo-in-a-window is supported. Quad-buffer stereo + is only available on workstation-class graphics cards + (3Dlabs Wildcat series, + ATI FireGL series, + NVidia Quadro series, + and SGI workstations). + Legacy support for divided-screen stereo on SGI workstations is + available via the -oldstereo option. + Developers for SGI workstations might also like the + + autostereo package to automatically switch the display + in and out of stereo (other systems already do it automatically). +

+ Full-screen stereo that gaming graphics cards support (ATI Radeon, + NVidia GeForce) is not supported. + +
+

Common Questions and Problems

+ +

+ If you have something to add to this section please let us know. + +

Bad Match X errors on Sun systems

+

+ There's a bug in Sun's XmuLookupStandardColormap X library function. + If you compile togl.c with the SOLARIS_BUG symbol defined (-DSOLARIS_BUG) + this function call will be omitted. + + +
+

Reporting Bugs

+ +

+ There is a bug database on the + Togl Project Page. + You may also discuss bugs on the mailing list. +

+ When reporting bugs please provide as much information as possible. + Also, it's very helpful to us if you can provide an example program + which demonstrates the problem. + + +
+

Version History

+ +

Version 1.0 — March, 1996

+ + +

Version 1.1 (never officially released)

+ + +

Version 1.2 — November, 1996

+ + +

Version 1.3 — May 2, 1997

+ + +

Version 1.4 — September 17, 1997

+ + +

Version 1.5 — September 18, 1998

+ + +

Version 1.6 — May 7, 2003

+ + +

Version 1.7 — Jan 2006

+ + +

Version 2.0 — ??? 2006

+ + +
+

Future plans

+ + + +
+

Contributors

+ +

+ Several people have contributed new features to Togl. Among them are: + +

+ + Many others have contributed bug fixes. Thanks for your contributions! + +
+
+ Last edited on 25 October 2005 by Greg Couch. + + + diff --git a/ng/Togl-1.7/aclocal.m4 b/ng/Togl-1.7/aclocal.m4 new file mode 100644 index 00000000..0b057391 --- /dev/null +++ b/ng/Togl-1.7/aclocal.m4 @@ -0,0 +1,9 @@ +# +# Include the TEA standard macro set +# + +builtin(include,tclconfig/tcl.m4) + +# +# Add here whatever m4 macros you want to define for your package +# diff --git a/ng/Togl-1.7/ben.rgb b/ng/Togl-1.7/ben.rgb new file mode 100644 index 00000000..4eb067a2 Binary files /dev/null and b/ng/Togl-1.7/ben.rgb differ diff --git a/ng/Togl-1.7/configure b/ng/Togl-1.7/configure new file mode 100755 index 00000000..531e796b --- /dev/null +++ b/ng/Togl-1.7/configure @@ -0,0 +1,9300 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.68 for Togl 1.7. +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +# Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='Togl' +PACKAGE_TARNAME='togl' +PACKAGE_VERSION='1.7' +PACKAGE_STRING='Togl 1.7' +PACKAGE_BUGREPORT='' +PACKAGE_URL='' + +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='LTLIBOBJS +WISH_PROG +TCLSH_PROG +RANLIB_STUB +MAKE_STUB_LIB +MAKE_STATIC_LIB +MAKE_SHARED_LIB +MAKE_LIB +LDFLAGS_DEFAULT +CFLAGS_DEFAULT +TCL_DBGX +SHLIB_SUFFIX +LD_LIBRARY_PATH_VAR +LDFLAGS_OPTIMIZE +LDFLAGS_DEBUG +SHLIB_LD_LIBS +SHLIB_CFLAGS +SHLIB_LD +STLIB_LD +CFLAGS_WARNING +CFLAGS_OPTIMIZE +CFLAGS_DEBUG +DL_LIBS +LIBOBJS +CELIB_DIR +AR +SHARED_BUILD +TCL_THREADS +LIBGLU +TOGL_WINDOWINGSYSTEM +XMKMF +TK_INCLUDES +TK_PLATFORM_DIR_NATIVE +TK_XLIB_DIR_NATIVE +TK_GENERIC_DIR_NATIVE +TK_WIN_DIR_NATIVE +TK_UNIX_DIR_NATIVE +TK_TOP_DIR_NATIVE +TCL_INCLUDES +CLEANFILES +PKG_OBJECTS +PKG_SOURCES +MATH_LIBS +EGREP +GREP +RANLIB +SET_MAKE +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +CPP +OBJEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +TK_XINCLUDES +TK_LIBS +TK_STUB_LIB_SPEC +TK_STUB_LIB_FLAG +TK_STUB_LIB_FILE +TK_LIB_SPEC +TK_LIB_FLAG +TK_LIB_FILE +TK_SRC_DIR +TK_BIN_DIR +TK_VERSION +TCL_SHLIB_LD_LIBS +TCL_LD_FLAGS +TCL_EXTRA_CFLAGS +TCL_DEFS +TCL_LIBS +TCL_STUB_LIB_SPEC +TCL_STUB_LIB_FLAG +TCL_STUB_LIB_FILE +TCL_LIB_SPEC +TCL_LIB_FLAG +TCL_LIB_FILE +TCL_SRC_DIR +TCL_BIN_DIR +TCL_VERSION +PKG_CFLAGS +PKG_LIBS +PKG_INCLUDES +PKG_HEADERS +PKG_TCL_SOURCES +PKG_STUB_OBJECTS +PKG_STUB_SOURCES +PKG_STUB_LIB_FILE +PKG_LIB_FILE +EXEEXT +CYGPATH +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +with_tcl +with_tk +with_tclinclude +with_x +enable_threads +enable_shared +enable_64bit +enable_64bit_vis +enable_wince +with_celib +enable_load +enable_symbols +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +XMKMF' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used" >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures Togl 1.7 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/togl] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +X features: + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of Togl 1.7:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-threads build with threads + --enable-shared build and link with shared libraries --enable-shared + --enable-64bit enable 64bit support (where applicable) + --enable-64bit-vis enable 64bit Sparc VIS support + --enable-wince enable Win/CE support (where applicable) + --disable-load disallow dynamic loading and "load" command + --enable-symbols build with debugging symbols --disable-symbols + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-tcl directory containing tcl configuration (tclConfig.sh) + --with-tk directory containing tk configuration (tkConfig.sh) + --with-tclinclude directory containing the public Tcl header files + --with-x use the X Window System + --with-celib=DIR use Windows/CE support library from DIR + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + XMKMF Path to xmkmf, Makefile generator for X Window System + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +Togl configure 1.7 +generated by GNU Autoconf 2.68 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by Togl $as_me 1.7, which was +generated by GNU Autoconf 2.68. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +#-------------------------------------------------------------------- +# Call TEA_INIT as the first TEA_ macro to set up initial vars. +# This will define a ${TEA_PLATFORM} variable == "unix" or "windows" +# as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE. +#-------------------------------------------------------------------- + + + # TEA extensions pass this us the version of TEA they think they + # are compatible with. + TEA_VERSION="3.4" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for correct TEA configuration" >&5 +$as_echo_n "checking for correct TEA configuration... " >&6; } + if test x"${PACKAGE_NAME}" = x ; then + as_fn_error $? " +The PACKAGE_NAME variable must be defined by your TEA configure.in" "$LINENO" 5 + fi + if test x"3.4" = x ; then + as_fn_error $? " +TEA version not specified." "$LINENO" 5 + elif test "3.4" != "${TEA_VERSION}" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: warning: requested TEA version \"3.4\", have \"${TEA_VERSION}\"" >&5 +$as_echo "warning: requested TEA version \"3.4\", have \"${TEA_VERSION}\"" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok (TEA ${TEA_VERSION})" >&5 +$as_echo "ok (TEA ${TEA_VERSION})" >&6; } + fi + case "`uname -s`" in + *win32*|*WIN32*|*CYGWIN_NT*|*CYGWIN_9*|*CYGWIN_ME*|*MINGW32_*) + # Extract the first word of "cygpath", so it can be a program name with args. +set dummy cygpath; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CYGPATH+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CYGPATH"; then + ac_cv_prog_CYGPATH="$CYGPATH" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CYGPATH="cygpath -w" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_prog_CYGPATH" && ac_cv_prog_CYGPATH="echo" +fi +fi +CYGPATH=$ac_cv_prog_CYGPATH +if test -n "$CYGPATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 +$as_echo "$CYGPATH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + EXEEXT=".exe" + TEA_PLATFORM="windows" + ;; + *) + CYGPATH=echo + EXEEXT="" + TEA_PLATFORM="unix" + ;; + esac + + # Check if exec_prefix is set. If not use fall back to prefix. + # Note when adjusted, so that TEA_PREFIX can correct for this. + # This is needed for recursive configures, since autoconf propagates + # $prefix, but not $exec_prefix (doh!). + if test x$exec_prefix = xNONE ; then + exec_prefix_default=yes + exec_prefix=$prefix + fi + + + + + # This package name must be replaced statically for AC_SUBST to work + + # Substitute STUB_LIB_FILE in case package creates a stub library too. + + + # We AC_SUBST these here to ensure they are subst'ed, + # in case the user doesn't call TEA_ADD_... + + + + + + + + + +ac_aux_dir= +for ac_dir in tclconfig "$srcdir"/tclconfig; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in tclconfig \"$srcdir\"/tclconfig" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + + +#-------------------------------------------------------------------- +# Load the tclConfig.sh file +#-------------------------------------------------------------------- + + + + # + # Ok, lets find the tcl configuration + # First, look for one uninstalled. + # the alternative search directory is invoked by --with-tcl + # + + if test x"${no_tcl}" = x ; then + # we reset no_tcl in case something fails here + no_tcl=true + +# Check whether --with-tcl was given. +if test "${with_tcl+set}" = set; then : + withval=$with_tcl; with_tclconfig=${withval} +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tcl configuration" >&5 +$as_echo_n "checking for Tcl configuration... " >&6; } + if ${ac_cv_c_tclconfig+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + # First check to see if --with-tcl was specified. + if test x"${with_tclconfig}" != x ; then + case ${with_tclconfig} in + */tclConfig.sh ) + if test -f ${with_tclconfig}; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&5 +$as_echo "$as_me: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&2;} + with_tclconfig=`echo ${with_tclconfig} | sed 's!/tclConfig\.sh$!!'` + fi ;; + esac + if test -f "${with_tclconfig}/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd ${with_tclconfig}; pwd)` + else + as_fn_error $? "${with_tclconfig} directory doesn't contain tclConfig.sh" "$LINENO" 5 + fi + fi + + # then check for a private Tcl installation + if test x"${ac_cv_c_tclconfig}" = x ; then + for i in \ + ../tcl \ + `ls -dr ../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ + `ls -dr ../tcl[8-9].[0-9] 2>/dev/null` \ + `ls -dr ../tcl[8-9].[0-9]* 2>/dev/null` \ + ../../tcl \ + `ls -dr ../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ + `ls -dr ../../tcl[8-9].[0-9] 2>/dev/null` \ + `ls -dr ../../tcl[8-9].[0-9]* 2>/dev/null` \ + ../../../tcl \ + `ls -dr ../../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ + `ls -dr ../../../tcl[8-9].[0-9] 2>/dev/null` \ + `ls -dr ../../../tcl[8-9].[0-9]* 2>/dev/null` ; do + if test -f "$i/unix/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd $i/unix; pwd)` + break + fi + done + fi + + # on Darwin, check in Framework installation locations + if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then + for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ + `ls -d /Library/Frameworks 2>/dev/null` \ + `ls -d /Network/Library/Frameworks 2>/dev/null` \ + `ls -d /System/Library/Frameworks 2>/dev/null` \ + ; do + if test -f "$i/Tcl.framework/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd $i/Tcl.framework; pwd)` + break + fi + done + fi + + # check in a few common install locations + if test x"${ac_cv_c_tclconfig}" = x ; then + for i in `ls -d ${libdir} 2>/dev/null` \ + `ls -d ${exec_prefix}/lib 2>/dev/null` \ + `ls -d ${prefix}/lib 2>/dev/null` \ + `ls -d /usr/local/lib 2>/dev/null` \ + `ls -d /usr/contrib/lib 2>/dev/null` \ + `ls -d /usr/lib 2>/dev/null` \ + ; do + if test -f "$i/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd $i; pwd)` + break + fi + done + fi + + # check in a few other private locations + if test x"${ac_cv_c_tclconfig}" = x ; then + for i in \ + ${srcdir}/../tcl \ + `ls -dr ${srcdir}/../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ + `ls -dr ${srcdir}/../tcl[8-9].[0-9] 2>/dev/null` \ + `ls -dr ${srcdir}/../tcl[8-9].[0-9]* 2>/dev/null` ; do + if test -f "$i/unix/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd $i/unix; pwd)` + break + fi + done + fi + +fi + + + if test x"${ac_cv_c_tclconfig}" = x ; then + TCL_BIN_DIR="# no Tcl configs found" + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Cannot find Tcl configuration definitions\"" >&5 +$as_echo "$as_me: WARNING: \"Cannot find Tcl configuration definitions\"" >&2;} + exit 0 + else + no_tcl= + TCL_BIN_DIR=${ac_cv_c_tclconfig} + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found $TCL_BIN_DIR/tclConfig.sh" >&5 +$as_echo "found $TCL_BIN_DIR/tclConfig.sh" >&6; } + fi + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for existence of $TCL_BIN_DIR/tclConfig.sh" >&5 +$as_echo_n "checking for existence of $TCL_BIN_DIR/tclConfig.sh... " >&6; } + + if test -f "$TCL_BIN_DIR/tclConfig.sh" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: loading" >&5 +$as_echo "loading" >&6; } + . $TCL_BIN_DIR/tclConfig.sh + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: file not found" >&5 +$as_echo "file not found" >&6; } + fi + + # + # If the TCL_BIN_DIR is the build directory (not the install directory), + # then set the common variable name to the value of the build variables. + # For example, the variable TCL_LIB_SPEC will be set to the value + # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC + # instead of TCL_BUILD_LIB_SPEC since it will work with both an + # installed and uninstalled version of Tcl. + # + + if test -f $TCL_BIN_DIR/Makefile ; then + TCL_LIB_SPEC=${TCL_BUILD_LIB_SPEC} + TCL_STUB_LIB_SPEC=${TCL_BUILD_STUB_LIB_SPEC} + TCL_STUB_LIB_PATH=${TCL_BUILD_STUB_LIB_PATH} + fi + + # + # eval is required to do the TCL_DBGX substitution + # + + eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\"" + eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" + eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" + + eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\"" + eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" + eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" + + + + + + + + + + + + + + + + + + + #AC_SUBST(TCL_BUILD_LIB_SPEC) + #AC_SUBST(TCL_BUILD_STUB_LIB_SPEC) + + +#-------------------------------------------------------------------- +# Load the tkConfig.sh file if necessary (Tk extension) +#-------------------------------------------------------------------- + + + # + # Ok, lets find the tk configuration + # First, look for one uninstalled. + # the alternative search directory is invoked by --with-tk + # + + if test x"${no_tk}" = x ; then + # we reset no_tk in case something fails here + no_tk=true + +# Check whether --with-tk was given. +if test "${with_tk+set}" = set; then : + withval=$with_tk; with_tkconfig=${withval} +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tk configuration" >&5 +$as_echo_n "checking for Tk configuration... " >&6; } + if ${ac_cv_c_tkconfig+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + # First check to see if --with-tkconfig was specified. + if test x"${with_tkconfig}" != x ; then + case ${with_tkconfig} in + */tkConfig.sh ) + if test -f ${with_tkconfig}; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself" >&5 +$as_echo "$as_me: WARNING: --with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself" >&2;} + with_tkconfig=`echo ${with_tkconfig} | sed 's!/tkConfig\.sh$!!'` + fi ;; + esac + if test -f "${with_tkconfig}/tkConfig.sh" ; then + ac_cv_c_tkconfig=`(cd ${with_tkconfig}; pwd)` + else + as_fn_error $? "${with_tkconfig} directory doesn't contain tkConfig.sh" "$LINENO" 5 + fi + fi + + # then check for a private Tk library + if test x"${ac_cv_c_tkconfig}" = x ; then + for i in \ + ../tk \ + `ls -dr ../tk[8-9].[0-9].[0-9]* 2>/dev/null` \ + `ls -dr ../tk[8-9].[0-9] 2>/dev/null` \ + `ls -dr ../tk[8-9].[0-9]* 2>/dev/null` \ + ../../tk \ + `ls -dr ../../tk[8-9].[0-9].[0-9]* 2>/dev/null` \ + `ls -dr ../../tk[8-9].[0-9] 2>/dev/null` \ + `ls -dr ../../tk[8-9].[0-9]* 2>/dev/null` \ + ../../../tk \ + `ls -dr ../../../tk[8-9].[0-9].[0-9]* 2>/dev/null` \ + `ls -dr ../../../tk[8-9].[0-9] 2>/dev/null` \ + `ls -dr ../../../tk[8-9].[0-9]* 2>/dev/null` ; do + if test -f "$i/unix/tkConfig.sh" ; then + ac_cv_c_tkconfig=`(cd $i/unix; pwd)` + break + fi + done + fi + + # on Darwin, check in Framework installation locations + if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then + for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ + `ls -d /Library/Frameworks 2>/dev/null` \ + `ls -d /Network/Library/Frameworks 2>/dev/null` \ + `ls -d /System/Library/Frameworks 2>/dev/null` \ + ; do + if test -f "$i/Tk.framework/tkConfig.sh" ; then + ac_cv_c_tkconfig=`(cd $i/Tk.framework; pwd)` + break + fi + done + fi + + # check in a few common install locations + if test x"${ac_cv_c_tkconfig}" = x ; then + for i in `ls -d ${libdir} 2>/dev/null` \ + `ls -d ${exec_prefix}/lib 2>/dev/null` \ + `ls -d ${prefix}/lib 2>/dev/null` \ + `ls -d /usr/local/lib 2>/dev/null` \ + `ls -d /usr/contrib/lib 2>/dev/null` \ + `ls -d /usr/lib 2>/dev/null` \ + ; do + if test -f "$i/tkConfig.sh" ; then + ac_cv_c_tkconfig=`(cd $i; pwd)` + break + fi + done + fi + # check in a few other private locations + if test x"${ac_cv_c_tkconfig}" = x ; then + for i in \ + ${srcdir}/../tk \ + `ls -dr ${srcdir}/../tk[8-9].[0-9].[0-9]* 2>/dev/null` \ + `ls -dr ${srcdir}/../tk[8-9].[0-9] 2>/dev/null` \ + `ls -dr ${srcdir}/../tk[8-9].[0-9]* 2>/dev/null` ; do + if test -f "$i/unix/tkConfig.sh" ; then + ac_cv_c_tkconfig=`(cd $i/unix; pwd)` + break + fi + done + fi + +fi + + + if test x"${ac_cv_c_tkconfig}" = x ; then + TK_BIN_DIR="# no Tk configs found" + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Cannot find Tk configuration definitions\"" >&5 +$as_echo "$as_me: WARNING: \"Cannot find Tk configuration definitions\"" >&2;} + exit 0 + else + no_tk= + TK_BIN_DIR=${ac_cv_c_tkconfig} + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found $TK_BIN_DIR/tkConfig.sh" >&5 +$as_echo "found $TK_BIN_DIR/tkConfig.sh" >&6; } + fi + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for existence of ${TK_BIN_DIR}/tkConfig.sh" >&5 +$as_echo_n "checking for existence of ${TK_BIN_DIR}/tkConfig.sh... " >&6; } + + if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: loading" >&5 +$as_echo "loading" >&6; } + . $TK_BIN_DIR/tkConfig.sh + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not find ${TK_BIN_DIR}/tkConfig.sh" >&5 +$as_echo "could not find ${TK_BIN_DIR}/tkConfig.sh" >&6; } + fi + + # + # If the TK_BIN_DIR is the build directory (not the install directory), + # then set the common variable name to the value of the build variables. + # For example, the variable TK_LIB_SPEC will be set to the value + # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC + # instead of TK_BUILD_LIB_SPEC since it will work with both an + # installed and uninstalled version of Tcl. + # + + if test -f $TK_BIN_DIR/Makefile ; then + TK_LIB_SPEC=${TK_BUILD_LIB_SPEC} + TK_STUB_LIB_SPEC=${TK_BUILD_STUB_LIB_SPEC} + TK_STUB_LIB_PATH=${TK_BUILD_STUB_LIB_PATH} + fi + + # Ensure windowingsystem is defined + if test "${TEA_PLATFORM}" = "unix" ; then + case ${TK_DEFS} in + *MAC_OSX_TK*) + +$as_echo "#define MAC_OSX_TK 1" >>confdefs.h + + TEA_WINDOWINGSYSTEM="aqua" + ;; + *) + TEA_WINDOWINGSYSTEM="x11" + ;; + esac + elif test "${TEA_PLATFORM}" = "windows" ; then + TEA_WINDOWINGSYSTEM="win32" + fi + + # + # eval is required to do the TK_DBGX substitution + # + + eval "TK_LIB_FILE=\"${TK_LIB_FILE}\"" + eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\"" + eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\"" + + eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\"" + eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\"" + eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\"" + + + + + + + + + + + + + + + + + +#----------------------------------------------------------------------- +# Handle the --prefix=... option by defaulting to what Tcl gave. +# Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER. +#----------------------------------------------------------------------- + + + if test "${prefix}" = "NONE"; then + prefix_default=yes + if test x"${TCL_PREFIX}" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&5 +$as_echo "$as_me: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&6;} + prefix=${TCL_PREFIX} + else + { $as_echo "$as_me:${as_lineno-$LINENO}: --prefix defaulting to /usr/local" >&5 +$as_echo "$as_me: --prefix defaulting to /usr/local" >&6;} + prefix=/usr/local + fi + fi + if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \ + -o x"${exec_prefix_default}" = x"yes" ; then + if test x"${TCL_EXEC_PREFIX}" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&5 +$as_echo "$as_me: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&6;} + exec_prefix=${TCL_EXEC_PREFIX} + else + { $as_echo "$as_me:${as_lineno-$LINENO}: --exec-prefix defaulting to ${prefix}" >&5 +$as_echo "$as_me: --exec-prefix defaulting to ${prefix}" >&6;} + exec_prefix=$prefix + fi + fi + + +#----------------------------------------------------------------------- +# Standard compiler checks. +# This sets up CC by using the CC env var, or looks for gcc otherwise. +# This also calls AC_PROG_CC, AC_PROG_INSTALL and a few others to create +# the basic setup necessary to compile executables. +#----------------------------------------------------------------------- + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + + + # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) + # in this macro, they need to go into TEA_SETUP_COMPILER instead. + + # If the user did not set CFLAGS, set it now to keep + # the AC_PROG_CC macro from adding "-g -O2". + if test "${CFLAGS+set}" != "set" ; then + CFLAGS="" + fi + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + #-------------------------------------------------------------------- + # Checks to see if the make program sets the $MAKE variable. + #-------------------------------------------------------------------- + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + + + #-------------------------------------------------------------------- + # Find ranlib + #-------------------------------------------------------------------- + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + + + #-------------------------------------------------------------------- + # Determines the correct binary file extension (.o, .obj, .exe etc.) + #-------------------------------------------------------------------- + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here. + + + #------------------------------------------------------------------------ + # If we're using GCC, see if the compiler understands -pipe. If so, use it. + # It makes compiling go faster. (This is only a performance feature.) + #------------------------------------------------------------------------ + + if test -z "$no_pipe" -a -n "$GCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler understands -pipe" >&5 +$as_echo_n "checking if the compiler understands -pipe... " >&6; } + OLDCC="$CC" + CC="$CC -pipe" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + CC="$OLDCC" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + #-------------------------------------------------------------------- + # Common compiler flag setup + #-------------------------------------------------------------------- + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) + +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + ;; #( + *) + as_fn_error $? "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac + + if test "${TEA_PLATFORM}" = "unix" ; then + + #-------------------------------------------------------------------- + # On a few very rare systems, all of the libm.a stuff is + # already in libc.a. Set compiler flags accordingly. + # Also, Linux requires the "ieee" library for math to work + # right (and it must appear before "-lm"). + #-------------------------------------------------------------------- + + ac_fn_c_check_func "$LINENO" "sin" "ac_cv_func_sin" +if test "x$ac_cv_func_sin" = xyes; then : + MATH_LIBS="" +else + MATH_LIBS="-lm" +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lieee" >&5 +$as_echo_n "checking for main in -lieee... " >&6; } +if ${ac_cv_lib_ieee_main+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lieee $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ieee_main=yes +else + ac_cv_lib_ieee_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ieee_main" >&5 +$as_echo "$ac_cv_lib_ieee_main" >&6; } +if test "x$ac_cv_lib_ieee_main" = xyes; then : + MATH_LIBS="-lieee $MATH_LIBS" +fi + + + #-------------------------------------------------------------------- + # Interactive UNIX requires -linet instead of -lsocket, plus it + # needs net/errno.h to define the socket-related error codes. + #-------------------------------------------------------------------- + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -linet" >&5 +$as_echo_n "checking for main in -linet... " >&6; } +if ${ac_cv_lib_inet_main+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-linet $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_inet_main=yes +else + ac_cv_lib_inet_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_main" >&5 +$as_echo "$ac_cv_lib_inet_main" >&6; } +if test "x$ac_cv_lib_inet_main" = xyes; then : + LIBS="$LIBS -linet" +fi + + ac_fn_c_check_header_mongrel "$LINENO" "net/errno.h" "ac_cv_header_net_errno_h" "$ac_includes_default" +if test "x$ac_cv_header_net_errno_h" = xyes; then : + + +$as_echo "#define HAVE_NET_ERRNO_H 1" >>confdefs.h + +fi + + + + #-------------------------------------------------------------------- + # Check for the existence of the -lsocket and -lnsl libraries. + # The order here is important, so that they end up in the right + # order in the command line generated by make. Here are some + # special considerations: + # 1. Use "connect" and "accept" to check for -lsocket, and + # "gethostbyname" to check for -lnsl. + # 2. Use each function name only once: can't redo a check because + # autoconf caches the results of the last check and won't redo it. + # 3. Use -lnsl and -lsocket only if they supply procedures that + # aren't already present in the normal libraries. This is because + # IRIX 5.2 has libraries, but they aren't needed and they're + # bogus: they goof up name resolution if used. + # 4. On some SVR4 systems, can't use -lsocket without -lnsl too. + # To get around this problem, check for both libraries together + # if -lsocket doesn't work by itself. + #-------------------------------------------------------------------- + + tcl_checkBoth=0 + ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" +if test "x$ac_cv_func_connect" = xyes; then : + tcl_checkSocket=0 +else + tcl_checkSocket=1 +fi + + if test "$tcl_checkSocket" = 1; then + ac_fn_c_check_func "$LINENO" "setsockopt" "ac_cv_func_setsockopt" +if test "x$ac_cv_func_setsockopt" = xyes; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setsockopt in -lsocket" >&5 +$as_echo_n "checking for setsockopt in -lsocket... " >&6; } +if ${ac_cv_lib_socket_setsockopt+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char setsockopt (); +int +main () +{ +return setsockopt (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_socket_setsockopt=yes +else + ac_cv_lib_socket_setsockopt=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_setsockopt" >&5 +$as_echo "$ac_cv_lib_socket_setsockopt" >&6; } +if test "x$ac_cv_lib_socket_setsockopt" = xyes; then : + LIBS="$LIBS -lsocket" +else + tcl_checkBoth=1 +fi + +fi + + fi + if test "$tcl_checkBoth" = 1; then + tk_oldLibs=$LIBS + LIBS="$LIBS -lsocket -lnsl" + ac_fn_c_check_func "$LINENO" "accept" "ac_cv_func_accept" +if test "x$ac_cv_func_accept" = xyes; then : + tcl_checkNsl=0 +else + LIBS=$tk_oldLibs +fi + + fi + ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" +if test "x$ac_cv_func_gethostbyname" = xyes; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 +$as_echo_n "checking for gethostbyname in -lnsl... " >&6; } +if ${ac_cv_lib_nsl_gethostbyname+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_nsl_gethostbyname=yes +else + ac_cv_lib_nsl_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 +$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } +if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : + LIBS="$LIBS -lnsl" +fi + +fi + + + # Don't perform the eval of the libraries here because DL_LIBS + # won't be set until we call TEA_CONFIG_CFLAGS + + TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}' + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dirent.h" >&5 +$as_echo_n "checking dirent.h... " >&6; } + if ${tcl_cv_dirent_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +int +main () +{ + +#ifndef _POSIX_SOURCE +# ifdef __Lynx__ + /* + * Generate compilation error to make the test fail: Lynx headers + * are only valid if really in the POSIX environment. + */ + + missing_procedure(); +# endif +#endif +DIR *d; +struct dirent *entryPtr; +char *p; +d = opendir("foobar"); +entryPtr = readdir(d); +p = entryPtr->d_name; +closedir(d); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + tcl_cv_dirent_h=yes +else + tcl_cv_dirent_h=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi + + + if test $tcl_cv_dirent_h = no; then + +$as_echo "#define NO_DIRENT_H 1" >>confdefs.h + + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_ok" >&5 +$as_echo "$tcl_ok" >&6; } + ac_fn_c_check_header_mongrel "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default" +if test "x$ac_cv_header_errno_h" = xyes; then : + +else + +$as_echo "#define NO_ERRNO_H 1" >>confdefs.h + +fi + + + ac_fn_c_check_header_mongrel "$LINENO" "float.h" "ac_cv_header_float_h" "$ac_includes_default" +if test "x$ac_cv_header_float_h" = xyes; then : + +else + +$as_echo "#define NO_FLOAT_H 1" >>confdefs.h + +fi + + + ac_fn_c_check_header_mongrel "$LINENO" "values.h" "ac_cv_header_values_h" "$ac_includes_default" +if test "x$ac_cv_header_values_h" = xyes; then : + +else + +$as_echo "#define NO_VALUES_H 1" >>confdefs.h + +fi + + + ac_fn_c_check_header_mongrel "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default" +if test "x$ac_cv_header_limits_h" = xyes; then : + +$as_echo "#define HAVE_LIMITS_H 1" >>confdefs.h + +else + +$as_echo "#define NO_LIMITS_H 1" >>confdefs.h + +fi + + + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + tcl_ok=1 +else + tcl_ok=0 +fi + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "strtol" >/dev/null 2>&1; then : + +else + tcl_ok=0 +fi +rm -f conftest* + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "strtoul" >/dev/null 2>&1; then : + +else + tcl_ok=0 +fi +rm -f conftest* + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "strtod" >/dev/null 2>&1; then : + +else + tcl_ok=0 +fi +rm -f conftest* + + if test $tcl_ok = 0; then + +$as_echo "#define NO_STDLIB_H 1" >>confdefs.h + + fi + ac_fn_c_check_header_mongrel "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" +if test "x$ac_cv_header_string_h" = xyes; then : + tcl_ok=1 +else + tcl_ok=0 +fi + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "strstr" >/dev/null 2>&1; then : + +else + tcl_ok=0 +fi +rm -f conftest* + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "strerror" >/dev/null 2>&1; then : + +else + tcl_ok=0 +fi +rm -f conftest* + + + # See also memmove check below for a place where NO_STRING_H can be + # set and why. + + if test $tcl_ok = 0; then + +$as_echo "#define NO_STRING_H 1" >>confdefs.h + + fi + + ac_fn_c_check_header_mongrel "$LINENO" "sys/wait.h" "ac_cv_header_sys_wait_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_wait_h" = xyes; then : + +else + +$as_echo "#define NO_SYS_WAIT_H 1" >>confdefs.h + +fi + + + ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + +else + +$as_echo "#define NO_DLFCN_H 1" >>confdefs.h + +fi + + + + # OS/390 lacks sys/param.h (and doesn't need it, by chance). + for ac_header in sys/param.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_param_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_PARAM_H 1 +_ACEOF + +fi + +done + + + + # Let the user call this, because if it triggers, they will + # need a compat/strtod.c that is correct. Users can also + # use Tcl_GetDouble(FromObj) instead. + #TEA_BUGGY_STRTOD + fi + + +#----------------------------------------------------------------------- +# __CHANGE__ +# Specify the C source files to compile in TEA_ADD_SOURCES, +# public headers that need to be installed in TEA_ADD_HEADERS, +# stub library C source files to compile in TEA_ADD_STUB_SOURCES, +# and runtime Tcl library files in TEA_ADD_TCL_SOURCES. +# This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS +# and PKG_TCL_SOURCES. +#----------------------------------------------------------------------- + + + vars="togl.c" + for i in $vars; do + case $i in + \$*) + # allow $-var names + PKG_SOURCES="$PKG_SOURCES $i" + PKG_OBJECTS="$PKG_OBJECTS $i" + ;; + *) + # check for existence - allows for generic/win/unix VPATH + if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ + -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ + ; then + as_fn_error $? "could not find source file '$i'" "$LINENO" 5 + fi + PKG_SOURCES="$PKG_SOURCES $i" + # this assumes it is in a VPATH dir + i=`basename $i` + # handle user calling this before or after TEA_SETUP_COMPILER + if test x"${OBJEXT}" != x ; then + j="`echo $i | sed -e 's/\.[^.]*$//'`.${OBJEXT}" + else + j="`echo $i | sed -e 's/\.[^.]*$//'`.\${OBJEXT}" + fi + PKG_OBJECTS="$PKG_OBJECTS $j" + ;; + esac + done + + + +# togl_ws.h is added in Makefile.in because it is generated + + vars="togl.h" + for i in $vars; do + # check for existence, be strict because it is installed + if test ! -f "${srcdir}/$i" ; then + as_fn_error $? "could not find header file '${srcdir}/$i'" "$LINENO" 5 + fi + PKG_HEADERS="$PKG_HEADERS $i" + done + + + + vars="" + for i in $vars; do + PKG_INCLUDES="$PKG_INCLUDES $i" + done + + + + vars="" + for i in $vars; do + if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then + # Convert foo.lib to -lfoo for GCC. No-op if not *.lib + i=`echo "$i" | sed -e 's/^\([^-].*\)\.lib$/-l\1/i'` + fi + PKG_LIBS="$PKG_LIBS $i" + done + + + + PKG_CFLAGS="$PKG_CFLAGS " + + + + vars="" + for i in $vars; do + # check for existence - allows for generic/win/unix VPATH + if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ + -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ + ; then + as_fn_error $? "could not find stub source file '$i'" "$LINENO" 5 + fi + PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" + # this assumes it is in a VPATH dir + i=`basename $i` + # handle user calling this before or after TEA_SETUP_COMPILER + if test x"${OBJEXT}" != x ; then + j="`echo $i | sed -e 's/\.[^.]*$//'`.${OBJEXT}" + else + j="`echo $i | sed -e 's/\.[^.]*$//'`.\${OBJEXT}" + fi + PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j" + done + + + + + vars="" + for i in $vars; do + # check for existence, be strict because it is installed + if test ! -f "${srcdir}/$i" ; then + as_fn_error $? "could not find tcl source file '${srcdir}/$i'" "$LINENO" 5 + fi + PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i" + done + + + +#-------------------------------------------------------------------- +# __CHANGE__ +# A few miscellaneous platform-specific items: +# +# Define a special symbol for Windows (BUILD_sample in this case) so +# that we create the export library with the dll. +# +# Windows creates a few extra files that need to be cleaned up. +# You can add more files to clean if your extension creates any extra +# files. +# +# TEA_ADD_* any platform specific compiler/build info here. +#-------------------------------------------------------------------- + +if test "${TEA_PLATFORM}" = "windows" ; then + +$as_echo "#define BUILD_togl 1" >>confdefs.h + + CLEANFILES="pkgIndex.tcl togl_ws.h *.lib *.dll *.exp *.ilk *.pdb vc*.pch" + #TEA_ADD_SOURCES([win/winFile.c]) + #TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/win)\"]) +else + CLEANFILES="pkgIndex.tcl togl_ws.h so_locations" + #TEA_ADD_SOURCES([unix/unixFile.c]) + #TEA_ADD_LIBS([-lsuperfly]) +fi + + +#-------------------------------------------------------------------- +# __CHANGE__ +# Choose which headers you need. Extension authors should try very +# hard to only rely on the Tcl public header files. Internal headers +# contain private data structures and are subject to change without +# notice. +# This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG +#-------------------------------------------------------------------- + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tcl public headers" >&5 +$as_echo_n "checking for Tcl public headers... " >&6; } + + +# Check whether --with-tclinclude was given. +if test "${with_tclinclude+set}" = set; then : + withval=$with_tclinclude; with_tclinclude=${withval} +fi + + + if ${ac_cv_c_tclh+:} false; then : + $as_echo_n "(cached) " >&6 +else + + # Use the value from --with-tclinclude, if it was given + + if test x"${with_tclinclude}" != x ; then + if test -f "${with_tclinclude}/tcl.h" ; then + ac_cv_c_tclh=${with_tclinclude} + else + as_fn_error $? "${with_tclinclude} directory does not contain tcl.h" "$LINENO" 5 + fi + else + # If Tcl was built as a framework, attempt to use + # the framework's Headers directory + case ${TCL_DEFS} in + *TCL_FRAMEWORK*) + list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`" + ;; + *) + list="" + ;; + esac + + # Look in the source dir only if Tcl is not installed, + # and in that situation, look there before installed locations. + if test -f "$TCL_BIN_DIR/Makefile" ; then + list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`" + fi + + # Check order: pkg --prefix location, Tcl's --prefix location, + # relative to directory of tclConfig.sh. + + eval "temp_includedir=${includedir}" + list="$list \ + `ls -d ${temp_includedir} 2>/dev/null` \ + `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ + `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" + if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then + list="$list /usr/local/include /usr/include" + if test x"${TCL_INCLUDE_SPEC}" != x ; then + d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'` + list="$list `ls -d ${d} 2>/dev/null`" + fi + fi + for i in $list ; do + if test -f "$i/tcl.h" ; then + ac_cv_c_tclh=$i + break + fi + done + fi + +fi + + + # Print a message based on how we determined the include path + + if test x"${ac_cv_c_tclh}" = x ; then + as_fn_error $? "tcl.h not found. Please specify its location with --with-tclinclude" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_cv_c_tclh}" >&5 +$as_echo "${ac_cv_c_tclh}" >&6; } + fi + + # Convert to a native path and substitute into the output files. + + INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}` + + TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" + + + +#TEA_PRIVATE_TCL_HEADERS + +#TEA_PUBLIC_TK_HEADERS + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tk private include files" >&5 +$as_echo_n "checking for Tk private include files... " >&6; } + + TK_SRC_DIR_NATIVE=`${CYGPATH} ${TK_SRC_DIR}` + TK_TOP_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}\" + TK_UNIX_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/unix\" + TK_WIN_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/win\" + TK_GENERIC_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/generic\" + TK_XLIB_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/xlib\" + if test "${TEA_PLATFORM}" = "windows"; then + TK_PLATFORM_DIR_NATIVE=${TK_WIN_DIR_NATIVE} + else + TK_PLATFORM_DIR_NATIVE=${TK_UNIX_DIR_NATIVE} + fi + # We want to ensure these are substituted so as not to require + # any *_NATIVE vars be defined in the Makefile + TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}" + if test "${TEA_WINDOWINGSYSTEM}" = "win32" \ + -o "${TEA_WINDOWINGSYSTEM}" = "aqua"; then + TK_INCLUDES="${TK_INCLUDES} -I${TK_XLIB_DIR_NATIVE}" + fi + if test "${TEA_WINDOWINGSYSTEM}" = "aqua"; then + TK_INCLUDES="${TK_INCLUDES} -I${TK_SRC_DIR_NATIVE}/macosx" + fi + if test "`uname -s`" = "Darwin"; then + # If Tk was built as a framework, attempt to use + # the framework's Headers and PrivateHeaders directories + case ${TK_DEFS} in + *TK_FRAMEWORK*) + if test -d "${TK_BIN_DIR}/Headers" -a -d "${TK_BIN_DIR}/PrivateHeaders"; then + TK_INCLUDES="-I\"${TK_BIN_DIR}/Headers\" -I\"${TK_BIN_DIR}/PrivateHeaders\" ${TK_INCLUDES}"; fi + ;; + esac + fi + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}" >&5 +$as_echo "Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}" >&6; } + + + if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 +$as_echo_n "checking for X... " >&6; } + + +# Check whether --with-x was given. +if test "${with_x+set}" = set; then : + withval=$with_x; +fi + +# $have_x is `yes', `no', `disabled', or empty when we do not yet know. +if test "x$with_x" = xno; then + # The user explicitly disabled X. + have_x=disabled +else + case $x_includes,$x_libraries in #( + *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( + *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : + $as_echo_n "(cached) " >&6 +else + # One or both of the vars are not set, and there is no cached value. +ac_x_includes=no ac_x_libraries=no +rm -f -r conftest.dir +if mkdir conftest.dir; then + cd conftest.dir + cat >Imakefile <<'_ACEOF' +incroot: + @echo incroot='${INCROOT}' +usrlibdir: + @echo usrlibdir='${USRLIBDIR}' +libdir: + @echo libdir='${LIBDIR}' +_ACEOF + if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then + # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. + for ac_var in incroot usrlibdir libdir; do + eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" + done + # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. + for ac_extension in a so sl dylib la dll; do + if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && + test -f "$ac_im_libdir/libX11.$ac_extension"; then + ac_im_usrlibdir=$ac_im_libdir; break + fi + done + # Screen out bogus values from the imake configuration. They are + # bogus both because they are the default anyway, and because + # using them would break gcc on systems where it needs fixed includes. + case $ac_im_incroot in + /usr/include) ac_x_includes= ;; + *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; + esac + case $ac_im_usrlibdir in + /usr/lib | /usr/lib64 | /lib | /lib64) ;; + *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; + esac + fi + cd .. + rm -f -r conftest.dir +fi + +# Standard set of common directories for X headers. +# Check X11 before X11Rn because it is often a symlink to the current release. +ac_x_header_dirs=' +/usr/X11/include +/usr/X11R7/include +/usr/X11R6/include +/usr/X11R5/include +/usr/X11R4/include + +/usr/include/X11 +/usr/include/X11R7 +/usr/include/X11R6 +/usr/include/X11R5 +/usr/include/X11R4 + +/usr/local/X11/include +/usr/local/X11R7/include +/usr/local/X11R6/include +/usr/local/X11R5/include +/usr/local/X11R4/include + +/usr/local/include/X11 +/usr/local/include/X11R7 +/usr/local/include/X11R6 +/usr/local/include/X11R5 +/usr/local/include/X11R4 + +/usr/X386/include +/usr/x386/include +/usr/XFree86/include/X11 + +/usr/include +/usr/local/include +/usr/unsupported/include +/usr/athena/include +/usr/local/x11r5/include +/usr/lpp/Xamples/include + +/usr/openwin/include +/usr/openwin/share/include' + +if test "$ac_x_includes" = no; then + # Guess where to find include files, by looking for Xlib.h. + # First, try using that file with no special directory specified. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # We can compile using X headers with no special include directory. +ac_x_includes= +else + for ac_dir in $ac_x_header_dirs; do + if test -r "$ac_dir/X11/Xlib.h"; then + ac_x_includes=$ac_dir + break + fi +done +fi +rm -f conftest.err conftest.i conftest.$ac_ext +fi # $ac_x_includes = no + +if test "$ac_x_libraries" = no; then + # Check for the libraries. + # See if we find them without any special options. + # Don't add to $LIBS permanently. + ac_save_LIBS=$LIBS + LIBS="-lX11 $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +XrmInitialize () + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + LIBS=$ac_save_LIBS +# We can link X programs with no special library path. +ac_x_libraries= +else + LIBS=$ac_save_LIBS +for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` +do + # Don't even attempt the hair of trying to link an X program! + for ac_extension in a so sl dylib la dll; do + if test -r "$ac_dir/libX11.$ac_extension"; then + ac_x_libraries=$ac_dir + break 2 + fi + done +done +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi # $ac_x_libraries = no + +case $ac_x_includes,$ac_x_libraries in #( + no,* | *,no | *\'*) + # Didn't find X, or a directory has "'" in its name. + ac_cv_have_x="have_x=no";; #( + *) + # Record where we found X for the cache. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$ac_x_includes'\ + ac_x_libraries='$ac_x_libraries'" +esac +fi +;; #( + *) have_x=yes;; + esac + eval "$ac_cv_have_x" +fi # $with_x != no + +if test "$have_x" != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 +$as_echo "$have_x" >&6; } + no_x=yes +else + # If each of the values was on the command line, it overrides each guess. + test "x$x_includes" = xNONE && x_includes=$ac_x_includes + test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries + # Update the cache value to reflect the command line values. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$x_includes'\ + ac_x_libraries='$x_libraries'" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 +$as_echo "libraries $x_libraries, headers $x_includes" >&6; } +fi + + not_really_there="" + if test "$no_x" = ""; then + if test "$x_includes" = ""; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + not_really_there="yes" +fi +rm -f conftest.err conftest.i conftest.$ac_ext + else + if test ! -r $x_includes/X11/Intrinsic.h; then + not_really_there="yes" + fi + fi + fi + if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X11 header files" >&5 +$as_echo_n "checking for X11 header files... " >&6; } + XINCLUDES="# no special path needed" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + XINCLUDES="nope" +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test "$XINCLUDES" = nope; then + dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include" + for i in $dirs ; do + if test -r $i/X11/Intrinsic.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $i" >&5 +$as_echo "$i" >&6; } + XINCLUDES=" -I$i" + break + fi + done + fi + else + if test "$x_includes" != ""; then + XINCLUDES=-I$x_includes + else + XINCLUDES="# no special path needed" + fi + fi + if test "$XINCLUDES" = nope; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not find any!" >&5 +$as_echo "could not find any!" >&6; } + XINCLUDES="# no include files found" + fi + + if test "$no_x" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X11 libraries" >&5 +$as_echo_n "checking for X11 libraries... " >&6; } + XLIBSW=nope + dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib" + for i in $dirs ; do + if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $i" >&5 +$as_echo "$i" >&6; } + XLIBSW="-L$i -lX11" + x_libraries="$i" + break + fi + done + else + if test "$x_libraries" = ""; then + XLIBSW=-lX11 + else + XLIBSW="-L$x_libraries -lX11" + fi + fi + if test "$XLIBSW" = nope ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XCreateWindow in -lXwindow" >&5 +$as_echo_n "checking for XCreateWindow in -lXwindow... " >&6; } +if ${ac_cv_lib_Xwindow_XCreateWindow+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lXwindow $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char XCreateWindow (); +int +main () +{ +return XCreateWindow (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_Xwindow_XCreateWindow=yes +else + ac_cv_lib_Xwindow_XCreateWindow=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xwindow_XCreateWindow" >&5 +$as_echo "$ac_cv_lib_Xwindow_XCreateWindow" >&6; } +if test "x$ac_cv_lib_Xwindow_XCreateWindow" = xyes; then : + XLIBSW=-lXwindow +fi + + fi + if test "$XLIBSW" = nope ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not find any! Using -lX11." >&5 +$as_echo "could not find any! Using -lX11." >&6; } + XLIBSW=-lX11 + fi + if test x"${XLIBSW}" != x ; then + PKG_LIBS="${PKG_LIBS} ${XLIBSW}" + fi + + fi + + +#-------------------------------------------------------------------- +# __CHANGE__ +# Choose OpenGL platform +#-------------------------------------------------------------------- + +case "${TEA_WINDOWINGSYSTEM}" in + aqua) + TOGL_WINDOWINGSYSTEM=TOGL_AGL + + + vars="-framework AGL -framework OpenGL -framework ApplicationServices" + for i in $vars; do + if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then + # Convert foo.lib to -lfoo for GCC. No-op if not *.lib + i=`echo "$i" | sed -e 's/^\([^-].*\)\.lib$/-l\1/i'` + fi + PKG_LIBS="$PKG_LIBS $i" + done + + + # libGLU is implicit in OpenGL framework + LIBGLU= + ;; + x11) + TOGL_WINDOWINGSYSTEM=TOGL_X11 + + + vars="-lGL -lXmu" + for i in $vars; do + if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then + # Convert foo.lib to -lfoo for GCC. No-op if not *.lib + i=`echo "$i" | sed -e 's/^\([^-].*\)\.lib$/-l\1/i'` + fi + PKG_LIBS="$PKG_LIBS $i" + done + + + LIBGLU=-lGLU + ;; + win32) + TOGL_WINDOWINGSYSTEM=TOGL_WGL + + + vars="opengl32.lib user32.lib gdi32.lib" + for i in $vars; do + if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then + # Convert foo.lib to -lfoo for GCC. No-op if not *.lib + i=`echo "$i" | sed -e 's/^\([^-].*\)\.lib$/-l\1/i'` + fi + PKG_LIBS="$PKG_LIBS $i" + done + + + if test "$GCC" = "yes" ; then + LIBGLU=-lglu32 + else + LIBGLU=glu32.lib + fi + ;; + *) + as_fn_error $? "Unsupported windowing system: ${TEA_WINDOWINGSYSTEM}" "$LINENO" 5 + ;; +esac + + +#-------------------------------------------------------------------- +# Check whether --enable-threads or --disable-threads was given. +# This auto-enables if Tcl was compiled threaded. +#-------------------------------------------------------------------- + + + # Check whether --enable-threads was given. +if test "${enable_threads+set}" = set; then : + enableval=$enable_threads; tcl_ok=$enableval +else + tcl_ok=yes +fi + + + if test "${enable_threads+set}" = set; then + enableval="$enable_threads" + tcl_ok=$enableval + else + tcl_ok=yes + fi + + if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then + TCL_THREADS=1 + + if test "${TEA_PLATFORM}" != "windows" ; then + # We are always OK on Windows, so check what this platform wants. + +$as_echo "#define USE_THREAD_ALLOC 1" >>confdefs.h + + +$as_echo "#define _REENTRANT 1" >>confdefs.h + + +$as_echo "#define _THREAD_SAFE 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lpthread" >&5 +$as_echo_n "checking for pthread_mutex_init in -lpthread... " >&6; } +if ${ac_cv_lib_pthread_pthread_mutex_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_mutex_init (); +int +main () +{ +return pthread_mutex_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread_pthread_mutex_init=yes +else + ac_cv_lib_pthread_pthread_mutex_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_mutex_init" >&5 +$as_echo "$ac_cv_lib_pthread_pthread_mutex_init" >&6; } +if test "x$ac_cv_lib_pthread_pthread_mutex_init" = xyes; then : + tcl_ok=yes +else + tcl_ok=no +fi + + if test "$tcl_ok" = "no"; then + # Check a little harder for __pthread_mutex_init in the + # same library, as some systems hide it there until + # pthread.h is defined. We could alternatively do an + # AC_TRY_COMPILE with pthread.h, but that will work with + # libpthread really doesn't exist, like AIX 4.2. + # [Bug: 4359] + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __pthread_mutex_init in -lpthread" >&5 +$as_echo_n "checking for __pthread_mutex_init in -lpthread... " >&6; } +if ${ac_cv_lib_pthread___pthread_mutex_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char __pthread_mutex_init (); +int +main () +{ +return __pthread_mutex_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread___pthread_mutex_init=yes +else + ac_cv_lib_pthread___pthread_mutex_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread___pthread_mutex_init" >&5 +$as_echo "$ac_cv_lib_pthread___pthread_mutex_init" >&6; } +if test "x$ac_cv_lib_pthread___pthread_mutex_init" = xyes; then : + tcl_ok=yes +else + tcl_ok=no +fi + + fi + + if test "$tcl_ok" = "yes"; then + # The space is needed + THREADS_LIBS=" -lpthread" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lpthreads" >&5 +$as_echo_n "checking for pthread_mutex_init in -lpthreads... " >&6; } +if ${ac_cv_lib_pthreads_pthread_mutex_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthreads $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_mutex_init (); +int +main () +{ +return pthread_mutex_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthreads_pthread_mutex_init=yes +else + ac_cv_lib_pthreads_pthread_mutex_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthreads_pthread_mutex_init" >&5 +$as_echo "$ac_cv_lib_pthreads_pthread_mutex_init" >&6; } +if test "x$ac_cv_lib_pthreads_pthread_mutex_init" = xyes; then : + tcl_ok=yes +else + tcl_ok=no +fi + + if test "$tcl_ok" = "yes"; then + # The space is needed + THREADS_LIBS=" -lpthreads" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lc" >&5 +$as_echo_n "checking for pthread_mutex_init in -lc... " >&6; } +if ${ac_cv_lib_c_pthread_mutex_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_mutex_init (); +int +main () +{ +return pthread_mutex_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_c_pthread_mutex_init=yes +else + ac_cv_lib_c_pthread_mutex_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_pthread_mutex_init" >&5 +$as_echo "$ac_cv_lib_c_pthread_mutex_init" >&6; } +if test "x$ac_cv_lib_c_pthread_mutex_init" = xyes; then : + tcl_ok=yes +else + tcl_ok=no +fi + + if test "$tcl_ok" = "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lc_r" >&5 +$as_echo_n "checking for pthread_mutex_init in -lc_r... " >&6; } +if ${ac_cv_lib_c_r_pthread_mutex_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lc_r $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_mutex_init (); +int +main () +{ +return pthread_mutex_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_c_r_pthread_mutex_init=yes +else + ac_cv_lib_c_r_pthread_mutex_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_mutex_init" >&5 +$as_echo "$ac_cv_lib_c_r_pthread_mutex_init" >&6; } +if test "x$ac_cv_lib_c_r_pthread_mutex_init" = xyes; then : + tcl_ok=yes +else + tcl_ok=no +fi + + if test "$tcl_ok" = "yes"; then + # The space is needed + THREADS_LIBS=" -pthread" + else + TCL_THREADS=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Don t know how to find pthread lib on your system - thread support disabled\"" >&5 +$as_echo "$as_me: WARNING: \"Don t know how to find pthread lib on your system - thread support disabled\"" >&2;} + fi + fi + fi + fi + + fi + else + TCL_THREADS=0 + fi + # Do checking message here to not mess up interleaved configure output + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for building with threads" >&5 +$as_echo_n "checking for building with threads... " >&6; } + if test "${TCL_THREADS}" = "1"; then + +$as_echo "#define TCL_THREADS 1" >>confdefs.h + + #LIBS="$LIBS $THREADS_LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (default)" >&5 +$as_echo "yes (default)" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + # TCL_THREADS sanity checking. See if our request for building with + # threads is the same as the way Tcl was built. If not, warn the user. + case ${TCL_DEFS} in + *THREADS=1*) + if test "${TCL_THREADS}" = "0"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: + Building ${PACKAGE_NAME} without threads enabled, but building against Tcl + that IS thread-enabled. It is recommended to use --enable-threads." >&5 +$as_echo "$as_me: WARNING: + Building ${PACKAGE_NAME} without threads enabled, but building against Tcl + that IS thread-enabled. It is recommended to use --enable-threads." >&2;} + fi + ;; + *) + if test "${TCL_THREADS}" = "1"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: + --enable-threads requested, but building against a Tcl that is NOT + thread-enabled. This is an OK configuration that will also run in + a thread-enabled core." >&5 +$as_echo "$as_me: WARNING: + --enable-threads requested, but building against a Tcl that is NOT + thread-enabled. This is an OK configuration that will also run in + a thread-enabled core." >&2;} + fi + ;; + esac + + + +#-------------------------------------------------------------------- +# The statement below defines a collection of symbols related to +# building as a shared library instead of a static library. +#-------------------------------------------------------------------- + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to build libraries" >&5 +$as_echo_n "checking how to build libraries... " >&6; } + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; tcl_ok=$enableval +else + tcl_ok=yes +fi + + + if test "${enable_shared+set}" = set; then + enableval="$enable_shared" + tcl_ok=$enableval + else + tcl_ok=yes + fi + + if test "$tcl_ok" = "yes" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: shared" >&5 +$as_echo "shared" >&6; } + SHARED_BUILD=1 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: static" >&5 +$as_echo "static" >&6; } + SHARED_BUILD=0 + +$as_echo "#define STATIC_BUILD 1" >>confdefs.h + + fi + + + +#-------------------------------------------------------------------- +# This macro figures out what flags to use with the compiler/linker +# when building shared/static debug/optimized objects. This information +# can be taken from the tclConfig.sh file, but this figures it all out. +#-------------------------------------------------------------------- + + + + + # Step 0: Enable 64 bit support? + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 64bit support is enabled" >&5 +$as_echo_n "checking if 64bit support is enabled... " >&6; } + # Check whether --enable-64bit was given. +if test "${enable_64bit+set}" = set; then : + enableval=$enable_64bit; do64bit=$enableval +else + do64bit=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $do64bit" >&5 +$as_echo "$do64bit" >&6; } + + # Step 0.b: Enable Solaris 64 bit VIS support? + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 64bit Sparc VIS support is requested" >&5 +$as_echo_n "checking if 64bit Sparc VIS support is requested... " >&6; } + # Check whether --enable-64bit-vis was given. +if test "${enable_64bit_vis+set}" = set; then : + enableval=$enable_64bit_vis; do64bitVIS=$enableval +else + do64bitVIS=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $do64bitVIS" >&5 +$as_echo "$do64bitVIS" >&6; } + + if test "$do64bitVIS" = "yes"; then + # Force 64bit on with VIS + do64bit=yes + fi + + # Step 0.c: Cross-compiling options for Windows/CE builds? + + if test "${TEA_PLATFORM}" = "windows" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Windows/CE build is requested" >&5 +$as_echo_n "checking if Windows/CE build is requested... " >&6; } + # Check whether --enable-wince was given. +if test "${enable_wince+set}" = set; then : + enableval=$enable_wince; doWince=$enableval +else + doWince=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $doWince" >&5 +$as_echo "$doWince" >&6; } + fi + + # Step 1: set the variable "system" to hold the name and version number + # for the system. This can usually be done via the "uname" command, but + # there are a few systems, like Next, where this doesn't work. + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking system version (for dynamic loading)" >&5 +$as_echo_n "checking system version (for dynamic loading)... " >&6; } + if test -f /usr/lib/NextStep/software_version; then + system=NEXTSTEP-`awk '/3/,/3/' /usr/lib/NextStep/software_version` + else + system=`uname -s`-`uname -r` + if test "$?" -ne 0 ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown (can't find uname command)" >&5 +$as_echo "unknown (can't find uname command)" >&6; } + system=unknown + else + # Special check for weird MP-RAS system (uname returns weird + # results, and the version is kept in special file). + + if test -r /etc/.relid -a "X`uname -n`" = "X`uname -s`" ; then + system=MP-RAS-`awk '{print }' /etc/.relid` + fi + if test "`uname -s`" = "AIX" ; then + system=AIX-`uname -v`.`uname -r` + fi + if test "${TEA_PLATFORM}" = "windows" ; then + system=windows + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $system" >&5 +$as_echo "$system" >&6; } + fi + fi + + # Step 2: check for existence of -ldl library. This is needed because + # Linux can use either -ldl or -ldld for dynamic loading. + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + have_dl=yes +else + have_dl=no +fi + + + # Step 3: set configuration options based on system name and version. + # This is similar to Tcl's unix/tcl.m4 except that we've added a + # "windows" case and CC_SEARCH_FLAGS becomes LD_SEARCH_FLAGS for us + # (and we have no CC_SEARCH_FLAGS). + + do64bit_ok=no + LDFLAGS_ORIG="$LDFLAGS" + TCL_EXPORT_FILE_SUFFIX="" + UNSHARED_LIB_SUFFIX="" + TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' + ECHO_VERSION='`echo ${PACKAGE_VERSION}`' + TCL_LIB_VERSIONS_OK=ok + CFLAGS_DEBUG=-g + if test "$GCC" = "yes" ; then + CFLAGS_OPTIMIZE=-O2 + CFLAGS_WARNING="-Wall -Wno-implicit-int" + else + CFLAGS_OPTIMIZE=-O + CFLAGS_WARNING="" + fi + TCL_NEEDS_EXP_FILE=0 + TCL_BUILD_EXP_FILE="" + TCL_EXP_FILE="" + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + STLIB_LD='${AR} cr' + LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" + case $system in + windows) + # This is a 2-stage check to make sure we have the 64-bit SDK + # We have to know where the SDK is installed. + # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs + # MACHINE is IX86 for LINK, but this is used by the manifest, + # which requires x86|amd64|ia64. + MACHINE="X86" + if test "$do64bit" != "no" ; then + if test "x${MSSDK}x" = "xx" ; then + MSSDK="C:/Progra~1/Microsoft Platform SDK" + fi + MSSDK=`echo "$MSSDK" | sed -e 's!\\\!/!g'` + PATH64="" + case "$do64bit" in + amd64|x64|yes) + MACHINE="AMD64" ; # default to AMD64 64-bit build + PATH64="${MSSDK}/Bin/Win64/x86/AMD64" + ;; + ia64) + MACHINE="IA64" + PATH64="${MSSDK}/Bin/Win64" + ;; + esac + if test ! -d "${PATH64}" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find 64-bit $MACHINE SDK to enable 64bit mode" >&5 +$as_echo "$as_me: WARNING: Could not find 64-bit $MACHINE SDK to enable 64bit mode" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ensure latest Platform SDK is installed" >&5 +$as_echo "$as_me: WARNING: Ensure latest Platform SDK is installed" >&2;} + do64bit="no" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using 64-bit $MACHINE mode" >&5 +$as_echo " Using 64-bit $MACHINE mode" >&6; } + do64bit_ok="yes" + fi + fi + + if test "$doWince" != "no" ; then + if test "$do64bit" != "no" ; then + as_fn_error $? "Windows/CE and 64-bit builds incompatible" "$LINENO" 5 + fi + if test "$GCC" = "yes" ; then + as_fn_error $? "Windows/CE and GCC builds incompatible" "$LINENO" 5 + fi + + # First, look for one uninstalled. + # the alternative search directory is invoked by --with-celib + + if test x"${no_celib}" = x ; then + # we reset no_celib in case something fails here + no_celib=true + +# Check whether --with-celib was given. +if test "${with_celib+set}" = set; then : + withval=$with_celib; with_celibconfig=${withval} +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Windows/CE celib directory" >&5 +$as_echo_n "checking for Windows/CE celib directory... " >&6; } + if ${ac_cv_c_celibconfig+:} false; then : + $as_echo_n "(cached) " >&6 +else + + # First check to see if --with-celibconfig was specified. + if test x"${with_celibconfig}" != x ; then + if test -d "${with_celibconfig}/inc" ; then + ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)` + else + as_fn_error $? "${with_celibconfig} directory doesn't contain inc directory" "$LINENO" 5 + fi + fi + + # then check for a celib library + if test x"${ac_cv_c_celibconfig}" = x ; then + for i in \ + ../celib-palm-3.0 \ + ../celib \ + ../../celib-palm-3.0 \ + ../../celib \ + `ls -dr ../celib-*3.[0-9]* 2>/dev/null` \ + ${srcdir}/../celib-palm-3.0 \ + ${srcdir}/../celib \ + `ls -dr ${srcdir}/../celib-*3.[0-9]* 2>/dev/null` \ + ; do + if test -d "$i/inc" ; then + ac_cv_c_celibconfig=`(cd $i; pwd)` + break + fi + done + fi + +fi + + if test x"${ac_cv_c_celibconfig}" = x ; then + as_fn_error $? "Cannot find celib support library directory" "$LINENO" 5 + else + no_celib= + CELIB_DIR=${ac_cv_c_celibconfig} + CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found $CELIB_DIR" >&5 +$as_echo "found $CELIB_DIR" >&6; } + fi + fi + + # Set defaults for common evc4/PPC2003 setup + # Currently Tcl requires 300+, possibly 420+ for sockets + CEVERSION=420; # could be 211 300 301 400 420 ... + TARGETCPU=ARMV4; # could be ARMV4 ARM MIPS SH3 X86 ... + ARCH=ARM; # could be ARM MIPS X86EM ... + PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002" + if test "$doWince" != "yes"; then + # If !yes then the user specified something + # Reset ARCH to allow user to skip specifying it + ARCH= + eval `echo $doWince | awk -F, '{ \ + if (length($1)) { printf "CEVERSION=\"%s\"\n", $1; \ + if ($1 < 400) { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \ + if (length($2)) { printf "TARGETCPU=\"%s\"\n", toupper($2) }; \ + if (length($3)) { printf "ARCH=\"%s\"\n", toupper($3) }; \ + if (length($4)) { printf "PLATFORM=\"%s\"\n", $4 }; \ + }'` + if test "x${ARCH}" = "x" ; then + ARCH=$TARGETCPU; + fi + fi + OSVERSION=WCE$CEVERSION; + if test "x${WCEROOT}" = "x" ; then + WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0" + if test ! -d "${WCEROOT}" ; then + WCEROOT="C:/Program Files/Microsoft eMbedded Tools" + fi + fi + if test "x${SDKROOT}" = "x" ; then + SDKROOT="C:/Program Files/Windows CE Tools" + if test ! -d "${SDKROOT}" ; then + SDKROOT="C:/Windows CE Tools" + fi + fi + WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'` + SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'` + if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \ + -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then + as_fn_error $? "could not find PocketPC SDK or target compiler to enable WinCE mode $CEVERSION,$TARGETCPU,$ARCH,$PLATFORM" "$LINENO" 5 + doWince="no" + else + # We could PATH_NOSPACE these, but that's not important, + # as long as we quote them when used. + CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include" + if test -d "${CEINCLUDE}/${TARGETCPU}" ; then + CEINCLUDE="${CEINCLUDE}/${TARGETCPU}" + fi + CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" + fi + fi + + if test "$GCC" != "yes" ; then + if test "${SHARED_BUILD}" = "0" ; then + runtime=-MT + else + runtime=-MD + fi + + if test "$do64bit" != "no" ; then + # All this magic is necessary for the Win64 SDK RC1 - hobbs + CC="\"${PATH64}/cl.exe\"" + CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\"" + RC="\"${MSSDK}/bin/rc.exe\"" + lflags="-nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\"" + LINKBIN="\"${PATH64}/link.exe\"" + CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d" + CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" + # Avoid 'unresolved external symbol __security_cookie' + # errors, c.f. http://support.microsoft.com/?id=894573 + + vars="bufferoverflowU.lib" + for i in $vars; do + if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then + # Convert foo.lib to -lfoo for GCC. No-op if not *.lib + i=`echo "$i" | sed -e 's/^\([^-].*\)\.lib$/-l\1/i'` + fi + PKG_LIBS="$PKG_LIBS $i" + done + + + elif test "$doWince" != "no" ; then + CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin" + if test "${TARGETCPU}" = "X86"; then + CC="\"${CEBINROOT}/cl.exe\"" + else + CC="\"${CEBINROOT}/cl${ARCH}.exe\"" + fi + CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\"" + RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\"" + arch=`echo ${ARCH} | awk '{print tolower($0)}'` + defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS" + if test "${SHARED_BUILD}" = "1" ; then + # Static CE builds require static celib as well + defs="${defs} _DLL" + fi + for i in $defs ; do + +cat >>confdefs.h <<_ACEOF +#define $i 1 +_ACEOF + + done + +cat >>confdefs.h <<_ACEOF +#define _WIN32_WCE $CEVERSION +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define UNDER_CE $CEVERSION +_ACEOF + + CFLAGS_DEBUG="-nologo -Zi -Od" + CFLAGS_OPTIMIZE="-nologo -Ox" + lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` + lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" + LINKBIN="\"${CEBINROOT}/link.exe\"" + + else + RC="rc" + lflags="-nologo" + LINKBIN="link" + CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" + CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" + fi + fi + + if test "$GCC" = "yes"; then + # mingw gcc mode + RC="windres" + CFLAGS_DEBUG="-g" + CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" + SHLIB_LD="$CC -shared" + UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' + LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" + LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" + else + SHLIB_LD="${LINKBIN} -dll ${lflags}" + # link -lib only works when -lib is the first arg + STLIB_LD="${LINKBIN} -lib ${lflags}" + UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' + PATHTYPE=-w + # For information on what debugtype is most useful, see: + # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp + # This essentially turns it all on. + LDFLAGS_DEBUG="-debug:full -debugtype:both -warn:2" + LDFLAGS_OPTIMIZE="-release" + if test "$doWince" != "no" ; then + LDFLAGS_CONSOLE="-link ${lflags}" + LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} + else + LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" + LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" + fi + fi + + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".dll" + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' + + TCL_LIB_VERSIONS_OK=nodots + # Bogus to avoid getting this turned off + DL_OBJS="tclLoadNone.obj" + ;; + AIX-*) + if test "${TCL_THREADS}" = "1" -a "$GCC" != "yes" ; then + # AIX requires the _r compiler when gcc isn't being used + case "${CC}" in + *_r) + # ok ... + ;; + *) + CC=${CC}_r + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using $CC for compiling with threads" >&5 +$as_echo "Using $CC for compiling with threads" >&6; } + fi + LIBS="$LIBS -lc" + SHLIB_CFLAGS="" + SHLIB_SUFFIX=".so" + SHLIB_LD_LIBS='${LIBS}' + + DL_OBJS="tclLoadDl.o" + LD_LIBRARY_PATH_VAR="LIBPATH" + + # AIX v<=4.1 has some different flags than 4.2+ + if test "$system" = "AIX-4.1" -o "`uname -v`" -lt "4" ; then + #LIBOBJS="$LIBOBJS tclLoadAix.o" + case " $LIBOBJS " in + *" tclLoadAix.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS tclLoadAix.$ac_objext" + ;; +esac + + DL_LIBS="-lld" + fi + + # Check to enable 64-bit flags for compiler/linker on AIX 4+ + if test "$do64bit" = "yes" -a "`uname -v`" -gt "3" ; then + if test "$GCC" = "yes" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"64bit mode not supported with GCC on $system\"" >&5 +$as_echo "$as_me: WARNING: \"64bit mode not supported with GCC on $system\"" >&2;} + else + do64bit_ok=yes + CFLAGS="$CFLAGS -q64" + LDFLAGS="$LDFLAGS -q64" + RANLIB="${RANLIB} -X64" + AR="${AR} -X64" + SHLIB_LD_FLAGS="-b64" + fi + fi + + if test "`uname -m`" = "ia64" ; then + # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC + SHLIB_LD="/usr/ccs/bin/ld -G -z text" + # AIX-5 has dl* in libc.so + DL_LIBS="" + if test "$GCC" = "yes" ; then + LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' + else + LD_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' + fi + else + if test "$GCC" = "yes" ; then + SHLIB_LD="gcc -shared" + else + SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bE:lib.exp -H512 -T512 -bnoentry" + fi + SHLIB_LD="${TCL_SRC_DIR}/unix/ldAix ${SHLIB_LD} ${SHLIB_LD_FLAGS}" + DL_LIBS="-ldl" + LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + TCL_NEEDS_EXP_FILE=1 + TCL_EXPORT_FILE_SUFFIX='${PACKAGE_VERSION}.exp' + fi + + # On AIX <=v4 systems, libbsd.a has to be linked in to support + # non-blocking file IO. This library has to be linked in after + # the MATH_LIBS or it breaks the pow() function. The way to + # insure proper sequencing, is to add it to the tail of MATH_LIBS. + # This library also supplies gettimeofday. + # + # AIX does not have a timezone field in struct tm. When the AIX + # bsd library is used, the timezone global and the gettimeofday + # methods are to be avoided for timezone deduction instead, we + # deduce the timezone by comparing the localtime result on a + # known GMT value. + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gettimeofday in -lbsd" >&5 +$as_echo_n "checking for gettimeofday in -lbsd... " >&6; } +if ${ac_cv_lib_bsd_gettimeofday+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbsd $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gettimeofday (); +int +main () +{ +return gettimeofday (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_bsd_gettimeofday=yes +else + ac_cv_lib_bsd_gettimeofday=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gettimeofday" >&5 +$as_echo "$ac_cv_lib_bsd_gettimeofday" >&6; } +if test "x$ac_cv_lib_bsd_gettimeofday" = xyes; then : + libbsd=yes +else + libbsd=no +fi + + if test $libbsd = yes; then + MATH_LIBS="$MATH_LIBS -lbsd" + +$as_echo "#define USE_DELTA_FOR_TZ 1" >>confdefs.h + + fi + ;; + BeOS*) + SHLIB_CFLAGS="-fPIC" + SHLIB_LD="${CC} -nostart" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + ;; + BSD/OS-2.1*|BSD/OS-3*) + SHLIB_CFLAGS="" + SHLIB_LD="shlicc -r" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LD_SEARCH_FLAGS="" + ;; + BSD/OS-4.*) + SHLIB_CFLAGS="-export-dynamic -fPIC" + SHLIB_LD="cc -shared" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LDFLAGS="$LDFLAGS -export-dynamic" + LD_SEARCH_FLAGS="" + ;; + dgux*) + SHLIB_CFLAGS="-K PIC" + SHLIB_LD="cc -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LD_SEARCH_FLAGS="" + ;; + HP-UX-*.11.*) + # Use updated header definitions where possible + +$as_echo "#define _XOPEN_SOURCE_EXTENDED 1" >>confdefs.h + + + SHLIB_SUFFIX=".sl" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + tcl_ok=yes +else + tcl_ok=no +fi + + if test "$tcl_ok" = yes; then + SHLIB_CFLAGS="+z" + SHLIB_LD="ld -b" + SHLIB_LD_LIBS='${LIBS}' + DL_OBJS="tclLoadShl.o" + DL_LIBS="-ldld" + LDFLAGS="$LDFLAGS -Wl,-E" + LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' + LD_LIBRARY_PATH_VAR="SHLIB_PATH" + fi + if test "$GCC" = "yes" ; then + SHLIB_LD="gcc -shared" + SHLIB_LD_LIBS='${LIBS}' + LD_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' + fi + + # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc + #CFLAGS="$CFLAGS +DAportable" + + # Check to enable 64-bit flags for compiler/linker + if test "$do64bit" = "yes" ; then + if test "$GCC" = "yes" ; then + hpux_arch=`${CC} -dumpmachine` + case $hpux_arch in + hppa64*) + # 64-bit gcc in use. Fix flags for GNU ld. + do64bit_ok=yes + SHLIB_LD="${CC} -shared" + SHLIB_LD_LIBS='${LIBS}' + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"64bit mode not supported with GCC on $system\"" >&5 +$as_echo "$as_me: WARNING: \"64bit mode not supported with GCC on $system\"" >&2;} + ;; + esac + else + do64bit_ok=yes + CFLAGS="$CFLAGS +DD64" + LDFLAGS="$LDFLAGS +DD64" + fi + fi + ;; + HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*) + SHLIB_SUFFIX=".sl" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + tcl_ok=yes +else + tcl_ok=no +fi + + if test "$tcl_ok" = yes; then + SHLIB_CFLAGS="+z" + SHLIB_LD="ld -b" + SHLIB_LD_LIBS="" + DL_OBJS="tclLoadShl.o" + DL_LIBS="-ldld" + LDFLAGS="$LDFLAGS -Wl,-E" + LD_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' + fi + LD_LIBRARY_PATH_VAR="SHLIB_PATH" + ;; + IRIX-4.*) + SHLIB_CFLAGS="-G 0" + SHLIB_SUFFIX=".a" + SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0" + SHLIB_LD_LIBS='${LIBS}' + DL_OBJS="tclLoadAout.o" + DL_LIBS="" + LDFLAGS="$LDFLAGS -Wl,-D,08000000" + LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + SHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a' + ;; + IRIX-5.*) + SHLIB_CFLAGS="" + SHLIB_LD="ld -shared -rdata_shared" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + ;; + IRIX-6.*|IRIX64-6.5*) + SHLIB_CFLAGS="" + SHLIB_LD="ld -n32 -shared -rdata_shared" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + if test "$GCC" = "yes" ; then + CFLAGS="$CFLAGS -mabi=n32" + LDFLAGS="$LDFLAGS -mabi=n32" + else + case $system in + IRIX-6.3) + # Use to build 6.2 compatible binaries on 6.3. + CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS" + ;; + *) + CFLAGS="$CFLAGS -n32" + ;; + esac + LDFLAGS="$LDFLAGS -n32" + fi + ;; + IRIX64-6.*) + SHLIB_CFLAGS="" + SHLIB_LD="ld -n32 -shared -rdata_shared" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + + # Check to enable 64-bit flags for compiler/linker + + if test "$do64bit" = "yes" ; then + if test "$GCC" = "yes" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported by gcc" >&5 +$as_echo "$as_me: WARNING: 64bit mode not supported by gcc" >&2;} + else + do64bit_ok=yes + SHLIB_LD="ld -64 -shared -rdata_shared" + CFLAGS="$CFLAGS -64" + LDFLAGS="$LDFLAGS -64" + fi + fi + ;; + Linux*) + SHLIB_CFLAGS="-fPIC" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + + CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" + # egcs-2.91.66 on Redhat Linux 6.0 generates lots of warnings + # when you inline the string and math operations. Turn this off to + # get rid of the warnings. + + #CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D__NO_STRING_INLINES -D__NO_MATH_INLINES" + + if test "$have_dl" = yes; then + SHLIB_LD="${CC} -shared" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LDFLAGS="$LDFLAGS -Wl,--export-dynamic" + LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + else + ac_fn_c_check_header_mongrel "$LINENO" "dld.h" "ac_cv_header_dld_h" "$ac_includes_default" +if test "x$ac_cv_header_dld_h" = xyes; then : + + SHLIB_LD="ld -shared" + DL_OBJS="tclLoadDld.o" + DL_LIBS="-ldld" + LD_SEARCH_FLAGS="" +fi + + + fi + if test "`uname -m`" = "alpha" ; then + CFLAGS="$CFLAGS -mieee" + fi + + # The combo of gcc + glibc has a bug related + # to inlining of functions like strtod(). The + # -fno-builtin flag should address this problem + # but it does not work. The -fno-inline flag + # is kind of overkill but it works. + # Disable inlining only when one of the + # files in compat/*.c is being linked in. + if test x"${USE_COMPAT}" != x ; then + CFLAGS="$CFLAGS -fno-inline" + fi + + ;; + GNU*) + SHLIB_CFLAGS="-fPIC" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + + if test "$have_dl" = yes; then + SHLIB_LD="${CC} -shared" + DL_OBJS="" + DL_LIBS="-ldl" + LDFLAGS="$LDFLAGS -Wl,--export-dynamic" + LD_SEARCH_FLAGS="" + else + ac_fn_c_check_header_mongrel "$LINENO" "dld.h" "ac_cv_header_dld_h" "$ac_includes_default" +if test "x$ac_cv_header_dld_h" = xyes; then : + + SHLIB_LD="ld -shared" + DL_OBJS="" + DL_LIBS="-ldld" + LD_SEARCH_FLAGS="" +fi + + + fi + if test "`uname -m`" = "alpha" ; then + CFLAGS="$CFLAGS -mieee" + fi + ;; + MP-RAS-02*) + SHLIB_CFLAGS="-K PIC" + SHLIB_LD="cc -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LD_SEARCH_FLAGS="" + ;; + MP-RAS-*) + SHLIB_CFLAGS="-K PIC" + SHLIB_LD="cc -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LDFLAGS="$LDFLAGS -Wl,-Bexport" + LD_SEARCH_FLAGS="" + ;; + NetBSD-*|FreeBSD-[1-2].*) + # Not available on all versions: check for include file. + ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + + # NetBSD/SPARC needs -fPIC, -fpic will not do. + SHLIB_CFLAGS="-fPIC" + SHLIB_LD="ld -Bshareable -x" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ELF" >&5 +$as_echo_n "checking for ELF... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __ELF__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so' +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.1.0' + +fi +rm -f conftest* + + +else + + SHLIB_CFLAGS="" + SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".a" + DL_OBJS="tclLoadAout.o" + DL_LIBS="" + LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' + +fi + + + + # FreeBSD doesn't handle version numbers with dots. + + UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' + TCL_LIB_VERSIONS_OK=nodots + ;; + OpenBSD-*) + SHLIB_LD="${CC} -shared" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LD_SEARCH_FLAGS="" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ELF" >&5 +$as_echo_n "checking for ELF... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __ELF__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.1.0' +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.1.0' + +fi +rm -f conftest* + + + # OpenBSD doesn't do version numbers with dots. + UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' + TCL_LIB_VERSIONS_OK=nodots + ;; + FreeBSD-*) + # FreeBSD 3.* and greater have ELF. + SHLIB_CFLAGS="-fPIC" + SHLIB_LD="ld -Bshareable -x" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LDFLAGS="$LDFLAGS -export-dynamic" + LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + if test "${TCL_THREADS}" = "1" ; then + # The -pthread needs to go in the CFLAGS, not LIBS + LIBS=`echo $LIBS | sed s/-pthread//` + CFLAGS="$CFLAGS -pthread" + LDFLAGS="$LDFLAGS -pthread" + fi + case $system in + FreeBSD-3.*) + # FreeBSD-3 doesn't handle version numbers with dots. + UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so' + TCL_LIB_VERSIONS_OK=nodots + ;; + esac + ;; + Darwin-*) + CFLAGS_OPTIMIZE="-Os" + SHLIB_CFLAGS="-fno-common" + if test $do64bit = yes; then + do64bit_ok=yes + CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" + fi + SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS}' + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ld accepts -single_module flag" >&5 +$as_echo_n "checking if ld accepts -single_module flag... " >&6; } +if ${tcl_cv_ld_single_module+:} false; then : + $as_echo_n "(cached) " >&6 +else + + hold_ldflags=$LDFLAGS + LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +int i; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + tcl_cv_ld_single_module=yes +else + tcl_cv_ld_single_module=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$hold_ldflags +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_single_module" >&5 +$as_echo "$tcl_cv_ld_single_module" >&6; } + if test $tcl_cv_ld_single_module = yes; then + SHLIB_LD="${SHLIB_LD} -Wl,-single_module" + fi + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".dylib" + DL_OBJS="tclLoadDyld.o" + DL_LIBS="" + # Don't use -prebind when building for Mac OS X 10.4 or later only: + test -z "${MACOSX_DEPLOYMENT_TARGET}" || \ + test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F. '{print $2}'`" -lt 4 && \ + LDFLAGS="$LDFLAGS -prebind" + LDFLAGS="$LDFLAGS -headerpad_max_install_names" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ld accepts -search_paths_first flag" >&5 +$as_echo_n "checking if ld accepts -search_paths_first flag... " >&6; } +if ${tcl_cv_ld_search_paths_first+:} false; then : + $as_echo_n "(cached) " >&6 +else + + hold_ldflags=$LDFLAGS + LDFLAGS="$LDFLAGS -Wl,-search_paths_first" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +int i; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + tcl_cv_ld_search_paths_first=yes +else + tcl_cv_ld_search_paths_first=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$hold_ldflags +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_search_paths_first" >&5 +$as_echo "$tcl_cv_ld_search_paths_first" >&6; } + if test $tcl_cv_ld_search_paths_first = yes; then + LDFLAGS="$LDFLAGS -Wl,-search_paths_first" + fi + LD_SEARCH_FLAGS="" + LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" + ;; + NEXTSTEP-*) + SHLIB_CFLAGS="" + SHLIB_LD="cc -nostdlib -r" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadNext.o" + DL_LIBS="" + LD_SEARCH_FLAGS="" + ;; + OS/390-*) + CFLAGS_OPTIMIZE="" # Optimizer is buggy + +$as_echo "#define _OE_SOCKETS 1" >>confdefs.h + + ;; + OSF1-1.0|OSF1-1.1|OSF1-1.2) + # OSF/1 1.[012] from OSF, and derivatives, including Paragon OSF/1 + SHLIB_CFLAGS="" + # Hack: make package name same as library name + SHLIB_LD='ld -R -export :' + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadOSF.o" + DL_LIBS="" + LD_SEARCH_FLAGS="" + ;; + OSF1-1.*) + # OSF/1 1.3 from OSF using ELF, and derivatives, including AD2 + SHLIB_CFLAGS="-fPIC" + if test "$SHARED_BUILD" = "1" ; then + SHLIB_LD="ld -shared" + else + SHLIB_LD="ld -non_shared" + fi + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LD_SEARCH_FLAGS="" + ;; + OSF1-V*) + # Digital OSF/1 + SHLIB_CFLAGS="" + if test "$SHARED_BUILD" = "1" ; then + SHLIB_LD="${CC} -shared" + else + SHLIB_LD="${CC} -non_shared" + fi + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' + if test "$GCC" = "yes" ; then + CFLAGS="$CFLAGS -mieee" + else + CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee" + fi + # see pthread_intro(3) for pthread support on osf1, k.furukawa + if test "${TCL_THREADS}" = "1" ; then + CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE" + CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64" + LIBS=`echo $LIBS | sed s/-lpthreads//` + if test "$GCC" = "yes" ; then + LIBS="$LIBS -lpthread -lmach -lexc" + else + CFLAGS="$CFLAGS -pthread" + LDFLAGS="$LDFLAGS -pthread" + fi + fi + + ;; + QNX-6*) + # QNX RTP + # This may work for all QNX, but it was only reported for v6. + SHLIB_CFLAGS="-fPIC" + SHLIB_LD="ld -Bshareable -x" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + # dlopen is in -lc on QNX + DL_LIBS="" + LD_SEARCH_FLAGS="" + ;; + RISCos-*) + SHLIB_CFLAGS="-G 0" + SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".a" + DL_OBJS="tclLoadAout.o" + DL_LIBS="" + LDFLAGS="$LDFLAGS -Wl,-D,08000000" + LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + ;; + SCO_SV-3.2*) + # Note, dlopen is available only on SCO 3.2.5 and greater. However, + # this test works, since "uname -s" was non-standard in 3.2.4 and + # below. + if test "$GCC" = "yes" ; then + SHLIB_CFLAGS="-fPIC -melf" + LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" + else + SHLIB_CFLAGS="-Kpic -belf" + LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" + fi + SHLIB_LD="ld -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LD_SEARCH_FLAGS="" + ;; + SINIX*5.4*) + SHLIB_CFLAGS="-K PIC" + SHLIB_LD="cc -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LD_SEARCH_FLAGS="" + ;; + SunOS-4*) + SHLIB_CFLAGS="-PIC" + SHLIB_LD="ld" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + + # SunOS can't handle version numbers with dots in them in library + # specs, like -ltcl7.5, so use -ltcl75 instead. Also, it + # requires an extra version number at the end of .so file names. + # So, the library has to have a name like libtcl75.so.1.0 + + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.1.0' + UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' + TCL_LIB_VERSIONS_OK=nodots + ;; + SunOS-5.[0-6]) + # Careful to not let 5.10+ fall into this case + + # Note: If _REENTRANT isn't defined, then Solaris + # won't define thread-safe library routines. + + +$as_echo "#define _REENTRANT 1" >>confdefs.h + + +$as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + + + SHLIB_CFLAGS="-KPIC" + + # Note: need the LIBS below, otherwise Tk won't find Tcl's + # symbols when dynamically loaded into tclsh. + + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + if test "$GCC" = "yes" ; then + SHLIB_LD="$CC -shared" + LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' + else + SHLIB_LD="/usr/ccs/bin/ld -G -z text" + LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' + fi + ;; + SunOS-5*) + + # Note: If _REENTRANT isn't defined, then Solaris + # won't define thread-safe library routines. + + +$as_echo "#define _REENTRANT 1" >>confdefs.h + + +$as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + + + SHLIB_CFLAGS="-KPIC" + + # Check to enable 64-bit flags for compiler/linker + if test "$do64bit" = "yes" ; then + arch=`isainfo` + if test "$arch" = "sparcv9 sparc" ; then + if test "$GCC" = "yes" ; then + if test "`gcc -dumpversion` | awk -F. '{print }'" -lt "3" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&5 +$as_echo "$as_me: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&2;} + else + do64bit_ok=yes + CFLAGS="$CFLAGS -m64 -mcpu=v9" + LDFLAGS="$LDFLAGS -m64 -mcpu=v9" + SHLIB_CFLAGS="-fPIC" + fi + else + do64bit_ok=yes + if test "$do64bitVIS" = "yes" ; then + CFLAGS="$CFLAGS -xarch=v9a" + LDFLAGS="$LDFLAGS -xarch=v9a" + else + CFLAGS="$CFLAGS -xarch=v9" + LDFLAGS="$LDFLAGS -xarch=v9" + fi + # Solaris 64 uses this as well + #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64" + fi + elif test "$arch" = "amd64 i386" ; then + if test "$GCC" = "yes" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5 +$as_echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;} + else + do64bit_ok=yes + CFLAGS="$CFLAGS -xarch=amd64" + LDFLAGS="$LDFLAGS -xarch=amd64" + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported for $arch" >&5 +$as_echo "$as_me: WARNING: 64bit mode not supported for $arch" >&2;} + fi + fi + + # Note: need the LIBS below, otherwise Tk won't find Tcl's + # symbols when dynamically loaded into tclsh. + + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + if test "$GCC" = "yes" ; then + SHLIB_LD="$CC -shared" + LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' + if test "$do64bit" = "yes" ; then + # We need to specify -static-libgcc or we need to + # add the path to the sparv9 libgcc. + # JH: static-libgcc is necessary for core Tcl, but may + # not be necessary for extensions. + SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc" + # for finding sparcv9 libgcc, get the regular libgcc + # path, remove so name and append 'sparcv9' + #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..." + #LD_SEARCH_FLAGS="${LD_SEARCH_FLAGS},-R,$v9gcclibdir" + fi + else + SHLIB_LD="/usr/ccs/bin/ld -G -z text" + LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' + fi + ;; + ULTRIX-4.*) + SHLIB_CFLAGS="-G 0" + SHLIB_SUFFIX=".a" + SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0" + SHLIB_LD_LIBS='${LIBS}' + DL_OBJS="tclLoadAout.o" + DL_LIBS="" + LDFLAGS="$LDFLAGS -Wl,-D,08000000" + LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + if test "$GCC" != "yes" ; then + CFLAGS="$CFLAGS -DHAVE_TZSET -std1" + fi + ;; + UNIX_SV* | UnixWare-5*) + SHLIB_CFLAGS="-KPIC" + SHLIB_LD="cc -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers + # that don't grok the -Bexport option. Test that it does. + hold_ldflags=$LDFLAGS + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld accepts -Bexport flag" >&5 +$as_echo_n "checking for ld accepts -Bexport flag... " >&6; } + LDFLAGS="$LDFLAGS -Wl,-Bexport" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +int i; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + found=yes +else + LDFLAGS=$hold_ldflags found=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $found" >&5 +$as_echo "$found" >&6; } + LD_SEARCH_FLAGS="" + ;; + esac + + if test "$do64bit" != "no" -a "$do64bit_ok" = "no" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit support being disabled -- don't know magic for this platform" >&5 +$as_echo "$as_me: WARNING: 64bit support being disabled -- don't know magic for this platform" >&2;} + fi + + # Step 4: If pseudo-static linking is in use (see K. B. Kenny, "Dynamic + # Loading for Tcl -- What Became of It?". Proc. 2nd Tcl/Tk Workshop, + # New Orleans, LA, Computerized Processes Unlimited, 1994), then we need + # to determine which of several header files defines the a.out file + # format (a.out.h, sys/exec.h, or sys/exec_aout.h). At present, we + # support only a file format that is more or less version-7-compatible. + # In particular, + # - a.out files must begin with `struct exec'. + # - the N_TXTOFF on the `struct exec' must compute the seek address + # of the text segment + # - The `struct exec' must contain a_magic, a_text, a_data, a_bss + # and a_entry fields. + # The following compilation should succeed if and only if either sys/exec.h + # or a.out.h is usable for the purpose. + # + # Note that the modified COFF format used on MIPS Ultrix 4.x is usable; the + # `struct exec' includes a second header that contains information that + # duplicates the v7 fields that are needed. + + if test "x$DL_OBJS" = "xtclLoadAout.o" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking sys/exec.h" >&5 +$as_echo_n "checking sys/exec.h... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ + + struct exec foo; + unsigned long seek; + int flag; +#if defined(__mips) || defined(mips) + seek = N_TXTOFF (foo.ex_f, foo.ex_o); +#else + seek = N_TXTOFF (foo); +#endif + flag = (foo.a_magic == OMAGIC); + return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + tcl_ok=usable +else + tcl_ok=unusable +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_ok" >&5 +$as_echo "$tcl_ok" >&6; } + if test $tcl_ok = usable; then + +$as_echo "#define USE_SYS_EXEC_H 1" >>confdefs.h + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking a.out.h" >&5 +$as_echo_n "checking a.out.h... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ + + struct exec foo; + unsigned long seek; + int flag; +#if defined(__mips) || defined(mips) + seek = N_TXTOFF (foo.ex_f, foo.ex_o); +#else + seek = N_TXTOFF (foo); +#endif + flag = (foo.a_magic == OMAGIC); + return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + tcl_ok=usable +else + tcl_ok=unusable +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_ok" >&5 +$as_echo "$tcl_ok" >&6; } + if test $tcl_ok = usable; then + +$as_echo "#define USE_A_OUT_H 1" >>confdefs.h + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking sys/exec_aout.h" >&5 +$as_echo_n "checking sys/exec_aout.h... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ + + struct exec foo; + unsigned long seek; + int flag; +#if defined(__mips) || defined(mips) + seek = N_TXTOFF (foo.ex_f, foo.ex_o); +#else + seek = N_TXTOFF (foo); +#endif + flag = (foo.a_midmag == OMAGIC); + return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + tcl_ok=usable +else + tcl_ok=unusable +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_ok" >&5 +$as_echo "$tcl_ok" >&6; } + if test $tcl_ok = usable; then + +$as_echo "#define USE_SYS_EXEC_AOUT_H 1" >>confdefs.h + + else + DL_OBJS="" + fi + fi + fi + fi + + # Step 5: disable dynamic loading if requested via a command-line switch. + + # Check whether --enable-load was given. +if test "${enable_load+set}" = set; then : + enableval=$enable_load; tcl_ok=$enableval +else + tcl_ok=yes +fi + + if test "$tcl_ok" = "no"; then + DL_OBJS="" + fi + + if test "x$DL_OBJS" != "x" ; then + BUILD_DLTEST="\$(DLTEST_TARGETS)" + else + echo "Can't figure out how to do dynamic loading or shared libraries" + echo "on this system." + SHLIB_CFLAGS="" + SHLIB_LD="" + SHLIB_SUFFIX="" + DL_OBJS="tclLoadNone.o" + DL_LIBS="" + LDFLAGS="$LDFLAGS_ORIG" + LD_SEARCH_FLAGS="" + BUILD_DLTEST="" + fi + + # If we're running gcc, then change the C flags for compiling shared + # libraries to the right flags for gcc, instead of those for the + # standard manufacturer compiler. + + if test "$DL_OBJS" != "tclLoadNone.o" ; then + if test "$GCC" = "yes" ; then + case $system in + AIX-*) + ;; + BSD/OS*) + ;; + IRIX*) + ;; + NetBSD-*|FreeBSD-*) + ;; + Darwin-*) + ;; + RISCos-*) + ;; + SCO_SV-3.2*) + ;; + ULTRIX-4.*) + ;; + windows) + ;; + *) + SHLIB_CFLAGS="-fPIC" + ;; + esac + fi + fi + + if test "$SHARED_LIB_SUFFIX" = "" ; then + SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}' + fi + if test "$UNSHARED_LIB_SUFFIX" = "" ; then + UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a' + fi + + + + + + + + + + + + + + + # These must be called after we do the basic CFLAGS checks and + # verify any possible 64-bit or similar switches are necessary + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for required early compiler flags" >&5 +$as_echo_n "checking for required early compiler flags... " >&6; } + tcl_flags="" + + if ${tcl_cv_flag__isoc99_source+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +char *p = (char *)strtoll; char *q = (char *)strtoull; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + tcl_cv_flag__isoc99_source=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _ISOC99_SOURCE 1 +#include +int +main () +{ +char *p = (char *)strtoll; char *q = (char *)strtoull; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + tcl_cv_flag__isoc99_source=yes +else + tcl_cv_flag__isoc99_source=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test "x${tcl_cv_flag__isoc99_source}" = "xyes" ; then + +$as_echo "#define _ISOC99_SOURCE 1" >>confdefs.h + + tcl_flags="$tcl_flags _ISOC99_SOURCE" + fi + + + if ${tcl_cv_flag__largefile64_source+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +struct stat64 buf; int i = stat64("/", &buf); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + tcl_cv_flag__largefile64_source=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGEFILE64_SOURCE 1 +#include +int +main () +{ +struct stat64 buf; int i = stat64("/", &buf); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + tcl_cv_flag__largefile64_source=yes +else + tcl_cv_flag__largefile64_source=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test "x${tcl_cv_flag__largefile64_source}" = "xyes" ; then + +$as_echo "#define _LARGEFILE64_SOURCE 1" >>confdefs.h + + tcl_flags="$tcl_flags _LARGEFILE64_SOURCE" + fi + + if test "x${tcl_flags}" = "x" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${tcl_flags}" >&5 +$as_echo "${tcl_flags}" >&6; } + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit integer type" >&5 +$as_echo_n "checking for 64-bit integer type... " >&6; } + if ${tcl_cv_type_64bit+:} false; then : + $as_echo_n "(cached) " >&6 +else + + tcl_cv_type_64bit=none + # See if the compiler knows natively about __int64 + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +__int64 value = (__int64) 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + tcl_type_64bit=__int64 +else + tcl_type_64bit="long long" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + # See if we should use long anyway Note that we substitute in the + # type that is our current guess for a 64-bit type inside this check + # program, so it should be modified only carefully... + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +switch (0) { + case 1: case (sizeof(${tcl_type_64bit})==sizeof(long)): ; + } + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + tcl_cv_type_64bit=${tcl_type_64bit} +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test "${tcl_cv_type_64bit}" = none ; then + +$as_echo "#define TCL_WIDE_INT_IS_LONG 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using long" >&5 +$as_echo "using long" >&6; } + elif test "${tcl_cv_type_64bit}" = "__int64" \ + -a "${TEA_PLATFORM}" = "windows" ; then + # We actually want to use the default tcl.h checks in this + # case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using Tcl header defaults" >&5 +$as_echo "using Tcl header defaults" >&6; } + else + +cat >>confdefs.h <<_ACEOF +#define TCL_WIDE_INT_TYPE ${tcl_cv_type_64bit} +_ACEOF + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${tcl_cv_type_64bit}" >&5 +$as_echo "${tcl_cv_type_64bit}" >&6; } + + # Now check for auxiliary declarations + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct dirent64" >&5 +$as_echo_n "checking for struct dirent64... " >&6; } + if ${tcl_cv_struct_dirent64+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +int +main () +{ +struct dirent64 p; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + tcl_cv_struct_dirent64=yes +else + tcl_cv_struct_dirent64=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then + +$as_echo "#define HAVE_STRUCT_DIRENT64 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${tcl_cv_struct_dirent64}" >&5 +$as_echo "${tcl_cv_struct_dirent64}" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct stat64" >&5 +$as_echo_n "checking for struct stat64... " >&6; } + if ${tcl_cv_struct_stat64+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +struct stat64 p; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + tcl_cv_struct_stat64=yes +else + tcl_cv_struct_stat64=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test "x${tcl_cv_struct_stat64}" = "xyes" ; then + +$as_echo "#define HAVE_STRUCT_STAT64 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${tcl_cv_struct_stat64}" >&5 +$as_echo "${tcl_cv_struct_stat64}" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for off64_t" >&5 +$as_echo_n "checking for off64_t... " >&6; } + if ${tcl_cv_type_off64_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +off64_t offset; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + tcl_cv_type_off64_t=yes +else + tcl_cv_type_off64_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test "x${tcl_cv_type_off64_t}" = "xyes" ; then + +$as_echo "#define HAVE_TYPE_OFF64_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${tcl_cv_type_off64_t}" >&5 +$as_echo "${tcl_cv_type_off64_t}" >&6; } + fi + + +# should be part of TEA_CONFIG_CFLAGS, but more visible modification here + + +#-------------------------------------------------------------------- +# Set the default compiler switches based on the --enable-symbols option. +#-------------------------------------------------------------------- + + + + + DBGX="" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for build with symbols" >&5 +$as_echo_n "checking for build with symbols... " >&6; } + # Check whether --enable-symbols was given. +if test "${enable_symbols+set}" = set; then : + enableval=$enable_symbols; tcl_ok=$enableval +else + tcl_ok=no +fi + + if test "$tcl_ok" = "no"; then + CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE}" + LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + else + CFLAGS_DEFAULT="${CFLAGS_DEBUG}" + LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" + if test "$tcl_ok" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (standard debugging)" >&5 +$as_echo "yes (standard debugging)" >&6; } + fi + fi + if test "${TEA_PLATFORM}" != "windows" ; then + LDFLAGS_DEFAULT="${LDFLAGS}" + fi + + + + + + if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then + +$as_echo "#define TCL_MEM_DEBUG 1" >>confdefs.h + + fi + + if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then + if test "$tcl_ok" = "all"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: enabled symbols mem debugging" >&5 +$as_echo "enabled symbols mem debugging" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: enabled $tcl_ok debugging" >&5 +$as_echo "enabled $tcl_ok debugging" >&6; } + fi + fi + + +#-------------------------------------------------------------------- +# Everyone should be linking against the Tcl stub library. If you +# can't for some reason, remove this definition. If you aren't using +# stubs, you also need to modify the SHLIB_LD_LIBS setting below to +# link against the non-stubbed Tcl library. Add Tk too if necessary. +#-------------------------------------------------------------------- + + +$as_echo "#define USE_TCL_STUBS 1" >>confdefs.h + + +$as_echo "#define USE_TK_STUBS 1" >>confdefs.h + + +#-------------------------------------------------------------------- +# This macro generates a line to use when building a library. It +# depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS, +# and TEA_LOAD_TCLCONFIG macros above. +#-------------------------------------------------------------------- + + + if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then + MAKE_STATIC_LIB="\${STLIB_LD} -out:\$@ \$(PKG_OBJECTS)" + MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\$@ \$(PKG_OBJECTS)" + MAKE_STUB_LIB="\${STLIB_LD} -out:\$@ \$(PKG_STUB_OBJECTS)" + else + MAKE_STATIC_LIB="\${STLIB_LD} \$@ \$(PKG_OBJECTS)" + MAKE_SHARED_LIB="\${SHLIB_LD} -o \$@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}" + MAKE_STUB_LIB="\${STLIB_LD} \$@ \$(PKG_STUB_OBJECTS)" + fi + + if test "${SHARED_BUILD}" = "1" ; then + MAKE_LIB="${MAKE_SHARED_LIB} " + else + MAKE_LIB="${MAKE_STATIC_LIB} " + fi + + #-------------------------------------------------------------------- + # Shared libraries and static libraries have different names. + # Use the double eval to make sure any variables in the suffix is + # substituted. (@@@ Might not be necessary anymore) + #-------------------------------------------------------------------- + + if test "${TEA_PLATFORM}" = "windows" ; then + if test "${SHARED_BUILD}" = "1" ; then + # We force the unresolved linking of symbols that are really in + # the private libraries of Tcl and Tk. + SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\"" + if test x"${TK_BIN_DIR}" != x ; then + SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\"" + fi + eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" + else + eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" + fi + # Some packages build there own stubs libraries + eval eval "PKG_STUB_LIB_FILE=${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" + # These aren't needed on Windows (either MSVC or gcc) + RANLIB=: + RANLIB_STUB=: + else + RANLIB_STUB="${RANLIB}" + if test "${SHARED_BUILD}" = "1" ; then + SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}" + if test x"${TK_BIN_DIR}" != x ; then + SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}" + fi + eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" + RANLIB=: + else + eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" + fi + # Some packages build there own stubs libraries + eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" + fi + + # These are escaped so that only CFLAGS is picked up at configure time. + # The other values will be substituted at make time. + CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}" + if test "${SHARED_BUILD}" = "1" ; then + CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}" + fi + + + + + + + + +#-------------------------------------------------------------------- +# Determine the name of the tclsh and/or wish executables in the +# Tcl and Tk build directories or the location they were installed +# into. These paths are used to support running test cases only, +# the Makefile should not be making use of these paths to generate +# a pkgIndex.tcl file or anything else at extension build time. +#-------------------------------------------------------------------- + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tclsh" >&5 +$as_echo_n "checking for tclsh... " >&6; } + if test -f "${TCL_BIN_DIR}/Makefile" ; then + # tclConfig.sh is in Tcl build directory + if test "${TEA_PLATFORM}" = "windows"; then + TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" + else + TCLSH_PROG="${TCL_BIN_DIR}/tclsh" + fi + else + # tclConfig.sh is in install location + if test "${TEA_PLATFORM}" = "windows"; then + TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" + else + TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}" + fi + list="`ls -d ${TCL_PREFIX}/bin 2>/dev/null` \ + `ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null`" + for i in $list ; do + if test -f "$i/${TCLSH_PROG}" ; then + REAL_TCL_BIN_DIR="`cd "$i"; pwd`" + break + fi + done + TCLSH_PROG="${REAL_TCL_BIN_DIR}/${TCLSH_PROG}" + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${TCLSH_PROG}" >&5 +$as_echo "${TCLSH_PROG}" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wish" >&5 +$as_echo_n "checking for wish... " >&6; } + if test -f "${TK_BIN_DIR}/Makefile" ; then + # tkConfig.sh is in Tk build directory + if test "${TEA_PLATFORM}" = "windows"; then + WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" + else + WISH_PROG="${TK_BIN_DIR}/wish" + fi + else + # tkConfig.sh is in install location + if test "${TEA_PLATFORM}" = "windows"; then + WISH_PROG="wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" + else + WISH_PROG="wish${TK_MAJOR_VERSION}.${TK_MINOR_VERSION}${TK_DBGX}" + fi + list="`ls -d ${TK_PREFIX}/bin 2>/dev/null` \ + `ls -d ${TK_BIN_DIR}/../bin 2>/dev/null`" + for i in $list ; do + if test -f "$i/${WISH_PROG}" ; then + REAL_TK_BIN_DIR="`cd "$i"; pwd`" + break + fi + done + WISH_PROG="${REAL_TK_BIN_DIR}/${WISH_PROG}" + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WISH_PROG}" >&5 +$as_echo "${WISH_PROG}" >&6; } + + + +#-------------------------------------------------------------------- +# Finally, substitute all of the various values into the Makefile. +# You may alternatively have a special pkgIndex.tcl.in or other files +# which require substituting th AC variables in. Include these here. +#-------------------------------------------------------------------- + +ac_config_files="$ac_config_files Makefile pkgIndex.tcl togl_ws.h" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +# +# If the first sed substitution is executed (which looks for macros that +# take arguments), then branch to the quote section. Otherwise, +# look for a macro that doesn't take arguments. +ac_script=' +:mline +/\\$/{ + N + s,\\\n,, + b mline +} +t clear +:clear +s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g +t quote +s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g +t quote +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.h` + + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by Togl $as_me 1.7, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +Togl config.status 1.7 +configured by $0, generated by GNU Autoconf 2.68, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "pkgIndex.tcl") CONFIG_FILES="$CONFIG_FILES pkgIndex.tcl" ;; + "togl_ws.h") CONFIG_FILES="$CONFIG_FILES togl_ws.h" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + + +eval set X " :F $CONFIG_FILES " +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + + + + esac + +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/ng/Togl-1.7/configure.in b/ng/Togl-1.7/configure.in new file mode 100644 index 00000000..5a89c64a --- /dev/null +++ b/ng/Togl-1.7/configure.in @@ -0,0 +1,222 @@ +#!/bin/bash -norc +dnl This file is an input file used by the GNU "autoconf" program to +dnl generate the file "configure", which is run during Tcl installation +dnl to configure the system for the local environment. +# +# RCS: @(#) $Id: configure.in,v 1.6 2006/01/06 00:09:00 gregcouch Exp $ + +#----------------------------------------------------------------------- +# Sample configure.in for Tcl Extensions. The only places you should +# need to modify this file are marked by the string __CHANGE__ +#----------------------------------------------------------------------- + +#----------------------------------------------------------------------- +# __CHANGE__ +# Set your package name and version numbers here. +# +# This initializes the environment with PACKAGE_NAME and PACKAGE_VERSION +# set as provided. These will also be added as -D defs in your Makefile +# so you can encode the package version directly into the source files. +#----------------------------------------------------------------------- + +AC_INIT([Togl], [1.7]) + +#-------------------------------------------------------------------- +# Call TEA_INIT as the first TEA_ macro to set up initial vars. +# This will define a ${TEA_PLATFORM} variable == "unix" or "windows" +# as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE. +#-------------------------------------------------------------------- + +TEA_INIT([3.4]) + +AC_CONFIG_AUX_DIR(tclconfig) + +#-------------------------------------------------------------------- +# Load the tclConfig.sh file +#-------------------------------------------------------------------- + +TEA_PATH_TCLCONFIG +TEA_LOAD_TCLCONFIG + +#-------------------------------------------------------------------- +# Load the tkConfig.sh file if necessary (Tk extension) +#-------------------------------------------------------------------- + +TEA_PATH_TKCONFIG +TEA_LOAD_TKCONFIG + +#----------------------------------------------------------------------- +# Handle the --prefix=... option by defaulting to what Tcl gave. +# Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER. +#----------------------------------------------------------------------- + +TEA_PREFIX + +#----------------------------------------------------------------------- +# Standard compiler checks. +# This sets up CC by using the CC env var, or looks for gcc otherwise. +# This also calls AC_PROG_CC, AC_PROG_INSTALL and a few others to create +# the basic setup necessary to compile executables. +#----------------------------------------------------------------------- + +TEA_SETUP_COMPILER + +#----------------------------------------------------------------------- +# __CHANGE__ +# Specify the C source files to compile in TEA_ADD_SOURCES, +# public headers that need to be installed in TEA_ADD_HEADERS, +# stub library C source files to compile in TEA_ADD_STUB_SOURCES, +# and runtime Tcl library files in TEA_ADD_TCL_SOURCES. +# This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS +# and PKG_TCL_SOURCES. +#----------------------------------------------------------------------- + +TEA_ADD_SOURCES([togl.c]) +# togl_ws.h is added in Makefile.in because it is generated +TEA_ADD_HEADERS([togl.h]) +TEA_ADD_INCLUDES([]) +TEA_ADD_LIBS([]) +TEA_ADD_CFLAGS([]) +TEA_ADD_STUB_SOURCES([]) +TEA_ADD_TCL_SOURCES([]) + +#-------------------------------------------------------------------- +# __CHANGE__ +# A few miscellaneous platform-specific items: +# +# Define a special symbol for Windows (BUILD_sample in this case) so +# that we create the export library with the dll. +# +# Windows creates a few extra files that need to be cleaned up. +# You can add more files to clean if your extension creates any extra +# files. +# +# TEA_ADD_* any platform specific compiler/build info here. +#-------------------------------------------------------------------- + +if test "${TEA_PLATFORM}" = "windows" ; then + AC_DEFINE(BUILD_togl, 1, [Build windows export dll]) + CLEANFILES="pkgIndex.tcl togl_ws.h *.lib *.dll *.exp *.ilk *.pdb vc*.pch" + #TEA_ADD_SOURCES([win/winFile.c]) + #TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/win)\"]) +else + CLEANFILES="pkgIndex.tcl togl_ws.h so_locations" + #TEA_ADD_SOURCES([unix/unixFile.c]) + #TEA_ADD_LIBS([-lsuperfly]) +fi +AC_SUBST(CLEANFILES) + +#-------------------------------------------------------------------- +# __CHANGE__ +# Choose which headers you need. Extension authors should try very +# hard to only rely on the Tcl public header files. Internal headers +# contain private data structures and are subject to change without +# notice. +# This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG +#-------------------------------------------------------------------- + +TEA_PUBLIC_TCL_HEADERS +#TEA_PRIVATE_TCL_HEADERS + +#TEA_PUBLIC_TK_HEADERS +TEA_PRIVATE_TK_HEADERS +TEA_PATH_X + +#-------------------------------------------------------------------- +# __CHANGE__ +# Choose OpenGL platform +#-------------------------------------------------------------------- + +case "${TEA_WINDOWINGSYSTEM}" in + aqua) + AC_SUBST(TOGL_WINDOWINGSYSTEM,TOGL_AGL) + TEA_ADD_LIBS([-framework AGL -framework OpenGL -framework ApplicationServices]) + # libGLU is implicit in OpenGL framework + LIBGLU= + ;; + x11) + AC_SUBST(TOGL_WINDOWINGSYSTEM,TOGL_X11) + TEA_ADD_LIBS([-lGL -lXmu]) + LIBGLU=-lGLU + ;; + win32) + AC_SUBST(TOGL_WINDOWINGSYSTEM,TOGL_WGL) + TEA_ADD_LIBS([opengl32.lib user32.lib gdi32.lib]) + if test "$GCC" = "yes" ; then + LIBGLU=-lglu32 + else + LIBGLU=glu32.lib + fi + ;; + *) + AC_MSG_ERROR([Unsupported windowing system: ${TEA_WINDOWINGSYSTEM}]) + ;; +esac +AC_SUBST(LIBGLU) + +#-------------------------------------------------------------------- +# Check whether --enable-threads or --disable-threads was given. +# This auto-enables if Tcl was compiled threaded. +#-------------------------------------------------------------------- + +TEA_ENABLE_THREADS + +#-------------------------------------------------------------------- +# The statement below defines a collection of symbols related to +# building as a shared library instead of a static library. +#-------------------------------------------------------------------- + +TEA_ENABLE_SHARED + +#-------------------------------------------------------------------- +# This macro figures out what flags to use with the compiler/linker +# when building shared/static debug/optimized objects. This information +# can be taken from the tclConfig.sh file, but this figures it all out. +#-------------------------------------------------------------------- + +TEA_CONFIG_CFLAGS +# should be part of TEA_CONFIG_CFLAGS, but more visible modification here +AC_SUBST(SHLIB_SUFFIX) + +#-------------------------------------------------------------------- +# Set the default compiler switches based on the --enable-symbols option. +#-------------------------------------------------------------------- + +TEA_ENABLE_SYMBOLS + +#-------------------------------------------------------------------- +# Everyone should be linking against the Tcl stub library. If you +# can't for some reason, remove this definition. If you aren't using +# stubs, you also need to modify the SHLIB_LD_LIBS setting below to +# link against the non-stubbed Tcl library. Add Tk too if necessary. +#-------------------------------------------------------------------- + +AC_DEFINE(USE_TCL_STUBS, 1, [Use Tcl stubs]) +AC_DEFINE(USE_TK_STUBS, 1, [Use Tk stubs]) + +#-------------------------------------------------------------------- +# This macro generates a line to use when building a library. It +# depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS, +# and TEA_LOAD_TCLCONFIG macros above. +#-------------------------------------------------------------------- + +TEA_MAKE_LIB + +#-------------------------------------------------------------------- +# Determine the name of the tclsh and/or wish executables in the +# Tcl and Tk build directories or the location they were installed +# into. These paths are used to support running test cases only, +# the Makefile should not be making use of these paths to generate +# a pkgIndex.tcl file or anything else at extension build time. +#-------------------------------------------------------------------- + +TEA_PROG_TCLSH +TEA_PROG_WISH + +#-------------------------------------------------------------------- +# Finally, substitute all of the various values into the Makefile. +# You may alternatively have a special pkgIndex.tcl.in or other files +# which require substituting th AC variables in. Include these here. +#-------------------------------------------------------------------- + +AC_OUTPUT([Makefile pkgIndex.tcl togl_ws.h]) diff --git a/ng/Togl-1.7/double.c b/ng/Togl-1.7/double.c new file mode 100644 index 00000000..ba072570 --- /dev/null +++ b/ng/Togl-1.7/double.c @@ -0,0 +1,280 @@ +/* $Id: double.c,v 1.14 2005/04/23 07:49:13 gregcouch Exp $ */ + +/* + * Togl - a Tk OpenGL widget + * Copyright (C) 1996-1997 Brian Paul and Ben Bederson + * See the LICENSE file for copyright details. + */ + +#include "togl.h" +#include +#include + +/* + * The following variable is a special hack that is needed in order for + * Sun shared libraries to be used for Tcl. + */ +#ifdef SUN +extern int matherr(); +int *tclDummyMathPtr = (int *) matherr; +#endif + +static GLuint FontBase; +static float xAngle = 0.0, yAngle = 0.0, zAngle = 0.0; +static GLfloat CornerX, CornerY, CornerZ; /* where to print strings */ + + +/* + * Togl widget create callback. This is called by Tcl/Tk when the widget has + * been realized. Here's where one may do some one-time context setup or + * initializations. + */ +void +create_cb(Togl *togl) +{ + + FontBase = Togl_LoadBitmapFont(togl, TOGL_BITMAP_8_BY_13); + if (!FontBase) { + printf("Couldn't load font!\n"); + exit(1); + } +} + + +/* + * Togl widget reshape callback. This is called by Tcl/Tk when the widget + * has been resized. Typically, we call glViewport and perhaps setup the + * projection matrix. + */ +void +reshape_cb(Togl *togl) +{ + int width = Togl_Width(togl); + int height = Togl_Height(togl); + float aspect = (float) width / (float) height; + + glViewport(0, 0, width, height); + + /* Set up projection transform */ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glFrustum(-aspect, aspect, -1.0, 1.0, 1.0, 10.0); + + CornerX = -aspect; + CornerY = -1.0; + CornerZ = -1.1; + + /* Change back to model view transform for rendering */ + glMatrixMode(GL_MODELVIEW); +} + + + +static void +print_string(const char *s) +{ + glCallLists(strlen(s), GL_UNSIGNED_BYTE, s); +} + + +/* + * Togl widget display callback. This is called by Tcl/Tk when the widget's + * contents have to be redrawn. Typically, we clear the color and depth + * buffers, render our objects, then swap the front/back color buffers. + */ +void +display_cb(Togl *togl) +{ + static GLuint cubeList = 0; + const char *ident; + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glLoadIdentity(); /* Reset modelview matrix to the identity + * matrix */ + glTranslatef(0.0, 0.0, -3.0); /* Move the camera back three units */ + glRotatef(xAngle, 1.0, 0.0, 0.0); /* Rotate by X, Y, and Z angles */ + glRotatef(yAngle, 0.0, 1.0, 0.0); + glRotatef(zAngle, 0.0, 0.0, 1.0); + + glEnable(GL_DEPTH_TEST); + + if (!cubeList) { + cubeList = glGenLists(1); + glNewList(cubeList, GL_COMPILE); + + /* Front face */ + glBegin(GL_QUADS); + glColor3f(0.0, 0.7, 0.1); /* Green */ + glVertex3f(-1.0, 1.0, 1.0); + glVertex3f(1.0, 1.0, 1.0); + glVertex3f(1.0, -1.0, 1.0); + glVertex3f(-1.0, -1.0, 1.0); + /* Back face */ + glColor3f(0.9, 1.0, 0.0); /* Yellow */ + glVertex3f(-1.0, 1.0, -1.0); + glVertex3f(1.0, 1.0, -1.0); + glVertex3f(1.0, -1.0, -1.0); + glVertex3f(-1.0, -1.0, -1.0); + /* Top side face */ + glColor3f(0.2, 0.2, 1.0); /* Blue */ + glVertex3f(-1.0, 1.0, 1.0); + glVertex3f(1.0, 1.0, 1.0); + glVertex3f(1.0, 1.0, -1.0); + glVertex3f(-1.0, 1.0, -1.0); + /* Bottom side face */ + glColor3f(0.7, 0.0, 0.1); /* Red */ + glVertex3f(-1.0, -1.0, 1.0); + glVertex3f(1.0, -1.0, 1.0); + glVertex3f(1.0, -1.0, -1.0); + glVertex3f(-1.0, -1.0, -1.0); + glEnd(); + + glEndList(); + + } + glCallList(cubeList); + + glDisable(GL_DEPTH_TEST); + glLoadIdentity(); + glColor3f(1.0, 1.0, 1.0); + glRasterPos3f(CornerX, CornerY, CornerZ); + glListBase(FontBase); + ident = Togl_Ident(togl); + if (strcmp(ident, "Single") == 0) { + print_string("Single buffered"); + } else { + print_string("Double buffered"); + } + Togl_SwapBuffers(togl); +} + + + + +int +setXrot_cb(Togl *togl, int argc, CONST84 char *argv[]) +{ + Tcl_Interp *interp = Togl_Interp(togl); + + /* error checking */ + if (argc != 3) { + Tcl_SetResult(interp, + "wrong # args: should be \"pathName setXrot ?angle?\"", + TCL_STATIC); + return TCL_ERROR; + } + + xAngle = atof(argv[2]); + + /* printf( "before %f ", xAngle ); */ + + if (xAngle < 0.0) { + xAngle += 360.0; + } else if (xAngle > 360.0) { + xAngle -= 360.0; + } + + /* printf( "after %f \n", xAngle ); */ + + Togl_PostRedisplay(togl); + + /* Let result string equal value */ + strcpy(interp->result, argv[2]); + return TCL_OK; +} + + + +int +setYrot_cb(Togl *togl, int argc, CONST84 char *argv[]) +{ + Tcl_Interp *interp = Togl_Interp(togl); + + /* error checking */ + if (argc != 3) { + Tcl_SetResult(interp, + "wrong # args: should be \"pathName setYrot ?angle?\"", + TCL_STATIC); + return TCL_ERROR; + } + + yAngle = atof(argv[2]); + + if (yAngle < 0.0) { + yAngle += 360.0; + } else if (yAngle > 360.0) { + yAngle -= 360.0; + } + + Togl_PostRedisplay(togl); + + /* Let result string equal value */ + strcpy(interp->result, argv[2]); + return TCL_OK; +} + +int +getXrot_cb(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) +{ + sprintf(interp->result, "%d", (int) xAngle); + return TCL_OK; +} + +int +getYrot_cb(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) +{ + sprintf(interp->result, "%d", (int) yAngle); + return TCL_OK; +} + +/* + * Called by Tk_Main() to let me initialize the modules (Togl) I will need. + */ +TOGL_EXTERN int +Double_Init(Tcl_Interp *interp) +{ +#ifdef USE_TCL_STUBS + if (Tcl_InitStubs(interp, "8.1", 0) == NULL) { + return TCL_ERROR; + } +#endif +#ifdef USE_TK_STUBS + if (Tk_InitStubs(interp, "8.1", 0) == NULL) { + return TCL_ERROR; + } +#endif + + if (Togl_Init(interp) == TCL_ERROR) { + return TCL_ERROR; + } +#ifdef macintosh + Togl_MacSetupMainInterp(interp); +#endif + + /* + * Specify the C callback functions for widget creation, display, + * and reshape. + */ + Togl_CreateFunc(create_cb); + Togl_DisplayFunc(display_cb); + Togl_ReshapeFunc(reshape_cb); + + /* + * Make a new Togl widget command so the Tcl code can set a C variable. + */ + + Togl_CreateCommand("setXrot", setXrot_cb); + Togl_CreateCommand("setYrot", setYrot_cb); + + /* + * Call Tcl_CreateCommand for application-specific commands, if + * they weren't already created by the init procedures called above. + */ + + Tcl_CreateCommand(interp, "getXrot", (Tcl_CmdProc *) getXrot_cb, + (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); + Tcl_CreateCommand(interp, "getYrot", (Tcl_CmdProc *) getYrot_cb, + (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); + return TCL_OK; +} diff --git a/ng/Togl-1.7/double.tcl b/ng/Togl-1.7/double.tcl new file mode 100644 index 00000000..88987f7c --- /dev/null +++ b/ng/Togl-1.7/double.tcl @@ -0,0 +1,103 @@ +#!/bin/sh +# the next line restarts using wish \ +exec wish "$0" "$@" + +# $Id: double.tcl,v 1.5 2001/12/20 13:59:31 beskow Exp $ + +# Togl - a Tk OpenGL widget +# Copyright (C) 1996 Brian Paul and Ben Bederson +# See the LICENSE file for copyright details. + + +# $Log: double.tcl,v $ +# Revision 1.5 2001/12/20 13:59:31 beskow +# Improved error-handling in togl.c in case of window creation failure +# Added pkgIndex target to makefile +# Updated documentation to reflect stubs-interface (Togl.html + new README.stubs) +# Added tk8.4a3 headers +# Removed obsolete Tk internal headers +# +# Revision 1.4 2001/01/29 18:11:53 brianp +# Jonas Beskow's changes to use Tcl/Tk stub interface +# +# Revision 1.3 1998/03/12 03:52:31 brianp +# now sharing display lists between the widgets +# +# Revision 1.2 1996/10/23 23:31:56 brianp +# added -ident options to togl calls +# +# Revision 1.1 1996/10/23 23:17:22 brianp +# Initial revision +# + + +# An Tk/OpenGL widget demo with two windows, one single buffered and the +# other double buffered. + +load [file dirname [info script]]/double[info sharedlibextension] + +proc setup {} { + wm title . "Single vs Double Buffering" + + frame .f1 + + # create first Togl widget + togl .f1.o1 -width 200 -height 200 -rgba true -double false -depth true -ident Single + + # create second Togl widget, share display lists with first widget + togl .f1.o2 -width 200 -height 200 -rgba true -double true -depth true -ident Double -sharelist Single + + scale .sx -label {X Axis} -from 0 -to 360 -command {setAngle x} -orient horizontal + scale .sy -label {Y Axis} -from 0 -to 360 -command {setAngle y} -orient horizontal + button .btn -text Quit -command exit + + bind .f1.o1 { + motion_event [lindex [%W config -width] 4] \ + [lindex [%W config -height] 4] \ + %x %y + } + + bind .f1.o2 { + motion_event [lindex [%W config -width] 4] \ + [lindex [%W config -height] 4] \ + %x %y + } + + pack .f1.o1 .f1.o2 -side left -padx 3 -pady 3 -fill both -expand t + pack .f1 -fill both -expand t + pack .sx -fill x + pack .sy -fill x + pack .btn -fill x +} + + + +# This is called when mouse button 1 is pressed and moved in either of +# the OpenGL windows. +proc motion_event { width height x y } { + .f1.o1 setXrot [expr 360.0 * $y / $height] + .f1.o2 setXrot [expr 360.0 * $y / $height] + .f1.o1 setYrot [expr 360.0 * ($width - $x) / $width] + .f1.o2 setYrot [expr 360.0 * ($width - $x) / $width] + +# .sx set [expr 360.0 * $y / $height] +# .sy set [expr 360.0 * ($width - $x) / $width] + + .sx set [getXrot] + .sy set [getYrot] +} + +# This is called when a slider is changed. +proc setAngle {axis value} { + global xAngle yAngle zAngle + + switch -exact $axis { + x {.f1.o1 setXrot $value + .f1.o2 setXrot $value} + y {.f1.o1 setYrot $value + .f1.o2 setYrot $value} + } +} + +# Execution starts here! +setup diff --git a/ng/Togl-1.7/gears.c b/ng/Togl-1.7/gears.c new file mode 100644 index 00000000..9999a720 --- /dev/null +++ b/ng/Togl-1.7/gears.c @@ -0,0 +1,402 @@ +/* gears.c */ + +/* + * 3-D gear wheels. This program is in the public domain. + * + * Brian Paul + * + * + * Modified to work under Togl as a widget for TK 1997 + * + * Philip Quaife + * + */ + +#include "togl.h" +#include +#include +#include + +#ifndef M_PI +# define M_PI 3.14159265 +#endif + +struct WHIRLYGIZMO +{ + GLint Gear1, Gear2, Gear3; + GLfloat Rotx, Roty, Rotz; + GLfloat Angle; + int Height, Width; +}; + +/* + * Draw a gear wheel. You'll probably want to call this function when + * building a display list since we do a lot of trig here. + * + * Input: inner_radius - radius of hole at center + * outer_radius - radius at center of teeth + * width - width of gear + * teeth - number of teeth + * tooth_depth - depth of tooth + */ +static void +gear(GLfloat inner_radius, GLfloat outer_radius, GLfloat width, + GLint teeth, GLfloat tooth_depth) +{ + GLint i; + GLfloat r0, r1, r2; + GLfloat angle, da; + GLfloat u, v, len; + + r0 = inner_radius; + r1 = outer_radius - tooth_depth / 2.0; + r2 = outer_radius + tooth_depth / 2.0; + + da = 2.0 * M_PI / teeth / 4.0; + + glShadeModel(GL_FLAT); + + glNormal3f(0.0, 0.0, 1.0); + + /* draw front face */ + glBegin(GL_QUAD_STRIP); + for (i = 0; i <= teeth; i++) { + angle = i * 2.0 * M_PI / teeth; + glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5); + glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5); + glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5); + glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), + width * 0.5); + } + glEnd(); + + /* draw front sides of teeth */ + glBegin(GL_QUADS); + da = 2.0 * M_PI / teeth / 4.0; + for (i = 0; i < teeth; i++) { + angle = i * 2.0 * M_PI / teeth; + + glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5); + glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5); + glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), + width * 0.5); + glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), + width * 0.5); + } + glEnd(); + + + glNormal3f(0.0, 0.0, -1.0); + + /* draw back face */ + glBegin(GL_QUAD_STRIP); + for (i = 0; i <= teeth; i++) { + angle = i * 2.0 * M_PI / teeth; + glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5); + glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5); + glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), + -width * 0.5); + glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5); + } + glEnd(); + + /* draw back sides of teeth */ + glBegin(GL_QUADS); + da = 2.0 * M_PI / teeth / 4.0; + for (i = 0; i < teeth; i++) { + angle = i * 2.0 * M_PI / teeth; + + glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), + -width * 0.5); + glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), + -width * 0.5); + glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5); + glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5); + } + glEnd(); + + + /* draw outward faces of teeth */ + glBegin(GL_QUAD_STRIP); + for (i = 0; i < teeth; i++) { + angle = i * 2.0 * M_PI / teeth; + + glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5); + glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5); + u = r2 * cos(angle + da) - r1 * cos(angle); + v = r2 * sin(angle + da) - r1 * sin(angle); + len = sqrt(u * u + v * v); + u /= len; + v /= len; + glNormal3f(v, -u, 0.0); + glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5); + glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5); + glNormal3f(cos(angle), sin(angle), 0.0); + glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), + width * 0.5); + glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), + -width * 0.5); + u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da); + v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da); + glNormal3f(v, -u, 0.0); + glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), + width * 0.5); + glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), + -width * 0.5); + glNormal3f(cos(angle), sin(angle), 0.0); + } + + glVertex3f(r1 * cos(0), r1 * sin(0), width * 0.5); + glVertex3f(r1 * cos(0), r1 * sin(0), -width * 0.5); + + glEnd(); + + + glShadeModel(GL_SMOOTH); + + /* draw inside radius cylinder */ + glBegin(GL_QUAD_STRIP); + for (i = 0; i <= teeth; i++) { + angle = i * 2.0 * M_PI / teeth; + glNormal3f(-cos(angle), -sin(angle), 0.0); + glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5); + glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5); + } + glEnd(); + +} + +/* + * static GLfloat view_rotx=20.0, view_roty=30.0, view_rotz=0.0; static GLint + * gear1, gear2, gear3; static GLfloat angle = 0.0; */ +static GLuint limit; +static GLuint count = 1; + +static GLubyte polycolor[4] = { 255, 255, 255, 255 }; + +static void +draw(Togl *togl) +{ + struct WHIRLYGIZMO *Wg; + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + Wg = Togl_GetClientData(togl); + glDisable(GL_TEXTURE_2D); + glPushMatrix(); + glRotatef(Wg->Rotx, 1.0, 0.0, 0.0); + glRotatef(Wg->Roty, 0.0, 1.0, 0.0); + glRotatef(Wg->Rotz, 0.0, 0.0, 1.0); + + glPushMatrix(); + glTranslatef(-3.0, -2.0, 0.0); + glRotatef(Wg->Angle, 0.0, 0.0, 1.0); + glEnable(GL_DEPTH_TEST); + glCallList(Wg->Gear1); + glEnable(GL_DEPTH_TEST); + glPopMatrix(); + + glPushMatrix(); + glTranslatef(3.1, -2.0, 0.0); + glRotatef(-2.0 * Wg->Angle - 9.0, 0.0, 0.0, 1.0); + glCallList(Wg->Gear2); + glPopMatrix(); + + glPushMatrix(); + glTranslatef(-3.1, 4.2, 0.0); + glRotatef(-2.0 * Wg->Angle - 25.0, 0.0, 0.0, 1.0); + glCallList(Wg->Gear3); + glPopMatrix(); + + glPopMatrix(); + + Togl_SwapBuffers(togl); + +} + + +static void +zap(Togl *togl) +{ + struct WHIRLYGIZMO *Wg; + + Wg = Togl_GetClientData(togl); + free(Wg); +} + + +static void +idle(Togl *togl) +{ + struct WHIRLYGIZMO *Wg; + + Wg = Togl_GetClientData(togl); + Wg->Angle += 2.0; + Togl_PostRedisplay(togl); +} + + +/* change view angle, exit upon ESC */ +/* + * static GLenum key(int k, GLenum mask) { switch (k) { case TK_UP: view_rotx + * += 5.0; return GL_TRUE; case TK_DOWN: view_rotx -= 5.0; return GL_TRUE; case + * TK_LEFT: view_roty += 5.0; return GL_TRUE; case TK_RIGHT: view_roty -= 5.0; + * return GL_TRUE; case TK_z: view_rotz += 5.0; return GL_TRUE; case TK_Z: + * view_rotz -= 5.0; return GL_TRUE; } return GL_FALSE; } */ + +/* new window size or exposure */ +static void +reshape(Togl *togl) +{ + int width, height; + + width = Togl_Width(togl); + height = Togl_Height(togl); + glViewport(0, 0, (GLint) width, (GLint) height); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + if (width > height) { + GLfloat w = (GLfloat) width / (GLfloat) height; + + glFrustum(-w, w, -1.0, 1.0, 5.0, 60.0); + } else { + GLfloat h = (GLfloat) height / (GLfloat) width; + + glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0); + } + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glTranslatef(0.0, 0.0, -40.0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + +} + + +static void +init(Togl *togl) +{ + struct WHIRLYGIZMO *Wg; + + static GLfloat red[4] = { 0.8, 0.1, 0.0, 1.0 }; + static GLfloat green[4] = { 0.0, 0.8, 0.2, 1.0 }; + static GLfloat blue[4] = { 0.2, 0.2, 1.0, 1.0 }; + static GLfloat pos[4] = { 5.0, 5.0, 10.0, 0.0 }; + glLightfv(GL_LIGHT0, GL_POSITION, pos); + glEnable(GL_CULL_FACE); + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); + glEnable(GL_DEPTH_TEST); + /* make the gears */ + Wg = malloc(sizeof (*Wg)); + if (!Wg) { + Tcl_SetResult(Togl_Interp(togl), + "\"Cannot allocate client data for widget\"", TCL_STATIC); + } + Wg->Gear1 = glGenLists(1); + glNewList(Wg->Gear1, GL_COMPILE); + glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red); + gear(1.0, 4.0, 1.0, 20, 0.7); + glEndList(); + + Wg->Gear2 = glGenLists(1); + glNewList(Wg->Gear2, GL_COMPILE); + glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green); + gear(0.5, 2.0, 2.0, 10, 0.7); + glEndList(); + + Wg->Gear3 = glGenLists(1); + glNewList(Wg->Gear3, GL_COMPILE); + glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue); + gear(1.3, 2.0, 0.5, 10, 0.7); + glEndList(); + + glEnable(GL_NORMALIZE); + Wg->Height = Togl_Height(togl); + Wg->Width = Togl_Width(togl); + Wg->Angle = 0.0; + Wg->Rotx = 0.0; + Wg->Roty = 0.0; + Wg->Rotz = 0.0; + Togl_SetClientData(togl, (ClientData) Wg); +} + +int +position(Togl *togl, int argc, CONST84 char *argv[]) +{ + struct WHIRLYGIZMO *Wg; + Tcl_Interp *interp = Togl_Interp(togl); + char Result[100]; + + Wg = Togl_GetClientData(togl); + /* error checking */ + if (argc != 2) { + Tcl_SetResult(interp, + "wrong # args: should be \"pathName \"", TCL_STATIC); + return TCL_ERROR; + } + + /* Let result string equal value */ + sprintf(Result, "%g %g", Wg->Roty, Wg->Rotx); + + Tcl_SetResult(interp, Result, TCL_VOLATILE); + return TCL_OK; +} + +int +rotate(Togl *togl, int argc, CONST84 char *argv[]) +{ + struct WHIRLYGIZMO *Wg; + Tcl_Interp *interp = Togl_Interp(togl); + + Wg = Togl_GetClientData(togl); + /* error checking */ + if (argc != 4) { + Tcl_SetResult(interp, + "wrong # args: should be \"pathName xrot yrot\"", TCL_STATIC); + return TCL_ERROR; + } + + Wg->Roty = atof(argv[2]); + Wg->Rotx = atof(argv[3]); + Togl_PostRedisplay(togl); + + /* Let result string equal value */ + strcpy(interp->result, argv[2]); + return TCL_OK; +} + +TOGL_EXTERN int +Gears_Init(Tcl_Interp *interp) +{ + /* + * Initialize Tcl, Tk, and the Togl widget module. + */ +#ifdef USE_TCL_STUBS + if (Tcl_InitStubs(interp, "8.1", 0) == NULL) { + return TCL_ERROR; + } +#endif +#ifdef USE_TK_STUBS + if (Tk_InitStubs(interp, "8.1", 0) == NULL) { + return TCL_ERROR; + } +#endif + + if (Togl_Init(interp) == TCL_ERROR) { + return TCL_ERROR; + } + + /* + * Specify the C callback functions for widget creation, display, + * and reshape. + */ + Togl_CreateFunc(init); + Togl_DestroyFunc(zap); + Togl_DisplayFunc(draw); + Togl_ReshapeFunc(reshape); + Togl_TimerFunc(idle); + Togl_CreateCommand("rotate", rotate); + Togl_CreateCommand("position", position); + return TCL_OK; +} diff --git a/ng/Togl-1.7/gears.tcl b/ng/Togl-1.7/gears.tcl new file mode 100755 index 00000000..ddb2729d --- /dev/null +++ b/ng/Togl-1.7/gears.tcl @@ -0,0 +1,76 @@ +#!/bin/sh +# the next line restarts using wish \ +exec wish "$0" "$@" + +# Togl - a Tk OpenGL widget +# Copyright (C) 1996-1997 Brian Paul and Ben Bederson +# See the LICENSE file for copyright details. + + +# +# Test Togl using GL Gears Demo +# +# Copyright (C) 1997 Philip Quaife +# + +load [file dirname [info script]]/gears[info sharedlibextension] + +proc setup {} { + global startx starty xangle0 yangle0 xangle yangle RotCnt + global vTime + set RotCnt 1 + set xangle 0.0 + set yangle 0.0 + set vTime 100 + wm title . "Rotating Gear Widget Test" + + label .t -text "Click and drag to rotate image" + pack .t -side top -padx 2 -pady 10 + frame .f + pack .f -side top + button .f.n1 -text " Add " -command AutoRot + button .f.r1 -text "Remove" -command DelRot + button .f.b1 -text " Quit " -command exit + entry .f.t -width 4 -textvariable vTime + pack .f.n1 .f.t .f.r1 .f.b1 -side left -anchor w -padx 5 + newRot .w0 10 + +} +proc AutoRot {} { + global RotCnt vTime + newRot .w$RotCnt $vTime + set RotCnt [expr $RotCnt + 1] +} + +proc DelRot {} { + global RotCnt vTime + if { $RotCnt != 0 } { + set RotCnt [expr $RotCnt - 1] + destroy .w$RotCnt + } +} + +proc newRot {win {tick 100} } { + togl $win -width 200 -height 200 -rgba true -double true -depth true -privatecmap false -time $tick + bind $win {RotStart %x %y %W} + bind $win {RotMove %x %y %W} + pack $win -expand true -fill both +} + +proc RotStart {x y W } { + global startx starty xangle0 yangle0 xangle yangle + set startx $x + set starty $y + set vPos [$W position] + set xangle0 [lindex $vPos 0] + set yangle0 [lindex $vPos 1] + } + +proc RotMove {x y W} { + global startx starty xangle0 yangle0 xangle yangle + set xangle [expr $xangle0 + ($x - $startx) ] + set yangle [expr $yangle0 + ($y - $starty) ] + $W rotate $xangle $yangle + } + +setup diff --git a/ng/Togl-1.7/image.c b/ng/Togl-1.7/image.c new file mode 100644 index 00000000..a4027ce7 --- /dev/null +++ b/ng/Togl-1.7/image.c @@ -0,0 +1,249 @@ +/* + * SGI rgb file reader borrowed from gltk library + */ + +#include "togl.h" /* added by GG to include windows.h */ +#include +#include +#include +#include "image.h" + +#ifndef SEEK_SET +# define SEEK_SET 0 +#endif + + +static void +tkQuit(void) +{ + exit(0); +} + + +/******************************************************************************/ + +typedef struct _rawImageRec +{ + unsigned short imagic; + unsigned short type; + unsigned short dim; + unsigned short sizeX, sizeY, sizeZ; + unsigned long min, max; + unsigned long wasteBytes; + char name[80]; + unsigned long colorMap; + FILE *file; + unsigned char *tmp, *tmpR, *tmpG, *tmpB, *tmpA; + unsigned long rleEnd; + GLuint *rowStart; + GLint *rowSize; +} rawImageRec; + + +/******************************************************************************/ + +static void +ConvertShort(unsigned short *array, long length) +{ + unsigned long b1, b2; + unsigned char *ptr; + + ptr = (unsigned char *) array; + while (length--) { + b1 = *ptr++; + b2 = *ptr++; + *array++ = (b1 << 8) | (b2); + } +} + +static void +ConvertLong(GLuint *array, long length) +{ + unsigned long b1, b2, b3, b4; + unsigned char *ptr; + + ptr = (unsigned char *) array; + while (length--) { + b1 = *ptr++; + b2 = *ptr++; + b3 = *ptr++; + b4 = *ptr++; + *array++ = (b1 << 24) | (b2 << 16) | (b3 << 8) | (b4); + } +} + +static rawImageRec * +RawImageOpen(char *fileName) +{ + union + { + int testWord; + char testByte[4]; + } endianTest; + rawImageRec *raw; + GLenum swapFlag; + int x; + + endianTest.testWord = 1; + if (endianTest.testByte[0] == 1) { + swapFlag = GL_TRUE; + } else { + swapFlag = GL_FALSE; + } + + raw = (rawImageRec *) malloc(sizeof (rawImageRec)); + if (raw == NULL) { + fprintf(stderr, "Out of memory!\n"); + tkQuit(); + } + if ((raw->file = fopen(fileName, "rb")) == NULL) { + perror(fileName); + tkQuit(); + } + + fread(raw, 1, 12, raw->file); + + if (swapFlag) { + ConvertShort(&raw->imagic, 6); + } + + raw->tmp = (unsigned char *) malloc(raw->sizeX * 256); + raw->tmpR = (unsigned char *) malloc(raw->sizeX * 256); + raw->tmpG = (unsigned char *) malloc(raw->sizeX * 256); + raw->tmpB = (unsigned char *) malloc(raw->sizeX * 256); + raw->tmpA = (unsigned char *) malloc(raw->sizeX * 256); + if (raw->tmp == NULL || raw->tmpR == NULL || raw->tmpG == NULL || + raw->tmpB == NULL || raw->tmpA == NULL) { + fprintf(stderr, "Out of memory!\n"); + tkQuit(); + } + + if ((raw->type & 0xFF00) == 0x0100) { + x = raw->sizeY * raw->sizeZ * sizeof (GLuint); + raw->rowStart = (GLuint *) malloc(x); + raw->rowSize = (GLint *) malloc(x); + if (raw->rowStart == NULL || raw->rowSize == NULL) { + fprintf(stderr, "Out of memory!\n"); + tkQuit(); + } + raw->rleEnd = 512 + (2 * x); + fseek(raw->file, 512, SEEK_SET); + fread(raw->rowStart, 1, x, raw->file); + fread(raw->rowSize, 1, x, raw->file); + if (swapFlag) { + ConvertLong(raw->rowStart, x / sizeof (GLuint)); + ConvertLong((GLuint *) raw->rowSize, x / sizeof (GLint)); + } + } + return raw; +} + +static void +RawImageClose(rawImageRec * raw) +{ + + fclose(raw->file); + free(raw->tmp); + free(raw->tmpR); + free(raw->tmpG); + free(raw->tmpB); + free(raw->tmpA); + free(raw); +} + +static void +RawImageGetRow(rawImageRec * raw, unsigned char *buf, int y, int z) +{ + unsigned char *iPtr, *oPtr, pixel; + int count; + + if ((raw->type & 0xFF00) == 0x0100) { + fseek(raw->file, raw->rowStart[y + z * raw->sizeY], SEEK_SET); + fread(raw->tmp, 1, (unsigned int) raw->rowSize[y + z * raw->sizeY], + raw->file); + + iPtr = raw->tmp; + oPtr = buf; + while (1) { + pixel = *iPtr++; + count = (int) (pixel & 0x7F); + if (!count) { + return; + } + if (pixel & 0x80) { + while (count--) { + *oPtr++ = *iPtr++; + } + } else { + pixel = *iPtr++; + while (count--) { + *oPtr++ = pixel; + } + } + } + } else { + fseek(raw->file, 512 + (y * raw->sizeX) + (z * raw->sizeX * raw->sizeY), + SEEK_SET); + fread(buf, 1, raw->sizeX, raw->file); + } +} + +static void +RawImageGetData(rawImageRec * raw, TK_RGBImageRec * final) +{ + unsigned char *ptr; + int i, j; + + final->data = + (unsigned char *) malloc((raw->sizeX + 1) * (raw->sizeY + 1) * 4); + if (final->data == NULL) { + fprintf(stderr, "Out of memory!\n"); + tkQuit(); + } + + ptr = final->data; + for (i = 0; i < (int) (raw->sizeY); i++) { + RawImageGetRow(raw, raw->tmpR, i, 0); + RawImageGetRow(raw, raw->tmpG, i, 1); + RawImageGetRow(raw, raw->tmpB, i, 2); + if (raw->sizeZ == 4) { + /* 4 components */ + RawImageGetRow(raw, raw->tmpA, i, 3); + for (j = 0; j < (int) (raw->sizeX); j++) { + *ptr++ = *(raw->tmpR + j); + *ptr++ = *(raw->tmpG + j); + *ptr++ = *(raw->tmpB + j); + *ptr++ = *(raw->tmpA + j); + } + } else { + /* 3 components */ + for (j = 0; j < (int) (raw->sizeX); j++) { + *ptr++ = *(raw->tmpR + j); + *ptr++ = *(raw->tmpG + j); + *ptr++ = *(raw->tmpB + j); + } + } + } +} + +TK_RGBImageRec * +tkRGBImageLoad(char *fileName) +{ + rawImageRec *raw; + TK_RGBImageRec *final; + + raw = RawImageOpen(fileName); + final = (TK_RGBImageRec *) malloc(sizeof (TK_RGBImageRec)); + if (final == NULL) { + fprintf(stderr, "Out of memory!\n"); + tkQuit(); + } + final->sizeX = raw->sizeX; + final->sizeY = raw->sizeY; + final->sizeZ = raw->sizeZ; + RawImageGetData(raw, final); + RawImageClose(raw); + return final; +} + +/******************************************************************************/ diff --git a/ng/Togl-1.7/image.h b/ng/Togl-1.7/image.h new file mode 100644 index 00000000..47babb74 --- /dev/null +++ b/ng/Togl-1.7/image.h @@ -0,0 +1,14 @@ +/* image.h */ + +#ifndef IMAGE_H +# define IMAGE_H + +typedef struct _TK_RGBImageRec +{ + int sizeX, sizeY, sizeZ; + unsigned char *data; +} TK_RGBImageRec; + +extern TK_RGBImageRec *tkRGBImageLoad(char *fileName); + +#endif diff --git a/ng/Togl-1.7/index.c b/ng/Togl-1.7/index.c new file mode 100644 index 00000000..8e26e26c --- /dev/null +++ b/ng/Togl-1.7/index.c @@ -0,0 +1,184 @@ +/* $Id: index.c,v 1.10 2005/04/23 07:49:13 gregcouch Exp $ */ + +/* + * Togl - a Tk OpenGL widget + * Copyright (C) 1996-1997 Brian Paul and Ben Bederson + * See the LICENSE file for copyright details. + */ + + +/* + * An example Togl program using color-index mode. + */ + + +#include "togl.h" +#include +#include + + +/* + * The following variable is a special hack that is needed in order for + * Sun shared libraries to be used for Tcl. + */ +#ifdef SUN +extern int matherr(); +int *tclDummyMathPtr = (int *) matherr; +#endif + + +/* Our color indexes: */ +static unsigned long black, red, green, blue; + +/* Rotation angle */ +static float Angle = 0.0; + + +/* + * Togl widget create callback. This is called by Tcl/Tk when the widget has + * been realized. Here's where one may do some one-time context setup or + * initializations. + */ +void +create_cb(Togl *togl) +{ + /* allocate color indexes */ + black = Togl_AllocColor(togl, 0.0, 0.0, 0.0); + red = Togl_AllocColor(togl, 1.0, 0.0, 0.0); + green = Togl_AllocColor(togl, 0.0, 1.0, 0.0); + blue = Togl_AllocColor(togl, 0.0, 0.0, 1.0); + + /* If we were using a private read/write colormap we'd setup our color + * table with something like this: */ + /* + * black = 1; Togl_SetColor( togl, black, 0.0, 0.0, 0.0 ); red = 2; + * Togl_SetColor( togl, red, 1.0, 0.0, 0.0 ); green = 3; Togl_SetColor( + * togl, green, 0.0, 1.0, 0.0 ); blue = 4; Togl_SetColor( togl, blue, 0.0, + * 0.0, 1.0 ); */ + + glShadeModel(GL_FLAT); + glDisable(GL_DITHER); +} + + +/* + * Togl widget reshape callback. This is called by Tcl/Tk when the widget + * has been resized. Typically, we call glViewport and perhaps setup the + * projection matrix. + */ +void +reshape_cb(Togl *togl) +{ + int width = Togl_Width(togl); + int height = Togl_Height(togl); + float aspect = (float) width / (float) height; + + glViewport(0, 0, width, height); + + /* Set up projection transform */ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(-aspect, aspect, -1.0, 1.0, -1.0, 1.0); + + /* Change back to model view transform for rendering */ + glMatrixMode(GL_MODELVIEW); +} + + +/* + * Togl widget display callback. This is called by Tcl/Tk when the widget's + * contents have to be redrawn. Typically, we clear the color and depth + * buffers, render our objects, then swap the front/back color buffers. + */ +void +display_cb(Togl *togl) +{ + glClearIndex(black); + glClear(GL_COLOR_BUFFER_BIT); + + glPushMatrix(); + glTranslatef(0.3, -0.3, 0.0); + glRotatef(Angle, 0.0, 0.0, 1.0); + glIndexi(red); + glBegin(GL_TRIANGLES); + glVertex2f(-0.5, -0.3); + glVertex2f(0.5, -0.3); + glVertex2f(0.0, 0.6); + glEnd(); + glPopMatrix(); + + glPushMatrix(); + glRotatef(Angle, 0.0, 0.0, 1.0); + glIndexi(green); + glBegin(GL_TRIANGLES); + glVertex2f(-0.5, -0.3); + glVertex2f(0.5, -0.3); + glVertex2f(0.0, 0.6); + glEnd(); + glPopMatrix(); + + glPushMatrix(); + glTranslatef(-0.3, 0.3, 0.0); + glRotatef(Angle, 0.0, 0.0, 1.0); + glIndexi(blue); + glBegin(GL_TRIANGLES); + glVertex2f(-0.5, -0.3); + glVertex2f(0.5, -0.3); + glVertex2f(0.0, 0.6); + glEnd(); + glPopMatrix(); + + glFlush(); + Togl_SwapBuffers(togl); +} + + +void +timer_cb(Togl *togl) +{ + Angle += 5.0; + Togl_PostRedisplay(togl); +} + + +TOGL_EXTERN int +Index_Init(Tcl_Interp *interp) +{ + /* + * Initialize Tcl, Tk, and the Togl widget module. + */ +#ifdef USE_TCL_STUBS + if (Tcl_InitStubs(interp, "8.1", 0) == NULL) { + return TCL_ERROR; + } +#endif +#ifdef USE_TK_STUBS + if (Tk_InitStubs(interp, "8.1", 0) == NULL) { + return TCL_ERROR; + } +#endif + + if (Togl_Init(interp) == TCL_ERROR) { + return TCL_ERROR; + } + + /* + * Specify the C callback functions for widget creation, display, + * and reshape. + */ + Togl_CreateFunc(create_cb); + Togl_DisplayFunc(display_cb); + Togl_ReshapeFunc(reshape_cb); + Togl_TimerFunc(timer_cb); + + /* + * Make a new Togl widget command so the Tcl code can set a C variable. + */ + /* NONE */ + + /* + * Call Tcl_CreateCommand for application-specific commands, if + * they weren't already created by the init procedures called above. + */ + return TCL_OK; +} diff --git a/ng/Togl-1.7/index.tcl b/ng/Togl-1.7/index.tcl new file mode 100644 index 00000000..ce6b7a7f --- /dev/null +++ b/ng/Togl-1.7/index.tcl @@ -0,0 +1,51 @@ +#!/bin/sh +# the next line restarts using wish \ +exec wish "$0" "$@" + +# $Id: index.tcl,v 1.5 2001/12/20 13:59:31 beskow Exp $ + +# Togl - a Tk OpenGL widget +# Copyright (C) 1996 Brian Paul and Ben Bederson +# See the LICENSE file for copyright details. + + +# $Log: index.tcl,v $ +# Revision 1.5 2001/12/20 13:59:31 beskow +# Improved error-handling in togl.c in case of window creation failure +# Added pkgIndex target to makefile +# Updated documentation to reflect stubs-interface (Togl.html + new README.stubs) +# Added tk8.4a3 headers +# Removed obsolete Tk internal headers +# +# Revision 1.4 2001/01/29 18:11:53 brianp +# Jonas Beskow's changes to use Tcl/Tk stub interface +# +# Revision 1.3 1998/01/24 14:05:50 brianp +# added quit button (Ben Bederson) +# +# Revision 1.2 1997/04/11 01:37:34 brianp +# added a timer to rotate the triangles +# +# Revision 1.1 1996/10/23 23:18:11 brianp +# Initial revision +# + + +# A Tk/OpenGL widget demo using color-index mode. + +load [file dirname [info script]]/index[info sharedlibextension] + +proc setup {} { + wm title . "Color index demo" + + togl .win -width 200 -height 200 -rgba false -double true -privatecmap false -time 10 + button .btn -text Quit -command exit + + pack .win -expand true -fill both + pack .btn -expand true -fill both +} + + + +# Execution starts here! +setup diff --git a/ng/Togl-1.7/overlay.c b/ng/Togl-1.7/overlay.c new file mode 100644 index 00000000..c4f403ff --- /dev/null +++ b/ng/Togl-1.7/overlay.c @@ -0,0 +1,194 @@ +/* $Id: overlay.c,v 1.7 2005/04/23 07:49:13 gregcouch Exp $ */ + +/* + * Togl - a Tk OpenGL widget + * Copyright (C) 1996-1997 Brian Paul and Ben Bederson + * See the LICENSE file for copyright details. + */ + + +/* + * An example Togl program using an overlay. + */ + + +#include "togl.h" +#include +#include + + +/* + * The following variable is a special hack that is needed in order for + * Sun shared libraries to be used for Tcl. + */ +#ifdef SUN +extern int matherr(); +int *tclDummyMathPtr = (int *) matherr; +#endif + + +/* Overlay color indexes: */ +static unsigned long Red, Green; + + +/* + * Togl widget create callback. This is called by Tcl/Tk when the widget has + * been realized. Here's where one may do some one-time context setup or + * initializations. + */ +void +create_cb(Togl *togl) +{ + /* allocate overlay color indexes */ + Red = Togl_AllocColorOverlay(togl, 1.0, 0.0, 0.0); + Green = Togl_AllocColorOverlay(togl, 0.0, 1.0, 0.0); + + /* in this demo we always show the overlay */ + if (Togl_ExistsOverlay(togl)) { + Togl_ShowOverlay(togl); + printf("Red and green lines are in the overlay\n"); + } else { + printf("Sorry, this display doesn't support overlays\n"); + } +} + + +/* + * Togl widget reshape callback. This is called by Tcl/Tk when the widget + * has been resized. Typically, we call glViewport and perhaps setup the + * projection matrix. + */ +void +reshape_cb(Togl *togl) +{ + int width = Togl_Width(togl); + int height = Togl_Height(togl); + float aspect = (float) width / (float) height; + + /* Set up viewing for normal plane's context */ + glViewport(0, 0, width, height); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(-aspect, aspect, -1.0, 1.0, -1.0, 1.0); + glMatrixMode(GL_MODELVIEW); + + /* Set up viewing for overlay plane's context */ + if (Togl_ExistsOverlay(togl)) { + Togl_UseLayer(togl, TOGL_OVERLAY); + glViewport(0, 0, width, height); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); + glMatrixMode(GL_MODELVIEW); + Togl_UseLayer(togl, TOGL_NORMAL); + } +} + + +/* + * Togl widget overlay display callback. This is called by Tcl/Tk when the + * overlay has to be redrawn. + */ +void +overlay_display_cb(Togl *togl) +{ + glClear(GL_COLOR_BUFFER_BIT); + + glIndexi(Red); + glBegin(GL_LINES); + glVertex2f(-1.0, -1.0); + glVertex2f(1.0, 1.0); + glVertex2f(-1.0, 1.0); + glVertex2f(1.0, -1.0); + glEnd(); + + glIndexi(Green); + glBegin(GL_LINE_LOOP); + glVertex2f(-0.5, -0.5); + glVertex2f(0.5, -0.5); + glVertex2f(0.5, 0.5); + glVertex2f(-0.5, 0.5); + glEnd(); + glFlush(); +} + + +/* + * Togl widget display callback. This is called by Tcl/Tk when the widget's + * contents have to be redrawn. Typically, we clear the color and depth + * buffers, render our objects, then swap the front/back color buffers. + */ +void +display_cb(Togl *togl) +{ + glClear(GL_COLOR_BUFFER_BIT); + + glLoadIdentity(); + + glBegin(GL_TRIANGLES); + + glColor3f(1.0, 0.0, 1.0); + glVertex2f(-0.5, -0.3); + glVertex2f(0.5, -0.3); + glVertex2f(0.0, 0.6); + + glColor3f(1.0, 1.0, 0.0); + glVertex2f(-0.5 + 0.2, -0.3 - 0.2); + glVertex2f(0.5 + 0.2, -0.3 - 0.2); + glVertex2f(0.0 + 0.2, 0.6 - 0.2); + + glColor3f(0.0, 1.0, 1.0); + glVertex2f(-0.5 + 0.4, -0.3 - 0.4); + glVertex2f(0.5 + 0.4, -0.3 - 0.4); + glVertex2f(0.0 + 0.4, 0.6 - 0.4); + + glEnd(); + + glFlush(); +} + + +/* + * Called by Tk_Main() to let me initialize the modules (Togl) I will need. + */ +TOGL_EXTERN int +Overlay_Init(Tcl_Interp *interp) +{ + /* + * Initialize Tcl, Tk, and the Togl widget module. + */ +#ifdef USE_TCL_STUBS + if (Tcl_InitStubs(interp, "8.1", 0) == NULL) { + return TCL_ERROR; + } +#endif +#ifdef USE_TK_STUBS + if (Tk_InitStubs(interp, "8.1", 0) == NULL) { + return TCL_ERROR; + } +#endif + if (Togl_Init(interp) == TCL_ERROR) { + return TCL_ERROR; + } + + /* + * Specify the C callback functions for widget creation, display, + * and reshape. + */ + Togl_CreateFunc(create_cb); + Togl_DisplayFunc(display_cb); + Togl_ReshapeFunc(reshape_cb); + + Togl_OverlayDisplayFunc(overlay_display_cb); + + /* + * Make a new Togl widget command so the Tcl code can set a C variable. + */ + /* NONE */ + + /* + * Call Tcl_CreateCommand for application-specific commands, if + * they weren't already created by the init procedures called above. + */ + return TCL_OK; +} diff --git a/ng/Togl-1.7/overlay.tcl b/ng/Togl-1.7/overlay.tcl new file mode 100644 index 00000000..0be48bc6 --- /dev/null +++ b/ng/Togl-1.7/overlay.tcl @@ -0,0 +1,49 @@ +#!/bin/sh +# the next line restarts using wish \ +exec wish "$0" "$@" + +# $Id: overlay.tcl,v 1.4 2001/12/20 13:59:31 beskow Exp $ + +# Togl - a Tk OpenGL widget +# Copyright (C) 1996 Brian Paul and Ben Bederson +# See the LICENSE file for copyright details. + + +# $Log: overlay.tcl,v $ +# Revision 1.4 2001/12/20 13:59:31 beskow +# Improved error-handling in togl.c in case of window creation failure +# Added pkgIndex target to makefile +# Updated documentation to reflect stubs-interface (Togl.html + new README.stubs) +# Added tk8.4a3 headers +# Removed obsolete Tk internal headers +# +# Revision 1.3 2001/01/29 18:11:53 brianp +# Jonas Beskow's changes to use Tcl/Tk stub interface +# +# Revision 1.2 1998/01/24 14:05:50 brianp +# added quit button (Ben Bederson) +# +# Revision 1.1 1997/03/07 01:26:38 brianp +# Initial revision +# +# + + +# A Tk/OpenGL widget demo using an overlay. + +load [file dirname [info script]]/overlay[info sharedlibextension] + +proc setup {} { + wm title . "Overlay demo" + + togl .win -width 200 -height 200 -rgba true -double false -overlay true + button .btn -text Quit -command exit + + pack .win -expand true -fill both + pack .btn -expand true -fill both +} + + + +# Execution starts here! +setup diff --git a/ng/Togl-1.7/pkgIndex.tcl.in b/ng/Togl-1.7/pkgIndex.tcl.in new file mode 100644 index 00000000..af071e36 --- /dev/null +++ b/ng/Togl-1.7/pkgIndex.tcl.in @@ -0,0 +1,5 @@ +# +# Tcl package index file +# +package ifneeded @PACKAGE_NAME@ @PACKAGE_VERSION@ \ + [list load [file join $dir @PKG_LIB_FILE@]] diff --git a/ng/Togl-1.7/stereo.c b/ng/Togl-1.7/stereo.c new file mode 100644 index 00000000..0a33f1ee --- /dev/null +++ b/ng/Togl-1.7/stereo.c @@ -0,0 +1,352 @@ +/* $Id: stereo.c,v 1.6 2005/04/23 07:49:13 gregcouch Exp $ */ + +/* + * Togl - a Tk OpenGL widget + * Copyright (C) 1996-1997 Brian Paul and Ben Bederson + * See the LICENSE file for copyright details. + */ + +#include "togl.h" +#include +#include + +/* + * The following variable is a special hack that is needed in order for + * Sun shared libraries to be used for Tcl. + */ +#ifdef SUN +extern int matherr(); +int *tclDummyMathPtr = (int *) matherr; +#endif + + +static GLuint FontBase; +static float xAngle = 0.0, yAngle = 0.0, zAngle = 0.0; +static GLfloat CornerX, CornerY, CornerZ; /* where to print strings */ +static GLfloat scale = 1.0; + + + +/* + * Togl widget create callback. This is called by Tcl/Tk when the widget has + * been realized. Here's where one may do some one-time context setup or + * initializations. + */ +void +create_cb(Togl *togl) +{ + FontBase = Togl_LoadBitmapFont(togl, TOGL_BITMAP_8_BY_13); + if (!FontBase) { + printf("Couldn't load font!\n"); + exit(1); + } +} + + +/* + * Togl widget reshape callback. This is called by Tcl/Tk when the widget + * has been resized. Typically, we call glViewport and perhaps setup the + * projection matrix. + */ +void +reshape_cb(Togl *togl) +{ + int width = Togl_Width(togl); + int height = Togl_Height(togl); + float aspect = (float) width / (float) height; + + glViewport(0, 0, width, height); + + /* Set up projection transform */ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glFrustum(-aspect, aspect, -1.0, 1.0, 1.0, 10.0); + + CornerX = -aspect; + CornerY = -1.0; + CornerZ = -1.1; + + /* Change back to model view transform for rendering */ + glMatrixMode(GL_MODELVIEW); +} + + + +static void +print_string(const char *s) +{ + glCallLists(strlen(s), GL_UNSIGNED_BYTE, s); +} + + +/* + * Togl widget display callback. This is called by Tcl/Tk when the widget's + * contents have to be redrawn. Typically, we clear the color and depth + * buffers, render our objects, then swap the front/back color buffers. + */ +void +display_cb(Togl *togl) +{ + const char *ident; + GLfloat eyeDist = 2.0; + GLfloat eyeOffset = 0.05; + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glLoadIdentity(); /* Reset modelview matrix to the identity + * matrix */ + glTranslatef(0.0, 0.0, -3.0); /* Move the camera back three units */ + glScalef(scale, scale, scale); /* Zoom in and out */ + glRotatef(xAngle, 1.0, 0.0, 0.0); /* Rotate by X, Y, and Z angles */ + glRotatef(yAngle, 0.0, 1.0, 0.0); + glRotatef(zAngle, 0.0, 0.0, 1.0); + + glEnable(GL_DEPTH_TEST); + + /* stereo right eye */ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + Togl_StereoFrustum(-1, 1, -1, 1, 1, 10, eyeDist, eyeOffset); + glMatrixMode(GL_MODELVIEW); +#ifdef OLD_STEREO + Togl_OldStereoDrawBuffer(GL_BACK_RIGHT); + Togl_OldStereoClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +#else + glDrawBuffer(GL_BACK_RIGHT); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +#endif + + /* Front face */ + glBegin(GL_QUADS); + glColor3f(0.0, 0.7, 0.1); /* Green */ + glVertex3f(-1.0, 1.0, 1.0); + glVertex3f(1.0, 1.0, 1.0); + glVertex3f(1.0, -1.0, 1.0); + glVertex3f(-1.0, -1.0, 1.0); + /* Back face */ + glColor3f(0.9, 1.0, 0.0); /* Yellow */ + glVertex3f(-1.0, 1.0, -1.0); + glVertex3f(1.0, 1.0, -1.0); + glVertex3f(1.0, -1.0, -1.0); + glVertex3f(-1.0, -1.0, -1.0); + /* Top side face */ + glColor3f(0.2, 0.2, 1.0); /* Blue */ + glVertex3f(-1.0, 1.0, 1.0); + glVertex3f(1.0, 1.0, 1.0); + glVertex3f(1.0, 1.0, -1.0); + glVertex3f(-1.0, 1.0, -1.0); + /* Bottom side face */ + glColor3f(0.7, 0.0, 0.1); /* Red */ + glVertex3f(-1.0, -1.0, 1.0); + glVertex3f(1.0, -1.0, 1.0); + glVertex3f(1.0, -1.0, -1.0); + glVertex3f(-1.0, -1.0, -1.0); + glEnd(); + + /* stereo left eye */ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + Togl_StereoFrustum(-1, 1, -1, 1, 1, 10, eyeDist, -eyeOffset); + glMatrixMode(GL_MODELVIEW); + +#ifdef OLD_STEREO + Togl_OldStereoDrawBuffer(GL_BACK_LEFT); + Togl_OldStereoClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +#else + glDrawBuffer(GL_BACK_LEFT); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +#endif + + /* Front face */ + glBegin(GL_QUADS); + glColor3f(0.0, 0.7, 0.1); /* Green */ + glVertex3f(-1.0, 1.0, 1.0); + glVertex3f(1.0, 1.0, 1.0); + glVertex3f(1.0, -1.0, 1.0); + glVertex3f(-1.0, -1.0, 1.0); + /* Back face */ + glColor3f(0.9, 1.0, 0.0); /* Yellow */ + glVertex3f(-1.0, 1.0, -1.0); + glVertex3f(1.0, 1.0, -1.0); + glVertex3f(1.0, -1.0, -1.0); + glVertex3f(-1.0, -1.0, -1.0); + /* Top side face */ + glColor3f(0.2, 0.2, 1.0); /* Blue */ + glVertex3f(-1.0, 1.0, 1.0); + glVertex3f(1.0, 1.0, 1.0); + glVertex3f(1.0, 1.0, -1.0); + glVertex3f(-1.0, 1.0, -1.0); + /* Bottom side face */ + glColor3f(0.7, 0.0, 0.1); /* Red */ + glVertex3f(-1.0, -1.0, 1.0); + glVertex3f(1.0, -1.0, 1.0); + glVertex3f(1.0, -1.0, -1.0); + glVertex3f(-1.0, -1.0, -1.0); + glEnd(); + + + glDisable(GL_DEPTH_TEST); + glLoadIdentity(); + glColor3f(1.0, 1.0, 1.0); + glRasterPos3f(CornerX, CornerY, CornerZ); + glListBase(FontBase); + /* ident = Togl_Ident( togl ); if (strcmp(ident,"Single")==0) { + * print_string( "Single buffered" ); } else { print_string( "Double + * buffered" ); } */ + print_string(Togl_Ident(togl)); + Togl_SwapBuffers(togl); +} + + +int +setXrot_cb(Togl *togl, int argc, CONST84 char *argv[]) +{ + Tcl_Interp *interp = Togl_Interp(togl); + + /* error checking */ + if (argc != 3) { + Tcl_SetResult(interp, + "wrong # args: should be \"pathName setXrot ?angle?\"", + TCL_STATIC); + return TCL_ERROR; + } + + xAngle = atof(argv[2]); + + /* printf( "before %f ", xAngle ); */ + + if (xAngle < 0.0) { + xAngle += 360.0; + } else if (xAngle > 360.0) { + xAngle -= 360.0; + } + + /* printf( "after %f \n", xAngle ); */ + + Togl_PostRedisplay(togl); + + /* Let result string equal value */ + strcpy(interp->result, argv[2]); + return TCL_OK; +} + + +int +setYrot_cb(Togl *togl, int argc, CONST84 char *argv[]) +{ + Tcl_Interp *interp = Togl_Interp(togl); + + /* error checking */ + if (argc != 3) { + Tcl_SetResult(interp, + "wrong # args: should be \"pathName setYrot ?angle?\"", + TCL_STATIC); + return TCL_ERROR; + } + + yAngle = atof(argv[2]); + + if (yAngle < 0.0) { + yAngle += 360.0; + } else if (yAngle > 360.0) { + yAngle -= 360.0; + } + + Togl_PostRedisplay(togl); + + /* Let result string equal value */ + strcpy(interp->result, argv[2]); + return TCL_OK; +} + + +int +getXrot_cb(ClientData clientData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]) +{ + sprintf(interp->result, "%d", (int) xAngle); + return TCL_OK; +} + + +int +getYrot_cb(ClientData clientData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]) +{ + sprintf(interp->result, "%d", (int) yAngle); + return TCL_OK; +} + + +int +scale_cb(Togl *togl, int argc, CONST84 char *argv[]) +{ + Tcl_Interp *interp = Togl_Interp(togl); + + /* error checking */ + if (argc != 3) { + Tcl_SetResult(interp, + "wrong # args: should be \"pathName scale ?value?\"", + TCL_STATIC); + return TCL_ERROR; + } + + scale = atof(argv[2]); + + Togl_PostRedisplay(togl); + + /* Let result string equal value */ + strcpy(interp->result, argv[2]); + return TCL_OK; +} + + +TOGL_EXTERN int +Stereo_Init(Tcl_Interp *interp) +{ + /* + * Initialize Tcl, Tk, and the Togl widget module. + */ +#ifdef USE_TCL_STUBS + if (Tcl_InitStubs(interp, "8.1", 0) == NULL) { + return TCL_ERROR; + } +#endif +#ifdef USE_TK_STUBS + if (Tk_InitStubs(interp, "8.1", 0) == NULL) { + return TCL_ERROR; + } +#endif + + if (Togl_Init(interp) == TCL_ERROR) { + return TCL_ERROR; + } + + /* + * Specify the C callback functions for widget creation, display, + * and reshape. + */ + Togl_CreateFunc(create_cb); + Togl_DisplayFunc(display_cb); + Togl_ReshapeFunc(reshape_cb); + + /* + * Make a new Togl widget command so the Tcl code can set a C variable. + */ + + Togl_CreateCommand("setXrot", setXrot_cb); + Togl_CreateCommand("setYrot", setYrot_cb); + Togl_CreateCommand("scale", scale_cb); + + /* + * Call Tcl_CreateCommand for application-specific commands, if + * they weren't already created by the init procedures called above. + */ + + Tcl_CreateCommand(interp, "getXrot", getXrot_cb, (ClientData) NULL, + (Tcl_CmdDeleteProc *) NULL); + Tcl_CreateCommand(interp, "getYrot", getYrot_cb, (ClientData) NULL, + (Tcl_CmdDeleteProc *) NULL); + + return TCL_OK; +} diff --git a/ng/Togl-1.7/stereo.tcl b/ng/Togl-1.7/stereo.tcl new file mode 100644 index 00000000..ea5fc89f --- /dev/null +++ b/ng/Togl-1.7/stereo.tcl @@ -0,0 +1,108 @@ +#!/bin/sh +# the next line restarts using wish \ +exec wish "$0" "$@" + +# $Id: stereo.tcl,v 1.4 2004/12/21 05:28:39 gregcouch Exp $ + +# Togl - a Tk OpenGL widget +# Copyright (C) 1996 Brian Paul and Ben Bederson +# See the LICENSE file for copyright details. + + +# $Log: stereo.tcl,v $ +# Revision 1.4 2004/12/21 05:28:39 gregcouch +# Apply outstanding patches and Mac OS X support. +# +# Revision 1.3 2001/12/20 13:59:31 beskow +# Improved error-handling in togl.c in case of window creation failure +# Added pkgIndex target to makefile +# Updated documentation to reflect stubs-interface (Togl.html + new README.stubs) +# Added tk8.4a3 headers +# Removed obsolete Tk internal headers +# +# Revision 1.2 2001/01/29 18:11:53 brianp +# Jonas Beskow's changes to use Tcl/Tk stub interface +# +# Revision 1.1 1997/10/01 02:53:12 brianp +# Initial revision +# +# +# Revision 1.1 1997/9/28 18:54:46 Ben Evans +# Initial revision. Based on double.tcl +# + + +# An Tk/OpenGL widget demo with two windows, one single buffered and the +# other double buffered. + +load [file dirname [info script]]/stereo[info sharedlibextension] + +proc setup {} { + global scale + set scale 1.0 + wm title . "Full Screen Stereo Buffering" + + frame .f1 + togl .f1.o1 -width 200 -height 200 -rgba true -stereo true -double true -depth true -ident "stereo buffer" + + scale .sx -label {X Axis} -from 0 -to 360 -command {setAngle x} -orient horizontal + scale .sy -label {Y Axis} -from 0 -to 360 -command {setAngle y} -orient horizontal + button .btn -text Quit -command exit + + bind .f1.o1 { + motion_event [lindex [%W config -width] 4] \ + [lindex [%W config -height] 4] \ + %x %y + } + + bind .f1.o1 { + set startx %x + set starty %y + set scale0 $scale + } + + bind .f1.o1 { + set q [ expr ($starty - %y) / 400.0 ] + set scale [expr $scale0 * exp($q)] + .f1.o1 scale $scale + } + + pack .f1.o1 -side left -padx 3 -pady 3 -fill both -expand t + pack .f1 -fill both -expand t + pack .sx -fill x + pack .sy -fill x + pack .btn -fill x + + if {[string first $::tcl_platform(os) IRIX] != -1} { + puts "use /usr/gfx/setmon -n 60 to reset display and /usr/gfx/setmon -n STR_RECT to put in display in stereo mode" + } + +} + + + +# This is called when mouse button 1 is pressed and moved in either of +# the OpenGL windows. +proc motion_event { width height x y } { + .f1.o1 setXrot [expr 360.0 * $y / $height] + .f1.o1 setYrot [expr 360.0 * ($width - $x) / $width] + +# .sx set [expr 360.0 * $y / $height] +# .sy set [expr 360.0 * ($width - $x) / $width] + + .sx set [getXrot] + .sy set [getYrot] +} + +# This is called when a slider is changed. +proc setAngle {axis value} { + global xAngle yAngle zAngle + + switch -exact $axis { + x {.f1.o1 setXrot $value} + y {.f1.o1 setYrot $value} + } +} + +# Execution starts here! +setup diff --git a/ng/Togl-1.7/tclconfig/README.txt b/ng/Togl-1.7/tclconfig/README.txt new file mode 100644 index 00000000..59b5a3e8 --- /dev/null +++ b/ng/Togl-1.7/tclconfig/README.txt @@ -0,0 +1,26 @@ +These files comprise the basic building blocks for a Tcl Extension +Architecture (TEA) extension. For more information on TEA see: + + http://www.tcl.tk/doc/tea/ + +This package is part of the Tcl project at SourceForge, and latest +sources should be available there: + + http://tcl.sourceforge.net/ + +This package is a freely available open source package. You can do +virtually anything you like with it, such as modifying it, redistributing +it, and selling it either in whole or in part. + +CONTENTS +======== +The following is a short description of the files you will find in +the sample extension. + +README.txt This file + +install-sh Program used for copying binaries and script files + to their install locations. + +tcl.m4 Collection of Tcl autoconf macros. Included by a package's + aclocal.m4 to define TEA_* macros. diff --git a/ng/Togl-1.7/tclconfig/install-sh b/ng/Togl-1.7/tclconfig/install-sh new file mode 100644 index 00000000..0ff4b6a0 --- /dev/null +++ b/ng/Togl-1.7/tclconfig/install-sh @@ -0,0 +1,119 @@ +#!/bin/sh + +# +# install - install a program, script, or datafile +# This comes from X11R5; it is not part of GNU. +# +# $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ +# +# This script is compatible with the BSD install script, but was written +# from scratch. +# + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" + +instcmd="$mvprog" +chmodcmd="" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +fi + +if [ x"$dst" = x ] +then + echo "install: no destination specified" + exit 1 +fi + + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + +if [ -d $dst ] +then + dst="$dst"/`basename $src` +fi + +# Make a temp file name in the proper directory. + +dstdir=`dirname $dst` +dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + +$doit $instcmd $src $dsttmp + +# and set any options; do chmod last to preserve setuid bits + +if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi +if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi +if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi +if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi + +# Now rename the file to the real destination. + +$doit $rmcmd $dst +$doit $mvcmd $dsttmp $dst + + +exit 0 diff --git a/ng/Togl-1.7/tclconfig/tcl.m4 b/ng/Togl-1.7/tclconfig/tcl.m4 new file mode 100644 index 00000000..2862ae18 --- /dev/null +++ b/ng/Togl-1.7/tclconfig/tcl.m4 @@ -0,0 +1,3959 @@ +# tcl.m4 -- +# +# This file provides a set of autoconf macros to help TEA-enable +# a Tcl extension. +# +# Copyright (c) 1999-2000 Ajuba Solutions. +# Copyright (c) 2002-2005 ActiveState Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# +# RCS: @(#) $Id: tcl.m4,v 1.4 2006/01/06 00:09:00 gregcouch Exp $ + +AC_PREREQ(2.50) + +# Possible values for key variables defined: +# +# TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem') +# TEA_PLATFORM - windows unix +# + +#------------------------------------------------------------------------ +# TEA_PATH_TCLCONFIG -- +# +# Locate the tclConfig.sh file and perform a sanity check on +# the Tcl compile flags +# +# Arguments: +# none +# +# Results: +# +# Adds the following arguments to configure: +# --with-tcl=... +# +# Defines the following vars: +# TCL_BIN_DIR Full path to the directory containing +# the tclConfig.sh file +#------------------------------------------------------------------------ + +AC_DEFUN(TEA_PATH_TCLCONFIG, [ + dnl Make sure we are initialized + AC_REQUIRE([TEA_INIT]) + # + # Ok, lets find the tcl configuration + # First, look for one uninstalled. + # the alternative search directory is invoked by --with-tcl + # + + if test x"${no_tcl}" = x ; then + # we reset no_tcl in case something fails here + no_tcl=true + AC_ARG_WITH(tcl, [ --with-tcl directory containing tcl configuration (tclConfig.sh)], with_tclconfig=${withval}) + AC_MSG_CHECKING([for Tcl configuration]) + AC_CACHE_VAL(ac_cv_c_tclconfig,[ + + # First check to see if --with-tcl was specified. + if test x"${with_tclconfig}" != x ; then + case ${with_tclconfig} in + */tclConfig.sh ) + if test -f ${with_tclconfig}; then + AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself]) + with_tclconfig=`echo ${with_tclconfig} | sed 's!/tclConfig\.sh$!!'` + fi ;; + esac + if test -f "${with_tclconfig}/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd ${with_tclconfig}; pwd)` + else + AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh]) + fi + fi + + # then check for a private Tcl installation + if test x"${ac_cv_c_tclconfig}" = x ; then + for i in \ + ../tcl \ + `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ + ../../tcl \ + `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ + ../../../tcl \ + `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do + if test -f "$i/unix/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd $i/unix; pwd)` + break + fi + done + fi + + # on Darwin, check in Framework installation locations + if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then + for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ + `ls -d /Library/Frameworks 2>/dev/null` \ + `ls -d /Network/Library/Frameworks 2>/dev/null` \ + `ls -d /System/Library/Frameworks 2>/dev/null` \ + ; do + if test -f "$i/Tcl.framework/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd $i/Tcl.framework; pwd)` + break + fi + done + fi + + # check in a few common install locations + if test x"${ac_cv_c_tclconfig}" = x ; then + for i in `ls -d ${libdir} 2>/dev/null` \ + `ls -d ${exec_prefix}/lib 2>/dev/null` \ + `ls -d ${prefix}/lib 2>/dev/null` \ + `ls -d /usr/local/lib 2>/dev/null` \ + `ls -d /usr/contrib/lib 2>/dev/null` \ + `ls -d /usr/lib 2>/dev/null` \ + ; do + if test -f "$i/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd $i; pwd)` + break + fi + done + fi + + # check in a few other private locations + if test x"${ac_cv_c_tclconfig}" = x ; then + for i in \ + ${srcdir}/../tcl \ + `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do + if test -f "$i/unix/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd $i/unix; pwd)` + break + fi + done + fi + ]) + + if test x"${ac_cv_c_tclconfig}" = x ; then + TCL_BIN_DIR="# no Tcl configs found" + AC_MSG_WARN("Cannot find Tcl configuration definitions") + exit 0 + else + no_tcl= + TCL_BIN_DIR=${ac_cv_c_tclconfig} + AC_MSG_RESULT([found $TCL_BIN_DIR/tclConfig.sh]) + fi + fi +]) + +#------------------------------------------------------------------------ +# TEA_PATH_TKCONFIG -- +# +# Locate the tkConfig.sh file +# +# Arguments: +# none +# +# Results: +# +# Adds the following arguments to configure: +# --with-tk=... +# +# Defines the following vars: +# TK_BIN_DIR Full path to the directory containing +# the tkConfig.sh file +#------------------------------------------------------------------------ + +AC_DEFUN(TEA_PATH_TKCONFIG, [ + # + # Ok, lets find the tk configuration + # First, look for one uninstalled. + # the alternative search directory is invoked by --with-tk + # + + if test x"${no_tk}" = x ; then + # we reset no_tk in case something fails here + no_tk=true + AC_ARG_WITH(tk, [ --with-tk directory containing tk configuration (tkConfig.sh)], with_tkconfig=${withval}) + AC_MSG_CHECKING([for Tk configuration]) + AC_CACHE_VAL(ac_cv_c_tkconfig,[ + + # First check to see if --with-tkconfig was specified. + if test x"${with_tkconfig}" != x ; then + case ${with_tkconfig} in + */tkConfig.sh ) + if test -f ${with_tkconfig}; then + AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself]) + with_tkconfig=`echo ${with_tkconfig} | sed 's!/tkConfig\.sh$!!'` + fi ;; + esac + if test -f "${with_tkconfig}/tkConfig.sh" ; then + ac_cv_c_tkconfig=`(cd ${with_tkconfig}; pwd)` + else + AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh]) + fi + fi + + # then check for a private Tk library + if test x"${ac_cv_c_tkconfig}" = x ; then + for i in \ + ../tk \ + `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \ + ../../tk \ + `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \ + ../../../tk \ + `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do + if test -f "$i/unix/tkConfig.sh" ; then + ac_cv_c_tkconfig=`(cd $i/unix; pwd)` + break + fi + done + fi + + # on Darwin, check in Framework installation locations + if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then + for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ + `ls -d /Library/Frameworks 2>/dev/null` \ + `ls -d /Network/Library/Frameworks 2>/dev/null` \ + `ls -d /System/Library/Frameworks 2>/dev/null` \ + ; do + if test -f "$i/Tk.framework/tkConfig.sh" ; then + ac_cv_c_tkconfig=`(cd $i/Tk.framework; pwd)` + break + fi + done + fi + + # check in a few common install locations + if test x"${ac_cv_c_tkconfig}" = x ; then + for i in `ls -d ${libdir} 2>/dev/null` \ + `ls -d ${exec_prefix}/lib 2>/dev/null` \ + `ls -d ${prefix}/lib 2>/dev/null` \ + `ls -d /usr/local/lib 2>/dev/null` \ + `ls -d /usr/contrib/lib 2>/dev/null` \ + `ls -d /usr/lib 2>/dev/null` \ + ; do + if test -f "$i/tkConfig.sh" ; then + ac_cv_c_tkconfig=`(cd $i; pwd)` + break + fi + done + fi + # check in a few other private locations + if test x"${ac_cv_c_tkconfig}" = x ; then + for i in \ + ${srcdir}/../tk \ + `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do + if test -f "$i/unix/tkConfig.sh" ; then + ac_cv_c_tkconfig=`(cd $i/unix; pwd)` + break + fi + done + fi + ]) + + if test x"${ac_cv_c_tkconfig}" = x ; then + TK_BIN_DIR="# no Tk configs found" + AC_MSG_WARN("Cannot find Tk configuration definitions") + exit 0 + else + no_tk= + TK_BIN_DIR=${ac_cv_c_tkconfig} + AC_MSG_RESULT([found $TK_BIN_DIR/tkConfig.sh]) + fi + fi +]) + +#------------------------------------------------------------------------ +# TEA_LOAD_TCLCONFIG -- +# +# Load the tclConfig.sh file +# +# Arguments: +# +# Requires the following vars to be set: +# TCL_BIN_DIR +# +# Results: +# +# Subst the following vars: +# TCL_BIN_DIR +# TCL_SRC_DIR +# TCL_LIB_FILE +# +#------------------------------------------------------------------------ + +AC_DEFUN(TEA_LOAD_TCLCONFIG, [ + AC_MSG_CHECKING([for existence of $TCL_BIN_DIR/tclConfig.sh]) + + if test -f "$TCL_BIN_DIR/tclConfig.sh" ; then + AC_MSG_RESULT([loading]) + . $TCL_BIN_DIR/tclConfig.sh + else + AC_MSG_RESULT([file not found]) + fi + + # + # If the TCL_BIN_DIR is the build directory (not the install directory), + # then set the common variable name to the value of the build variables. + # For example, the variable TCL_LIB_SPEC will be set to the value + # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC + # instead of TCL_BUILD_LIB_SPEC since it will work with both an + # installed and uninstalled version of Tcl. + # + + if test -f $TCL_BIN_DIR/Makefile ; then + TCL_LIB_SPEC=${TCL_BUILD_LIB_SPEC} + TCL_STUB_LIB_SPEC=${TCL_BUILD_STUB_LIB_SPEC} + TCL_STUB_LIB_PATH=${TCL_BUILD_STUB_LIB_PATH} + fi + + # + # eval is required to do the TCL_DBGX substitution + # + + eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\"" + eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" + eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" + + eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\"" + eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" + eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" + + AC_SUBST(TCL_VERSION) + AC_SUBST(TCL_BIN_DIR) + AC_SUBST(TCL_SRC_DIR) + + AC_SUBST(TCL_LIB_FILE) + AC_SUBST(TCL_LIB_FLAG) + AC_SUBST(TCL_LIB_SPEC) + + AC_SUBST(TCL_STUB_LIB_FILE) + AC_SUBST(TCL_STUB_LIB_FLAG) + AC_SUBST(TCL_STUB_LIB_SPEC) + + AC_SUBST(TCL_LIBS) + AC_SUBST(TCL_DEFS) + AC_SUBST(TCL_EXTRA_CFLAGS) + AC_SUBST(TCL_LD_FLAGS) + AC_SUBST(TCL_SHLIB_LD_LIBS) + #AC_SUBST(TCL_BUILD_LIB_SPEC) + #AC_SUBST(TCL_BUILD_STUB_LIB_SPEC) +]) + +#------------------------------------------------------------------------ +# TEA_LOAD_TKCONFIG -- +# +# Load the tkConfig.sh file +# +# Arguments: +# +# Requires the following vars to be set: +# TK_BIN_DIR +# +# Results: +# +# Sets the following vars that should be in tkConfig.sh: +# TK_BIN_DIR +#------------------------------------------------------------------------ + +AC_DEFUN(TEA_LOAD_TKCONFIG, [ + AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh]) + + if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then + AC_MSG_RESULT([loading]) + . $TK_BIN_DIR/tkConfig.sh + else + AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh]) + fi + + # + # If the TK_BIN_DIR is the build directory (not the install directory), + # then set the common variable name to the value of the build variables. + # For example, the variable TK_LIB_SPEC will be set to the value + # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC + # instead of TK_BUILD_LIB_SPEC since it will work with both an + # installed and uninstalled version of Tcl. + # + + if test -f $TK_BIN_DIR/Makefile ; then + TK_LIB_SPEC=${TK_BUILD_LIB_SPEC} + TK_STUB_LIB_SPEC=${TK_BUILD_STUB_LIB_SPEC} + TK_STUB_LIB_PATH=${TK_BUILD_STUB_LIB_PATH} + fi + + # Ensure windowingsystem is defined + if test "${TEA_PLATFORM}" = "unix" ; then + case ${TK_DEFS} in + *MAC_OSX_TK*) + AC_DEFINE(MAC_OSX_TK, 1, [Are we building against Mac OS X TkAqua?]) + TEA_WINDOWINGSYSTEM="aqua" + ;; + *) + TEA_WINDOWINGSYSTEM="x11" + ;; + esac + elif test "${TEA_PLATFORM}" = "windows" ; then + TEA_WINDOWINGSYSTEM="win32" + fi + + # + # eval is required to do the TK_DBGX substitution + # + + eval "TK_LIB_FILE=\"${TK_LIB_FILE}\"" + eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\"" + eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\"" + + eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\"" + eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\"" + eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\"" + + AC_SUBST(TK_VERSION) + AC_SUBST(TK_BIN_DIR) + AC_SUBST(TK_SRC_DIR) + + AC_SUBST(TK_LIB_FILE) + AC_SUBST(TK_LIB_FLAG) + AC_SUBST(TK_LIB_SPEC) + + AC_SUBST(TK_STUB_LIB_FILE) + AC_SUBST(TK_STUB_LIB_FLAG) + AC_SUBST(TK_STUB_LIB_SPEC) + + AC_SUBST(TK_LIBS) + AC_SUBST(TK_XINCLUDES) +]) + +#------------------------------------------------------------------------ +# TEA_ENABLE_SHARED -- +# +# Allows the building of shared libraries +# +# Arguments: +# none +# +# Results: +# +# Adds the following arguments to configure: +# --enable-shared=yes|no +# +# Defines the following vars: +# STATIC_BUILD Used for building import/export libraries +# on Windows. +# +# Sets the following vars: +# SHARED_BUILD Value of 1 or 0 +#------------------------------------------------------------------------ + +AC_DEFUN(TEA_ENABLE_SHARED, [ + AC_MSG_CHECKING([how to build libraries]) + AC_ARG_ENABLE(shared, + [ --enable-shared build and link with shared libraries [--enable-shared]], + [tcl_ok=$enableval], [tcl_ok=yes]) + + if test "${enable_shared+set}" = set; then + enableval="$enable_shared" + tcl_ok=$enableval + else + tcl_ok=yes + fi + + if test "$tcl_ok" = "yes" ; then + AC_MSG_RESULT([shared]) + SHARED_BUILD=1 + else + AC_MSG_RESULT([static]) + SHARED_BUILD=0 + AC_DEFINE(STATIC_BUILD, 1, [Is this a static build?]) + fi + AC_SUBST(SHARED_BUILD) +]) + +#------------------------------------------------------------------------ +# TEA_ENABLE_THREADS -- +# +# Specify if thread support should be enabled. If "yes" is specified +# as an arg (optional), threads are enabled by default, "no" means +# threads are disabled. "yes" is the default. +# +# TCL_THREADS is checked so that if you are compiling an extension +# against a threaded core, your extension must be compiled threaded +# as well. +# +# Note that it is legal to have a thread enabled extension run in a +# threaded or non-threaded Tcl core, but a non-threaded extension may +# only run in a non-threaded Tcl core. +# +# Arguments: +# none +# +# Results: +# +# Adds the following arguments to configure: +# --enable-threads +# +# Sets the following vars: +# THREADS_LIBS Thread library(s) +# +# Defines the following vars: +# TCL_THREADS +# _REENTRANT +# +#------------------------------------------------------------------------ + +AC_DEFUN(TEA_ENABLE_THREADS, [ + AC_ARG_ENABLE(threads, [ --enable-threads build with threads], + [tcl_ok=$enableval], [tcl_ok=yes]) + + if test "${enable_threads+set}" = set; then + enableval="$enable_threads" + tcl_ok=$enableval + else + tcl_ok=yes + fi + + if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then + TCL_THREADS=1 + + if test "${TEA_PLATFORM}" != "windows" ; then + # We are always OK on Windows, so check what this platform wants. + AC_DEFINE(USE_THREAD_ALLOC, 1, + [Do we want to use the threaded memory allocator?]) + AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) + AC_DEFINE(_THREAD_SAFE, 1, [Do we want the thread-safe OS API?]) + AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no) + if test "$tcl_ok" = "no"; then + # Check a little harder for __pthread_mutex_init in the + # same library, as some systems hide it there until + # pthread.h is defined. We could alternatively do an + # AC_TRY_COMPILE with pthread.h, but that will work with + # libpthread really doesn't exist, like AIX 4.2. + # [Bug: 4359] + AC_CHECK_LIB(pthread, __pthread_mutex_init, + tcl_ok=yes, tcl_ok=no) + fi + + if test "$tcl_ok" = "yes"; then + # The space is needed + THREADS_LIBS=" -lpthread" + else + AC_CHECK_LIB(pthreads, pthread_mutex_init, + tcl_ok=yes, tcl_ok=no) + if test "$tcl_ok" = "yes"; then + # The space is needed + THREADS_LIBS=" -lpthreads" + else + AC_CHECK_LIB(c, pthread_mutex_init, + tcl_ok=yes, tcl_ok=no) + if test "$tcl_ok" = "no"; then + AC_CHECK_LIB(c_r, pthread_mutex_init, + tcl_ok=yes, tcl_ok=no) + if test "$tcl_ok" = "yes"; then + # The space is needed + THREADS_LIBS=" -pthread" + else + TCL_THREADS=0 + AC_MSG_WARN("Don t know how to find pthread lib on your system - thread support disabled") + fi + fi + fi + fi + +dnl # Not needed in TEA +dnl # Does the pthread-implementation provide +dnl # 'pthread_attr_setstacksize' ? +dnl +dnl ac_saved_libs=$LIBS +dnl LIBS="$LIBS $THREADS_LIBS" +dnl AC_CHECK_FUNCS(pthread_attr_setstacksize) +dnl LIBS=$ac_saved_libs + fi + else + TCL_THREADS=0 + fi + # Do checking message here to not mess up interleaved configure output + AC_MSG_CHECKING([for building with threads]) + if test "${TCL_THREADS}" = "1"; then + AC_DEFINE(TCL_THREADS, 1, [Are we building with threads enabled?]) + #LIBS="$LIBS $THREADS_LIBS" + AC_MSG_RESULT([yes (default)]) + else + AC_MSG_RESULT([no]) + fi + # TCL_THREADS sanity checking. See if our request for building with + # threads is the same as the way Tcl was built. If not, warn the user. + case ${TCL_DEFS} in + *THREADS=1*) + if test "${TCL_THREADS}" = "0"; then + AC_MSG_WARN([ + Building ${PACKAGE_NAME} without threads enabled, but building against Tcl + that IS thread-enabled. It is recommended to use --enable-threads.]) + fi + ;; + *) + if test "${TCL_THREADS}" = "1"; then + AC_MSG_WARN([ + --enable-threads requested, but building against a Tcl that is NOT + thread-enabled. This is an OK configuration that will also run in + a thread-enabled core.]) + fi + ;; + esac + AC_SUBST(TCL_THREADS) +]) + +#------------------------------------------------------------------------ +# TEA_ENABLE_SYMBOLS -- +# +# Specify if debugging symbols should be used +# Memory (TCL_MEM_DEBUG) debugging can also be enabled. +# +# Arguments: +# none +# +# Requires the following vars to be set: +# CFLAGS_DEBUG +# CFLAGS_OPTIMIZE +# LDFLAGS_DEBUG +# LDFLAGS_OPTIMIZE +# +# Results: +# +# Adds the following arguments to configure: +# --enable-symbols +# +# Defines the following vars: +# CFLAGS_DEFAULT Sets to CFLAGS_DEBUG if true +# Sets to CFLAGS_OPTIMIZE if false +# LDFLAGS_DEFAULT Sets to LDFLAGS_DEBUG if true +# Sets to LDFLAGS_OPTIMIZE if false +# DBGX Formerly used as debug library extension; +# always blank now. +# +#------------------------------------------------------------------------ + +AC_DEFUN(TEA_ENABLE_SYMBOLS, [ + dnl Make sure we are initialized + AC_REQUIRE([TEA_CONFIG_CFLAGS]) + + DBGX="" + + AC_MSG_CHECKING([for build with symbols]) + AC_ARG_ENABLE(symbols, [ --enable-symbols build with debugging symbols [--disable-symbols]], [tcl_ok=$enableval], [tcl_ok=no]) + if test "$tcl_ok" = "no"; then + CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE}" + LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" + AC_MSG_RESULT([no]) + else + CFLAGS_DEFAULT="${CFLAGS_DEBUG}" + LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" + if test "$tcl_ok" = "yes"; then + AC_MSG_RESULT([yes (standard debugging)]) + fi + fi + if test "${TEA_PLATFORM}" != "windows" ; then + LDFLAGS_DEFAULT="${LDFLAGS}" + fi + + AC_SUBST(TCL_DBGX) + AC_SUBST(CFLAGS_DEFAULT) + AC_SUBST(LDFLAGS_DEFAULT) + + if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then + AC_DEFINE(TCL_MEM_DEBUG, 1, [Is memory debugging enabled?]) + fi + + if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then + if test "$tcl_ok" = "all"; then + AC_MSG_RESULT([enabled symbols mem debugging]) + else + AC_MSG_RESULT([enabled $tcl_ok debugging]) + fi + fi +]) + +#------------------------------------------------------------------------ +# TEA_ENABLE_LANGINFO -- +# +# Allows use of modern nl_langinfo check for better l10n. +# This is only relevant for Unix. +# +# Arguments: +# none +# +# Results: +# +# Adds the following arguments to configure: +# --enable-langinfo=yes|no (default is yes) +# +# Defines the following vars: +# HAVE_LANGINFO Triggers use of nl_langinfo if defined. +# +#------------------------------------------------------------------------ + +AC_DEFUN(TEA_ENABLE_LANGINFO, [ + AC_ARG_ENABLE(langinfo, + [ --enable-langinfo use nl_langinfo if possible to determine + encoding at startup, otherwise use old heuristic], + [langinfo_ok=$enableval], [langinfo_ok=yes]) + + HAVE_LANGINFO=0 + if test "$langinfo_ok" = "yes"; then + AC_CHECK_HEADER(langinfo.h,[langinfo_ok=yes],[langinfo_ok=no]) + fi + AC_MSG_CHECKING([whether to use nl_langinfo]) + if test "$langinfo_ok" = "yes"; then + AC_CACHE_VAL(tcl_cv_langinfo_h, + AC_TRY_COMPILE([#include ], [nl_langinfo(CODESET);], + [tcl_cv_langinfo_h=yes],[tcl_cv_langinfo_h=no])) + AC_MSG_RESULT($tcl_cv_langinfo_h) + if test $tcl_cv_langinfo_h = yes; then + AC_DEFINE(HAVE_LANGINFO, 1, [Do we have nl_langinfo()?]) + fi + else + AC_MSG_RESULT([$langinfo_ok]) + fi +]) + +#-------------------------------------------------------------------- +# TEA_CONFIG_CFLAGS +# +# Try to determine the proper flags to pass to the compiler +# for building shared libraries and other such nonsense. +# +# Arguments: +# none +# +# Results: +# +# Defines the following vars: +# +# DL_OBJS - Name of the object file that implements dynamic +# loading for Tcl on this system. +# DL_LIBS - Library file(s) to include in tclsh and other base +# applications in order for the "load" command to work. +# LDFLAGS - Flags to pass to the compiler when linking object +# files into an executable application binary such +# as tclsh. +# LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib", +# that tell the run-time dynamic linker where to look +# for shared libraries such as libtcl.so. Depends on +# the variable LIB_RUNTIME_DIR in the Makefile. +# SHLIB_CFLAGS - Flags to pass to cc when compiling the components +# of a shared library (may request position-independent +# code, among other things). +# SHLIB_LD - Base command to use for combining object files +# into a shared library. +# SHLIB_LD_LIBS - Dependent libraries for the linker to scan when +# creating shared libraries. This symbol typically +# goes at the end of the "ld" commands that build +# shared libraries. The value of the symbol is +# "${LIBS}" if all of the dependent libraries should +# be specified when creating a shared library. If +# dependent libraries should not be specified (as on +# SunOS 4.x, where they cause the link to fail, or in +# general if Tcl and Tk aren't themselves shared +# libraries), then this symbol has an empty string +# as its value. +# SHLIB_SUFFIX - Suffix to use for the names of dynamically loadable +# extensions. An empty string means we don't know how +# to use shared libraries on this platform. +# TCL_LIB_FILE - Name of the file that contains the Tcl library, such +# as libtcl7.8.so or libtcl7.8.a. +# TCL_LIB_SUFFIX -Specifies everything that comes after the "libtcl" +# in the shared library name, using the +# ${PACKAGE_VERSION} variable to put the version in +# the right place. This is used by platforms that +# need non-standard library names. +# Examples: ${PACKAGE_VERSION}.so.1.1 on NetBSD, +# since it needs to have a version after the .so, and +# ${PACKAGE_VERSION}.a on AIX, since the Tcl shared +# library needs to have a .a extension whereas shared +# objects for loadable extensions have a .so +# extension. Defaults to +# ${PACKAGE_VERSION}${SHLIB_SUFFIX}. +# TCL_NEEDS_EXP_FILE - +# 1 means that an export file is needed to link to a +# shared library. +# TCL_EXP_FILE - The name of the installed export / import file which +# should be used to link to the Tcl shared library. +# Empty if Tcl is unshared. +# TCL_BUILD_EXP_FILE - +# The name of the built export / import file which +# should be used to link to the Tcl shared library. +# Empty if Tcl is unshared. +# CFLAGS_DEBUG - +# Flags used when running the compiler in debug mode +# CFLAGS_OPTIMIZE - +# Flags used when running the compiler in optimize mode +# CFLAGS - We add CFLAGS to pass to the compiler +# +# Subst's the following vars: +# DL_LIBS +# CFLAGS_DEBUG +# CFLAGS_OPTIMIZE +# CFLAGS_WARNING +# +# STLIB_LD +# SHLIB_LD +# SHLIB_CFLAGS +# LDFLAGS_DEBUG +# LDFLAGS_OPTIMIZE +#-------------------------------------------------------------------- + +AC_DEFUN(TEA_CONFIG_CFLAGS, [ + dnl Make sure we are initialized + AC_REQUIRE([TEA_INIT]) + + # Step 0: Enable 64 bit support? + + AC_MSG_CHECKING([if 64bit support is enabled]) + AC_ARG_ENABLE(64bit,[ --enable-64bit enable 64bit support (where applicable)], [do64bit=$enableval], [do64bit=no]) + AC_MSG_RESULT([$do64bit]) + + # Step 0.b: Enable Solaris 64 bit VIS support? + + AC_MSG_CHECKING([if 64bit Sparc VIS support is requested]) + AC_ARG_ENABLE(64bit-vis,[ --enable-64bit-vis enable 64bit Sparc VIS support], [do64bitVIS=$enableval], [do64bitVIS=no]) + AC_MSG_RESULT([$do64bitVIS]) + + if test "$do64bitVIS" = "yes"; then + # Force 64bit on with VIS + do64bit=yes + fi + + # Step 0.c: Cross-compiling options for Windows/CE builds? + + if test "${TEA_PLATFORM}" = "windows" ; then + AC_MSG_CHECKING([if Windows/CE build is requested]) + AC_ARG_ENABLE(wince,[ --enable-wince enable Win/CE support (where applicable)], [doWince=$enableval], [doWince=no]) + AC_MSG_RESULT($doWince) + fi + + # Step 1: set the variable "system" to hold the name and version number + # for the system. This can usually be done via the "uname" command, but + # there are a few systems, like Next, where this doesn't work. + + AC_MSG_CHECKING([system version (for dynamic loading)]) + if test -f /usr/lib/NextStep/software_version; then + system=NEXTSTEP-`awk '/3/,/3/' /usr/lib/NextStep/software_version` + else + system=`uname -s`-`uname -r` + if test "$?" -ne 0 ; then + AC_MSG_RESULT([unknown (can't find uname command)]) + system=unknown + else + # Special check for weird MP-RAS system (uname returns weird + # results, and the version is kept in special file). + + if test -r /etc/.relid -a "X`uname -n`" = "X`uname -s`" ; then + system=MP-RAS-`awk '{print $3}' /etc/.relid` + fi + if test "`uname -s`" = "AIX" ; then + system=AIX-`uname -v`.`uname -r` + fi + if test "${TEA_PLATFORM}" = "windows" ; then + system=windows + fi + AC_MSG_RESULT([$system]) + fi + fi + + # Step 2: check for existence of -ldl library. This is needed because + # Linux can use either -ldl or -ldld for dynamic loading. + + AC_CHECK_LIB(dl, dlopen, have_dl=yes, have_dl=no) + + # Step 3: set configuration options based on system name and version. + # This is similar to Tcl's unix/tcl.m4 except that we've added a + # "windows" case and CC_SEARCH_FLAGS becomes LD_SEARCH_FLAGS for us + # (and we have no CC_SEARCH_FLAGS). + + do64bit_ok=no + LDFLAGS_ORIG="$LDFLAGS" + TCL_EXPORT_FILE_SUFFIX="" + UNSHARED_LIB_SUFFIX="" + TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' + ECHO_VERSION='`echo ${PACKAGE_VERSION}`' + TCL_LIB_VERSIONS_OK=ok + CFLAGS_DEBUG=-g + if test "$GCC" = "yes" ; then + CFLAGS_OPTIMIZE=-O2 + CFLAGS_WARNING="-Wall -Wno-implicit-int" + else + CFLAGS_OPTIMIZE=-O + CFLAGS_WARNING="" + fi + TCL_NEEDS_EXP_FILE=0 + TCL_BUILD_EXP_FILE="" + TCL_EXP_FILE="" +dnl FIXME: Replace AC_CHECK_PROG with AC_CHECK_TOOL once cross compiling is fixed. +dnl AC_CHECK_TOOL(AR, ar, :) + AC_CHECK_PROG(AR, ar, ar) + STLIB_LD='${AR} cr' + LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" + case $system in + windows) + # This is a 2-stage check to make sure we have the 64-bit SDK + # We have to know where the SDK is installed. + # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs + # MACHINE is IX86 for LINK, but this is used by the manifest, + # which requires x86|amd64|ia64. + MACHINE="X86" + if test "$do64bit" != "no" ; then + if test "x${MSSDK}x" = "xx" ; then + MSSDK="C:/Progra~1/Microsoft Platform SDK" + fi + MSSDK=`echo "$MSSDK" | sed -e 's!\\\!/!g'` + PATH64="" + case "$do64bit" in + amd64|x64|yes) + MACHINE="AMD64" ; # default to AMD64 64-bit build + PATH64="${MSSDK}/Bin/Win64/x86/AMD64" + ;; + ia64) + MACHINE="IA64" + PATH64="${MSSDK}/Bin/Win64" + ;; + esac + if test ! -d "${PATH64}" ; then + AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode]) + AC_MSG_WARN([Ensure latest Platform SDK is installed]) + do64bit="no" + else + AC_MSG_RESULT([ Using 64-bit $MACHINE mode]) + do64bit_ok="yes" + fi + fi + + if test "$doWince" != "no" ; then + if test "$do64bit" != "no" ; then + AC_MSG_ERROR([Windows/CE and 64-bit builds incompatible]) + fi + if test "$GCC" = "yes" ; then + AC_MSG_ERROR([Windows/CE and GCC builds incompatible]) + fi + TEA_PATH_CELIB + # Set defaults for common evc4/PPC2003 setup + # Currently Tcl requires 300+, possibly 420+ for sockets + CEVERSION=420; # could be 211 300 301 400 420 ... + TARGETCPU=ARMV4; # could be ARMV4 ARM MIPS SH3 X86 ... + ARCH=ARM; # could be ARM MIPS X86EM ... + PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002" + if test "$doWince" != "yes"; then + # If !yes then the user specified something + # Reset ARCH to allow user to skip specifying it + ARCH= + eval `echo $doWince | awk -F, '{ \ + if (length([$]1)) { printf "CEVERSION=\"%s\"\n", [$]1; \ + if ([$]1 < 400) { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \ + if (length([$]2)) { printf "TARGETCPU=\"%s\"\n", toupper([$]2) }; \ + if (length([$]3)) { printf "ARCH=\"%s\"\n", toupper([$]3) }; \ + if (length([$]4)) { printf "PLATFORM=\"%s\"\n", [$]4 }; \ + }'` + if test "x${ARCH}" = "x" ; then + ARCH=$TARGETCPU; + fi + fi + OSVERSION=WCE$CEVERSION; + if test "x${WCEROOT}" = "x" ; then + WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0" + if test ! -d "${WCEROOT}" ; then + WCEROOT="C:/Program Files/Microsoft eMbedded Tools" + fi + fi + if test "x${SDKROOT}" = "x" ; then + SDKROOT="C:/Program Files/Windows CE Tools" + if test ! -d "${SDKROOT}" ; then + SDKROOT="C:/Windows CE Tools" + fi + fi + WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'` + SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'` + if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \ + -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then + AC_MSG_ERROR([could not find PocketPC SDK or target compiler to enable WinCE mode [$CEVERSION,$TARGETCPU,$ARCH,$PLATFORM]]) + doWince="no" + else + # We could PATH_NOSPACE these, but that's not important, + # as long as we quote them when used. + CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include" + if test -d "${CEINCLUDE}/${TARGETCPU}" ; then + CEINCLUDE="${CEINCLUDE}/${TARGETCPU}" + fi + CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" + fi + fi + + if test "$GCC" != "yes" ; then + if test "${SHARED_BUILD}" = "0" ; then + runtime=-MT + else + runtime=-MD + fi + + if test "$do64bit" != "no" ; then + # All this magic is necessary for the Win64 SDK RC1 - hobbs + CC="\"${PATH64}/cl.exe\"" + CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\"" + RC="\"${MSSDK}/bin/rc.exe\"" + lflags="-nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\"" + LINKBIN="\"${PATH64}/link.exe\"" + CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d" + CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" + # Avoid 'unresolved external symbol __security_cookie' + # errors, c.f. http://support.microsoft.com/?id=894573 + TEA_ADD_LIBS([bufferoverflowU.lib]) + elif test "$doWince" != "no" ; then + CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin" + if test "${TARGETCPU}" = "X86"; then + CC="\"${CEBINROOT}/cl.exe\"" + else + CC="\"${CEBINROOT}/cl${ARCH}.exe\"" + fi + CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\"" + RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\"" + arch=`echo ${ARCH} | awk '{print tolower([$]0)}'` + defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS" + if test "${SHARED_BUILD}" = "1" ; then + # Static CE builds require static celib as well + defs="${defs} _DLL" + fi + for i in $defs ; do + AC_DEFINE_UNQUOTED($i, 1, [WinCE def ]$i) + done + AC_DEFINE_UNQUOTED(_WIN32_WCE, $CEVERSION, [_WIN32_WCE version]) + AC_DEFINE_UNQUOTED(UNDER_CE, $CEVERSION, [UNDER_CE version]) + CFLAGS_DEBUG="-nologo -Zi -Od" + CFLAGS_OPTIMIZE="-nologo -Ox" + lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` + lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" + LINKBIN="\"${CEBINROOT}/link.exe\"" + AC_SUBST(CELIB_DIR) + else + RC="rc" + lflags="-nologo" + LINKBIN="link" + CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" + CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" + fi + fi + + if test "$GCC" = "yes"; then + # mingw gcc mode + RC="windres" + CFLAGS_DEBUG="-g" + CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" + SHLIB_LD="$CC -shared" + UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' + LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" + LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" + else + SHLIB_LD="${LINKBIN} -dll ${lflags}" + # link -lib only works when -lib is the first arg + STLIB_LD="${LINKBIN} -lib ${lflags}" + UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' + PATHTYPE=-w + # For information on what debugtype is most useful, see: + # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp + # This essentially turns it all on. + LDFLAGS_DEBUG="-debug:full -debugtype:both -warn:2" + LDFLAGS_OPTIMIZE="-release" + if test "$doWince" != "no" ; then + LDFLAGS_CONSOLE="-link ${lflags}" + LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} + else + LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" + LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" + fi + fi + + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".dll" + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' + + TCL_LIB_VERSIONS_OK=nodots + # Bogus to avoid getting this turned off + DL_OBJS="tclLoadNone.obj" + ;; + AIX-*) + if test "${TCL_THREADS}" = "1" -a "$GCC" != "yes" ; then + # AIX requires the _r compiler when gcc isn't being used + case "${CC}" in + *_r) + # ok ... + ;; + *) + CC=${CC}_r + ;; + esac + AC_MSG_RESULT([Using $CC for compiling with threads]) + fi + LIBS="$LIBS -lc" + SHLIB_CFLAGS="" + SHLIB_SUFFIX=".so" + SHLIB_LD_LIBS='${LIBS}' + + DL_OBJS="tclLoadDl.o" + LD_LIBRARY_PATH_VAR="LIBPATH" + + # AIX v<=4.1 has some different flags than 4.2+ + if test "$system" = "AIX-4.1" -o "`uname -v`" -lt "4" ; then + #LIBOBJS="$LIBOBJS tclLoadAix.o" + AC_LIBOBJ([tclLoadAix]) + DL_LIBS="-lld" + fi + + # Check to enable 64-bit flags for compiler/linker on AIX 4+ + if test "$do64bit" = "yes" -a "`uname -v`" -gt "3" ; then + if test "$GCC" = "yes" ; then + AC_MSG_WARN("64bit mode not supported with GCC on $system") + else + do64bit_ok=yes + CFLAGS="$CFLAGS -q64" + LDFLAGS="$LDFLAGS -q64" + RANLIB="${RANLIB} -X64" + AR="${AR} -X64" + SHLIB_LD_FLAGS="-b64" + fi + fi + + if test "`uname -m`" = "ia64" ; then + # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC + SHLIB_LD="/usr/ccs/bin/ld -G -z text" + # AIX-5 has dl* in libc.so + DL_LIBS="" + if test "$GCC" = "yes" ; then + LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' + else + LD_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' + fi + else + if test "$GCC" = "yes" ; then + SHLIB_LD="gcc -shared" + else + SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bE:lib.exp -H512 -T512 -bnoentry" + fi + SHLIB_LD="${TCL_SRC_DIR}/unix/ldAix ${SHLIB_LD} ${SHLIB_LD_FLAGS}" + DL_LIBS="-ldl" + LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + TCL_NEEDS_EXP_FILE=1 + TCL_EXPORT_FILE_SUFFIX='${PACKAGE_VERSION}.exp' + fi + + # On AIX <=v4 systems, libbsd.a has to be linked in to support + # non-blocking file IO. This library has to be linked in after + # the MATH_LIBS or it breaks the pow() function. The way to + # insure proper sequencing, is to add it to the tail of MATH_LIBS. + # This library also supplies gettimeofday. + # + # AIX does not have a timezone field in struct tm. When the AIX + # bsd library is used, the timezone global and the gettimeofday + # methods are to be avoided for timezone deduction instead, we + # deduce the timezone by comparing the localtime result on a + # known GMT value. + + AC_CHECK_LIB(bsd, gettimeofday, libbsd=yes, libbsd=no) + if test $libbsd = yes; then + MATH_LIBS="$MATH_LIBS -lbsd" + AC_DEFINE(USE_DELTA_FOR_TZ, 1, [Do we need a special AIX hack for timezones?]) + fi + ;; + BeOS*) + SHLIB_CFLAGS="-fPIC" + SHLIB_LD="${CC} -nostart" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + ;; + BSD/OS-2.1*|BSD/OS-3*) + SHLIB_CFLAGS="" + SHLIB_LD="shlicc -r" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LD_SEARCH_FLAGS="" + ;; + BSD/OS-4.*) + SHLIB_CFLAGS="-export-dynamic -fPIC" + SHLIB_LD="cc -shared" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LDFLAGS="$LDFLAGS -export-dynamic" + LD_SEARCH_FLAGS="" + ;; + dgux*) + SHLIB_CFLAGS="-K PIC" + SHLIB_LD="cc -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LD_SEARCH_FLAGS="" + ;; + HP-UX-*.11.*) + # Use updated header definitions where possible + AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?]) + + SHLIB_SUFFIX=".sl" + AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) + if test "$tcl_ok" = yes; then + SHLIB_CFLAGS="+z" + SHLIB_LD="ld -b" + SHLIB_LD_LIBS='${LIBS}' + DL_OBJS="tclLoadShl.o" + DL_LIBS="-ldld" + LDFLAGS="$LDFLAGS -Wl,-E" + LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' + LD_LIBRARY_PATH_VAR="SHLIB_PATH" + fi + if test "$GCC" = "yes" ; then + SHLIB_LD="gcc -shared" + SHLIB_LD_LIBS='${LIBS}' + LD_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' + fi + + # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc + #CFLAGS="$CFLAGS +DAportable" + + # Check to enable 64-bit flags for compiler/linker + if test "$do64bit" = "yes" ; then + if test "$GCC" = "yes" ; then + hpux_arch=`${CC} -dumpmachine` + case $hpux_arch in + hppa64*) + # 64-bit gcc in use. Fix flags for GNU ld. + do64bit_ok=yes + SHLIB_LD="${CC} -shared" + SHLIB_LD_LIBS='${LIBS}' + ;; + *) + AC_MSG_WARN("64bit mode not supported with GCC on $system") + ;; + esac + else + do64bit_ok=yes + CFLAGS="$CFLAGS +DD64" + LDFLAGS="$LDFLAGS +DD64" + fi + fi + ;; + HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*) + SHLIB_SUFFIX=".sl" + AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) + if test "$tcl_ok" = yes; then + SHLIB_CFLAGS="+z" + SHLIB_LD="ld -b" + SHLIB_LD_LIBS="" + DL_OBJS="tclLoadShl.o" + DL_LIBS="-ldld" + LDFLAGS="$LDFLAGS -Wl,-E" + LD_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' + fi + LD_LIBRARY_PATH_VAR="SHLIB_PATH" + ;; + IRIX-4.*) + SHLIB_CFLAGS="-G 0" + SHLIB_SUFFIX=".a" + SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0" + SHLIB_LD_LIBS='${LIBS}' + DL_OBJS="tclLoadAout.o" + DL_LIBS="" + LDFLAGS="$LDFLAGS -Wl,-D,08000000" + LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + SHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a' + ;; + IRIX-5.*) + SHLIB_CFLAGS="" + SHLIB_LD="ld -shared -rdata_shared" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + ;; + IRIX-6.*|IRIX64-6.5*) + SHLIB_CFLAGS="" + SHLIB_LD="ld -n32 -shared -rdata_shared" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + if test "$GCC" = "yes" ; then + CFLAGS="$CFLAGS -mabi=n32" + LDFLAGS="$LDFLAGS -mabi=n32" + else + case $system in + IRIX-6.3) + # Use to build 6.2 compatible binaries on 6.3. + CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS" + ;; + *) + CFLAGS="$CFLAGS -n32" + ;; + esac + LDFLAGS="$LDFLAGS -n32" + fi + ;; + IRIX64-6.*) + SHLIB_CFLAGS="" + SHLIB_LD="ld -n32 -shared -rdata_shared" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + + # Check to enable 64-bit flags for compiler/linker + + if test "$do64bit" = "yes" ; then + if test "$GCC" = "yes" ; then + AC_MSG_WARN([64bit mode not supported by gcc]) + else + do64bit_ok=yes + SHLIB_LD="ld -64 -shared -rdata_shared" + CFLAGS="$CFLAGS -64" + LDFLAGS="$LDFLAGS -64" + fi + fi + ;; + Linux*) + SHLIB_CFLAGS="-fPIC" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + + CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" + # egcs-2.91.66 on Redhat Linux 6.0 generates lots of warnings + # when you inline the string and math operations. Turn this off to + # get rid of the warnings. + + #CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D__NO_STRING_INLINES -D__NO_MATH_INLINES" + + if test "$have_dl" = yes; then + SHLIB_LD="${CC} -shared" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LDFLAGS="$LDFLAGS -Wl,--export-dynamic" + LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + else + AC_CHECK_HEADER(dld.h, [ + SHLIB_LD="ld -shared" + DL_OBJS="tclLoadDld.o" + DL_LIBS="-ldld" + LD_SEARCH_FLAGS=""]) + fi + if test "`uname -m`" = "alpha" ; then + CFLAGS="$CFLAGS -mieee" + fi + + # The combo of gcc + glibc has a bug related + # to inlining of functions like strtod(). The + # -fno-builtin flag should address this problem + # but it does not work. The -fno-inline flag + # is kind of overkill but it works. + # Disable inlining only when one of the + # files in compat/*.c is being linked in. + if test x"${USE_COMPAT}" != x ; then + CFLAGS="$CFLAGS -fno-inline" + fi + + ;; + GNU*) + SHLIB_CFLAGS="-fPIC" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + + if test "$have_dl" = yes; then + SHLIB_LD="${CC} -shared" + DL_OBJS="" + DL_LIBS="-ldl" + LDFLAGS="$LDFLAGS -Wl,--export-dynamic" + LD_SEARCH_FLAGS="" + else + AC_CHECK_HEADER(dld.h, [ + SHLIB_LD="ld -shared" + DL_OBJS="" + DL_LIBS="-ldld" + LD_SEARCH_FLAGS=""]) + fi + if test "`uname -m`" = "alpha" ; then + CFLAGS="$CFLAGS -mieee" + fi + ;; + MP-RAS-02*) + SHLIB_CFLAGS="-K PIC" + SHLIB_LD="cc -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LD_SEARCH_FLAGS="" + ;; + MP-RAS-*) + SHLIB_CFLAGS="-K PIC" + SHLIB_LD="cc -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LDFLAGS="$LDFLAGS -Wl,-Bexport" + LD_SEARCH_FLAGS="" + ;; + NetBSD-*|FreeBSD-[[1-2]].*) + # Not available on all versions: check for include file. + AC_CHECK_HEADER(dlfcn.h, [ + # NetBSD/SPARC needs -fPIC, -fpic will not do. + SHLIB_CFLAGS="-fPIC" + SHLIB_LD="ld -Bshareable -x" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + AC_MSG_CHECKING([for ELF]) + AC_EGREP_CPP(yes, [ +#ifdef __ELF__ + yes +#endif + ], + AC_MSG_RESULT([yes]) + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so', + AC_MSG_RESULT([no]) + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.1.0' + ) + ], [ + SHLIB_CFLAGS="" + SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".a" + DL_OBJS="tclLoadAout.o" + DL_LIBS="" + LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' + ]) + + # FreeBSD doesn't handle version numbers with dots. + + UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' + TCL_LIB_VERSIONS_OK=nodots + ;; + OpenBSD-*) + SHLIB_LD="${CC} -shared" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LD_SEARCH_FLAGS="" + AC_MSG_CHECKING(for ELF) + AC_EGREP_CPP(yes, [ +#ifdef __ELF__ + yes +#endif + ], + [AC_MSG_RESULT(yes) + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.1.0'], + [AC_MSG_RESULT(no) + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.1.0'] + ) + + # OpenBSD doesn't do version numbers with dots. + UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' + TCL_LIB_VERSIONS_OK=nodots + ;; + FreeBSD-*) + # FreeBSD 3.* and greater have ELF. + SHLIB_CFLAGS="-fPIC" + SHLIB_LD="ld -Bshareable -x" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LDFLAGS="$LDFLAGS -export-dynamic" + LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + if test "${TCL_THREADS}" = "1" ; then + # The -pthread needs to go in the CFLAGS, not LIBS + LIBS=`echo $LIBS | sed s/-pthread//` + CFLAGS="$CFLAGS -pthread" + LDFLAGS="$LDFLAGS -pthread" + fi + case $system in + FreeBSD-3.*) + # FreeBSD-3 doesn't handle version numbers with dots. + UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so' + TCL_LIB_VERSIONS_OK=nodots + ;; + esac + ;; + Darwin-*) + CFLAGS_OPTIMIZE="-Os" + SHLIB_CFLAGS="-fno-common" + if test $do64bit = yes; then + do64bit_ok=yes + CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" + fi + SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS}' + AC_CACHE_CHECK([if ld accepts -single_module flag], tcl_cv_ld_single_module, [ + hold_ldflags=$LDFLAGS + LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" + AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no) + LDFLAGS=$hold_ldflags]) + if test $tcl_cv_ld_single_module = yes; then + SHLIB_LD="${SHLIB_LD} -Wl,-single_module" + fi + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".dylib" + DL_OBJS="tclLoadDyld.o" + DL_LIBS="" + # Don't use -prebind when building for Mac OS X 10.4 or later only: + test -z "${MACOSX_DEPLOYMENT_TARGET}" || \ + test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F. '{print [$]2}'`" -lt 4 && \ + LDFLAGS="$LDFLAGS -prebind" + LDFLAGS="$LDFLAGS -headerpad_max_install_names" + AC_CACHE_CHECK([if ld accepts -search_paths_first flag], tcl_cv_ld_search_paths_first, [ + hold_ldflags=$LDFLAGS + LDFLAGS="$LDFLAGS -Wl,-search_paths_first" + AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes, tcl_cv_ld_search_paths_first=no) + LDFLAGS=$hold_ldflags]) + if test $tcl_cv_ld_search_paths_first = yes; then + LDFLAGS="$LDFLAGS -Wl,-search_paths_first" + fi + LD_SEARCH_FLAGS="" + LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" + ;; + NEXTSTEP-*) + SHLIB_CFLAGS="" + SHLIB_LD="cc -nostdlib -r" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadNext.o" + DL_LIBS="" + LD_SEARCH_FLAGS="" + ;; + OS/390-*) + CFLAGS_OPTIMIZE="" # Optimizer is buggy + AC_DEFINE(_OE_SOCKETS, 1, # needed in sys/socket.h + [Should OS/390 do the right thing with sockets?]) + ;; + OSF1-1.0|OSF1-1.1|OSF1-1.2) + # OSF/1 1.[012] from OSF, and derivatives, including Paragon OSF/1 + SHLIB_CFLAGS="" + # Hack: make package name same as library name + SHLIB_LD='ld -R -export $@:' + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadOSF.o" + DL_LIBS="" + LD_SEARCH_FLAGS="" + ;; + OSF1-1.*) + # OSF/1 1.3 from OSF using ELF, and derivatives, including AD2 + SHLIB_CFLAGS="-fPIC" + if test "$SHARED_BUILD" = "1" ; then + SHLIB_LD="ld -shared" + else + SHLIB_LD="ld -non_shared" + fi + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LD_SEARCH_FLAGS="" + ;; + OSF1-V*) + # Digital OSF/1 + SHLIB_CFLAGS="" + if test "$SHARED_BUILD" = "1" ; then + SHLIB_LD="${CC} -shared" + else + SHLIB_LD="${CC} -non_shared" + fi + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' + if test "$GCC" = "yes" ; then + CFLAGS="$CFLAGS -mieee" + else + CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee" + fi + # see pthread_intro(3) for pthread support on osf1, k.furukawa + if test "${TCL_THREADS}" = "1" ; then + CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE" + CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64" + LIBS=`echo $LIBS | sed s/-lpthreads//` + if test "$GCC" = "yes" ; then + LIBS="$LIBS -lpthread -lmach -lexc" + else + CFLAGS="$CFLAGS -pthread" + LDFLAGS="$LDFLAGS -pthread" + fi + fi + + ;; + QNX-6*) + # QNX RTP + # This may work for all QNX, but it was only reported for v6. + SHLIB_CFLAGS="-fPIC" + SHLIB_LD="ld -Bshareable -x" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + # dlopen is in -lc on QNX + DL_LIBS="" + LD_SEARCH_FLAGS="" + ;; + RISCos-*) + SHLIB_CFLAGS="-G 0" + SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".a" + DL_OBJS="tclLoadAout.o" + DL_LIBS="" + LDFLAGS="$LDFLAGS -Wl,-D,08000000" + LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + ;; + SCO_SV-3.2*) + # Note, dlopen is available only on SCO 3.2.5 and greater. However, + # this test works, since "uname -s" was non-standard in 3.2.4 and + # below. + if test "$GCC" = "yes" ; then + SHLIB_CFLAGS="-fPIC -melf" + LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" + else + SHLIB_CFLAGS="-Kpic -belf" + LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" + fi + SHLIB_LD="ld -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LD_SEARCH_FLAGS="" + ;; + SINIX*5.4*) + SHLIB_CFLAGS="-K PIC" + SHLIB_LD="cc -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LD_SEARCH_FLAGS="" + ;; + SunOS-4*) + SHLIB_CFLAGS="-PIC" + SHLIB_LD="ld" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + + # SunOS can't handle version numbers with dots in them in library + # specs, like -ltcl7.5, so use -ltcl75 instead. Also, it + # requires an extra version number at the end of .so file names. + # So, the library has to have a name like libtcl75.so.1.0 + + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.1.0' + UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' + TCL_LIB_VERSIONS_OK=nodots + ;; + SunOS-5.[[0-6]]) + # Careful to not let 5.10+ fall into this case + + # Note: If _REENTRANT isn't defined, then Solaris + # won't define thread-safe library routines. + + AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) + AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, + [Do we really want to follow the standard? Yes we do!]) + + SHLIB_CFLAGS="-KPIC" + + # Note: need the LIBS below, otherwise Tk won't find Tcl's + # symbols when dynamically loaded into tclsh. + + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + if test "$GCC" = "yes" ; then + SHLIB_LD="$CC -shared" + LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' + else + SHLIB_LD="/usr/ccs/bin/ld -G -z text" + LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' + fi + ;; + SunOS-5*) + + # Note: If _REENTRANT isn't defined, then Solaris + # won't define thread-safe library routines. + + AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) + AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, + [Do we really want to follow the standard? Yes we do!]) + + SHLIB_CFLAGS="-KPIC" + + # Check to enable 64-bit flags for compiler/linker + if test "$do64bit" = "yes" ; then + arch=`isainfo` + if test "$arch" = "sparcv9 sparc" ; then + if test "$GCC" = "yes" ; then + if test "`gcc -dumpversion` | awk -F. '{print $1}'" -lt "3" ; then + AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system]) + else + do64bit_ok=yes + CFLAGS="$CFLAGS -m64 -mcpu=v9" + LDFLAGS="$LDFLAGS -m64 -mcpu=v9" + SHLIB_CFLAGS="-fPIC" + fi + else + do64bit_ok=yes + if test "$do64bitVIS" = "yes" ; then + CFLAGS="$CFLAGS -xarch=v9a" + LDFLAGS="$LDFLAGS -xarch=v9a" + else + CFLAGS="$CFLAGS -xarch=v9" + LDFLAGS="$LDFLAGS -xarch=v9" + fi + # Solaris 64 uses this as well + #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64" + fi + elif test "$arch" = "amd64 i386" ; then + if test "$GCC" = "yes" ; then + AC_MSG_WARN([64bit mode not supported with GCC on $system]) + else + do64bit_ok=yes + CFLAGS="$CFLAGS -xarch=amd64" + LDFLAGS="$LDFLAGS -xarch=amd64" + fi + else + AC_MSG_WARN([64bit mode not supported for $arch]) + fi + fi + + # Note: need the LIBS below, otherwise Tk won't find Tcl's + # symbols when dynamically loaded into tclsh. + + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + if test "$GCC" = "yes" ; then + SHLIB_LD="$CC -shared" + LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' + if test "$do64bit" = "yes" ; then + # We need to specify -static-libgcc or we need to + # add the path to the sparv9 libgcc. + # JH: static-libgcc is necessary for core Tcl, but may + # not be necessary for extensions. + SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc" + # for finding sparcv9 libgcc, get the regular libgcc + # path, remove so name and append 'sparcv9' + #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..." + #LD_SEARCH_FLAGS="${LD_SEARCH_FLAGS},-R,$v9gcclibdir" + fi + else + SHLIB_LD="/usr/ccs/bin/ld -G -z text" + LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' + fi + ;; + ULTRIX-4.*) + SHLIB_CFLAGS="-G 0" + SHLIB_SUFFIX=".a" + SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0" + SHLIB_LD_LIBS='${LIBS}' + DL_OBJS="tclLoadAout.o" + DL_LIBS="" + LDFLAGS="$LDFLAGS -Wl,-D,08000000" + LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + if test "$GCC" != "yes" ; then + CFLAGS="$CFLAGS -DHAVE_TZSET -std1" + fi + ;; + UNIX_SV* | UnixWare-5*) + SHLIB_CFLAGS="-KPIC" + SHLIB_LD="cc -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers + # that don't grok the -Bexport option. Test that it does. + hold_ldflags=$LDFLAGS + AC_MSG_CHECKING(for ld accepts -Bexport flag) + LDFLAGS="$LDFLAGS -Wl,-Bexport" + AC_TRY_LINK(, [int i;], [found=yes], + [LDFLAGS=$hold_ldflags found=no]) + AC_MSG_RESULT([$found]) + LD_SEARCH_FLAGS="" + ;; + esac + + if test "$do64bit" != "no" -a "$do64bit_ok" = "no" ; then + AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform]) + fi + + # Step 4: If pseudo-static linking is in use (see K. B. Kenny, "Dynamic + # Loading for Tcl -- What Became of It?". Proc. 2nd Tcl/Tk Workshop, + # New Orleans, LA, Computerized Processes Unlimited, 1994), then we need + # to determine which of several header files defines the a.out file + # format (a.out.h, sys/exec.h, or sys/exec_aout.h). At present, we + # support only a file format that is more or less version-7-compatible. + # In particular, + # - a.out files must begin with `struct exec'. + # - the N_TXTOFF on the `struct exec' must compute the seek address + # of the text segment + # - The `struct exec' must contain a_magic, a_text, a_data, a_bss + # and a_entry fields. + # The following compilation should succeed if and only if either sys/exec.h + # or a.out.h is usable for the purpose. + # + # Note that the modified COFF format used on MIPS Ultrix 4.x is usable; the + # `struct exec' includes a second header that contains information that + # duplicates the v7 fields that are needed. + + if test "x$DL_OBJS" = "xtclLoadAout.o" ; then + AC_MSG_CHECKING([sys/exec.h]) + AC_TRY_COMPILE([#include ],[ + struct exec foo; + unsigned long seek; + int flag; +#if defined(__mips) || defined(mips) + seek = N_TXTOFF (foo.ex_f, foo.ex_o); +#else + seek = N_TXTOFF (foo); +#endif + flag = (foo.a_magic == OMAGIC); + return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; + ], tcl_ok=usable, tcl_ok=unusable) + AC_MSG_RESULT([$tcl_ok]) + if test $tcl_ok = usable; then + AC_DEFINE(USE_SYS_EXEC_H, 1, + [Should we use when doing dynamic loading?]) + else + AC_MSG_CHECKING([a.out.h]) + AC_TRY_COMPILE([#include ],[ + struct exec foo; + unsigned long seek; + int flag; +#if defined(__mips) || defined(mips) + seek = N_TXTOFF (foo.ex_f, foo.ex_o); +#else + seek = N_TXTOFF (foo); +#endif + flag = (foo.a_magic == OMAGIC); + return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; + ], tcl_ok=usable, tcl_ok=unusable) + AC_MSG_RESULT([$tcl_ok]) + if test $tcl_ok = usable; then + AC_DEFINE(USE_A_OUT_H, 1, + [Should we use when doing dynamic loading?]) + else + AC_MSG_CHECKING([sys/exec_aout.h]) + AC_TRY_COMPILE([#include ],[ + struct exec foo; + unsigned long seek; + int flag; +#if defined(__mips) || defined(mips) + seek = N_TXTOFF (foo.ex_f, foo.ex_o); +#else + seek = N_TXTOFF (foo); +#endif + flag = (foo.a_midmag == OMAGIC); + return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; + ], tcl_ok=usable, tcl_ok=unusable) + AC_MSG_RESULT([$tcl_ok]) + if test $tcl_ok = usable; then + AC_DEFINE(USE_SYS_EXEC_AOUT_H, 1, + [Should we use when doing dynamic loading?]) + else + DL_OBJS="" + fi + fi + fi + fi + + # Step 5: disable dynamic loading if requested via a command-line switch. + + AC_ARG_ENABLE(load, [ --disable-load disallow dynamic loading and "load" command], + [tcl_ok=$enableval], [tcl_ok=yes]) + if test "$tcl_ok" = "no"; then + DL_OBJS="" + fi + + if test "x$DL_OBJS" != "x" ; then + BUILD_DLTEST="\$(DLTEST_TARGETS)" + else + echo "Can't figure out how to do dynamic loading or shared libraries" + echo "on this system." + SHLIB_CFLAGS="" + SHLIB_LD="" + SHLIB_SUFFIX="" + DL_OBJS="tclLoadNone.o" + DL_LIBS="" + LDFLAGS="$LDFLAGS_ORIG" + LD_SEARCH_FLAGS="" + BUILD_DLTEST="" + fi + + # If we're running gcc, then change the C flags for compiling shared + # libraries to the right flags for gcc, instead of those for the + # standard manufacturer compiler. + + if test "$DL_OBJS" != "tclLoadNone.o" ; then + if test "$GCC" = "yes" ; then + case $system in + AIX-*) + ;; + BSD/OS*) + ;; + IRIX*) + ;; + NetBSD-*|FreeBSD-*) + ;; + Darwin-*) + ;; + RISCos-*) + ;; + SCO_SV-3.2*) + ;; + ULTRIX-4.*) + ;; + windows) + ;; + *) + SHLIB_CFLAGS="-fPIC" + ;; + esac + fi + fi + + if test "$SHARED_LIB_SUFFIX" = "" ; then + SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}' + fi + if test "$UNSHARED_LIB_SUFFIX" = "" ; then + UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a' + fi + + AC_SUBST(DL_LIBS) + AC_SUBST(CFLAGS_DEBUG) + AC_SUBST(CFLAGS_OPTIMIZE) + AC_SUBST(CFLAGS_WARNING) + + AC_SUBST(STLIB_LD) + AC_SUBST(SHLIB_LD) + AC_SUBST(SHLIB_CFLAGS) + AC_SUBST(SHLIB_LD_LIBS) + AC_SUBST(LDFLAGS_DEBUG) + AC_SUBST(LDFLAGS_OPTIMIZE) + AC_SUBST(LD_LIBRARY_PATH_VAR) + + # These must be called after we do the basic CFLAGS checks and + # verify any possible 64-bit or similar switches are necessary + TEA_TCL_EARLY_FLAGS + TEA_TCL_64BIT_FLAGS +]) + +#-------------------------------------------------------------------- +# TEA_SERIAL_PORT +# +# Determine which interface to use to talk to the serial port. +# Note that #include lines must begin in leftmost column for +# some compilers to recognize them as preprocessor directives, +# and some build environments have stdin not pointing at a +# pseudo-terminal (usually /dev/null instead.) +# +# Arguments: +# none +# +# Results: +# +# Defines only one of the following vars: +# HAVE_SYS_MODEM_H +# USE_TERMIOS +# USE_TERMIO +# USE_SGTTY +# +#-------------------------------------------------------------------- + +AC_DEFUN(TEA_SERIAL_PORT, [ + AC_CHECK_HEADERS(sys/modem.h) + AC_MSG_CHECKING([termios vs. termio vs. sgtty]) + AC_CACHE_VAL(tcl_cv_api_serial, [ + AC_TRY_RUN([ +#include + +int main() { + struct termios t; + if (tcgetattr(0, &t) == 0) { + cfsetospeed(&t, 0); + t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; + return 0; + } + return 1; +}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) + if test $tcl_cv_api_serial = no ; then + AC_TRY_RUN([ +#include + +int main() { + struct termio t; + if (ioctl(0, TCGETA, &t) == 0) { + t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; + return 0; + } + return 1; +}], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) + fi + if test $tcl_cv_api_serial = no ; then + AC_TRY_RUN([ +#include + +int main() { + struct sgttyb t; + if (ioctl(0, TIOCGETP, &t) == 0) { + t.sg_ospeed = 0; + t.sg_flags |= ODDP | EVENP | RAW; + return 0; + } + return 1; +}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none) + fi + if test $tcl_cv_api_serial = no ; then + AC_TRY_RUN([ +#include +#include + +int main() { + struct termios t; + if (tcgetattr(0, &t) == 0 + || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { + cfsetospeed(&t, 0); + t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; + return 0; + } + return 1; +}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) + fi + if test $tcl_cv_api_serial = no; then + AC_TRY_RUN([ +#include +#include + +int main() { + struct termio t; + if (ioctl(0, TCGETA, &t) == 0 + || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { + t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; + return 0; + } + return 1; + }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) + fi + if test $tcl_cv_api_serial = no; then + AC_TRY_RUN([ +#include +#include + +int main() { + struct sgttyb t; + if (ioctl(0, TIOCGETP, &t) == 0 + || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { + t.sg_ospeed = 0; + t.sg_flags |= ODDP | EVENP | RAW; + return 0; + } + return 1; +}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none) + fi]) + case $tcl_cv_api_serial in + termios) AC_DEFINE(USE_TERMIOS, 1, [Use the termios API for serial lines]);; + termio) AC_DEFINE(USE_TERMIO, 1, [Use the termio API for serial lines]);; + sgtty) AC_DEFINE(USE_SGTTY, 1, [Use the sgtty API for serial lines]);; + esac + AC_MSG_RESULT([$tcl_cv_api_serial]) +]) + +#-------------------------------------------------------------------- +# TEA_MISSING_POSIX_HEADERS +# +# Supply substitutes for missing POSIX header files. Special +# notes: +# - stdlib.h doesn't define strtol, strtoul, or +# strtod insome versions of SunOS +# - some versions of string.h don't declare procedures such +# as strstr +# +# Arguments: +# none +# +# Results: +# +# Defines some of the following vars: +# NO_DIRENT_H +# NO_ERRNO_H +# NO_VALUES_H +# HAVE_LIMITS_H or NO_LIMITS_H +# NO_STDLIB_H +# NO_STRING_H +# NO_SYS_WAIT_H +# NO_DLFCN_H +# HAVE_SYS_PARAM_H +# +# HAVE_STRING_H ? +# +# tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and +# CHECK on limits.h +#-------------------------------------------------------------------- + +AC_DEFUN(TEA_MISSING_POSIX_HEADERS, [ + AC_MSG_CHECKING([dirent.h]) + AC_CACHE_VAL(tcl_cv_dirent_h, + AC_TRY_LINK([#include +#include ], [ +#ifndef _POSIX_SOURCE +# ifdef __Lynx__ + /* + * Generate compilation error to make the test fail: Lynx headers + * are only valid if really in the POSIX environment. + */ + + missing_procedure(); +# endif +#endif +DIR *d; +struct dirent *entryPtr; +char *p; +d = opendir("foobar"); +entryPtr = readdir(d); +p = entryPtr->d_name; +closedir(d); +], tcl_cv_dirent_h=yes, tcl_cv_dirent_h=no)) + + if test $tcl_cv_dirent_h = no; then + AC_DEFINE(NO_DIRENT_H, 1, [Do we have ?]) + fi + + AC_MSG_RESULT([$tcl_ok]) + AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H, 1, [Do we have ?])]) + AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H, 1, [Do we have ?])]) + AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H, 1, [Do we have ?])]) + AC_CHECK_HEADER(limits.h, + [AC_DEFINE(HAVE_LIMITS_H, 1, [Do we have ?])], + [AC_DEFINE(NO_LIMITS_H, 1, [Do we have ?])]) + AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0) + AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0) + AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0) + AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0) + if test $tcl_ok = 0; then + AC_DEFINE(NO_STDLIB_H, 1, [Do we have ?]) + fi + AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0) + AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0) + AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0) + + # See also memmove check below for a place where NO_STRING_H can be + # set and why. + + if test $tcl_ok = 0; then + AC_DEFINE(NO_STRING_H, 1, [Do we have ?]) + fi + + AC_CHECK_HEADER(sys/wait.h, , [AC_DEFINE(NO_SYS_WAIT_H, 1, [Do we have ?])]) + AC_CHECK_HEADER(dlfcn.h, , [AC_DEFINE(NO_DLFCN_H, 1, [Do we have ?])]) + + # OS/390 lacks sys/param.h (and doesn't need it, by chance). + AC_HAVE_HEADERS(sys/param.h) + +]) + +#-------------------------------------------------------------------- +# TEA_PATH_X +# +# Locate the X11 header files and the X11 library archive. Try +# the ac_path_x macro first, but if it doesn't find the X stuff +# (e.g. because there's no xmkmf program) then check through +# a list of possible directories. Under some conditions the +# autoconf macro will return an include directory that contains +# no include files, so double-check its result just to be safe. +# +# This should be called after TEA_CONFIG_CFLAGS as setting the +# LIBS line can confuse some configure macro magic. +# +# Arguments: +# none +# +# Results: +# +# Sets the following vars: +# XINCLUDES +# XLIBSW +# LIBS (appends to) +# TEA_WINDOWINGSYSTEM +# +#-------------------------------------------------------------------- + +AC_DEFUN(TEA_PATH_X, [ + if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then + TEA_PATH_UNIX_X + fi +]) + +AC_DEFUN(TEA_PATH_UNIX_X, [ + AC_PATH_X + not_really_there="" + if test "$no_x" = ""; then + if test "$x_includes" = ""; then + AC_TRY_CPP([#include ], , not_really_there="yes") + else + if test ! -r $x_includes/X11/Intrinsic.h; then + not_really_there="yes" + fi + fi + fi + if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then + AC_MSG_CHECKING([for X11 header files]) + XINCLUDES="# no special path needed" + AC_TRY_CPP([#include ], , XINCLUDES="nope") + if test "$XINCLUDES" = nope; then + dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include" + for i in $dirs ; do + if test -r $i/X11/Intrinsic.h; then + AC_MSG_RESULT([$i]) + XINCLUDES=" -I$i" + break + fi + done + fi + else + if test "$x_includes" != ""; then + XINCLUDES=-I$x_includes + else + XINCLUDES="# no special path needed" + fi + fi + if test "$XINCLUDES" = nope; then + AC_MSG_RESULT([could not find any!]) + XINCLUDES="# no include files found" + fi + + if test "$no_x" = yes; then + AC_MSG_CHECKING([for X11 libraries]) + XLIBSW=nope + dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib" + for i in $dirs ; do + if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl; then + AC_MSG_RESULT([$i]) + XLIBSW="-L$i -lX11" + x_libraries="$i" + break + fi + done + else + if test "$x_libraries" = ""; then + XLIBSW=-lX11 + else + XLIBSW="-L$x_libraries -lX11" + fi + fi + if test "$XLIBSW" = nope ; then + AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow) + fi + if test "$XLIBSW" = nope ; then + AC_MSG_RESULT([could not find any! Using -lX11.]) + XLIBSW=-lX11 + fi + if test x"${XLIBSW}" != x ; then + PKG_LIBS="${PKG_LIBS} ${XLIBSW}" + fi +]) + +#-------------------------------------------------------------------- +# TEA_BLOCKING_STYLE +# +# The statements below check for systems where POSIX-style +# non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented. +# On these systems (mostly older ones), use the old BSD-style +# FIONBIO approach instead. +# +# Arguments: +# none +# +# Results: +# +# Defines some of the following vars: +# HAVE_SYS_IOCTL_H +# HAVE_SYS_FILIO_H +# USE_FIONBIO +# O_NONBLOCK +# +#-------------------------------------------------------------------- + +AC_DEFUN(TEA_BLOCKING_STYLE, [ + AC_CHECK_HEADERS(sys/ioctl.h) + AC_CHECK_HEADERS(sys/filio.h) + AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O]) + if test -f /usr/lib/NextStep/software_version; then + system=NEXTSTEP-`awk '/3/,/3/' /usr/lib/NextStep/software_version` + else + system=`uname -s`-`uname -r` + if test "$?" -ne 0 ; then + system=unknown + else + # Special check for weird MP-RAS system (uname returns weird + # results, and the version is kept in special file). + + if test -r /etc/.relid -a "X`uname -n`" = "X`uname -s`" ; then + system=MP-RAS-`awk '{print $3}' /etc/.relid` + fi + if test "`uname -s`" = "AIX" ; then + system=AIX-`uname -v`.`uname -r` + fi + fi + fi + case $system in + # There used to be code here to use FIONBIO under AIX. However, it + # was reported that FIONBIO doesn't work under AIX 3.2.5. Since + # using O_NONBLOCK seems fine under AIX 4.*, I removed the FIONBIO + # code (JO, 5/31/97). + + OSF*) + AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?]) + AC_MSG_RESULT([FIONBIO]) + ;; + SunOS-4*) + AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?]) + AC_MSG_RESULT([FIONBIO]) + ;; + ULTRIX-4.*) + AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?]) + AC_MSG_RESULT([FIONBIO]) + ;; + *) + AC_MSG_RESULT([O_NONBLOCK]) + ;; + esac +]) + +#-------------------------------------------------------------------- +# TEA_TIME_HANLDER +# +# Checks how the system deals with time.h, what time structures +# are used on the system, and what fields the structures have. +# +# Arguments: +# none +# +# Results: +# +# Defines some of the following vars: +# USE_DELTA_FOR_TZ +# HAVE_TM_GMTOFF +# HAVE_TM_TZADJ +# HAVE_TIMEZONE_VAR +# +#-------------------------------------------------------------------- + +AC_DEFUN(TEA_TIME_HANDLER, [ + AC_CHECK_HEADERS(sys/time.h) + AC_HEADER_TIME + AC_STRUCT_TIMEZONE + + AC_CHECK_FUNCS(gmtime_r localtime_r) + + AC_MSG_CHECKING([tm_tzadj in struct tm]) + AC_CACHE_VAL(tcl_cv_member_tm_tzadj, + AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_tzadj;], + tcl_cv_member_tm_tzadj=yes, tcl_cv_member_tm_tzadj=no)) + AC_MSG_RESULT([$tcl_cv_member_tm_tzadj]) + if test $tcl_cv_member_tm_tzadj = yes ; then + AC_DEFINE(HAVE_TM_TZADJ, 1, [Should we use the tm_tzadj field of struct tm?]) + fi + + AC_MSG_CHECKING([tm_gmtoff in struct tm]) + AC_CACHE_VAL(tcl_cv_member_tm_gmtoff, + AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_gmtoff;], + tcl_cv_member_tm_gmtoff=yes, tcl_cv_member_tm_gmtoff=no)) + AC_MSG_RESULT([$tcl_cv_member_tm_gmtoff]) + if test $tcl_cv_member_tm_gmtoff = yes ; then + AC_DEFINE(HAVE_TM_GMTOFF, 1, [Should we use the tm_gmtoff field of struct tm?]) + fi + + # + # Its important to include time.h in this check, as some systems + # (like convex) have timezone functions, etc. + # + AC_MSG_CHECKING([long timezone variable]) + AC_CACHE_VAL(tcl_cv_timezone_long, + AC_TRY_COMPILE([#include ], + [extern long timezone; + timezone += 1; + exit (0);], + tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no)) + AC_MSG_RESULT([$tcl_cv_timezone_long]) + if test $tcl_cv_timezone_long = yes ; then + AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?]) + else + # + # On some systems (eg IRIX 6.2), timezone is a time_t and not a long. + # + AC_MSG_CHECKING([time_t timezone variable]) + AC_CACHE_VAL(tcl_cv_timezone_time, + AC_TRY_COMPILE([#include ], + [extern time_t timezone; + timezone += 1; + exit (0);], + tcl_cv_timezone_time=yes, tcl_cv_timezone_time=no)) + AC_MSG_RESULT([$tcl_cv_timezone_time]) + if test $tcl_cv_timezone_time = yes ; then + AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?]) + fi + fi +]) + +#-------------------------------------------------------------------- +# TEA_BUGGY_STRTOD +# +# Under Solaris 2.4, strtod returns the wrong value for the +# terminating character under some conditions. Check for this +# and if the problem exists use a substitute procedure +# "fixstrtod" (provided by Tcl) that corrects the error. +# Also, on Compaq's Tru64 Unix 5.0, +# strtod(" ") returns 0.0 instead of a failure to convert. +# +# Arguments: +# none +# +# Results: +# +# Might defines some of the following vars: +# strtod (=fixstrtod) +# +#-------------------------------------------------------------------- + +AC_DEFUN(TEA_BUGGY_STRTOD, [ + AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0) + if test "$tcl_strtod" = 1; then + AC_MSG_CHECKING([for Solaris2.4/Tru64 strtod bugs]) + AC_CACHE_VAL(tcl_cv_strtod_buggy,[ + AC_TRY_RUN([ + extern double strtod(); + int main() + { + char *string = "NaN", *spaceString = " "; + char *term; + double value; + value = strtod(string, &term); + if ((term != string) && (term[-1] == 0)) { + exit(1); + } + value = strtod(spaceString, &term); + if (term == (spaceString+1)) { + exit(1); + } + exit(0); + }], tcl_cv_strtod_buggy=1, tcl_cv_strtod_buggy=0, tcl_cv_strtod_buggy=0)]) + if test "$tcl_cv_strtod_buggy" = 1; then + AC_MSG_RESULT([ok]) + else + AC_MSG_RESULT([buggy]) + #LIBOBJS="$LIBOBJS fixstrtod.o" + AC_LIBOBJ([fixstrtod]) + USE_COMPAT=1 + AC_DEFINE(strtod, fixstrtod, [Do we want to use the strtod() in compat?]) + fi + fi +]) + +#-------------------------------------------------------------------- +# TEA_TCL_LINK_LIBS +# +# Search for the libraries needed to link the Tcl shell. +# Things like the math library (-lm) and socket stuff (-lsocket vs. +# -lnsl) are dealt with here. +# +# Arguments: +# Requires the following vars to be set in the Makefile: +# DL_LIBS +# LIBS +# MATH_LIBS +# +# Results: +# +# Subst's the following var: +# TCL_LIBS +# MATH_LIBS +# +# Might append to the following vars: +# LIBS +# +# Might define the following vars: +# HAVE_NET_ERRNO_H +# +#-------------------------------------------------------------------- + +AC_DEFUN(TEA_TCL_LINK_LIBS, [ + #-------------------------------------------------------------------- + # On a few very rare systems, all of the libm.a stuff is + # already in libc.a. Set compiler flags accordingly. + # Also, Linux requires the "ieee" library for math to work + # right (and it must appear before "-lm"). + #-------------------------------------------------------------------- + + AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm") + AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"]) + + #-------------------------------------------------------------------- + # Interactive UNIX requires -linet instead of -lsocket, plus it + # needs net/errno.h to define the socket-related error codes. + #-------------------------------------------------------------------- + + AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"]) + AC_CHECK_HEADER(net/errno.h, [ + AC_DEFINE(HAVE_NET_ERRNO_H, 1, [Do we have ?])]) + + #-------------------------------------------------------------------- + # Check for the existence of the -lsocket and -lnsl libraries. + # The order here is important, so that they end up in the right + # order in the command line generated by make. Here are some + # special considerations: + # 1. Use "connect" and "accept" to check for -lsocket, and + # "gethostbyname" to check for -lnsl. + # 2. Use each function name only once: can't redo a check because + # autoconf caches the results of the last check and won't redo it. + # 3. Use -lnsl and -lsocket only if they supply procedures that + # aren't already present in the normal libraries. This is because + # IRIX 5.2 has libraries, but they aren't needed and they're + # bogus: they goof up name resolution if used. + # 4. On some SVR4 systems, can't use -lsocket without -lnsl too. + # To get around this problem, check for both libraries together + # if -lsocket doesn't work by itself. + #-------------------------------------------------------------------- + + tcl_checkBoth=0 + AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1) + if test "$tcl_checkSocket" = 1; then + AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt, + LIBS="$LIBS -lsocket", tcl_checkBoth=1)]) + fi + if test "$tcl_checkBoth" = 1; then + tk_oldLibs=$LIBS + LIBS="$LIBS -lsocket -lnsl" + AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs]) + fi + AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname, + [LIBS="$LIBS -lnsl"])]) + + # Don't perform the eval of the libraries here because DL_LIBS + # won't be set until we call TEA_CONFIG_CFLAGS + + TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}' + AC_SUBST(TCL_LIBS) + AC_SUBST(MATH_LIBS) +]) + +#-------------------------------------------------------------------- +# TEA_TCL_EARLY_FLAGS +# +# Check for what flags are needed to be passed so the correct OS +# features are available. +# +# Arguments: +# None +# +# Results: +# +# Might define the following vars: +# _ISOC99_SOURCE +# _LARGEFILE64_SOURCE +# +#-------------------------------------------------------------------- + +AC_DEFUN(TEA_TCL_EARLY_FLAG,[ + AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]), + AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no, + AC_TRY_COMPILE([[#define ]$1[ 1 +]$2], $3, + [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes, + [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no))) + if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then + AC_DEFINE($1, 1, [Add the ]$1[ flag when building]) + tcl_flags="$tcl_flags $1" + fi +]) + +AC_DEFUN(TEA_TCL_EARLY_FLAGS,[ + AC_MSG_CHECKING([for required early compiler flags]) + tcl_flags="" + TEA_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include ], + [char *p = (char *)strtoll; char *q = (char *)strtoull;]) + TEA_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include ], + [struct stat64 buf; int i = stat64("/", &buf);]) + if test "x${tcl_flags}" = "x" ; then + AC_MSG_RESULT([none]) + else + AC_MSG_RESULT([${tcl_flags}]) + fi +]) + +#-------------------------------------------------------------------- +# TEA_TCL_64BIT_FLAGS +# +# Check for what is defined in the way of 64-bit features. +# +# Arguments: +# None +# +# Results: +# +# Might define the following vars: +# TCL_WIDE_INT_IS_LONG +# TCL_WIDE_INT_TYPE +# HAVE_STRUCT_DIRENT64 +# HAVE_STRUCT_STAT64 +# HAVE_TYPE_OFF64_T +# +#-------------------------------------------------------------------- + +AC_DEFUN(TEA_TCL_64BIT_FLAGS, [ + AC_MSG_CHECKING([for 64-bit integer type]) + AC_CACHE_VAL(tcl_cv_type_64bit,[ + tcl_cv_type_64bit=none + # See if the compiler knows natively about __int64 + AC_TRY_COMPILE(,[__int64 value = (__int64) 0;], + tcl_type_64bit=__int64, tcl_type_64bit="long long") + # See if we should use long anyway Note that we substitute in the + # type that is our current guess for a 64-bit type inside this check + # program, so it should be modified only carefully... + AC_TRY_COMPILE(,[switch (0) { + case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ; + }],tcl_cv_type_64bit=${tcl_type_64bit})]) + if test "${tcl_cv_type_64bit}" = none ; then + AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Are wide integers to be implemented with C 'long's?]) + AC_MSG_RESULT([using long]) + elif test "${tcl_cv_type_64bit}" = "__int64" \ + -a "${TEA_PLATFORM}" = "windows" ; then + # We actually want to use the default tcl.h checks in this + # case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER* + AC_MSG_RESULT([using Tcl header defaults]) + else + AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit}, + [What type should be used to define wide integers?]) + AC_MSG_RESULT([${tcl_cv_type_64bit}]) + + # Now check for auxiliary declarations + AC_MSG_CHECKING([for struct dirent64]) + AC_CACHE_VAL(tcl_cv_struct_dirent64,[ + AC_TRY_COMPILE([#include +#include ],[struct dirent64 p;], + tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)]) + if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then + AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in ?]) + fi + AC_MSG_RESULT([${tcl_cv_struct_dirent64}]) + + AC_MSG_CHECKING([for struct stat64]) + AC_CACHE_VAL(tcl_cv_struct_stat64,[ + AC_TRY_COMPILE([#include ],[struct stat64 p; +], + tcl_cv_struct_stat64=yes,tcl_cv_struct_stat64=no)]) + if test "x${tcl_cv_struct_stat64}" = "xyes" ; then + AC_DEFINE(HAVE_STRUCT_STAT64, 1, [Is 'struct stat64' in ?]) + fi + AC_MSG_RESULT([${tcl_cv_struct_stat64}]) + + AC_MSG_CHECKING([for off64_t]) + AC_CACHE_VAL(tcl_cv_type_off64_t,[ + AC_TRY_COMPILE([#include ],[off64_t offset; +], + tcl_cv_type_off64_t=yes,tcl_cv_type_off64_t=no)]) + if test "x${tcl_cv_type_off64_t}" = "xyes" ; then + AC_DEFINE(HAVE_TYPE_OFF64_T, 1, [Is off64_t in ?]) + fi + AC_MSG_RESULT([${tcl_cv_type_off64_t}]) + fi +]) + +## +## Here ends the standard Tcl configuration bits and starts the +## TEA specific functions +## + +#------------------------------------------------------------------------ +# TEA_INIT -- +# +# Init various Tcl Extension Architecture (TEA) variables. +# This should be the first called TEA_* macro. +# +# Arguments: +# none +# +# Results: +# +# Defines and substs the following vars: +# CYGPATH +# EXEEXT +# Defines only: +# TEA_INITED +# TEA_PLATFORM (windows or unix) +# +# "cygpath" is used on windows to generate native path names for include +# files. These variables should only be used with the compiler and linker +# since they generate native path names. +# +# EXEEXT +# Select the executable extension based on the host type. This +# is a lightweight replacement for AC_EXEEXT that doesn't require +# a compiler. +#------------------------------------------------------------------------ + +AC_DEFUN(TEA_INIT, [ + # TEA extensions pass this us the version of TEA they think they + # are compatible with. + TEA_VERSION="3.4" + + AC_MSG_CHECKING([for correct TEA configuration]) + if test x"${PACKAGE_NAME}" = x ; then + AC_MSG_ERROR([ +The PACKAGE_NAME variable must be defined by your TEA configure.in]) + fi + if test x"$1" = x ; then + AC_MSG_ERROR([ +TEA version not specified.]) + elif test "$1" != "${TEA_VERSION}" ; then + AC_MSG_RESULT([warning: requested TEA version "$1", have "${TEA_VERSION}"]) + else + AC_MSG_RESULT([ok (TEA ${TEA_VERSION})]) + fi + case "`uname -s`" in + *win32*|*WIN32*|*CYGWIN_NT*|*CYGWIN_9*|*CYGWIN_ME*|*MINGW32_*) + AC_CHECK_PROG(CYGPATH, cygpath, cygpath -w, echo) + EXEEXT=".exe" + TEA_PLATFORM="windows" + ;; + *) + CYGPATH=echo + EXEEXT="" + TEA_PLATFORM="unix" + ;; + esac + + # Check if exec_prefix is set. If not use fall back to prefix. + # Note when adjusted, so that TEA_PREFIX can correct for this. + # This is needed for recursive configures, since autoconf propagates + # $prefix, but not $exec_prefix (doh!). + if test x$exec_prefix = xNONE ; then + exec_prefix_default=yes + exec_prefix=$prefix + fi + + AC_SUBST(EXEEXT) + AC_SUBST(CYGPATH) + + # This package name must be replaced statically for AC_SUBST to work + AC_SUBST(PKG_LIB_FILE) + # Substitute STUB_LIB_FILE in case package creates a stub library too. + AC_SUBST(PKG_STUB_LIB_FILE) + + # We AC_SUBST these here to ensure they are subst'ed, + # in case the user doesn't call TEA_ADD_... + AC_SUBST(PKG_STUB_SOURCES) + AC_SUBST(PKG_STUB_OBJECTS) + AC_SUBST(PKG_TCL_SOURCES) + AC_SUBST(PKG_HEADERS) + AC_SUBST(PKG_INCLUDES) + AC_SUBST(PKG_LIBS) + AC_SUBST(PKG_CFLAGS) +]) + +#------------------------------------------------------------------------ +# TEA_ADD_SOURCES -- +# +# Specify one or more source files. Users should check for +# the right platform before adding to their list. +# It is not important to specify the directory, as long as it is +# in the generic, win or unix subdirectory of $(srcdir). +# +# Arguments: +# one or more file names +# +# Results: +# +# Defines and substs the following vars: +# PKG_SOURCES +# PKG_OBJECTS +#------------------------------------------------------------------------ +AC_DEFUN(TEA_ADD_SOURCES, [ + vars="$@" + for i in $vars; do + case $i in + [\$]*) + # allow $-var names + PKG_SOURCES="$PKG_SOURCES $i" + PKG_OBJECTS="$PKG_OBJECTS $i" + ;; + *) + # check for existence - allows for generic/win/unix VPATH + if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ + -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ + ; then + AC_MSG_ERROR([could not find source file '$i']) + fi + PKG_SOURCES="$PKG_SOURCES $i" + # this assumes it is in a VPATH dir + i=`basename $i` + # handle user calling this before or after TEA_SETUP_COMPILER + if test x"${OBJEXT}" != x ; then + j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}" + else + j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}" + fi + PKG_OBJECTS="$PKG_OBJECTS $j" + ;; + esac + done + AC_SUBST(PKG_SOURCES) + AC_SUBST(PKG_OBJECTS) +]) + +#------------------------------------------------------------------------ +# TEA_ADD_STUB_SOURCES -- +# +# Specify one or more source files. Users should check for +# the right platform before adding to their list. +# It is not important to specify the directory, as long as it is +# in the generic, win or unix subdirectory of $(srcdir). +# +# Arguments: +# one or more file names +# +# Results: +# +# Defines and substs the following vars: +# PKG_STUB_SOURCES +# PKG_STUB_OBJECTS +#------------------------------------------------------------------------ +AC_DEFUN(TEA_ADD_STUB_SOURCES, [ + vars="$@" + for i in $vars; do + # check for existence - allows for generic/win/unix VPATH + if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ + -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ + ; then + AC_MSG_ERROR([could not find stub source file '$i']) + fi + PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" + # this assumes it is in a VPATH dir + i=`basename $i` + # handle user calling this before or after TEA_SETUP_COMPILER + if test x"${OBJEXT}" != x ; then + j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}" + else + j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}" + fi + PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j" + done + AC_SUBST(PKG_STUB_SOURCES) + AC_SUBST(PKG_STUB_OBJECTS) +]) + +#------------------------------------------------------------------------ +# TEA_ADD_TCL_SOURCES -- +# +# Specify one or more Tcl source files. These should be platform +# independent runtime files. +# +# Arguments: +# one or more file names +# +# Results: +# +# Defines and substs the following vars: +# PKG_TCL_SOURCES +#------------------------------------------------------------------------ +AC_DEFUN(TEA_ADD_TCL_SOURCES, [ + vars="$@" + for i in $vars; do + # check for existence, be strict because it is installed + if test ! -f "${srcdir}/$i" ; then + AC_MSG_ERROR([could not find tcl source file '${srcdir}/$i']) + fi + PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i" + done + AC_SUBST(PKG_TCL_SOURCES) +]) + +#------------------------------------------------------------------------ +# TEA_ADD_HEADERS -- +# +# Specify one or more source headers. Users should check for +# the right platform before adding to their list. +# +# Arguments: +# one or more file names +# +# Results: +# +# Defines and substs the following vars: +# PKG_HEADERS +#------------------------------------------------------------------------ +AC_DEFUN(TEA_ADD_HEADERS, [ + vars="$@" + for i in $vars; do + # check for existence, be strict because it is installed + if test ! -f "${srcdir}/$i" ; then + AC_MSG_ERROR([could not find header file '${srcdir}/$i']) + fi + PKG_HEADERS="$PKG_HEADERS $i" + done + AC_SUBST(PKG_HEADERS) +]) + +#------------------------------------------------------------------------ +# TEA_ADD_INCLUDES -- +# +# Specify one or more include dirs. Users should check for +# the right platform before adding to their list. +# +# Arguments: +# one or more file names +# +# Results: +# +# Defines and substs the following vars: +# PKG_INCLUDES +#------------------------------------------------------------------------ +AC_DEFUN(TEA_ADD_INCLUDES, [ + vars="$@" + for i in $vars; do + PKG_INCLUDES="$PKG_INCLUDES $i" + done + AC_SUBST(PKG_INCLUDES) +]) + +#------------------------------------------------------------------------ +# TEA_ADD_LIBS -- +# +# Specify one or more libraries. Users should check for +# the right platform before adding to their list. For Windows, +# libraries provided in "foo.lib" format will be converted to +# "-lfoo" when using GCC (mingw). +# +# Arguments: +# one or more file names +# +# Results: +# +# Defines and substs the following vars: +# PKG_LIBS +#------------------------------------------------------------------------ +AC_DEFUN(TEA_ADD_LIBS, [ + vars="$@" + for i in $vars; do + if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then + # Convert foo.lib to -lfoo for GCC. No-op if not *.lib + i=`echo "$i" | sed -e 's/^\([[^-]].*\)\.lib[$]/-l\1/i'` + fi + PKG_LIBS="$PKG_LIBS $i" + done + AC_SUBST(PKG_LIBS) +]) + +#------------------------------------------------------------------------ +# TEA_ADD_CFLAGS -- +# +# Specify one or more CFLAGS. Users should check for +# the right platform before adding to their list. +# +# Arguments: +# one or more file names +# +# Results: +# +# Defines and substs the following vars: +# PKG_CFLAGS +#------------------------------------------------------------------------ +AC_DEFUN(TEA_ADD_CFLAGS, [ + PKG_CFLAGS="$PKG_CFLAGS $@" + AC_SUBST(PKG_CFLAGS) +]) + +#------------------------------------------------------------------------ +# TEA_PREFIX -- +# +# Handle the --prefix=... option by defaulting to what Tcl gave +# +# Arguments: +# none +# +# Results: +# +# If --prefix or --exec-prefix was not specified, $prefix and +# $exec_prefix will be set to the values given to Tcl when it was +# configured. +#------------------------------------------------------------------------ +AC_DEFUN(TEA_PREFIX, [ + if test "${prefix}" = "NONE"; then + prefix_default=yes + if test x"${TCL_PREFIX}" != x; then + AC_MSG_NOTICE([--prefix defaulting to TCL_PREFIX ${TCL_PREFIX}]) + prefix=${TCL_PREFIX} + else + AC_MSG_NOTICE([--prefix defaulting to /usr/local]) + prefix=/usr/local + fi + fi + if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \ + -o x"${exec_prefix_default}" = x"yes" ; then + if test x"${TCL_EXEC_PREFIX}" != x; then + AC_MSG_NOTICE([--exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}]) + exec_prefix=${TCL_EXEC_PREFIX} + else + AC_MSG_NOTICE([--exec-prefix defaulting to ${prefix}]) + exec_prefix=$prefix + fi + fi +]) + +#------------------------------------------------------------------------ +# TEA_SETUP_COMPILER_CC -- +# +# Do compiler checks the way we want. This is just a replacement +# for AC_PROG_CC in TEA configure.in files to make them cleaner. +# +# Arguments: +# none +# +# Results: +# +# Sets up CC var and other standard bits we need to make executables. +#------------------------------------------------------------------------ +AC_DEFUN(TEA_SETUP_COMPILER_CC, [ + # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) + # in this macro, they need to go into TEA_SETUP_COMPILER instead. + + # If the user did not set CFLAGS, set it now to keep + # the AC_PROG_CC macro from adding "-g -O2". + if test "${CFLAGS+set}" != "set" ; then + CFLAGS="" + fi + + AC_PROG_CC + AC_PROG_CPP + + AC_PROG_INSTALL + + #-------------------------------------------------------------------- + # Checks to see if the make program sets the $MAKE variable. + #-------------------------------------------------------------------- + + AC_PROG_MAKE_SET + + #-------------------------------------------------------------------- + # Find ranlib + #-------------------------------------------------------------------- + + AC_PROG_RANLIB + + #-------------------------------------------------------------------- + # Determines the correct binary file extension (.o, .obj, .exe etc.) + #-------------------------------------------------------------------- + + AC_OBJEXT + AC_EXEEXT +]) + +#------------------------------------------------------------------------ +# TEA_SETUP_COMPILER -- +# +# Do compiler checks that use the compiler. This must go after +# TEA_SETUP_COMPILER_CC, which does the actual compiler check. +# +# Arguments: +# none +# +# Results: +# +# Sets up CC var and other standard bits we need to make executables. +#------------------------------------------------------------------------ +AC_DEFUN(TEA_SETUP_COMPILER, [ + # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here. + AC_REQUIRE([TEA_SETUP_COMPILER_CC]) + + #------------------------------------------------------------------------ + # If we're using GCC, see if the compiler understands -pipe. If so, use it. + # It makes compiling go faster. (This is only a performance feature.) + #------------------------------------------------------------------------ + + if test -z "$no_pipe" -a -n "$GCC"; then + AC_MSG_CHECKING([if the compiler understands -pipe]) + OLDCC="$CC" + CC="$CC -pipe" + AC_TRY_COMPILE(,, AC_MSG_RESULT([yes]), CC="$OLDCC" + AC_MSG_RESULT([no])) + fi + + #-------------------------------------------------------------------- + # Common compiler flag setup + #-------------------------------------------------------------------- + + AC_C_BIGENDIAN + if test "${TEA_PLATFORM}" = "unix" ; then + TEA_TCL_LINK_LIBS + TEA_MISSING_POSIX_HEADERS + # Let the user call this, because if it triggers, they will + # need a compat/strtod.c that is correct. Users can also + # use Tcl_GetDouble(FromObj) instead. + #TEA_BUGGY_STRTOD + fi +]) + +#------------------------------------------------------------------------ +# TEA_MAKE_LIB -- +# +# Generate a line that can be used to build a shared/unshared library +# in a platform independent manner. +# +# Arguments: +# none +# +# Requires: +# +# Results: +# +# Defines the following vars: +# CFLAGS - Done late here to note disturb other AC macros +# MAKE_LIB - Command to execute to build the Tcl library; +# differs depending on whether or not Tcl is being +# compiled as a shared library. +# MAKE_SHARED_LIB Makefile rule for building a shared library +# MAKE_STATIC_LIB Makefile rule for building a static library +# MAKE_STUB_LIB Makefile rule for building a stub library +#------------------------------------------------------------------------ + +AC_DEFUN(TEA_MAKE_LIB, [ + if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then + MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)" + MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)" + MAKE_STUB_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_STUB_OBJECTS)" + else + MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)" + MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}" + MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)" + fi + + if test "${SHARED_BUILD}" = "1" ; then + MAKE_LIB="${MAKE_SHARED_LIB} " + else + MAKE_LIB="${MAKE_STATIC_LIB} " + fi + + #-------------------------------------------------------------------- + # Shared libraries and static libraries have different names. + # Use the double eval to make sure any variables in the suffix is + # substituted. (@@@ Might not be necessary anymore) + #-------------------------------------------------------------------- + + if test "${TEA_PLATFORM}" = "windows" ; then + if test "${SHARED_BUILD}" = "1" ; then + # We force the unresolved linking of symbols that are really in + # the private libraries of Tcl and Tk. + SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\"" + if test x"${TK_BIN_DIR}" != x ; then + SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\"" + fi + eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" + else + eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" + fi + # Some packages build there own stubs libraries + eval eval "PKG_STUB_LIB_FILE=${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" + # These aren't needed on Windows (either MSVC or gcc) + RANLIB=: + RANLIB_STUB=: + else + RANLIB_STUB="${RANLIB}" + if test "${SHARED_BUILD}" = "1" ; then + SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}" + if test x"${TK_BIN_DIR}" != x ; then + SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}" + fi + eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" + RANLIB=: + else + eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" + fi + # Some packages build there own stubs libraries + eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" + fi + + # These are escaped so that only CFLAGS is picked up at configure time. + # The other values will be substituted at make time. + CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}" + if test "${SHARED_BUILD}" = "1" ; then + CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}" + fi + + AC_SUBST(MAKE_LIB) + AC_SUBST(MAKE_SHARED_LIB) + AC_SUBST(MAKE_STATIC_LIB) + AC_SUBST(MAKE_STUB_LIB) + AC_SUBST(RANLIB_STUB) +]) + +#------------------------------------------------------------------------ +# TEA_LIB_SPEC -- +# +# Compute the name of an existing object library located in libdir +# from the given base name and produce the appropriate linker flags. +# +# Arguments: +# basename The base name of the library without version +# numbers, extensions, or "lib" prefixes. +# extra_dir Extra directory in which to search for the +# library. This location is used first, then +# $prefix/$exec-prefix, then some defaults. +# +# Requires: +# TEA_INIT and TEA_PREFIX must be called first. +# +# Results: +# +# Defines the following vars: +# ${basename}_LIB_NAME The computed library name. +# ${basename}_LIB_SPEC The computed linker flags. +#------------------------------------------------------------------------ + +AC_DEFUN(TEA_LIB_SPEC, [ + AC_MSG_CHECKING([for $1 library]) + + # Look in exec-prefix for the library (defined by TEA_PREFIX). + + tea_lib_name_dir="${exec_prefix}/lib" + + # Or in a user-specified location. + + if test x"$2" != x ; then + tea_extra_lib_dir=$2 + else + tea_extra_lib_dir=NONE + fi + + for i in \ + `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ + `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \ + `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ + `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \ + `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \ + `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \ + `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \ + `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do + if test -f "$i" ; then + tea_lib_name_dir=`dirname $i` + $1_LIB_NAME=`basename $i` + $1_LIB_PATH_NAME=$i + break + fi + done + + if test "${TEA_PLATFORM}" = "windows"; then + $1_LIB_SPEC=\"`${CYGPATH} ${$1_LIB_PATH_NAME} 2>/dev/null`\" + else + # Strip off the leading "lib" and trailing ".a" or ".so" + + tea_lib_name_lib=`echo ${$1_LIB_NAME}|sed -e 's/^lib//' -e 's/\.[[^.]]*$//' -e 's/\.so.*//'` + $1_LIB_SPEC="-L${tea_lib_name_dir} -l${tea_lib_name_lib}" + fi + + if test "x${$1_LIB_NAME}" = x ; then + AC_MSG_ERROR([not found]) + else + AC_MSG_RESULT([${$1_LIB_SPEC}]) + fi +]) + +#------------------------------------------------------------------------ +# TEA_PRIVATE_TCL_HEADERS -- +# +# Locate the private Tcl include files +# +# Arguments: +# +# Requires: +# TCL_SRC_DIR Assumes that TEA_LOAD_TCLCONFIG has +# already been called. +# +# Results: +# +# Substs the following vars: +# TCL_TOP_DIR_NATIVE +# TCL_GENERIC_DIR_NATIVE +# TCL_UNIX_DIR_NATIVE +# TCL_WIN_DIR_NATIVE +# TCL_BMAP_DIR_NATIVE +# TCL_TOOL_DIR_NATIVE +# TCL_PLATFORM_DIR_NATIVE +# TCL_BIN_DIR_NATIVE +# TCL_INCLUDES +#------------------------------------------------------------------------ + +AC_DEFUN(TEA_PRIVATE_TCL_HEADERS, [ + AC_MSG_CHECKING([for Tcl private include files]) + + TCL_SRC_DIR_NATIVE=`${CYGPATH} ${TCL_SRC_DIR}` + TCL_TOP_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}\" + TCL_GENERIC_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/generic\" + TCL_UNIX_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/unix\" + TCL_WIN_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/win\" + TCL_BMAP_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/bitmaps\" + TCL_TOOL_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/tools\" + TCL_COMPAT_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/compat\" + + if test "${TEA_PLATFORM}" = "windows"; then + TCL_PLATFORM_DIR_NATIVE=${TCL_WIN_DIR_NATIVE} + else + TCL_PLATFORM_DIR_NATIVE=${TCL_UNIX_DIR_NATIVE} + fi + # We want to ensure these are substituted so as not to require + # any *_NATIVE vars be defined in the Makefile + TCL_INCLUDES="-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}" + if test "`uname -s`" = "Darwin"; then + # If Tcl was built as a framework, attempt to use + # the framework's Headers and PrivateHeaders directories + case ${TCL_DEFS} in + *TCL_FRAMEWORK*) + if test -d "${TCL_BIN_DIR}/Headers" -a -d "${TCL_BIN_DIR}/PrivateHeaders"; then + TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/PrivateHeaders\" ${TCL_INCLUDES}"; else + TCL_INCLUDES="${TCL_INCLUDES} ${TCL_INCLUDE_SPEC} `echo "${TCL_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"; fi + ;; + esac + fi + + AC_SUBST(TCL_TOP_DIR_NATIVE) + AC_SUBST(TCL_GENERIC_DIR_NATIVE) + AC_SUBST(TCL_UNIX_DIR_NATIVE) + AC_SUBST(TCL_WIN_DIR_NATIVE) + AC_SUBST(TCL_BMAP_DIR_NATIVE) + AC_SUBST(TCL_TOOL_DIR_NATIVE) + AC_SUBST(TCL_PLATFORM_DIR_NATIVE) + + AC_SUBST(TCL_INCLUDES) + AC_MSG_RESULT([Using srcdir found in tclConfig.sh: ${TCL_SRC_DIR}]) +]) + +#------------------------------------------------------------------------ +# TEA_PUBLIC_TCL_HEADERS -- +# +# Locate the installed public Tcl header files +# +# Arguments: +# None. +# +# Requires: +# CYGPATH must be set +# +# Results: +# +# Adds a --with-tclinclude switch to configure. +# Result is cached. +# +# Substs the following vars: +# TCL_INCLUDES +#------------------------------------------------------------------------ + +AC_DEFUN(TEA_PUBLIC_TCL_HEADERS, [ + AC_MSG_CHECKING([for Tcl public headers]) + + AC_ARG_WITH(tclinclude, [ --with-tclinclude directory containing the public Tcl header files], with_tclinclude=${withval}) + + AC_CACHE_VAL(ac_cv_c_tclh, [ + # Use the value from --with-tclinclude, if it was given + + if test x"${with_tclinclude}" != x ; then + if test -f "${with_tclinclude}/tcl.h" ; then + ac_cv_c_tclh=${with_tclinclude} + else + AC_MSG_ERROR([${with_tclinclude} directory does not contain tcl.h]) + fi + else + # If Tcl was built as a framework, attempt to use + # the framework's Headers directory + case ${TCL_DEFS} in + *TCL_FRAMEWORK*) + list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`" + ;; + *) + list="" + ;; + esac + + # Look in the source dir only if Tcl is not installed, + # and in that situation, look there before installed locations. + if test -f "$TCL_BIN_DIR/Makefile" ; then + list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`" + fi + + # Check order: pkg --prefix location, Tcl's --prefix location, + # relative to directory of tclConfig.sh. + + eval "temp_includedir=${includedir}" + list="$list \ + `ls -d ${temp_includedir} 2>/dev/null` \ + `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ + `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" + if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then + list="$list /usr/local/include /usr/include" + if test x"${TCL_INCLUDE_SPEC}" != x ; then + d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'` + list="$list `ls -d ${d} 2>/dev/null`" + fi + fi + for i in $list ; do + if test -f "$i/tcl.h" ; then + ac_cv_c_tclh=$i + break + fi + done + fi + ]) + + # Print a message based on how we determined the include path + + if test x"${ac_cv_c_tclh}" = x ; then + AC_MSG_ERROR([tcl.h not found. Please specify its location with --with-tclinclude]) + else + AC_MSG_RESULT([${ac_cv_c_tclh}]) + fi + + # Convert to a native path and substitute into the output files. + + INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}` + + TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" + + AC_SUBST(TCL_INCLUDES) +]) + +#------------------------------------------------------------------------ +# TEA_PRIVATE_TK_HEADERS -- +# +# Locate the private Tk include files +# +# Arguments: +# +# Requires: +# TK_SRC_DIR Assumes that TEA_LOAD_TKCONFIG has +# already been called. +# +# Results: +# +# Substs the following vars: +# TK_INCLUDES +#------------------------------------------------------------------------ + +AC_DEFUN(TEA_PRIVATE_TK_HEADERS, [ + AC_MSG_CHECKING([for Tk private include files]) + + TK_SRC_DIR_NATIVE=`${CYGPATH} ${TK_SRC_DIR}` + TK_TOP_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}\" + TK_UNIX_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/unix\" + TK_WIN_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/win\" + TK_GENERIC_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/generic\" + TK_XLIB_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/xlib\" + if test "${TEA_PLATFORM}" = "windows"; then + TK_PLATFORM_DIR_NATIVE=${TK_WIN_DIR_NATIVE} + else + TK_PLATFORM_DIR_NATIVE=${TK_UNIX_DIR_NATIVE} + fi + # We want to ensure these are substituted so as not to require + # any *_NATIVE vars be defined in the Makefile + TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}" + if test "${TEA_WINDOWINGSYSTEM}" = "win32" \ + -o "${TEA_WINDOWINGSYSTEM}" = "aqua"; then + TK_INCLUDES="${TK_INCLUDES} -I${TK_XLIB_DIR_NATIVE}" + fi + if test "${TEA_WINDOWINGSYSTEM}" = "aqua"; then + TK_INCLUDES="${TK_INCLUDES} -I${TK_SRC_DIR_NATIVE}/macosx" + fi + if test "`uname -s`" = "Darwin"; then + # If Tk was built as a framework, attempt to use + # the framework's Headers and PrivateHeaders directories + case ${TK_DEFS} in + *TK_FRAMEWORK*) + if test -d "${TK_BIN_DIR}/Headers" -a -d "${TK_BIN_DIR}/PrivateHeaders"; then + TK_INCLUDES="-I\"${TK_BIN_DIR}/Headers\" -I\"${TK_BIN_DIR}/PrivateHeaders\" ${TK_INCLUDES}"; fi + ;; + esac + fi + + AC_SUBST(TK_TOP_DIR_NATIVE) + AC_SUBST(TK_UNIX_DIR_NATIVE) + AC_SUBST(TK_WIN_DIR_NATIVE) + AC_SUBST(TK_GENERIC_DIR_NATIVE) + AC_SUBST(TK_XLIB_DIR_NATIVE) + AC_SUBST(TK_PLATFORM_DIR_NATIVE) + + AC_SUBST(TK_INCLUDES) + AC_MSG_RESULT([Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}]) +]) + +#------------------------------------------------------------------------ +# TEA_PUBLIC_TK_HEADERS -- +# +# Locate the installed public Tk header files +# +# Arguments: +# None. +# +# Requires: +# CYGPATH must be set +# +# Results: +# +# Adds a --with-tkinclude switch to configure. +# Result is cached. +# +# Substs the following vars: +# TK_INCLUDES +#------------------------------------------------------------------------ + +AC_DEFUN(TEA_PUBLIC_TK_HEADERS, [ + AC_MSG_CHECKING([for Tk public headers]) + + AC_ARG_WITH(tkinclude, [ --with-tkinclude directory containing the public Tk header files.], with_tkinclude=${withval}) + + AC_CACHE_VAL(ac_cv_c_tkh, [ + # Use the value from --with-tkinclude, if it was given + + if test x"${with_tkinclude}" != x ; then + if test -f "${with_tkinclude}/tk.h" ; then + ac_cv_c_tkh=${with_tkinclude} + else + AC_MSG_ERROR([${with_tkinclude} directory does not contain tk.h]) + fi + else + # If Tk was built as a framework, attempt to use + # the framework's Headers directory. + case ${TK_DEFS} in + *TK_FRAMEWORK*) + list="`ls -d ${TK_BIN_DIR}/Headers 2>/dev/null`" + ;; + *) + list="" + ;; + esac + + # Look in the source dir only if Tk is not installed, + # and in that situation, look there before installed locations. + if test -f "$TK_BIN_DIR/Makefile" ; then + list="$list `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`" + fi + + # Check order: pkg --prefix location, Tk's --prefix location, + # relative to directory of tkConfig.sh, Tcl's --prefix location, + # relative to directory of tclConfig.sh. + + eval "temp_includedir=${includedir}" + list="$list \ + `ls -d ${temp_includedir} 2>/dev/null` \ + `ls -d ${TK_PREFIX}/include 2>/dev/null` \ + `ls -d ${TK_BIN_DIR}/../include 2>/dev/null` \ + `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ + `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" + if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then + list="$list /usr/local/include /usr/include" + fi + for i in $list ; do + if test -f "$i/tk.h" ; then + ac_cv_c_tkh=$i + break + fi + done + fi + ]) + + # Print a message based on how we determined the include path + + if test x"${ac_cv_c_tkh}" = x ; then + AC_MSG_ERROR([tk.h not found. Please specify its location with --with-tkinclude]) + else + AC_MSG_RESULT([${ac_cv_c_tkh}]) + fi + + # Convert to a native path and substitute into the output files. + + INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}` + + TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" + + AC_SUBST(TK_INCLUDES) + + if test "${TEA_WINDOWINGSYSTEM}" = "win32" \ + -o "${TEA_WINDOWINGSYSTEM}" = "aqua"; then + # On Windows and Aqua, we need the X compat headers + AC_MSG_CHECKING([for X11 header files]) + if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then + INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`" + TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" + AC_SUBST(TK_XINCLUDES) + fi + AC_MSG_RESULT([${INCLUDE_DIR_NATIVE}]) + fi +]) + +#------------------------------------------------------------------------ +# TEA_PROG_TCLSH +# Determine the fully qualified path name of the tclsh executable +# in the Tcl build directory or the tclsh installed in a bin +# directory. This macro will correctly determine the name +# of the tclsh executable even if tclsh has not yet been +# built in the build directory. The tclsh found is always +# associated with a tclConfig.sh file. This tclsh should be used +# only for running extension test cases. It should never be +# or generation of files (like pkgIndex.tcl) at build time. +# +# Arguments +# none +# +# Results +# Subst's the following values: +# TCLSH_PROG +#------------------------------------------------------------------------ + +AC_DEFUN(TEA_PROG_TCLSH, [ + AC_MSG_CHECKING([for tclsh]) + if test -f "${TCL_BIN_DIR}/Makefile" ; then + # tclConfig.sh is in Tcl build directory + if test "${TEA_PLATFORM}" = "windows"; then + TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" + else + TCLSH_PROG="${TCL_BIN_DIR}/tclsh" + fi + else + # tclConfig.sh is in install location + if test "${TEA_PLATFORM}" = "windows"; then + TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" + else + TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}" + fi + list="`ls -d ${TCL_PREFIX}/bin 2>/dev/null` \ + `ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null`" + for i in $list ; do + if test -f "$i/${TCLSH_PROG}" ; then + REAL_TCL_BIN_DIR="`cd "$i"; pwd`" + break + fi + done + TCLSH_PROG="${REAL_TCL_BIN_DIR}/${TCLSH_PROG}" + fi + AC_MSG_RESULT(${TCLSH_PROG}) + AC_SUBST(TCLSH_PROG) +]) + +#------------------------------------------------------------------------ +# TEA_PROG_WISH +# Determine the fully qualified path name of the wish executable +# in the Tk build directory or the wish installed in a bin +# directory. This macro will correctly determine the name +# of the wish executable even if wish has not yet been +# built in the build directory. The wish found is always +# associated with a tkConfig.sh file. This wish should be used +# only for running extension test cases. It should never be +# or generation of files (like pkgIndex.tcl) at build time. +# +# Arguments +# none +# +# Results +# Subst's the following values: +# WISH_PROG +#------------------------------------------------------------------------ + +AC_DEFUN(TEA_PROG_WISH, [ + AC_MSG_CHECKING([for wish]) + if test -f "${TK_BIN_DIR}/Makefile" ; then + # tkConfig.sh is in Tk build directory + if test "${TEA_PLATFORM}" = "windows"; then + WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" + else + WISH_PROG="${TK_BIN_DIR}/wish" + fi + else + # tkConfig.sh is in install location + if test "${TEA_PLATFORM}" = "windows"; then + WISH_PROG="wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" + else + WISH_PROG="wish${TK_MAJOR_VERSION}.${TK_MINOR_VERSION}${TK_DBGX}" + fi + list="`ls -d ${TK_PREFIX}/bin 2>/dev/null` \ + `ls -d ${TK_BIN_DIR}/../bin 2>/dev/null`" + for i in $list ; do + if test -f "$i/${WISH_PROG}" ; then + REAL_TK_BIN_DIR="`cd "$i"; pwd`" + break + fi + done + WISH_PROG="${REAL_TK_BIN_DIR}/${WISH_PROG}" + fi + AC_MSG_RESULT(${WISH_PROG}) + AC_SUBST(WISH_PROG) +]) + +#------------------------------------------------------------------------ +# TEA_PATH_CONFIG -- +# +# Locate the ${1}Config.sh file and perform a sanity check on +# the ${1} compile flags. These are used by packages like +# [incr Tk] that load *Config.sh files from more than Tcl and Tk. +# +# Arguments: +# none +# +# Results: +# +# Adds the following arguments to configure: +# --with-$1=... +# +# Defines the following vars: +# $1_BIN_DIR Full path to the directory containing +# the $1Config.sh file +#------------------------------------------------------------------------ + +AC_DEFUN(TEA_PATH_CONFIG, [ + # + # Ok, lets find the $1 configuration + # First, look for one uninstalled. + # the alternative search directory is invoked by --with-$1 + # + + if test x"${no_$1}" = x ; then + # we reset no_$1 in case something fails here + no_$1=true + AC_ARG_WITH($1, [ --with-$1 directory containing $1 configuration ($1Config.sh)], with_$1config=${withval}) + AC_MSG_CHECKING([for $1 configuration]) + AC_CACHE_VAL(ac_cv_c_$1config,[ + + # First check to see if --with-$1 was specified. + if test x"${with_$1config}" != x ; then + case ${with_$1config} in + */$1Config.sh ) + if test -f ${with_$1config}; then + AC_MSG_WARN([--with-$1 argument should refer to directory containing $1Config.sh, not to $1Config.sh itself]) + with_$1config=`echo ${with_$1config} | sed 's!/$1Config\.sh$!!'` + fi;; + esac + if test -f "${with_$1config}/$1Config.sh" ; then + ac_cv_c_$1config=`(cd ${with_$1config}; pwd)` + else + AC_MSG_ERROR([${with_$1config} directory doesn't contain $1Config.sh]) + fi + fi + + # then check for a private $1 installation + if test x"${ac_cv_c_$1config}" = x ; then + for i in \ + ../$1 \ + `ls -dr ../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ + `ls -dr ../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ + `ls -dr ../$1*[[0-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ + ../../$1 \ + `ls -dr ../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ + `ls -dr ../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ + `ls -dr ../../$1*[[0-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ + ../../../$1 \ + `ls -dr ../../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ + `ls -dr ../../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ + `ls -dr ../../../$1*[[0-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ + ${srcdir}/../$1 \ + `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ + `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ + `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ + ; do + if test -f "$i/$1Config.sh" ; then + ac_cv_c_$1config=`(cd $i; pwd)` + break + fi + if test -f "$i/unix/$1Config.sh" ; then + ac_cv_c_$1config=`(cd $i/unix; pwd)` + break + fi + done + fi + + # check in a few common install locations + if test x"${ac_cv_c_$1config}" = x ; then + for i in `ls -d ${libdir} 2>/dev/null` \ + `ls -d ${exec_prefix}/lib 2>/dev/null` \ + `ls -d ${prefix}/lib 2>/dev/null` \ + `ls -d /usr/local/lib 2>/dev/null` \ + `ls -d /usr/contrib/lib 2>/dev/null` \ + `ls -d /usr/lib 2>/dev/null` \ + ; do + if test -f "$i/$1Config.sh" ; then + ac_cv_c_$1config=`(cd $i; pwd)` + break + fi + done + fi + ]) + + if test x"${ac_cv_c_$1config}" = x ; then + $1_BIN_DIR="# no $1 configs found" + AC_MSG_WARN("Cannot find $1 configuration definitions") + exit 0 + else + no_$1= + $1_BIN_DIR=${ac_cv_c_$1config} + AC_MSG_RESULT([found $$1_BIN_DIR/$1Config.sh]) + fi + fi +]) + +#------------------------------------------------------------------------ +# TEA_LOAD_CONFIG -- +# +# Load the $1Config.sh file +# +# Arguments: +# +# Requires the following vars to be set: +# $1_BIN_DIR +# +# Results: +# +# Subst the following vars: +# $1_SRC_DIR +# $1_LIB_FILE +# $1_LIB_SPEC +# +#------------------------------------------------------------------------ + +AC_DEFUN(TEA_LOAD_CONFIG, [ + AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh]) + + if test -f "${$1_BIN_DIR}/$1Config.sh" ; then + AC_MSG_RESULT([loading]) + . ${$1_BIN_DIR}/$1Config.sh + else + AC_MSG_RESULT([file not found]) + fi + + # + # If the $1_BIN_DIR is the build directory (not the install directory), + # then set the common variable name to the value of the build variables. + # For example, the variable $1_LIB_SPEC will be set to the value + # of $1_BUILD_LIB_SPEC. An extension should make use of $1_LIB_SPEC + # instead of $1_BUILD_LIB_SPEC since it will work with both an + # installed and uninstalled version of Tcl. + # + + if test -f ${$1_BIN_DIR}/Makefile ; then + AC_MSG_WARN([Found Makefile - using build library specs for $1]) + $1_LIB_SPEC=${$1_BUILD_LIB_SPEC} + $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC} + $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH} + fi + + AC_SUBST($1_VERSION) + AC_SUBST($1_BIN_DIR) + AC_SUBST($1_SRC_DIR) + + AC_SUBST($1_LIB_FILE) + AC_SUBST($1_LIB_SPEC) + + AC_SUBST($1_STUB_LIB_FILE) + AC_SUBST($1_STUB_LIB_SPEC) + AC_SUBST($1_STUB_LIB_PATH) +]) + +#------------------------------------------------------------------------ +# TEA_PATH_CELIB -- +# +# Locate Keuchel's celib emulation layer for targeting Win/CE +# +# Arguments: +# none +# +# Results: +# +# Adds the following arguments to configure: +# --with-celib=... +# +# Defines the following vars: +# CELIB_DIR Full path to the directory containing +# the include and platform lib files +#------------------------------------------------------------------------ + +AC_DEFUN(TEA_PATH_CELIB, [ + # First, look for one uninstalled. + # the alternative search directory is invoked by --with-celib + + if test x"${no_celib}" = x ; then + # we reset no_celib in case something fails here + no_celib=true + AC_ARG_WITH(celib,[ --with-celib=DIR use Windows/CE support library from DIR], with_celibconfig=${withval}) + AC_MSG_CHECKING([for Windows/CE celib directory]) + AC_CACHE_VAL(ac_cv_c_celibconfig,[ + # First check to see if --with-celibconfig was specified. + if test x"${with_celibconfig}" != x ; then + if test -d "${with_celibconfig}/inc" ; then + ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)` + else + AC_MSG_ERROR([${with_celibconfig} directory doesn't contain inc directory]) + fi + fi + + # then check for a celib library + if test x"${ac_cv_c_celibconfig}" = x ; then + for i in \ + ../celib-palm-3.0 \ + ../celib \ + ../../celib-palm-3.0 \ + ../../celib \ + `ls -dr ../celib-*3.[[0-9]]* 2>/dev/null` \ + ${srcdir}/../celib-palm-3.0 \ + ${srcdir}/../celib \ + `ls -dr ${srcdir}/../celib-*3.[[0-9]]* 2>/dev/null` \ + ; do + if test -d "$i/inc" ; then + ac_cv_c_celibconfig=`(cd $i; pwd)` + break + fi + done + fi + ]) + if test x"${ac_cv_c_celibconfig}" = x ; then + AC_MSG_ERROR([Cannot find celib support library directory]) + else + no_celib= + CELIB_DIR=${ac_cv_c_celibconfig} + CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` + AC_MSG_RESULT([found $CELIB_DIR]) + fi + fi +]) diff --git a/ng/Togl-1.7/texture.c b/ng/Togl-1.7/texture.c new file mode 100644 index 00000000..6a6f39f9 --- /dev/null +++ b/ng/Togl-1.7/texture.c @@ -0,0 +1,608 @@ +/* $Id: texture.c,v 1.10 2005/04/23 07:49:14 gregcouch Exp $ */ + +/* + * Togl - a Tk OpenGL widget + * Copyright (C) 1996-1997 Brian Paul and Ben Bederson + * See the LICENSE file for copyright details. + */ + + +/* + * An example Togl program demonstrating texture mapping + */ + + +#include "togl.h" +#include +#include +#if defined(TOGL_AGL) || defined(TOGL_AGL_CLASSIC) +# include +#else +# include +#endif +#include "image.h" + + +/* + * The following variable is a special hack that is needed in order for + * Sun shared libraries to be used for Tcl. + */ +#ifdef SUN +extern int matherr(); +int *tclDummyMathPtr = (int *) matherr; +#endif + +#define CHECKER 0 +#define FACE 1 +#define TREE 2 + + +static GLenum minfilter = GL_NEAREST_MIPMAP_LINEAR; +static GLenum magfilter = GL_LINEAR; +static GLenum swrap = GL_REPEAT; +static GLenum twrap = GL_REPEAT; +static GLenum envmode = GL_MODULATE; +static GLubyte polycolor[4] = { 255, 255, 255, 255 }; +static int image = CHECKER; +static GLfloat coord_scale = 1.0; +static GLfloat xrot = 0.0; +static GLfloat yrot = 0.0; +static GLfloat scale = 1.0; + +static GLint width, height; + +static GLboolean blend = GL_FALSE; + + +/* + * Load a texture image. n is one of CHECKER, FACE or TREE. + */ +void +texture_image(int n) +{ + if (n == CHECKER) { +#define WIDTH 64 +#define HEIGHT 64 + GLubyte teximage[WIDTH * HEIGHT][4]; + int i, j; + + for (i = 0; i < HEIGHT; i++) { + for (j = 0; j < WIDTH; j++) { + GLubyte value; + + value = ((i / 4 + j / 4) % 2) ? 0xff : 0x00; + teximage[i * WIDTH + j][0] = value; + teximage[i * WIDTH + j][1] = value; + teximage[i * WIDTH + j][2] = value; + teximage[i * WIDTH + j][3] = value; + } + } + + glEnable(GL_TEXTURE_2D); + gluBuild2DMipmaps(GL_TEXTURE_2D, 4, WIDTH, HEIGHT, + GL_RGBA, GL_UNSIGNED_BYTE, teximage); + blend = GL_FALSE; + +#undef WIDTH +#undef HEIGHT + } else if (n == FACE) { + TK_RGBImageRec *img = tkRGBImageLoad("ben.rgb"); + + if (img) { + glEnable(GL_TEXTURE_2D); + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + gluBuild2DMipmaps(GL_TEXTURE_2D, img->sizeZ, img->sizeX, img->sizeY, + img->sizeZ == 3 ? GL_RGB : GL_RGBA, + GL_UNSIGNED_BYTE, img->data); + + blend = GL_TRUE; + } + } else if (n == TREE) { + TK_RGBImageRec *img = tkRGBImageLoad("tree2.rgba"); + + if (img) { + glEnable(GL_TEXTURE_2D); + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + gluBuild2DMipmaps(GL_TEXTURE_2D, img->sizeZ, img->sizeX, img->sizeY, + img->sizeZ == 3 ? GL_RGB : GL_RGBA, + GL_UNSIGNED_BYTE, img->data); + + blend = GL_TRUE; + } + } else { + abort(); + } +} + + +/* + * Togl widget create callback. This is called by Tcl/Tk when the widget has + * been realized. Here's where one may do some one-time context setup or + * initializations. + */ +void +create_cb(Togl *togl) +{ + glEnable(GL_DEPTH_TEST); /* Enable depth buffering */ + + texture_image(CHECKER); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magfilter); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minfilter); +} + + +/* + * Togl widget reshape callback. This is called by Tcl/Tk when the widget + * has been resized. Typically, we call glViewport and perhaps setup the + * projection matrix. + */ +void +reshape_cb(Togl *togl) +{ + width = Togl_Width(togl); + height = Togl_Height(togl); + + glViewport(0, 0, width, height); + +} + + +static void +check_error(char *where) +{ + GLenum error; + + while (1) { + error = glGetError(); + if (error == GL_NO_ERROR) { + break; + } + printf("OpenGL error near %s: %s\n", where, gluErrorString(error)); + } +} + + + +/* + * Togl widget display callback. This is called by Tcl/Tk when the widget's + * contents have to be redrawn. Typically, we clear the color and depth + * buffers, render our objects, then swap the front/back color buffers. + */ +void +display_cb(Togl *togl) +{ + float aspect = (float) width / (float) height; + + check_error("begin display\n"); + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + /* Draw background image */ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + glDisable(GL_TEXTURE_2D); + glDisable(GL_DEPTH_TEST); + glBegin(GL_POLYGON); + glColor3f(0.0, 0.0, 0.3); + glVertex2f(-1.0, -1.0); + glColor3f(0.0, 0.0, 0.3); + glVertex2f(1.0, -1.0); + glColor3f(0.0, 0.0, 0.9); + glVertex2f(1.0, 1.0); + glColor3f(0.0, 0.0, 0.9); + glVertex2f(-1.0, 1.0); + glEnd(); + + /* draw textured object */ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glFrustum(-aspect, aspect, -1.0, 1.0, 2.0, 10.0); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glTranslatef(0.0, 0.0, -5.0); + glScalef(scale, scale, scale); + glRotatef(yrot, 0.0, 1.0, 0.0); + glRotatef(xrot, 1.0, 0.0, 0.0); + + glEnable(GL_DEPTH_TEST); + glEnable(GL_TEXTURE_2D); + glColor4ubv(polycolor); + + if (blend) { + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + } + + glBegin(GL_POLYGON); + glTexCoord2f(0.0, 0.0); + glVertex2f(-1.0, -1.0); + glTexCoord2f(coord_scale, 0.0); + glVertex2f(1.0, -1.0); + glTexCoord2f(coord_scale, coord_scale); + glVertex2f(1.0, 1.0); + glTexCoord2f(0.0, coord_scale); + glVertex2f(-1.0, 1.0); + glEnd(); + + glDisable(GL_BLEND); + + Togl_SwapBuffers(togl); +} + + +/* + * Called when a magnification filter radio button is pressed. + */ +int +magfilter_cb(Togl *togl, int argc, CONST84 char *argv[]) +{ + Tcl_Interp *interp = Togl_Interp(togl); + + if (strcmp(argv[2], "GL_NEAREST") == 0) { + magfilter = GL_NEAREST; + } else if (strcmp(argv[2], "GL_LINEAR") == 0) { + magfilter = GL_LINEAR; + } else { + Tcl_SetResult(interp, "unknown magnification filter type", TCL_STATIC); + return TCL_ERROR; + } + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magfilter); + Togl_PostRedisplay(togl); + + return TCL_OK; +} + + +/* + * Called when a minification filter radio button is pressed. + */ +int +minfilter_cb(Togl *togl, int argc, CONST84 char *argv[]) +{ + Tcl_Interp *interp = Togl_Interp(togl); + + if (strcmp(argv[2], "GL_NEAREST") == 0) { + minfilter = GL_NEAREST; + } else if (strcmp(argv[2], "GL_LINEAR") == 0) { + minfilter = GL_LINEAR; + } else if (strcmp(argv[2], "GL_NEAREST_MIPMAP_NEAREST") == 0) { + minfilter = GL_NEAREST_MIPMAP_NEAREST; + } else if (strcmp(argv[2], "GL_LINEAR_MIPMAP_NEAREST") == 0) { + minfilter = GL_LINEAR_MIPMAP_NEAREST; + } else if (strcmp(argv[2], "GL_NEAREST_MIPMAP_LINEAR") == 0) { + minfilter = GL_NEAREST_MIPMAP_LINEAR; + } else if (strcmp(argv[2], "GL_LINEAR_MIPMAP_LINEAR") == 0) { + minfilter = GL_LINEAR_MIPMAP_LINEAR; + } else { + Tcl_SetResult(interp, "unknown minification filter type", TCL_STATIC); + return TCL_ERROR; + } + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minfilter); + Togl_PostRedisplay(togl); + + return TCL_OK; +} + + +int +xrot_cb(Togl *togl, int argc, CONST84 char *argv[]) +{ + Tcl_Interp *interp = Togl_Interp(togl); + + /* error checking */ + if (argc != 3) { + Tcl_SetResult(interp, + "wrong # args: should be \"pathName setXrot ?angle?\"", + TCL_STATIC); + return TCL_ERROR; + } + + xrot = atof(argv[2]); + + Togl_PostRedisplay(togl); + + /* Let result string equal value */ + strcpy(interp->result, argv[2]); + return TCL_OK; +} + + +int +yrot_cb(Togl *togl, int argc, CONST84 char *argv[]) +{ + Tcl_Interp *interp = Togl_Interp(togl); + + /* error checking */ + if (argc != 3) { + Tcl_SetResult(interp, + "wrong # args: should be \"pathName setYrot ?angle?\"", + TCL_STATIC); + return TCL_ERROR; + } + + yrot = atof(argv[2]); + + Togl_PostRedisplay(togl); + + /* Let result string equal value */ + strcpy(interp->result, argv[2]); + return TCL_OK; +} + + +int +scale_cb(Togl *togl, int argc, CONST84 char *argv[]) +{ + Tcl_Interp *interp = Togl_Interp(togl); + + /* error checking */ + if (argc != 3) { + Tcl_SetResult(interp, + "wrong # args: should be \"pathName scale ?value?\"", + TCL_STATIC); + return TCL_ERROR; + } + + scale = atof(argv[2]); + + Togl_PostRedisplay(togl); + + /* Let result string equal value */ + strcpy(interp->result, argv[2]); + return TCL_OK; +} + + +/* + * Called when S texture coordinate wrapping is changed. + */ +int +swrap_cb(Togl *togl, int argc, CONST84 char *argv[]) +{ + Tcl_Interp *interp = Togl_Interp(togl); + + /* error checking */ + if (argc != 3) { + Tcl_SetResult(interp, + "wrong # args: should be \"pathName swrap ?mode?\"", + TCL_STATIC); + return TCL_ERROR; + } + + if (strcmp(argv[2], "GL_CLAMP") == 0) { + swrap = GL_CLAMP; + } else if (strcmp(argv[2], "GL_REPEAT") == 0) { + swrap = GL_REPEAT; + } else { + Tcl_SetResult(interp, "unknown wrap value", TCL_STATIC); + return TCL_ERROR; + } + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, swrap); + Togl_PostRedisplay(togl); + + /* Let result string equal value */ + strcpy(interp->result, argv[2]); + return TCL_OK; +} + + +/* + * Called when T texture coordinate wrapping is changed. + */ +int +twrap_cb(Togl *togl, int argc, CONST84 char *argv[]) +{ + Tcl_Interp *interp = Togl_Interp(togl); + + /* error checking */ + if (argc != 3) { + Tcl_SetResult(interp, + "wrong # args: should be \"pathName twrap ?mode?\"", + TCL_STATIC); + return TCL_ERROR; + } + + if (strcmp(argv[2], "GL_CLAMP") == 0) { + twrap = GL_CLAMP; + } else if (strcmp(argv[2], "GL_REPEAT") == 0) { + twrap = GL_REPEAT; + } else { + Tcl_SetResult(interp, "unknown wrap value", TCL_STATIC); + return TCL_ERROR; + } + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, twrap); + Togl_PostRedisplay(togl); + + /* Let result string equal value */ + strcpy(interp->result, argv[2]); + return TCL_OK; +} + + +/* + * Called when the texture environment mode is changed. + */ +int +envmode_cb(Togl *togl, int argc, CONST84 char *argv[]) +{ + Tcl_Interp *interp = Togl_Interp(togl); + + /* error checking */ + if (argc != 3) { + Tcl_SetResult(interp, + "wrong # args: should be \"pathName envmode ?mode?\"", + TCL_STATIC); + return TCL_ERROR; + } + + if (strcmp(argv[2], "GL_MODULATE") == 0) { + envmode = GL_MODULATE; + } else if (strcmp(argv[2], "GL_DECAL") == 0) { + envmode = GL_DECAL; + } else if (strcmp(argv[2], "GL_BLEND") == 0) { + envmode = GL_BLEND; + } else { + Tcl_SetResult(interp, "unknown texture env mode", TCL_STATIC); + return TCL_ERROR; + } + + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, envmode); + Togl_PostRedisplay(togl); + + /* Let result string equal value */ + strcpy(interp->result, argv[2]); + return TCL_OK; +} + + +/* + * Called when the polygon color is changed. + */ +int +polycolor_cb(Togl *togl, int argc, CONST84 char *argv[]) +{ + Tcl_Interp *interp = Togl_Interp(togl); + + /* error checking */ + if (argc != 5) { + Tcl_SetResult(interp, + "wrong # args: should be \"pathName polycolor ?r? ?g? ?b?\"", + TCL_STATIC); + return TCL_ERROR; + } + + polycolor[0] = atoi(argv[2]); + polycolor[1] = atoi(argv[3]); + polycolor[2] = atoi(argv[4]); + + Togl_PostRedisplay(togl); + + /* Let result string equal value */ + strcpy(interp->result, argv[2]); + return TCL_OK; +} + + +/* + * Called when the texture image is to be changed + */ +int +image_cb(Togl *togl, int argc, CONST84 char *argv[]) +{ + Tcl_Interp *interp = Togl_Interp(togl); + + /* error checking */ + if (argc != 3) { + Tcl_SetResult(interp, + "wrong # args: should be \"pathName image ?name?\"", + TCL_STATIC); + return TCL_ERROR; + } + + if (strcmp(argv[2], "CHECKER") == 0) { + texture_image(CHECKER); + } else if (strcmp(argv[2], "FACE") == 0) { + texture_image(FACE); + } else if (strcmp(argv[2], "TREE") == 0) { + texture_image(TREE); + } else { + Tcl_SetResult(interp, "unknown texture image", TCL_STATIC); + return TCL_ERROR; + } + + Togl_PostRedisplay(togl); + + /* Let result string equal value */ + strcpy(interp->result, argv[2]); + return TCL_OK; +} + + +/* + * Called when the texture coordinate scale is changed. + */ +int +coord_scale_cb(Togl *togl, int argc, CONST84 char *argv[]) +{ + Tcl_Interp *interp = Togl_Interp(togl); + float s; + + /* error checking */ + if (argc != 3) { + Tcl_SetResult(interp, + "wrong # args: should be \"pathName coord_scale ?scale?\"", + TCL_STATIC); + return TCL_ERROR; + } + + s = atof(argv[2]); + if (s > 0.0 && s < 10.0) { + coord_scale = s; + Togl_PostRedisplay(togl); + } + + /* Let result string equal value */ + strcpy(interp->result, argv[2]); + return TCL_OK; +} + + +TOGL_EXTERN int +Texture_Init(Tcl_Interp *interp) +{ + /* + * Initialize Tcl, Tk, and the Togl widget module. + */ +#ifdef USE_TCL_STUBS + if (Tcl_InitStubs(interp, "8.1", 0) == NULL) { + return TCL_ERROR; + } +#endif +#ifdef USE_TK_STUBS + if (Tk_InitStubs(interp, "8.1", 0) == NULL) { + return TCL_ERROR; + } +#endif + + if (Togl_Init(interp) == TCL_ERROR) { + return TCL_ERROR; + } + + /* + * Specify the C callback functions for widget creation, display, + * and reshape. + */ + Togl_CreateFunc(create_cb); + Togl_DisplayFunc(display_cb); + Togl_ReshapeFunc(reshape_cb); + + /* + * Make a new Togl widget command so the Tcl code can set a C variable. + */ + Togl_CreateCommand("min_filter", minfilter_cb); + Togl_CreateCommand("mag_filter", magfilter_cb); + Togl_CreateCommand("xrot", xrot_cb); + Togl_CreateCommand("yrot", yrot_cb); + Togl_CreateCommand("scale", scale_cb); + Togl_CreateCommand("swrap", swrap_cb); + Togl_CreateCommand("twrap", twrap_cb); + Togl_CreateCommand("envmode", envmode_cb); + Togl_CreateCommand("polycolor", polycolor_cb); + Togl_CreateCommand("image", image_cb); + Togl_CreateCommand("coord_scale", coord_scale_cb); + + /* + * Call Tcl_CreateCommand for application-specific commands, if + * they weren't already created by the init procedures called above. + */ + + return TCL_OK; +} diff --git a/ng/Togl-1.7/texture.tcl b/ng/Togl-1.7/texture.tcl new file mode 100644 index 00000000..6333c069 --- /dev/null +++ b/ng/Togl-1.7/texture.tcl @@ -0,0 +1,283 @@ +#!/bin/sh +# the next line restarts using wish \ +exec wish "$0" "$@" + +# $Id: texture.tcl,v 1.5 2001/12/20 13:59:31 beskow Exp $ + +# Togl - a Tk OpenGL widget +# Copyright (C) 1996 Brian Paul and Ben Bederson +# See the LICENSE file for copyright details. + + +# $Log: texture.tcl,v $ +# Revision 1.5 2001/12/20 13:59:31 beskow +# Improved error-handling in togl.c in case of window creation failure +# Added pkgIndex target to makefile +# Updated documentation to reflect stubs-interface (Togl.html + new README.stubs) +# Added tk8.4a3 headers +# Removed obsolete Tk internal headers +# +# Revision 1.4 2001/01/29 18:11:53 brianp +# Jonas Beskow's changes to use Tcl/Tk stub interface +# +# Revision 1.3 1998/01/24 14:05:50 brianp +# added quit button (Ben Bederson) +# +# Revision 1.2 1997/09/30 23:54:46 brianp +# new layout +# +# Revision 1.1 1996/10/23 23:18:36 brianp +# Initial revision +# + + +# Togl texture map demo + +load [file dirname [info script]]/texture[info sharedlibextension] + + +# Called magnification filter changes +proc new_magfilter {} { + global magfilter + .f1.view mag_filter $magfilter +} + + +# Called minification filter changes +proc new_minfilter {} { + global minfilter + .f1.view min_filter $minfilter +} + + +# Called when texture image radio button changes +proc new_image {} { + global teximage + .f1.view image $teximage +} + + +# Called when texture S wrap button changes +proc new_swrap {} { + global swrap + .f1.view swrap $swrap +} + + +# Called when texture T wrap button changes +proc new_twrap {} { + global twrap + .f1.view twrap $twrap +} + + +# Called when texture environment radio button selected +proc new_env {} { + global envmode + .f1.view envmode $envmode +} + + +# Called when polygon color sliders change +proc new_color { foo } { + global poly_red poly_green poly_blue + .f1.view polycolor $poly_red $poly_green $poly_blue +} + + +proc new_coord_scale { name element op } { + global coord_scale + .f1.view coord_scale $coord_scale +} + + + + +# Make the widgets +proc setup {} { + global magfilter + global minfilter + global teximage + global swrap + global twrap + global envmode + global poly_red + global poly_green + global poly_blue + global coord_scale + global startx starty # location of mouse when button pressed + global xangle yangle + global xangle0 yangle0 + global scale scale0 + + wm title . "Texture Map Options" + + ### Two frames: top half and bottom half + frame .f1 + frame .f2 + + ### The OpenGL window + togl .f1.view -width 250 -height 250 -rgba true -double true -depth true + + + ### Filter radio buttons + frame .f1.filter -relief ridge -borderwidth 3 + + frame .f1.filter.mag -relief ridge -borderwidth 2 + + label .f1.filter.mag.label -text "Magnification Filter" -anchor w + radiobutton .f1.filter.mag.nearest -text GL_NEAREST -anchor w -variable magfilter -value GL_NEAREST -command new_magfilter + radiobutton .f1.filter.mag.linear -text GL_LINEAR -anchor w -variable magfilter -value GL_LINEAR -command new_magfilter + + frame .f1.filter.min -relief ridge -borderwidth 2 + + label .f1.filter.min.label -text "Minification Filter" -anchor w + radiobutton .f1.filter.min.nearest -text GL_NEAREST -anchor w -variable minfilter -value GL_NEAREST -command new_minfilter + radiobutton .f1.filter.min.linear -text GL_LINEAR -anchor w -variable minfilter -value GL_LINEAR -command new_minfilter + radiobutton .f1.filter.min.nearest_mipmap_nearest -text GL_NEAREST_MIPMAP_NEAREST -anchor w -variable minfilter -value GL_NEAREST_MIPMAP_NEAREST -command new_minfilter + radiobutton .f1.filter.min.linear_mipmap_nearest -text GL_LINEAR_MIPMAP_NEAREST -anchor w -variable minfilter -value GL_LINEAR_MIPMAP_NEAREST -command new_minfilter + radiobutton .f1.filter.min.nearest_mipmap_linear -text GL_NEAREST_MIPMAP_LINEAR -anchor w -variable minfilter -value GL_NEAREST_MIPMAP_LINEAR -command new_minfilter + radiobutton .f1.filter.min.linear_mipmap_linear -text GL_LINEAR_MIPMAP_LINEAR -anchor w -variable minfilter -value GL_LINEAR_MIPMAP_LINEAR -command new_minfilter + + pack .f1.filter.mag -fill x + pack .f1.filter.mag.label -fill x + pack .f1.filter.mag.nearest -side top -fill x + pack .f1.filter.mag.linear -side top -fill x + + pack .f1.filter.min -fill both -expand true + pack .f1.filter.min.label -side top -fill x + pack .f1.filter.min.nearest -side top -fill x + pack .f1.filter.min.linear -side top -fill x + pack .f1.filter.min.nearest_mipmap_nearest -side top -fill x + pack .f1.filter.min.linear_mipmap_nearest -side top -fill x + pack .f1.filter.min.nearest_mipmap_linear -side top -fill x + pack .f1.filter.min.linear_mipmap_linear -side top -fill x + + + ### Texture coordinate scale and wrapping + frame .f2.coord -relief ridge -borderwidth 3 + frame .f2.coord.scale -relief ridge -borderwidth 2 + label .f2.coord.scale.label -text "Max Texture Coord" -anchor w + entry .f2.coord.scale.entry -textvariable coord_scale + trace variable coord_scale w new_coord_scale + + frame .f2.coord.s -relief ridge -borderwidth 2 + label .f2.coord.s.label -text "GL_TEXTURE_WRAP_S" -anchor w + radiobutton .f2.coord.s.repeat -text "GL_REPEAT" -anchor w -variable swrap -value GL_REPEAT -command new_swrap + radiobutton .f2.coord.s.clamp -text "GL_CLAMP" -anchor w -variable swrap -value GL_CLAMP -command new_swrap + + frame .f2.coord.t -relief ridge -borderwidth 2 + label .f2.coord.t.label -text "GL_TEXTURE_WRAP_T" -anchor w + radiobutton .f2.coord.t.repeat -text "GL_REPEAT" -anchor w -variable twrap -value GL_REPEAT -command new_twrap + radiobutton .f2.coord.t.clamp -text "GL_CLAMP" -anchor w -variable twrap -value GL_CLAMP -command new_twrap + + pack .f2.coord.scale -fill both -expand true + pack .f2.coord.scale.label -side top -fill x + pack .f2.coord.scale.entry -side top -fill x + + pack .f2.coord.s -fill x + pack .f2.coord.s.label -side top -fill x + pack .f2.coord.s.repeat -side top -fill x + pack .f2.coord.s.clamp -side top -fill x + + pack .f2.coord.t -fill x + pack .f2.coord.t.label -side top -fill x + pack .f2.coord.t.repeat -side top -fill x + pack .f2.coord.t.clamp -side top -fill x + + + ### Texture image radio buttons (just happens to fit into the coord frame) + frame .f2.env -relief ridge -borderwidth 3 + frame .f2.env.image -relief ridge -borderwidth 2 + label .f2.env.image.label -text "Texture Image" -anchor w + radiobutton .f2.env.image.checker -text "Checker" -anchor w -variable teximage -value CHECKER -command new_image + radiobutton .f2.env.image.tree -text "Tree" -anchor w -variable teximage -value TREE -command new_image + radiobutton .f2.env.image.face -text "Face" -anchor w -variable teximage -value FACE -command new_image + pack .f2.env.image -fill x + pack .f2.env.image.label -side top -fill x + pack .f2.env.image.checker -side top -fill x + pack .f2.env.image.tree -side top -fill x + pack .f2.env.image.face -side top -fill x + + + ### Texture Environment + label .f2.env.label -text "GL_TEXTURE_ENV_MODE" -anchor w + radiobutton .f2.env.modulate -text "GL_MODULATE" -anchor w -variable envmode -value GL_MODULATE -command new_env + radiobutton .f2.env.decal -text "GL_DECAL" -anchor w -variable envmode -value GL_DECAL -command new_env + radiobutton .f2.env.blend -text "GL_BLEND" -anchor w -variable envmode -value GL_BLEND -command new_env + pack .f2.env.label -fill x + pack .f2.env.modulate -side top -fill x + pack .f2.env.decal -side top -fill x + pack .f2.env.blend -side top -fill x + + ### Polygon color + frame .f2.color -relief ridge -borderwidth 3 + label .f2.color.label -text "Polygon color" -anchor w + scale .f2.color.red -label Red -from 0 -to 255 -orient horizontal -variable poly_red -command new_color + scale .f2.color.green -label Green -from 0 -to 255 -orient horizontal -variable poly_green -command new_color + scale .f2.color.blue -label Blue -from 0 -to 255 -orient horizontal -variable poly_blue -command new_color + pack .f2.color.label -fill x + pack .f2.color.red -side top -fill x + pack .f2.color.green -side top -fill x + pack .f2.color.blue -side top -fill x + + + ### Main widgets + pack .f1.view -side left -fill both -expand true + pack .f1.filter -side left -fill y + pack .f1 -side top -fill both -expand true + + pack .f2.coord .f2.env -side left -fill both + pack .f2.color -fill x + pack .f2 -side top -fill x + + button .btn -text Quit -command exit + pack .btn -expand true -fill both + + bind .f1.view { + set startx %x + set starty %y + set xangle0 $xangle + set yangle0 $yangle + } + + bind .f1.view { + set xangle [expr $xangle0 + (%x - $startx) / 3.0 ] + set yangle [expr $yangle0 + (%y - $starty) / 3.0 ] + .f1.view yrot $xangle + .f1.view xrot $yangle + } + + bind .f1.view { + set startx %x + set starty %y + set scale0 $scale + } + + bind .f1.view { + set q [ expr ($starty - %y) / 400.0 ] + set scale [expr $scale0 * exp($q)] + .f1.view scale $scale + } + + # set default values: + set minfilter GL_NEAREST_MIPMAP_LINEAR + set magfilter GL_LINEAR + set swrap GL_REPEAT + set twrap GL_REPEAT + set envmode GL_MODULATE + set teximage CHECKER + set poly_red 255 + set poly_green 255 + set poly_blue 255 + set coord_scale 1.0 + + set xangle 0.0 + set yangle 0.0 + set scale 1.0 +} + + +# Execution starts here! +setup + diff --git a/ng/Togl-1.7/tkMacOSX.h b/ng/Togl-1.7/tkMacOSX.h new file mode 100644 index 00000000..25e677e2 --- /dev/null +++ b/ng/Togl-1.7/tkMacOSX.h @@ -0,0 +1,35 @@ +/* This file isn't installed by default */ +/* + * tkMacOSXInt.h -- + * + * Declarations of Macintosh specific exported variables and procedures. + * + * Copyright (c) 1995-1997 Sun Microsystems, Inc. + * Copyright 2001, Apple Computer, Inc. + * + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * + * RCS: @(#) $Id: tkMacOSX.h,v 1.1 2005/04/22 02:00:07 gregcouch Exp $ + */ + +#ifndef _TKMAC +#define _TKMAC + +#include +#include "tkInt.h" + +/* + * Structures and function types for handling Netscape-type in process + * embedding where Tk does not control the top-level + */ + +typedef int (Tk_MacOSXEmbedRegisterWinProc) (int winID, Tk_Window window); +typedef GWorldPtr (Tk_MacOSXEmbedGetGrafPortProc) (Tk_Window window); +typedef int (Tk_MacOSXEmbedMakeContainerExistProc) (Tk_Window window); +typedef void (Tk_MacOSXEmbedGetClipProc) (Tk_Window window, RgnHandle rgn); +typedef void (Tk_MacOSXEmbedGetOffsetInParentProc) (Tk_Window window, Point *ulCorner); + +#include "tkPlatDecls.h" + +#endif /* _TKMAC */ diff --git a/ng/Togl-1.7/togl.c b/ng/Togl-1.7/togl.c new file mode 100644 index 00000000..098f917a --- /dev/null +++ b/ng/Togl-1.7/togl.c @@ -0,0 +1,4033 @@ +/* $Id: togl.c,v 1.73 2005/10/26 07:40:22 gregcouch Exp $ */ + +/* vi:set sw=4: */ + +/* + * Togl - a Tk OpenGL widget + * + * Copyright (C) 1996-2002 Brian Paul and Ben Bederson + * See the LICENSE file for copyright details. + */ + +/* + * Currently we support X11, Win32 and Macintosh only + */ + +#include "togl.h" + +/* Use TCL_STUPID to cast (const char *) to (char *) where the Tcl function + * prototype argument should really be const */ +#define TCL_STUPID (char *) + +/* Use WIDGREC to cast widgRec arguments */ +#define WIDGREC (char *) + +/*** Windows headers ***/ +#if defined(TOGL_WGL) +# define WIN32_LEAN_AND_MEAN +# include +# undef WIN32_LEAN_AND_MEAN +# include + +/*** X Window System headers ***/ +#elif defined(TOGL_X11) +# include +# include +# include /* for XA_RGB_DEFAULT_MAP atom */ +# if defined(__vms) +# include /* for XmuLookupStandardColormap */ +# else +# include /* for XmuLookupStandardColormap */ +# endif +# include + +/*** Mac headers ***/ +#elif defined(TOGL_AGL_CLASSIC) +# include +# include +# include +# include + +#elif defined(TOGL_AGL) +# define Cursor QDCursor +# include +# undef Cursor +# include "tkMacOSX.h" +# include /* usa MacDrawable */ +# include + +#else /* make sure only one platform defined */ +# error Unsupported platform, or confused platform defines... +#endif + +/*** Standard C headers ***/ +#include +#include +#include + +#ifdef TOGL_WGL +# include +#endif + +#if TK_MAJOR_VERSION < 8 +# error Sorry Togl requires Tcl/Tk ver 8.0 or higher. +#endif + +#if defined(TOGL_AGL_CLASSIC) +# if TK_MAJOR_VERSION < 8 || (TK_MAJOR_VERSION == 8 && TK_MINOR_VERSION < 3) +# error Sorry Mac classic version requires Tcl/Tk ver 8.3.0 or higher. +# endif +#endif /* TOGL_AGL_CLASSIC */ + +#if defined(TOGL_AGL) +# if TK_MAJOR_VERSION < 8 || (TK_MAJOR_VERSION == 8 && TK_MINOR_VERSION < 4) +# error Sorry Mac Aqua version requires Tcl/Tk ver 8.4.0 or higher. +# endif +#endif /* TOGL_AGL */ + +/* workaround for bug #123153 in tcl ver8.4a2 (tcl.h) */ +#if defined(Tcl_InitHashTable) && defined(USE_TCL_STUBS) +# undef Tcl_InitHashTable +# define Tcl_InitHashTable (tclStubsPtr->tcl_InitHashTable) +#endif +#if TK_MAJOR_VERSION > 8 || (TK_MAJOR_VERSION == 8 && TK_MINOR_VERSION >= 4) +# define HAVE_TK_SETCLASSPROCS +/* pointer to Tk_SetClassProcs function in the stub table */ + +static void (*SetClassProcsPtr) + _ANSI_ARGS_((Tk_Window, Tk_ClassProcs *, ClientData)); +#endif + +/* + * Copy of TkClassProcs declarations form tkInt.h + * (this is needed for Tcl ver =< 8.4a3) + */ + +typedef Window (TkClassCreateProc) _ANSI_ARGS_((Tk_Window tkwin, + Window parent, ClientData instanceData)); +typedef void (TkClassGeometryProc) _ANSI_ARGS_((ClientData instanceData)); +typedef void (TkClassModalProc) _ANSI_ARGS_((Tk_Window tkwin, + XEvent *eventPtr)); +typedef struct TkClassProcs +{ + TkClassCreateProc *createProc; + TkClassGeometryProc *geometryProc; + TkClassModalProc *modalProc; +} TkClassProcs; + + +/* Defaults */ +#define DEFAULT_WIDTH "400" +#define DEFAULT_HEIGHT "400" +#define DEFAULT_IDENT "" +#define DEFAULT_FONTNAME "fixed" +#define DEFAULT_TIME "1" + + +#ifdef TOGL_WGL +/* Maximum size of a logical palette corresponding to a colormap in color index + * mode. */ +# define MAX_CI_COLORMAP_SIZE 4096 + +# if TOGL_USE_FONTS != 1 +/* + * copy of TkWinColormap from tkWinInt.h + */ + +typedef struct +{ + HPALETTE palette; /* Palette handle used when drawing. */ + UINT size; /* Number of entries in the palette. */ + int stale; /* 1 if palette needs to be realized, otherwise + * 0. If the palette is stale, then an idle + * handler is scheduled to realize the palette. */ + Tcl_HashTable refCounts; /* Hash table of palette entry reference counts + * indexed by pixel value. */ +} TkWinColormap; +# else +# include "tkWinInt.h" +# endif + +static LRESULT(CALLBACK *tkWinChildProc) (HWND hwnd, UINT message, + WPARAM wParam, LPARAM lParam) = NULL; + +# define TK_WIN_CHILD_CLASS_NAME "TkChild" + +#endif /* TOGL_WGL */ + + +#define MAX(a,b) (((a)>(b))?(a):(b)) + +#define TCL_ERR(interp, string) \ + do { \ + Tcl_ResetResult(interp); \ + Tcl_AppendResult(interp, string, NULL); \ + return TCL_ERROR; \ + } while (0) + +/* The constant DUMMY_WINDOW is used to signal window creation failure from the + * Togl_CreateWindow() */ +#define DUMMY_WINDOW ((Window) -1) + +#define ALL_EVENTS_MASK \ + (KeyPressMask | \ + KeyReleaseMask | \ + ButtonPressMask | \ + ButtonReleaseMask | \ + EnterWindowMask | \ + LeaveWindowMask | \ + PointerMotionMask | \ + ExposureMask | \ + VisibilityChangeMask | \ + FocusChangeMask | \ + PropertyChangeMask | \ + ColormapChangeMask) + +struct Togl +{ + Togl *Next; /* next in linked list */ + +#if defined(TOGL_WGL) + HDC tglGLHdc; /* Device context of device that OpenGL calls + * will be drawn on */ + HGLRC tglGLHglrc; /* OpenGL rendering context to be made current */ + int CiColormapSize; /* (Maximum) size of colormap in color index + * mode */ +#elif defined(TOGL_X11) + GLXContext GlCtx; /* Normal planes GLX context */ +#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL) + AGLContext aglCtx; +#endif /* TOGL_WGL */ + + Display *display; /* X's token for the window's display. */ + Tk_Window TkWin; /* Tk window structure */ + Tcl_Interp *Interp; /* Tcl interpreter */ + Tcl_Command widgetCmd; /* Token for togl's widget command */ +#ifndef NO_TK_CURSOR + Tk_Cursor Cursor; /* The widget's cursor */ +#endif + int Width, Height; /* Dimensions of window */ + int SetGrid; /* positive is grid size for window manager */ + int TimerInterval; /* Time interval for timer in milliseconds */ +#if (TCL_MAJOR_VERSION * 100 + TCL_MINOR_VERSION) >= 705 + Tcl_TimerToken timerHandler; /* Token for togl's timer handler */ +#else + Tk_TimerToken timerHandler; /* Token for togl's timer handler */ +#endif + Bool RgbaFlag; /* configuration flags (ala GLX parameters) */ + int RgbaRed; + int RgbaGreen; + int RgbaBlue; + Bool DoubleFlag; + Bool DepthFlag; + int DepthSize; + Bool AccumFlag; + int AccumRed; + int AccumGreen; + int AccumBlue; + int AccumAlpha; + Bool AlphaFlag; + int AlphaSize; + Bool StencilFlag; + int StencilSize; + Bool PrivateCmapFlag; + Bool OverlayFlag; + Bool StereoFlag; +#ifdef __sgi + Bool OldStereoFlag; +#endif + int AuxNumber; + Bool Indirect; + int PixelFormat; + const char *ShareList; /* name (ident) of Togl to share dlists with */ + const char *ShareContext; /* name (ident) to share OpenGL context with */ + + const char *Ident; /* User's identification string */ + ClientData Client_Data; /* Pointer to user data */ + + Bool UpdatePending; /* Should normal planes be redrawn? */ + + Togl_Callback *CreateProc; /* Callback when widget is created */ + Togl_Callback *DisplayProc; /* Callback when widget is rendered */ + Togl_Callback *ReshapeProc; /* Callback when window size changes */ + Togl_Callback *DestroyProc; /* Callback when widget is destroyed */ + Togl_Callback *TimerProc; /* Callback when widget is idle */ + + /* Overlay stuff */ +#if defined(TOGL_X11) + GLXContext OverlayCtx; /* Overlay planes OpenGL context */ +#elif defined(TOGL_WGL) + HGLRC tglGLOverlayHglrc; +#endif /* TOGL_X11 */ + + Window OverlayWindow; /* The overlay window, or 0 */ + Togl_Callback *OverlayDisplayProc; /* Overlay redraw proc */ + Bool OverlayUpdatePending; /* Should overlay be redrawn? */ + Colormap OverlayCmap; /* colormap for overlay is created */ + int OverlayTransparentPixel; /* transparent pixel */ + Bool OverlayIsMapped; + + /* for DumpToEpsFile: Added by Miguel A. de Riera Pasenau 10.01.1997 */ + XVisualInfo *VisInfo; /* Visual info of the current */ + /* context needed for DumpToEpsFile */ + GLfloat *EpsRedMap; /* Index2RGB Maps for Color index modes */ + GLfloat *EpsGreenMap; + GLfloat *EpsBlueMap; + GLint EpsMapSize; /* = Number of indices in our Togl */ +}; + + +/* NTNTNT need to change to handle Windows Data Types */ +/* + * Prototypes for functions local to this file + */ +static int Togl_Cmd(ClientData clientData, Tcl_Interp *interp, + int argc, CONST84 char **argv); +static void Togl_EventProc(ClientData clientData, XEvent *eventPtr); +static Window Togl_CreateWindow(Tk_Window, Window, ClientData); +static void Togl_WorldChanged(ClientData); + +#ifdef MESA_COLOR_HACK +static int get_free_color_cells(Display *display, int screen, + Colormap colormap); +static void free_default_color_cells(Display *display, Colormap colormap); +#endif +static void ToglCmdDeletedProc(ClientData); + + + +#if defined(__sgi) +/* SGI-only stereo */ +static void oldStereoMakeCurrent(Display *dpy, Window win, GLXContext ctx); +static void oldStereoInit(Togl *togl, int stereoEnabled); +#endif + +#if defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL) +static void SetMacBufRect(Togl *togl); +#endif + + +/* + * Setup Togl widget configuration options: + */ + +static Tk_ConfigSpec configSpecs[] = { + {TK_CONFIG_PIXELS, TCL_STUPID "-height", "height", "Height", + DEFAULT_HEIGHT, Tk_Offset(Togl, Height), 0, NULL}, + + {TK_CONFIG_PIXELS, TCL_STUPID "-width", "width", "Width", + DEFAULT_WIDTH, Tk_Offset(Togl, Width), 0, NULL}, + + {TK_CONFIG_INT, TCL_STUPID "-setgrid", "setGrid", "SetGrid", + "0", Tk_Offset(Togl, SetGrid), 0}, + + {TK_CONFIG_BOOLEAN, TCL_STUPID "-rgba", "rgba", "Rgba", + "true", Tk_Offset(Togl, RgbaFlag), 0, NULL}, + + {TK_CONFIG_INT, TCL_STUPID "-redsize", "redsize", "RedSize", + "1", Tk_Offset(Togl, RgbaRed), 0, NULL}, + + {TK_CONFIG_INT, TCL_STUPID "-greensize", "greensize", "GreenSize", + "1", Tk_Offset(Togl, RgbaGreen), 0, NULL}, + + {TK_CONFIG_INT, TCL_STUPID "-bluesize", "bluesize", "BlueSize", + "1", Tk_Offset(Togl, RgbaBlue), 0, NULL}, + + {TK_CONFIG_BOOLEAN, TCL_STUPID "-double", "double", "Double", + "false", Tk_Offset(Togl, DoubleFlag), 0, NULL}, + + {TK_CONFIG_BOOLEAN, TCL_STUPID "-depth", "depth", "Depth", + "false", Tk_Offset(Togl, DepthFlag), 0, NULL}, + + {TK_CONFIG_INT, TCL_STUPID "-depthsize", "depthsize", "DepthSize", + "1", Tk_Offset(Togl, DepthSize), 0, NULL}, + + {TK_CONFIG_BOOLEAN, TCL_STUPID "-accum", "accum", "Accum", + "false", Tk_Offset(Togl, AccumFlag), 0, NULL}, + + {TK_CONFIG_INT, TCL_STUPID "-accumredsize", "accumredsize", "AccumRedSize", + "1", Tk_Offset(Togl, AccumRed), 0, NULL}, + + {TK_CONFIG_INT, TCL_STUPID "-accumgreensize", "accumgreensize", + "AccumGreenSize", + "1", Tk_Offset(Togl, AccumGreen), 0, NULL}, + + {TK_CONFIG_INT, TCL_STUPID "-accumbluesize", "accumbluesize", + "AccumBlueSize", + "1", Tk_Offset(Togl, AccumBlue), 0, NULL}, + + {TK_CONFIG_INT, TCL_STUPID "-accumalphasize", "accumalphasize", + "AccumAlphaSize", + "1", Tk_Offset(Togl, AccumAlpha), 0, NULL}, + + {TK_CONFIG_BOOLEAN, TCL_STUPID "-alpha", "alpha", "Alpha", + "false", Tk_Offset(Togl, AlphaFlag), 0, NULL}, + + {TK_CONFIG_INT, TCL_STUPID "-alphasize", "alphasize", "AlphaSize", + "1", Tk_Offset(Togl, AlphaSize), 0, NULL}, + + {TK_CONFIG_BOOLEAN, TCL_STUPID "-stencil", "stencil", "Stencil", + "false", Tk_Offset(Togl, StencilFlag), 0, NULL}, + + {TK_CONFIG_INT, TCL_STUPID "-stencilsize", "stencilsize", "StencilSize", + "1", Tk_Offset(Togl, StencilSize), 0, NULL}, + + {TK_CONFIG_INT, TCL_STUPID "-auxbuffers", "auxbuffers", "AuxBuffers", + "0", Tk_Offset(Togl, AuxNumber), 0, NULL}, + + {TK_CONFIG_BOOLEAN, TCL_STUPID "-privatecmap", "privateCmap", "PrivateCmap", + "false", Tk_Offset(Togl, PrivateCmapFlag), 0, NULL}, + + {TK_CONFIG_BOOLEAN, TCL_STUPID "-overlay", "overlay", "Overlay", + "false", Tk_Offset(Togl, OverlayFlag), 0, NULL}, + + {TK_CONFIG_BOOLEAN, TCL_STUPID "-stereo", "stereo", "Stereo", + "false", Tk_Offset(Togl, StereoFlag), 0, NULL}, + +#ifdef __sgi + {TK_CONFIG_BOOLEAN, TCL_STUPID "-oldstereo", "oldstereo", "OldStereo", + "false", Tk_Offset(Togl, OldStereoFlag), 0, NULL}, +#endif + +#ifndef NO_TK_CURSOR + {TK_CONFIG_ACTIVE_CURSOR, TCL_STUPID "-cursor", "cursor", "Cursor", + "", Tk_Offset(Togl, Cursor), TK_CONFIG_NULL_OK}, +#endif + + {TK_CONFIG_INT, TCL_STUPID "-time", "time", "Time", + DEFAULT_TIME, Tk_Offset(Togl, TimerInterval), 0, NULL}, + + {TK_CONFIG_STRING, TCL_STUPID "-sharelist", "sharelist", "ShareList", + NULL, Tk_Offset(Togl, ShareList), 0, NULL}, + + {TK_CONFIG_STRING, TCL_STUPID "-sharecontext", "sharecontext", + "ShareContext", NULL, Tk_Offset(Togl, ShareContext), 0, NULL}, + + {TK_CONFIG_STRING, TCL_STUPID "-ident", "ident", "Ident", + DEFAULT_IDENT, Tk_Offset(Togl, Ident), 0, NULL}, + + {TK_CONFIG_BOOLEAN, TCL_STUPID "-indirect", "indirect", "Indirect", + "false", Tk_Offset(Togl, Indirect), 0, NULL}, + + {TK_CONFIG_INT, TCL_STUPID "-pixelformat", "pixelFormat", "PixelFormat", + "0", Tk_Offset(Togl, PixelFormat), 0, NULL}, + + {TK_CONFIG_END, NULL, NULL, NULL, NULL, 0, 0, NULL} +}; + + +/* + * Default callback pointers. When a new Togl widget is created it + * will be assigned these initial callbacks. + */ +static Togl_Callback *DefaultCreateProc = NULL; +static Togl_Callback *DefaultDisplayProc = NULL; +static Togl_Callback *DefaultReshapeProc = NULL; +static Togl_Callback *DefaultDestroyProc = NULL; +static Togl_Callback *DefaultOverlayDisplayProc = NULL; +static Togl_Callback *DefaultTimerProc = NULL; +static ClientData DefaultClientData = NULL; +static Tcl_HashTable CommandTable; + +/* + * Head of linked list of all Togl widgets + */ +static Togl *ToglHead = NULL; + +/* + * Add given togl widget to linked list. + */ +static void +AddToList(Togl *t) +{ + t->Next = ToglHead; + ToglHead = t; +} + +/* + * Remove given togl widget from linked list. + */ +static void +RemoveFromList(Togl *t) +{ + Togl *prev = NULL; + Togl *pos = ToglHead; + + while (pos) { + if (pos == t) { + if (prev) { + prev->Next = pos->Next; + } else { + ToglHead = pos->Next; + } + return; + } + prev = pos; + pos = pos->Next; + } +} + +/* + * Return pointer to togl widget given a user identifier string. + */ +static Togl * +FindTogl(const char *ident) +{ + Togl *t = ToglHead; + + while (t) { + if (strcmp(t->Ident, ident) == 0) + return t; + t = t->Next; + } + return NULL; +} + + +#if defined(TOGL_X11) +/* + * Return pointer to another togl widget with same OpenGL context. + */ +static Togl * +FindToglWithSameContext(Togl *togl) +{ + Togl *t; + + for (t = ToglHead; t != NULL; t = t->Next) { + if (t == togl) + continue; +# if defined(TOGL_WGL) + if (t->tglGLHglrc == togl->tglGLHglrc) +# elif defined(TOGL_X11) + if (t->GlCtx == togl->GlCtx) +# elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL) + if (t->aglCtx == togl->aglCtx) +# endif + return t; + } + return NULL; +} +#endif + +#ifdef USE_OVERLAY +/* + * Return pointer to another togl widget with same OpenGL overlay context. + */ +static Togl * +FindToglWithSameOverlayContext(Togl *togl) +{ + Togl *t; + + for (t = ToglHead; t != NULL; t = t->Next) { + if (t == togl) + continue; +# if defined(TOGL_X11) + if (t->OverlayCtx == togl->OverlayCtx) +# elif defined(TOGL_WGL) + if (t->tglGLOverlayHglrc == togl->tglGLOverlayHglrc) +# endif + return t; + } + return NULL; +} +#endif + +#if defined(TOGL_X11) +/* + * Return an X colormap to use for OpenGL RGB-mode rendering. + * Input: dpy - the X display + * scrnum - the X screen number + * visinfo - the XVisualInfo as returned by glXChooseVisual() + * Return: an X Colormap or 0 if there's a _serious_ error. + */ +static Colormap +get_rgb_colormap(Display *dpy, + int scrnum, const XVisualInfo *visinfo, Tk_Window tkwin) +{ + Atom hp_cr_maps; + Status status; + int numCmaps; + int i; + XStandardColormap *standardCmaps; + Window root = XRootWindow(dpy, scrnum); + Bool using_mesa; + + /* + * First check if visinfo's visual matches the default/root visual. + */ + if (visinfo->visual == Tk_Visual(tkwin)) { + /* use the default/root colormap */ + Colormap cmap; + + cmap = Tk_Colormap(tkwin); +# ifdef MESA_COLOR_HACK + (void) get_free_color_cells(dpy, scrnum, cmap); +# endif + return cmap; + } + + /* + * Check if we're using Mesa. + */ + if (strstr(glXQueryServerString(dpy, scrnum, GLX_VERSION), "Mesa")) { + using_mesa = True; + } else { + using_mesa = False; + } + + /* + * Next, if we're using Mesa and displaying on an HP with the "Color + * Recovery" feature and the visual is 8-bit TrueColor, search for a + * special colormap initialized for dithering. Mesa will know how to + * dither using this colormap. + */ + if (using_mesa) { + hp_cr_maps = XInternAtom(dpy, "_HP_RGB_SMOOTH_MAP_LIST", True); + if (hp_cr_maps +# ifdef __cplusplus + && visinfo->visual->c_class == TrueColor +# else + && visinfo->visual->class == TrueColor +# endif + && visinfo->depth == 8) { + status = XGetRGBColormaps(dpy, root, &standardCmaps, + &numCmaps, hp_cr_maps); + if (status) { + for (i = 0; i < numCmaps; i++) { + if (standardCmaps[i].visualid == visinfo->visual->visualid) { + Colormap cmap = standardCmaps[i].colormap; + + (void) XFree(standardCmaps); + return cmap; + } + } + (void) XFree(standardCmaps); + } + } + } + + /* + * Next, try to find a standard X colormap. + */ +# if !HP && !SUN +# ifndef SOLARIS_BUG + status = XmuLookupStandardColormap(dpy, visinfo->screen, + visinfo->visualid, visinfo->depth, XA_RGB_DEFAULT_MAP, + /* replace */ False, /* retain */ True); + if (status == 1) { + status = XGetRGBColormaps(dpy, root, &standardCmaps, + &numCmaps, XA_RGB_DEFAULT_MAP); + if (status == 1) { + for (i = 0; i < numCmaps; i++) { + if (standardCmaps[i].visualid == visinfo->visualid) { + Colormap cmap = standardCmaps[i].colormap; + + (void) XFree(standardCmaps); + return cmap; + } + } + (void) XFree(standardCmaps); + } + } +# endif +# endif + + /* + * If we get here, give up and just allocate a new colormap. + */ + return XCreateColormap(dpy, root, visinfo->visual, AllocNone); +} +#elif defined(TOGL_WGL) + +/* Code to create RGB palette is taken from the GENGL sample program of Win32 + * SDK */ + +static unsigned char threeto8[8] = { + 0, 0111 >> 1, 0222 >> 1, 0333 >> 1, 0444 >> 1, 0555 >> 1, 0666 >> 1, 0377 +}; + +static unsigned char twoto8[4] = { + 0, 0x55, 0xaa, 0xff +}; + +static unsigned char oneto8[2] = { + 0, 255 +}; + +static int defaultOverride[13] = { + 0, 3, 24, 27, 64, 67, 88, 173, 181, 236, 247, 164, 91 +}; + +static PALETTEENTRY defaultPalEntry[20] = { + {0, 0, 0, 0}, + {0x80, 0, 0, 0}, + {0, 0x80, 0, 0}, + {0x80, 0x80, 0, 0}, + {0, 0, 0x80, 0}, + {0x80, 0, 0x80, 0}, + {0, 0x80, 0x80, 0}, + {0xC0, 0xC0, 0xC0, 0}, + + {192, 220, 192, 0}, + {166, 202, 240, 0}, + {255, 251, 240, 0}, + {160, 160, 164, 0}, + + {0x80, 0x80, 0x80, 0}, + {0xFF, 0, 0, 0}, + {0, 0xFF, 0, 0}, + {0xFF, 0xFF, 0, 0}, + {0, 0, 0xFF, 0}, + {0xFF, 0, 0xFF, 0}, + {0, 0xFF, 0xFF, 0}, + {0xFF, 0xFF, 0xFF, 0} +}; + +static unsigned char +ComponentFromIndex(int i, UINT nbits, UINT shift) +{ + unsigned char val; + + val = (unsigned char) (i >> shift); + switch (nbits) { + + case 1: + val &= 0x1; + return oneto8[val]; + + case 2: + val &= 0x3; + return twoto8[val]; + + case 3: + val &= 0x7; + return threeto8[val]; + + default: + return 0; + } +} + +static Colormap +Win32CreateRgbColormap(PIXELFORMATDESCRIPTOR pfd) +{ + TkWinColormap *cmap = (TkWinColormap *) ckalloc(sizeof (TkWinColormap)); + LOGPALETTE *pPal; + int n, i; + + n = 1 << pfd.cColorBits; + pPal = (PLOGPALETTE) LocalAlloc(LMEM_FIXED, sizeof (LOGPALETTE) + + n * sizeof (PALETTEENTRY)); + pPal->palVersion = 0x300; + pPal->palNumEntries = n; + for (i = 0; i < n; i++) { + pPal->palPalEntry[i].peRed = + ComponentFromIndex(i, pfd.cRedBits, pfd.cRedShift); + pPal->palPalEntry[i].peGreen = + ComponentFromIndex(i, pfd.cGreenBits, pfd.cGreenShift); + pPal->palPalEntry[i].peBlue = + ComponentFromIndex(i, pfd.cBlueBits, pfd.cBlueShift); + pPal->palPalEntry[i].peFlags = 0; + } + + /* fix up the palette to include the default GDI palette */ + if ((pfd.cColorBits == 8) + && (pfd.cRedBits == 3) && (pfd.cRedShift == 0) + && (pfd.cGreenBits == 3) && (pfd.cGreenShift == 3) + && (pfd.cBlueBits == 2) && (pfd.cBlueShift == 6)) { + for (i = 1; i <= 12; i++) + pPal->palPalEntry[defaultOverride[i]] = defaultPalEntry[i]; + } + + cmap->palette = CreatePalette(pPal); + LocalFree(pPal); + cmap->size = n; + cmap->stale = 0; + + /* Since this is a private colormap of a fix size, we do not need a valid + * hash table, but a dummy one */ + + Tcl_InitHashTable(&cmap->refCounts, TCL_ONE_WORD_KEYS); + return (Colormap) cmap; +} + +static Colormap +Win32CreateCiColormap(Togl *togl) +{ + /* Create a colormap with size of togl->CiColormapSize and set all entries + * to black */ + + LOGPALETTE logPalette; + TkWinColormap *cmap = (TkWinColormap *) ckalloc(sizeof (TkWinColormap)); + + logPalette.palVersion = 0x300; + logPalette.palNumEntries = 1; + logPalette.palPalEntry[0].peRed = 0; + logPalette.palPalEntry[0].peGreen = 0; + logPalette.palPalEntry[0].peBlue = 0; + logPalette.palPalEntry[0].peFlags = 0; + + cmap->palette = CreatePalette(&logPalette); + cmap->size = togl->CiColormapSize; + ResizePalette(cmap->palette, cmap->size); /* sets new entries to black */ + cmap->stale = 0; + + /* Since this is a private colormap of a fix size, we do not need a valid + * hash table, but a dummy one */ + + Tcl_InitHashTable(&cmap->refCounts, TCL_ONE_WORD_KEYS); + return (Colormap) cmap; +} +#endif /* TOGL_X11 */ + + + +/* + * Togl_Init + * + * Called upon system startup to create Togl command. + */ +int +Togl_Init(Tcl_Interp *interp) +{ + int major, minor, patchLevel, releaseType; + +#ifdef USE_TCL_STUBS + if (Tcl_InitStubs(interp, "8.1", 0) == NULL) { + return TCL_ERROR; + } +#endif +#ifdef USE_TK_STUBS + if (Tk_InitStubs(interp, TCL_STUPID "8.1", 0) == NULL) { + return TCL_ERROR; + } +#endif + + /* Skip all this on Tcl/Tk 8.0 or older. Seems to work */ +#if TCL_MAJOR_VERSION * 100 + TCL_MINOR_VERSION > 800 + Tcl_GetVersion(&major, &minor, &patchLevel, &releaseType); + +# ifdef HAVE_TK_SETCLASSPROCS + if (major > 8 + || (major == 8 + && (minor > 4 + || (minor == 4 && (releaseType > 0 + || patchLevel >= 2))))) { +# ifdef USE_TK_STUBS + SetClassProcsPtr = tkStubsPtr->tk_SetClassProcs; +# else + SetClassProcsPtr = Tk_SetClassProcs; +# endif + } else { + SetClassProcsPtr = NULL; + } +# else + if (major > 8 + || (major == 8 + && (minor > 4 + || (minor == 4 && (releaseType > 0 + || patchLevel >= 2))))) { + TCL_ERR(interp, + "Sorry, this instance of Togl was not compiled to work with Tcl/Tk 8.4a2 or higher."); + } +# endif + +#endif + + if (Tcl_PkgProvide(interp, "Togl", TOGL_VERSION) != TCL_OK) { + return TCL_ERROR; + } + + if (Tcl_CreateCommand(interp, "togl", Togl_Cmd, + (ClientData) Tk_MainWindow(interp), NULL) == NULL) + return TCL_ERROR; + + Tcl_InitHashTable(&CommandTable, TCL_STRING_KEYS); + + return TCL_OK; +} + + +/* + * Register a C function to be called when an Togl widget is realized. + */ +void +Togl_CreateFunc(Togl_Callback *proc) +{ + DefaultCreateProc = proc; +} + + +/* + * Register a C function to be called when an Togl widget must be redrawn. + */ +void +Togl_DisplayFunc(Togl_Callback *proc) +{ + DefaultDisplayProc = proc; +} + + +/* + * Register a C function to be called when an Togl widget is resized. + */ +void +Togl_ReshapeFunc(Togl_Callback *proc) +{ + DefaultReshapeProc = proc; +} + + +/* + * Register a C function to be called when an Togl widget is destroyed. + */ +void +Togl_DestroyFunc(Togl_Callback *proc) +{ + DefaultDestroyProc = proc; +} + + +/* + * Register a C function to be called from TimerEventHandler. + */ +void +Togl_TimerFunc(Togl_Callback *proc) +{ + DefaultTimerProc = proc; +} + + +/* + * Reset default callback pointers to NULL. + */ +void +Togl_ResetDefaultCallbacks(void) +{ + DefaultCreateProc = NULL; + DefaultDisplayProc = NULL; + DefaultReshapeProc = NULL; + DefaultDestroyProc = NULL; + DefaultOverlayDisplayProc = NULL; + DefaultTimerProc = NULL; + DefaultClientData = NULL; +} + + +/* + * Chnage the create callback for a specific Togl widget. + */ +void +Togl_SetCreateFunc(Togl *togl, Togl_Callback *proc) +{ + togl->CreateProc = proc; +} + + +/* + * Change the display/redraw callback for a specific Togl widget. + */ +void +Togl_SetDisplayFunc(Togl *togl, Togl_Callback *proc) +{ + togl->DisplayProc = proc; +} + + +/* + * Change the reshape callback for a specific Togl widget. + */ +void +Togl_SetReshapeFunc(Togl *togl, Togl_Callback *proc) +{ + togl->ReshapeProc = proc; +} + + +/* + * Change the destroy callback for a specific Togl widget. + */ +void +Togl_SetDestroyFunc(Togl *togl, Togl_Callback *proc) +{ + togl->DestroyProc = proc; +} + + +/* + * Togl_Timer + * + * Gets called from Tk_CreateTimerHandler. + */ +static void +Togl_Timer(ClientData clientData) +{ + Togl *togl = (Togl *) clientData; + + if (togl->TimerProc) { + togl->TimerProc(togl); + + /* Re-register this callback since Tcl/Tk timers are "one-shot". That + * is, after the timer callback is called it not normally called again. + * * * * * * * * * That's not the behavior we want for Togl. */ +#if (TK_MAJOR_VERSION * 100 + TK_MINOR_VERSION) >= 401 + togl->timerHandler = + Tcl_CreateTimerHandler(togl->TimerInterval, Togl_Timer, + (ClientData) togl); +#else + togl->timerHandler = + Tk_CreateTimerHandler(togl->TimeInterval, Togl_Timer, + (ClientData) togl); +#endif + } +} + + +/* + * Change the timer callback for a specific Togl widget. + * Pass NULL to disable the callback. + */ +void +Togl_SetTimerFunc(Togl *togl, Togl_Callback *proc) +{ + togl->TimerProc = proc; + if (proc) { +#if (TK_MAJOR_VERSION * 100 + TK_MINOR_VERSION) >= 401 + togl->timerHandler = + Tcl_CreateTimerHandler(togl->TimerInterval, Togl_Timer, + (ClientData) togl); +#else + togl->timerHandler = + Tk_CreateTimerHandler(togl->TimeInterval, Togl_Timer, + (ClientData) togl); +#endif + } +} + + + +/* + * Togl_CreateCommand + * + * Declares a new C sub-command of Togl callable from Tcl. + * Every time the sub-command is called from Tcl, the + * C routine will be called with all the arguments from Tcl. + */ +void +Togl_CreateCommand(char *cmd_name, Togl_CmdProc *cmd_proc) +{ + int new_item; + Tcl_HashEntry *entry; + + entry = Tcl_CreateHashEntry(&CommandTable, cmd_name, &new_item); + Tcl_SetHashValue(entry, cmd_proc); +} + + +/* + * Togl_MakeCurrent + * + * Bind the OpenGL rendering context to the specified + * Togl widget. + */ +void +Togl_MakeCurrent(const Togl *togl) +{ +#if defined(TOGL_WGL) + int res = wglMakeCurrent(togl->tglGLHdc, togl->tglGLHglrc); + + assert(res == TRUE); + +#elif defined(TOGL_X11) + if (!togl->GlCtx) + return; + (void) glXMakeCurrent(togl->display, + togl->TkWin ? Tk_WindowId(togl->TkWin) : None, togl->GlCtx); +# if defined(__sgi) + if (togl->OldStereoFlag) + oldStereoMakeCurrent(togl->display, + togl->TkWin ? Tk_WindowId(togl->TkWin) : None, togl->GlCtx); + +# endif /*__sgi STEREO */ + +#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL) + if (!togl->aglCtx) + return; + aglSetCurrentContext(togl->aglCtx); +#endif +} + + +#ifdef TOGL_AGL_CLASSIC +/* tell OpenGL which part of the Mac window to render to */ +static void +SetMacBufRect(Togl *togl) +{ + GLint wrect[4]; + + /* set wrect[0,1] to lower left corner of widget */ + wrect[2] = ((TkWindow *) (togl->TkWin))->changes.width; + wrect[3] = ((TkWindow *) (togl->TkWin))->changes.height; + wrect[0] = ((TkWindow *) (togl->TkWin))->privatePtr->xOff; + wrect[1] = + ((TkWindow *) (togl->TkWin))->privatePtr->toplevel->portPtr-> + portRect.bottom - wrect[3] - + ((TkWindow *) (togl->TkWin))->privatePtr->yOff; + aglSetInteger(togl->aglCtx, AGL_BUFFER_RECT, wrect); + aglEnable(togl->aglCtx, AGL_BUFFER_RECT); + aglUpdateContext(togl->aglCtx); +} +#elif defined(TOGL_AGL) +/* tell OpenGL which part of the Mac window to render to */ +static void +SetMacBufRect(Togl *togl) +{ + GLint wrect[4]; + + /* set wrect[0,1] to lower left corner of widget */ + wrect[2] = Tk_Width(togl->TkWin); + wrect[3] = Tk_Height(togl->TkWin); + wrect[0] = ((TkWindow *) (togl->TkWin))->privatePtr->xOff; + + Rect r; + + GetPortBounds(((TkWindow *) (togl->TkWin))->privatePtr->toplevel->grafPtr, + &r); + + wrect[1] = r.bottom - + wrect[3] - ((TkWindow *) (togl->TkWin))->privatePtr->yOff; + + aglSetInteger(togl->aglCtx, AGL_BUFFER_RECT, wrect); + aglEnable(togl->aglCtx, AGL_BUFFER_RECT); + aglUpdateContext(togl->aglCtx); +} +#endif + +/* + * Called when the widget's contents must be redrawn. Basically, we + * just call the user's render callback function. + * + * Note that the parameter type is ClientData so this function can be + * passed to Tk_DoWhenIdle(). + */ +static void +Togl_Render(ClientData clientData) +{ + Togl *togl = (Togl *) clientData; + + if (togl->DisplayProc) { + +#ifdef TOGL_AGL_CLASSIC + /* Mac is complicated here because OpenGL needs to know what part of + * the parent window to render into, and it seems that region need to + * be invalidated before drawing, so that QuickDraw will allow OpenGL + * to transfer pixels into that part of the window. I'm not even + * totally sure how or why this works as it does, since this aspect of + * Mac OpenGL seems to be totally undocumented. This was put together + * by trial and error! (thiessen) */ + MacRegion r; + RgnPtr rp = &r; + GrafPtr curPort, parentWin; + + parentWin = (GrafPtr) + (((MacDrawable *) (Tk_WindowId(togl->TkWin)))->toplevel-> + portPtr); + if (!parentWin) + return; +#endif + + Togl_MakeCurrent(togl); + +#ifdef TOGL_AGL_CLASSIC + /* Set QuickDraw port and clipping region */ + GetPort(&curPort); + SetPort(parentWin); + r.rgnBBox.left = ((TkWindow *) (togl->TkWin))->privatePtr->xOff; + r.rgnBBox.right = + r.rgnBBox.left + ((TkWindow *) (togl->TkWin))->changes.width - + 1; + r.rgnBBox.top = ((TkWindow *) (togl->TkWin))->privatePtr->yOff; + r.rgnBBox.bottom = + r.rgnBBox.top + ((TkWindow *) (togl->TkWin))->changes.height - + 1; + r.rgnSize = sizeof (Region); + InvalRgn(&rp); + SetClip(&rp); + /* this may seem an odd place to put this, with possibly redundant + * calls to aglSetInteger(AGL_BUFFER_RECT...), but for some reason + * performance is actually a lot better if this is called before every + * render... */ + SetMacBufRect(togl); +#endif + +#ifdef TOGL_AGL + SetMacBufRect(togl); +#endif + + togl->DisplayProc(togl); + +#ifdef TOGL_AGL_CLASSIC + SetPort(curPort); /* restore previous port */ +#endif + + } +#if defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL) + else { + /* Always need to update on resize */ + SetMacBufRect(togl); + } +#endif + togl->UpdatePending = False; +} + + +static void +RenderOverlay(ClientData clientData) +{ + Togl *togl = (Togl *) clientData; + + if (togl->OverlayFlag && togl->OverlayDisplayProc) { + +#if defined(TOGL_WGL) + int res = wglMakeCurrent(togl->tglGLHdc, togl->tglGLHglrc); + + assert(res == TRUE); + +#elif defined(TOGL_X11) + (void) glXMakeCurrent(Tk_Display(togl->TkWin), + togl->OverlayWindow, togl->OverlayCtx); +# if defined(__sgi) + if (togl->OldStereoFlag) + oldStereoMakeCurrent(Tk_Display(togl->TkWin), + togl->OverlayWindow, togl->OverlayCtx); + +# endif /*__sgi STEREO */ + +#endif /* TOGL_WGL */ + + togl->OverlayDisplayProc(togl); + } + togl->OverlayUpdatePending = False; +} + + +/* + * It's possible to change with this function or in a script some + * options like RGBA - ColorIndex ; Z-buffer and so on + */ +int +Togl_Configure(Tcl_Interp *interp, Togl *togl, + int argc, const char *argv[], int flags) +{ + Bool oldRgbaFlag = togl->RgbaFlag; + int oldRgbaRed = togl->RgbaRed; + int oldRgbaGreen = togl->RgbaGreen; + int oldRgbaBlue = togl->RgbaBlue; + Bool oldDoubleFlag = togl->DoubleFlag; + Bool oldDepthFlag = togl->DepthFlag; + int oldDepthSize = togl->DepthSize; + Bool oldAccumFlag = togl->AccumFlag; + int oldAccumRed = togl->AccumRed; + int oldAccumGreen = togl->AccumGreen; + int oldAccumBlue = togl->AccumBlue; + int oldAccumAlpha = togl->AccumAlpha; + Bool oldAlphaFlag = togl->AlphaFlag; + int oldAlphaSize = togl->AlphaSize; + Bool oldStencilFlag = togl->StencilFlag; + int oldStencilSize = togl->StencilSize; + int oldAuxNumber = togl->AuxNumber; + int oldWidth = togl->Width; + int oldHeight = togl->Height; + int oldSetGrid = togl->SetGrid; + + if (Tk_ConfigureWidget(interp, togl->TkWin, configSpecs, + argc, argv, WIDGREC togl, flags) == TCL_ERROR) { + return (TCL_ERROR); + } +#ifndef USE_OVERLAY + if (togl->OverlayFlag) { + TCL_ERR(interp, "Sorry, overlay was disabled"); + } +#endif + + + if (togl->Width != oldWidth || togl->Height != oldHeight + || togl->SetGrid != oldSetGrid) { + Togl_WorldChanged((ClientData) togl); + /* this added per Lou Arata */ + Tk_ResizeWindow(togl->TkWin, togl->Width, togl->Height); + + if (togl->ReshapeProc && +#if defined(TOGL_WGL) + togl->tglGLHglrc +#elif defined(TOGL_X11) + togl->GlCtx +#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL) + togl->aglCtx +#endif + ) { + Togl_MakeCurrent(togl); + togl->ReshapeProc(togl); + } + } + + if (togl->RgbaFlag != oldRgbaFlag + || togl->RgbaRed != oldRgbaRed + || togl->RgbaGreen != oldRgbaGreen + || togl->RgbaBlue != oldRgbaBlue + || togl->DoubleFlag != oldDoubleFlag + || togl->DepthFlag != oldDepthFlag + || togl->DepthSize != oldDepthSize + || togl->AccumFlag != oldAccumFlag + || togl->AccumRed != oldAccumRed + || togl->AccumGreen != oldAccumGreen + || togl->AccumBlue != oldAccumBlue + || togl->AccumAlpha != oldAccumAlpha + || togl->AlphaFlag != oldAlphaFlag + || togl->AlphaSize != oldAlphaSize + || togl->StencilFlag != oldStencilFlag + || togl->StencilSize != oldStencilSize + || togl->AuxNumber != oldAuxNumber) { +#ifdef MESA_COLOR_HACK + free_default_color_cells(Tk_Display(togl->TkWin), + Tk_Colormap(togl->TkWin)); +#endif + } +#if defined(__sgi) + oldStereoInit(togl, togl->OldStereoFlag); +#endif + + return TCL_OK; +} + + +static int +Togl_Widget(ClientData clientData, Tcl_Interp *interp, int argc, + CONST84 char *argv[]) +{ + Togl *togl = (Togl *) clientData; + int result = TCL_OK; + Tcl_HashEntry *entry; + Tcl_HashSearch search; + Togl_CmdProc *cmd_proc; + + if (argc < 2) { + Tcl_AppendResult(interp, "wrong # args: should be \"", + argv[0], " ?options?\"", NULL); + return TCL_ERROR; + } + + Tk_Preserve((ClientData) togl); + + if (!strncmp(argv[1], "configure", MAX(1, strlen(argv[1])))) { + if (argc == 2) { + /* Return list of all configuration parameters */ + result = Tk_ConfigureInfo(interp, togl->TkWin, configSpecs, + WIDGREC togl, (char *) NULL, 0); + } else if (argc == 3) { + if (strcmp(argv[2], "-extensions") == 0) { + /* Return a list of OpenGL extensions available */ + const char *extensions; + + extensions = (const char *) glGetString(GL_EXTENSIONS); + Tcl_SetResult(interp, TCL_STUPID extensions, TCL_STATIC); + result = TCL_OK; + } else { + /* Return a specific configuration parameter */ + result = Tk_ConfigureInfo(interp, togl->TkWin, configSpecs, + WIDGREC togl, argv[2], 0); + } + } else { + /* Execute a configuration change */ + result = Togl_Configure(interp, togl, argc - 2, argv + 2, + TK_CONFIG_ARGV_ONLY); + } + } else if (!strncmp(argv[1], "render", MAX(1, strlen(argv[1])))) { + /* force the widget to be redrawn */ + Togl_Render((ClientData) togl); + } else if (!strncmp(argv[1], "swapbuffers", MAX(1, strlen(argv[1])))) { + /* force the widget to be redrawn */ + Togl_SwapBuffers(togl); + } else if (!strncmp(argv[1], "makecurrent", MAX(1, strlen(argv[1])))) { + /* force the widget to be redrawn */ + Togl_MakeCurrent(togl); + } +#if TOGL_USE_FONTS == 1 + else if (!strncmp(argv[1], "loadbitmapfont", MAX(1, strlen(argv[1])))) { + if (argc == 3) { + GLuint fontbase; + Tcl_Obj *fontbaseAsTclObject; + + fontbase = Togl_LoadBitmapFont(togl, argv[2]); + if (fontbase) { + fontbaseAsTclObject = Tcl_NewIntObj(fontbase); + Tcl_SetObjResult(interp, fontbaseAsTclObject); + result = TCL_OK; + } else { + Tcl_AppendResult(interp, "Could not allocate font", NULL); + result = TCL_ERROR; + } + } else { + Tcl_AppendResult(interp, "wrong # args", NULL); + result = TCL_ERROR; + } + } else if (!strncmp(argv[1], "unloadbitmapfont", MAX(1, strlen(argv[1])))) { + if (argc == 3) { + Togl_UnloadBitmapFont(togl, atoi(argv[2])); + result = TCL_OK; + } else { + Tcl_AppendResult(interp, "wrong # args", NULL); + result = TCL_ERROR; + } + } +#endif /* TOGL_USE_FONTS */ + else { + /* Probably a user-defined function */ + entry = Tcl_FindHashEntry(&CommandTable, argv[1]); + if (entry != NULL) { + cmd_proc = (Togl_CmdProc *) Tcl_GetHashValue(entry); + result = cmd_proc(togl, argc, argv); + } else { + Tcl_AppendResult(interp, "Togl: Unknown option: ", argv[1], "\n", + "Try: configure or render\n", + "or one of the user-defined commands:\n", NULL); + entry = Tcl_FirstHashEntry(&CommandTable, &search); + while (entry) { + Tcl_AppendResult(interp, " ", + Tcl_GetHashKey(&CommandTable, entry), "\n", NULL); + entry = Tcl_NextHashEntry(&search); + } + result = TCL_ERROR; + } + } + + Tk_Release((ClientData) togl); + return result; +} + + + +/* + * Togl_Cmd + * + * Called when Togl is executed - creation of a Togl widget. + * * Creates a new window + * * Creates an 'Togl' data structure + * * Creates an event handler for this window + * * Creates a command that handles this object + * * Configures this Togl for the given arguments + */ +static int +Togl_Cmd(ClientData clientData, Tcl_Interp *interp, int argc, + CONST84 char **argv) +{ + const char *name; + Tk_Window mainwin = (Tk_Window) clientData; + Tk_Window tkwin; + Togl *togl; + + if (argc <= 1) { + TCL_ERR(interp, "wrong # args: should be \"pathName read filename\""); + } + + /* Create the window. */ + name = argv[1]; + tkwin = Tk_CreateWindowFromPath(interp, mainwin, name, (char *) NULL); + if (tkwin == NULL) { + return TCL_ERROR; + } + + Tk_SetClass(tkwin, "Togl"); + + /* Create Togl data structure */ + togl = (Togl *) malloc(sizeof (Togl)); + if (!togl) { + return TCL_ERROR; + } + + togl->Next = NULL; +#if defined(TOGL_WGL) + togl->tglGLHdc = NULL; + togl->tglGLHglrc = NULL; +#elif defined(TOGL_X11) + togl->GlCtx = NULL; + togl->OverlayCtx = NULL; +#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL) + togl->aglCtx = NULL; +#endif /* TOGL_WGL */ + togl->display = Tk_Display(tkwin); + togl->TkWin = tkwin; + togl->Interp = interp; +#ifndef NO_TK_CURSOR + togl->Cursor = None; +#endif + togl->Width = 0; + togl->Height = 0; + togl->SetGrid = 0; + togl->TimerInterval = 0; + togl->RgbaFlag = True; + togl->RgbaRed = 1; + togl->RgbaGreen = 1; + togl->RgbaBlue = 1; + togl->DoubleFlag = False; + togl->DepthFlag = False; + togl->DepthSize = 1; + togl->AccumFlag = False; + togl->AccumRed = 1; + togl->AccumGreen = 1; + togl->AccumBlue = 1; + togl->AccumAlpha = 1; + togl->AlphaFlag = False; + togl->AlphaSize = 1; + togl->StencilFlag = False; + togl->StencilSize = 1; + togl->OverlayFlag = False; + togl->StereoFlag = False; +#ifdef __sgi + togl->OldStereoFlag = False; +#endif + togl->AuxNumber = 0; + togl->Indirect = False; + togl->PixelFormat = 0; + togl->UpdatePending = False; + togl->OverlayUpdatePending = False; + togl->CreateProc = DefaultCreateProc; + togl->DisplayProc = DefaultDisplayProc; + togl->ReshapeProc = DefaultReshapeProc; + togl->DestroyProc = DefaultDestroyProc; + togl->TimerProc = DefaultTimerProc; + togl->OverlayDisplayProc = DefaultOverlayDisplayProc; + togl->ShareList = NULL; + togl->ShareContext = NULL; + togl->Ident = NULL; + togl->Client_Data = DefaultClientData; + + /* for EPS Output */ + togl->EpsRedMap = togl->EpsGreenMap = togl->EpsBlueMap = NULL; + togl->EpsMapSize = 0; + + /* Create command event handler */ + togl->widgetCmd = Tcl_CreateCommand(interp, Tk_PathName(tkwin), + Togl_Widget, (ClientData) togl, + (Tcl_CmdDeleteProc *) ToglCmdDeletedProc); + /* + * Setup the Tk_ClassProcs callbacks to point at our own window creation + * function + * + * We need to check at runtime if we should use the new Tk_SetClassProcs() + * API or if we need to modify the window structure directly */ + + +#ifdef HAVE_TK_SETCLASSPROCS + + if (SetClassProcsPtr != NULL) { /* use public API (Tk 8.4+) */ + Tk_ClassProcs *procsPtr; + + procsPtr = (Tk_ClassProcs *) Tcl_Alloc(sizeof (Tk_ClassProcs)); + procsPtr->size = sizeof (Tk_ClassProcs); + procsPtr->createProc = Togl_CreateWindow; + procsPtr->worldChangedProc = Togl_WorldChanged; + procsPtr->modalProc = NULL; + /* Tk_SetClassProcs(togl->TkWin,procsPtr,(ClientData)togl); */ + (SetClassProcsPtr) (togl->TkWin, procsPtr, (ClientData) togl); + } else +#endif + { /* use private API */ + /* + * We need to set these fields in the Tk_FakeWin structure: dummy17 = + * classProcsPtr dummy18 = instanceData */ + TkClassProcs *procsPtr; + Tk_FakeWin *winPtr = (Tk_FakeWin *) (togl->TkWin); + + procsPtr = (TkClassProcs *) Tcl_Alloc(sizeof (TkClassProcs)); + procsPtr->createProc = Togl_CreateWindow; + procsPtr->geometryProc = Togl_WorldChanged; + procsPtr->modalProc = NULL; + winPtr->dummy17 = (char *) procsPtr; + winPtr->dummy18 = (ClientData) togl; + } + + Tk_CreateEventHandler(tkwin, + ExposureMask | StructureNotifyMask, Togl_EventProc, + (ClientData) togl); + + /* Configure Togl widget */ + if (Togl_Configure(interp, togl, argc - 2, argv + 2, 0) == TCL_ERROR) { + Tk_DestroyWindow(tkwin); + Tcl_AppendResult(interp, "Couldn't configure togl widget\n", NULL); + goto error; + } + + /* + * If OpenGL window wasn't already created by Togl_Configure() we + * create it now. We can tell by checking if the GLX context has + * been initialized. + */ + if (! +#if defined(TOGL_WGL) + togl->tglGLHdc +#elif defined(TOGL_X11) + togl->GlCtx +#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL) + togl->aglCtx +#endif + ) { + Tk_MakeWindowExist(togl->TkWin); + if (Tk_WindowId(togl->TkWin) == DUMMY_WINDOW) { + return TCL_ERROR; + } + Togl_MakeCurrent(togl); + } + + /* If defined, call create callback */ + if (togl->CreateProc) { + togl->CreateProc(togl); + } + + /* If defined, call reshape proc */ + if (togl->ReshapeProc) { + togl->ReshapeProc(togl); + } + + /* If defined, setup timer */ + if (togl->TimerProc) { + (void) Tk_CreateTimerHandler(togl->TimerInterval, Togl_Timer, + (ClientData) togl); + } + + Tcl_AppendResult(interp, Tk_PathName(tkwin), NULL); + + /* Add to linked list */ + AddToList(togl); + + return TCL_OK; + + error: + (void) Tcl_DeleteCommand(interp, "togl"); + /* free(togl); Don't free it, if we do a crash occurs later... */ + return TCL_ERROR; +} + + +#ifdef USE_OVERLAY + +/* + * Do all the setup for overlay planes + * Return: TCL_OK or TCL_ERROR + */ +static int +SetupOverlay(Togl *togl) +{ +# if defined(TOGL_X11) + +# ifdef GLX_TRANSPARENT_TYPE_EXT + static int ovAttributeList[] = { + GLX_BUFFER_SIZE, 2, + GLX_LEVEL, 1, + GLX_TRANSPARENT_TYPE_EXT, GLX_TRANSPARENT_INDEX_EXT, + None + }; +# else + static int ovAttributeList[] = { + GLX_BUFFER_SIZE, 2, + GLX_LEVEL, 1, + None + }; +# endif + + Display *dpy; + XVisualInfo *visinfo; + TkWindow *winPtr = (TkWindow *) togl->TkWin; + + XSetWindowAttributes swa; + Tcl_HashEntry *hPtr; + int new_flag; + + dpy = Tk_Display(togl->TkWin); + + visinfo = glXChooseVisual(dpy, Tk_ScreenNumber(winPtr), ovAttributeList); + if (!visinfo) { + Tcl_AppendResult(togl->Interp, Tk_PathName(winPtr), + ": No suitable overlay index visual available", (char *) NULL); + togl->OverlayCtx = 0; + togl->OverlayWindow = 0; + togl->OverlayCmap = 0; + return TCL_ERROR; + } +# ifdef GLX_TRANSPARENT_INDEX_EXT + { + int fail = + glXGetConfig(dpy, visinfo, GLX_TRANSPARENT_INDEX_VALUE_EXT, + &togl->OverlayTransparentPixel); + + if (fail) + togl->OverlayTransparentPixel = 0; /* maybe, maybe ... */ + } +# else + togl->OverlayTransparentPixel = 0; /* maybe, maybe ... */ +# endif + + /* share display lists with normal layer context */ + togl->OverlayCtx = + glXCreateContext(dpy, visinfo, togl->GlCtx, !togl->Indirect); + + swa.colormap = XCreateColormap(dpy, XRootWindow(dpy, visinfo->screen), + visinfo->visual, AllocNone); + togl->OverlayCmap = swa.colormap; + + swa.border_pixel = 0; + swa.event_mask = ALL_EVENTS_MASK; + togl->OverlayWindow = XCreateWindow(dpy, Tk_WindowId(togl->TkWin), 0, 0, + togl->Width, togl->Height, 0, + visinfo->depth, InputOutput, + visinfo->visual, CWBorderPixel | CWColormap | CWEventMask, &swa); + + hPtr = Tcl_CreateHashEntry(&winPtr->dispPtr->winTable, + (char *) togl->OverlayWindow, &new_flag); + Tcl_SetHashValue(hPtr, winPtr); + + /* XMapWindow( dpy, togl->OverlayWindow ); */ + togl->OverlayIsMapped = False; + + /* Make sure window manager installs our colormap */ + XSetWMColormapWindows(dpy, togl->OverlayWindow, &togl->OverlayWindow, 1); + + return TCL_OK; + +# elif defined(TOGL_WGL) || defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL) + /* not yet implemented on these */ + return TCL_ERROR; +# endif +} + +#endif /* USE_OVERLAY */ + + + +#ifdef TOGL_WGL +# define TOGL_CLASS_NAME "Togl Class" +static Bool ToglClassInitialized = False; + +static LRESULT CALLBACK +Win32WinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + LONG result; + Togl *togl = (Togl *) GetWindowLong(hwnd, 0); + WNDCLASS childClass; + + switch (message) { + case WM_WINDOWPOSCHANGED: + /* Should be processed by DefWindowProc, otherwise a double buffered + * context is not properly resized when the corresponding window is + * resized. */ + break; + case WM_DESTROY: + if (togl->tglGLHglrc) { + wglDeleteContext(togl->tglGLHglrc); + } + if (togl->tglGLHdc) { + ReleaseDC(hwnd, togl->tglGLHdc); + } + free(togl); + break; + default: +# if USE_STATIC_LIB + return TkWinChildProc(hwnd, message, wParam, lParam); +# else + /* + * OK, since TkWinChildProc is not explicitly exported in the + * dynamic libraries, we have to retrieve it from the class info + * registered with windows. + * + */ + if (tkWinChildProc == NULL) { + GetClassInfo(Tk_GetHINSTANCE(), TK_WIN_CHILD_CLASS_NAME, + &childClass); + tkWinChildProc = childClass.lpfnWndProc; + } + return tkWinChildProc(hwnd, message, wParam, lParam); +# endif + } + result = DefWindowProc(hwnd, message, wParam, lParam); + Tcl_ServiceAll(); + return result; +} +#endif /* TOGL_WGL */ + + + +/* + * Togl_CreateWindow + * + * Window creation function, invoked as a callback from Tk_MakeWindowExist. + * Creates an OpenGL window for the Togl widget. + */ +static Window +Togl_CreateWindow(Tk_Window tkwin, Window parent, ClientData instanceData) +{ + + Togl *togl = (Togl *) instanceData; + XVisualInfo *visinfo = NULL; + Display *dpy; + Colormap cmap; + int scrnum; + Window window; + +#if defined(TOGL_X11) + Bool directCtx = True; + int attrib_list[1000]; + int attrib_count; + int dummy; + XSetWindowAttributes swa; + +# define MAX_ATTEMPTS 12 + static int ci_depths[MAX_ATTEMPTS] = { + 8, 4, 2, 1, 12, 16, 8, 4, 2, 1, 12, 16 + }; + static int dbl_flags[MAX_ATTEMPTS] = { + 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1 + }; +#elif defined(TOGL_WGL) + HWND hwnd, parentWin; + int pixelformat; + HANDLE hInstance; + WNDCLASS ToglClass; + PIXELFORMATDESCRIPTOR pfd; + XVisualInfo VisInf; +#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL) + GLint attribs[20]; + int na; + AGLPixelFormat fmt; + XVisualInfo VisInf; +#endif /* TOGL_X11 */ + + + dpy = Tk_Display(togl->TkWin); + +#if defined(TOGL_X11) + /* Make sure OpenGL's GLX extension supported */ + if (!glXQueryExtension(dpy, &dummy, &dummy)) { + Tcl_SetResult(togl->Interp, + TCL_STUPID "Togl: X server has no OpenGL GLX extension", + TCL_STATIC); + return DUMMY_WINDOW; + } + + if (togl->ShareContext && FindTogl(togl->ShareContext)) { + /* share OpenGL context with existing Togl widget */ + Togl *shareWith = FindTogl(togl->ShareContext); + + assert(shareWith != NULL); + assert(shareWith->GlCtx != NULL); + togl->GlCtx = shareWith->GlCtx; + togl->VisInfo = shareWith->VisInfo; + visinfo = togl->VisInfo; + } else { + if (togl->PixelFormat) { + XVisualInfo template; + int count = 1; + + template.visualid = togl->PixelFormat; + visinfo = XGetVisualInfo(dpy, VisualIDMask, &template, &count); + if (visinfo == NULL) { + Tcl_SetResult(togl->Interp, + TCL_STUPID "Togl: couldn't choose pixel format", + TCL_STATIC); + + return DUMMY_WINDOW; + } + /* fill in flags normally passed in that affect behavior */ + (void) glXGetConfig(dpy, visinfo, GLX_RGBA, &togl->RgbaFlag); + (void) glXGetConfig(dpy, visinfo, GLX_DOUBLEBUFFER, + &togl->DoubleFlag); + (void) glXGetConfig(dpy, visinfo, GLX_STEREO, &togl->StereoFlag); + } else { + int attempt; + + /* It may take a few tries to get a visual */ + for (attempt = 0; attempt < MAX_ATTEMPTS; attempt++) { + attrib_count = 0; + attrib_list[attrib_count++] = GLX_USE_GL; + if (togl->RgbaFlag) { + /* RGB[A] mode */ + attrib_list[attrib_count++] = GLX_RGBA; + attrib_list[attrib_count++] = GLX_RED_SIZE; + attrib_list[attrib_count++] = togl->RgbaRed; + attrib_list[attrib_count++] = GLX_GREEN_SIZE; + attrib_list[attrib_count++] = togl->RgbaGreen; + attrib_list[attrib_count++] = GLX_BLUE_SIZE; + attrib_list[attrib_count++] = togl->RgbaBlue; + if (togl->AlphaFlag) { + attrib_list[attrib_count++] = GLX_ALPHA_SIZE; + attrib_list[attrib_count++] = togl->AlphaSize; + } + + /* for EPS Output */ + if (togl->EpsRedMap) + free(togl->EpsRedMap); + if (togl->EpsGreenMap) + free(togl->EpsGreenMap); + if (togl->EpsBlueMap) + free(togl->EpsBlueMap); + togl->EpsRedMap = togl->EpsGreenMap = togl->EpsBlueMap = + NULL; + togl->EpsMapSize = 0; + } else { + /* Color index mode */ + int depth; + + attrib_list[attrib_count++] = GLX_BUFFER_SIZE; + depth = ci_depths[attempt]; + attrib_list[attrib_count++] = depth; + } + if (togl->DepthFlag) { + attrib_list[attrib_count++] = GLX_DEPTH_SIZE; + attrib_list[attrib_count++] = togl->DepthSize; + } + if (togl->DoubleFlag || dbl_flags[attempt]) { + attrib_list[attrib_count++] = GLX_DOUBLEBUFFER; + } + if (togl->StencilFlag) { + attrib_list[attrib_count++] = GLX_STENCIL_SIZE; + attrib_list[attrib_count++] = togl->StencilSize; + } + if (togl->AccumFlag) { + attrib_list[attrib_count++] = GLX_ACCUM_RED_SIZE; + attrib_list[attrib_count++] = togl->AccumRed; + attrib_list[attrib_count++] = GLX_ACCUM_GREEN_SIZE; + attrib_list[attrib_count++] = togl->AccumGreen; + attrib_list[attrib_count++] = GLX_ACCUM_BLUE_SIZE; + attrib_list[attrib_count++] = togl->AccumBlue; + if (togl->AlphaFlag) { + attrib_list[attrib_count++] = GLX_ACCUM_ALPHA_SIZE; + attrib_list[attrib_count++] = togl->AccumAlpha; + } + } + if (togl->AuxNumber != 0) { + attrib_list[attrib_count++] = GLX_AUX_BUFFERS; + attrib_list[attrib_count++] = togl->AuxNumber; + } + if (togl->Indirect) { + directCtx = False; + } + + if (togl->StereoFlag) { + attrib_list[attrib_count++] = GLX_STEREO; + } + attrib_list[attrib_count++] = None; + + visinfo = glXChooseVisual(dpy, Tk_ScreenNumber(togl->TkWin), + attrib_list); + if (visinfo) { + /* found a GLX visual! */ + break; + } + } + + togl->VisInfo = visinfo; + + if (visinfo == NULL) { + Tcl_SetResult(togl->Interp, + TCL_STUPID "Togl: couldn't get visual", TCL_STATIC); + return DUMMY_WINDOW; + } + + /* + * Create a new OpenGL rendering context. + */ + if (togl->ShareList) { + /* share display lists with existing togl widget */ + Togl *shareWith = FindTogl(togl->ShareList); + GLXContext shareCtx; + + if (shareWith) + shareCtx = shareWith->GlCtx; + else + shareCtx = None; + togl->GlCtx = + glXCreateContext(dpy, visinfo, shareCtx, directCtx); + } else { + /* don't share display lists */ + togl->GlCtx = glXCreateContext(dpy, visinfo, None, directCtx); + } + + if (togl->GlCtx == NULL) { + Tcl_SetResult(togl->Interp, + TCL_STUPID "could not create rendering context", + TCL_STATIC); + return DUMMY_WINDOW; + } + + } + } + + +#endif /* TOGL_X11 */ + +#ifdef TOGL_WGL + parentWin = Tk_GetHWND(parent); + hInstance = Tk_GetHINSTANCE(); + if (!ToglClassInitialized) { + ToglClassInitialized = True; + ToglClass.style = CS_HREDRAW | CS_VREDRAW; + ToglClass.cbClsExtra = 0; + ToglClass.cbWndExtra = 4; /* to save struct Togl* */ + ToglClass.hInstance = hInstance; + ToglClass.hbrBackground = NULL; + ToglClass.lpszMenuName = NULL; + ToglClass.lpszClassName = TOGL_CLASS_NAME; + ToglClass.lpfnWndProc = Win32WinProc; + ToglClass.hIcon = NULL; + ToglClass.hCursor = NULL; + if (!RegisterClass(&ToglClass)) { + Tcl_SetResult(togl->Interp, + TCL_STUPID "unable register Togl window class", TCL_STATIC); + return DUMMY_WINDOW; + } + } + + hwnd = CreateWindow(TOGL_CLASS_NAME, NULL, + WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 0, 0, + togl->Width, togl->Height, parentWin, NULL, hInstance, NULL); + SetWindowLong(hwnd, 0, (LONG) togl); + SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, + SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); + + togl->tglGLHdc = GetDC(hwnd); + + pfd.nSize = sizeof (PIXELFORMATDESCRIPTOR); + pfd.nVersion = 1; + pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL; + if (togl->DoubleFlag) { + pfd.dwFlags |= PFD_DOUBLEBUFFER; + } + /* The stereo flag is not supported in the current generic OpenGL + * implementation, but may be supported by specific hardware devices. */ + if (togl->StereoFlag) { + pfd.dwFlags |= PFD_STEREO; + } + + if (togl->PixelFormat) { + pixelformat = togl->PixelFormat; + } else { + pfd.cColorBits = togl->RgbaRed + togl->RgbaGreen + togl->RgbaBlue; + pfd.iPixelType = togl->RgbaFlag ? PFD_TYPE_RGBA : PFD_TYPE_COLORINDEX; + /* Alpha bitplanes are not supported in the current generic OpenGL + * implementation, but may be supported by specific hardware devices. */ + pfd.cAlphaBits = togl->AlphaFlag ? togl->AlphaSize : 0; + pfd.cAccumBits = togl->AccumFlag ? (togl->AccumRed + togl->AccumGreen + + togl->AccumBlue + togl->AccumAlpha) : 0; + pfd.cDepthBits = togl->DepthFlag ? togl->DepthSize : 0; + pfd.cStencilBits = togl->StencilFlag ? togl->StencilSize : 0; + /* Auxiliary buffers are not supported in the current generic OpenGL + * implementation, but may be supported by specific hardware devices. */ + pfd.cAuxBuffers = togl->AuxNumber; + pfd.iLayerType = PFD_MAIN_PLANE; + + if ((pixelformat = ChoosePixelFormat(togl->tglGLHdc, &pfd)) == 0) { + Tcl_SetResult(togl->Interp, + TCL_STUPID "Togl: couldn't choose pixel format", + TCL_STATIC); + return DUMMY_WINDOW; + } + } + if (SetPixelFormat(togl->tglGLHdc, pixelformat, &pfd) == FALSE) { + Tcl_SetResult(togl->Interp, + TCL_STUPID "Togl: couldn't choose pixel format", TCL_STATIC); + return DUMMY_WINDOW; + } + + /* Get the actual pixel format */ + DescribePixelFormat(togl->tglGLHdc, pixelformat, sizeof (pfd), &pfd); + if (togl->PixelFormat) { + /* fill in flags normally passed in that affect behavior */ + togl->RgbaFlag = pfd.iPixelType == PFD_TYPE_RGBA; + togl->DoubleFlag = pfd.cDepthBits > 0; + togl->StereoFlag = (pfd.dwFlags & PFD_STEREO) != 0; + // TODO: set depth flag, and more + } else if (togl->StereoFlag && (pfd.dwFlags & PFD_STEREO) == 0) { + Tcl_SetResult(togl->Interp, + TCL_STUPID "Togl: couldn't choose stereo pixel format", + TCL_STATIC); + return DUMMY_WINDOW; + } + + if (togl->ShareContext && FindTogl(togl->ShareContext)) { + /* share OpenGL context with existing Togl widget */ + Togl *shareWith = FindTogl(togl->ShareContext); + + assert(shareWith); + assert(shareWith->tglGLHglrc); + togl->tglGLHglrc = shareWith->tglGLHglrc; + togl->VisInfo = shareWith->VisInfo; + visinfo = togl->VisInfo; + } else { + /* + * Create a new OpenGL rendering context. And check to share lists. + */ + togl->tglGLHglrc = wglCreateContext(togl->tglGLHdc); + + if (togl->ShareList) { + /* share display lists with existing togl widget */ + Togl *shareWith = FindTogl(togl->ShareList); + + if (shareWith) + wglShareLists(shareWith->tglGLHglrc, togl->tglGLHglrc); + } + + if (!togl->tglGLHglrc) { + Tcl_SetResult(togl->Interp, + TCL_STUPID "could not create rendering context", + TCL_STATIC); + return DUMMY_WINDOW; + } + + /* Just for portability, define the simplest visinfo */ + visinfo = &VisInf; + visinfo->visual = DefaultVisual(dpy, DefaultScreen(dpy)); + visinfo->depth = visinfo->visual->bits_per_rgb; + togl->VisInfo = visinfo; + } + +#endif /* TOGL_WGL */ + + + /* + * find a colormap + */ + scrnum = Tk_ScreenNumber(togl->TkWin); + if (togl->RgbaFlag) { + /* Colormap for RGB mode */ +#if defined(TOGL_X11) + cmap = get_rgb_colormap(dpy, scrnum, visinfo, togl->TkWin); + +#elif defined(TOGL_WGL) + if (pfd.dwFlags & PFD_NEED_PALETTE) { + cmap = Win32CreateRgbColormap(pfd); + } else { + cmap = DefaultColormap(dpy, scrnum); + } + /* for EPS Output */ + if (togl->EpsRedMap) + free(togl->EpsRedMap); + if (togl->EpsGreenMap) + free(togl->EpsGreenMap); + if (togl->EpsBlueMap) + free(togl->EpsBlueMap); + togl->EpsRedMap = togl->EpsGreenMap = togl->EpsBlueMap = NULL; + togl->EpsMapSize = 0; + +#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL) + cmap = DefaultColormap(dpy, scrnum); + /* for EPS Output */ + if (togl->EpsRedMap) + free(togl->EpsRedMap); + if (togl->EpsGreenMap) + free(togl->EpsGreenMap); + if (togl->EpsBlueMap) + free(togl->EpsBlueMap); + togl->EpsRedMap = togl->EpsGreenMap = togl->EpsBlueMap = NULL; + togl->EpsMapSize = 0; +#endif /* TOGL_X11 */ + } else { + /* Colormap for CI mode */ +#ifdef TOGL_WGL + togl->CiColormapSize = 1 << pfd.cColorBits; + togl->CiColormapSize = togl->CiColormapSize < MAX_CI_COLORMAP_SIZE ? + togl->CiColormapSize : MAX_CI_COLORMAP_SIZE; + +#endif /* TOGL_WGL */ + if (togl->PrivateCmapFlag) { + /* need read/write colormap so user can store own color entries */ +#if defined(TOGL_X11) + cmap = XCreateColormap(dpy, XRootWindow(dpy, visinfo->screen), + visinfo->visual, AllocAll); +#elif defined(TOGL_WGL) + cmap = Win32CreateCiColormap(togl); +#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL) + /* need to figure out how to do this correctly on Mac... */ + cmap = DefaultColormap(dpy, scrnum); +#endif /* TOGL_X11 */ + } else { + if (visinfo->visual == DefaultVisual(dpy, scrnum)) { + /* share default/root colormap */ + cmap = Tk_Colormap(togl->TkWin); + } else { + /* make a new read-only colormap */ + cmap = XCreateColormap(dpy, XRootWindow(dpy, visinfo->screen), + visinfo->visual, AllocNone); + } + } + } + +#if !defined(TOGL_AGL) + /* Make sure Tk knows to switch to the new colormap when the cursor is over + * this window when running in color index mode. */ + (void) Tk_SetWindowVisual(togl->TkWin, visinfo->visual, visinfo->depth, + cmap); +#endif + +#ifdef TOGL_WGL + /* Install the colormap */ + SelectPalette(togl->tglGLHdc, ((TkWinColormap *) cmap)->palette, TRUE); + RealizePalette(togl->tglGLHdc); +#endif /* TOGL_WGL */ + +#if defined(TOGL_X11) + swa.colormap = cmap; + swa.border_pixel = 0; + swa.event_mask = ALL_EVENTS_MASK; + window = XCreateWindow(dpy, parent, + 0, 0, togl->Width, togl->Height, + 0, visinfo->depth, + InputOutput, visinfo->visual, + CWBorderPixel | CWColormap | CWEventMask, &swa); + /* Make sure window manager installs our colormap */ + (void) XSetWMColormapWindows(dpy, window, &window, 1); + +#elif defined(TOGL_WGL) + window = Tk_AttachHWND(togl->TkWin, hwnd); + +#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL) + { + TkWindow *winPtr = (TkWindow *) togl->TkWin; + + window = TkpMakeWindow(winPtr, parent); + } +#endif /* TOGL_X11 */ + +#ifdef USE_OVERLAY + if (togl->OverlayFlag) { + if (SetupOverlay(togl) == TCL_ERROR) { + fprintf(stderr, "Warning: couldn't setup overlay.\n"); + togl->OverlayFlag = False; + } + } +#endif /* USE_OVERLAY */ + + /* Request the X window to be displayed */ + (void) XMapWindow(dpy, window); + +#if defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL) + if (togl->ShareContext && FindTogl(togl->ShareContext)) { + /* share OpenGL context with existing Togl widget */ + Togl *shareWith = FindTogl(togl->ShareContext); + + assert(shareWith); + assert(shareWith->aglCtx); + togl->aglCtx = shareWith->aglCtx; + togl->VisInfo = shareWith->VisInfo; + visinfo = togl->VisInfo; + + } else { + AGLContext shareCtx = NULL; + + if (togl->PixelFormat) { + /* fill in RgbaFlag, DoubleFlag, and StereoFlag */ + fmt = (AGLPixelFormat) togl->PixelFormat; + GLint has_rgba, has_doublebuf, has_stereo; + + if (aglDescribePixelFormat(fmt, AGL_RGBA, &has_rgba) && + aglDescribePixelFormat(fmt, AGL_DOUBLEBUFFER, + &has_doublebuf) + && aglDescribePixelFormat(fmt, AGL_STEREO, &has_stereo)) { + togl->RgbaFlag = (has_rgba ? True : False); + togl->DoubleFlag = (has_doublebuf ? True : False); + togl->StereoFlag = (has_stereo ? True : False); + } else { + Tcl_SetResult(togl->Interp, + TCL_STUPID + "Togl: failed querying pixel format attributes", + TCL_STATIC); + return DUMMY_WINDOW; + } + } else { + + /* Need to do this after mapping window, so MacDrawable structure + * is more completely filled in */ + na = 0; + attribs[na++] = AGL_MINIMUM_POLICY; + attribs[na++] = AGL_ROBUST; + if (togl->RgbaFlag) { + /* RGB[A] mode */ + attribs[na++] = AGL_RGBA; + attribs[na++] = AGL_RED_SIZE; + attribs[na++] = togl->RgbaRed; + attribs[na++] = AGL_GREEN_SIZE; + attribs[na++] = togl->RgbaGreen; + attribs[na++] = AGL_BLUE_SIZE; + attribs[na++] = togl->RgbaBlue; + if (togl->AlphaFlag) { + attribs[na++] = AGL_ALPHA_SIZE; + attribs[na++] = togl->AlphaSize; + } + } else { + /* Color index mode */ + attribs[na++] = AGL_BUFFER_SIZE; + attribs[na++] = 8; + } + if (togl->DepthFlag) { + attribs[na++] = AGL_DEPTH_SIZE; + attribs[na++] = togl->DepthSize; + } + if (togl->DoubleFlag) { + attribs[na++] = AGL_DOUBLEBUFFER; + } + if (togl->StencilFlag) { + attribs[na++] = AGL_STENCIL_SIZE; + attribs[na++] = togl->StencilSize; + } + if (togl->AccumFlag) { + attribs[na++] = AGL_ACCUM_RED_SIZE; + attribs[na++] = togl->AccumRed; + attribs[na++] = AGL_ACCUM_GREEN_SIZE; + attribs[na++] = togl->AccumGreen; + attribs[na++] = AGL_ACCUM_BLUE_SIZE; + attribs[na++] = togl->AccumBlue; + if (togl->AlphaFlag) { + attribs[na++] = AGL_ACCUM_ALPHA_SIZE; + attribs[na++] = togl->AccumAlpha; + } + } + if (togl->AuxNumber != 0) { + attribs[na++] = AGL_AUX_BUFFERS; + attribs[na++] = togl->AuxNumber; + } + attribs[na++] = AGL_NONE; + + if ((fmt = aglChoosePixelFormat(NULL, 0, attribs)) == NULL) { + Tcl_SetResult(togl->Interp, + TCL_STUPID "Togl: couldn't choose pixel format", + TCL_STATIC); + return DUMMY_WINDOW; + } + } + + /* + * Check whether to share lists. + */ + if (togl->ShareList) { + /* share display lists with existing togl widget */ + Togl *shareWith = FindTogl(togl->ShareList); + + if (shareWith) + shareCtx = shareWith->aglCtx; + } + if ((togl->aglCtx = aglCreateContext(fmt, shareCtx)) == NULL) { + GLenum err = aglGetError(); + + aglDestroyPixelFormat(fmt); + if (err == AGL_BAD_MATCH) + Tcl_SetResult(togl->Interp, + TCL_STUPID + "Togl: couldn't create context, shared context doesn't match", + TCL_STATIC); + else if (err == AGL_BAD_CONTEXT) + Tcl_SetResult(togl->Interp, + TCL_STUPID + "Togl: couldn't create context, bad shared context", + TCL_STATIC); + else if (err == AGL_BAD_PIXELFMT) + Tcl_SetResult(togl->Interp, + TCL_STUPID + "Togl: couldn't create context, bad pixel format", + TCL_STATIC); + else + Tcl_SetResult(togl->Interp, + TCL_STUPID + "Togl: couldn't create context, unknown reason", + TCL_STATIC); + return DUMMY_WINDOW; + } + + aglDestroyPixelFormat(fmt); + if (!aglSetDrawable(togl->aglCtx, +# if defined(TOGL_AGL) + ((MacDrawable *) (window))->toplevel->grafPtr +# else + ((MacDrawable *) (window))->toplevel->portPtr +# endif + )) { + aglDestroyContext(togl->aglCtx); + Tcl_SetResult(togl->Interp, + TCL_STUPID "Togl: couldn't set drawable", TCL_STATIC); + return DUMMY_WINDOW; + } + + /* Just for portability, define the simplest visinfo */ + visinfo = &VisInf; + visinfo->visual = DefaultVisual(dpy, DefaultScreen(dpy)); + visinfo->depth = visinfo->visual->bits_per_rgb; + + Tk_SetWindowVisual(togl->TkWin, visinfo->visual, visinfo->depth, cmap); + } +#endif /* TOGL_AGL_CLASSIC || TOGL_AGL */ + +#if defined(TOGL_X11) + /* Check for a single/double buffering snafu */ + { + int dbl_flag; + + if (glXGetConfig(dpy, visinfo, GLX_DOUBLEBUFFER, &dbl_flag)) { + if (!togl->DoubleFlag && dbl_flag) { + /* We requested single buffering but had to accept a */ + /* double buffered visual. Set the GL draw buffer to */ + /* be the front buffer to simulate single buffering. */ + glDrawBuffer(GL_FRONT); + } + } + } +#endif /* TOGL_X11 */ + + /* for EPS Output */ + if (!togl->RgbaFlag) { + int index_size; + +#if defined(TOGL_X11) || defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL) + GLint index_bits; + + glGetIntegerv(GL_INDEX_BITS, &index_bits); + index_size = 1 << index_bits; +#elif defined(TOGL_WGL) + index_size = togl->CiColormapSize; +#endif /* TOGL_X11 */ + if (togl->EpsMapSize != index_size) { + if (togl->EpsRedMap) + free(togl->EpsRedMap); + if (togl->EpsGreenMap) + free(togl->EpsGreenMap); + if (togl->EpsBlueMap) + free(togl->EpsBlueMap); + togl->EpsMapSize = index_size; + togl->EpsRedMap = (GLfloat *) calloc(index_size, sizeof (GLfloat)); + togl->EpsGreenMap = + (GLfloat *) calloc(index_size, sizeof (GLfloat)); + togl->EpsBlueMap = (GLfloat *) calloc(index_size, sizeof (GLfloat)); + } + } + + return window; +} + +/* + * Togl_WorldChanged + * + * Add support for setgrid option. + */ +static void +Togl_WorldChanged(ClientData instanceData) +{ + Togl *togl = (Togl *) instanceData; + + Tk_GeometryRequest(togl->TkWin, togl->Width, togl->Height); + Tk_SetInternalBorder(togl->TkWin, 0); + if (togl->SetGrid > 0) { + Tk_SetGrid(togl->TkWin, togl->Width / togl->SetGrid, + togl->Height / togl->SetGrid, togl->SetGrid, togl->SetGrid); + } else { + Tk_UnsetGrid(togl->TkWin); + } +} + +/* + * ToglCmdDeletedProc + * + * This procedure is invoked when a widget command is deleted. If + * the widget isn't already in the process of being destroyed, + * this command destroys it. + * + * Results: + * None. + * + * Side effects: + * The widget is destroyed. + * + *---------------------------------------------------------------------- + */ +static void +ToglCmdDeletedProc(ClientData clientData) +{ + Togl *togl = (Togl *) clientData; + Tk_Window tkwin = togl->TkWin; + + /* + * This procedure could be invoked either because the window was + * destroyed and the command was then deleted (in which case tkwin + * is NULL) or because the command was deleted, and then this procedure + * destroys the widget. + */ + + if (togl && tkwin) { + Tk_DeleteEventHandler(tkwin, + ExposureMask | StructureNotifyMask, + Togl_EventProc, (ClientData) togl); + } +#if defined(TOGL_X11) + if (togl->GlCtx) { + if (FindToglWithSameContext(togl) == NULL) + glXDestroyContext(togl->display, togl->GlCtx); + togl->GlCtx = NULL; + } +# ifdef USE_OVERLAY + if (togl->OverlayCtx) { + Tcl_HashEntry *entryPtr; + TkWindow *winPtr = (TkWindow *) togl->TkWin; + + if (winPtr) { + entryPtr = Tcl_FindHashEntry(&winPtr->dispPtr->winTable, + (char *) togl->OverlayWindow); + Tcl_DeleteHashEntry(entryPtr); + } + if (FindToglWithSameOverlayContext(togl) == NULL) + glXDestroyContext(togl->display, togl->OverlayCtx); + togl->OverlayCtx = NULL; + } +# endif /* USE_OVERLAY */ +#endif + /* TODO: delete contexts on other platforms */ + + if (tkwin != NULL) { + if (togl->SetGrid > 0) { + Tk_UnsetGrid(tkwin); + } + togl->TkWin = NULL; + Tk_DestroyWindow(tkwin); + } +} + + +/* + * Togl_Destroy + * + * Gets called when an Togl widget is destroyed. + */ +static void +Togl_Destroy( +#if (TK_MAJOR_VERSION * 100 + TK_MINOR_VERSION) >= 401 + char * +#else + ClientData +#endif + clientData) +{ + Togl *togl = (Togl *) clientData; + + Tk_FreeOptions(configSpecs, WIDGREC togl, togl->display, 0); + +#ifndef NO_TK_CURSOR + if (togl->Cursor != None) { + Tk_FreeCursor(togl->display, togl->Cursor); + } +#endif + if (togl->DestroyProc) { + togl->DestroyProc(togl); + } + + /* remove from linked list */ + RemoveFromList(togl); + +#if !defined(TOGL_WGL) + /* TODO: why not on Windows? */ + free(togl); +#endif +} + + + +/* + * This gets called to handle Togl window configuration events + */ +static void +Togl_EventProc(ClientData clientData, XEvent *eventPtr) +{ + Togl *togl = (Togl *) clientData; + + switch (eventPtr->type) { + case Expose: + if (eventPtr->xexpose.count == 0) { + if (!togl->UpdatePending + && eventPtr->xexpose.window == Tk_WindowId(togl->TkWin)) { + Togl_PostRedisplay(togl); + } +#if defined(TOGL_X11) + if (!togl->OverlayUpdatePending && togl->OverlayFlag + && togl->OverlayIsMapped + && eventPtr->xexpose.window == togl->OverlayWindow) { + Togl_PostOverlayRedisplay(togl); + } +#endif /* TOGL_X11 */ + } + break; + case ConfigureNotify: + if (togl->Width != Tk_Width(togl->TkWin) + || togl->Height != Tk_Height(togl->TkWin)) { + togl->Width = Tk_Width(togl->TkWin); + togl->Height = Tk_Height(togl->TkWin); + (void) XResizeWindow(Tk_Display(togl->TkWin), + Tk_WindowId(togl->TkWin), togl->Width, togl->Height); +#if defined(TOGL_X11) + if (togl->OverlayFlag) { + (void) XResizeWindow(Tk_Display(togl->TkWin), + togl->OverlayWindow, togl->Width, togl->Height); + (void) XRaiseWindow(Tk_Display(togl->TkWin), + togl->OverlayWindow); + } +#endif /* TOGL_X11 */ + Togl_MakeCurrent(togl); + if (togl->ReshapeProc) { + togl->ReshapeProc(togl); + } else { + glViewport(0, 0, togl->Width, togl->Height); +#if defined(TOGL_X11) + if (togl->OverlayFlag) { + Togl_UseLayer(togl, TOGL_OVERLAY); + glViewport(0, 0, togl->Width, togl->Height); + Togl_UseLayer(togl, TOGL_NORMAL); + } +#endif /* TOGL_X11 */ + } +#ifndef TOGL_WGL /* causes double redisplay on Win32 platform */ + Togl_PostRedisplay(togl); +#endif /* TOGL_WGL */ + } + break; + case MapNotify: +#if defined(TOGL_AGL) + { + /* + * See comment for the UnmapNotify case below. + */ + AGLDrawable d = TkMacOSXGetDrawablePort(Tk_WindowId(togl->TkWin)); + + aglSetDrawable(togl->aglCtx, d); + } +#endif /* TOGL_AGL */ + break; + case UnmapNotify: +#if defined(TOGL_AGL) + { + /* + * For Mac OS X Aqua, Tk subwindows are not implemented as + * separate Aqua windows. They are just different regions of + * a single Aqua window. To unmap them they are just not drawn. + * Have to disconnect the AGL context otherwise they will continue + * to be displayed directly by Aqua. + */ + aglSetDrawable(togl->aglCtx, NULL); + } +#endif /* TOGL_AGL */ + break; + case DestroyNotify: + if (togl->TkWin != NULL) { + if (togl->SetGrid > 0) { + Tk_UnsetGrid(togl->TkWin); + } + togl->TkWin = NULL; +#if (TCL_MAJOR_VERSION * 100 + TCL_MINOR_VERSION) >= 800 + /* This function new in Tcl/Tk 8.0 */ + (void) Tcl_DeleteCommandFromToken(togl->Interp, togl->widgetCmd); +#endif + } + if (togl->TimerProc != NULL) { +#if (TK_MAJOR_VERSION * 100 + TK_MINOR_VERSION) >= 401 + Tcl_DeleteTimerHandler(togl->timerHandler); +#else + Tk_DeleteTimerHandler(togl->timerHandler); +#endif + + } + if (togl->UpdatePending) { +#if (TCL_MAJOR_VERSION * 100 + TCL_MINOR_VERSION) >= 705 + Tcl_CancelIdleCall(Togl_Render, (ClientData) togl); +#else + Tk_CancelIdleCall(Togl_Render, (ClientData) togl); +#endif + } +#if (TK_MAJOR_VERSION * 100 + TK_MINOR_VERSION) >= 401 + Tcl_EventuallyFree((ClientData) togl, Togl_Destroy); +#else + Tk_EventuallyFree((ClientData) togl, Togl_Destroy); +#endif + + break; + default: + /* nothing */ + ; + } +} + + + +void +Togl_PostRedisplay(Togl *togl) +{ + if (!togl->UpdatePending) { + togl->UpdatePending = True; + Tk_DoWhenIdle(Togl_Render, (ClientData) togl); + } +} + + + +void +Togl_SwapBuffers(const Togl *togl) +{ + if (togl->DoubleFlag) { +#if defined(TOGL_WGL) + int res = SwapBuffers(togl->tglGLHdc); + + assert(res == TRUE); +#elif defined(TOGL_X11) + glXSwapBuffers(Tk_Display(togl->TkWin), Tk_WindowId(togl->TkWin)); +#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL) + aglSwapBuffers(togl->aglCtx); +#endif /* TOGL_WGL */ + } else { + glFlush(); + } +} + + + +const char * +Togl_Ident(const Togl *togl) +{ + return togl->Ident; +} + + +int +Togl_Width(const Togl *togl) +{ + return togl->Width; +} + + +int +Togl_Height(const Togl *togl) +{ + return togl->Height; +} + + +Tcl_Interp * +Togl_Interp(const Togl *togl) +{ + return togl->Interp; +} + + +Tk_Window +Togl_TkWin(const Togl *togl) +{ + return togl->TkWin; +} + + +#if defined(TOGL_X11) +/* + * A replacement for XAllocColor. This function should never + * fail to allocate a color. When XAllocColor fails, we return + * the nearest matching color. If we have to allocate many colors + * this function isn't too efficient; the XQueryColors() could be + * done just once. + * Written by Michael Pichler, Brian Paul, Mark Kilgard + * Input: dpy - X display + * cmap - X colormap + * cmapSize - size of colormap + * In/Out: color - the XColor struct + * Output: exact - 1=exact color match, 0=closest match + */ +static void +noFaultXAllocColor(Display *dpy, Colormap cmap, int cmapSize, + XColor *color, int *exact) +{ + XColor *ctable, subColor; + int i, bestmatch; + double mindist; /* 3*2^16^2 exceeds long int precision. */ + + /* First try just using XAllocColor. */ + if (XAllocColor(dpy, cmap, color)) { + *exact = 1; + return; + } + + /* Retrieve color table entries. */ + /* XXX alloca candidate. */ + ctable = (XColor *) malloc(cmapSize * sizeof (XColor)); + for (i = 0; i < cmapSize; i++) { + ctable[i].pixel = i; + } + (void) XQueryColors(dpy, cmap, ctable, cmapSize); + + /* Find best match. */ + bestmatch = -1; + mindist = 0; + for (i = 0; i < cmapSize; i++) { + double dr = (double) color->red - (double) ctable[i].red; + double dg = (double) color->green - (double) ctable[i].green; + double db = (double) color->blue - (double) ctable[i].blue; + double dist = dr * dr + dg * dg + db * db; + + if (bestmatch < 0 || dist < mindist) { + bestmatch = i; + mindist = dist; + } + } + + /* Return result. */ + subColor.red = ctable[bestmatch].red; + subColor.green = ctable[bestmatch].green; + subColor.blue = ctable[bestmatch].blue; + free(ctable); + /* Try to allocate the closest match color. This should only fail if the + * cell is read/write. Otherwise, we're incrementing the cell's reference + * count. */ + if (!XAllocColor(dpy, cmap, &subColor)) { + /* do this to work around a problem reported by Frank Ortega */ + subColor.pixel = (unsigned long) bestmatch; + subColor.red = ctable[bestmatch].red; + subColor.green = ctable[bestmatch].green; + subColor.blue = ctable[bestmatch].blue; + subColor.flags = DoRed | DoGreen | DoBlue; + } + *color = subColor; +} + +#elif defined(TOGL_WGL) + +static UINT +Win32AllocColor(const Togl *togl, float red, float green, float blue) +{ + /* Modified version of XAllocColor emulation of Tk. - returns index, + * instead of color itself - allocates logical palette entry even for + * non-palette devices */ + + TkWinColormap *cmap = (TkWinColormap *) Tk_Colormap(togl->TkWin); + UINT index; + COLORREF newColor, closeColor; + PALETTEENTRY entry, closeEntry; + int new, refCount; + Tcl_HashEntry *entryPtr; + + entry.peRed = (unsigned char) (red * 255 + .5); + entry.peGreen = (unsigned char) (green * 255 + .5); + entry.peBlue = (unsigned char) (blue * 255 + .5); + entry.peFlags = 0; + + /* + * Find the nearest existing palette entry. + */ + + newColor = RGB(entry.peRed, entry.peGreen, entry.peBlue); + index = GetNearestPaletteIndex(cmap->palette, newColor); + GetPaletteEntries(cmap->palette, index, 1, &closeEntry); + closeColor = RGB(closeEntry.peRed, closeEntry.peGreen, closeEntry.peBlue); + + /* + * If this is not a duplicate and colormap is not full, allocate a new entry. + */ + + if (newColor != closeColor) { + if (cmap->size == (unsigned int) togl->CiColormapSize) { + entry = closeEntry; + } else { + cmap->size++; + ResizePalette(cmap->palette, cmap->size); + index = cmap->size - 1; + SetPaletteEntries(cmap->palette, index, 1, &entry); + SelectPalette(togl->tglGLHdc, cmap->palette, TRUE); + RealizePalette(togl->tglGLHdc); + } + } + newColor = PALETTERGB(entry.peRed, entry.peGreen, entry.peBlue); + entryPtr = Tcl_CreateHashEntry(&cmap->refCounts, (char *) newColor, &new); + if (new) { + refCount = 1; + } else { + refCount = ((int) Tcl_GetHashValue(entryPtr)) + 1; + } + Tcl_SetHashValue(entryPtr, (ClientData) refCount); + + /* for EPS output */ + togl->EpsRedMap[index] = (GLfloat) (entry.peRed / 255.0); + togl->EpsGreenMap[index] = (GLfloat) (entry.peGreen / 255.0); + togl->EpsBlueMap[index] = (GLfloat) (entry.peBlue / 255.0); + return index; +} + +static void +Win32FreeColor(const Togl *togl, unsigned long index) +{ + TkWinColormap *cmap = (TkWinColormap *) Tk_Colormap(togl->TkWin); + COLORREF cref; + UINT count, refCount; + PALETTEENTRY entry, *entries; + Tcl_HashEntry *entryPtr; + + if (index >= cmap->size) { + panic("Tried to free a color that isn't allocated."); + } + GetPaletteEntries(cmap->palette, index, 1, &entry); + cref = PALETTERGB(entry.peRed, entry.peGreen, entry.peBlue); + entryPtr = Tcl_FindHashEntry(&cmap->refCounts, (char *) cref); + if (!entryPtr) { + panic("Tried to free a color that isn't allocated."); + } + refCount = (int) Tcl_GetHashValue(entryPtr) - 1; + if (refCount == 0) { + count = cmap->size - index; + entries = (PALETTEENTRY *) ckalloc(sizeof (PALETTEENTRY) * count); + GetPaletteEntries(cmap->palette, index + 1, count, entries); + SetPaletteEntries(cmap->palette, index, count, entries); + SelectPalette(togl->tglGLHdc, cmap->palette, TRUE); + RealizePalette(togl->tglGLHdc); + ckfree((char *) entries); + cmap->size--; + Tcl_DeleteHashEntry(entryPtr); + } else { + Tcl_SetHashValue(entryPtr, (ClientData) refCount); + } +} + +static void +Win32SetColor(const Togl *togl, + unsigned long index, float red, float green, float blue) +{ + TkWinColormap *cmap = (TkWinColormap *) Tk_Colormap(togl->TkWin); + PALETTEENTRY entry; + + entry.peRed = (unsigned char) (red * 255 + .5); + entry.peGreen = (unsigned char) (green * 255 + .5); + entry.peBlue = (unsigned char) (blue * 255 + .5); + entry.peFlags = 0; + SetPaletteEntries(cmap->palette, index, 1, &entry); + SelectPalette(togl->tglGLHdc, cmap->palette, TRUE); + RealizePalette(togl->tglGLHdc); + + /* for EPS output */ + togl->EpsRedMap[index] = (GLfloat) (entry.peRed / 255.0); + togl->EpsGreenMap[index] = (GLfloat) (entry.peGreen / 255.0); + togl->EpsBlueMap[index] = (GLfloat) (entry.peBlue / 255.0); +} +#endif /* TOGL_X11 */ + + +unsigned long +Togl_AllocColor(const Togl *togl, float red, float green, float blue) +{ + if (togl->RgbaFlag) { + (void) fprintf(stderr, + "Error: Togl_AllocColor illegal in RGBA mode.\n"); + return 0; + } + /* TODO: maybe not... */ + if (togl->PrivateCmapFlag) { + (void) fprintf(stderr, + "Error: Togl_FreeColor illegal with private colormap\n"); + return 0; + } +#if defined(TOGL_X11) + { + XColor xcol; + int exact; + + xcol.red = (short) (red * 65535.0); + xcol.green = (short) (green * 65535.0); + xcol.blue = (short) (blue * 65535.0); + + noFaultXAllocColor(Tk_Display(togl->TkWin), Tk_Colormap(togl->TkWin), + Tk_Visual(togl->TkWin)->map_entries, &xcol, &exact); + /* for EPS output */ + togl->EpsRedMap[xcol.pixel] = (float) xcol.red / 65535.0; + togl->EpsGreenMap[xcol.pixel] = (float) xcol.green / 65535.0; + togl->EpsBlueMap[xcol.pixel] = (float) xcol.blue / 65535.0; + + return xcol.pixel; + } + +#elif defined(TOGL_WGL) + return Win32AllocColor(togl, red, green, blue); + +#elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL) + /* still need to implement this on Mac... */ + return 0; + +#endif /* TOGL_X11 */ +} + + + +void +Togl_FreeColor(const Togl *togl, unsigned long pixel) +{ + if (togl->RgbaFlag) { + (void) fprintf(stderr, + "Error: Togl_AllocColor illegal in RGBA mode.\n"); + return; + } + /* TODO: maybe not... */ + if (togl->PrivateCmapFlag) { + (void) fprintf(stderr, + "Error: Togl_FreeColor illegal with private colormap\n"); + return; + } +#if defined(TOGL_X11) + (void) XFreeColors(Tk_Display(togl->TkWin), Tk_Colormap(togl->TkWin), + &pixel, 1, 0); +#elif defined(TOGL_WGL) + Win32FreeColor(togl, pixel); +#endif /* TOGL_X11 */ +} + + + +void +Togl_SetColor(const Togl *togl, + unsigned long index, float red, float green, float blue) +{ + + if (togl->RgbaFlag) { + (void) fprintf(stderr, + "Error: Togl_AllocColor illegal in RGBA mode.\n"); + return; + } + if (!togl->PrivateCmapFlag) { + (void) fprintf(stderr, + "Error: Togl_SetColor requires a private colormap\n"); + return; + } +#if defined(TOGL_X11) + { + XColor xcol; + + xcol.pixel = index; + xcol.red = (short) (red * 65535.0); + xcol.green = (short) (green * 65535.0); + xcol.blue = (short) (blue * 65535.0); + xcol.flags = DoRed | DoGreen | DoBlue; + + (void) XStoreColor(Tk_Display(togl->TkWin), Tk_Colormap(togl->TkWin), + &xcol); + + /* for EPS output */ + togl->EpsRedMap[xcol.pixel] = (float) xcol.red / 65535.0; + togl->EpsGreenMap[xcol.pixel] = (float) xcol.green / 65535.0; + togl->EpsBlueMap[xcol.pixel] = (float) xcol.blue / 65535.0; + } +#elif defined(TOGL_WGL) + Win32SetColor(togl, index, red, green, blue); +#endif /* TOGL_X11 */ +} + + +#if TOGL_USE_FONTS == 1 + +# if defined(TOGL_WGL) +# include "tkWinInt.h" +# include "tkFont.h" + +/* + * The following structure represents Windows' implementation of a font. + */ + +typedef struct WinFont +{ + TkFont font; /* Stuff used by generic font package. Must be + * first in structure. */ + HFONT hFont; /* Windows information about font. */ + HWND hwnd; /* Toplevel window of application that owns + * this font, used for getting HDC. */ + int widths[256]; /* Widths of first 256 chars in this font. */ +} WinFont; +# endif /* TOGL_WGL */ + + +# define MAX_FONTS 1000 +static GLuint ListBase[MAX_FONTS]; +static GLuint ListCount[MAX_FONTS]; + + + +/* + * Load the named bitmap font as a sequence of bitmaps in a display list. + * fontname may be one of the predefined fonts like TOGL_BITMAP_8_BY_13 + * or an X font name, or a Windows font name, etc. + */ +GLuint +Togl_LoadBitmapFont(const Togl *togl, const char *fontname) +{ + static Bool FirstTime = True; + +# if defined(TOGL_X11) + XFontStruct *fontinfo; +# elif defined(TOGL_WGL) + WinFont *winfont; + HFONT oldFont; + TEXTMETRIC tm; +# endif + /* TOGL_X11 */ + int first, last, count; + GLuint fontbase; + const char *name; + + /* Initialize the ListBase and ListCount arrays */ + if (FirstTime) { + int i; + + for (i = 0; i < MAX_FONTS; i++) { + ListBase[i] = ListCount[i] = 0; + } + FirstTime = False; + } + + /* + * This method of selecting X fonts according to a TOGL_ font name + * is a kludge. To be fixed when I find time... + */ + if (fontname == TOGL_BITMAP_8_BY_13) { + name = "8x13"; + } else if (fontname == TOGL_BITMAP_9_BY_15) { + name = "9x15"; + } else if (fontname == TOGL_BITMAP_TIMES_ROMAN_10) { + name = "-adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1"; + } else if (fontname == TOGL_BITMAP_TIMES_ROMAN_24) { + name = "-adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1"; + } else if (fontname == TOGL_BITMAP_HELVETICA_10) { + name = "-adobe-helvetica-medium-r-normal--10-100-75-75-p-57-iso8859-1"; + } else if (fontname == TOGL_BITMAP_HELVETICA_12) { + name = "-adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1"; + } else if (fontname == TOGL_BITMAP_HELVETICA_18) { + name = "-adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1"; + } else if (!fontname) { + name = DEFAULT_FONTNAME; + } else { + name = (const char *) fontname; + } + + assert(name); + +# if defined(TOGL_X11) + fontinfo = (XFontStruct *) XLoadQueryFont(Tk_Display(togl->TkWin), name); + if (!fontinfo) { + return 0; + } + first = fontinfo->min_char_or_byte2; + last = fontinfo->max_char_or_byte2; +# elif defined(TOGL_WGL) + winfont = (WinFont *) Tk_GetFont(togl->Interp, togl->TkWin, name); + if (!winfont) { + return 0; + } + oldFont = SelectObject(togl->tglGLHdc, winfont->hFont); + GetTextMetrics(togl->tglGLHdc, &tm); + first = tm.tmFirstChar; + last = tm.tmLastChar; +# elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL) + first = 10; /* don't know how to determine font range on + * Mac... */ + last = 127; +# endif + /* TOGL_X11 */ + + count = last - first + 1; + fontbase = glGenLists((GLuint) (last + 1)); + if (fontbase == 0) { +# ifdef TOGL_WGL + SelectObject(togl->tglGLHdc, oldFont); + Tk_FreeFont((Tk_Font) winfont); +# endif + /* TOGL_WGL */ + return 0; + } +# if defined(TOGL_WGL) + wglUseFontBitmaps(togl->tglGLHdc, first, count, (int) fontbase + first); + SelectObject(togl->tglGLHdc, oldFont); + Tk_FreeFont((Tk_Font) winfont); +# elif defined(TOGL_X11) + glXUseXFont(fontinfo->fid, first, count, (int) fontbase + first); +# elif defined(TOGL_AGL_CLASSIC) || defined(TOGL_AGL) + aglUseFont(togl->aglCtx, 1, 0, 14, /* for now, only app font, regular + * 14-point */ + 10, 118, fontbase + first); +# endif + + /* Record the list base and number of display lists for + * Togl_UnloadBitmapFont(). */ + { + int i; + + for (i = 0; i < MAX_FONTS; i++) { + if (ListBase[i] == 0) { + ListBase[i] = fontbase; + ListCount[i] = last + 1; + break; + } + } + } + + return fontbase; +} + + + +/* + * Release the display lists which were generated by Togl_LoadBitmapFont(). + */ +void +Togl_UnloadBitmapFont(const Togl *togl, GLuint fontbase) +{ + int i; + + (void) togl; + for (i = 0; i < MAX_FONTS; i++) { + if (ListBase[i] == fontbase) { + glDeleteLists(ListBase[i], ListCount[i]); + ListBase[i] = ListCount[i] = 0; + return; + } + } +} + +#endif /* TOGL_USE_FONTS */ + + +/* + * Overlay functions + */ + + +void +Togl_UseLayer(Togl *togl, int layer) +{ + if (!togl->OverlayWindow) + return; + if (layer == TOGL_OVERLAY) { +#if defined(TOGL_WGL) + int res = wglMakeCurrent(togl->tglGLHdc, togl->tglGLOverlayHglrc); + + assert(res == TRUE); +#elif defined(TOGL_X11) + (void) glXMakeCurrent(Tk_Display(togl->TkWin), + togl->OverlayWindow, togl->OverlayCtx); +# if defined(__sgi) + if (togl->OldStereoFlag) + oldStereoMakeCurrent(Tk_Display(togl->TkWin), + togl->OverlayWindow, togl->OverlayCtx); +# endif + /* __sgi STEREO */ +#endif /* TOGL_WGL */ + } else if (layer == TOGL_NORMAL) { +#if defined(TOGL_WGL) + int res = wglMakeCurrent(togl->tglGLHdc, togl->tglGLHglrc); + + assert(res == TRUE); +#elif defined(TOGL_X11) + (void) glXMakeCurrent(Tk_Display(togl->TkWin), + Tk_WindowId(togl->TkWin), togl->GlCtx); +# if defined(__sgi) + if (togl->OldStereoFlag) + oldStereoMakeCurrent(Tk_Display(togl->TkWin), + Tk_WindowId(togl->TkWin), togl->GlCtx); +# endif + /* __sgi STEREO */ +#endif /* TOGL_WGL */ + } else { + /* error */ + } +} + + +void +Togl_ShowOverlay(Togl *togl) +{ +#if defined(TOGL_X11) /* not yet implemented on Windows */ + if (togl->OverlayWindow) { + (void) XMapWindow(Tk_Display(togl->TkWin), togl->OverlayWindow); + (void) XInstallColormap(Tk_Display(togl->TkWin), togl->OverlayCmap); + togl->OverlayIsMapped = True; + } +#endif /* TOGL_X11 */ +} + + +void +Togl_HideOverlay(Togl *togl) +{ + if (togl->OverlayWindow && togl->OverlayIsMapped) { + (void) XUnmapWindow(Tk_Display(togl->TkWin), togl->OverlayWindow); + togl->OverlayIsMapped = False; + } +} + + +void +Togl_PostOverlayRedisplay(Togl *togl) +{ + if (!togl->OverlayUpdatePending + && togl->OverlayWindow && togl->OverlayDisplayProc) { + Tk_DoWhenIdle(RenderOverlay, (ClientData) togl); + togl->OverlayUpdatePending = True; + } +} + + +void +Togl_OverlayDisplayFunc(Togl_Callback *proc) +{ + DefaultOverlayDisplayProc = proc; +} + + +int +Togl_ExistsOverlay(const Togl *togl) +{ + return togl->OverlayFlag; +} + + +int +Togl_GetOverlayTransparentValue(const Togl *togl) +{ + return togl->OverlayTransparentPixel; +} + + +int +Togl_IsMappedOverlay(const Togl *togl) +{ + return togl->OverlayFlag && togl->OverlayIsMapped; +} + + +unsigned long +Togl_AllocColorOverlay(const Togl *togl, float red, float green, float blue) +{ +#if defined(TOGL_X11) /* not yet implemented on Windows */ + if (togl->OverlayFlag && togl->OverlayCmap) { + XColor xcol; + + xcol.red = (short) (red * 65535.0); + xcol.green = (short) (green * 65535.0); + xcol.blue = (short) (blue * 65535.0); + if (!XAllocColor(Tk_Display(togl->TkWin), togl->OverlayCmap, &xcol)) + return (unsigned long) -1; + return xcol.pixel; + } +#endif /* TOGL_X11 */ + return (unsigned long) -1; +} + + +void +Togl_FreeColorOverlay(const Togl *togl, unsigned long pixel) +{ +#if defined(TOGL_X11) /* not yet implemented on Windows */ + if (togl->OverlayFlag && togl->OverlayCmap) { + (void) XFreeColors(Tk_Display(togl->TkWin), togl->OverlayCmap, &pixel, + 1, 0); + } +#endif /* TOGL_X11 */ +} + + +/* + * User client data + */ + +void +Togl_ClientData(ClientData clientData) +{ + DefaultClientData = clientData; +} + + +ClientData +Togl_GetClientData(const Togl *togl) +{ + return togl->Client_Data; +} + + +void +Togl_SetClientData(Togl *togl, ClientData clientData) +{ + togl->Client_Data = clientData; +} + + +/* + * X11-only functions + * Contributed by Miguel A. De Riera Pasenau (miguel@DALILA.UPC.ES) + */ + +Display * +Togl_Display(const Togl *togl) +{ + return Tk_Display(togl->TkWin); +} + +Screen * +Togl_Screen(const Togl *togl) +{ + return Tk_Screen(togl->TkWin); +} + +int +Togl_ScreenNumber(const Togl *togl) +{ + return Tk_ScreenNumber(togl->TkWin); +} + +Colormap +Togl_Colormap(const Togl *togl) +{ + return Tk_Colormap(togl->TkWin); +} + + + +#ifdef MESA_COLOR_HACK +/* + * Let's know how many free colors do we have + */ +# if 0 +static unsigned char rojo[] = { 4, 39, 74, 110, 145, 181, 216, 251 }, verde[] = { +4, 39, 74, 110, 145, 181, 216, 251}, azul[] = { +4, 39, 74, 110, 145, 181, 216, 251}; + +unsigned char rojo[] = { 4, 36, 72, 109, 145, 182, 218, 251 }, verde[] = { +4, 36, 72, 109, 145, 182, 218, 251}, azul[] = { +4, 36, 72, 109, 145, 182, 218, 251}; + +azul[] = { +0, 85, 170, 255}; +# endif + +# define RLEVELS 5 +# define GLEVELS 9 +# define BLEVELS 5 + +/* to free dithered_rgb_colormap pixels allocated by Mesa */ +static unsigned long *ToglMesaUsedPixelCells = NULL; +static int ToglMesaUsedFreeCells = 0; + +static int +get_free_color_cells(Display *display, int screen, Colormap colormap) +{ + if (!ToglMesaUsedPixelCells) { + XColor xcol; + int i; + int colorsfailed, ncolors = XDisplayCells(display, screen); + + long r, g, b; + + ToglMesaUsedPixelCells = + (unsigned long *) calloc(ncolors, sizeof (unsigned long)); + + /* Allocate X colors and initialize color_table[], red_table[], etc */ + /* de Mesa 2.1: xmesa1.c setup_dithered_(...) */ + i = colorsfailed = 0; + for (r = 0; r < RLEVELS; r++) + for (g = 0; g < GLEVELS; g++) + for (b = 0; b < BLEVELS; b++) { + int exact; + + xcol.red = (r * 65535) / (RLEVELS - 1); + xcol.green = (g * 65535) / (GLEVELS - 1); + xcol.blue = (b * 65535) / (BLEVELS - 1); + noFaultXAllocColor(display, colormap, ncolors, + &xcol, &exact); + ToglMesaUsedPixelCells[i++] = xcol.pixel; + if (!exact) { + colorsfailed++; + } + } + ToglMesaUsedFreeCells = i; + + XFreeColors(display, colormap, ToglMesaUsedPixelCells, + ToglMesaUsedFreeCells, 0x00000000); + } + return ToglMesaUsedFreeCells; +} + + +static void +free_default_color_cells(Display *display, Colormap colormap) +{ + if (ToglMesaUsedPixelCells) { + XFreeColors(display, colormap, ToglMesaUsedPixelCells, + ToglMesaUsedFreeCells, 0x00000000); + free(ToglMesaUsedPixelCells); + ToglMesaUsedPixelCells = NULL; + ToglMesaUsedFreeCells = 0; + } +} +#endif + + +/* + * Generate EPS file. + * Contributed by Miguel A. De Riera Pasenau (miguel@DALILA.UPC.ES) + */ + +/* Function that creates a EPS File from a created pixmap on the current + * context. Based on the code from Copyright (c) Mark J. Kilgard, 1996. + * Parameters: name_file, b&w / Color flag, redraw function. The redraw + * function is needed in order to draw things into the new created pixmap. */ + +/* Copyright (c) Mark J. Kilgard, 1996. */ + +static GLvoid * +grabPixels(int inColor, unsigned int width, unsigned int height) +{ + GLvoid *buffer; + GLint swapbytes, lsbfirst, rowlength; + GLint skiprows, skippixels, alignment; + GLenum format; + unsigned int size; + + if (inColor) { + format = GL_RGB; + size = width * height * 3; + } else { + format = GL_LUMINANCE; + size = width * height * 1; + } + + buffer = (GLvoid *) malloc(size); + if (buffer == NULL) + return NULL; + + /* Save current modes. */ + glGetIntegerv(GL_PACK_SWAP_BYTES, &swapbytes); + glGetIntegerv(GL_PACK_LSB_FIRST, &lsbfirst); + glGetIntegerv(GL_PACK_ROW_LENGTH, &rowlength); + glGetIntegerv(GL_PACK_SKIP_ROWS, &skiprows); + glGetIntegerv(GL_PACK_SKIP_PIXELS, &skippixels); + glGetIntegerv(GL_PACK_ALIGNMENT, &alignment); + /* Little endian machines (DEC Alpha for example) could benefit from + * setting GL_PACK_LSB_FIRST to GL_TRUE instead of GL_FALSE, but this would + * * * * * * * * * require changing the generated bitmaps too. */ + glPixelStorei(GL_PACK_SWAP_BYTES, GL_FALSE); + glPixelStorei(GL_PACK_LSB_FIRST, GL_FALSE); + glPixelStorei(GL_PACK_ROW_LENGTH, 0); + glPixelStorei(GL_PACK_SKIP_ROWS, 0); + glPixelStorei(GL_PACK_SKIP_PIXELS, 0); + glPixelStorei(GL_PACK_ALIGNMENT, 1); + + /* Actually read the pixels. */ + glReadPixels(0, 0, width, height, format, + GL_UNSIGNED_BYTE, (GLvoid *) buffer); + + /* Restore saved modes. */ + glPixelStorei(GL_PACK_SWAP_BYTES, swapbytes); + glPixelStorei(GL_PACK_LSB_FIRST, lsbfirst); + glPixelStorei(GL_PACK_ROW_LENGTH, rowlength); + glPixelStorei(GL_PACK_SKIP_ROWS, skiprows); + glPixelStorei(GL_PACK_SKIP_PIXELS, skippixels); + glPixelStorei(GL_PACK_ALIGNMENT, alignment); + return buffer; +} + + +static int +generateEPS(const char *filename, int inColor, + unsigned int width, unsigned int height) +{ + FILE *fp; + GLvoid *pixels; + unsigned char *curpix; + unsigned int components, i; + int pos; + unsigned int bitpixel; + + pixels = grabPixels(inColor, width, height); + if (pixels == NULL) + return 1; + if (inColor) + components = 3; /* Red, green, blue. */ + else + components = 1; /* Luminance. */ + + fp = fopen(filename, "w"); + if (fp == NULL) { + return 2; + } + (void) fprintf(fp, "%%!PS-Adobe-2.0 EPSF-1.2\n"); + (void) fprintf(fp, "%%%%Creator: OpenGL pixmap render output\n"); + (void) fprintf(fp, "%%%%BoundingBox: 0 0 %d %d\n", width, height); + (void) fprintf(fp, "%%%%EndComments\n"); + + i = (((width * height) + 7) / 8) / 40; /* # of lines, 40 bytes per + * line */ + (void) fprintf(fp, "%%%%BeginPreview: %d %d %d %d\n%%", width, height, 1, + i); + pos = 0; + curpix = (unsigned char *) pixels; + for (i = 0; i < width * height * components;) { + bitpixel = 0; + if (inColor) { + double pix = 0; + + pix = 0.30 * (double) curpix[i] + 0.59 * (double) curpix[i + 1] + + 0.11 * (double) curpix[i + 2]; + i += 3; + if (pix > 127.0) + bitpixel |= 0x80; + pix = 0.30 * (double) curpix[i] + 0.59 * (double) curpix[i + 1] + + 0.11 * (double) curpix[i + 2]; + i += 3; + if (pix > 127.0) + bitpixel |= 0x40; + pix = 0.30 * (double) curpix[i] + 0.59 * (double) curpix[i + 1] + + 0.11 * (double) curpix[i + 2]; + i += 3; + if (pix > 127.0) + bitpixel |= 0x20; + pix = 0.30 * (double) curpix[i] + 0.59 * (double) curpix[i + 1] + + 0.11 * (double) curpix[i + 2]; + i += 3; + if (pix > 127.0) + bitpixel |= 0x10; + pix = 0.30 * (double) curpix[i] + 0.59 * (double) curpix[i + 1] + + 0.11 * (double) curpix[i + 2]; + i += 3; + if (pix > 127.0) + bitpixel |= 0x08; + pix = 0.30 * (double) curpix[i] + 0.59 * (double) curpix[i + 1] + + 0.11 * (double) curpix[i + 2]; + i += 3; + if (pix > 127.0) + bitpixel |= 0x04; + pix = 0.30 * (double) curpix[i] + 0.59 * (double) curpix[i + 1] + + 0.11 * (double) curpix[i + 2]; + i += 3; + if (pix > 127.0) + bitpixel |= 0x02; + pix = 0.30 * (double) curpix[i] + 0.59 * (double) curpix[i + 1] + + 0.11 * (double) curpix[i + 2]; + i += 3; + if (pix > 127.0) + bitpixel |= 0x01; + } else { + if (curpix[i++] > 0x7f) + bitpixel |= 0x80; + if (curpix[i++] > 0x7f) + bitpixel |= 0x40; + if (curpix[i++] > 0x7f) + bitpixel |= 0x20; + if (curpix[i++] > 0x7f) + bitpixel |= 0x10; + if (curpix[i++] > 0x7f) + bitpixel |= 0x08; + if (curpix[i++] > 0x7f) + bitpixel |= 0x04; + if (curpix[i++] > 0x7f) + bitpixel |= 0x02; + if (curpix[i++] > 0x7f) + bitpixel |= 0x01; + } + (void) fprintf(fp, "%02x", bitpixel); + if (++pos >= 40) { + (void) fprintf(fp, "\n%%"); + pos = 0; + } + } + if (pos) + (void) fprintf(fp, "\n%%%%EndPreview\n"); + else + (void) fprintf(fp, "%%EndPreview\n"); + + (void) fprintf(fp, "gsave\n"); + (void) fprintf(fp, "/bwproc {\n"); + (void) fprintf(fp, " rgbproc\n"); + (void) fprintf(fp, " dup length 3 idiv string 0 3 0\n"); + (void) fprintf(fp, " 5 -1 roll {\n"); + (void) fprintf(fp, " add 2 1 roll 1 sub dup 0 eq\n"); + (void) fprintf(fp, " { pop 3 idiv 3 -1 roll dup 4 -1 roll dup\n"); + (void) fprintf(fp, " 3 1 roll 5 -1 roll put 1 add 3 0 }\n"); + (void) fprintf(fp, " { 2 1 roll } ifelse\n"); + (void) fprintf(fp, " } forall\n"); + (void) fprintf(fp, " pop pop pop\n"); + (void) fprintf(fp, "} def\n"); + (void) fprintf(fp, "systemdict /colorimage known not {\n"); + (void) fprintf(fp, " /colorimage {\n"); + (void) fprintf(fp, " pop\n"); + (void) fprintf(fp, " pop\n"); + (void) fprintf(fp, " /rgbproc exch def\n"); + (void) fprintf(fp, " { bwproc } image\n"); + (void) fprintf(fp, " } def\n"); + (void) fprintf(fp, "} if\n"); + (void) fprintf(fp, "/picstr %d string def\n", width * components); + (void) fprintf(fp, "%d %d scale\n", width, height); + (void) fprintf(fp, "%d %d %d\n", width, height, 8); + (void) fprintf(fp, "[%d 0 0 %d 0 0]\n", width, height); + (void) fprintf(fp, "{currentfile picstr readhexstring pop}\n"); + (void) fprintf(fp, "false %d\n", components); + (void) fprintf(fp, "colorimage\n"); + + curpix = (unsigned char *) pixels; + pos = 0; + for (i = width * height * components; i != 0; i--) { + (void) fprintf(fp, "%02hx", *curpix++); + if (++pos >= 40) { + (void) fprintf(fp, "\n"); + pos = 0; + } + } + if (pos) + (void) fprintf(fp, "\n"); + + (void) fprintf(fp, "grestore\n"); + free(pixels); + if (fclose(fp) != 0) + return 1; + return 0; +} + + +/* int Togl_DumpToEpsFile( const Togl *togl, const char *filename, int inColor, + * void (*user_redraw)(void)) */ +/* changed by GG */ +int +Togl_DumpToEpsFile(const Togl *togl, const char *filename, + int inColor, void (*user_redraw) (const Togl *)) +{ + Bool using_mesa = False; + +#if 0 + Pixmap eps_pixmap; + GLXPixmap eps_glxpixmap; + XVisualInfo *vi = togl->VisInfo; + Window win = Tk_WindowId(togl->TkWin); +#endif + int retval; + unsigned int width = togl->Width, height = togl->Height; + +#if defined(TOGL_X11) + Display *dpy = Tk_Display(togl->TkWin); + int scrnum = Tk_ScreenNumber(togl->TkWin); + + if (strstr(glXQueryServerString(dpy, scrnum, GLX_VERSION), "Mesa")) + using_mesa = True; + else +#endif /* TOGL_X11 */ + using_mesa = False; + /* I don't use Pixmap do drawn into, because the code should link with Mesa + * libraries and OpenGL libraries, and the which library we use at run time + * should not matter, but the name of the calls differs one from another: + * MesaGl: glXCreateGLXPixmapMESA( dpy, vi, eps_pixmap, + * Tk_Colormap(togl->TkWin)) OpenGl: glXCreateGLXPixmap( dpy, vi, + * eps_pixmap); instead of this I read direct from back buffer of the + * screeen. */ +#if 0 + eps_pixmap = XCreatePixmap(dpy, win, width, height, vi->depth); + if (using_mesa) + eps_glxpixmap = + glXCreateGLXPixmapMESA(dpy, vi, eps_pixmap, + Tk_Colormap(togl->TkWin)); + else + eps_glxpixmap = glXCreateGLXPixmap(dpy, vi, eps_pixmap); + + glXMakeCurrent(dpy, eps_glxpixmap, togl->GlCtx); + user_redraw(); +#endif + if (!togl->RgbaFlag) { + +#if defined(TOGL_WGL) + /* Due to the lack of a unique inverse mapping from the frame buffer to + * the logical palette we need a translation map from the complete + * logical palette. */ + { + int n, i; + TkWinColormap *cmap = (TkWinColormap *) Tk_Colormap(togl->TkWin); + LPPALETTEENTRY entry = + malloc(togl->EpsMapSize * sizeof (PALETTEENTRY)); + n = GetPaletteEntries(cmap->palette, 0, togl->EpsMapSize, entry); + for (i = 0; i < n; i++) { + togl->EpsRedMap[i] = (GLfloat) (entry[i].peRed / 255.0); + togl->EpsGreenMap[i] = (GLfloat) (entry[i].peGreen / 255.0); + togl->EpsBlueMap[i] = (GLfloat) (entry[i].peBlue / 255.0); + } + free(entry); + } +#endif /* TOGL_WGL */ + + glPixelMapfv(GL_PIXEL_MAP_I_TO_R, togl->EpsMapSize, togl->EpsRedMap); + glPixelMapfv(GL_PIXEL_MAP_I_TO_G, togl->EpsMapSize, togl->EpsGreenMap); + glPixelMapfv(GL_PIXEL_MAP_I_TO_B, togl->EpsMapSize, togl->EpsBlueMap); + } + /* user_redraw(); */ + user_redraw(togl); /* changed by GG */ + /* glReadBuffer( GL_FRONT); */ + /* by default it read GL_BACK in double buffer mode */ + glFlush(); + retval = generateEPS(filename, inColor, width, height); +#if 0 + glXMakeCurrent(dpy, win, togl->GlCtx); + glXDestroyGLXPixmap(dpy, eps_glxpixmap); + XFreePixmap(dpy, eps_pixmap); +#endif + return retval; +} + +/* + * Full screen stereo for SGI graphics + * Contributed by Ben Evans (Ben.Evans@anusf.anu.edu.au) + * This code was based on SGI's /usr/share/src/OpenGL/teach/stereo + */ + +#if defined(__sgi) + +static struct stereoStateRec +{ + Bool useSGIStereo; + Display *currentDisplay; + Window currentWindow; + GLXContext currentContext; + GLenum currentDrawBuffer; + int currentStereoBuffer; + Bool enabled; + char *stereoCommand; + char *restoreCommand; +} stereo; + +/* call instead of glDrawBuffer */ +void +Togl_OldStereoDrawBuffer(GLenum mode) +{ + if (stereo.useSGIStereo) { + stereo.currentDrawBuffer = mode; + switch (mode) { + case GL_FRONT: + case GL_BACK: + case GL_FRONT_AND_BACK: + /* + ** Simultaneous drawing to both left and right buffers isn't + ** really possible if we don't have a stereo capable visual. + ** For now just fall through and use the left buffer. + */ + case GL_LEFT: + case GL_FRONT_LEFT: + case GL_BACK_LEFT: + stereo.currentStereoBuffer = STEREO_BUFFER_LEFT; + break; + case GL_RIGHT: + case GL_FRONT_RIGHT: + stereo.currentStereoBuffer = STEREO_BUFFER_RIGHT; + mode = GL_FRONT; + break; + case GL_BACK_RIGHT: + stereo.currentStereoBuffer = STEREO_BUFFER_RIGHT; + mode = GL_BACK; + break; + default: + break; + } + if (stereo.currentDisplay && stereo.currentWindow) { + glXWaitGL(); /* sync with GL command stream before calling X + */ + XSGISetStereoBuffer(stereo.currentDisplay, + stereo.currentWindow, stereo.currentStereoBuffer); + glXWaitX(); /* sync with X command stream before calling GL + */ + } + } + glDrawBuffer(mode); +} + +/* call instead of glClear */ +void +Togl_OldStereoClear(GLbitfield mask) +{ + GLenum drawBuffer; + + if (stereo.useSGIStereo) { + drawBuffer = stereo.currentDrawBuffer; + switch (drawBuffer) { + case GL_FRONT: + Togl_OldStereoDrawBuffer(GL_FRONT_RIGHT); + glClear(mask); + Togl_OldStereoDrawBuffer(drawBuffer); + break; + case GL_BACK: + Togl_OldStereoDrawBuffer(GL_BACK_RIGHT); + glClear(mask); + Togl_OldStereoDrawBuffer(drawBuffer); + break; + case GL_FRONT_AND_BACK: + Togl_OldStereoDrawBuffer(GL_RIGHT); + glClear(mask); + Togl_OldStereoDrawBuffer(drawBuffer); + break; + case GL_LEFT: + case GL_FRONT_LEFT: + case GL_BACK_LEFT: + case GL_RIGHT: + case GL_FRONT_RIGHT: + case GL_BACK_RIGHT: + default: + break; + } + } + glClear(mask); +} + +static void +oldStereoMakeCurrent(Display *dpy, Window win, GLXContext ctx) +{ + + if (dpy && (dpy != stereo.currentDisplay)) { + int event, error; + + /* Make sure new Display supports SGIStereo */ + if (XSGIStereoQueryExtension(dpy, &event, &error) == False) { + dpy = NULL; + } + } + if (dpy && win && (win != stereo.currentWindow)) { + /* Make sure new Window supports SGIStereo */ + if (XSGIQueryStereoMode(dpy, win) == X_STEREO_UNSUPPORTED) { + win = None; + } + } + if (ctx && (ctx != stereo.currentContext)) { + GLint drawBuffer; + + glGetIntegerv(GL_DRAW_BUFFER, &drawBuffer); + Togl_OldStereoDrawBuffer((GLenum) drawBuffer); + } + stereo.currentDisplay = dpy; + stereo.currentWindow = win; + stereo.currentContext = ctx; +} + + +/* call before using stereo */ +static void +oldStereoInit(Togl *togl, int stereoEnabled) +{ + stereo.useSGIStereo = stereoEnabled; + stereo.currentDisplay = NULL; + stereo.currentWindow = None; + stereo.currentContext = NULL; + stereo.currentDrawBuffer = GL_NONE; + stereo.currentStereoBuffer = STEREO_BUFFER_NONE; + stereo.enabled = False; +} + +#endif /* __sgi STEREO */ + + +void +Togl_StereoFrustum(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, + GLfloat zNear, GLfloat zFar, GLfloat eyeDist, GLfloat eyeOffset) +{ + GLfloat eyeShift = (eyeDist - zNear) * (eyeOffset / eyeDist); + + glFrustum(left + eyeShift, right + eyeShift, bottom, top, zNear, zFar); + glTranslatef(-eyeShift, 0, 0); +} + + +#ifdef TOGL_AGL_CLASSIC +/* needed to make shared library on Mac with CodeWarrior; should be overridden + * by user app */ +/* + * int main(int argc, char *argv[]) { return -1; } */ + +/* the following code is borrowed from tkMacAppInit.c */ + +/* + *---------------------------------------------------------------------- + * + * MacintoshInit -- + * + * This procedure calls Mac specific initilization calls. Most of + * these calls must be made as soon as possible in the startup + * process. + * + * Results: + * Returns TCL_OK if everything went fine. If it didn't the + * application should probably fail. + * + * Side effects: + * Inits the application. + * + *---------------------------------------------------------------------- + */ + +int +Togl_MacInit(void) +{ + int i; + long result, mask = 0x0700; /* mask = system 7.x */ + +# if GENERATING68K && !GENERATINGCFM + SetApplLimit(GetApplLimit() - (TK_MAC_68K_STACK_GROWTH)); +# endif + MaxApplZone(); + for (i = 0; i < 4; i++) { + (void) MoreMasters(); + } + + /* + * Tk needs us to set the qd pointer it uses. This is needed + * so Tk doesn't have to assume the availablity of the qd global + * variable. Which in turn allows Tk to be used in code resources. + */ + tcl_macQdPtr = &qd; + + /* + * If appearance is present, then register Tk as an Appearance client + * This means that the mapping from non-Appearance to Appearance cdefs + * will be done for Tk regardless of the setting in the Appearance + * control panel. + */ + if (TkMacHaveAppearance()) { + RegisterAppearanceClient(); + } + + InitGraf(&tcl_macQdPtr->thePort); + InitFonts(); + InitWindows(); + InitMenus(); + InitDialogs((long) NULL); + InitCursor(); + + /* + * Make sure we are running on system 7 or higher + */ + if ((NGetTrapAddress(_Gestalt, ToolTrap) == + NGetTrapAddress(_Unimplemented, ToolTrap)) + || (((Gestalt(gestaltSystemVersion, &result) != noErr) + || (result < mask)))) { + panic("Tcl/Tk requires System 7 or higher."); + } + + /* + * Make sure we have color quick draw + * (this means we can't run on 68000 macs) + */ + if (((Gestalt(gestaltQuickdrawVersion, &result) != noErr) + || (result < gestalt32BitQD13))) { + panic("Tk requires Color QuickDraw."); + } + + FlushEvents(everyEvent, 0); + SetEventMask(everyEvent); + + Tcl_MacSetEventProc(TkMacConvertEvent); + return TCL_OK; +} + +int +Togl_MacSetupMainInterp(Tcl_Interp *interp) +{ + TkMacInitAppleEvents(interp); + TkMacInitMenus(interp); + return TCL_OK; +} + +#endif /* TOGL_AGL_CLASSIC */ diff --git a/ng/Togl-1.7/togl.h b/ng/Togl-1.7/togl.h new file mode 100644 index 00000000..c836fef5 --- /dev/null +++ b/ng/Togl-1.7/togl.h @@ -0,0 +1,242 @@ +/* $Id: togl.h,v 1.28 2005/10/27 07:45:48 gregcouch Exp $ */ + +/* vi:set sw=4: */ + +/* + * Togl - a Tk OpenGL widget + * + * Copyright (C) 1996-1998 Brian Paul and Ben Bederson + * See the LICENSE file for copyright details. + */ + + +#ifndef TOGL_H +# define TOGL_H + +# include "togl_ws.h" + +# ifdef TOGL_WGL +# define WIN32_LEAN_AND_MEAN +# include +# undef WIN32_LEAN_AND_MEAN +# if defined(_MSC_VER) +# define DllEntryPoint DllMain +# endif +# endif + +# ifdef _WIN32 +# define TOGL_EXTERN __declspec(dllexport) extern +# else +# define TOGL_EXTERN extern +# endif /* _WIN32 */ + +# ifdef TOGL_AGL_CLASSIC +# ifndef MAC_TCL +# define MAC_TCL 1 +# endif +# endif + +# ifdef TOGL_AGL +# ifndef MAC_OSX_TCL +# define MAC_OSX_TCL 1 +# endif +# ifndef MAC_OSX_TK +# define MAC_OSX_TK 1 +# endif +# endif + +# include +# include +# if defined(TOGL_AGL) || defined(TOGL_AGL_CLASSIC) +# include +# else +# include +# endif + +# ifdef __sgi +# include +# include +# endif + +# ifndef CONST84 +# define CONST84 +# endif + +# ifndef NULL +# define NULL 0 +# endif + +# ifndef TOGL_USE_FONTS +# define TOGL_USE_FONTS 1 /* needed for demos */ +# endif + +# ifdef __cplusplus +/* *INDENT-OFF* */ +extern "C" { +/* *INDENT-ON* */ +# endif + +# define TOGL_VERSION "1.7" +# define TOGL_MAJOR_VERSION 1 +# define TOGL_MINOR_VERSION 7 + +/* + * "Standard" fonts which can be specified to Togl_LoadBitmapFont() + */ +# define TOGL_BITMAP_8_BY_13 ((char *) 1) +# define TOGL_BITMAP_9_BY_15 ((char *) 2) +# define TOGL_BITMAP_TIMES_ROMAN_10 ((char *) 3) +# define TOGL_BITMAP_TIMES_ROMAN_24 ((char *) 4) +# define TOGL_BITMAP_HELVETICA_10 ((char *) 5) +# define TOGL_BITMAP_HELVETICA_12 ((char *) 6) +# define TOGL_BITMAP_HELVETICA_18 ((char *) 7) + +/* + * Normal and overlay plane constants + */ +# define TOGL_NORMAL 1 +# define TOGL_OVERLAY 2 + +struct Togl; +typedef struct Togl Togl; + +typedef void (Togl_Callback) (Togl *togl); +typedef int (Togl_CmdProc) (Togl *togl, int argc, CONST84 char *argv[]); + +TOGL_EXTERN int Togl_Init(Tcl_Interp *interp); + +/* + * Default/initial callback setup functions + */ + +TOGL_EXTERN void Togl_CreateFunc(Togl_Callback *proc); +TOGL_EXTERN void Togl_DisplayFunc(Togl_Callback *proc); +TOGL_EXTERN void Togl_ReshapeFunc(Togl_Callback *proc); +TOGL_EXTERN void Togl_DestroyFunc(Togl_Callback *proc); +TOGL_EXTERN void Togl_TimerFunc(Togl_Callback *proc); +TOGL_EXTERN void Togl_ResetDefaultCallbacks(void); + +/* + * Change callbacks for existing widget + */ + +TOGL_EXTERN void Togl_SetCreateFunc(Togl *togl, Togl_Callback *proc); +TOGL_EXTERN void Togl_SetDisplayFunc(Togl *togl, Togl_Callback *proc); +TOGL_EXTERN void Togl_SetReshapeFunc(Togl *togl, Togl_Callback *proc); +TOGL_EXTERN void Togl_SetDestroyFunc(Togl *togl, Togl_Callback *proc); +TOGL_EXTERN void Togl_SetTimerFunc(Togl *togl, Togl_Callback *proc); + +/* + * Miscellaneous + */ + +TOGL_EXTERN int Togl_Configure(Tcl_Interp *interp, Togl *togl, + int argc, const char *argv[], int flags); +TOGL_EXTERN void Togl_MakeCurrent(const Togl *togl); +TOGL_EXTERN void Togl_CreateCommand(char *cmd_name, Togl_CmdProc *cmd_proc); +TOGL_EXTERN void Togl_PostRedisplay(Togl *togl); +TOGL_EXTERN void Togl_SwapBuffers(const Togl *togl); + +/* + * Query functions + */ + +TOGL_EXTERN const char *Togl_Ident(const Togl *togl); +TOGL_EXTERN int Togl_Width(const Togl *togl); +TOGL_EXTERN int Togl_Height(const Togl *togl); +TOGL_EXTERN Tcl_Interp *Togl_Interp(const Togl *togl); +TOGL_EXTERN Tk_Window Togl_TkWin(const Togl *togl); + +/* + * Color Index mode + */ + +TOGL_EXTERN unsigned long Togl_AllocColor(const Togl *togl, float red, + float green, float blue); +TOGL_EXTERN void Togl_FreeColor(const Togl *togl, unsigned long index); +TOGL_EXTERN void Togl_SetColor(const Togl *togl, unsigned long index, + float red, float green, float blue); + +# if TOGL_USE_FONTS == 1 +/* + * Bitmap fonts + */ + +TOGL_EXTERN GLuint Togl_LoadBitmapFont(const Togl *togl, const char *fontname); +TOGL_EXTERN void Togl_UnloadBitmapFont(const Togl *togl, GLuint fontbase); + +# endif +/* + * Overlay functions + */ + +TOGL_EXTERN void Togl_UseLayer(Togl *togl, int layer); +TOGL_EXTERN void Togl_ShowOverlay(Togl *togl); +TOGL_EXTERN void Togl_HideOverlay(Togl *togl); +TOGL_EXTERN void Togl_PostOverlayRedisplay(Togl *togl); +TOGL_EXTERN void Togl_OverlayDisplayFunc(Togl_Callback *proc); +TOGL_EXTERN int Togl_ExistsOverlay(const Togl *togl); +TOGL_EXTERN int Togl_GetOverlayTransparentValue(const Togl *togl); +TOGL_EXTERN int Togl_IsMappedOverlay(const Togl *togl); +TOGL_EXTERN unsigned long Togl_AllocColorOverlay(const Togl *togl, + float red, float green, float blue); +TOGL_EXTERN void Togl_FreeColorOverlay(const Togl *togl, unsigned long index); + +/* + * User client data + */ + +TOGL_EXTERN void Togl_ClientData(ClientData clientData); +TOGL_EXTERN ClientData Togl_GetClientData(const Togl *togl); +TOGL_EXTERN void Togl_SetClientData(Togl *togl, ClientData clientData); + +# ifdef TOGL_X11 +/* + * X11-only commands. + * Contributed by Miguel A. De Riera Pasenau (miguel@DALILA.UPC.ES) + */ + +TOGL_EXTERN Display *Togl_Display(const Togl *togl); +TOGL_EXTERN Screen *Togl_Screen(const Togl *togl); +TOGL_EXTERN int Togl_ScreenNumber(const Togl *togl); +TOGL_EXTERN Colormap Togl_Colormap(const Togl *togl); + +# endif +# ifdef __sgi +/* + * SGI stereo-only commands. + * Contributed by Ben Evans (Ben.Evans@anusf.anu.edu.au) + */ + +TOGL_EXTERN void Togl_OldStereoDrawBuffer(GLenum mode); +TOGL_EXTERN void Togl_OldStereoClear(GLbitfield mask); +# endif + +TOGL_EXTERN void Togl_StereoFrustum(GLfloat left, GLfloat right, GLfloat bottom, + GLfloat top, GLfloat near, GLfloat far, GLfloat eyeDist, + GLfloat eyeOffset); + +/* + * Generate EPS file. + * Contributed by Miguel A. De Riera Pasenau (miguel@DALILA.UPC.ES) + */ + +TOGL_EXTERN int Togl_DumpToEpsFile(const Togl *togl, const char *filename, + int inColor, void (*user_redraw) (const Togl *)); + +# ifdef TOGL_AGL_CLASSIC +/* + * Mac-specific setup functions + */ +extern int Togl_MacInit(void); +extern int Togl_MacSetupMainInterp(Tcl_Interp *interp); +# endif + +# ifdef __cplusplus +/* *INDENT-OFF* */ +} +/* *INDENT-ON* */ +# endif + + +#endif diff --git a/ng/Togl-1.7/togl_ws.h.in b/ng/Togl-1.7/togl_ws.h.in new file mode 100644 index 00000000..3a01a9c3 --- /dev/null +++ b/ng/Togl-1.7/togl_ws.h.in @@ -0,0 +1,7 @@ +#ifndef TOGL_WS_H +# define TOGL_WS_H + +/* define windowing system togl is compiled with */ +# define @TOGL_WINDOWINGSYSTEM@ + +#endif diff --git a/ng/Togl-1.7/tree2.rgba b/ng/Togl-1.7/tree2.rgba new file mode 100644 index 00000000..67b02799 Binary files /dev/null and b/ng/Togl-1.7/tree2.rgba differ