Change PL/Tcl build to use configured compiler and Makefile.shlib
authorPeter Eisentraut <peter_e@gmx.net>
Fri, 24 May 2002 18:10:17 +0000 (18:10 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
Fri, 24 May 2002 18:10:17 +0000 (18:10 +0000)
system, not Tcl-provided one.

Make sure export file, if any, is cleaned.

Tcl configuration is now read directly in configure and recorded in
Makefile.global.  This eliminates some duplicate efforts and allows
for easier hand-editing of the results, if necessary.

config/tcl.m4
configure
configure.in
src/Makefile.global.in
src/Makefile.shlib
src/bin/pgtclsh/Makefile
src/bin/pgtclsh/mkMakefile.tcldefs.sh [deleted file]
src/bin/pgtclsh/mkMakefile.tkdefs.sh [deleted file]
src/pl/tcl/Makefile
src/pl/tcl/mkMakefile.tcldefs.sh [deleted file]

index aff70a5009a2b0f4f16028f2e6cdd9513973fca6..f900e5b7a4e7456f1a25a60475b1d4f9a0193598 100644 (file)
@@ -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)])])
index 9389f7c8a597ede9a37c28b5b33b615206a6524a..28048bde4fd85a3cc1802f35ad9c496ce96a44b8 100755 (executable)
--- a/configure
+++ b/configure
 
 
 
-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
 
 
 
+    . "$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
index d71b3ea4994003c777e188f30d75ca7c2cfb6dea..4036edd4a554b126bb514f9ee2024082596d83c4 100644 (file)
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 dnl $Header$
-
+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
 
 
index b85a848cd6a2c9b9c0f914818b9d0db8ea0b6b47..5993c36d82496efe5df2eb25282cd2178052cbcc 100644 (file)
@@ -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@
index 7b5f5fba34ea0f6c5a3adb9211d40bf7a06123f1..12b3118c818676cdadcfebf8cb5d8c9709720122 100644 (file)
@@ -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
index c105791df8edd3b12b902bb8567a2cc21fe89932..87bd6fe4fc8e4b753c195d2f2609b6b577ac657e 100644 (file)
@@ -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 (file)
index f9faef2..0000000
+++ /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 (file)
index c34f166..0000000
+++ /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
index 191134f26d663f6892d1aa23b97695c589716b36..4d697fa4ca5a68882c6407fda9eca887485384a8 100644 (file)
@@ -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 (file)
index e9efdfe..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-#! /bin/sh
-
-# $1 = path to tclConfig.sh ; $2 = output file
-
-# $Header$
-
-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