diff --git a/config/tcl.m4 b/config/tcl.m4
index 1470b8122bd043d226a5539a78d078ec33e91b04..d3407c924fa7d85dd84ebf7cae683e499cc30bf9 100644
--- a/config/tcl.m4
+++ b/config/tcl.m4
@@ -1,4 +1,4 @@
-# $Header: /cvsroot/pgsql/config/tcl.m4,v 1.3 2002/03/29 17:32:54 petere Exp $
+# $Header: /cvsroot/pgsql/config/tcl.m4,v 1.4 2002/05/24 18:10:17 petere Exp $
 
 # Autoconf macros to check for Tcl related things
 
@@ -74,3 +74,16 @@ fi
 
 AC_SUBST([TK_CONFIG_SH])
 ])# PGAC_PATH_TKCONFIGSH
+
+
+# PGAC_EVAL_TCLCONFIGSH(FILE, WANTED-VARS)
+# ----------------------------------------
+# Assigns variables listed in WANTED-VARS by reading FILE and
+# evaluating it according to the quoting scheme of tclConfig.sh and
+# tkConfig.sh.  Calls AC_SUBST for each variable.
+
+AC_DEFUN([PGAC_EVAL_TCLCONFIGSH],
+[. "$1"
+m4_foreach([pgac_item], [$2],
+[eval pgac_item=\"[$]pgac_item\"
+AC_SUBST(pgac_item)])])
diff --git a/configure b/configure
index 9389f7c8a597ede9a37c28b5b33b615206a6524a..28048bde4fd85a3cc1802f35ad9c496ce96a44b8 100755
--- a/configure
+++ b/configure
@@ -16405,7 +16405,13 @@ fi
 
 
 
-fi
+    . "$TCL_CONFIG_SH"
+eval TCL_LIB_FILE=\"$TCL_LIB_FILE\"
+eval TCL_LIBS=\"$TCL_LIBS\"
+eval TCL_LIB_SPEC=\"$TCL_LIB_SPEC\"
+eval TCL_SHARED_BUILD=\"$TCL_SHARED_BUILD\"
+
+    fi
 
 # Check for Tk configuration script tkConfig.sh
 if test "$with_tk" = yes; then
@@ -16444,6 +16450,11 @@ fi
 
 
 
+    . "$TK_CONFIG_SH"
+eval TK_LIBS=\"$TK_LIBS\"
+eval TK_LIB_SPEC=\"$TK_LIB_SPEC\"
+eval TK_XINCLUDES=\"$TK_XINCLUDES\"
+
 fi
 
 
@@ -17435,7 +17446,15 @@ s,@XGETTEXT@,$XGETTEXT,;t t
 s,@localedir@,$localedir,;t t
 s,@TCLSH@,$TCLSH,;t t
 s,@TCL_CONFIG_SH@,$TCL_CONFIG_SH,;t t
+s,@TCL_LIB_FILE@,$TCL_LIB_FILE,;t t
+s,@TCL_LIBS@,$TCL_LIBS,;t t
+s,@TCL_LIB_SPEC@,$TCL_LIB_SPEC,;t t
+s,@TCL_SHARED_BUILD@,$TCL_SHARED_BUILD,;t t
+s,@TCL_SHLIB_LD_LIBS@,$TCL_SHLIB_LD_LIBS,;t t
 s,@TK_CONFIG_SH@,$TK_CONFIG_SH,;t t
+s,@TK_LIBS@,$TK_LIBS,;t t
+s,@TK_LIB_SPEC@,$TK_LIB_SPEC,;t t
+s,@TK_XINCLUDES@,$TK_XINCLUDES,;t t
 s,@NSGMLS@,$NSGMLS,;t t
 s,@JADE@,$JADE,;t t
 s,@have_docbook@,$have_docbook,;t t
