Index: trunk/base/aclocal.m4
===================================================================
--- trunk/base/aclocal.m4	(revision 118266)
+++ trunk/base/aclocal.m4	(revision 118297)
@@ -97,7 +97,8 @@
 ])
 
-dnl Configure a project contained in a .tar.gz (or .tgz) tarball, extracting it
-dnl previously, if necessary. Different from AC_CONFIG_SUBDIRS (on which this
-dnl macro is based), you can pass parameters to the sub-configure script.
+dnl Configure a project contained in a .tar.gz, .tgz or .tar.bz2 tarball,
+dnl extracting it previously, if necessary. Different from AC_CONFIG_SUBDIRS
+dnl (on which this macro is based), you can pass parameters to the
+dnl sub-configure script.
 dnl
 dnl Parameters:
@@ -117,5 +118,17 @@
 		AS_MKDIR_P(["$mp_tarball_vendordir"])
 		AC_MSG_NOTICE([=== extracting $mp_tarball])
-		(cd "$mp_tarball_vendordir"; gzip -d < "$ac_abs_confdir/$mp_tarball" | tar xf - || AC_MSG_ERROR([failed to extract $mp_tarball]))
+		mp_tarball_extract_cmd=
+		case "$mp_tarball" in
+			*.tar.gz | *.tgz)
+				mp_tarball_extract_cmd="gzip"
+				;;
+			*.tar.bz2 | *.tbz2)
+				mp_tarball_extract_cmd="bzip2"
+				;;
+			*)
+				AC_MSG_ERROR([Don't know how to extract tarball $mp_tarball])
+				;;
+		esac
+		(cd "$mp_tarball_vendordir"; "$mp_tarball_extract_cmd" -d < "$ac_abs_confdir/$mp_tarball" | tar xf - || AC_MSG_ERROR([failed to extract $mp_tarball]))
 	fi
 	if ! test -d "$ac_dir"; then
Index: trunk/base/configure
===================================================================
--- trunk/base/configure	(revision 118266)
+++ trunk/base/configure	(revision 118297)
@@ -646,4 +646,6 @@
 VENDOR_TCLLIB_INSTALL
 VENDOR_TCLLIB_SUBDIR
+VENDOR_TCLX_INSTALL
+VENDOR_TCLX_SUBDIR
 VENDOR_TCLTHREAD_INSTALL
 VENDOR_TCLTHREAD_SUBDIR
@@ -9504,10 +9506,8 @@
 exec_prefix=$oldexec_prefix
 
-# Determine if we need to install some bundled packages
-VENDOR_PACKAGES=
-
 ## Tcl package
 tcl_version=8.5.15
 tcl_thread_version=2.7.0
+tclx_version=8.4.1
 tcllib_version=1.15
 	mp_fn_var_prepend() {
@@ -9525,5 +9525,17 @@
 		{ $as_echo "$as_me:${as_lineno-$LINENO}: === extracting $mp_tarball" >&5
 $as_echo "$as_me: === extracting $mp_tarball" >&6;}
-		(cd "$mp_tarball_vendordir"; gzip -d < "$ac_abs_confdir/$mp_tarball" | tar xf - || as_fn_error $? "failed to extract $mp_tarball" "$LINENO" 5)
+		mp_tarball_extract_cmd=
+		case "$mp_tarball" in
+			*.tar.gz | *.tgz)
+				mp_tarball_extract_cmd="gzip"
+				;;
+			*.tar.bz2 | *.tbz2)
+				mp_tarball_extract_cmd="bzip2"
+				;;
+			*)
+				as_fn_error $? "Don't know how to extract tarball $mp_tarball" "$LINENO" 5
+				;;
+		esac
+		(cd "$mp_tarball_vendordir"; "$mp_tarball_extract_cmd" -d < "$ac_abs_confdir/$mp_tarball" | tar xf - || as_fn_error $? "failed to extract $mp_tarball" "$LINENO" 5)
 	fi
 	if ! test -d "$ac_dir"; then
@@ -9843,5 +9855,17 @@
 		{ $as_echo "$as_me:${as_lineno-$LINENO}: === extracting $mp_tarball" >&5
 $as_echo "$as_me: === extracting $mp_tarball" >&6;}
