From 1682fedaa0bade7f1ba5efba056374ccf81f5085 Mon Sep 17 00:00:00 2001 From: stephan Date: Mon, 28 Oct 2024 00:56:31 +0000 Subject: [PATCH] Add --with-icu-config flag to use the icu-config binary to find the required ldflags for linking the ICU libraries. FossilOrigin-Name: 64f33bb125102b3fec3901f4b56098429509ec0b6ce6e6b88af2393c344ac864 --- auto.def | 88 ++++++++++++++++++++++++++++++++------ autosetup/hwaci-common.tcl | 11 ++++- manifest | 14 +++--- manifest.uuid | 2 +- 4 files changed, 94 insertions(+), 21 deletions(-) diff --git a/auto.def b/auto.def index b4201b79c1..a1a7043a01 100644 --- a/auto.def +++ b/auto.def @@ -173,8 +173,10 @@ set flags { editline=0 => {BSD editline support} # # - with-icu-ldflags:LDFLAGS => {Enable SQLITE_ENABLE_ICU and add the given linker flags for the ICU libraries} - icu-collations=0 => {Enable SQLITE_ENABLE_ICU_COLLATIONS. Requires --with-icu-ldflags=...} + with-icu-ldflags:LDFLAGS + => {Enable SQLITE_ENABLE_ICU and add the given linker flags for the ICU libraries} + icu-collations=0 => {Enable SQLITE_ENABLE_ICU_COLLATIONS. Requires --with-icu-ldflags=...} + with-icu-config:=auto => {Enable SQLITE_ENABLE_ICU and fetch linker flags from the given icu-config binary} # # with-wasi-sdk:=/opt/wasi-sdk @@ -878,6 +880,26 @@ proc sqlite-check-line-editing {} { show-notices sqlite-add-shell-opt -DSQLITE_OMIT_READLINE_COMPLETION } + + # Now check whether rl_completion_matches() has a signature we can use. + # cctest is producing unexpected test output when using: + # -includes {stdio.h readline/readline.h} + # so we have to use -source instead and write the whole test app inline + if {[cctest \ + -cflags $rlInc -libs $rlLib -nooutput 1 -source { + #include + #include + static char * rcg(const char *z, int i){return 0;} + int main(void) { + char ** x = rl_completion_matches("one", rcg); + return 0; + } + }]} { + user-notice "Readline completion enabled" + } else { + user-notice "WARNING: readline completion disabled due to rl_completion_matches() signature mismatch" + add-shell-opt -DSQLITE_OMIT_READLINE_COMPLETION + } return "readline" } @@ -929,21 +951,63 @@ unset emccsh ######################################################################## # ICU - International Components for Unicode -if {"" ne [define LDFLAGS_ICU [join [opt-val with-icu-ldflags ""]]]} { +# +# Handles these flags: +# +# --with-icu-ldflags=LDFLAGS +# --with-icu-config[=/path/to/icu-config] +# --enable-icu-collations +# +# If both icu-ldflags and icu-config are provided, they are +# cumulative. If neither are provided, icu-collations is not honored +# and a warning is emitted if it is provided. +# +# Design note: though we can automatically enable ICU if the +# icu-config binary is found, we specifically do not. ICU is always an +# opt-in feature. +proc sqlite-check-icu {} { + define LDFLAGS_ICU [join [opt-val with-icu-ldflags ""]] # Flags sets seen in the wild for ICU: # - -licui18n -licuuc -licudata # - -licui18n -licuuc # - /usr/local/bin/icu-config --ldflags - sqlite-add-feature-flag -shell -DSQLITE_ENABLE_ICU - msg-result "Enabling ICU support with libs: [get-define LDFLAGS_ICU]" - if {[opt-bool icu-collations]} { - msg-result "Enabling ICU collations." - sqlite-add-feature-flag -shell -DSQLITE_ENABLE_ICU_COLLATIONS - # Recall that shell.c builds with sqlite3.c + if {[hwaci-opt-was-provided with-icu-config]} { + set bin [opt-val with-icu-config] + if {"auto" eq $bin} { + set bin [hwaci-first-bin-of \ + [get-define prefix]/bin/icu-config \ + /usr/local/bin/icu-config \ + /usr/bin/icu-config] + if {"" eq $bin} { + hwaci-fatal "--with-icu-config=auto cannot find icu-config binary" + } + } + if {[file-isexec $bin]} { + set x [exec $bin --ldflags] + if {"" eq $x} { + hwaci-fatal "$bin --ldflags returned no data" + } + define-append LDFLAGS_ICU $x + } else { + hwaci-fatal "--with-icu-config=$bin does not refer to an executable" + } } -} elseif {[opt-bool icu-collations]} { - hwaci-warn "ignoring --enable-icu-collations because --with-icu-ldflags was not specified" -} + set flags [define LDFLAGS_ICU [string trim [get-define LDFLAGS_ICU]]] + if {"" ne $flags} { + sqlite-add-feature-flag -shell -DSQLITE_ENABLE_ICU + msg-result "Enabling ICU support with libs: $flags" + if {[opt-bool icu-collations]} { + msg-result "Enabling ICU collations." + sqlite-add-feature-flag -shell -DSQLITE_ENABLE_ICU_COLLATIONS + # Recall that shell.c builds with sqlite3.c + } + } elseif {[opt-bool icu-collations]} { + hwaci-warn "ignoring --enable-icu-collations because neither --with-icu-ldflags nor --with-icu-config provided any linker flags" + } else { + msg-result "ICU support is disabled." + } +}; # sqlite-check-icu +sqlite-check-icu ######################################################################## # Check for log(3) in libm and die with an error if it is not diff --git a/autosetup/hwaci-common.tcl b/autosetup/hwaci-common.tcl index 1cde5703c7..126cad2550 100644 --- a/autosetup/hwaci-common.tcl +++ b/autosetup/hwaci-common.tcl @@ -187,7 +187,7 @@ proc hwaci-find-executable-path {args} { set verbose 0 if {[lindex $args 0] eq "-v"} { set verbose 1 - set binName [lrange $args 1 end] + set args [lassign $args - binName] msg-checking "Looking for $binName ... " } set check [find-executable-path $binName] @@ -255,6 +255,15 @@ proc hwaci-require-bash {} { return $bash } +######################################################################## +# Returns 1 if the user specifically provided the given configure +# flag, else 0. This can be used to distinguish between options which +# have a default value and those which were specifically provided by +# the user. +proc hwaci-opt-was-provided {key} { + return [dict exists $::autosetup(optset) $key] +} + ######################################################################## # Force-set autosetup option $flag to $val. The value can be fetched # later with [opt-val], [opt-bool], and friends. diff --git a/manifest b/manifest index d9d6800c4b..8862d9b64c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Expand\sthe\s'make\shelp'\starget\sand\sclean\sup\ssome\soverly-noisy\sconfigure\soutput. -D 2024-10-27T22:34:07.986 +C Add\s--with-icu-config\sflag\sto\suse\sthe\sicu-config\sbinary\sto\sfind\sthe\srequired\sldflags\sfor\slinking\sthe\sICU\slibraries. +D 2024-10-28T00:56:31.767 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md b6e6c1baf38e4339bd3f1e0e5e5bfd0a9a93d133360691b2785c2d4b2f2dcec2 @@ -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 ccbcecdf3a348fb463cd11e5fbcc1b2954059103e99531bf84d18a5f56c1351f +F auto.def a876018881cc52bd5ac45015d460164fa0c5bc0c92bb820aee3b49c3f38d1394 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -47,7 +47,7 @@ F autosetup/cc-lib.tcl 493c5935b5dd3bf9bd4eca89b07c8b1b1a9356d61783035144e21795f F autosetup/cc-shared.tcl 4f024e94a47f427ba61de1739f6381ef0080210f9fae89112d5c1de1e5460d78 F autosetup/cc.tcl 7e2fe943ae9d45cf39e9f5b05b6230df8e719415edea5af06c30eb68680bde14 F autosetup/default.auto 5cdf016de2140e50f1db190a02039dc42fb390af1dda4cc4853e3042a9ef0e82 -F autosetup/hwaci-common.tcl bc48c6ddfcd33a0eaf17f1709cde60622ff29c479e0356e8c6bcabe5b58a4d51 +F autosetup/hwaci-common.tcl e3913fd13debb4e0382c9e68ae46c61f9bc1afcfd2e9996a9b43557deefefb03 F autosetup/jimsh0.c 27ea5f221359ef6c58780fc6c185aadbf8d3bee9a021331a3e5de0eba0dc6de6 F autosetup/pkg-config.tcl 4e635bf39022ff65e0d5434339dd41503ea48fc53822c9c5bde88b02d3d952ba F autosetup/system.tcl 3a39d6e0b3bfba526fd39afe07c1d0d325e5a31925013a1ba7c671e1128e31bb @@ -2237,8 +2237,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 ab95ee33dfe56bd3b223f978626e6014414881c30443a2b88c782de724c39ae1 -R 4f2f3f9048608d15144b74fa8694e059 +P c895766ed31f55c02f05d357333e9cf45e82ec5af4d8b0491270e4fda7a57d42 +R 0c3cc11e229eb9f60e9d6e1a23d1a429 U stephan -Z f0d4b898dbccc821754c02bc4f1ee2af +Z cf4b95e7dea0c78a9db6ff8b45d5a758 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index dd090aaa96..0c41ed5c78 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c895766ed31f55c02f05d357333e9cf45e82ec5af4d8b0491270e4fda7a57d42 +64f33bb125102b3fec3901f4b56098429509ec0b6ce6e6b88af2393c344ac864