Attachment "Makefile.txt" to
ticket [f50ff6f929]
added by
sakthivp
2014-03-11 07:20:10.
Also attachment "Makefile" to
ticket [1abbfcdff1]
added by
sakthivp
2014-03-07 07:38:47.
# Generated automatically from Makefile.in by configure.
#
# This file is a Makefile for Tcl. 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.
#
# RCS: @(#) $Id: Makefile.in,v 1.121.2.9 2004/11/18 10:21:55 rmax Exp $
VERSION = 8.4
MAJOR_VERSION = 8
MINOR_VERSION = 4
PATCH_LEVEL = .9
#----------------------------------------------------------------
# Things you can change to personalize the Makefile for your own
# site (you can make these changes in either Makefile.in or
# Makefile, but changes to Makefile will get lost if you re-run
# the configuration script).
#----------------------------------------------------------------
# Default top-level directories in which to install architecture-
# specific files (exec_prefix) and machine-independent files such
# as scripts (prefix). The values specified here may be overridden
# at configure-time with the --exec-prefix and --prefix options
# to the "configure" script. The *dir vars are standard configure
# substitutions that are based off prefix and exec_prefix.
prefix = /scratch/sakthi/Tcl_8.4.9_debug
exec_prefix = /scratch/sakthi/Tcl_8.4.9_debug
bindir = ${exec_prefix}/bin
libdir = /scratch/sakthi/Tcl_8.4.9_debug/lib
includedir = ${prefix}/include
mandir = ${prefix}/man
# The following definition can be set to non-null for special systems
# like AFS with replication. It allows the pathnames used for installation
# to be different than those used for actually reference files at
# run-time. INSTALL_ROOT is prepended to $prefix and $exec_prefix
# when installing files.
INSTALL_ROOT =
# Path for the platform independent Tcl scripting libraries:
TCL_LIBRARY = $(prefix)/lib/tcl$(VERSION)
# Path to use at runtime to refer to LIB_INSTALL_DIR:
LIB_RUNTIME_DIR = $(libdir)
# Directory in which to install the program tclsh:
BIN_INSTALL_DIR = $(INSTALL_ROOT)$(bindir)
# Directory in which to install libtcl.so or libtcl.a:
LIB_INSTALL_DIR = $(INSTALL_ROOT)$(libdir)
# Path name to use when installing library scripts.
SCRIPT_INSTALL_DIR = $(INSTALL_ROOT)$(TCL_LIBRARY)
# Directory in which to install the include file tcl.h:
INCLUDE_INSTALL_DIR = $(INSTALL_ROOT)$(includedir)
# Top-level directory in which to install manual entries:
MAN_INSTALL_DIR = $(INSTALL_ROOT)$(mandir)
# Directory in which to install manual entry for tclsh:
MAN1_INSTALL_DIR = $(MAN_INSTALL_DIR)/man1
# Directory in which to install manual entries for Tcl's C library
# procedures:
MAN3_INSTALL_DIR = $(MAN_INSTALL_DIR)/man3
# Directory in which to install manual entries for the built-in
# Tcl commands:
MANN_INSTALL_DIR = $(MAN_INSTALL_DIR)/mann
# Package search path.
TCL_PACKAGE_PATH = /scratch/sakthi/Tcl_8.4.9_debug/lib
# Libraries built with optimization switches have this additional extension
TCL_DBGX = g
# warning flags
CFLAGS_WARNING =
# The default switches for optimization or debugging
CFLAGS_DEBUG = -g
CFLAGS_OPTIMIZE = -O
# To change the compiler switches, for example to change from optimization to
# debugging symbols, change the following line:
#CFLAGS = $(CFLAGS_DEBUG)
#CFLAGS = $(CFLAGS_OPTIMIZE)
#CFLAGS = $(CFLAGS_DEBUG) $(CFLAGS_OPTIMIZE)
CFLAGS = $(CFLAGS_DEBUG) -DTCL_DBGX=$(TCL_DBGX)
# Flags to pass to the linker
LDFLAGS_DEBUG =
LDFLAGS_OPTIMIZE =
LDFLAGS = $(LDFLAGS_DEBUG)
# To disable ANSI-C procedure prototypes reverse the comment characters
# on the following lines:
PROTO_FLAGS =
#PROTO_FLAGS = -DNO_PROTOTYPE
# Mathematical functions like sin and atan2 are enabled for expressions
# by default. To disable them, reverse the comment characters on the
# following pairs of lines:
MATH_FLAGS =
#MATH_FLAGS = -DTCL_NO_MATH
MATH_LIBS = -lm
#MATH_LIBS =
# If you use the setenv, putenv, or unsetenv procedures to modify
# environment variables in your application and you'd like those
# modifications to appear in the "env" Tcl variable, switch the
# comments on the two lines below so that Tcl provides these
# procedures instead of your standard C library.
ENV_FLAGS =
#ENV_FLAGS = -DTclSetEnv=setenv -DTcl_PutEnv=putenv -DTclUnsetEnv=unsetenv
# To compile for non-UNIX systems (so that only the non-UNIX-specific
# commands are available), reverse the comment characters on the
# following pairs of lines. In addition, you'll have to provide your
# own replacement for the "panic" procedure (see panic.c for what
# the current one does).
GENERIC_FLAGS =
#GENERIC_FLAGS = -DTCL_GENERIC_ONLY
UNIX_OBJS = tclUnixChan.o tclUnixEvent.o tclUnixFCmd.o \
tclUnixFile.o tclUnixPipe.o tclUnixSock.o \
tclUnixTime.o tclUnixInit.o tclUnixThrd.o
#UNIX_OBJS =
NOTIFY_OBJS = tclUnixNotfy.o
#NOTIFY_OBJS =
# To enable memory debugging reverse the comment characters on the following
# lines or call configure with --enable-symbols=mem
# Warning: if you enable memory debugging, you must do it *everywhere*,
# including all the code that calls Tcl, and you must use ckalloc and
# ckfree everywhere instead of malloc and free.
MEM_DEBUG_FLAGS =
#MEM_DEBUG_FLAGS = -DTCL_MEM_DEBUG
TCL_STUB_LIB_FILE = libtclstub8.4${TCL_DBGX}.a
#TCL_STUB_LIB_FILE = libtclstub.a
# Generic stub lib name used in rules that apply to tcl and tk
STUB_LIB_FILE = ${TCL_STUB_LIB_FILE}
TCL_STUB_LIB_FLAG = -ltclstub8.4${TCL_DBGX}
#TCL_STUB_LIB_FLAG = -ltclstub
# To enable compilation debugging reverse the comment characters on one
# of the following lines or call configure with --enable-symbols=compile
COMPILE_DEBUG_FLAGS =
#COMPILE_DEBUG_FLAGS = -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS
# To compile without backward compatibility and deprecated code
# uncomment the following
NO_DEPRECATED_FLAGS =
#NO_DEPRECATED_FLAGS = -DTCL_NO_DEPRECATED
# Some versions of make, like SGI's, use the following variable to
# determine which shell to use for executing commands:
SHELL = /bin/sh
# Tcl used to let the configure script choose which program to use
# for installing, but there are just too many different versions of
# "install" around; better to use the install-sh script that comes
# with the distribution, which is slower but guaranteed to work.
INSTALL_STRIP_PROGRAM = -s
INSTALL_STRIP_LIBRARY = -S -S
INSTALL = ./install-sh -c
INSTALL_PROGRAM = ${INSTALL}
INSTALL_LIBRARY = ${INSTALL}
INSTALL_DATA = ${INSTALL} -m 644
# TCL_EXE is the name of a tclsh executable that is available *BEFORE*
# running make for the first time. Certain build targets (make genstubs)
# need it to be available on the PATH. This executable should *NOT* be
# required just to do a normal build although it can be required to run
# make dist.
TCL_EXE = tclsh
# The symbols below provide support for dynamic loading and shared
# libraries. See configure.in for a description of what the
# symbols mean. The values of the symbols are normally set by the
# configure script. You shouldn't normally need to modify any of
# these definitions by hand.
STLIB_LD = ${AR} cr
SHLIB_LD = /usr/ccs/bin/ld -G -z text
SHLIB_CFLAGS = -KPIC
SHLIB_LD_FLAGS =
SHLIB_LD_LIBS = ${LIBS}
TCL_SHLIB_LD_EXTRAS =
SHLIB_SUFFIX = .so
#SHLIB_SUFFIX =
DLTEST_TARGETS = dltest.marker
# Additional search flags needed to find the various shared libraries
# at run-time. The first symbol is for use when creating a binary
# with cc, and the second is for use when running ld directly.
CC_SEARCH_FLAGS = -Wl,-R,${LIB_RUNTIME_DIR}
LD_SEARCH_FLAGS = -R ${LIB_RUNTIME_DIR}
# The following symbol is defined to "$(DLTEST_TARGETS)" if dynamic
# loading is available; this causes everything in the "dltest"
# subdirectory to be built when making "tcltest. If dynamic loading
# isn't available, configure defines this symbol to an empty string,
# in which case the shared libraries aren't built.
BUILD_DLTEST = $(DLTEST_TARGETS)
#BUILD_DLTEST =
TCL_LIB_FILE = libtcl8.4${TCL_DBGX}.so
#TCL_LIB_FILE = libtcl.a
# Generic lib name used in rules that apply to tcl and tk
LIB_FILE = ${TCL_LIB_FILE}
TCL_LIB_FLAG = -ltcl8.4${TCL_DBGX}
#TCL_LIB_FLAG = -ltcl
TCL_EXP_FILE =
TCL_BUILD_EXP_FILE =
# support for embedded libraries on Darwin / Mac OS X
DYLIB_INSTALL_DIR = ${LIB_RUNTIME_DIR}
#----------------------------------------------------------------
# The information below is modified by the configure script when
# Makefile is generated from Makefile.in. You shouldn't normally
# modify any of this stuff by hand.
#----------------------------------------------------------------
COMPAT_OBJS =
AC_FLAGS = -D_REENTRANT=1 -D_POSIX_PTHREAD_SEMANTICS=1 -DTCL_MEM_DEBUG=1 -DTCL_COMPILE_DEBUG=1 -DTCL_COMPILE_STATS=1 -DTCL_WIDE_INT_TYPE=long\ long -DHAVE_STRUCT_DIRENT64=1 -DHAVE_STRUCT_STAT64=1 -DHAVE_OPEN64=1 -DHAVE_LSEEK64=1 -DHAVE_TYPE_OFF64_T=1 -DWORDS_BIGENDIAN=1 -DHAVE_GETCWD=1 -DHAVE_OPENDIR=1 -DHAVE_STRSTR=1 -DHAVE_STRTOL=1 -DHAVE_STRTOLL=1 -DHAVE_STRTOULL=1 -DHAVE_TMPNAM=1 -DHAVE_WAITPID=1 -DHAVE_LIMITS_H=1 -DHAVE_UNISTD_H=1 -DHAVE_SYS_PARAM_H=1 -DUSE_TERMIOS=1 -DHAVE_SYS_TIME_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_TZNAME=1 -DHAVE_GMTIME_R=1 -DHAVE_LOCALTIME_R=1 -DHAVE_TIMEZONE_VAR=1 -DHAVE_ST_BLKSIZE=1 -DSTDC_HEADERS=1 -DNO_UNION_WAIT=1 -DHAVE_SIGNED_CHAR=1 -DHAVE_LANGINFO=1 -DHAVE_SYS_IOCTL_H=1 -DHAVE_SYS_FILIO_H=1
AR = ar
RANLIB = ranlib
SRC_DIR = .
TOP_DIR = ./..
GENERIC_DIR = $(TOP_DIR)/generic
COMPAT_DIR = $(TOP_DIR)/compat
TOOL_DIR = $(TOP_DIR)/tools
UNIX_DIR = $(TOP_DIR)/unix
MAC_OSX_DIR = $(TOP_DIR)/macosx
# Must be absolute because of the cd dltest $(DLTEST_DIR)/configure below.
DLTEST_DIR = /scratch/sakthi/Tcl_8.4.9_source/tcl8.4.9/unix/dltest
# Must be absolute to so the corresponding tcltest's tcl_library is absolute.
TCL_BUILDTIME_LIBRARY = /scratch/sakthi/Tcl_8.4.9_source/tcl8.4.9/library
CC = cc
#CC = purify -best-effort cc -DPURIFY
# Flags to be passed to installManPage to control whether the manpages
# should be compressed and linked with softlinks
MAN_FLAGS =
#----------------------------------------------------------------
# The information below is usually usable as is. The configure
# script won't modify it and it only exists to make working
# around selected rare system configurations easier.
#----------------------------------------------------------------
GDB = gdb
DDD = ddd
#----------------------------------------------------------------
# The information below should be usable as is. The configure
# script won't modify it and you shouldn't need to modify it
# either.
#----------------------------------------------------------------
CC_SWITCHES = ${CFLAGS} ${CFLAGS_WARNING} ${SHLIB_CFLAGS} \
-I${GENERIC_DIR} -I${SRC_DIR} \
${AC_FLAGS} ${MATH_FLAGS} ${GENERIC_FLAGS} ${PROTO_FLAGS} ${MEM_DEBUG_FLAGS} \
${COMPILE_DEBUG_FLAGS} ${NO_DEPRECATED_FLAGS} ${ENV_FLAGS} \
-DTCL_SHLIB_EXT=\"${SHLIB_SUFFIX}\"
STUB_CC_SWITCHES = ${CFLAGS} ${CFLAGS_WARNING} ${SHLIB_CFLAGS} \
-I${GENERIC_DIR} -I${SRC_DIR} \
${AC_FLAGS} ${MATH_FLAGS} ${GENERIC_FLAGS} ${PROTO_FLAGS} ${MEM_DEBUG_FLAGS} \
${COMPILE_DEBUG_FLAGS} ${ENV_FLAGS} -DTCL_SHLIB_EXT=\"${SHLIB_SUFFIX}\"
LIBS = -ldl -lsocket -lnsl $(MATH_LIBS)
DEPEND_SWITCHES = ${CFLAGS} -I${GENERIC_DIR} -I${SRC_DIR} \
${AC_FLAGS} ${MATH_FLAGS} \
${GENERIC_FLAGS} ${PROTO_FLAGS} ${MEM_DEBUG_FLAGS} \
-DTCL_SHLIB_EXT=\"${SHLIB_SUFFIX}\"
TCLSH_OBJS = tclAppInit.o
TCLTEST_OBJS = tclTestInit.o tclTest.o tclTestObj.o tclTestProcBodyObj.o \
tclThreadTest.o tclUnixTest.o
XTTEST_OBJS = xtTestInit.o tclTest.o tclTestObj.o tclTestProcBodyObj.o \
tclThreadTest.o tclUnixTest.o tclXtNotify.o tclXtTest.o
GENERIC_OBJS = regcomp.o regexec.o regfree.o regerror.o tclAlloc.o \
tclAsync.o tclBasic.o tclBinary.o \
tclCkalloc.o tclClock.o tclCmdAH.o tclCmdIL.o tclCmdMZ.o \
tclCompCmds.o tclCompExpr.o tclCompile.o tclDate.o tclEncoding.o \
tclEnv.o tclEvent.o tclExecute.o tclFCmd.o tclFileName.o tclGet.o \
tclHash.o tclHistory.o tclIndexObj.o tclInterp.o tclIO.o tclIOCmd.o \
tclIOGT.o tclIOSock.o tclIOUtil.o tclLink.o tclListObj.o \
tclLiteral.o tclLoad.o tclMain.o tclNamesp.o tclNotify.o \
tclObj.o tclPanic.o tclParse.o tclParseExpr.o tclPipe.o \
tclPkg.o tclPosixStr.o tclPreserve.o tclProc.o tclRegexp.o \
tclResolve.o tclResult.o tclScan.o tclStringObj.o tclThread.o \
tclThreadAlloc.o tclThreadJoin.o tclStubInit.o tclStubLib.o \
tclTimer.o tclUtf.o tclUtil.o tclVar.o
STUB_LIB_OBJS = tclStubLib.o ${COMPAT_OBJS}
MAC_OSX_OBJS = tclMacOSXBundle.o
OBJS = ${GENERIC_OBJS} ${UNIX_OBJS} ${NOTIFY_OBJS} ${COMPAT_OBJS} \
tclLoadDl.o
TCL_DECLS = \
$(GENERIC_DIR)/tcl.decls \
$(GENERIC_DIR)/tclInt.decls
GENERIC_HDRS = \
$(GENERIC_DIR)/tcl.h \
$(GENERIC_DIR)/tclDecls.h \
$(GENERIC_DIR)/tclInt.h \
$(GENERIC_DIR)/tclIntDecls.h \
$(GENERIC_DIR)/tclIntPlatDecls.h \
$(GENERIC_DIR)/tclPatch.h \
$(GENERIC_DIR)/tclPlatDecls.h \
$(GENERIC_DIR)/tclPort.h \
$(GENERIC_DIR)/tclRegexp.h
GENERIC_SRCS = \
$(GENERIC_DIR)/regcomp.c \
$(GENERIC_DIR)/regexec.c \
$(GENERIC_DIR)/regfree.c \
$(GENERIC_DIR)/regerror.c \
$(GENERIC_DIR)/tclAlloc.c \
$(GENERIC_DIR)/tclAsync.c \
$(GENERIC_DIR)/tclBasic.c \
$(GENERIC_DIR)/tclBinary.c \
$(GENERIC_DIR)/tclCkalloc.c \
$(GENERIC_DIR)/tclClock.c \
$(GENERIC_DIR)/tclCmdAH.c \
$(GENERIC_DIR)/tclCmdIL.c \
$(GENERIC_DIR)/tclCmdMZ.c \
$(GENERIC_DIR)/tclCompCmds.c \
$(GENERIC_DIR)/tclCompExpr.c \
$(GENERIC_DIR)/tclCompile.c \
$(GENERIC_DIR)/tclDate.c \
$(GENERIC_DIR)/tclEncoding.c \
$(GENERIC_DIR)/tclEnv.c \
$(GENERIC_DIR)/tclEvent.c \
$(GENERIC_DIR)/tclExecute.c \
$(GENERIC_DIR)/tclFCmd.c \
$(GENERIC_DIR)/tclFileName.c \
$(GENERIC_DIR)/tclGet.c \
$(GENERIC_DIR)/tclHash.c \
$(GENERIC_DIR)/tclHistory.c \
$(GENERIC_DIR)/tclIndexObj.c \
$(GENERIC_DIR)/tclInterp.c \
$(GENERIC_DIR)/tclIO.c \
$(GENERIC_DIR)/tclIOCmd.c \
$(GENERIC_DIR)/tclIOGT.c \
$(GENERIC_DIR)/tclIOSock.c \
$(GENERIC_DIR)/tclIOUtil.c \
$(GENERIC_DIR)/tclLink.c \
$(GENERIC_DIR)/tclListObj.c \
$(GENERIC_DIR)/tclLiteral.c \
$(GENERIC_DIR)/tclLoad.c \
$(GENERIC_DIR)/tclMain.c \
$(GENERIC_DIR)/tclNamesp.c \
$(GENERIC_DIR)/tclNotify.c \
$(GENERIC_DIR)/tclObj.c \
$(GENERIC_DIR)/tclParse.c \
$(GENERIC_DIR)/tclParseExpr.c \
$(GENERIC_DIR)/tclPipe.c \
$(GENERIC_DIR)/tclPkg.c \
$(GENERIC_DIR)/tclPosixStr.c \
$(GENERIC_DIR)/tclPreserve.c \
$(GENERIC_DIR)/tclProc.c \
$(GENERIC_DIR)/tclRegexp.c \
$(GENERIC_DIR)/tclResolve.c \
$(GENERIC_DIR)/tclResult.c \
$(GENERIC_DIR)/tclScan.c \
$(GENERIC_DIR)/tclStubInit.c \
$(GENERIC_DIR)/tclStubLib.c \
$(GENERIC_DIR)/tclStringObj.c \
$(GENERIC_DIR)/tclTest.c \
$(GENERIC_DIR)/tclTestObj.c \
$(GENERIC_DIR)/tclTestProcBodyObj.c \
$(GENERIC_DIR)/tclThread.c \
$(GENERIC_DIR)/tclThreadAlloc.c \
$(GENERIC_DIR)/tclThreadJoin.c \
$(GENERIC_DIR)/tclTimer.c \
$(GENERIC_DIR)/tclUtil.c \
$(GENERIC_DIR)/tclVar.c
STUB_SRCS = \
$(GENERIC_DIR)/tclStubLib.c
UNIX_HDRS = \
$(UNIX_DIR)/tclUnixPort.h
UNIX_SRCS = \
$(UNIX_DIR)/tclAppInit.c \
$(UNIX_DIR)/tclUnixChan.c \
$(UNIX_DIR)/tclUnixEvent.c \
$(UNIX_DIR)/tclUnixFCmd.c \
$(UNIX_DIR)/tclUnixFile.c \
$(UNIX_DIR)/tclUnixNotfy.c \
$(UNIX_DIR)/tclUnixPipe.c \
$(UNIX_DIR)/tclUnixSock.c \
$(UNIX_DIR)/tclUnixTest.c \
$(UNIX_DIR)/tclUnixThrd.c \
$(UNIX_DIR)/tclUnixTime.c \
$(UNIX_DIR)/tclUnixInit.c
DL_SRCS = \
$(UNIX_DIR)/tclLoadAix.c \
$(UNIX_DIR)/tclLoadAout.c \
$(UNIX_DIR)/tclLoadDl.c \
$(UNIX_DIR)/tclLoadDl2.c \
$(UNIX_DIR)/tclLoadDld.c \
$(UNIX_DIR)/tclLoadDyld.c \
$(GENERIC_DIR)/tclLoadNone.c \
$(UNIX_DIR)/tclLoadOSF.c \
$(UNIX_DIR)/tclLoadShl.c
MAC_OSX_SRCS = \
$(MAC_OSX_DIR)/tclMacOSXBundle.c
# Note: don't include DL_SRCS or MAC_OSX_SRCS in SRCS: most of those
# files won't compile on the current machine, and they will cause
# problems for things like "make depend".
SRCS = $(GENERIC_SRCS) $(UNIX_SRCS) $(STUB_SRCS)
all: binaries libraries doc
binaries: ${LIB_FILE} $(STUB_LIB_FILE) $(TCL_BUILD_EXP_FILE) tclsh
libraries:
doc:
# The following target is configured by autoconf to generate either
# a shared library or non-shared library for Tcl.
${LIB_FILE}: ${OBJS} ${STUB_LIB_FILE}
rm -f $@
${SHLIB_LD} -o $@ ${SHLIB_LD_FLAGS} ${OBJS} ${SHLIB_LD_LIBS} ${TCL_SHLIB_LD_EXTRAS} ${TK_SHLIB_LD_EXTRAS} ${LD_SEARCH_FLAGS}
${STUB_LIB_FILE}: ${STUB_LIB_OBJS}
rm -f $@
${STLIB_LD} $@ ${STUB_LIB_OBJS} ; ${RANLIB} $@
# Make target which outputs the list of the .o contained in the Tcl lib
# usefull to build a single big shared library containing Tcl and other
# extensions. used for the Tcl Plugin. -- dl
# The dependency on OBJS is not there because we just want the list
# of objects here, not actually building them
tclLibObjs:
@echo ${OBJS}
# This targets actually build the objects needed for the lib in the above
# case
objs: ${OBJS}
tclsh: ${TCLSH_OBJS} ${TCL_LIB_FILE}
${CC} ${LDFLAGS} ${TCLSH_OBJS} -L/scratch/sakthi/Tcl_8.4.9_source/tcl8.4.9/unix -ltcl8.4${TCL_DBGX} ${LIBS} \
${CC_SEARCH_FLAGS} -o tclsh
# Resetting the LIB_RUNTIME_DIR below is required so that
# the generated tcltest executable gets the build directory
# burned into its ld search path. This keeps tcltest from
# picking up an already installed version of the Tcl library.
tcltest: ${TCLTEST_OBJS} ${TCL_LIB_FILE} ${BUILD_DLTEST}
$(MAKE) tcltest-real LIB_RUNTIME_DIR=`pwd`
tcltest-real:
${CC} ${LDFLAGS} ${TCLTEST_OBJS} -L/scratch/sakthi/Tcl_8.4.9_source/tcl8.4.9/unix -ltcl8.4${TCL_DBGX} ${LIBS} \
${CC_SEARCH_FLAGS} -o tcltest
# Note, in the target below TCL_LIBRARY needs to be set or else
# "make test" won't work in the case where the compilation directory
# isn't the same as the source directory.
# Specifying TESTFLAGS on the command line is the standard way to pass
# args to tcltest, ie:
# % make test TESTFLAGS="-verbose bps -file fileName.test"
test: tcltest
LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}; export LD_LIBRARY_PATH; \
TCL_LIBRARY="${TCL_BUILDTIME_LIBRARY}"; export TCL_LIBRARY; \
./tcltest $(TOP_DIR)/tests/all.tcl $(TESTFLAGS) $(TCLTESTARGS)
# Useful target to launch a built tcltest with the proper path,...
runtest: tcltest
LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}; export LD_LIBRARY_PATH; \
TCL_LIBRARY="${TCL_BUILDTIME_LIBRARY}"; export TCL_LIBRARY; \
./tcltest
# Useful target for running the test suite with an unwritable current
# directory...
ro-test: tcltest
LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}; export LD_LIBRARY_PATH; \
TCL_LIBRARY="${TCL_BUILDTIME_LIBRARY}"; export TCL_LIBRARY; \
echo 'exec chmod -w .;package require tcltest;tcltest::temporaryDirectory /tmp;source ../tests/all.tcl;exec chmod +w .' | ./tcltest
# This target can be used to run tclsh from the build directory
# via `make shell SCRIPT=/tmp/foo.tcl`
shell: tclsh
@LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}; export LD_LIBRARY_PATH; \
TCL_LIBRARY="${TCL_BUILDTIME_LIBRARY}"; export TCL_LIBRARY; \
./tclsh $(SCRIPT)
# This target can be used to run tclsh inside either gdb or insight
gdb: tclsh
@echo "set env LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}" > gdb.run
@echo "set env TCL_LIBRARY=${TCL_BUILDTIME_LIBRARY}" >> gdb.run
$(GDB) ./tclsh --command=gdb.run
rm gdb.run
# This target can be used to run tclsh inside ddd
ddd: tclsh
@echo "set env LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}" > gdb.run
@echo "set env TCL_LIBRARY=${TCL_BUILDTIME_LIBRARY}" >> gdb.run
$(DDD) -command=gdb.run ./tclsh
rm gdb.run
valgrind: tclsh tcltest
LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}; export LD_LIBRARY_PATH; \
TCL_LIBRARY="${TCL_BUILDTIME_LIBRARY}"; export TCL_LIBRARY; \
valgrind --num-callers=8 --leak-resolution=high -v --leak-check=yes --show-reachable=yes $(VALGRINDARGS) ./tcltest $(TOP_DIR)/tests/all.tcl -singleproc 1 $(TESTFLAGS) $(TCLTESTARGS)
# The following target outputs the name of the top-level source directory
# for Tcl (it is used by Tk's configure script, for example). The
# .NO_PARALLEL line is needed to avoid problems under Sun's "pmake".
# Note: this target is now obsolete (use the autoconf variable
# TCL_SRC_DIR from tclConfig.sh instead).
.NO_PARALLEL: topDirName
topDirName:
@cd $(TOP_DIR); pwd
# The following target generates the file generic/tclDate.c
# from the yacc grammar found in generic/tclGetDate.y. This is
# only run by hand as yacc is not available in all environments.
# The name of the .c file is different than the name of the .y file
# so that make doesn't try to automatically regenerate the .c file.
gendate:
yacc -l $(GENERIC_DIR)/tclGetDate.y
sed -e 's/yy/TclDate/g' -e '/^#include <values.h>/d' \
-e 's?SCCSID?RCS: @(#) ?' \
-e '/#ifdef __STDC__/,/#endif/d' -e '/TclDateerrlab:/d' \
-e '/TclDatenewstate:/d' -e '/#pragma/d' \
-e '/#include <inttypes.h>/d' -e 's/const /CONST /g' \
<y.tab.c >$(GENERIC_DIR)/tclDate.c
rm y.tab.c
# The following target generates the shared libraries in dltest/ that
# are used for testing; they are included as part of the "tcltest"
# target (via the BUILD_DLTEST variable) if dynamic loading is supported
# on this platform. The Makefile in the dltest subdirectory creates
# the dltest.marker file in this directory after a successful build.
dltest.marker:
cd dltest ; $(MAKE)
install: install-binaries install-libraries install-doc
install-strip:
$(MAKE) install \
INSTALL_PROGRAM="$(INSTALL_PROGRAM) ${INSTALL_STRIP_PROGRAM}" \
INSTALL_LIBRARY="$(INSTALL_LIBRARY) ${INSTALL_STRIP_LIBRARY}"
# Note: before running ranlib below, must cd to target directory because
# some ranlibs write to current directory, and this might not always be
# possible (e.g. if installing as root).
install-binaries: binaries
@for i in $(LIB_INSTALL_DIR) $(BIN_INSTALL_DIR) ; \
do \
if [ ! -d $$i ] ; then \
echo "Making directory $$i"; \
mkdir -p $$i; \
chmod 755 $$i; \
else true; \
fi; \
done;
@if test ! -x $(SRC_DIR)/install-sh; then \
chmod +x $(SRC_DIR)/install-sh; \
fi
@echo "Installing $(LIB_FILE) to $(LIB_INSTALL_DIR)/"
@$(INSTALL_LIBRARY) $(LIB_FILE) $(LIB_INSTALL_DIR)/$(LIB_FILE)
@chmod 555 $(LIB_INSTALL_DIR)/$(LIB_FILE)
@if test "$(TCL_BUILD_EXP_FILE)" != ""; then \
echo "Installing $(TCL_EXP_FILE) to $(LIB_INSTALL_DIR)/"; \
$(INSTALL_DATA) $(TCL_BUILD_EXP_FILE) \
$(LIB_INSTALL_DIR)/$(TCL_EXP_FILE); \
fi
@echo "Installing tclsh as $(BIN_INSTALL_DIR)/tclsh$(VERSION)"
@$(INSTALL_PROGRAM) tclsh $(BIN_INSTALL_DIR)/tclsh$(VERSION)
@echo "Installing tclConfig.sh to $(LIB_INSTALL_DIR)/"
@$(INSTALL_DATA) tclConfig.sh $(LIB_INSTALL_DIR)/tclConfig.sh
@if test "$(STUB_LIB_FILE)" != "" ; then \
echo "Installing $(STUB_LIB_FILE) to $(LIB_INSTALL_DIR)/"; \
$(INSTALL_LIBRARY) $(STUB_LIB_FILE) $(LIB_INSTALL_DIR)/$(STUB_LIB_FILE) ; (cd $(LIB_INSTALL_DIR) ; $(RANLIB) $(STUB_LIB_FILE)) ; \
fi
install-libraries: libraries
@for i in $(INCLUDE_INSTALL_DIR) $(SCRIPT_INSTALL_DIR); \
do \
if [ ! -d $$i ] ; then \
echo "Making directory $$i"; \
mkdir -p $$i; \
chmod 755 $$i; \
else true; \
fi; \
done;
@for i in http2.5 http1.0 opt0.4 encoding msgcat1.3 tcltest2.2; \
do \
if [ ! -d $(SCRIPT_INSTALL_DIR)/$$i ] ; then \
echo "Making directory $(SCRIPT_INSTALL_DIR)/$$i"; \
mkdir -p $(SCRIPT_INSTALL_DIR)/$$i; \
chmod 755 $(SCRIPT_INSTALL_DIR)/$$i; \
else true; \
fi; \
done;
@if test ! -x $(SRC_DIR)/install-sh; then \
chmod +x $(SRC_DIR)/install-sh; \
fi
@echo "Installing header files";
@for i in $(GENERIC_DIR)/tcl.h $(GENERIC_DIR)/tclDecls.h \
$(GENERIC_DIR)/tclPlatDecls.h ; \
do \
$(INSTALL_DATA) $$i $(INCLUDE_INSTALL_DIR); \
done;
@echo "Installing library files to $(SCRIPT_INSTALL_DIR)";
@for i in $(TOP_DIR)/library/*.tcl $(TOP_DIR)/library/tclIndex $(UNIX_DIR)/tclAppInit.c $(UNIX_DIR)/ldAix; \
do \
$(INSTALL_DATA) $$i $(SCRIPT_INSTALL_DIR); \
done;
@echo "Installing library http1.0 directory";
@for j in $(TOP_DIR)/library/http1.0/*.tcl ; \
do \
$(INSTALL_DATA) $$j $(SCRIPT_INSTALL_DIR)/http1.0; \
done;
@echo "Installing library http2.5 directory";
@for j in $(TOP_DIR)/library/http/*.tcl ; \
do \
$(INSTALL_DATA) $$j $(SCRIPT_INSTALL_DIR)/http2.5; \
done;
@echo "Installing library opt0.4 directory";
@for j in $(TOP_DIR)/library/opt/*.tcl ; \
do \
$(INSTALL_DATA) $$j $(SCRIPT_INSTALL_DIR)/opt0.4; \
done;
@echo "Installing library msgcat1.3 directory";
@for j in $(TOP_DIR)/library/msgcat/*.tcl ; \
do \
$(INSTALL_DATA) $$j $(SCRIPT_INSTALL_DIR)/msgcat1.3; \
done;
@echo "Installing library tcltest2.2 directory";
@for j in $(TOP_DIR)/library/tcltest/*.tcl ; \
do \
$(INSTALL_DATA) $$j $(SCRIPT_INSTALL_DIR)/tcltest2.2; \
done;
@echo "Installing library encoding directory";
@for i in $(TOP_DIR)/library/encoding/*.enc ; do \
$(INSTALL_DATA) $$i $(SCRIPT_INSTALL_DIR)/encoding; \
done;
install-doc: doc
@if test ! -x $(UNIX_DIR)/installManPage; then \
chmod +x $(UNIX_DIR)/installManPage; \
fi
@for i in $(MAN_INSTALL_DIR) $(MAN1_INSTALL_DIR) $(MAN3_INSTALL_DIR) $(MANN_INSTALL_DIR) ; \
do \
if [ ! -d $$i ] ; then \
echo "Making directory $$i"; \
mkdir -p $$i; \
chmod 755 $$i; \
else true; \
fi; \
done;
@echo "Installing and cross-linking top-level (.1) docs";
@for i in $(TOP_DIR)/doc/*.1; do \
$(UNIX_DIR)/installManPage $(MAN_FLAGS) $$i $(MAN1_INSTALL_DIR); \
done
@echo "Installing and cross-linking C API (.3) docs";
@for i in $(TOP_DIR)/doc/*.3; do \
$(UNIX_DIR)/installManPage $(MAN_FLAGS) $$i $(MAN3_INSTALL_DIR); \
done
@echo "Installing and cross-linking command (.n) docs";
@for i in $(TOP_DIR)/doc/*.n; do \
$(UNIX_DIR)/installManPage $(MAN_FLAGS) $$i $(MANN_INSTALL_DIR); \
done
Makefile: $(UNIX_DIR)/Makefile.in $(DLTEST_DIR)/Makefile.in
$(SHELL) config.status
clean:
rm -f *.a *.o libtcl* core errs *~ \#* TAGS *.E a.out \
errors tclsh tcltest lib.exp
cd dltest ; $(MAKE) clean
distclean: clean
rm -rf Makefile config.status config.cache config.log tclConfig.sh \
$(PACKAGE).* prototype
cd dltest ; $(MAKE) distclean
depend:
makedepend -- $(DEPEND_SWITCHES) -- $(SRCS)
# Test binaries. The rules for tclTestInit.o and xtTestInit.o are
# complicated because they are compiled from tclAppInit.c. Can't use
# the "-o" option because this doesn't work on some strange compilers
# (e.g. UnixWare).
tclTestInit.o: $(UNIX_DIR)/tclAppInit.c
@if test -f tclAppInit.o ; then \
rm -f tclAppInit.sav; \
mv tclAppInit.o tclAppInit.sav; \
fi;
$(CC) -c $(CC_SWITCHES) \
-DTCL_BUILDTIME_LIBRARY="\"${TCL_BUILDTIME_LIBRARY}\"" \
-DTCL_TEST $(UNIX_DIR)/tclAppInit.c
rm -f tclTestInit.o
mv tclAppInit.o tclTestInit.o
@if test -f tclAppInit.sav ; then \
mv tclAppInit.sav tclAppInit.o; \
fi;
xtTestInit.o: $(UNIX_DIR)/tclAppInit.c
@if test -f tclAppInit.o ; then \
rm -f tclAppInit.sav; \
mv tclAppInit.o tclAppInit.sav; \
fi;
$(CC) -c $(CC_SWITCHES) \
-DTCL_BUILDTIME_LIBRARY="\"${TCL_BUILDTIME_LIBRARY}\"" \
-DTCL_TEST -DTCL_XT_TEST $(UNIX_DIR)/tclAppInit.c
rm -f xtTestInit.o
mv tclAppInit.o xtTestInit.o
@if test -f tclAppInit.sav ; then \
mv tclAppInit.sav tclAppInit.o; \
fi;
# Object files used on all Unix systems:
REGHDRS=$(GENERIC_DIR)/regex.h $(GENERIC_DIR)/regguts.h \
$(GENERIC_DIR)/regcustom.h
regcomp.o: $(REGHDRS) $(GENERIC_DIR)/regcomp.c $(GENERIC_DIR)/regc_lex.c \
$(GENERIC_DIR)/regc_color.c $(GENERIC_DIR)/regc_locale.c \
$(GENERIC_DIR)/regc_nfa.c $(GENERIC_DIR)/regc_cvec.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/regcomp.c
regexec.o: $(REGHDRS) $(GENERIC_DIR)/regexec.c $(GENERIC_DIR)/rege_dfa.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/regexec.c
regfree.o: $(REGHDRS) $(GENERIC_DIR)/regfree.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/regfree.c
regerror.o: $(REGHDRS) $(GENERIC_DIR)/regerrs.h $(GENERIC_DIR)/regerror.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/regerror.c
tclAppInit.o: $(UNIX_DIR)/tclAppInit.c
$(CC) -c $(CC_SWITCHES) $(UNIX_DIR)/tclAppInit.c
# On unix we want to use the normal malloc/free implementation, so we
# specifically set the USE_TCLALLOC flag.
tclAlloc.o: $(GENERIC_DIR)/tclAlloc.c
$(CC) -c $(CC_SWITCHES) -DUSE_TCLALLOC=0 $(GENERIC_DIR)/tclAlloc.c
tclAsync.o: $(GENERIC_DIR)/tclAsync.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclAsync.c
tclBasic.o: $(GENERIC_DIR)/tclBasic.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclBasic.c
tclBinary.o: $(GENERIC_DIR)/tclBinary.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclBinary.c
tclCkalloc.o: $(GENERIC_DIR)/tclCkalloc.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclCkalloc.c
tclClock.o: $(GENERIC_DIR)/tclClock.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclClock.c
tclCmdAH.o: $(GENERIC_DIR)/tclCmdAH.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclCmdAH.c
tclCmdIL.o: $(GENERIC_DIR)/tclCmdIL.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclCmdIL.c
tclCmdMZ.o: $(GENERIC_DIR)/tclCmdMZ.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclCmdMZ.c
tclDate.o: $(GENERIC_DIR)/tclDate.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclDate.c
tclCompCmds.o: $(GENERIC_DIR)/tclCompCmds.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclCompCmds.c
tclCompExpr.o: $(GENERIC_DIR)/tclCompExpr.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclCompExpr.c
tclCompile.o: $(GENERIC_DIR)/tclCompile.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclCompile.c
tclEncoding.o: $(GENERIC_DIR)/tclEncoding.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclEncoding.c
tclEnv.o: $(GENERIC_DIR)/tclEnv.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclEnv.c
tclEvent.o: $(GENERIC_DIR)/tclEvent.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclEvent.c
tclExecute.o: $(GENERIC_DIR)/tclExecute.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclExecute.c
tclFCmd.o: $(GENERIC_DIR)/tclFCmd.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclFCmd.c
tclFileName.o: $(GENERIC_DIR)/tclFileName.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclFileName.c
tclGet.o: $(GENERIC_DIR)/tclGet.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclGet.c
tclHash.o: $(GENERIC_DIR)/tclHash.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclHash.c
tclHistory.o: $(GENERIC_DIR)/tclHistory.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclHistory.c
tclIndexObj.o: $(GENERIC_DIR)/tclIndexObj.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclIndexObj.c
tclInterp.o: $(GENERIC_DIR)/tclInterp.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclInterp.c
tclIO.o: $(GENERIC_DIR)/tclIO.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclIO.c
tclIOCmd.o: $(GENERIC_DIR)/tclIOCmd.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclIOCmd.c
tclIOGT.o: $(GENERIC_DIR)/tclIOGT.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclIOGT.c
tclIOSock.o: $(GENERIC_DIR)/tclIOSock.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclIOSock.c
tclIOUtil.o: $(GENERIC_DIR)/tclIOUtil.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclIOUtil.c
tclLink.o: $(GENERIC_DIR)/tclLink.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclLink.c
tclListObj.o: $(GENERIC_DIR)/tclListObj.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclListObj.c
tclLiteral.o: $(GENERIC_DIR)/tclLiteral.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclLiteral.c
tclObj.o: $(GENERIC_DIR)/tclObj.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclObj.c
tclLoad.o: $(GENERIC_DIR)/tclLoad.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclLoad.c
tclLoadAix.o: $(UNIX_DIR)/tclLoadAix.c
$(CC) -c $(CC_SWITCHES) $(UNIX_DIR)/tclLoadAix.c
tclLoadAout.o: $(UNIX_DIR)/tclLoadAout.c
$(CC) -c $(CC_SWITCHES) $(UNIX_DIR)/tclLoadAout.c
tclLoadDl.o: $(UNIX_DIR)/tclLoadDl.c
$(CC) -c $(CC_SWITCHES) $(UNIX_DIR)/tclLoadDl.c
tclLoadDl2.o: $(UNIX_DIR)/tclLoadDl2.c
$(CC) -c $(CC_SWITCHES) $(UNIX_DIR)/tclLoadDl2.c
tclLoadDld.o: $(UNIX_DIR)/tclLoadDld.c
$(CC) -c $(CC_SWITCHES) $(UNIX_DIR)/tclLoadDld.c
tclLoadDyld.o: $(UNIX_DIR)/tclLoadDyld.c
$(CC) -c $(CC_SWITCHES) $(UNIX_DIR)/tclLoadDyld.c
tclLoadNone.o: $(GENERIC_DIR)/tclLoadNone.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclLoadNone.c
tclLoadOSF.o: $(UNIX_DIR)/tclLoadOSF.c
$(CC) -c $(CC_SWITCHES) $(UNIX_DIR)/tclLoadOSF.c
tclLoadShl.o: $(UNIX_DIR)/tclLoadShl.c
$(CC) -c $(CC_SWITCHES) $(UNIX_DIR)/tclLoadShl.c
tclMain.o: $(GENERIC_DIR)/tclMain.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclMain.c
tclNamesp.o: $(GENERIC_DIR)/tclNamesp.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclNamesp.c
tclNotify.o: $(GENERIC_DIR)/tclNotify.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclNotify.c
tclParse.o: $(GENERIC_DIR)/tclParse.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclParse.c
tclParseExpr.o: $(GENERIC_DIR)/tclParseExpr.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclParseExpr.c
tclPanic.o: $(GENERIC_DIR)/tclPanic.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclPanic.c
tclPipe.o: $(GENERIC_DIR)/tclPipe.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclPipe.c
tclPkg.o: $(GENERIC_DIR)/tclPkg.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclPkg.c
tclPosixStr.o: $(GENERIC_DIR)/tclPosixStr.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclPosixStr.c
tclPreserve.o: $(GENERIC_DIR)/tclPreserve.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclPreserve.c
tclProc.o: $(GENERIC_DIR)/tclProc.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclProc.c
tclRegexp.o: $(GENERIC_DIR)/tclRegexp.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclRegexp.c
tclResolve.o: $(GENERIC_DIR)/tclResolve.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclResolve.c
tclResult.o: $(GENERIC_DIR)/tclResult.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclResult.c
tclScan.o: $(GENERIC_DIR)/tclScan.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclScan.c
tclStringObj.o: $(GENERIC_DIR)/tclStringObj.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclStringObj.c
tclStubInit.o: $(GENERIC_DIR)/tclStubInit.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclStubInit.c
tclUtil.o: $(GENERIC_DIR)/tclUtil.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclUtil.c
tclUtf.o: $(GENERIC_DIR)/tclUtf.c $(GENERIC_DIR)/tclUniData.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclUtf.c
tclVar.o: $(GENERIC_DIR)/tclVar.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclVar.c
tclTest.o: $(GENERIC_DIR)/tclTest.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclTest.c
tclTestObj.o: $(GENERIC_DIR)/tclTestObj.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclTestObj.c
tclTestProcBodyObj.o: $(GENERIC_DIR)/tclTestProcBodyObj.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclTestProcBodyObj.c
tclTimer.o: $(GENERIC_DIR)/tclTimer.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclTimer.c
tclThread.o: $(GENERIC_DIR)/tclThread.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclThread.c
tclThreadAlloc.o: $(GENERIC_DIR)/tclThreadAlloc.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclThreadAlloc.c
tclThreadJoin.o: $(GENERIC_DIR)/tclThreadJoin.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclThreadJoin.c
tclThreadTest.o: $(GENERIC_DIR)/tclThreadTest.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclThreadTest.c
tclUnixChan.o: $(UNIX_DIR)/tclUnixChan.c
$(CC) -c $(CC_SWITCHES) $(UNIX_DIR)/tclUnixChan.c
tclUnixEvent.o: $(UNIX_DIR)/tclUnixEvent.c
$(CC) -c $(CC_SWITCHES) $(UNIX_DIR)/tclUnixEvent.c
tclUnixFCmd.o: $(UNIX_DIR)/tclUnixFCmd.c
$(CC) -c $(CC_SWITCHES) $(UNIX_DIR)/tclUnixFCmd.c
tclUnixFile.o: $(UNIX_DIR)/tclUnixFile.c
$(CC) -c $(CC_SWITCHES) $(UNIX_DIR)/tclUnixFile.c
tclUnixNotfy.o: $(UNIX_DIR)/tclUnixNotfy.c
$(CC) -c $(CC_SWITCHES) $(UNIX_DIR)/tclUnixNotfy.c
tclUnixPipe.o: $(UNIX_DIR)/tclUnixPipe.c
$(CC) -c $(CC_SWITCHES) $(UNIX_DIR)/tclUnixPipe.c
tclUnixSock.o: $(UNIX_DIR)/tclUnixSock.c
$(CC) -c $(CC_SWITCHES) $(UNIX_DIR)/tclUnixSock.c
tclUnixTest.o: $(UNIX_DIR)/tclUnixTest.c
$(CC) -c $(CC_SWITCHES) $(UNIX_DIR)/tclUnixTest.c
tclUnixThrd.o: $(UNIX_DIR)/tclUnixThrd.c
$(CC) -c $(CC_SWITCHES) $(UNIX_DIR)/tclUnixThrd.c
tclUnixTime.o: $(UNIX_DIR)/tclUnixTime.c
$(CC) -c $(CC_SWITCHES) $(UNIX_DIR)/tclUnixTime.c
tclUnixInit.o: $(UNIX_DIR)/tclUnixInit.c $(GENERIC_DIR)/tclInitScript.h tclConfig.sh
$(CC) -c $(CC_SWITCHES) -DTCL_LIBRARY=\"${TCL_LIBRARY}\" \
-DTCL_PACKAGE_PATH="\"${TCL_PACKAGE_PATH}\"" \
$(UNIX_DIR)/tclUnixInit.c
# This is the CFBundle interface. It is only used on Mac OS X.
tclMacOSXBundle.o: $(MAC_OSX_DIR)/tclMacOSXBundle.c
$(CC) -c $(CC_SWITCHES) $(MAC_OSX_DIR)/tclMacOSXBundle.c
# The following targets are not completely general. They are provide
# purely for documentation purposes so people who are interested in
# the Xt based notifier can modify them to suit their own installation.
xttest: ${XTTEST_OBJS} ${GENERIC_OBJS} ${UNIX_OBJS} ${COMPAT_OBJS} \
tclLoadDl.o ${BUILD_DLTEST}
${CC} ${XTTEST_OBJS} ${GENERIC_OBJS} ${UNIX_OBJS} ${COMPAT_OBJS} \
tclLoadDl.o -L/scratch/sakthi/Tcl_8.4.9_source/tcl8.4.9/unix -ltcl8.4${TCL_DBGX} ${LIBS} \
${CC_SEARCH_FLAGS} -L/usr/openwin/lib -lXt -o xttest
tclXtNotify.o: $(UNIX_DIR)/tclXtNotify.c
$(CC) -c $(CC_SWITCHES) -I/usr/openwin/include \
$(UNIX_DIR)/tclXtNotify.c
tclXtTest.o: $(UNIX_DIR)/tclXtTest.c
$(CC) -c $(CC_SWITCHES) -I/usr/openwin/include \
$(UNIX_DIR)/tclXtTest.c
# compat binaries, these must be compiled for use in a shared library
# even though they may be placed in a static executable or library. Since
# they are included in both the tcl library and the stub library, they
# need to be relocatable.
fixstrtod.o: $(COMPAT_DIR)/fixstrtod.c
$(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/fixstrtod.c
opendir.o: $(COMPAT_DIR)/opendir.c
$(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/opendir.c
memcmp.o: $(COMPAT_DIR)/memcmp.c
$(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/memcmp.c
strncasecmp.o: $(COMPAT_DIR)/strncasecmp.c
$(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/strncasecmp.c
strstr.o: $(COMPAT_DIR)/strstr.c
$(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/strstr.c
strtod.o: $(COMPAT_DIR)/strtod.c
$(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/strtod.c
strtol.o: $(COMPAT_DIR)/strtol.c
$(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/strtol.c
strtoll.o: $(COMPAT_DIR)/strtoll.c
$(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/strtoll.c
strtoul.o: $(COMPAT_DIR)/strtoul.c
$(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/strtoul.c
strtoull.o: $(COMPAT_DIR)/strtoull.c
$(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/strtoull.c
tmpnam.o: $(COMPAT_DIR)/tmpnam.c
$(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/tmpnam.c
waitpid.o: $(COMPAT_DIR)/waitpid.c
$(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/waitpid.c
# Stub library binaries, these must be compiled for use in a shared library
# even though they will be placed in a static archive
tclStubLib.o: $(GENERIC_DIR)/tclStubLib.c
$(CC) -c $(STUB_CC_SWITCHES) $(GENERIC_DIR)/tclStubLib.c
.c.o:
$(CC) -c $(CC_SWITCHES) $<
#
# Target to regenerate header files and stub files from the *.decls tables.
#
$(GENERIC_DIR)/tclStubInit.c: $(GENERIC_DIR)/tcl.decls \
$(GENERIC_DIR)/tclInt.decls
@echo "Warning: tclStubInit.c may be out of date."
@echo "Developers may want to run \"make genstubs\" to regenerate."
@echo "This warning can be safely ignored, do not report as a bug!"
genstubs:
$(TCL_EXE) $(TOOL_DIR)/genStubs.tcl $(GENERIC_DIR) \
$(GENERIC_DIR)/tcl.decls $(GENERIC_DIR)/tclInt.decls
#
# Target to check that all exported functions have an entry in the stubs
# tables.
#
checkstubs:
-@for i in `nm -p $(TCL_LIB_FILE) | awk '$$2 ~ /T/ { print $$3 }' \
| sort -n`; do \
match=0; \
for j in $(TCL_DECLS); do \
if [ `grep -c $$i $$j` -gt 0 ]; then \
match=1; \
fi; \
done; \
if [ $$match -eq 0 ]; then echo $$i; fi \
done
#
# Target to check that all public APIs which are not command
# implementations have an entry in section three of the distributed
# manpages.
#
checkdoc:
-@for i in `nm -p $(TCL_LIB_FILE) | awk '$$3 ~ /Tcl_/ { print $$3 }' \
| grep -v 'Cmd$$' | sort -n`; do \
match=0; \
for j in $(TOP_DIR)/doc/*.3; do \
if [ `grep '\-' $$j | grep -c $$i` -gt 0 ]; then \
match=1; \
fi; \
done; \
if [ $$match -eq 0 ]; then echo $$i; fi \
done
#
# Target to check for proper usage of UCHAR macro.
#
checkuchar:
-egrep isalnum\|isalpha\|iscntrl\|isdigit\|islower\|isprint\|ispunct\|isspace\|isupper\|isxdigit\|toupper\|tolower $(SRCS) | grep -v UCHAR
#
# Target to make sure that only symbols with "Tcl" prefixes are
# exported.
#
checkexports: $(TCL_LIB_FILE)
-nm -p $(TCL_LIB_FILE) | awk '$$2 ~ /[TDB]/ { print $$3 }' | sort -n | grep -v '^[Tt]cl'
#
# Target to create a Tcl RPM for Linux. Requires that you be on a Linux
# system.
#
rpm: all /bin/rpm
rm -f THIS.TCL.SPEC
echo "%define _builddir `pwd`" > THIS.TCL.SPEC
echo "%define _rpmdir `pwd`/RPMS" >> THIS.TCL.SPEC
cat tcl.spec >> THIS.TCL.SPEC
mkdir -p RPMS/i386
rpm -bb THIS.TCL.SPEC
mv RPMS/i386/*.rpm .
rm -rf RPMS THIS.TCL.SPEC
#
# Target to create a proper Tcl distribution from information in the
# master source directory. DISTDIR must be defined to indicate where
# to put the distribution.
#
DISTROOT = /tmp/dist
DISTNAME = tcl${VERSION}${PATCH_LEVEL}
ZIPNAME = tcl${MAJOR_VERSION}${MINOR_VERSION}${PATCH_LEVEL}-src.zip
DISTDIR = $(DISTROOT)/$(DISTNAME)
dist:
rm -rf $(DISTDIR)
mkdir -p $(DISTDIR)/unix
cp -p $(UNIX_DIR)/*.c $(UNIX_DIR)/*.h $(DISTDIR)/unix
cp $(UNIX_DIR)/Makefile.in $(DISTDIR)/unix
chmod 664 $(DISTDIR)/unix/Makefile.in
cp $(UNIX_DIR)/configure $(UNIX_DIR)/configure.in \
$(UNIX_DIR)/tcl.m4 $(UNIX_DIR)/aclocal.m4 \
$(UNIX_DIR)/tclConfig.sh.in $(UNIX_DIR)/install-sh \
$(UNIX_DIR)/README $(UNIX_DIR)/ldAix $(UNIX_DIR)/tcl.spec \
$(UNIX_DIR)/installManPage \
$(DISTDIR)/unix
chmod 775 $(DISTDIR)/unix/configure $(DISTDIR)/unix/configure.in
chmod 775 $(DISTDIR)/unix/ldAix
chmod +x $(DISTDIR)/unix/install-sh
mkdir $(DISTDIR)/generic
cp -p $(GENERIC_DIR)/*.c $(GENERIC_DIR)/*.h $(DISTDIR)/generic
cp -p $(GENERIC_DIR)/*.decls $(DISTDIR)/generic
cp -p $(GENERIC_DIR)/README $(DISTDIR)/generic
cp -p $(GENERIC_DIR)/tclGetDate.y $(DISTDIR)/generic
cp -p $(TOP_DIR)/changes $(TOP_DIR)/ChangeLog $(TOP_DIR)/README* \
$(TOP_DIR)/ChangeLog.[12]??? $(TOP_DIR)/license.terms \
$(DISTDIR)
mkdir $(DISTDIR)/library
cp -p $(TOP_DIR)/license.terms $(TOP_DIR)/library/*.tcl \
$(TOP_DIR)/library/tclIndex $(DISTDIR)/library
for i in http1.0 http opt msgcat reg dde tcltest; \
do \
mkdir $(DISTDIR)/library/$$i ;\
cp -p $(TOP_DIR)/library/$$i/*.tcl $(DISTDIR)/library/$$i; \
done;
mkdir $(DISTDIR)/library/encoding
cp -p $(TOP_DIR)/library/encoding/*.enc $(DISTDIR)/library/encoding
mkdir $(DISTDIR)/doc
cp -p $(TOP_DIR)/license.terms $(TOP_DIR)/doc/*.[13n] \
$(TOP_DIR)/doc/man.macros $(DISTDIR)/doc
mkdir $(DISTDIR)/compat
cp -p $(TOP_DIR)/license.terms $(TOP_DIR)/compat/*.c \
$(TOP_DIR)/compat/*.h $(TOP_DIR)/compat/README \
$(DISTDIR)/compat
mkdir $(DISTDIR)/tests
cp -p $(TOP_DIR)/license.terms $(DISTDIR)/tests
cp -p $(TOP_DIR)/tests/*.test $(TOP_DIR)/tests/README \
$(TOP_DIR)/tests/httpd $(TOP_DIR)/tests/*.tcl \
$(DISTDIR)/tests
mkdir $(DISTDIR)/win
cp $(TOP_DIR)/win/Makefile.in $(DISTDIR)/win
cp $(TOP_DIR)/win/configure.in $(TOP_DIR)/win/configure \
$(TOP_DIR)/win/tclConfig.sh.in \
$(TOP_DIR)/win/tcl.m4 $(TOP_DIR)/win/aclocal.m4 \
$(DISTDIR)/win
cp -p $(TOP_DIR)/win/*.c $(TOP_DIR)/win/*.h \
$(TOP_DIR)/win/*.ico $(TOP_DIR)/win/*.rc \
$(DISTDIR)/win
cp -p $(TOP_DIR)/win/*.bat $(DISTDIR)/win
$(TCL_EXE) $(TOOL_DIR)/eolFix.tcl -crlf $(DISTDIR)/win/*.bat
cp -p $(TOP_DIR)/win/makefile.* $(DISTDIR)/win
$(TCL_EXE) $(TOOL_DIR)/eolFix.tcl -crlf $(DISTDIR)/win/makefile.*
cp -p $(TOP_DIR)/win/rules.vc $(DISTDIR)/win
$(TCL_EXE) $(TOOL_DIR)/eolFix.tcl -crlf $(DISTDIR)/win/rules.vc
cp -p $(TOP_DIR)/win/coffbase.txt $(DISTDIR)/win
$(TCL_EXE) $(TOOL_DIR)/eolFix.tcl -crlf $(DISTDIR)/win/coffbase.txt
cp -p $(TOP_DIR)/win/tcl.hpj.in $(DISTDIR)/win
$(TCL_EXE) $(TOOL_DIR)/eolFix.tcl -crlf $(DISTDIR)/win/tcl.hpj.in
cp -p $(TOP_DIR)/win/tcl.ds* $(DISTDIR)/win
$(TCL_EXE) $(TOOL_DIR)/eolFix.tcl -crlf $(DISTDIR)/win/tcl.ds*
cp -p $(TOP_DIR)/win/README $(DISTDIR)/win
cp -p $(TOP_DIR)/license.terms $(DISTDIR)/win
mkdir $(DISTDIR)/mac
cp -p $(TOP_DIR)/mac/tcl*.sea.hqx \
$(TOP_DIR)/mac/*.c $(TOP_DIR)/mac/*.h $(TOP_DIR)/mac/*.r \
$(DISTDIR)/mac
cp -p $(TOP_DIR)/mac/porting.notes $(TOP_DIR)/mac/README $(DISTDIR)/mac
cp -p $(TOP_DIR)/mac/*.pch $(DISTDIR)/mac
cp -p $(TOP_DIR)/mac/*.doc $(TOP_DIR)/mac/*.html $(DISTDIR)/mac
cp -p $(TOP_DIR)/license.terms $(DISTDIR)/mac
mkdir $(DISTDIR)/macosx
cp -p $(TOP_DIR)/macosx/Makefile \
$(TOP_DIR)/macosx/*.c \
$(DISTDIR)/macosx
mkdir $(DISTDIR)/macosx/Tcl.pbproj
cp -p $(TOP_DIR)/macosx/Tcl.pbproj/*.pbx* $(DISTDIR)/macosx/Tcl.pbproj
cp -p $(TOP_DIR)/macosx/README $(DISTDIR)/macosx
mkdir $(DISTDIR)/unix/dltest
cp -p $(UNIX_DIR)/dltest/*.c $(UNIX_DIR)/dltest/Makefile.in \
$(UNIX_DIR)/dltest/README \
$(DISTDIR)/unix/dltest
mkdir $(DISTDIR)/tools
cp -p $(TOP_DIR)/tools/Makefile.in $(TOP_DIR)/tools/README \
$(TOP_DIR)/tools/configure $(TOP_DIR)/tools/configure.in \
$(TOP_DIR)/tools/*.tcl $(TOP_DIR)/tools/man2tcl.c \
$(TOP_DIR)/tools/tcl.wse.in $(TOP_DIR)/tools/*.bmp \
$(TOP_DIR)/tools/tcl.hpj.in \
$(DISTDIR)/tools
$(TCL_EXE) $(TOOL_DIR)/eolFix.tcl -crlf $(DISTDIR)/tools/tcl.hpj.in \
$(DISTDIR)/tools/tcl.wse.in
#
# The following target can only be used for non-patch releases. Use
# the "allpatch" target below for patch releases.
#
alldist: dist
rm -f $(DISTROOT)/$(DISTNAME)-src.tar.gz $(DISTROOT)/$(ZIPNAME)
cd $(DISTROOT); tar cf $(DISTNAME)-src.tar $(DISTNAME); \
gzip -9 $(DISTNAME)-src.tar; zip -qr8 $(ZIPNAME) $(DISTNAME)
#
# The target below is similar to "alldist" except it works for patch
# releases. It is needed because patch releases are peculiar: the
# patch designation appears in the name of the compressed file
# (e.g. tcl8.0p1.tar.gz) but the extracted source directory doesn't
# include the patch designation (e.g. tcl8.0).
#
allpatch: dist
rm -f $(DISTROOT)/$(DISTNAME)-src.tar.gz $(DISTROOT)/$(ZIPNAME)
mv $(DISTROOT)/tcl${VERSION} $(DISTROOT)/old
mv $(DISTROOT)/$(DISTNAME) $(DISTROOT)/tcl${VERSION}
cd $(DISTROOT); tar cf $(DISTNAME)-src.tar tcl${VERSION}; \
gzip -9 $(DISTNAME)-src.tar; zip -r8 $(ZIPNAME) tcl${VERSION}
mv $(DISTROOT)/tcl${VERSION} $(DISTROOT)/$(DISTNAME)
mv $(DISTROOT)/old $(DISTROOT)/tcl${VERSION}
#
# This target creates the HTML folder for Tcl & Tk and places it
# in DISTDIR/html. It uses the tcltk-man2html.tcl tool from
# the Tcl group's tool workspace. It depends on the Tcl & Tk being
# in directories called tcl8.3 & tk8.3 up two directories from the
# TOOL_DIR.
#
html:
$(BUILD_HTML)
html-tcl:
$(BUILD_HTML) --tcl
html-tk:
$(BUILD_HTML) --tk
BUILD_HTML = \
$(TCL_EXE) $(TOOL_DIR)/tcltk-man2html.tcl --htmldir=$(DISTDIR)/html \
--srcdir=$(TOP_DIR)/..
#
# Target to create a Macintosh version of the distribution. This will
# do a normal distribution and then massage the output to prepare it
# for moving to the Mac platform. This requires a few scripts and
# programs found only in the Tcl group's tool workspace.
#
macdist: dist machtml
machtml:
rm -f $(DISTDIR)/mac/tclMacProjects.sea.hqx
rm -rf $(DISTDIR)/doc
$(TCL_EXE) $(TOOL_DIR)/cvtEOL.tcl $(DISTDIR)
#
# Targets to build Solaris package of the distribution for the current
# architecture. To build stream packages for both sun4 and i86pc
# architectures:
#
# On the sun4 machine, execute the following:
# make distclean; ./configure
# make DISTDIR=<distdir> package
#
# Once the build is complete, execute the following on the i86pc
# machine:
# make DISTDIR=<distdir> package-quick
#
# <distdir> is the absolute path to a directory where the build should
# take place. These steps will generate the $(PACKAGE).sun4 and
# $(PACKAGE).i86pc stream packages. It is important that the packages be
# built in this fashion in order to ensure that the architecture
# independent files are exactly the same, including timestamps, in
# both packages.
#
PACKAGE=SCRPtcl
package: dist package-config package-common package-binaries package-generate
package-quick: package-config package-binaries package-generate
#
# Configure for the current architecture in the dist directory.
#
package-config:
mkdir -p $(DISTDIR)/unix/`arch`
cd $(DISTDIR)/unix/`arch`; \
../configure --prefix=/opt/$(PACKAGE)/$(VERSION) \
--exec_prefix=/opt/$(PACKAGE)/$(VERSION)/`arch` \
--enable-shared
mkdir -p $(DISTDIR)/$(PACKAGE)/$(VERSION)
mkdir -p $(DISTDIR)/$(PACKAGE)/$(VERSION)/`arch`
#
# Build and install the architecture independent files in the dist directory.
#
package-common:
cd $(DISTDIR)/unix/`arch`;\
$(MAKE); \
$(MAKE) prefix=$(DISTDIR)/$(PACKAGE)/$(VERSION) \
exec_prefix=$(DISTDIR)/$(PACKAGE)/$(VERSION)/`arch` \
install-libraries install-man
mkdir -p $(DISTDIR)/$(PACKAGE)/$(VERSION)/bin
sed -e "s/TCLVERSION/$(VERSION)/g" < $(UNIX_DIR)/tclsh.sh \
> $(DISTDIR)/$(PACKAGE)/$(VERSION)/bin/tclsh$(VERSION)
chmod 755 $(DISTDIR)/$(PACKAGE)/$(VERSION)/bin/tclsh$(VERSION)
#
# Build and install the architecture specific files in the dist directory.
#
package-binaries:
cd $(DISTDIR)/unix/`arch`; \
$(MAKE); \
$(MAKE) install-binaries prefix=$(DISTDIR)/$(PACKAGE)/$(VERSION) \
exec_prefix=$(DISTDIR)/$(PACKAGE)/$(VERSION)/`arch`
#
# Generate a package from the installed files in the dist directory for the
# current architecture.
#
package-generate:
pkgproto $(DISTDIR)/$(PACKAGE)/$(VERSION)/bin=bin \
$(DISTDIR)/$(PACKAGE)/$(VERSION)/include=include \
$(DISTDIR)/$(PACKAGE)/$(VERSION)/lib=lib \
$(DISTDIR)/$(PACKAGE)/$(VERSION)/man=man \
$(DISTDIR)/$(PACKAGE)/$(VERSION)/`arch`=`arch` \
| $(TCL_EXE) $(UNIX_DIR)/mkProto.tcl \
$(VERSION) $(UNIX_DIR) > prototype
pkgmk -o -d . -f prototype -a `arch`
pkgtrans -s . $(PACKAGE).`arch` $(PACKAGE)
rm -rf $(PACKAGE)
# DO NOT DELETE THIS LINE -- make depend depends on it.