-		(cd "$mp_tarball_vendordir"; gzip -d < "$ac_abs_confdir/$mp_tarball" | tar xf - || as_fn_error $? "failed to extract $mp_tarball" "$LINENO" 5)
+		mp_tarball_extract_cmd=
+		case "$mp_tarball" in
+			*.tar.gz | *.tgz)
+				mp_tarball_extract_cmd="gzip"
+				;;
+			*.tar.bz2 | *.tbz2)
+				mp_tarball_extract_cmd="bzip2"
+				;;
+			*)
+				as_fn_error $? "Don't know how to extract tarball $mp_tarball" "$LINENO" 5
+				;;
+		esac
+		(cd "$mp_tarball_vendordir"; "$mp_tarball_extract_cmd" -d < "$ac_abs_confdir/$mp_tarball" | tar xf - || as_fn_error $? "failed to extract $mp_tarball" "$LINENO" 5)
 	fi
 	if ! test -d "$ac_dir"; then
@@ -10144,11 +10168,9 @@
 
 
-## Tcllib package
-# Note that Tcllib needs a Tcl interpreter during installation; it will *not*
-# be the one we configure above, because that one isn't built yet. That's not
-# a problem, though -- it's only used during installation.
-
-	mp_tarball="vendor/tcllib-${tcllib_version}.tar.gz"
-	ac_dir=vendor/tcllib-${tcllib_version}
+## TclX package
+# TclX is required for signal handling
+
+	mp_tarball="vendor/tclx${tclx_version}.tar.bz2"
+	ac_dir=vendor/tclx8.4
 
 	mp_popdir=$(pwd)
@@ -10158,5 +10180,17 @@
 		{ $as_echo "$as_me:${as_lineno-$LINENO}: === extracting $mp_tarball" >&5
 $as_echo "$as_me: === extracting $mp_tarball" >&6;}
-		(cd "$mp_tarball_vendordir"; gzip -d < "$ac_abs_confdir/$mp_tarball" | tar xf - || as_fn_error $? "failed to extract $mp_tarball" "$LINENO" 5)
+		mp_tarball_extract_cmd=
+		case "$mp_tarball" in
+			*.tar.gz | *.tgz)
+				mp_tarball_extract_cmd="gzip"
+				;;
+			*.tar.bz2 | *.tbz2)
+				mp_tarball_extract_cmd="bzip2"
+				;;
+			*)
+				as_fn_error $? "Don't know how to extract tarball $mp_tarball" "$LINENO" 5
+				;;
+		esac
+		(cd "$mp_tarball_vendordir"; "$mp_tarball_extract_cmd" -d < "$ac_abs_confdir/$mp_tarball" | tar xf - || as_fn_error $? "failed to extract $mp_tarball" "$LINENO" 5)
 	fi
 	if ! test -d "$ac_dir"; then
@@ -10454,5 +10488,331 @@
 	cd "$mp_popdir"
 
