project('tinc', 'c',
- version: run_command('./src/git_tag.sh', check: true).stdout().strip(),
+ version: run_command([find_program('python3'), 'version.py', 'short'], check: true).stdout(),
license: 'GPL-2.0-or-later',
meson_version: '>=0.51',
default_options: [
dir_run_state = get_option('runstatedir')
opt_crypto = get_option('crypto')
opt_curses = get_option('curses')
+opt_debug = get_option('debug')
opt_docs = get_option('docs')
opt_harden = get_option('hardening')
opt_jumbograms = get_option('jumbograms')
cc = meson.get_compiler('c')
os_name = host_machine.system()
+cpu_family = host_machine.cpu_family()
cc_name = cc.get_id()
+python = find_program('python3')
+if meson_version.version_compare('>=0.55')
+ python_path = python.full_path()
+else
+ python_path = python.path()
+endif
+
cc_defs = ['-D_GNU_SOURCE']
+if os_name == 'sunos'
+ cc_defs += '-D__EXTENSIONS__'
+endif
+
cc_flags = [cc_defs]
ld_flags = []
static = opt_static.enabled()
endif
-if static
+if static and cc_name != 'msvc'
ld_flags += '-static'
endif
if opt_harden
- cc_flags += [
- '-D_FORTIFY_SOURCE=2',
- '-fwrapv',
- '-fno-strict-overflow',
- '-Wreturn-type',
- '-Wold-style-definition',
- '-Wmissing-declarations',
- '-Wmissing-prototypes',
- '-Wstrict-prototypes',
- '-Wredundant-decls',
- '-Wbad-function-cast',
- '-Wwrite-strings',
- '-fdiagnostics-show-option',
- '-fstrict-aliasing',
- '-Wmissing-noreturn',
- ]
- if cc_name == 'clang'
- cc_flags += '-Qunused-arguments'
- endif
- ld_flags += ['-Wl,-z,relro', '-Wl,-z,now']
- if os_name == 'windows'
- ld_flags += ['-Wl,--dynamicbase', '-Wl,--nxcompat']
+ if cc_name == 'msvc'
+ # Most of these flags are already ON by default in the latest version of MSVC.
+ # Add anyway in case someone is building using an old toolchain.
+ cc_flags += ['/guard:cf', '/GS']
+ ld_flags += [
+ '/guard:cf',
+ '/NXCOMPAT',
+ '/DYNAMICBASE',
+ cpu_family.endswith('64') ? '/HIGHENTROPYVA' : '/SAFESEH',
+ ]
+ else
+ cc_flags += [
+ '-D_FORTIFY_SOURCE=2',
+ '-fwrapv',
+ '-fno-strict-overflow',
+ '-Wreturn-type',
+ '-Wold-style-definition',
+ '-Wmissing-declarations',
+ '-Wmissing-prototypes',
+ '-Wstrict-prototypes',
+ '-Wredundant-decls',
+ '-Wbad-function-cast',
+ '-Wwrite-strings',
+ '-fdiagnostics-show-option',
+ '-fstrict-aliasing',
+ '-Wmissing-noreturn',
+ ]
+ if cc_name == 'clang'
+ cc_flags += '-Qunused-arguments'
+ endif
+ ld_flags += ['-Wl,-z,relro', '-Wl,-z,now']
+ if os_name == 'windows'
+ ld_flags += ['-Wl,--dynamicbase', '-Wl,--nxcompat']
+ endif
endif
endif
subdir('systemd')
endif
-prog_reformat = find_program('astyle', native: true, required: false)
-if prog_reformat.found()
- run_target('reformat', command: [
- prog_reformat,
- '--options=@SOURCE_ROOT@/.astylerc',
- '@SOURCE_ROOT@/*.c', '@SOURCE_ROOT@/*.h',
- ])
-endif
-
+run_target('reformat', command: [
+ find_program('python3'),
+ '@SOURCE_ROOT@/reformat.py',
+])