comparison third_party/sqlite3/autosetup/cc-lib.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) 2011 WorkWare Systems http://www.workware.net.au/
2 # All rights reserved
3
4 # @synopsis:
5 #
6 # Provides a library of common tests on top of the 'cc' module.
7
8 use cc
9
10 # @cc-check-lfs
11 #
12 # The equivalent of the 'AC_SYS_LARGEFILE' macro.
13 #
14 # defines 'HAVE_LFS' if LFS is available,
15 # and defines '_FILE_OFFSET_BITS=64' if necessary
16 #
17 # Returns 1 if 'LFS' is available or 0 otherwise
18 #
19 proc cc-check-lfs {} {
20 cc-check-includes sys/types.h
21 msg-checking "Checking if -D_FILE_OFFSET_BITS=64 is needed..."
22 set lfs 1
23 if {[msg-quiet cc-with {-includes sys/types.h} {cc-check-sizeof off_t}] == 8} {
24 msg-result no
25 } elseif {[msg-quiet cc-with {-includes sys/types.h -cflags -D_FILE_OFFSET_BITS=64} {cc-check-sizeof off_t}] == 8} {
26 define _FILE_OFFSET_BITS 64
27 msg-result yes
28 } else {
29 set lfs 0
30 msg-result none
31 }
32 define-feature lfs $lfs
33 return $lfs
34 }
35
36 # @cc-check-endian
37 #
38 # The equivalent of the 'AC_C_BIGENDIAN' macro.
39 #
40 # defines 'HAVE_BIG_ENDIAN' if endian is known to be big,
41 # or 'HAVE_LITTLE_ENDIAN' if endian is known to be little.
42 #
43 # Returns 1 if determined, or 0 if not.
44 #
45 proc cc-check-endian {} {
46 cc-check-includes sys/types.h sys/param.h
47 set rc 0
48 msg-checking "Checking endian..."
49 cc-with {-includes {sys/types.h sys/param.h}} {
50 if {[cctest -code {
51 #if !defined(BIG_ENDIAN) || !defined(BYTE_ORDER)
52 #error unknown
53 #elif BYTE_ORDER != BIG_ENDIAN
54 #error little
55 #endif
56 }]} {
57 define-feature big-endian
58 msg-result "big"
59 set rc 1
60 } elseif {[cctest -code {
61 #if !defined(LITTLE_ENDIAN) || !defined(BYTE_ORDER)
62 #error unknown
63 #elif BYTE_ORDER != LITTLE_ENDIAN
64 #error big
65 #endif
66 }]} {
67 define-feature little-endian
68 msg-result "little"
69 set rc 1
70 } else {
71 msg-result "unknown"
72 }
73 }
74 return $rc
75 }
76
77 # @cc-check-flags flag ?...?
78 #
79 # Checks whether the given C/C++ compiler flags can be used. Defines feature
80 # names prefixed with 'HAVE_CFLAG' and 'HAVE_CXXFLAG' respectively, and
81 # appends working flags to '-cflags' and 'AS_CFLAGS' or 'AS_CXXFLAGS'.
82 proc cc-check-flags {args} {
83 set result 1
84 array set opts [cc-get-settings]
85 switch -exact -- $opts(-lang) {
86 c++ {
87 set lang C++
88 set prefix CXXFLAG
89 }
90 c {
91 set lang C
92 set prefix CFLAG
93 }
94 default {
95 autosetup-error "cc-check-flags failed with unknown language: $opts(-lang)"
96 }
97 }
98 foreach flag $args {
99 msg-checking "Checking whether the $lang compiler accepts $flag..."
100 if {[cctest -cflags $flag]} {
101 msg-result yes
102 define-feature $prefix$flag
103 cc-with [list -cflags [list $flag]]
104 define-append AS_${prefix}S $flag
105 } else {
106 msg-result no
107 set result 0
108 }
109 }
110 return $result
111 }
112
113 # @cc-check-standards ver ?...?
114 #
115 # Checks whether the C/C++ compiler accepts one of the specified '-std=$ver'
116 # options, and appends the first working one to '-cflags' and 'AS_CFLAGS' or
117 # 'AS_CXXFLAGS'.
118 proc cc-check-standards {args} {
119 array set opts [cc-get-settings]
120 foreach std $args {
121 if {[cc-check-flags -std=$std]} {
122 return $std
123 }
124 }
125 return ""
126 }
127
128 # Checks whether $keyword is usable as alignof
129 proc cctest_alignof {keyword} {
130 msg-checking "Checking for $keyword..."
131 if {[cctest -code "int x = ${keyword}(char), y = ${keyword}('x');"]} then {
132 msg-result ok
133 define-feature $keyword
134 } else {
135 msg-result "not found"
136 }
137 }
138
139 # @cc-check-c11
140 #
141 # Checks for several C11/C++11 extensions and their alternatives. Currently
142 # checks for '_Static_assert', '_Alignof', '__alignof__', '__alignof'.
143 proc cc-check-c11 {} {
144 msg-checking "Checking for _Static_assert..."
145 if {[cctest -code {
146 _Static_assert(1, "static assertions are available");
147 }]} then {
148 msg-result ok
149 define-feature _Static_assert
150 } else {
151 msg-result "not found"
152 }
153
154 cctest_alignof _Alignof
155 cctest_alignof __alignof__
156 cctest_alignof __alignof
157 }
158
159 # @cc-check-alloca
160 #
161 # The equivalent of the 'AC_FUNC_ALLOCA' macro.
162 #
163 # Checks for the existence of 'alloca'
164 # defines 'HAVE_ALLOCA' and returns 1 if it exists.
165 proc cc-check-alloca {} {
166 cc-check-some-feature alloca {
167 cctest -includes alloca.h -code { alloca (2 * sizeof (int)); }
168 }
169 }
170
171 # @cc-signal-return-type
172 #
173 # The equivalent of the 'AC_TYPE_SIGNAL' macro.
174 #
175 # defines 'RETSIGTYPE' to 'int' or 'void'.
176 proc cc-signal-return-type {} {
177 msg-checking "Checking return type of signal handlers..."
178 cc-with {-includes {sys/types.h signal.h}} {
179 if {[cctest -code {return *(signal (0, 0)) (0) == 1;}]} {
180 set type int
181 } else {
182 set type void
183 }
184 define RETSIGTYPE $type
185 msg-result $type
186 }
187 }