-VENDOR_PACKAGES="$VENDOR_PACKAGES tcllib-${tcllib_version}"
+VENDOR_TCLX_SUBDIR=tclx8.4
+VENDOR_TCLX_INSTALL="install-binaries install-libraries"
+
+
+
+## Tcllib package
+# Note that Tcllib needs a Tcl interpreter during installation; it will *not*
+# be the one we configure above, because that one isn't built yet. That's not
+# a problem, though -- it's only used during installation.
+
+	mp_tarball="vendor/tcllib-${tcllib_version}.tar.gz"
+	ac_dir=vendor/tcllib-${tcllib_version}
+
+	mp_popdir=$(pwd)
+	if ! test -d "$ac_dir"; then
+		mp_tarball_vendordir="$(dirname "$mp_tarball")"
+		as_dir="$mp_tarball_vendordir"; as_fn_mkdir_p
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: === extracting $mp_tarball" >&5
+$as_echo "$as_me: === extracting $mp_tarball" >&6;}
+		mp_tarball_extract_cmd=
+		case "$mp_tarball" in
+			*.tar.gz | *.tgz)
+				mp_tarball_extract_cmd="gzip"
+				;;
+			*.tar.bz2 | *.tbz2)
+				mp_tarball_extract_cmd="bzip2"
+				;;
+			*)
+				as_fn_error $? "Don't know how to extract tarball $mp_tarball" "$LINENO" 5
+				;;
+		esac
+		(cd "$mp_tarball_vendordir"; "$mp_tarball_extract_cmd" -d < "$ac_abs_confdir/$mp_tarball" | tar xf - || as_fn_error $? "failed to extract $mp_tarball" "$LINENO" 5)
+	fi
+	if ! test -d "$ac_dir"; then
+		as_fn_error $? "tarball $mp_tarball did not extract to $ac_dir" "$LINENO" 5
+	fi
+
+	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
+
+	cd "$ac_dir"
+
+	if test "$no_recursion" != yes || test ! -f "$ac_srcdir/config.status"; then
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: === configuring in $ac_dir ($mp_popdir/$ac_dir)" >&5
+$as_echo "$as_me: === configuring in $ac_dir ($mp_popdir/$ac_dir)" >&6;}
+		if test -f "$ac_srcdir/configure"; then
+			mp_sub_configure_args=
+			mp_sub_configure_keys=
+			# Compile a list of keys that have been given to the MP_CONFIG_TARBALL
+			# macro; we want to skip copying those parameters from the original
+			# configure invocation.
+			for mp_arg in --prefix=${macports_libexec_dir}; do
+				case $mp_arg in
+					--*=* | -*=*)
+							mp_arg_key=$($as_echo "$mp_arg" | sed -E 's/^--?([^=]+)=.*$/\1/')
+								case $mp_arg_key in
+		*\'*)
+			mp_arg_key=$($as_echo "$mp_arg_key" | sed "s/'/'\\\\\\\\''/g")
+		;;
+	esac
+	mp_arg_key="'$mp_arg_key'"
+	as_fn_append mp_sub_configure_keys " $mp_arg_key"
+
+					;;
+				esac
+						case $mp_arg in
+		*\'*)
+			mp_arg=$($as_echo "$mp_arg" | sed "s/'/'\\\\\\\\''/g")
+		;;
+	esac
+	mp_arg="'$mp_arg'"
+	as_fn_append mp_sub_configure_args " $mp_arg"
+
+			done
+			# Walk the list of arguments given to the original configure script;
+			# filter out a few common ones we likely would not want to pass along,
+			# add --disable-option-checking and filter those already given as
+			# argument to MP_CONFIG_TARBALL.
+			# Most of this code is adapted from _AC_OUTPUT_SUBDIRS in
+			# $prefix/share/autoconf/autoconf/status.m4.
+			mp_prev=
+			eval "set x $ac_configure_args"
+			shift
+			for mp_arg; do
+				if test -n "$mp_prev"; then
+					mp_prev=
+					continue
+				fi
+				case $mp_arg in
+					  -cache-file \
+					| --cache-file \
+					| --cache-fil \
+					| --cache-fi \
+					| --cache-f \
+					| --cache- \
+					| --cache \
+					| --cach \
+					| --cac \
+					| --ca \
+					| --c)
+						mp_prev=cache_file
+					;;
+					  -cache-file=* \
+					| --cache-file=* \
+					| --cache-fil=* \
+					| --cache-fi=* \
+					| --cache-f=* \
+					| --cache-=* \
+					| --cache=* \
+					| --cach=* \
+					| --cac=* \
+					| --ca=* \
+					| --c=*)
+						# ignore --cache-file
+					;;
+					  --config-cache \
+					| -C)
+						# ignore -C
+					;;
+					  -srcdir \
+					| --srcdir \
+					| -srcdi \
+					| -srcd \
+					| -src \
+					| -sr)
+						mp_prev=srcdir
+					;;
+					  -srcdir=* \
+					| --srcdir=* \
+					| --srcdi=* \
+					| --srcd=* \
+					| --src=* \
+					| --sr=*)
+						# ignore --srcdir
+					;;
+					  -prefix \
+					| --prefix \
+					| --prefi \
+					| --pref \
+					| --pre \
+					| --pr \
+					| --p)
+						mp_prev=prefix
+					;;
+					  -prefix=* \
+					| --prefix=* \
+					| --prefi=* \
+					| --pref=* \
+					| --pre=* \
+					| --pr=* \
+					| --p=*)
+						# ignore --prefix
+					;;
+					--disable-option-checking)
+						# ignore --disable-option-checking
+					;;
+					--*=* | -*=*)
+							mp_arg_key=$($as_echo "$mp_arg" | sed -E 's/^--?([^=]+)=.*$/\1/')
+							mp_list_contains_present=
+	eval "mp_list_contains_list=\"$mp_sub_configure_keys\""
+	for mp_list_contains_entry in $mp_list_contains_list; do
+		test -z "$mp_list_contains_entry" && continue
+		if test "x$mp_arg_key" = "x$mp_list_contains_entry"; then
+			mp_list_contains_present=1
+			break
+		fi
+	done
+	if test "x$mp_list_contains_present" = "x"; then
+		:
+		else
+									case $mp_arg in
+		*\'*)
+			mp_arg=$($as_echo "$mp_arg" | sed "s/'/'\\\\\\\\''/g")
+		;;
+	esac
+	mp_arg="'$mp_arg'"
+	as_fn_append mp_sub_configure_args " $mp_arg"
+
+
+	fi
+
+					;;
+					*)
+						# always pass positional arguments
+								case $mp_arg in
+		*\'*)
+			mp_arg=$($as_echo "$mp_arg" | sed "s/'/'\\\\\\\\''/g")
+		;;
+	esac
+	mp_arg="'$mp_arg'"
+	as_fn_append mp_sub_configure_args " $mp_arg"
+
+					;;
+				esac
+			done
+
+			# Now prepend some arguments that should always be present unless
+			# overriden, such as --prefix, --silent, --disable-option-checking,
+			# --cache-file, --srcdir
+			# Pass --prefix unless already given
+			mp_arg_key=prefix
+				mp_list_contains_present=
+	eval "mp_list_contains_list=\"$mp_sub_configure_args\""
+	for mp_list_contains_entry in $mp_list_contains_list; do
+		test -z "$mp_list_contains_entry" && continue
+		if test "x$mp_arg_key" = "x$mp_list_contains_entry"; then
+			mp_list_contains_present=1
+			break
+		fi
+	done
+	if test "x$mp_list_contains_present" = "x"; then
+		:
+		else
+				mp_arg="--prefix=$prefix"
+						case $mp_arg in
+		*\'*)
+			mp_arg=$($as_echo "$mp_arg" | sed "s/'/'\\\\\\\\''/g")
+		;;
+	esac
+	mp_arg="'$mp_arg'"
+			mp_fn_var_prepend mp_sub_configure_args "$mp_arg "
+
+
+
+	fi
+
+
+			# Pass --silent
+			if test "$silent" = yes; then
+				mp_arg="--silent"
+						case $mp_arg in
+		*\'*)
+			mp_arg=$($as_echo "$mp_arg" | sed "s/'/'\\\\\\\\''/g")
+		;;
+	esac
+	mp_arg="'$mp_arg'"
+			mp_fn_var_prepend mp_sub_configure_args "$mp_arg "
+
+
+			fi
+
+			# Always prepend --disable-option-checking to silence warnings, since
+			# different subdirs can have different --enable and --with options.
+			mp_arg="--disable-option-checking"
+					case $mp_arg in
+		*\'*)
+			mp_arg=$($as_echo "$mp_arg" | sed "s/'/'\\\\\\\\''/g")
+		;;
+	esac
+	mp_arg="'$mp_arg'"
+			mp_fn_var_prepend mp_sub_configure_args "$mp_arg "
+
+
+
+			# Make the cache file name correct relative to the subdirectory.
+			case $cache_file in
+				[\\/]* | ?:[\\/]* )
+					mp_sub_cache_file=$cache_file
+				;;
+				*) # Relative name.
+					mp_sub_cache_file=$ac_top_build_prefix$cache_file
+				;;
+			esac
+			mp_arg="--cache-file=$mp_sub_cache_file"
+					case $mp_arg in
+		*\'*)
+			mp_arg=$($as_echo "$mp_arg" | sed "s/'/'\\\\\\\\''/g")
+		;;
+	esac
+	mp_arg="'$mp_arg'"
+			mp_fn_var_prepend mp_sub_configure_args "$mp_arg "
+
+
+
+			mp_arg="--srcdir=$ac_srcdir"
+					case $mp_arg in
+		*\'*)
+			mp_arg=$($as_echo "$mp_arg" | sed "s/'/'\\\\\\\\''/g")
+		;;
+	esac
+	mp_arg="'$mp_arg'"
+	as_fn_append mp_sub_configure_args " $mp_arg"
+
+
+			{ $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_srcdir/configure $mp_sub_configure_args in $ac_dir" >&5
+$as_echo "$as_me: running $SHELL $ac_srcdir/configure $mp_sub_configure_args in $ac_dir" >&6;}
+			eval "\$SHELL \$ac_srcdir/configure $mp_sub_configure_args" || as_fn_error $? "configure failed for $ac_dir" "$LINENO" 5
+		else
+			as_fn_error $? "no configure script found in $ac_dir" "$LINENO" 5
+		fi
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: === finished configuring in $ac_dir ($mp_popdir/$ac_dir)" >&5
+$as_echo "$as_me: === finished configuring in $ac_dir ($mp_popdir/$ac_dir)" >&6;}
+	fi
+	cd "$mp_popdir"
+
 VENDOR_TCLLIB_SUBDIR=tcllib-${tcllib_version}
 VENDOR_TCLLIB_INSTALL="install-libraries"
