Tcl Source Code

Artifact [8e724ba4bb]
Login

Artifact 8e724ba4bbe735c19e2143a3a9bfcfcc57f13dd2:

Attachment "sampleextension2.patch" to ticket [1160114fff] added by mdejong 2005-07-26 10:49:30.
Index: Makefile.in
===================================================================
RCS file: /cvsroot/tcl/sampleextension/Makefile.in,v
retrieving revision 1.58
diff -u -r1.58 Makefile.in
--- Makefile.in	25 Jul 2005 07:12:14 -0000	1.58
+++ Makefile.in	26 Jul 2005 03:41:29 -0000
@@ -137,18 +137,11 @@
 		  TCLLIBPATH="$(TCLLIBPATH)"
 #		  TK_LIBRARY=`@CYGPATH@ $(TK_SRC_DIR)/library`
 
-# SYSTEM_TCLSH is a version of Tcl that is already installed
-# on the system. It is used to regenerate a pkgIndex.tcl
-# if needed. Note that is never going to be the same as the
-# version of tclsh in the Tcl build dir.
+TCLSH_PROG	= @TCLSH_PROG@
+TCLSH	= $(TCLSH_ENV) $(TCLSH_PROG)
 
-SYSTEM_TCLSH	= @TCLSH_PROG@
-
-BUILD_TCLSH_PROG	= @BUILD_TCLSH@
-BUILD_TCLSH	= $(TCLSH_ENV) $(BUILD_TCLSH_PROG)
-
-#BUILD_WISH_PROG	= @BUILD_WISH@
-#BUILD_WISH	= $(TCLSH_ENV) $(BUILD_WISH_PROG)
+#WISH_PROG	= @WISH_PROG@
+#WISH	= $(TCLSH_ENV) $(WISH_PROG)
 
 
 SHARED_BUILD	= @SHARED_BUILD@
@@ -244,13 +237,13 @@
 	done
 
 test: binaries libraries
-	$(BUILD_TCLSH) `@CYGPATH@ $(srcdir)/tests/all.tcl` $(TESTFLAGS)
+	$(TCLSH) `@CYGPATH@ $(srcdir)/tests/all.tcl` $(TESTFLAGS)
 
 shell: binaries libraries
-	@$(BUILD_TCLSH) $(SCRIPT)
+	@$(TCLSH) $(SCRIPT)
 
 gdb:
-	$(TCLSH_ENV) gdb $(BUILD_TCLSH_PROG) $(SCRIPT)
+	$(TCLSH_ENV) gdb $(TCLSH_PROG) $(SCRIPT)
 
 depend:
 
@@ -295,22 +288,6 @@
 	$(COMPILE) -c `@CYGPATH@ $<` -o $@
 
 #========================================================================
-# Create the pkgIndex.tcl file.
-# It is usually easiest to let Tcl do this for you with pkg_mkIndex, but
-# you may find that you need to customize the package.  If so, either
-# modify the -hand version, or create a pkgIndex.tcl.in file and have
-# the configure script output the pkgIndex.tcl by editing configure.in.
-#========================================================================
-
-pkgIndex.tcl: $(PKG_LIB_FILE)
-	( echo pkg_mkIndex . $(PKG_LIB_FILE) \; exit; ) | $(SYSTEM_TCLSH)
-
-pkgIndex.tcl-hand:
-	(echo 'package ifneeded $(PACKAGE_NAME) $(PACKAGE_VERSION) \
-	    [list load [file join $$dir $(PKG_LIB_FILE)]]'\
-	) > pkgIndex.tcl
-
-#========================================================================
 # Distribution creation
 # You may need to tweak this target to make it work correctly.
 #========================================================================
Index: configure.in
===================================================================
RCS file: /cvsroot/tcl/sampleextension/configure.in,v
retrieving revision 1.42
diff -u -r1.42 configure.in
--- configure.in	25 Jul 2005 07:12:16 -0000	1.42
+++ configure.in	26 Jul 2005 03:41:29 -0000
@@ -168,19 +168,14 @@
 TEA_MAKE_LIB
 
 #--------------------------------------------------------------------
