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