endif
endforeach
+if cc.compiles('''
+ #include <stdlib.h>
+ extern void *make() __attribute__((malloc(free)));
+ int main(void) { return 0; }
+''')
+ cdata.set('HAVE_ATTR_MALLOC_WITH_ARG', 1,
+ description: 'support for __attribute__((malloc(deallocator)))')
+endif
+
if cc.compiles('''
_Static_assert(1, "ok");
int main(void) { return 0; }
'sys/ioctl.h',
'sys/mman.h',
'sys/param.h',
+ 'sys/random.h',
'sys/resource.h',
'sys/socket.h',
'sys/stat.h',
check_functions = [
'asprintf',
'daemon',
+ 'explicit_bzero',
+ 'explicit_memset',
'fchmod',
+ 'getentropy',
'gettimeofday',
+ 'memset_s',
'mlockall',
'putenv',
'strsignal',
src_lib_common = [
'conf.c',
+ 'console.c',
'dropin.c',
+ 'fs.c',
'keys.c',
'list.c',
+ 'logger.c',
'names.c',
'netutl.c',
+ 'pidfile.c',
'script.c',
'splay_tree.c',
'sptps.c',
'utils.c',
'version.c',
'xoshiro.c',
- 'logger.c',
]
src_tinc = [
'protocol_key.c',
'protocol_misc.c',
'protocol_subnet.c',
+ 'proxy.c',
'raw_socket_device.c',
'route.c',
'subnet.c',
]
+src_event_select = files('event_select.c')
+
+if os_name != 'windows'
+ src_tincd += 'signal.c'
+endif
+
+cc_flags_tinc = cc_flags
cc_flags_tincd = cc_flags
deps_common = []
deps_tinc = []
deps_tincd = [cc.find_library('m', required: false)]
+if os_name != 'windows'
+ src_lib_common += 'random.c'
+endif
+
if os_name in ['linux', 'android']
subdir('linux')
elif os_name.endswith('bsd') or os_name in ['dragonfly', 'darwin']
endif
endforeach
+src_getopt = []
if not cdata.has('HAVE_GETOPT_H') or not cc.has_function('getopt_long', prefix: have_prefix, args: cc_defs)
- src_lib_common += ['getopt.c', 'getopt1.c']
+ src_getopt = ['getopt.c', 'getopt1.c']
+ src_lib_common += src_getopt
endif
if not opt_miniupnpc.disabled()
if dep_curses.found()
cdata.set('HAVE_CURSES', 1)
deps_tinc += dep_curses
+ if static
+ cc_flags_tinc += '-DNCURSES_STATIC'
+ endif
endif
endif
if not dep_readline.found()
dep_readline = cc.find_library('readline', required: opt_readline, static: static)
endif
+ if not dep_readline.found()
+ dep_readline = cc.find_library('libedit', required: opt_readline, static: static)
+ endif
if dep_readline.found() and \
cc.has_header('readline/readline.h', dependencies: dep_readline) and \
cc.has_header('readline/history.h', dependencies: dep_readline)
subdir('include')
+have_sandbox = cdata.has('HAVE_SANDBOX')
+if not have_sandbox
+ src_lib_common += 'sandbox.c'
+endif
+
lib_crypto = static_library(
'tinc_crypto',
sources: src_lib_crypto,
sources: src_tinc,
dependencies: deps_tinc,
link_with: lib_common,
+ c_args: cc_flags_tinc,
implicit_include_directories: false,
include_directories: inc_conf,
build_by_default: false,
exe_sptps_test = executable(
'sptps_test',
- sources: 'sptps_test.c',
+ sources: [src_getopt, 'sptps_test.c'],
dependencies: deps_lib_common,
link_with: lib_common,
implicit_include_directories: false,
exe_sptps_keypair = executable(
'sptps_keypair',
- sources: 'sptps_keypair.c',
+ sources: [src_getopt, 'sptps_keypair.c'],
dependencies: deps_lib_common,
link_with: lib_common,
implicit_include_directories: false,