-# Determine the name of the tclsh and wish executables in the
-# Tcl and Tk build directories and subst into the Makefile.
-# Find tclsh so that we can run pkg_mkIndex to generate the pkgIndex.tcl
-# file during the install process.  Don't run the TCLSH_PROG through
-# ${CYGPATH} because it's being used directly by make.
-# Require that we use a tclsh shell version 8.2 or later since earlier
-# versions have bugs in the pkg_mkIndex routine.
-# Add WISH as well if this is a Tk extension.
+# 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_BUILD_TCLSH
 TEA_PROG_TCLSH
-#TEA_BUILD_WISH
 #TEA_PROG_WISH
 
 #--------------------------------------------------------------------
Index: tclconfig/tcl.m4
===================================================================
RCS file: /cvsroot/tcl/tclconfig/tcl.m4,v
retrieving revision 1.70
diff -u -r1.70 tcl.m4
--- tclconfig/tcl.m4	25 Jul 2005 02:38:43 -0000	1.70
+++ tclconfig/tcl.m4	26 Jul 2005 03:41:30 -0000
@@ -3562,15 +3562,14 @@
 
 #------------------------------------------------------------------------
 # TEA_PROG_TCLSH
-#	Locate a tclsh shell installed on the system path. This macro
-#	will only find a Tcl shell that already exists on the system.
-#	It will not find a Tcl shell in the Tcl build directory or
-#	a Tcl shell that has been installed from the Tcl build directory.
-#	If a Tcl shell can't be located on the PATH, then TCLSH_PROG will
-#	be set to "". Extensions should take care not to create Makefile
-#	rules that are run by default and depend on TCLSH_PROG. An
-#	extension can't assume that an executable Tcl shell exists at
-#	build time.
+#	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
@@ -3581,76 +3580,37 @@
 #------------------------------------------------------------------------
 
 AC_DEFUN(TEA_PROG_TCLSH, [
-    # Allow the user to provide this setting in the env
-    if test "x${TCLSH_PROG}" = "x" ; then
-	AC_MSG_CHECKING([for tclsh])
-
-	AC_CACHE_VAL(ac_cv_path_tclsh, [
-	search_path=`echo ${PATH} | sed -e 's/:/ /g'`
-	for dir in $search_path ; do
-	    for j in `ls -r $dir/tclsh[[8-9]]*${EXEEXT} 2> /dev/null` \
-		    `ls -r $dir/tclsh*${EXEEXT} 2> /dev/null` ; do
-		if test x"$ac_cv_path_tclsh" = x ; then
-		    if test -f "$j" ; then
-			ac_cv_path_tclsh=$j
-			break
-		    fi
-		fi
-	    done
-	done
-	])
-
-	if test -f "$ac_cv_path_tclsh" ; then
-	    TCLSH_PROG="$ac_cv_path_tclsh"
-	    AC_MSG_RESULT($TCLSH_PROG)
-	else
-	    # It is not an error if an installed version of Tcl can't be located.
-	    TCLSH_PROG=""
-	    AC_MSG_RESULT([No tclsh found on PATH])
-	fi
-    fi
-    AC_SUBST(TCLSH_PROG)
-])
-
-#------------------------------------------------------------------------
-# TEA_BUILD_TCLSH
-#	Determine the fully qualified path name of the tclsh executable
-#	in the Tcl build 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 build tclsh must be used
-#	when running tests from an extension build directory. It is not
-#	correct to use the TCLSH_PROG in cases like this.
-#
-# Arguments
-#	none
-#
-# Results
-#	Subst's the following values:
-#		BUILD_TCLSH
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_BUILD_TCLSH, [
-    AC_MSG_CHECKING([for tclsh in Tcl build directory])
-    if test "$TEA_PLATFORM" = "windows"; then
-        BUILD_TCLSH=${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}
+    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
-        BUILD_TCLSH=${TCL_BIN_DIR}/tclsh
+        # tclConfig.sh is in $INSTALL/lib directory
+        REAL_TCL_BIN_DIR=`cd ${TCL_BIN_DIR}/../bin/;pwd`
+        if test "$TEA_PLATFORM" = "windows"; then
+            TCLSH_PROG=${REAL_TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}
+        else
+            TCLSH_PROG=${REAL_TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}
+        fi
     fi
-    AC_MSG_RESULT($BUILD_TCLSH)
-    AC_SUBST(BUILD_TCLSH)
+    AC_MSG_RESULT($TCLSH_PROG)
+    AC_SUBST(TCLSH_PROG)
 ])
 
 #------------------------------------------------------------------------
 # TEA_PROG_WISH
