diff --git a/Makefile.in b/Makefile.in index 44a0f62932..2c7869cda9 100644 --- a/Makefile.in +++ b/Makefile.in @@ -97,8 +97,18 @@ AR.flags = cr # TODO? Add a configure test to determine this? CC = @CC@ B.cc = @CC_FOR_BUILD@ @BUILD_CFLAGS@ T.cc = @CC@ -CFLAGS = @CPPFLAGS@ @CFLAGS@ @SH_CFLAGS@ - +# +# CFLAGS is problematic because it is frequently overridden when +# invoking make, which loses things like -fPIC. So... let's avoid +# using it directly and instead add a level of indirection. We +# combine CFLAGS and CPPFLAGS here because that's the way the legacy +# build did it. +# +CFLAGS = @CFLAGS@ @CPPFLAGS@ +# +# CFLAGS.core is documented in main.mk. +# +CFLAGS.core = @SH_CFLAGS@ LDFLAGS.shobj = @SHOBJ_LDFLAGS@ LDFLAGS.zlib = @LDFLAGS_ZLIB@ LDFLAGS.math = @LDFLAGS_MATH@ diff --git a/Makefile.linux-generic b/Makefile.linux-generic index 13a0419238..c7441fa517 100644 --- a/Makefile.linux-generic +++ b/Makefile.linux-generic @@ -24,9 +24,14 @@ TOP ?= $(realpath $(dir $(lastword $(MAKEFILE_LIST)))) # # $(CFLAGS) will be used when compiling the library and most -# utilities. It must normally contain -fPIC on Linux systems. +# utilities. It must normally contain -fPIC on Linux systems, +# but overriding CFLAGS is an easy way for users to inadvertently +# remove -fPIC from their builds, so we generally expect to see +# -fPIC in $(CFLAGS.core), which main.mk will integrate with +# the CFLAGS where needed. # -CFLAGS = -fPIC +CFLAGS = +CFLAGS.core = -fPIC # # $(SHELL_OPT) contains CFLAGS for building the sqlite3 CLI shell. diff --git a/auto.def b/auto.def index 1a6bd03614..500456086e 100644 --- a/auto.def +++ b/auto.def @@ -851,7 +851,7 @@ proc sqlite-check-line-editing {} { } } } elseif {"" ne $rlInc && ![string match *-I* $rlInc]} { - proj-fatal "Argument to --with-readline-cflag is intended to be CFLAGS and contain -I..." + proj-fatal "Argument to --with-readline-cflags is intended to be CFLAGS and contain -I..." } # If readline.h was found/specified, look for lib(readline|edit)... diff --git a/main.mk b/main.mk index 626b297d48..467e1f3e2a 100644 --- a/main.mk +++ b/main.mk @@ -221,7 +221,7 @@ TCL_CONFIG_SH ?= # $(TCLLIB_RPATH) is the -rpath flag for libtclsqlite3, not # libsqlite3, and will usually differ from $(LDFLAGS.rpath). # -TCLLIB_RPATH ?= +#TCLLIB_RPATH ?= # # $(HAVE_WASI_SDK) = # @@ -247,9 +247,15 @@ all: sqlite3.h sqlite3.c # # $(CFLAGS) should ideally only contain flags which are relevant for -# all binaries built for the target platform. +# all binaries built for the target platform. However, many people +# like to pass it to "make" without realizing that it applies to +# dozens of apps, and they override core flags when doing so. To help +# work around that, we expect core-most CFLAGS (only), e.g. -fPIC, to +# be set in $(CFLAGS.core). That enables people to pass their other +# CFLAGS without triggering, e.g., "recompile with -fPIC" errors. # -T.cc += $(CFLAGS) +CFLAGS.core ?= +T.cc += $(CFLAGS.core) $(CFLAGS) # # The difference between $(OPT_FEATURE_FLAGS) and $(OPTS) is that the diff --git a/manifest b/manifest index 5f72c6369e..e06adbc968 100644 --- a/manifest +++ b/manifest @@ -1,10 +1,10 @@ -C Try\sto\sdetect\sif\s--with-readline-cflags\sis\spassed\sa\snon-cflags\svalue,\se.g.\sreadline/readline.h,\sand\sfail\sloudly\sif\sit\sis.\sThe\slegacy\sconfigure\saccepted\sthat\sformulation\sbut\ssilently\sdid\snothing\suseful\swith\sit\sand\sthat\sformulation\snow\scauses\sthe\sauto-completion\stest\sto\sfail,\sas\sreported\sin\s[forum:f13b8e8f38402367\s|\sforum\spost\sf13b8e8f38402367]. -D 2024-10-29T23:19:29.053 +C Split\sthe\score-most\sCFLAGS,\swhich\sshould\snot\sbe\soverridable\s(like\s-fPIC),\sinto\sCFLAGS.core,\sso\sthat\swent\sCFLAGS=...\sis\spassed\son\sin\sa\smake\sinvocation\sthe\s-fPIC\sflag\sis\snot\slost\s(as\sreported\sin\s[forum:39f8c54391d38c72\s|\sforum\spost\s39f8c543]). +D 2024-10-29T23:42:24.491 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md c5b4009dca54d127d2d6033c22fd9cc34f53bedb6ef12c7cbaa468381c74ab28 -F Makefile.in 064898709d63e882764d2011522f0898c42a5dc2e7663ff4f4ed8fcfe6b7b067 -F Makefile.linux-generic 69b54c58ab2424a0d30f340d9defd7e87c25690a55b77acb9bdc657bd9a223f1 +F Makefile.in 4d261854ba83b66a790271b2d0e390f94be8fe49b3e5ae6c1596abe7917c65a3 +F Makefile.linux-generic bd3e3cacd369821a6241d4ea1967395c962dfe3057e38cb0a435cee0e8b789d0 F Makefile.msc a92237976eb92c5efaa0dd2524746aec12c196e12df8d4dbff9543a4648c3312 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 b617eeed76cfc37c16462b77cc214646313df96ff904d2328042e496f2b0c9f4 +F auto.def 532d2b8d2d0a384476ca60144329ac12bceda654e9edd8178a88e4571dc43431 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -697,7 +697,7 @@ F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65a F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2 F ext/wasm/wasmfs.make bc8bb227f35d5bd3863a7bd2233437c37472a0d81585979f058f9b9b503bef35 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0 -F main.mk 46f98320780c72a025bed1a5f8af3355fb2186691617f2b8d41221f9aa564494 +F main.mk 933f21c0d62076382981df123cebad08a0b4a5980629efea46d5bd81791687a7 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504 F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421 @@ -2198,8 +2198,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 e2f41c2540d8ff7686bfe22336598896de9083d139fc5a291c0f19896b9c1d20 -R b6d32adaf9573d4cf76554f18adf8ffd +P c97f34d064c1fc1e6860761a417aaab2a79bd3871bcd1dad1d0d3b6f4b692a1e +R b6e862fcb5d5e7896f9f768e1edf8f0e U stephan -Z 0e7364863ba936108ce5c81e5e566b82 +Z 8441426a564a87d0438ac80a3d2d09b1 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index c40389ade9..d6f12026da 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c97f34d064c1fc1e6860761a417aaab2a79bd3871bcd1dad1d0d3b6f4b692a1e +f5899d22c6c2e65383d7e1ca43da740d3a56fb87daa204a642ce1dc963a98de2