From 6da414ef417b50d1162806ec8e901382970323fe Mon Sep 17 00:00:00 2001 From: stephan Date: Wed, 6 Nov 2024 07:20:20 +0000 Subject: [PATCH] When constructing the auto-reconfigure commands, only quote args which look like they need it. Minor doc updates. FossilOrigin-Name: d4fbd34f7a4b0e6179cb06114d148fbc5d30b8dc8db0b764f4347dd50ff591ba --- auto.def | 30 ++++++++++++++------- autosetup/README.md | 64 ++++++++++++++++++++++++--------------------- manifest | 14 +++++----- manifest.uuid | 2 +- 4 files changed, 62 insertions(+), 48 deletions(-) diff --git a/auto.def b/auto.def index 0f33f5b225..88c08bef09 100644 --- a/auto.def +++ b/auto.def @@ -1,4 +1,4 @@ -#/usr/bin/tclsh +#/do/not/tclsh # ^^^ help out editors which guess this file's content type. # # This is the main autosetup-compatible configure script for the @@ -227,15 +227,25 @@ msg-result "Source dir = $srcdir" msg-result "Build dir = $::autosetup(builddir)" msg-result "Configuring SQLite version $PACKAGE_VERSION" -# -# SQLITE_AUTORECONFIG contains make target rules for re-running the -# configure script with the same arguments it was initially invoked -# with. This can be used to automatically reconfigure -# -define-append SQLITE_AUTORECONFIG cd '$::autosetup(builddir)' && '$srcdir/configure' -#{*}$::autosetup(argv) breaks with --flag='val with spaces', so... -foreach arg $::autosetup(argv) { - define-append SQLITE_AUTORECONFIG '$arg' +if {1} { + # + # SQLITE_AUTORECONFIG contains make target rules for re-running the + # configure script with the same arguments it was initially invoked + # with. This can be used to automatically reconfigure + # + proc squote {arg} { + # Wrap $arg in single-quotes if it looks like it might need that + # to avoid mis-handling as a shell argument. We assume that $arg + # will never contain any single-quote characters. + if {[string match {*[ &;$*"]*} $arg]} { return '$arg' } + return $arg + } + define-append SQLITE_AUTORECONFIG cd [squote $::autosetup(builddir)] && [squote $srcdir/configure] + #{*}$::autosetup(argv) breaks with --flag='val with spaces', so... + foreach arg $::autosetup(argv) { + define-append SQLITE_AUTORECONFIG [squote $arg] + } + rename squote "" } # Are we cross-compiling? diff --git a/autosetup/README.md b/autosetup/README.md index 32e90080e5..b9453574fe 100644 --- a/autosetup/README.md +++ b/autosetup/README.md @@ -161,7 +161,7 @@ e.g. `CFLAGS` and `y` is the specific instance of that category, e.g. `CFLAGS.readline`. When the configure script exports flags for consumption by filtered -files, e.g. [`Makefile.in`](/file/Makefile.in) and the generated +files, e.g. [Makefile.in][] and the generated `sqlite_cfg.h`, it does so in the more conventional `X_Y` form because those flags get exported as as C `#define`s to `sqlite_cfg.h`, where dots are not permitted. @@ -169,9 +169,8 @@ dots are not permitted. The `X.y` convention is used in the makefiles primarily because the person who did the initial port finds that considerably easier on the eyes and fingers. In practice, the `X_Y` form of such exports is used -exactly once in `Makefile.in`, where it's translated into into `X.y` -form for consumption by `Makefile.in` and -[`main.mk`](/file/main.mk). For example: +exactly once in [Makefile.in][], where it's translated into into `X.y` +form for consumption by [Makefile.in][] and [main.mk][]. For example: > ``` @@ -185,37 +184,40 @@ Do Not Update Global Shared State ------------------------------------------------------------------------ In both the legacy Autotools-driven build and in common Autosetup -usage, feature tests performed by the configure script may ammend -values to global flags such as `CFLAGS`, `LDFLAGS`, and `LIBS`. -That's appropriate for a makefile which builds a single deliverable, -but less so for makefiles which produce multiple deliverables, as it's -unlikely that every single deliverable will require the same core set -of those flags. In addition, that approach can make it difficult to -determine the origin of any given change to those flags because those -changes are hidden behind voodoo performed outside the immediate -visibility of the configure script's maintainer. It can also force the -maintainers of the configure script to place tests in a specific order -so that the resulting flags get applied at the correct time. +usage, feature tests performed by the configure script may amend +global flags such as `CFLAGS`, `LDFLAGS`, and `LIBS`. That's +appropriate for a makefile which builds a single deliverable, less +so for makefiles which produce multiple deliverables. Drawbacks +of that approach include: -> A real-life example of the latter point: before the approach - described below was taken to collecting build-time flags, the test - for `-rpath` had to come _after_ the test for zlib because the - results of the `-rpath` test implicitly modified the `CFLAGS`, - breaking the zlib feature test. Because the feature tests no longer - (intentionally) modify global state, that is not an issue. +- It's unlikely that every single deliverable will require the same + core set of those flags. +- It can be difficult to determine the origin of any given change to + that global state because those changes are hidden behind voodoo performed + outside the immediate visibility of the configure script's + maintainer. +- It can force the maintainers of the configure script to place tests + in a specific order so that the resulting flags get applied at + the correct time.\ + (A real-life example: before the approach described below was taken + to collecting build-time flags, the test for `-rpath` had to come + _after_ the test for zlib because the results of the `-rpath` test + implicitly modified the `CFLAGS`, breaking the zlib feature + test. Because the feature tests no longer (intentionally) modify + global state, that is not an issue.) -Cases where feature tests modify global state in such a way that it -may impact later feature tests are either (A) very intentionally -defined to do so (e.g. the `--with-wasi-sdk` flag needs to modify the -build tool chain) or (B) are oversights (i.e. bugs). +In this build, cases where feature tests modify global state in such a +way that it may impact later feature tests are either (A) very +intentionally defined to do so (e.g. the `--with-wasi-sdk` has +invasive side-effects) or (B) are oversights (i.e. bugs). -This tree's configure script, utility APIs, -[`Makefile.in`](/file/Makefile.in), and [`main.mk`](/file/main.mk) -therefore strive to separate the results of any given feature test -into its own well-defined variables. For example: +This tree's [configure script][auto.def], [utility APIs][proj.tcl], +[Makefile.in][], and [main.mk][] therefore strive to separate the +results of any given feature test into its own well-defined +variables. For example: - The linker flags for zlib are exported from the configure script as - `LDFLAGS_ZLIB`, which `Makefile.in` and `main.mk` then expose as + `LDFLAGS_ZLIB`, which [Makefile.in][] and [main.mk][] then expose as `LDFLAGS.zlib`. - `CFLAGS_READLINE` (a.k.a. `CFLAGS.readline`) contains the `CFLAGS` needed for including `libreadline`, `libedit`, or `linenoise`, and @@ -267,4 +269,6 @@ configure process, and check it in. [auto.def]: /file/auto.def [autosetup-git]: https://github.com/msteveb/autosetup [proj.tcl]: /file/autosetup/proj.tcl +[Makefile.in]: /file/Makefile.in +[main.mk]: /file/main.mk [JimTCL]: https://jim.tcl.tk diff --git a/manifest b/manifest index 0602686fef..c450b0aa8f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Minor\sdoc\stweaks\sand\stypo\sfixes. -D 2024-11-06T06:44:35.358 +C When\sconstructing\sthe\sauto-reconfigure\scommands,\sonly\squote\sargs\swhich\slook\slike\sthey\sneed\sit.\sMinor\sdoc\supdates. +D 2024-11-06T07:20:20.567 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md c5b4009dca54d127d2d6033c22fd9cc34f53bedb6ef12c7cbaa468381c74ab28 @@ -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 062b05538bc09779962a5265125aa289152f6abbb1ebaded9b22e8969b151d75 +F auto.def 05eedbf203a070fc84d9d26071f7ddf2a30f2118ab0204db46e91dbfec8a50b8 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -37,7 +37,7 @@ F autoconf/tea/win/rules.vc 94a18c3e453535459b4a643983acca52fb8756e79055bd2ad4b0 F autoconf/tea/win/targets.vc 96a25a1fa6e9e9cfb348fd3760a5395b4ce8acafc8ed10f0412937ec200d5dbd F autosetup/LICENSE 41a26aebdd2cd185d1e2b210f71b7ce234496979f6b35aef2cbf6b80cbed4ce4 F autosetup/README.autosetup a78ff8c4a3d2636a4268736672a74bf14a82f42687fcf0631a70c516075c031e -F autosetup/README.md bec9faf93df0451c7fc98f2af21770886841640565d027dd07f2f96c60651a7b +F autosetup/README.md e6a686c3959fc565f9310f10f0d038440b1715591b6a90fc594160e8c361a5b6 F autosetup/autosetup 9416ffdcdd6e2dbf7f6d1e5c890078518930f8af7722a950eacc28c7f151d2d6 x F autosetup/autosetup-config.guess dfa101c5e8220e864d5e9c72a85e87110df60260d36cb951ad0a85d6d9eaa463 x F autosetup/autosetup-config.sub a38fb074d0dece01cf919e9fb534a26011608aa8fa606490864295328526cd73 x @@ -2200,8 +2200,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 bf42b93cc7a4f8de2308fa4e5a798a62797bc95d95e4b0bd06035c74413fa828 -R 17278f4a0cd6af5e62ab09d724fcee60 +P 406d9122b75990722ab79fdf42d4528d670645d8f778ca0b5a2a35fa1dc106c4 +R d119d74839c372da88adc458ca3c56bf U stephan -Z de533e530a0ec603057ff86b4723ff1a +Z 3e647edf4dd8fa5473ff129830ab4868 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 2cb155ff2d..20a2e64608 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -406d9122b75990722ab79fdf42d4528d670645d8f778ca0b5a2a35fa1dc106c4 +d4fbd34f7a4b0e6179cb06114d148fbc5d30b8dc8db0b764f4347dd50ff591ba