diff --git a/configure.in b/configure.in
index 342bf851e7eaa493c531ed3a69fe311ca491a9a8..b07667db3fcbda34b22e0bbbbc5c26c6d2b9f0a6 100644
--- a/configure.in
+++ b/configure.in
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
-dnl $Header: /cvsroot/pgsql/configure.in,v 1.184 2002/05/05 00:03:28 tgl Exp $
-
+dnl $Header: /cvsroot/pgsql/configure.in,v 1.185 2002/05/24 18:10:17 petere Exp $
+dnl
 dnl Developers, please strive to achieve this order:
 dnl
 dnl 0. Initialization and options processing
@@ -14,7 +14,9 @@ dnl 7. Functions, global variables
 dnl 8. System services
 dnl
 dnl Read the Autoconf manual for details.
-
+dnl
+m4_pattern_forbid(^PGAC_)dnl to catch undefined macros
+dnl
 dnl The GNU folks apparently haven't heard that some people don't use
 dnl Texinfo. Use this sorcery to use "docdir" instead of "infodir".
 m4_define([info], [doc])
@@ -1201,11 +1203,15 @@ fi
 # Check for Tcl configuration script tclConfig.sh
 if test "$with_tcl" = yes; then
     PGAC_PATH_TCLCONFIGSH([$with_tclconfig])
+    PGAC_EVAL_TCLCONFIGSH([$TCL_CONFIG_SH],
+                          [TCL_LIB_FILE,TCL_LIBS,TCL_LIB_SPEC,TCL_SHARED_BUILD])
+    AC_SUBST(TCL_SHLIB_LD_LIBS)dnl don't want to double-evaluate that one
 fi
 
 # Check for Tk configuration script tkConfig.sh
 if test "$with_tk" = yes; then
     PGAC_PATH_TKCONFIGSH([$with_tkconfig $with_tclconfig])
+    PGAC_EVAL_TCLCONFIGSH([$TK_CONFIG_SH], [TK_LIBS,TK_LIB_SPEC,TK_XINCLUDES])
 fi
 
 
diff --git a/src/Makefile.global.in b/src/Makefile.global.in
index 0a713bfe99421f2705e2012f53f679b899fb77f2..b6bec695fda53f2cc78a1c8229d1c35695e48ccb 100644
--- a/src/Makefile.global.in
+++ b/src/Makefile.global.in
@@ -1,5 +1,5 @@
 # -*-makefile-*-
-# $Header: /cvsroot/pgsql/src/Makefile.global.in,v 1.146 2002/04/14 17:23:20 petere Exp $
+# $Header: /cvsroot/pgsql/src/Makefile.global.in,v 1.147 2002/05/24 18:10:17 petere Exp $
 
 #------------------------------------------------------------------------------
 # All PostgreSQL makefiles include this file and use the variables it sets,
@@ -147,9 +147,16 @@ python_configdir	= @python_configdir@
 
 krb_srvtab = @krb_srvtab@
 
-TCL_CONFIG_SH = @TCL_CONFIG_SH@
-TK_CONFIG_SH = @TK_CONFIG_SH@
-TCLSH		= @TCLSH@
+TCLSH			= @TCLSH@
+TCL_LIB_FILE		= @TCL_LIB_FILE@
+TCL_LIBS		= @TCL_LIBS@
+TCL_LIB_SPEC		= @TCL_LIB_SPEC@
+TCL_SHARED_BUILD	= @TCL_SHARED_BUILD@
+TCL_SHLIB_LD_LIBS	= @TCL_SHLIB_LD_LIBS@
+
+TK_LIBS			= @TK_LIBS@
+TK_LIB_SPEC		= @TK_LIB_SPEC@
+TK_XINCLUDES		= @TK_XINCLUDES@
 
 have_docbook	= @have_docbook@
 DOCBOOKSTYLE	= @DOCBOOKSTYLE@
diff --git a/src/Makefile.shlib b/src/Makefile.shlib
index 9a4ee4b50ef05a448c97fe37a62776bd138762e3..06e0060df0864fd2844bc72a22a01d00e974eed4 100644
--- a/src/Makefile.shlib
+++ b/src/Makefile.shlib
@@ -6,7 +6,7 @@
 # Copyright (c) 1998, Regents of the University of California
 #
 # IDENTIFICATION
