coverage = get_option('b_coverage')
+clang_coverage = get_option('clang-coverage-format')
-if coverage
+if coverage or clang_coverage
add_project_arguments('-DCOVERAGE', language: ['c', 'cpp'])
if get_option('buildtype') != 'debug'
if cxx.has_argument('-U_FORTIFY_SOURCE')
add_project_arguments('-U_FORTIFY_SOURCE', language: ['c', 'cpp'])
endif
+
endif
-summary('Code Coverage', coverage, bool_yn: true, section: 'Configuration')
+if coverage
+ if get_option('clang-coverage-format')
+ error('b_coverage and clang-coverage-format cannot be enabled at the same time')
+ endif
+ summary('Code Coverage', coverage, bool_yn: true, section: 'Configuration')
+else
+ if get_option('clang-coverage-format')
+ # let's see if the clang++ specific format is supported,
+ # as it has a much lower overhead and is more accurate,
+ # see https://clang.llvm.org/docs/SourceBasedCodeCoverage.html
+ add_project_arguments('-DCLANG_COVERAGE', '-fprofile-instr-generate', '-fcoverage-mapping', language: ['c', 'cpp'])
+ add_project_link_arguments('-fprofile-instr-generate', '-fcoverage-mapping', language: ['c', 'cpp'])
+ summary('Code Coverage (clang format)', true, bool_yn: true, section: 'Configuration')
+ endif
+endif
option('systemd-service-group', type: 'string', value: 'pdns', description: 'Systemd service group (setgid and unit file; group is not created)')
option('auto-var-init', type: 'combo', value: 'disabled', choices: ['zero', 'pattern', 'disabled'], description: 'Enable initialization of automatic variables')
option('malloc-trace', type: 'boolean', value: false, description: 'Enable malloc-trace')
+option('clang-coverage-format', type: 'boolean', value: false, description: 'Whether to generate coverage data in clang format')
option('fuzzer_ldflags', type: 'string', value: '', description: 'Linker flags used for the fuzzing targets (a path to the libFuzzer static library, for example)')
option('yaml', type: 'feature', value: 'disabled', description: 'Enable YAML configuration')
option('man-pages', type: 'boolean', value: true, description: 'Generate man pages')
+option('clang-coverage-format', type: 'boolean', value: false, description: 'Whether to generate coverage data in clang format')
option('libcurl', type: 'feature', value: 'auto', description: 'Enable Curl support')
option('nod', type: 'feature', value: 'enabled', description: 'Enable Newly Observed Domains')
option('libcap', type: 'feature', value: 'auto', description: 'Enable libcap for capabilities handling')
+option('clang-coverage-format', type: 'boolean', value: false, description: 'Whether to generate coverage data in clang format')
def get_coverage(meson=False):
if meson:
- return '-D b_coverage=true' if is_coverage_enabled() else ''
+ return '-Dclang-coverage-format=true' if is_coverage_enabled() else ''
return '--enable-coverage=clang' if is_coverage_enabled() else ''
@task