123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- project('tinc', 'c',
- version: '1.1pre18',
- license: 'GPL-2.0-or-later',
- meson_version: '>=0.51',
- default_options: [
- 'c_std=c11',
- 'warning_level=3',
- 'buildtype=debugoptimized',
- ],
- )
- 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')
- opt_lz4 = get_option('lz4')
- opt_lzo = get_option('lzo')
- opt_miniupnpc = get_option('miniupnpc')
- opt_readline = get_option('readline')
- opt_sandbox = get_option('sandbox')
- opt_static = get_option('static')
- opt_systemd = get_option('systemd')
- opt_tests = get_option('tests')
- opt_tunemu = get_option('tunemu')
- opt_uml = get_option('uml')
- opt_vde = get_option('vde')
- opt_zlib = get_option('zlib')
- meson_version = meson.version()
- 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', required: false)
- if python.found()
- if meson_version.version_compare('>=0.55')
- python_path = python.full_path()
- else
- python_path = python.path()
- endif
- else
- python_path = ''
- endif
- cc_defs = ['-D_GNU_SOURCE']
- if os_name == 'sunos'
- cc_defs += '-D__EXTENSIONS__'
- endif
- cc_flags = [cc_defs]
- ld_flags = []
- if cc_name != 'msvc'
- cc_flags += [
- '-Wbad-function-cast',
- '-Wduplicated-branches',
- '-Wduplicated-cond',
- '-Wformat-overflow=2',
- '-Wformat-truncation=1', # 2 prints too much noise
- '-Wformat=2',
- '-Wlogical-op',
- '-Wmissing-declarations',
- '-Wmissing-noreturn',
- '-Wmissing-prototypes',
- '-Wno-embedded-directive',
- '-Wold-style-definition',
- '-Wredundant-decls',
- '-Wreturn-type',
- '-Wstrict-prototypes',
- '-Wswitch-enum',
- '-Wtrampolines', # may require executable stack which is disabled
- '-Wvla', # VLAs are not supported by MSVC
- '-Wwrite-strings',
- '-fdiagnostics-show-option',
- '-fno-strict-overflow',
- '-fstrict-aliasing',
- ]
- endif
- if opt_static.auto()
- static = os_name == 'windows'
- else
- static = opt_static.enabled()
- endif
- if static and cc_name != 'msvc'
- ld_flags += '-static'
- endif
- if opt_harden
- 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',
- '-fcf-protection=full',
- '-fstack-protector-strong',
- ]
- ld_flags += ['-Wl,-z,relro', '-Wl,-z,now', '-Wl,-z,noexecstack']
- if os_name == 'windows'
- ld_flags += ['-Wl,--dynamicbase', '-Wl,--nxcompat']
- else
- # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90458
- cc_flags += '-fstack-clash-protection'
- endif
- endif
- endif
- cc_flags = cc.get_supported_arguments(cc_flags)
- ld_flags = cc.get_supported_link_arguments(ld_flags)
- add_project_arguments(cc_flags, language: 'c')
- add_project_link_arguments(ld_flags, language: 'c')
- build_root = meson.current_build_dir()
- src_root = meson.current_source_dir()
- prefix = get_option('prefix')
- dir_bin = prefix / get_option('bindir')
- dir_data = prefix / get_option('datadir')
- dir_info = prefix / get_option('infodir')
- dir_lib = prefix / get_option('libdir')
- dir_local_state = prefix / get_option('localstatedir')
- dir_locale = prefix / get_option('localedir')
- dir_man = prefix / get_option('mandir')
- dir_sbin = prefix / get_option('sbindir')
- dir_sysconf = prefix / get_option('sysconfdir')
- if dir_run_state == ''
- dir_run_state = dir_local_state / 'run'
- endif
- if not opt_docs.disabled()
- subdir('doc')
- endif
- subdir('src')
- if not opt_tests.disabled()
- subdir('test')
- endif
- subdir('bash_completion.d')
- if os_name == 'linux' and not opt_systemd.disabled()
- subdir('systemd')
- endif
- if python.found()
- run_target('reformat', command: [
- python,
- '@SOURCE_ROOT@/lint.py',
- '--fix',
- ])
- run_target('lint', command: [
- python,
- '@SOURCE_ROOT@/lint.py',
- ])
- endif
- if meson_version.version_compare('>=0.53')
- summary({
- 'prefix': prefix,
- 'sandbox': cdata.has('HAVE_SANDBOX'),
- 'watchdog': cdata.has('HAVE_WATCHDOG'),
- }, bool_yn: true, section: 'System')
- endif
|