aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstephan <stephan@noemail.net>2024-10-24 07:31:39 +0000
committerstephan <stephan@noemail.net>2024-10-24 07:31:39 +0000
commit4cd85bda4ae85893d5b5d0e3fec5e13f78f52935 (patch)
tree5b10e226f8249ee59c91b503b38818dea5182605
parent30b20563e453759481548699b73e9a4f1cfc7b18 (diff)
downloadsqlite-4cd85bda4ae85893d5b5d0e3fec5e13f78f52935.tar.gz
sqlite-4cd85bda4ae85893d5b5d0e3fec5e13f78f52935.zip
Various build cleanups centered around straightening out various uses of CFLAGS and its cousins. Teach Makefile.linux-generic to figure out the TOP dir on its own (a GNU Make-ism, but it's a Linux-specific makefile).
FossilOrigin-Name: 58a0f7e79ce913b432dfd4db018e5a92efa8a6bd8a50bd78ab705ceac0322e9c
-rw-r--r--Makefile.in30
-rw-r--r--Makefile.linux-generic30
-rw-r--r--auto.def9
-rw-r--r--main.mk79
-rw-r--r--manifest18
-rw-r--r--manifest.uuid2
6 files changed, 100 insertions, 68 deletions
diff --git a/Makefile.in b/Makefile.in
index 31f715fe6..703511bc9 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -95,7 +95,7 @@ INSTALL = @BIN_INSTALL@
AR = @AR@
CC = @CC@
B.cc = @BUILD_CC@ @BUILD_CFLAGS@
-T.cc = $(CC) $(CFLAGS)
+T.cc = $(CC)
CFLAGS = @CFLAGS@ @SH_CFLAGS@
LDFLAGS.shobj = @SHOBJ_LDFLAGS@
@@ -105,7 +105,7 @@ LDFLAGS.rpath = @LDFLAGS_RPATH@
LDFLAGS.pthread = @LDFLAGS_PTHREAD@
LDFLAGS.dlopen = @LDFLAGS_DLOPEN@
LDFLAGS.readline = @LDFLAGS_READLINE@
-CFLAGS.readline = -DHAVE_READLINE=@HAVE_READLINE@ @CFLAGS_READLINE@
+CFLAGS.readline = @CFLAGS_READLINE@
ENABLE_SHARED = @ENABLE_SHARED@
HAVE_WASI_SDK = @HAVE_WASI_SDK@
@@ -146,19 +146,16 @@ $(B.tclsh):
#
# $(CFLAGS.libsqlite3) is documented in main.mk.
#
-CFLAGS.libsqlite3 = $(CFLAGS) -DSQLITE_TEMP_STORE=@TEMP_STORE@
-
-OPT_FEATURE_FLAGS = @OPT_FEATURE_FLAGS@ $(OPTIONS)
-
-T.cc += $(OPT_FEATURE_FLAGS)
+CFLAGS.libsqlite3 = -DSQLITE_TEMP_STORE=@TEMP_STORE@
#
-# Add in any optional global compilation flags on the make commane
-# line ie. make "OPTS=-DSQLITE_ENABLE_FOO=1 -DSQLITE_OMIT_FOO=1".
+# $(OPT_FEATURE_FLAGS) is documented in main.mk.
#
-#XX# FIXME: rename one or the other of $(OPTS) and $(OPTIONS), as they
-#XX# serve different purposes.
-T.cc += $(OPTS)
+# The appending of $(OPTIONS) to $(OPT_FEATURE_FLAGS) is historical
+# and somewhat confusing because there's another var, $(OPTS), which
+# has a similar (but not identical) role.
+#
+OPT_FEATURE_FLAGS = @OPT_FEATURE_FLAGS@ $(OPTIONS)
#
# Release (X.Y.Z) and version (X.Y) numbers for the SQLite being
@@ -227,12 +224,11 @@ TCLLIBDIR = @TCLLIBDIR@
#
# for more info.
#
-
-CFLAGS.GCOV1 = -DSQLITE_COVERAGE_TEST=1 -fprofile-arcs -ftest-coverage
-LDFLAGS.GCOV1 = -lgcov
+CFLAGS.gcov1 = -DSQLITE_COVERAGE_TEST=1 -fprofile-arcs -ftest-coverage
+LDFLAGS.gcov1 = -lgcov
USE_GCOV = @USE_GCOV@
-T.compile.extras += $(CFLAGS.GCOV$(USE_GCOV))
-T.link.extras += $(LDFLAGS.GCOV$(USE_GCOV))
+T.compile.extras = $(CFLAGS.gcov$(USE_GCOV))
+T.link.extras = $(LDFLAGS.gcov$(USE_GCOV))
#
# Vars with the AS_ prefix are specifically related to AutoSetup.
diff --git a/Makefile.linux-generic b/Makefile.linux-generic
index 50bd980b9..b91861bbe 100644
--- a/Makefile.linux-generic
+++ b/Makefile.linux-generic
@@ -1,4 +1,5 @@
#!/usr/make
+all:
#
# Makefile for SQLITE
#
@@ -17,35 +18,42 @@
####
#
# $(TOP) = The toplevel directory of the source tree. This is the
-# directory that contains this "Makefile.in" and "auto.def".
+# directory that contains "Makefile.in" and "auto.def".
#
-TOP ?= .
+TOP ?= $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
#
# $(CFLAGS) will be used when compiling the library and most
-# utilities. Generally speaking, it must contain -fPIC on Linux
-# systems.
+# utilities. It must normally contain -fPIC on Linux systems.
#
-CFLAGS += -fPIC
+CFLAGS = -fPIC
#
# $(SHELL_OPT) contains CFLAGS for building the sqlite3 CLI shell.
# See main.mk for other potentially-relevant vars which may need
# tweaking, like $(LDFLAGS_READLINE).
#
-SHELL_OPT ?= -DHAVE_READLINE=1
+SHELL_OPT += -DHAVE_READLINE=1
+SHELL_OPT += -DSQLITE_HAVE_ZLIB=1
+LDFLAGS.readline = -lreadline # may need -lcurses etc, depending on the system
+CFLAGS.readline = # needs -I... if readline.h is in an unusual place.
+LDFLAGS.zlib = -lz
#
# Library's version number.
#
VERSION.XYZ ?= $(shell cat $(TOP)/VERSION 2>/dev/null)
-$(info VERSION.XYZ=$(VERSION.XYZ))
-
-# You should not have to change anything below this line
-###############################################################################
-include $(TOP)/main.mk
+# sqlite_cfg.h is typically created by the configure script. It's
+# commonly not needed but main.mk does not know that so we have to
+# create a dummy if we don't already have one.
sqlite_cfg.h:
touch $@
distclean-.:
rm -f sqlite_cfg.h
+
+#
+# With the above in place, we can now import the rules make use of
+# it...
+#
+include $(TOP)/main.mk
diff --git a/auto.def b/auto.def
index 9c6eccbf0..817a488db 100644
--- a/auto.def
+++ b/auto.def
@@ -381,14 +381,13 @@ if {[cc-check-includes zlib.h] && [hwaci-check-function-in-lib deflate z]} {
# TODO: port over the more sophisticated zlib search from the fossil auto.def
define HAVE_ZLIB 1; # "-DSQLITE_HAVE_ZLIB=1"
define LDFLAGS_ZLIB -lz
-# -DSQLITE_HAVE_ZLIB=1 is handled separately from the other feature
-# flags in the autotools build
-# add-feature-flag -DSQLITE_HAVE_ZLIB=1
- define CFLAGS_ZLIB -DSQLITE_HAVE_ZLIB=1
+ # Note that -DSQLITE_HAVE_ZLIB=1 is handled separately from the
+ # other feature flags in the autotools build. Do we need to emulate
+ # that?
+ add-shell-opt -DSQLITE_HAVE_ZLIB=1
} else {
define HAVE_ZLIB 0
define LDFLAGS_ZLIB ""
- define CFLAGS_ZLIB ""
}
hwaci-define-if-opt-truthy amalgamation USE_AMALGAMATION \
diff --git a/main.mk b/main.mk
index e8567d369..8ed28d0bb 100644
--- a/main.mk
+++ b/main.mk
@@ -98,7 +98,7 @@ TCLSH_CMD ?= tclsh
# JIMSH requires a leading path component, even if it's ./, so that it
# can be used as a shell command.
#
-CFLAGS.JIMSH ?= -DHAVE_REALPATH
+CFLAGS.jimsh ?= -DHAVE_REALPATH
JIMSH ?= ./jimsh$(T.exe)
#
# $(B.tclsh) =
@@ -175,10 +175,14 @@ AMALGAMATION_GEN_FLAGS ?= --linemacros=0
# and ENABLE flags must be passed to the LEMON parser generator and
# the mkkeywordhash tool as well.
#
-# Add OPTIONS=... on the command line to append additional options to
-# the OPT_FEATURE_FLAGS. Note that some flags only work if the build
-# is specifically configured to account for them. Adding them later,
-# when compiling the amalgamation, may or may not work.
+# Add OPTIONS=... on the make command line to append additional options
+# to the OPT_FEATURE_FLAGS. Note that some flags only work if the
+# build is specifically configured to account for them. Adding them
+# later, when compiling the amalgamation, may or may not work.
+#
+# TO CLARIFY: OPTS=... has historically been expected in some
+# contexts, and is distinctly different from OPTIONS and
+# OPT_FEATURE_FLAGS, but its name is confusingly close to $(OPTIONS).
#
OPT_FEATURE_FLAGS ?=
#
@@ -214,19 +218,6 @@ TCLLIB_RPATH ?=
#
HAVE_WASI_SDK ?= 0
#
-# $(CFLAGS.libsqlite3) must contain any CFLAGS which are relevant for
-# compiling the library's own sources, including (sometimes) when
-# compiling sqlite3.c directly in to another app.
-#
-CFLAGS.libsqlite3 ?= $(CFLAGS)
-#
-# $(T.cc.sqlite) is $(T.cc) plus any flags which are desired for the
-# library as a whole, but not necessarily needed for every binary. It
-# will normally get initially populated with flags by the
-# configure-generated makefile.
-#
-T.cc.sqlite ?= $(T.cc)
-#
# ... and many, many more. Sane defaults are selected where possible.
#
# With the above-described defined, the rest of this make script will
@@ -242,18 +233,53 @@ all: sqlite3.h sqlite3.c
########################################################################
#
+# $(CFLAGS) should ideally only contain flags which are relevant for
+# all binaries built for the target platform.
+#
+T.cc += $(CFLAGS)
+
+#
+# The difference between $(OPT_FEATURE_FLAGS) and $(OPTS) is that the
+# former is historically provided by the configure script, whereas the
+# latter is intended to be provided as arguments to the make
+# invocation.
+#
+T.cc += $(OPT_FEATURE_FLAGS)
+
+#
+# Add in any optional global compilation flags on the make command
+# line ie. make "OPTS=-DSQLITE_ENABLE_FOO=1 -DSQLITE_OMIT_FOO=1".
+#
+T.cc += $(OPTS)
+
+#
# $(INSTALL) invocation for use with non-executable files.
#
INSTALL.noexec = $(INSTALL) -m 0644
# ^^^ do not use GNU-specific flags to $(INSTALL), e.g. --mode=...
#
-# $(T.compile) = generic target platform compiler invocation
-# $(T.compile.extras) = config-specific flags for $(T.compile)
+# $(T.compile) = generic target platform compiler invocation,
+# differing only from $(T.cc) in that it appends $(T.compile.extras),
+# which are primarily intended for use with gcov-related flags.
#
T.compile = $(T.cc) $(T.compile.extras)
#
+# $(CFLAGS.libsqlite3) must contain any CFLAGS which are relevant for
+# compiling the library's own sources, including (sometimes) when
+# compiling sqlite3.c directly in to another app.
+#
+CFLAGS.libsqlite3 ?=
+#
+# $(T.cc.sqlite) is $(T.cc) plus any flags which are desired for the
+# library as a whole, but not necessarily needed for every binary. It
+# will normally get initially populated with flags by the
+# configure-generated makefile.
+#
+T.cc.sqlite ?= $(T.cc)
+
+#
# $(CFLAGS.intree_includes) = -I... flags relevant specifically to
# this tree, including any subdirectories commonly needed for building
# various tools.
@@ -273,7 +299,8 @@ T.cc.extension = $(T.compile) -I. -I$(TOP)/src -DSQLITE_CORE
# $(T.link) = compiler invocation for when the target will be an
# executable.
#
-# $(T.link.extras) = optional config-specific flags for $(T.link)
+# $(T.link.extras) = optional config-specific flags for $(T.link),
+# primarily intended for use with gcov-related flags.
#
T.link = $(T.cc.sqlite) $(T.link.extras)
#
@@ -328,7 +355,7 @@ $(install-dir.all):
# accepts only a single argument.
#
$(JIMSH): $(TOP)/autosetup/jimsh0.c
- $(B.cc) -o $@ $(CFLAGS.JIMSH) $(TOP)/autosetup/jimsh0.c
+ $(B.cc) -o $@ $(CFLAGS.jimsh) $(TOP)/autosetup/jimsh0.c
@if [ x = "x$$($(JIMSH) -e 'file normalize $(JIMSH)' 2>/dev/null)" ]; then \
echo "$(JIMSH) was built without -DHAVE_REALPATH or -DHAVE__FULLPATH." 1>&2; \
exit 1; \
@@ -358,8 +385,8 @@ $(MAKE_SANITY_CHECK): $(MAKEFILE_LIST)
@if [ x = "x$(VERSION.XYZ)" ]; then echo "VERSION.XYZ must be set to the library's X.Y.Z-format version number" 1>&2; exit 1; fi
@if [ x = "x$(B.cc)" ]; then echo "Missing B.cc var" 1>&2; exit 1; fi
@if [ x = "x$(T.cc)" ]; then echo "Missing T.cc var" 1>&2; exit 1; fi
- @if [ x = "x$(VERSION.XYZ)" ]; then echo "Missing VERSION.XYZ var" 1>&2; exit 1; fi
@if [ x = "x$(B.tclsh)" ]; then echo "Missing B.tclsh var" 1>&2; exit 1; fi
+ @if [ x = "x$(AR)" ]; then echo "Missing AR var" 1>&2; exit 1; fi
touch $@
clean-sanity-check:
rm -f $(MAKE_SANITY_CHECK)
@@ -1699,9 +1726,11 @@ threadtest5: sqlite3.c $(TOP)/test/threadtest5.c
xbin: threadtest5
sqlite3$(T.exe): shell.c sqlite3.c
- $(T.link) $(CFLAGS.readline) $(SHELL_OPT) -o $@ \
+ $(T.link) -o $@ \
shell.c sqlite3.c \
+ $(CFLAGS.readline) $(SHELL_OPT) \
$(LDFLAGS.libsqlite3) $(LDFLAGS.readline)
+
#
# Build sqlite3$(T.exe) by default except in wasi-sdk builds. Yes, the
# semantics of 0 and 1 are confusingly swapped here.
@@ -1839,7 +1868,7 @@ DBFUZZ2_OPTS = \
-DSQLITE_ENABLE_FTS5
dbfuzz2$(T.exe): $(TOP)/test/dbfuzz2.c sqlite3.c sqlite3.h
- $(T.cc) $(OPT_FEATURE_FLAGS) $(OPTS) -I. -g -O0 \
+ $(T.cc) -I. -g -O0 \
-DSTANDALONE -o dbfuzz2 \
$(DBFUZZ2_OPTS) $(TOP)/test/dbfuzz2.c sqlite3.c $(LDFLAGS.libsqlite3)
mkdir -p dbfuzz2-dir
diff --git a/manifest b/manifest
index 616a83925..a2393aa65 100644
--- a/manifest
+++ b/manifest
@@ -1,10 +1,10 @@
-C More\spotentially-controversial\smakefile\ssymbol\srenaming.\sThis\sis\ssimply\smore\sreadable\sto\smy\seyes.
-D 2024-10-24T05:33:30.843
+C Various\sbuild\scleanups\scentered\saround\sstraightening\sout\svarious\suses\sof\sCFLAGS\sand\sits\scousins.\sTeach\sMakefile.linux-generic\sto\sfigure\sout\sthe\sTOP\sdir\son\sits\sown\s(a\sGNU\sMake-ism,\sbut\sit's\sa\sLinux-specific\smakefile).
+D 2024-10-24T07:31:39.328
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
-F Makefile.in 52f39f64dd0b5d925987adf433695db1a6bf7a5b009c8231303741a7620616d0
-F Makefile.linux-generic eb13e3e981a1950c99ce26c177fe2c2d2a268da4c0b1fcba85bfdf56142be298
+F Makefile.in c9c7aa417b8f012f35ec3e4661f258f7fc415ddd75a55acc7f501a50ec39bb26
+F Makefile.linux-generic 8df0e6ee5e4671f844caf27f88d2be7421e904639f7a0ffdce0e2cd4ea11e8c0
F Makefile.msc 58b69eda1faad5d475092b8aeffab9156ee4901a82db089b166607f2ec907ee4
F README.md c3c0f19532ce28f6297a71870f3c7b424729f0e6d9ab889616d3587dd2332159
F VERSION 8dc0c3df15fd5ff0622f88fc483533fce990b1cbb2f5fb9fdfb4dbd71eef2889
@@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d
F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2
F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90
F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2
-F auto.def 610865aa878f3367977b5c4d74ffa9b74d097d1f0e76ffa4a8c286322e0d4e63
+F auto.def d120d07a0fb42193224bcfb6b658804fdd609bb3b77196d436783b7536426394
F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903
F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347
F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac
@@ -707,7 +707,7 @@ F ext/wasm/wasmfs.make bc8bb227f35d5bd3863a7bd2233437c37472a0d81585979f058f9b9b5
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0
-F main.mk c75886e8126c083e85fabc287d9d4649305f8c90e8d98fde23e8e1f338884e0f
+F main.mk ece1eba12f6f0bba61a77a196abd88f665dd37124f767a28c2138d4860245059
F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421
@@ -2236,8 +2236,8 @@ F vsixtest/vsixtest.tcl 6195aba1f12a5e10efc2b8c0009532167be5e301abe5b31385638080
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 4193d90f2158e25fe25f9bcf579ae38a6e0ab6c26f52cd07a777d67b87107632
-R 4feb62569d5755832ec6d50a1a994ac9
+P 6d4d1d5fefb82ec7458efc2e93c933d9dc415dfa06fa46ff4725c30fc920ca5a
+R bb709993bdd1e18592edf968cb2f2be0
U stephan
-Z fdd999fe051cb1883eb5d46f2f11b028
+Z 980b41dc4221bf4da6aefdf6906d7934
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 2b974d21a..6a5cdb272 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-6d4d1d5fefb82ec7458efc2e93c933d9dc415dfa06fa46ff4725c30fc920ca5a
+58a0f7e79ce913b432dfd4db018e5a92efa8a6bd8a50bd78ab705ceac0322e9c