]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Perform some makefile acrobatics to get the tclConfig.sh state applied for static...
authorstephan <stephan@noemail.net>
Mon, 28 Oct 2024 17:20:18 +0000 (17:20 +0000)
committerstephan <stephan@noemail.net>
Mon, 28 Oct 2024 17:20:18 +0000 (17:20 +0000)
FossilOrigin-Name: 9b141d108b64c8f4e1103de6f142d972b5151eed0f07988fea308fc71cec45b8

Makefile.in
autosetup/proj.tcl
main.mk
manifest
manifest.uuid
tool/tclConfigShToMake.sh [new file with mode: 0755]

index 67cc9ac4534b48ec05354f99ff96e2ca7cb5c8dd..688b3ff06216e972010599b2a467a2dc61690a02 100644 (file)
@@ -202,12 +202,15 @@ TCL_CONFIG_SH = @TCL_CONFIG_SH@
 #
 # TCL config info from tclConfig.sh
 #
-TCL_INCLUDE_SPEC = @TCL_INCLUDE_SPEC@
-TCL_LIB_SPEC = @TCL_LIB_SPEC@
-TCL_STUB_LIB_SPEC = @TCL_STUB_LIB_SPEC@
-TCL_EXEC_PREFIX = @TCL_EXEC_PREFIX@
-TCL_VERSION = @TCL_VERSION@
-TCLLIB_RPATH = @TCLLIB_RPATH@
+# We have to inject this differently in main.mk to accommodate static
+# makefiles:
+#
+#TCL_INCLUDE_SPEC = @TCL_INCLUDE_SPEC@
+#TCL_LIB_SPEC = @TCL_LIB_SPEC@
+#TCL_STUB_LIB_SPEC = @TCL_STUB_LIB_SPEC@
+#TCL_EXEC_PREFIX = @TCL_EXEC_PREFIX@
+#TCL_VERSION = @TCL_VERSION@
+#TCLLIB_RPATH = @TCLLIB_RPATH@
 #
 # Where do we want to install the tcl plugin
 #