-#	Locate a wish shell installed on the system path. This macro
-#	will only find a Wish shell that already exists on the system.
-#	It will not find a Wish shell in the Tk build directory or
-#	a Tk shell that has been installed from the Tk build directory.
-#	If a Tk shell can't be located on the PATH, then WISH_PROG will
-#	be set to "". Extensions should take care not to create Makefile
-#	rules that are run by default and depend on WISH_PROG. An
-#	extension can't assume that an executable Tk shell exists at
-#	build time.
+#	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
@@ -3661,63 +3621,25 @@
 #------------------------------------------------------------------------
 
 AC_DEFUN(TEA_PROG_WISH, [
-    # Allow the user to provide this setting in the env
-    if test "x${WISH_PROG}" = "x" ; then
-	AC_MSG_CHECKING([for wish])
-
-	AC_CACHE_VAL(ac_cv_path_wish, [
-	search_path=`echo ${PATH} | sed -e 's/:/ /g'`
-	for dir in $search_path ; do
-	    for j in `ls -r $dir/wish[[8-9]]*${EXEEXT} 2> /dev/null` \
-		    `ls -r $dir/wish*${EXEEXT} 2> /dev/null` ; do
-		if test x"$ac_cv_path_wish" = x ; then
-		    if test -f "$j" ; then
-			ac_cv_path_wish=$j
-			break
-		    fi
-		fi
-	    done
-	done
-	])
-
-	if test -f "$ac_cv_path_wish" ; then
-	    WISH_PROG="$ac_cv_path_wish"
-	    AC_MSG_RESULT($WISH_PROG)
-	else
-	    # It is not an error if an installed version of Tk can't be located.
-	    WISH_PROG=""
-	    AC_MSG_RESULT([No wish found on PATH])
-	fi
-    fi
-    AC_SUBST(WISH_PROG)
-])
-
-#------------------------------------------------------------------------
-# TEA_BUILD_WISH
-#	Determine the fully qualified path name of the wish executable
-#	in the Tk build 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 build wish must be used
-#	when running tests from an extension build directory. It is not
-#	correct to use the WISH_PROG in cases like this.
-#
-# Arguments
-#	none
-#
-# Results
-#	Subst's the following values:
-#		BUILD_WISH
-#------------------------------------------------------------------------
-
-AC_DEFUN(TEA_BUILD_WISH, [
-    AC_MSG_CHECKING([for wish in Tk build directory])
-    if test "$TEA_PLATFORM" = "windows"; then
-        BUILD_WISH=${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TCL_DBGX}${EXEEXT}
+    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
-        BUILD_WISH=${TK_BIN_DIR}/wish
+        # tkConfig.sh is in $INSTALL/lib directory
+        REAL_TK_BIN_DIR=`cd ${TK_BIN_DIR}/../bin/;pwd`
+        if test "$TEA_PLATFORM" = "windows"; then
+            WISH_PROG=${REAL_TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}
+        else
+            WISH_PROG=${REAL_TK_BIN_DIR}/wish${TK_MAJOR_VERSION}.${TK_MINOR_VERSION}${TK_DBGX}
+        fi
     fi
-    AC_MSG_RESULT($BUILD_WISH)
-    AC_SUBST(BUILD_WISH)
+    AC_MSG_RESULT($WISH_PROG)
+    AC_SUBST(WISH_PROG)
 ])
 
 #------------------------------------------------------------------------
@@ -3957,6 +3879,11 @@
     fi
 ])
 
+# FIXME: This macro is ill-conceived. One can't assume that the
+# TCLSH_PROG can be executed at build time when cross compiling.
+# Also, this will not work when TCLSH_PROG is the tclsh in the
+# build directory.
+
 #------------------------------------------------------------------------
 # TEA_PATH_NOSPACE
 #	Ensure that the given path has no spaces.  This is necessary for