summaryrefslogtreecommitdiff
path: root/meson.build
diff options
context:
space:
mode:
authorEvgeny Vereshchagin <evvers@ya.ru>2018-01-27 12:56:42 +0300
committerGitHub <noreply@github.com>2018-01-27 12:56:42 +0300
commit4c0d48109540a0ab567de425cc904f6612c4ad1c (patch)
treecab7c2846182f737620fd3c67d39aeda5a823127 /meson.build
parent633b8afdf89573cb5a657204f433cdbfa81f63f8 (diff)
parent25a82102345170539541c3a3d050932472fd21cc (diff)
downloadsystemd-4c0d48109540a0ab567de425cc904f6612c4ad1c.tar.gz
Merge pull request #7933 from keszybz/fuzz-regression
test: add fuzzer regression testing
Diffstat (limited to 'meson.build')
-rw-r--r--meson.build67
1 files changed, 64 insertions, 3 deletions
diff --git a/meson.build b/meson.build
index d808c41c20..4805ac4949 100644
--- a/meson.build
+++ b/meson.build
@@ -259,6 +259,7 @@ substs.set('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-l
cc = meson.get_compiler('c')
pkgconfig = import('pkgconfig')
check_compilation_sh = find_program('tools/meson-check-compilation.sh')
+meson_build_sh = find_program('tools/meson-build.sh')
if get_option('tests') != 'false'
cxx = find_program('c++', required : false)
@@ -385,6 +386,20 @@ foreach arg : ['-Wl,-z,relro',
endif
endforeach
+# Check if various sanitizers are supported
+sanitizers = []
+foreach arg : ['address']
+
+ have = run_command(check_compilation_sh,
+ cc.cmd_array(), '-x', 'c',
+ '-fsanitize=@0@'.format(arg),
+ '-include', link_test_c).returncode() == 0
+ message('@0@ sanitizer supported: @1@'.format(arg, have ? 'yes' : 'no'))
+ if have
+ sanitizers += arg
+ endif
+endforeach
+
if get_option('buildtype') != 'debug'
foreach arg : ['-ffunction-sections',
'-fdata-sections']
@@ -517,6 +532,7 @@ awk = find_program('awk')
m4 = find_program('m4')
stat = find_program('stat')
git = find_program('git', required : false)
+env = find_program('env')
meson_make_symlink = meson.source_root() + '/tools/meson-make-symlink.sh'
mkdir_p = 'mkdir -p $DESTDIR/@0@'
@@ -1202,10 +1218,11 @@ endforeach
want_tests = get_option('tests')
install_tests = get_option('install-tests')
+slow_tests = get_option('slow-tests')
tests = []
fuzzers = []
-conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', get_option('slow-tests'))
+conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', slow_tests)
#####################################################################
@@ -2573,6 +2590,50 @@ endforeach
############################################################
+prev = ''
+foreach p : fuzz_regression_tests
+ a = p.split('/')[-3]
+ b = p.split('/')[-2]
+ c = p.split('/')[-1]
+
+ if a == 'address'
+ build = sanitize_address
+ else
+ error('unknown sanitizer @0@'.format(a))
+ endif
+
+ name = '@1@:@0@'.format(a, b)
+
+ if name != prev
+ if want_tests == 'false'
+ message('Not compiling @0@ because tests is set to false'.format(name))
+ elif not sanitizers.contains(a)
+ message('Not compiling @0@ because @1@ sanitizer is not available'.format(name, a))
+ elif slow_tests
+ exe = custom_target(
+ name,
+ output : name,
+ depends : build,
+ command : [env, 'ln', '-fs',
+ join_paths(build.full_path(), b),
+ '@OUTPUT@'],
+ build_by_default : true)
+ else
+ message('Not compiling @0@ because slow-tests is set to false'.format(name))
+ endif
+ endif
+ prev = name
+
+ if want_tests != 'false' and slow_tests
+ test(c, env, args : [exe.full_path(),
+ join_paths(meson.source_root(),
+ 'test/fuzz-regressions',
+ p)])
+ endif
+endforeach
+
+############################################################
+
if git.found()
all_files = run_command(
git,
@@ -2584,11 +2645,11 @@ if git.found()
custom_target(
'tags',
output : 'tags',
- command : ['env', 'etags', '-o', '@0@/TAGS'.format(meson.current_source_dir())] + all_files)
+ command : [env, 'etags', '-o', '@0@/TAGS'.format(meson.current_source_dir())] + all_files)
custom_target(
'ctags',
output : 'ctags',
- command : ['env', 'ctags', '-o', '@0@/tags'.format(meson.current_source_dir())] + all_files)
+ command : [env, 'ctags', '-o', '@0@/tags'.format(meson.current_source_dir())] + all_files)
endif
if git.found()