index 5fdf94d2d253d180dde5f036509689afb89f4464..0b1613430c19194b7046fc3eb0a0e2b0fbab5793 100644 (file)
@@ -804,6 +804,8 @@ proc proj-check-rpath {} {
   cc-with {} {
     if {[cc-check-flags "-rpath $lp"]} {
       define LDFLAGS_RPATH "-rpath $lp"
+    } elseif {[cc-check-flags "-Wl,-rpath,$lp"]} {
+      define LDFLAGS_RPATH "-Wl,-rpath,$lp"
     } elseif {[cc-check-flags "-Wl,-rpath -Wl,$lp"]} {
       define LDFLAGS_RPATH "-Wl,-rpath -Wl,$lp"
     } elseif {[cc-check-flags -Wl,-R$lp]} {
diff --git a/main.mk b/main.mk
index 3469381bd65b56d6cc0e6b01480f7667ded1c247..3d23215a44d3ae5669fc4583a1119bf2f380f9d3 100644 (file)
--- a/main.mk
+++ b/main.mk
@@ -212,17 +212,14 @@ OPT_FEATURE_FLAGS ?=
 #
 SHELL_OPT ?=
 #
-# The following TCL_vars come from tclConfig.sh
+# TCL_CONFIG_SH must, for some of the build targets, refer to a valid
+# tclConfig.sh. That script will be used to populate most of the other
+# TCL-related vars the build needs, the one exception being:
 #
-# Potential TODO: a shell script, similar tool/tclConfigShToTcl.sh,
-# which emits these vars in a format which we can include from this
-# makefile.
+# TCLLIBDIR is required for installing (but not building) the TCL
+# deliverables. It must currently be set by the makefile which
+# imports this one or as an argument to it from the user.
 #
-TCL_INCLUDE_SPEC ?=
-TCL_LIB_SPEC ?=
-TCL_STUB_LIB_SPEC ?=
-TCL_EXEC_PREFIX ?=
-TCL_VERSION ?=
 TCLLIBDIR ?=
 TCL_CONFIG_SH ?=
 #
@@ -911,6 +908,36 @@ has_tclsh85:
        sh $(TOP)/tool/cktclsh.sh 8.5 $(TCLSH_CMD)
        touch has_tclsh85
 
+#
+# .tclconfig.make has the config info from tclConfig.sh, but in
+# makefile form. If TCL_CONFIG_SH is empty then it will emit
+# empty config state (which is harmless).
+#
+# Alas, it turns out that POSIX make cannot both generate a makefile
+# and import it in the same make invocation (GNU make can), so this
+# approach, while simple to implement and non-intrusive on the targets
+# which require the config state, is not portable.
+#
+# An alternative is $(SOURCE_TCLCONFIG), defined below, but this impl
+# is retained as a reminder of why we cannot portably use this
+# otherwise trivial approach.
+#
+#.tclconfig.make:
+#      sh $(TOP)/tool/tclConfigShToMake.sh $(TCL_CONFIG_SH) > .tclconfig.make
+#distclean-tclconfig:
+#      rm -f .tclconfig.make
+#distclean: distclean-tclconfig
+#-include .tclconfig.make
+
+#
+# SOURCE_TCLCONFIG is shell code to be run as part of any compilation
+# or link step which requires vars from $(TCL_CONFIG_SH). All targets
+# which use this should also have a dependency on has_tclconfig.
+#
+SOURCE_TCLCONFIG = . $(TCL_CONFIG_SH) || exit $$?
+T.compile.tcl = $(SOURCE_TCLCONFIG); $(T.compile)
+T.link.tcl = $(SOURCE_TCLCONFIG); $(T.link)
+
 has_tclconfig:
        @if [ x = "x$(TCL_CONFIG_SH)" ]; then \
                echo 'TCL_CONFIG_SH must be set to point to a "tclConfig.sh"' 1>&2; exit 1; \
@@ -1230,19 +1257,19 @@ whereexpr.o:    $(TOP)/src/whereexpr.c $(DEPS_OBJ_COMMON)
 window.o:      $(TOP)/src/window.c $(DEPS_OBJ_COMMON)
        $(T.cc.sqlite) $(CFLAGS.libsqlite3) -c $(TOP)/src/window.c
 
-tclsqlite.o:   $(TOP)/src/tclsqlite.c $(DEPS_OBJ_COMMON)
-       $(T.compile) -DUSE_TCL_STUBS=1 $(TCL_INCLUDE_SPEC) $(CFLAGS.intree_includes) \
+tclsqlite.o:   has_tclconfig $(TOP)/src/tclsqlite.c $(DEPS_OBJ_COMMON)
+       $(T.compile.tcl) -DUSE_TCL_STUBS=1 $$TCL_INCLUDE_SPEC $(CFLAGS.intree_includes) \
                -c $(TOP)/src/tclsqlite.c
 
-tclsqlite-shell.o:     $(TOP)/src/tclsqlite.c $(DEPS_OBJ_COMMON)
-       $(T.compile) -DTCLSH -o $@ -c $(TOP)/src/tclsqlite.c $(TCL_INCLUDE_SPEC)
+tclsqlite-shell.o:     has_tclconfig $(TOP)/src/tclsqlite.c $(DEPS_OBJ_COMMON)
+       $(T.compile.tcl) -DTCLSH -o $@ -c $(TOP)/src/tclsqlite.c $$TCL_INCLUDE_SPEC
 
-tclsqlite-stubs.o:     $(TOP)/src/tclsqlite.c $(DEPS_OBJ_COMMON)
-       $(T.compile) -DUSE_TCL_STUBS=1 -o $@ -c $(TOP)/src/tclsqlite.c $(TCL_INCLUDE_SPEC)
+tclsqlite-stubs.o:     has_tclconfig $(TOP)/src/tclsqlite.c $(DEPS_OBJ_COMMON)
+       $(T.compile.tcl) -DUSE_TCL_STUBS=1 -o $@ -c $(TOP)/src/tclsqlite.c $$TCL_INCLUDE_SPEC
 
 tclsqlite3$(T.exe):    has_tclconfig tclsqlite-shell.o $(libsqlite3.LIB)
-       $(T.link) -o $@ tclsqlite-shell.o \
-                $(libsqlite3.LIB) $(TCL_INCLUDE_SPEC) $(TCL_LIB_SPEC) $(LDFLAGS.libsqlite3)
+       $(T.link.tcl) -o $@ tclsqlite-shell.o \
+                $(libsqlite3.LIB) $$TCL_INCLUDE_SPEC $$TCL_LIB_SPEC $(LDFLAGS.libsqlite3)
 
 # Rules to build opcodes.c and opcodes.h
 #
@@ -1378,10 +1405,15 @@ install: install-includes
 pkgIndex.tcl:
        echo 'package ifneeded sqlite3 $(PACKAGE_VERSION) [list load [file join $$dir libtclsqlite3[info sharedlibextension]] sqlite3]' > $@
 libtclsqlite3.SO = libtclsqlite3$(T.dll)
-$(libtclsqlite3.SO): tclsqlite.o $(libsqlite3.SO)
+$(libtclsqlite3.SO): has_tclconfig tclsqlite.o $(libsqlite3.SO)
+       libdir=`echo "puts stdout [lindex \\$$auto_path 0]" | $(TCLSH_CMD)` || exit $$?; \
+       $(SOURCE_TCLCONFIG); \
        $(T.link.shared) -o $@ tclsqlite.o \
-               $(TCL_INCLUDE_SPEC) $(TCL_STUB_LIB_SPEC) $(LDFLAGS.libsqlite3) \
-               $(libsqlite3.SO) $(TCLLIB_RPATH)
+               $$TCL_INCLUDE_SPEC $$TCL_STUB_LIB_SPEC $(LDFLAGS.libsqlite3) \
+               $(libsqlite3.SO) -Wl,-rpath,$$libdir/sqlite3
+# ^^^ that rpath bit is defined as TCL_LD_SEARCH_FLAGS in
+# tclConfig.sh, but it's defined in such a way as to be useless for a
+# _static_ makefile.
 $(libtclsqlite3.SO)-1: $(libtclsqlite3.SO)
 $(libtclsqlite3.SO)-0 $(libtclsqlite3.SO)-:
 libtcl: $(libtclsqlite3.SO)-$(HAVE_TCL)
@@ -1497,9 +1529,9 @@ TESTFIXTURE_SRC = $(TESTSRC) $(TOP)/src/tclsqlite.c
 TESTFIXTURE_SRC += $(TESTFIXTURE_SRC$(USE_AMALGAMATION))
 
 testfixture$(T.exe):   has_tclconfig has_tclsh85 $(TESTFIXTURE_SRC)
-       $(T.link) -DSQLITE_NO_SYNC=1 $(TESTFIXTURE_FLAGS) \
+       $(T.link.tcl) -DSQLITE_NO_SYNC=1 $(TESTFIXTURE_FLAGS) \
                -o $@ $(TESTFIXTURE_SRC) \
-               $(TCL_LIB_SPEC) $(TCL_INCLUDE_SPEC) \
+               $$TCL_LIB_SPEC $$TCL_INCLUDE_SPEC \
                $(CFLAGS.libsqlite3) $(LDFLAGS.libsqlite3)
 
 coretestprogs: testfixture$(B.exe) sqlite3$(B.exe)
@@ -1617,7 +1649,7 @@ sqlite3_analyzer.c: sqlite3.c $(TOP)/src/tclsqlite.c $(TOP)/tool/spaceanal.tcl \
        $(B.tclsh) $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqlite3_analyzer.c.in >sqlite3_analyzer.c
 
 sqlite3_analyzer$(T.exe): has_tclconfig sqlite3_analyzer.c
-       $(T.link) sqlite3_analyzer.c -o $@ $(TCL_LIB_SPEC) $(TCL_INCLUDE_SPEC) $(LDFLAGS.libsqlite3)
+       $(T.link.tcl) sqlite3_analyzer.c -o $@ $$TCL_LIB_SPEC $$TCL_INCLUDE_SPEC $(LDFLAGS.libsqlite3)
 
 sqltclsh.c: sqlite3.c $(TOP)/src/tclsqlite.c $(TOP)/tool/sqltclsh.tcl \
             $(TOP)/ext/misc/appendvfs.c $(TOP)/tool/mkccode.tcl \
@@ -1625,7 +1657,7 @@ sqltclsh.c: sqlite3.c $(TOP)/src/tclsqlite.c $(TOP)/tool/sqltclsh.tcl \
        $(B.tclsh) $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqltclsh.c.in >sqltclsh.c
 
 sqltclsh$(T.exe): has_tclconfig sqltclsh.c
-       $(T.link) sqltclsh.c -o $@ $(TCL_INCLUDE_SPEC) $(CFLAGS.libsqlite3) $(TCL_LIB_SPEC) $(LDFLAGS.libsqlite3)
+       $(T.link.tcl) sqltclsh.c -o $@ $$TCL_INCLUDE_SPEC $(CFLAGS.libsqlite3) $$TCL_LIB_SPEC $(LDFLAGS.libsqlite3)
 # xbin: target for generic binaries which aren't usually built. It is
 # used primarily for testing the build process.
 xbin: sqltclsh$(T.exe)
@@ -1650,7 +1682,7 @@ sqlite3_checker.c:        $(CHECKER_DEPS) has_tclsh85
        $(B.tclsh) $(TOP)/tool/mkccode.tcl $(TOP)/ext/repair/sqlite3_checker.c.in >$@
 
 sqlite3_checker$(T.exe):       has_tclconfig sqlite3_checker.c
-       $(T.link) sqlite3_checker.c -o $@ $(TCL_INCLUDE_SPEC) $(CFLAGS.libsqlite3) $(TCL_LIB_SPEC) $(LDFLAGS.libsqlite3)
+       $(T.link.tcl) sqlite3_checker.c -o $@ $$TCL_INCLUDE_SPEC $(CFLAGS.libsqlite3) $$TCL_LIB_SPEC $(LDFLAGS.libsqlite3)
 xbin: sqlite3_checker$(T.exe)
 
 dbdump$(T.exe): $(TOP)/ext/misc/dbdump.c sqlite3.o
index a4e0015ad01f850db60843cdbba19c732354626d..0f5b18c42abfb3a68c00a2b9e2c98c5c23c5275b 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,9 +1,9 @@
-C The\sasync\sextension\swas\ssuperseded\sby\sWAL\smode\sabout\s11\syears\sago,\sand\shas\nlong\sbeen\sdeprecated.\s\sRemove\sit\sfrom\sthe\ssource\stree.\s\s(Anybody\swho\sreally\nneeds\sit\scan\sstill\sdig\sit\sout\sof\sthe\shistorical\srecords.)
-D 2024-10-28T16:31:20.697
+C Perform\ssome\smakefile\sacrobatics\sto\sget\sthe\stclConfig.sh\sstate\sapplied\sfor\sstatic\smakefiles.
+D 2024-10-28T17:20:18.788
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md b6e6c1baf38e4339bd3f1e0e5e5bfd0a9a93d133360691b2785c2d4b2f2dcec2
-F Makefile.in 02ea00ff433902dba369d4a55b3aeb6bb1ffe2d82f777194984b8cdd7ed7c3ad
+F Makefile.in e4a6a12767fd297b5359ca4190141ec6f925e64dd8d5a1067a220e41b7dbf7a8
 F Makefile.linux-generic 69b54c58ab2424a0d30f340d9defd7e87c25690a55b77acb9bdc657bd9a223f1
 F Makefile.msc a92237976eb92c5efaa0dd2524746aec12c196e12df8d4dbff9543a4648c3312
 F README.md c3c0f19532ce28f6297a71870f3c7b424729f0e6d9ab889616d3587dd2332159
@@ -49,7 +49,7 @@ F autosetup/cc.tcl 7e2fe943ae9d45cf39e9f5b05b6230df8e719415edea5af06c30eb68680bd
 F autosetup/default.auto 5cdf016de2140e50f1db190a02039dc42fb390af1dda4cc4853e3042a9ef0e82
 F autosetup/jimsh0.c 27ea5f221359ef6c58780fc6c185aadbf8d3bee9a021331a3e5de0eba0dc6de6
 F autosetup/pkg-config.tcl 4e635bf39022ff65e0d5434339dd41503ea48fc53822c9c5bde88b02d3d952ba
-F autosetup/proj.tcl b01940e6b2e9c24f2c50f0e180d308a0a4f88d2e2b00c6902edd5980d221becf
+F autosetup/proj.tcl 8167786ff3c20d6a14e9b0b747996e91cabfe85ac49dcc5d0a0aa35d4167dd91
 F autosetup/system.tcl 3a39d6e0b3bfba526fd39afe07c1d0d325e5a31925013a1ba7c671e1128e31bb
 F autosetup/tmake.auto eaebc74ad538dfdd3c817c27eefc31930c20510c4f3a3704071f6cb0629ed71f
 F autosetup/tmake.tcl a275793ec1b6f8708179af0acef1f6f10d46c2920739743f7a8720c6d700c7a9
@@ -702,7 +702,7 @@ F ext/wasm/wasmfs.make bc8bb227f35d5bd3863a7bd2233437c37472a0d81585979f058f9b9b5
 F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
 F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0
-F main.mk c5e17513c0f68b514d0f1b5afabcc0aabfedf8ebba0e6314435df1edcb7e8fd4
+F main.mk e9ff755b0d6f2ab6a95fab7bb11f742485de6ad1606822932d24bbfa14a9884a
 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
 F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421
@@ -2196,6 +2196,7 @@ F tool/stack_usage.tcl f8e71b92cdb099a147dad572375595eae55eca43
 F tool/stripccomments.c 20b8aabc4694d0d4af5566e42da1f1a03aff057689370326e9269a9ddcffdc37
 F tool/symbols-mingw.sh 4dbcea7e74768305384c9fd2ed2b41bbf9f0414d
 F tool/symbols.sh 1612bd947750e21e7b47befad5f6b3825b06cce0705441f903bf35ced65ae9b9
+F tool/tclConfigShToMake.sh 7c065d81c2d178e15e45a77372c6e5a38b5a1b08755301cd6f20a3a862db7312 x
 F tool/tclConfigShToTcl.sh 44ec55046d86a3febb2cb3e099399b41794e80e9cd138eee7b9b016f819e882b x
 F tool/varint.c 5d94cb5003db9dbbcbcc5df08d66f16071aee003
 F tool/vdbe-compress.tcl fa2f37ab39b2a0087fafb6a7f3ce19503e25e624ffa8ed9951717ab72920c088
@@ -2204,9 +2205,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P b7eb6530505bf774cf3fa5de6ec4bc40f217796d4fa9a149372bd47488ed470f 10b1b86821bfc21377e7ccceb31146ab01aa6eaf418b85a204abcab5b793958e
-R c0dab2d05721f7a4961535e333dd9173
-T +closed 10b1b86821bfc21377e7ccceb31146ab01aa6eaf418b85a204abcab5b793958e
-U drh
-Z 5e2ff8c2159e64c6bedc8f4dcf3a85b5
+P f98da150a9c18dfaf9d5178ceee227caf7fce9c9c9194a7a4291abb40de832fa
+R e203eb86dfdd2daea7dd35f993a3ed58
+U stephan
+Z ba3f561a89835f0184bfa691acd0be76
 # Remove this line to create a well-formed Fossil manifest.
index e4336995a5d3db0779cf935d9ede9ef934c61f2c..41798faaa6bd009cb58af907f8b4c2cb0de2eaec 100644 (file)
@@ -1 +1 @@
-f98da150a9c18dfaf9d5178ceee227caf7fce9c9c9194a7a4291abb40de832fa
+9b141d108b64c8f4e1103de6f142d972b5151eed0f07988fea308fc71cec45b8
diff --git a/tool/tclConfigShToMake.sh b/tool/tclConfigShToMake.sh
new file mode 100755 (executable)
index 0000000..89ca15a
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh
+#
+# A level of indirection for use soley by main.mk to extract info
+# from tclConfig.sh if it's not provided by the configure script.
+#
+# Expects to be passed a full path to a tclConfig.sh. It sources it
+# and emits TCL code which sets some vars which are exported by
+# tclConfig.sh.
+#
+# This script expects that the caller has already validated that the
+# file exists, is not a directory, and is readable.
+#
+# If passed no filename, or an empty one, then it emits config code
+# suitable for the "config not found" case.
+if test x = "x$1"; then
+  TCL_INCLUDE_SPEC=
+  TCL_LIB_SPEC=
+  TCL_STUB_LIB_SPEC=
+  TCL_EXEC_PREFIX=
+  TCL_VERSION=
+else
+  . "$1"
+fi
+
+cat <<EOF
+TCL_INCLUDE_SPEC = $TCL_INCLUDE_SPEC
+TCL_LIB_SPEC = $TCL_LIB_SPEC
+TCL_STUB_LIB_SPEC = $TCL_STUB_LIB_SPEC
+TCL_EXEC_PREFIX = $TCL_EXEC_PREFIX
+TCL_VERSION = $TCL_VERSION
+EOF