-#    $Header: /cvsroot/pgsql/src/Makefile.shlib,v 1.57 2002/04/10 16:45:25 petere Exp $
+#    $Header: /cvsroot/pgsql/src/Makefile.shlib,v 1.58 2002/05/24 18:10:17 petere Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -400,7 +400,10 @@ endif # enable_shared
 clean-lib:
 	rm -f lib$(NAME).a
 ifeq ($(enable_shared), yes)
-	rm -f $(shlib) lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION) lib$(NAME)$(DLSUFFIX)
+	rm -f lib$(NAME)$(DLSUFFIX) lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION) lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
+ifdef EXPSUFF
+	rm -f lib$(NAME)$(EXPSUFF)
+endif
 endif
 ifeq ($(PORTNAME), win)
 	rm -rf $(NAME).def
diff --git a/src/bin/pgtclsh/Makefile b/src/bin/pgtclsh/Makefile
index ea6dfb1ae2e9609fd116939829a74285e053fad8..6fbeed74ec1c2992a2c1992be18431e2a4db1175 100644
--- a/src/bin/pgtclsh/Makefile
+++ b/src/bin/pgtclsh/Makefile
@@ -6,7 +6,7 @@
 # Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
 # Portions Copyright (c) 1994, Regents of the University of California
 #
-# $Header: /cvsroot/pgsql/src/bin/pgtclsh/Attic/Makefile,v 1.37 2001/02/20 19:20:29 petere Exp $
+# $Header: /cvsroot/pgsql/src/bin/pgtclsh/Attic/Makefile,v 1.38 2002/05/24 18:10:17 petere Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -14,13 +14,6 @@ subdir = src/bin/pgtclsh
 top_builddir = ../../..
 include $(top_builddir)/src/Makefile.global
 
-#
-# Include definitions from the tclConfig.sh file
-#
--include Makefile.tcldefs
-ifeq ($(with_tk), yes)
--include Makefile.tkdefs
-endif
 
 libpgtcl_srcdir = $(top_srcdir)/src/interfaces/libpgtcl
 libpgtcl_builddir = $(top_builddir)/src/interfaces/libpgtcl
@@ -61,14 +54,5 @@ installdirs:
 uninstall:
 	rm -f $(DESTDIR)$(bindir)/pgtclsh $(DESTDIR)$(bindir)/pgtksh
 
-Makefile.tcldefs: mkMakefile.tcldefs.sh
-	$(SHELL) $< '$(TCL_CONFIG_SH)' '$@'
-
-Makefile.tkdefs: mkMakefile.tkdefs.sh
-	$(SHELL) $< '$(TK_CONFIG_SH)' '$@'
-
 clean distclean maintainer-clean:
-	rm -f pgtclAppInit.o pgtkAppInit.o Makefile.tcldefs Makefile.tkdefs pgtclsh pgtksh
-
-dep depend:
-	$(CC) -MM $(CFLAGS) *.c > depend
+	rm -f pgtclAppInit.o pgtkAppInit.o pgtclsh pgtksh
diff --git a/src/bin/pgtclsh/mkMakefile.tcldefs.sh b/src/bin/pgtclsh/mkMakefile.tcldefs.sh
deleted file mode 100644
index f9faef2fdca2bcc563c29c68681138c2fa1382e2..0000000000000000000000000000000000000000
--- a/src/bin/pgtclsh/mkMakefile.tcldefs.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#! /bin/sh
-
-# $1 = path to tclConfig.sh ; $2 = output file
-
-if test x"$1" = x ; then
-   echo "$0: No tclConfig.sh file specified. Did you use \`configure --with-tcl'?" 1>&2
-   exit 1
-fi
-
-# Source the file to obtain the correctly expanded variable definitions
-. "$1"
-
-# Read the file a second time as an easy way of getting the list of variable
-# definitions to output.
-cat "$1" |
-    egrep '^TCL_|^TK_' |
-    sed 's/^\([^=]*\)=.*$/\1/' |
-    while read var
-    do
-	eval echo "\"$var = \$$var\""
-    done > "$2"
-
-exit 0
diff --git a/src/bin/pgtclsh/mkMakefile.tkdefs.sh b/src/bin/pgtclsh/mkMakefile.tkdefs.sh
deleted file mode 100644
index c34f166a52643568523c541ddafa92883f12dfd8..0000000000000000000000000000000000000000
--- a/src/bin/pgtclsh/mkMakefile.tkdefs.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#! /bin/sh
-
-# $1 = path to tkConfig.sh ; $2 = output file
-
-if test x"$1" = x; then
-    echo "$0: No tkConfig.sh file specified. Did you use \`configure --with-tcl --with-x'?" 1>&2
-    exit 1
-fi
-
-# Source the file to obtain the correctly expanded variable definitions
-. "$1"
-
-# Read the file a second time as an easy way of getting the list of variable
-# definitions to output.
-cat "$1" |
-    egrep '^TCL_|^TK_' |
-    sed 's/^\([^=]*\)=.*$/\1/' |
-    while read var
-    do
-	eval echo "\"$var = \$$var\""
-    done > "$2"
-
-exit 0
diff --git a/src/pl/tcl/Makefile b/src/pl/tcl/Makefile
index 5a9ae266d0266f2b8beedb9f43fe8329ae3824b5..43f420c7e1f42b7f15c947b17ce300ae49856b54 100644
--- a/src/pl/tcl/Makefile
+++ b/src/pl/tcl/Makefile
@@ -2,7 +2,7 @@
 #
 # Makefile for the pltcl shared object
 #
-# $Header: /cvsroot/pgsql/src/pl/tcl/Makefile,v 1.37 2002/01/23 18:45:41 tgl Exp $
+# $Header: /cvsroot/pgsql/src/pl/tcl/Makefile,v 1.38 2002/05/24 18:10:17 petere Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -10,7 +10,6 @@ subdir = src/pl/tcl
 top_builddir = ../../..
 include $(top_builddir)/src/Makefile.global
 
--include Makefile.tcldefs
 
 # Find out whether Tcl was built as a shared library --- if not, we
 # can't link a shared library that depends on it, and have to forget
@@ -27,71 +26,39 @@ endif
 endif
 
 
-# Change following to how shared library that contains references to
-# libtcl must get built on your system. Since these definitions come
-# from the tclConfig.sh script, they should work if the shared build
-# of tcl was successful on this system. However, tclConfig.sh lies to
-# us a little bit (at least in versions 7.6 through 8.0.4) --- it
-# doesn't mention -lc in TCL_LIBS, but you still need it on systems
-# that want to hear about dependent libraries...
+# The following attempts to figure out what libraries need to be
+# linked with pltcl.  The information comes from the tclConfig.sh
+# file, but it's mostly bogus.  This just might work.
 
 ifneq ($(TCL_SHLIB_LD_LIBS),)
 # link command for a shared lib must mention shared libs it uses
-SHLIB_EXTRA_LIBS=$(TCL_LIBS) -lc
+SHLIB_LINK = $(TCL_LIB_SPEC) $(TCL_LIBS) -lc
 else
 ifeq ($(PORTNAME), hpux)
 # link command for a shared lib must mention shared libs it uses,
 # even though Tcl doesn't think so...
-SHLIB_EXTRA_LIBS=$(TCL_LIBS) -lc
+SHLIB_LINK = $(TCL_LIB_SPEC) $(TCL_LIBS) -lc
 else
 # link command for a shared lib must NOT mention shared libs it uses
-SHLIB_EXTRA_LIBS=
+SHLIB_LINK = $(TCL_LIB_SPEC)
 endif
 endif
 
-%$(TCL_SHLIB_SUFFIX): %.o
-	$(TCL_SHLIB_LD) -o $@ $< $(TCL_LIB_SPEC) $(SHLIB_EXTRA_LIBS)
 
+NAME = pltcl
+SO_MAJOR_VERSION = 2
+SO_MINOR_VERSION = 0
+OBJS = pltcl.o
 
