# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
#
# SPDX-License-Identifier: MPL-2.0
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0.  If a copy of the MPL was not distributed with this
# file, you can obtain one at https://mozilla.org/MPL/2.0/.
#
# See the COPYRIGHT file distributed with this work for additional
# information regarding copyright ownership.

# Features
option(
    'doc',
    type: 'feature',
    value: 'auto',
    description: 'Enable sphinx-based documentation generation',
)

option(
    'cap',
    type: 'feature',
    value: 'auto',
    description: 'Enable libcap-based capability support',
)

option(
    'dnstap',
    type: 'feature',
    value: 'auto',
    description: 'Enable dnstap packet logging, requires fstrm and protobuf-c',
)

option(
    'doh',
    type: 'feature',
    value: 'auto',
    description: 'Enable DNS over HTTPS, requires libnghttp2',
)

option(
    'fips',
    type: 'feature',
    value: 'disabled',
    description: 'Enable FIPS mode toggle',
)

option(
    'geoip',
    type: 'feature',
    value: 'auto',
    description: 'Enable GeoIP support, requires libmaxminddb',
)

option(
    'gssapi',
    type: 'feature',
    value: 'auto',
    description: 'Enable GSSAPI support, requires krb5 and gssapi',
)

option(
    'idn',
    type: 'feature',
    value: 'auto',
    description: 'Enable IDN support, requires libidn2',
)

option(
    'line',
    type: 'feature',
    value: 'auto',
    description: 'Enable line editing in nsupdate and nslookup, requires libedit',
)

option(
    'lmdb',
    type: 'feature',
    value: 'auto',
    description: 'LMDB database to store configuration for "addzone" zones',
)

option(
    'stats-json',
    type: 'feature',
    value: 'auto',
    description: 'Enable JSON statistics, requires json-c',
)

option(
    'stats-xml',
    type: 'feature',
    value: 'auto',
    description: 'Enable XML statistics, requires libxml2',
)

option(
    'zlib',
    type: 'feature',
    value: 'auto',
    description: 'Enable HTTP zlib compression, requires zlib',
)

# Internals
option(
    'cachedb',
    type: 'combo',
    choices: ['qpcache'],
    description: 'Default cache database type',
)

option(
    'zonedb',
    type: 'combo',
    choices: ['qpzone'],
    description: 'Default zone database type',
)

option(
    'locktype',
    type: 'combo',
    choices: ['adaptive', 'system'],
    description: 'Mutex lock type',
)

option(
    'jemalloc',
    type: 'feature',
    value: 'auto',
    description: 'Use jemalloc for allocation',
)

option(
    'rcu-flavor',
    type: 'combo',
    choices: ['membarrier', 'bp', 'mb', 'qsbr'],
    description: 'Userspace RCU Flavor (non-membarrier RCU is only allowed in development builds)',
)

option(
    'tracing',
    type: 'feature',
    value: 'auto',
    description: 'Enable User Statically Defined Tracing support, requires dtrace or systemtap',
)

# Behavior
option(
    'auto-validation',
    type: 'feature',
    value: 'enabled',
    description: 'Turn on DNSSEC validation by default, using the IANA root key',
)

# Development
option(
    'developer',
    type: 'feature',
    value: 'disabled',
    description: 'Enable development mode',
)

option(
    'cmocka',
    type: 'feature',
    value: 'auto',
    description: 'Enable cmocka based tests',
)

option(
    'fuzzing',
    type: 'feature',
    value: 'auto',
    description: 'Build fuzzing binaries',
)

option(
    'fuzzing-backend',
    type: 'combo',
    choices: ['none', 'afl', 'libfuzzer', 'oss-fuzz'],
    value: 'none',
    description: 'Fuzzing backend (backend none with -Dfuzzing=enabled only compiles the binary)',
)

option(
    'trace-logging',
    type: 'array',
    value: [],
    choices: ['query', 'single'],
    description: 'Enable very verbose (single-)query trace logging',
)

option(
    'leak-detection',
    type: 'feature',
    value: 'disabled',
    description: 'enable the memory leak detection in external libraries (libxml2, libuv, OpenSSL)',
)

option(
    'named-lto',
    type: 'combo',
    choices: ['off', 'thin', 'full'],
    value: 'thin',
    description: 'Enable Link Time Optimization for named.',
)