Index: trunk/base/configure.ac
===================================================================
--- trunk/base/configure.ac	(revision 118266)
+++ trunk/base/configure.ac	(revision 118297)
@@ -321,10 +321,8 @@
 exec_prefix=$oldexec_prefix
 
-# Determine if we need to install some bundled packages
-VENDOR_PACKAGES=
-
 ## Tcl package
 tcl_version=8.5.15
 tcl_thread_version=2.7.0
+tclx_version=8.4.1
 tcllib_version=1.15
 MP_CONFIG_TARBALL([vendor/tcl${tcl_version}-src.tar.gz], [vendor/tcl${tcl_version}/unix], [--prefix=${macports_libexec_dir} --enable-threads])
@@ -347,4 +345,12 @@
 AC_SUBST(VENDOR_TCLTHREAD_INSTALL)
 
+## TclX package
+# TclX is required for signal handling
+MP_CONFIG_TARBALL([vendor/tclx${tclx_version}.tar.bz2], [vendor/tclx8.4], [--prefix=${macports_libexec_dir}])
+VENDOR_TCLX_SUBDIR=tclx8.4
+VENDOR_TCLX_INSTALL="install-binaries install-libraries"
+AC_SUBST(VENDOR_TCLX_SUBDIR)
+AC_SUBST(VENDOR_TCLX_INSTALL)
+
 ## Tcllib package
 # Note that Tcllib needs a Tcl interpreter during installation; it will *not*
