comparison third_party/sqlite3/autosetup/pkg-config.tcl @ 167:589bab390fb4

[ThirdParty] Added sqlite3 to the third_party.
author MrJuneJune <me@mrjunejune.com>
date Mon, 19 Jan 2026 16:28:45 -0800
parents
children
comparison
equal deleted inserted replaced
166:78ea8d5ccc87 167:589bab390fb4
1 # Copyright (c) 2016 WorkWare Systems http://www.workware.net.au/
2 # All rights reserved
3
4 # @synopsis:
5 #
6 # The 'pkg-config' module allows package information to be found via 'pkg-config'.
7 #
8 # If not cross-compiling, the package path should be determined automatically
9 # by 'pkg-config'.
10 # If cross-compiling, the default package path is the compiler sysroot.
11 # If the C compiler doesn't support '-print-sysroot', the path can be supplied
12 # by the '--sysroot' option or by defining 'SYSROOT'.
13 #
14 # 'PKG_CONFIG' may be set to use an alternative to 'pkg-config'.
15
16 use cc
17
18 options {
19 sysroot:dir => "Override compiler sysroot for pkg-config search path"
20 }
21
22 # @pkg-config-init ?required?
23 #
24 # Initialises the 'pkg-config' system. Unless '$required' is set to 0,
25 # it is a fatal error if a usable 'pkg-config' is not found .
26 #
27 # This command will normally be called automatically as required,
28 # but it may be invoked explicitly if lack of 'pkg-config' is acceptable.
29 #
30 # Returns 1 if ok, or 0 if 'pkg-config' not found/usable (only if '$required' is 0).
31 #
32 proc pkg-config-init {{required 1}} {
33 if {[is-defined HAVE_PKG_CONFIG]} {
34 return [get-define HAVE_PKG_CONFIG]
35 }
36 set found 0
37
38 define PKG_CONFIG [get-env PKG_CONFIG pkg-config]
39 msg-checking "Checking for pkg-config..."
40
41 if {[catch {exec [get-define PKG_CONFIG] --version} version]} {
42 msg-result "[get-define PKG_CONFIG] (not found)"
43 if {$required} {
44 user-error "No usable pkg-config"
45 }
46 } else {
47 msg-result $version
48 define PKG_CONFIG_VERSION $version
49
50 set found 1
51
52 if {[opt-str sysroot o]} {
53 define SYSROOT [file-normalize $o]
54 msg-result "Using specified sysroot [get-define SYSROOT]"
55 } elseif {[get-define build] ne [get-define host]} {
56 if {[catch {exec-with-stderr {*}[get-define CC] -print-sysroot} result errinfo] == 0} {
57 # Use the compiler sysroot, if there is one
58 define SYSROOT $result
59 msg-result "Found compiler sysroot $result"
60 } else {
61 configlog "[get-define CC] -print-sysroot: $result"
62 set msg "pkg-config: Cross compiling, but no compiler sysroot and no --sysroot supplied"
63 if {$required} {
64 user-error $msg
65 } else {
66 msg-result $msg
67 }
68 set found 0
69 }
70 }
71 if {[is-defined SYSROOT]} {
72 set sysroot [get-define SYSROOT]
73
74 # XXX: It's possible that these should be set only when invoking pkg-config
75 global env
76 set env(PKG_CONFIG_DIR) ""
77 # Supposedly setting PKG_CONFIG_LIBDIR means that PKG_CONFIG_PATH is ignored,
78 # but it doesn't seem to work that way in practice
79 set env(PKG_CONFIG_PATH) ""
80 # Do we need to try /usr/local as well or instead?
81 set env(PKG_CONFIG_LIBDIR) $sysroot/usr/lib/pkgconfig:$sysroot/usr/share/pkgconfig
82 set env(PKG_CONFIG_SYSROOT_DIR) $sysroot
83 }
84 }
85 define HAVE_PKG_CONFIG $found
86 return $found
87 }
88
89 # @pkg-config module ?requirements?
90 #
91 # Use 'pkg-config' to find the given module meeting the given requirements.
92 # e.g.
93 #
94 ## pkg-config pango >= 1.37.0
95 #
96 # If found, returns 1 and sets 'HAVE_PKG_PANGO' to 1 along with:
97 #
98 ## PKG_PANGO_VERSION to the found version
99 ## PKG_PANGO_LIBS to the required libs (--libs-only-l)
100 ## PKG_PANGO_LDFLAGS to the required linker flags (--libs-only-L)
101 ## PKG_PANGO_CFLAGS to the required compiler flags (--cflags)
102 #
103 # If not found, returns 0.
104 #
105 proc pkg-config {module args} {
106 set ok [pkg-config-init]
107
108 msg-checking "Checking for $module $args..."
109
110 if {!$ok} {
111 msg-result "no pkg-config"
112 return 0
113 }
114
115 set pkgconfig [get-define PKG_CONFIG]
116
117 set ret [catch {exec $pkgconfig --modversion "$module $args"} version]
118 configlog "$pkgconfig --modversion $module $args: $version"
119 if {$ret} {
120 msg-result "not found"
121 return 0
122 }
123 # Sometimes --modversion succeeds but because of dependencies it isn't usable
124 # This seems to show up with --cflags
125 set ret [catch {exec $pkgconfig --cflags $module} cflags]
126 if {$ret} {
127 msg-result "unusable ($version - see config.log)"
128 configlog "$pkgconfig --cflags $module"
129 configlog $cflags
130 return 0
131 }
132 msg-result $version
133 set prefix [feature-define-name $module PKG_]
134 define HAVE_${prefix}
135 define ${prefix}_VERSION $version
136 define ${prefix}_CFLAGS $cflags
137 define ${prefix}_LIBS [exec $pkgconfig --libs-only-l $module]
138 define ${prefix}_LDFLAGS [exec $pkgconfig --libs-only-L $module]
139 return 1
140 }
141
142 # @pkg-config-get module setting
143 #
144 # Convenience access to the results of 'pkg-config'.
145 #
146 # For example, '[pkg-config-get pango CFLAGS]' returns
147 # the value of 'PKG_PANGO_CFLAGS', or '""' if not defined.
148 proc pkg-config-get {module name} {
149 set prefix [feature-define-name $module PKG_]
150 get-define ${prefix}_${name} ""
151 }
152
153 # @pkg-config-get-var module variable
154 #
155 # Return the value of the given variable from the given pkg-config module.
156 # The module must already have been successfully detected with pkg-config.
157 # e.g.
158 #
159 ## if {[pkg-config harfbuzz >= 2.5]} {
160 ## define harfbuzz_libdir [pkg-config-get-var harfbuzz libdir]
161 ## }
162 #
163 # Returns the empty string if the variable isn't defined.
164 proc pkg-config-get-var {module variable} {
165 set pkgconfig [get-define PKG_CONFIG]
166 set prefix [feature-define-name $module HAVE_PKG_]
167 exec $pkgconfig $module --variable $variable
168 }