-CC = $(TCL_CC)
-
-# Since we are using Tcl's choice of C compiler, which might not be
-# the same one selected for Postgres, do NOT use CFLAGS from
-# Makefile.global. Instead use TCL's CFLAGS plus necessary -I
-# directives.
-
-# Can choose either TCL_CFLAGS_OPTIMIZE or TCL_CFLAGS_DEBUG here, as
-# needed
-override CPPFLAGS += $(TCL_DEFS)
-override CFLAGS = $(TCL_CFLAGS_OPTIMIZE) $(TCL_SHLIB_CFLAGS)
-
-
-#
-# DLOBJS is the dynamically-loaded object file.
-#
-DLOBJS= pltcl$(DLSUFFIX)
-
-INFILES= $(DLOBJS) 
-
-#
-# plus exports files
-#
-ifdef EXPSUFF
-INFILES+= $(DLOBJS:.o=$(EXPSUFF))
-endif
-
-
-# Provide dummy targets for the case where we can't build the shared library.
+include $(top_srcdir)/src/Makefile.shlib
 
 ifeq ($(TCL_SHARED_BUILD), 1)
 
-all: $(INFILES)
+all: all-lib
 	$(MAKE) -C modules $@
 
-pltcl$(DLSUFFIX): pltcl.o
-
 install: all installdirs
-	$(INSTALL_SHLIB) $(DLOBJS) $(DESTDIR)$(pkglibdir)/$(DLOBJS)
+	$(INSTALL_SHLIB) $(shlib) $(DESTDIR)$(pkglibdir)/$(NAME)$(DLSUFFIX)
 	$(MAKE) -C modules $@
 
 installdirs:
@@ -99,21 +66,19 @@ installdirs:
 	$(MAKE) -C modules $@
 
 uninstall:
-	rm -f $(DESTDIR)$(pkglibdir)/$(DLOBJS)
+	rm -f $(DESTDIR)$(pkglibdir)/$(NAME)$(DLSUFFIX)
 	$(MAKE) -C modules $@
 
 else # TCL_SHARED_BUILD = 0
 
-all install:
+# Provide dummy targets for the case where we can't build the shared library.
+all:
 	@echo "*****"; \
 	 echo "* Cannot build pltcl because Tcl is not a shared library; skipping it."; \
 	 echo "*****"
 
 endif # TCL_SHARED_BUILD = 0
 
-Makefile.tcldefs: mkMakefile.tcldefs.sh
-	$(SHELL) $< '$(TCL_CONFIG_SH)' '$@'
-
-clean distclean maintainer-clean:
-	rm -f $(INFILES) pltcl.o Makefile.tcldefs
+clean distclean maintainer-clean: clean-lib
+	rm -f $(OBJS)
 	$(MAKE) -C modules $@
diff --git a/src/pl/tcl/mkMakefile.tcldefs.sh b/src/pl/tcl/mkMakefile.tcldefs.sh
deleted file mode 100644
index 04d09b7290dabb87ac3f433fe6d73b67a37e4d75..0000000000000000000000000000000000000000
--- a/src/pl/tcl/mkMakefile.tcldefs.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#! /bin/sh
-
-# $1 = path to tclConfig.sh ; $2 = output file
-
-# $Header: /cvsroot/pgsql/src/pl/tcl/Attic/mkMakefile.tcldefs.sh,v 1.2 2002/01/23 18:45:41 tgl Exp $
-
-if test x"$1" = x ; then
-   echo "$0: No tclConfig.sh file specified. Did you use \`configure --with-tcl'?" 1>&2
-   exit 1
-fi
-
-# Source the file to obtain the correctly expanded variable definitions
-. "$1"
-
-# Suppress bogus soname switch that RedHat RPMs put into tclConfig.sh
-TCL_SHLIB_LD=`echo "$TCL_SHLIB_LD" | sed 's/-Wl,-soname[^ ]*//'`
-
-# Read the file a second time as an easy way of getting the list of variable
-# definitions to output.
-cat "$1" |
-    egrep '^TCL_|^TK_' |
-    sed 's/^\([^=]*\)=.*$/\1/' |
-    while read var
-    do
-	eval echo "\"$var = \$$var\""
-    done > "$2"
-
-exit 0