@@ -352,5 +358,4 @@
 # a problem, though -- it's only used during installation.
 MP_CONFIG_TARBALL([vendor/tcllib-${tcllib_version}.tar.gz], [vendor/tcllib-${tcllib_version}], [--prefix=${macports_libexec_dir}])
-VENDOR_PACKAGES="$VENDOR_PACKAGES tcllib-${tcllib_version}"
 VENDOR_TCLLIB_SUBDIR=tcllib-${tcllib_version}
 VENDOR_TCLLIB_INSTALL="install-libraries"
Index: trunk/base/vendor/Makefile.in
===================================================================
--- trunk/base/vendor/Makefile.in	(revision 118266)
+++ trunk/base/vendor/Makefile.in	(revision 118297)
@@ -4,4 +4,7 @@
 TCLTHREAD_SUBDIR=	@VENDOR_TCLTHREAD_SUBDIR@
 TCLTREHAD_TARGETS=	@VENDOR_TCLTHREAD_INSTALL@
+
+TCLX_SUBDIR=		@VENDOR_TCLX_SUBDIR@
+TCLX_TARGETS=		@VENDOR_TCLX_INSTALL@
 
 TCLLIB_SUBDIR=		@VENDOR_TCLLIB_SUBDIR@
@@ -11,7 +14,7 @@
 
 .PHONY: all clean distclean install destroot test
