0
0
mirror of https://github.com/sqlite/sqlite.git synced 2024-11-21 19:29:09 +01:00

Add --with-icu-config flag to use the icu-config binary to find the required ldflags for linking the ICU libraries.

FossilOrigin-Name: 64f33bb125102b3fec3901f4b56098429509ec0b6ce6e6b88af2393c344ac864
This commit is contained in:
stephan 2024-10-28 00:56:31 +00:00
parent e550d98bbf
commit 1682fedaa0
4 changed files with 94 additions and 21 deletions

View File

@ -173,8 +173,10 @@ set flags {
editline=0 => {BSD editline support}
# </line-editing>
# <icu>
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}
# </icu>
# <alternative-builds>
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 <stdio.h>
#include <readline/readline.h>
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

View File

@ -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.

View File

@ -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.

View File

@ -1 +1 @@
c895766ed31f55c02f05d357333e9cf45e82ec5af4d8b0491270e4fda7a57d42
64f33bb125102b3fec3901f4b56098429509ec0b6ce6e6b88af2393c344ac864