diff options
Diffstat (limited to 'meson.build')
-rw-r--r-- | meson.build | 374 |
1 files changed, 374 insertions, 0 deletions
diff --git a/meson.build b/meson.build new file mode 100644 index 000000000..fe250f8a8 --- /dev/null +++ b/meson.build | |||
@@ -0,0 +1,374 @@ | |||
1 | ## EXPERIMENTAL --- WORK IN PROGRESS --- USE AT YOUR OWN PERIL --- ## | ||
2 | project('gnunet', 'c', license: 'AGPLv3', | ||
3 | version: run_command('sh', 'contrib/get_version.sh', check: true).stdout().strip()) | ||
4 | |||
5 | add_project_arguments('-D_GNU_SOURCE', language : 'c') | ||
6 | |||
7 | cc = meson.get_compiler('c') | ||
8 | incdir = include_directories('src/include') | ||
9 | cdata = configuration_data() | ||
10 | |||
11 | # Version | ||
12 | gnunet_version = run_command('sh', 'contrib/get_version.sh', check: true).stdout().strip() | ||
13 | cdata.set('gnunet_version', gnunet_version) | ||
14 | r = run_command('sh', 'contrib/get_version.sh', '--major', check: true) | ||
15 | cdata.set('gnunet_major_version', r.stdout().strip()) | ||
16 | r = run_command('sh', 'contrib/get_version.sh', '--minor', check: true) | ||
17 | cdata.set('gnunet_minor_version', r.stdout().strip()) | ||
18 | r = run_command('sh', 'contrib/get_version.sh', '--micro', check: true) | ||
19 | cdata.set('gnunet_micro_version', r.stdout().strip()) | ||
20 | |||
21 | pkgcfgdir = get_option('datadir')/'gnunet'/'config.d' | ||
22 | docdir = get_option('datadir')/'doc'/'gnunet' | ||
23 | |||
24 | install_emptydir(docdir) | ||
25 | install_data('README', 'COPYING', install_dir: docdir) | ||
26 | |||
27 | # TODO: Set to true to build a single libgnunet | ||
28 | if get_option('monolith') | ||
29 | add_project_arguments('-DHAVE_GNUNET_MONOLITH', language: 'c') | ||
30 | endif | ||
31 | cdata.set('enable_experimental', get_option('experimental')) | ||
32 | if get_option('experimental') | ||
33 | add_project_arguments('-DHAVE_EXPERIMENTAL', language: 'c') | ||
34 | endif | ||
35 | logging_opt = get_option('logging') | ||
36 | if logging_opt == 'yes' | ||
37 | add_project_arguments('-DGNUNET_EXTRA_LOGGING=0', language: 'c') | ||
38 | endif | ||
39 | if logging_opt == 'no' | ||
40 | add_project_arguments('-DGNUNET_EXTRA_LOGGING=0', language: 'c') | ||
41 | add_project_arguments('-DGNUNET_CULL_LOGGING=1', language: 'c') | ||
42 | endif | ||
43 | if logging_opt == 'verbose' | ||
44 | add_project_arguments('-DGNUNET_EXTRA_LOGGING=1', language: 'c') | ||
45 | endif | ||
46 | if logging_opt == 'veryverbose' | ||
47 | add_project_arguments('-DGNUNET_EXTRA_LOGGING=2', language: 'c') | ||
48 | endif | ||
49 | |||
50 | |||
51 | # FIXME | ||
52 | cdata.set('extractor', 0) | ||
53 | |||
54 | cdata.set('PKGDATADIRECTORY', get_option('datadir')/'gnunet') | ||
55 | cdata.set('SYSCONFDIR', get_option('sysconfdir')) | ||
56 | # Various checks | ||
57 | if cc.has_member ('struct sockaddr_in', 'sin_len', prefix : ['#include <sys/types.h>', '#include <sys/socket.h>', '#include <netinet/in.h>']) | ||
58 | add_project_arguments('-DHAVE_SOCKADDR_IN_SIN_LEN', language: 'c') | ||
59 | endif | ||
60 | if cc.has_member ('struct sockaddr_un', 'sun_len', prefix : ['#include <sys/types.h>', '#include <sys/socket.h>', '#include <sys/un.h>']) | ||
61 | add_project_arguments('-DHAVE_SOCKADDR_UN_SUN_LEN', language: 'c') | ||
62 | endif | ||
63 | if cc.has_member ('struct tm', 'tm_gmtoff', prefix : ['#include <time.h>']) | ||
64 | add_project_arguments('-DHAVE_TM_GMTOFF', language: 'c') | ||
65 | endif | ||
66 | |||
67 | # TODO: | ||
68 | # - Go through configure.ac and convert all defines/detections | ||
69 | # - Compile all libs into a single libgnunet | ||
70 | |||
71 | # Gettext | ||
72 | i18n = import('i18n') | ||
73 | |||
74 | gettext_package = 'gnunet' | ||
75 | add_project_arguments('-DGETTEXT_PACKAGE=' + gettext_package, language: 'c') | ||
76 | subdir('po') | ||
77 | |||
78 | # FIXME lots still missing | ||
79 | cdata.set_quoted('PACKAGE_VERSION', '0.21.0') | ||
80 | cdata.set_quoted('GNUNET_DEFAULT_INTERFACE', 'en0') | ||
81 | cdata.set_quoted('VCS_VERSION', 'mesonbuild') | ||
82 | add_project_arguments('-DHAVE_CONFIG_H', language : 'c') | ||
83 | |||
84 | # Linker settings | ||
85 | # Compiler settings | ||
86 | add_project_arguments('-fno-strict-aliasing', language : 'c') | ||
87 | if cc.has_argument('-Wno-address-of-packed-member') | ||
88 | add_project_arguments('-Wno-address-of-packed-member', language : 'c') | ||
89 | endif | ||
90 | if cc.has_argument('-Wno-tautological-constant-out-of-range-compare') | ||
91 | add_project_arguments('-Wno-tautological-constant-out-of-range-compare', language : 'c') | ||
92 | endif | ||
93 | |||
94 | # FIXME static here, were dynamic in configure.ac | ||
95 | cdata.set('UNIXONLY', '#') | ||
96 | cdata.set('JAVAPORT', '#') | ||
97 | cdata.set('START_ON_DEMAND', 'YES') | ||
98 | |||
99 | |||
100 | cdata.set_quoted('build_target', host_machine.system()) | ||
101 | if host_machine.system() == 'linux' | ||
102 | add_project_arguments('-DLINUX', language : 'c') | ||
103 | add_project_link_arguments(['-Wl,--unresolved-symbols=report-all'], language : 'c') | ||
104 | cdata.set_quoted('GNUNET_DEFAULT_INTERFACE', 'eth0') | ||
105 | endif | ||
106 | if host_machine.system() == 'darwin' | ||
107 | cdata.set_quoted('GNUNET_DEFAULT_INTERFACE', 'en0') | ||
108 | add_project_arguments('-DDARWIN', language : 'c') | ||
109 | add_project_arguments('-D_APPLE_C_SOURCE', language : 'c') | ||
110 | add_project_arguments('-D__APPLE_USE_RFC_3542', language : 'c') | ||
111 | add_project_arguments('-fno-common', language : 'c') | ||
112 | endif | ||
113 | |||
114 | |||
115 | # FIXME: Not all dependencies here yet | ||
116 | ltdl_dep = dependency ('libltdl', required: false) | ||
117 | if not ltdl_dep.found() | ||
118 | ltdl_dep = cc.find_library('ltdl', required : true) | ||
119 | endif | ||
120 | unistr_dep = dependency('libunistring', required : false) | ||
121 | if not unistr_dep.found() | ||
122 | unistr_dep = cc.find_library('unistring', required : true) | ||
123 | endif | ||
124 | sqlite_dep = dependency ('sqlite3', required : false) | ||
125 | if not sqlite_dep.found() | ||
126 | sqlite_dep = cc.find_library('sqlite3', required : true) | ||
127 | endif | ||
128 | curl_dep = dependency('libcurl', version: '>=7.85.0', required : false) | ||
129 | if not curl_dep.found() | ||
130 | curl_dep = cc.find_library('curl', required : true) | ||
131 | endif | ||
132 | zlib_dep = dependency('zlib', required : false) | ||
133 | if not zlib_dep.found() | ||
134 | zlib_dep = cc.find_library('zlib', required : true) | ||
135 | endif | ||
136 | mhd_dep = dependency('libmicrohttpd', required : false) | ||
137 | if not mhd_dep.found() | ||
138 | mhd_dep = cc.find_library('microhttpd', required : true) | ||
139 | endif | ||
140 | json_dep = dependency('jansson', required : false) | ||
141 | if not json_dep.found() | ||
142 | json_dep = cc.find_library('jansson', required : true) | ||
143 | endif | ||
144 | gcrypt_dep = dependency('libgcrypt', required : false) | ||
145 | if not gcrypt_dep.found() | ||
146 | gcrypt_dep = cc.find_library('gcrypt', required : true) | ||
147 | endif | ||
148 | gnutls_dep = dependency('libgnutls', required : false) | ||
149 | if not gnutls_dep.found() | ||
150 | gnutls_dep = cc.find_library('gnutls', required : false) | ||
151 | if not gnutls_dep.found() | ||
152 | gnutls_dep = cc.find_library('gnutls-dane', required : true) | ||
153 | endif | ||
154 | endif | ||
155 | sodium_dep = dependency('libsodium', required : false, version: '>=1.0.18') | ||
156 | if not sodium_dep.found() | ||
157 | sodium_dep = cc.find_library('sodium', required : true) | ||
158 | endif | ||
159 | |||
160 | idn_dep = dependency('libidn2', required : false) | ||
161 | if not idn_dep.found() | ||
162 | idn_dep = cc.find_library('idn2', required : false) | ||
163 | endif | ||
164 | if idn_dep.found() | ||
165 | add_project_arguments('-DHAVE_LIBIDN2', language : 'c') | ||
166 | add_project_arguments('-DHAVE_IDN2_H', language : 'c') | ||
167 | else | ||
168 | idn_dep = dependency('libidn', required : false) | ||
169 | if not idn_dep.found() | ||
170 | idn_dep = cc.find_library('idn', required : true) | ||
171 | add_project_arguments('-DHAVE_LIBIDN', language : 'c') | ||
172 | add_project_arguments('-DHAVE_IDN_H', language : 'c') | ||
173 | endif | ||
174 | endif | ||
175 | |||
176 | m_dep = cc.find_library('m', required : false) | ||
177 | if m_dep.found() | ||
178 | add_project_arguments('-DHAVE_LIBM', language : 'c') | ||
179 | endif | ||
180 | |||
181 | sock_dep = cc.find_library('socket', required : false) | ||
182 | if sock_dep.found() | ||
183 | add_project_arguments('-DHAVE_LIBSOCKET', language : 'c') | ||
184 | endif | ||
185 | |||
186 | gopt_bin = find_program('getopt', '/usr/bin/getopt', required : false) | ||
187 | if gopt_bin.found() | ||
188 | add_project_arguments('-DHAVE_GETOPT_BINARY='+gopt_bin.full_path(), language : 'c') | ||
189 | endif | ||
190 | |||
191 | pkgc_bin = find_program('pkg-config', '/usr/bin/pkg-config', required : false) | ||
192 | if pkgc_bin.found() | ||
193 | add_project_arguments('-DHAVE_PKG_CONFIG', language : 'c') | ||
194 | endif | ||
195 | |||
196 | ssh_bin = find_program('ssh', '/usr/bin/ssh', required : false) | ||
197 | if ssh_bin.found() | ||
198 | add_project_arguments('-DHAVE_SSH_BINARY', language : 'c') | ||
199 | endif | ||
200 | |||
201 | # FIXME we are not doing anything with this right now | ||
202 | sudo_bin = find_program('sudo', '/usr/bin/sudo', required : false) | ||
203 | doas_bin = find_program('doas', '/usr/bin/doas', required : false) | ||
204 | |||
205 | # Optional dependencies | ||
206 | |||
207 | pq_dep = dependency('libpq', required : false) | ||
208 | if not pq_dep.found() | ||
209 | pq_dep = cc.find_library('pq', required : false) | ||
210 | endif | ||
211 | if pq_dep.found() | ||
212 | add_project_arguments('-DHAVE_POSTGRESQL', language : 'c') | ||
213 | endif | ||
214 | zbar_dep = dependency('libzbar', required : false) | ||
215 | if not zbar_dep.found() | ||
216 | zbar_dep = cc.find_library('zbar', required : false) | ||
217 | endif | ||
218 | if zbar_dep.found() | ||
219 | add_project_arguments('-DHAVE_ZBAR', language : 'c') | ||
220 | endif | ||
221 | jose_dep = dependency('libjose', required : false) | ||
222 | if not jose_dep.found() | ||
223 | jose_dep = cc.find_library('jose', required : false) | ||
224 | endif | ||
225 | if jose_dep.found() | ||
226 | add_project_arguments('-DHAVE_JOSE', language : 'c') | ||
227 | endif | ||
228 | |||
229 | ## FIXME conversation: pulse/gst detection in configure.ac obviously | ||
230 | ## broken. Needs reconsideration. No idea for now. | ||
231 | pulse_dep = dependency('libpulse', required : false) | ||
232 | if not pulse_dep.found() | ||
233 | pulse_dep = cc.find_library('pulse', required : false) | ||
234 | endif | ||
235 | if pulse_dep.found() | ||
236 | add_project_arguments('-DHAVE_PULSE', language : 'c') | ||
237 | endif | ||
238 | |||
239 | opus_dep = dependency('libopus', required : false) | ||
240 | if not opus_dep.found() | ||
241 | opus_dep = cc.find_library('opus', required : false) | ||
242 | endif | ||
243 | if opus_dep.found() | ||
244 | add_project_arguments('-DHAVE_OPUS', language : 'c') | ||
245 | endif | ||
246 | |||
247 | ogg_dep = dependency('libogg', required : false) | ||
248 | if not ogg_dep.found() | ||
249 | ogg_dep = cc.find_library('ogg', required : false) | ||
250 | endif | ||
251 | if ogg_dep.found() | ||
252 | add_project_arguments('-DHAVE_OGG', language : 'c') | ||
253 | endif | ||
254 | |||
255 | if pulse_dep.found() or ogg_dep.found() or opus_dep.found() | ||
256 | gst_dep = dependency('libgst', required : false) | ||
257 | if not gst_dep.found() | ||
258 | gst_dep = cc.find_library('gstreamer', required : false) | ||
259 | endif | ||
260 | if gst_dep.found() | ||
261 | add_project_arguments('-DHAVE_GST', language : 'c') | ||
262 | endif | ||
263 | endif | ||
264 | ## END conversation | ||
265 | |||
266 | gnunetdeps = [mhd_dep, | ||
267 | sodium_dep, | ||
268 | gcrypt_dep, | ||
269 | curl_dep, | ||
270 | json_dep, | ||
271 | zlib_dep, | ||
272 | sqlite_dep, | ||
273 | unistr_dep, #dependency('libunistring'), | ||
274 | ltdl_dep, #dependency('ltdl'), | ||
275 | idn_dep] | ||
276 | |||
277 | add_project_arguments('-DNEED_LIBGCRYPT_VERSION="1.6.0"', language : 'c') | ||
278 | |||
279 | if cc.check_header('sys/time.h') | ||
280 | add_project_arguments('-DHAVE_SYS_TIME_H', language : 'c') | ||
281 | endif | ||
282 | if cc.check_header('sys/param.h') | ||
283 | add_project_arguments('-DHAVE_SYS_PARAM_H', language : 'c') | ||
284 | endif | ||
285 | |||
286 | # NSS | ||
287 | have_nss = false | ||
288 | if cc.check_header('nss.h') | ||
289 | have_nss = true | ||
290 | add_project_arguments('-DHAVE_GLIBCNSS', language : 'c') | ||
291 | endif | ||
292 | |||
293 | # TUN | ||
294 | tun_found = false | ||
295 | if cc.check_header('if_tun.h') | ||
296 | if cc.has_header_symbol('if_tun.h', 'struct in6_ifreq') | ||
297 | add_project_arguments('-DIF_TUN_HDR="if_tun.h"', language : 'c') | ||
298 | tun_found = true | ||
299 | endif | ||
300 | endif | ||
301 | if not tun_found and cc.check_header('linux/if_tun.h') | ||
302 | if cc.has_header_symbol('linux/if_tun.h', 'struct in6_ifreq') | ||
303 | add_project_arguments('-DIF_TUN_HDR="linux/if_tun.h"', language : 'c') | ||
304 | tun_found = true | ||
305 | endif | ||
306 | endif | ||
307 | if not tun_found and cc.check_header('net/if_tun.h') | ||
308 | if cc.has_header_symbol('net/if_tun.h', 'struct in6_ifreq') | ||
309 | add_project_arguments('-DIF_TUN_HDR="net/if_tun.h"', language : 'c') | ||
310 | tun_found = true | ||
311 | endif | ||
312 | endif | ||
313 | if not tun_found and cc.check_header('net/tun/if_tun.h') | ||
314 | if cc.has_header_symbol('net/tun/if_tun.h', 'struct in6_ifreq') | ||
315 | add_project_arguments('-DIF_TUN_HDR="net/tun/if_tun.h"', language : 'c') | ||
316 | tun_found = true | ||
317 | endif | ||
318 | endif | ||
319 | |||
320 | |||
321 | |||
322 | |||
323 | # NSS | ||
324 | if cc.check_header('nss.h') | ||
325 | add_project_arguments('-DHAVE_GLIBCNSS', language : 'c') | ||
326 | endif | ||
327 | |||
328 | # GNUTLS DANE | ||
329 | if cc.check_header('gnutls/dane.h') | ||
330 | if cc.has_function('dane_verify_crt_raw', | ||
331 | prefix: '#include <gnutls/dane.h>', | ||
332 | dependencies: gnutls_dep) | ||
333 | add_project_arguments('-DHAVE_GNUTLS_DANE', language : 'c') | ||
334 | endif | ||
335 | endif | ||
336 | curl_ssl_check ='''#include <curl/curl.h> | ||
337 | int main(int argc, char **argv) { | ||
338 | return (CURLSSLSET_OK != curl_global_sslset(CURLSSLBACKEND_GNUTLS, NULL, NULL)); | ||
339 | } | ||
340 | ''' | ||
341 | |||
342 | result = cc.run(curl_ssl_check, name : 'cURL gnutls check', | ||
343 | dependencies: curl_dep) | ||
344 | cdata.set('curl_gnutls', 0) | ||
345 | if result.returncode() == 0 | ||
346 | cdata.set('curl_gnutls', 1) | ||
347 | endif | ||
348 | |||
349 | if cc.has_function('getloadavg') == false | ||
350 | error('getloadadv missing') | ||
351 | endif | ||
352 | if cc.has_function('strnlen', prefix : '#include <string.h>') | ||
353 | cdata.set('HAVE_STRNLEN', 1) | ||
354 | endif | ||
355 | if cc.has_function('memset_s') | ||
356 | cdata.set('HAVE_MEMSET_S', 1) | ||
357 | endif | ||
358 | if cc.has_function('explicit_bzero') | ||
359 | cdata.set('HAVE_EXPLICIT_BZERO', 1) | ||
360 | endif | ||
361 | |||
362 | |||
363 | configure_file(#input: 'gnunet_private_config.h.in', | ||
364 | output : 'gnunet_private_config.h', | ||
365 | configuration : cdata) | ||
366 | configuration_inc = include_directories('.') | ||
367 | |||
368 | pkg = import('pkgconfig') | ||
369 | |||
370 | subdir('src') | ||
371 | subdir('doc') | ||
372 | subdir('contrib') | ||
373 | |||
374 | meson.add_dist_script('meson-dist-script') | ||