-.PHONY: destroot-tcl destroot-tcllthread destroot-tcllib
-.PHONY: install-tcl install-tcllthread install-tcllib
-.PHONY: %-tcl %-tcllthread %-tcllib
+.PHONY: destroot-tcl destroot-tcllthread destroot-tclx destroot-tcllib
+.PHONY: install-tcl install-tcllthread install-tclx install-tcllib
+.PHONY: %-tcl %-tcllthread %-tclx %-tcllib
 
 # for make all, run destroot (where destroot will depend on all of each
@@ -27,9 +30,13 @@
 	@$(MAKE) -C @VENDOR_TCLTHREAD_SUBDIR@ $(@:%-tclthread=%)
 
+%-tclx:
+	@echo ===\> making $(@:%-tclx=%) in ${DIRPRFX}@VENDOR_TCLX_SUBDIR@
+	@$(MAKE) -C @VENDOR_TCLX_SUBDIR@ $(@:%-tclx=%)
+
 %-tcllib:
 	@echo ===\> making $(@:%-tcllib=%) in ${DIRPRFX}@VENDOR_TCLLIB_SUBDIR@
 	@$(MAKE) -C @VENDOR_TCLLIB_SUBDIR@ $(@:%-tcllib=%)
 
-destroot: destroot-tcl destroot-tclthread destroot-tcllib
+destroot: destroot-tcl destroot-tclthread destroot-tclx destroot-tcllib
 destroot-tcl: all-tcl
 	@echo ===\> staging to destroot in ${DIRPRFX}@VENDOR_TCL_SUBDIR@
@@ -40,9 +47,13 @@
 	@$(MAKE) -C @VENDOR_TCLTHREAD_SUBDIR@ DESTDIR=${DESTROOT} @VENDOR_TCLTHREAD_INSTALL@
 
+destroot-tclx: all-tclx
+	@echo ===\> staging to destroot in ${DIRPRFX}@VENDOR_TCLX_SUBDIR@
+	@$(MAKE) -C @VENDOR_TCLX_SUBDIR@ DESTDIR=${DESTROOT} @VENDOR_TCLX_INSTALL@
+
 destroot-tcllib: all-tcllib
 	@echo ===\> staging to destroot in ${DIRPRFX}@VENDOR_TCLLIB_SUBDIR@
 	@$(MAKE) -C @VENDOR_TCLLIB_SUBDIR@ DESTDIR=${DESTROOT} @VENDOR_TCLLIB_INSTALL@
 
-install: install-tcl install-tclthread install-tcllib
+install: install-tcl install-tclthread install-tclx install-tcllib
 install-tcl:
 	@echo ===\> making $(@:%-tcl=%) in ${DIRPRFX}@VENDOR_TCL_SUBDIR@
@@ -53,4 +64,8 @@
 	@$(MAKE) -C @VENDOR_TCLTHREAD_SUBDIR@ @VENDOR_TCLTHREAD_INSTALL@
 
+install-tclx:
+	@echo ===\> making $(@:%-tclx=%) in ${DIRPRFX}@VENDOR_TCLX_SUBDIR@
+	@$(MAKE) -C @VENDOR_TCLX_SUBDIR@ @VENDOR_TCLX_INSTALL@
+
 install-tcllib:
 	@echo ===\> making $(@:%-tcllib=%) in ${DIRPRFX}@VENDOR_TCLLIB_SUBDIR@
@@ -59,9 +74,9 @@
 test:
 
-clean: clean-tcl clean-tcllib clean-tclthread
+clean: clean-tcl clean-tcllib clean-tclx clean-tclthread
 	rm -rf ${DESTROOT}
 
 distclean:
 	rm -f Makefile
-	rm -rf $(TCL_SUBDIR:/unix=) $(TCLTHREAD_SUBDIR) $(TCLLIB_SUBDIR)
+	rm -rf $(TCL_SUBDIR:/unix=) $(TCLTHREAD_SUBDIR) $(TCLX_SUBDIR) $(TCLLIB_SUBDIR)
 	rm -rf vendor-destroot
