// See the file "COPYING" in the main distribution directory for copyright.
// NOLINTBEGIN(modernize-macro-to-enum)
// NOLINTBEGIN(cppcoreguidelines-macro-usage)

#pragma once

/* Old libpcap versions (< 0.6.1) need defining pcap_freecode and
   pcap_compile_nopcap */
#cmakedefine DONT_HAVE_LIBPCAP_PCAP_FREECODE

#cmakedefine DONT_HAVE_LIBPCAP_DLT_LINUX_SLL2

/* should explicitly declare socket() and friends */
#cmakedefine DO_SOCK_DECL

/* Define if you have the <getopt.h> header file. */
#cmakedefine HAVE_GETOPT_H

/* Define if you have the `getopt_long' function. */
#cmakedefine HAVE_GETOPT_LONG

/* We are on a Linux system */
#cmakedefine HAVE_LINUX

/* We are on a Mac OS X (Darwin) system */
#cmakedefine HAVE_DARWIN

/* Define if you have the `mallinfo' function. */
#cmakedefine HAVE_MALLINFO

/* Define if you have the `mallinfo2' function. */
#cmakedefine HAVE_MALLINFO2

/* Define if you have the <memory.h> header file. */
#cmakedefine HAVE_MEMORY_H

/* Define if you have the <netinet/ether.h> header file */
#cmakedefine HAVE_NETINET_ETHER_H

/* Define if you have the <netinet/if_ether.h> header file. */
#cmakedefine HAVE_NETINET_IF_ETHER_H

/* Define if you have the <netinet/ip6.h> header file. */
#cmakedefine HAVE_NETINET_IP6_H

/* Define if you have the <net/ethernet.h> header file. */
#cmakedefine HAVE_NET_ETHERNET_H

/* Define if you have the <net/ethertypes.h> header file. */
#cmakedefine HAVE_NET_ETHERTYPES_H

/* have os-proto.h */
#cmakedefine HAVE_OS_PROTO_H

/* Define if you have the <pcap-int.h> header file. */
#cmakedefine HAVE_PCAP_INT_H

/* Define if libpcap supports pcap_dump_open_append(). */
#cmakedefine HAVE_PCAP_DUMP_OPEN_APPEND

/* Define if the pcap library is winpcap or npcap */
#cmakedefine HAVE_WPCAP

/* line editing & history powers */
#cmakedefine HAVE_READLINE

/* Define if you have the `sigaction' function. */
#cmakedefine HAVE_SIGACTION

/* Define if you have the `sigset' function. */
#cmakedefine HAVE_SIGSET

/* Define if you have the `strcasestr' function. */
#cmakedefine HAVE_STRCASESTR

/* Define if you have the `strerror' function. */
#cmakedefine HAVE_STRERROR

/* Define if you have the `strsep' function. */
#cmakedefine HAVE_STRSEP

/* Define if you have the <sys/ethernet.h> header file. */
#cmakedefine HAVE_SYS_ETHERNET_H

/* Compatibility for Darwin */
#cmakedefine NEED_NAMESER_COMPAT_H

/* openssl/kdf.h for TLS PRF (key derivation) */
#cmakedefine OPENSSL_HAVE_KDF_H

/* d2i_x509 uses const char** */
#cmakedefine OPENSSL_D2I_X509_USES_CONST_CHAR

/* Define as the return type of signal handlers (`int' or `void'). */
#define RETSIGTYPE @RETSIGTYPE@

/* signal function return value */
#define RETSIGVAL @RETSIGVAL@

/* have sin_len field in sockaddr_in */
#cmakedefine SIN_LEN

/* The size of `long int', as computed by sizeof. */
#define SIZEOF_LONG_INT @SIZEOF_LONG_INT@

/* The size of `long long', as computed by sizeof. */
#define SIZEOF_LONG_LONG @SIZEOF_LONG_LONG@

/* The size of `void *', as computed by sizeof. */
#define SIZEOF_VOID_P @SIZEOF_VOID_P@

/* should we declare syslog() and openlog() */
#cmakedefine SYSLOG_INT

/* should we use stub syslog() and openlog() */
#cmakedefine USE_STUB_SYSLOG

/* Define if you have <sys/time.h> */
#cmakedefine HAVE_SYS_TIME_H

/* Define if you can safely include both <sys/time.h> and <time.h>. */
#cmakedefine TIME_WITH_SYS_TIME

/* GeoIP geographic lookup functionality */
#cmakedefine USE_GEOIP

/* Define if KRB5 is available */
#cmakedefine USE_KRB5

/* Use Google's perftools */
#cmakedefine USE_PERFTOOLS_DEBUG

/* Use libCurl. */
#cmakedefine USE_CURL

/* Use the DataSeries writer. */
#cmakedefine USE_DATASERIES

/* Use the ElasticSearch writer. */
#cmakedefine USE_ELASTICSEARCH

/* Use the sqlite reader/writer. */
#cmakedefine USE_SQLITE

/* whether words are stored with the most significant byte first */
#cmakedefine WORDS_BIGENDIAN

/* whether htonll/ntohll is defined in <arpa/inet.h> */
#cmakedefine HAVE_BYTEORDER_64

/* whether to preallocate the array of PortVal objects in ValManager. Doing
   so is typically a performance increase, at the cost of a small amount of
   memory. */
#cmakedefine PREALLOCATE_PORT_ARRAY

/* ultrix can't hack const */
#cmakedefine NEED_ULTRIX_CONST_HACK
#ifdef NEED_ULTRIX_CONST_HACK
#define const
#endif

/* Define int32_t */
#cmakedefine int32_t @int32_t@

/* use sigset() instead of signal() */
#ifdef HAVE_SIGSET
#define signal sigset
#endif

/* define to int if socklen_t not available */
#cmakedefine socklen_t @socklen_t@

/* Define u_int16_t */
#cmakedefine u_int16_t @u_int16_t@

/* Define u_int32_t */
#cmakedefine u_int32_t @u_int32_t@

/* Define u_int8_t */
#cmakedefine u_int8_t @u_int8_t@

/* OpenBSD's bpf.h may not declare some data link types, but they're
   used consistently for the same purpose on all platforms. */
#cmakedefine HAVE_DLT_PPP_SERIAL
#ifndef HAVE_DLT_PPP_SERIAL
#define DLT_PPP_SERIAL @DLT_PPP_SERIAL@
#endif

#cmakedefine HAVE_DLT_NFLOG
#ifndef HAVE_DLT_NFLOG
#define DLT_NFLOG @DLT_NFLOG@
#endif

#ifndef _MSC_VER
/* IPv6 Next Header values defined by RFC 3542 */
#cmakedefine HAVE_IPPROTO_HOPOPTS
#ifndef HAVE_IPPROTO_HOPOPTS
#define IPPROTO_HOPOPTS 0
#endif
#cmakedefine HAVE_IPPROTO_IPV6
#ifndef HAVE_IPPROTO_IPV6
#define IPPROTO_IPV6 41
#endif
#cmakedefine HAVE_IPPROTO_IPV4
#ifndef HAVE_IPPROTO_IPV4
#define IPPROTO_IPV4 4
#endif
#cmakedefine HAVE_IPPROTO_ROUTING
#ifndef HAVE_IPPROTO_ROUTING
#define IPPROTO_ROUTING 43
#endif
#cmakedefine HAVE_IPPROTO_FRAGMENT
#ifndef HAVE_IPPROTO_FRAGMENT
#define IPPROTO_FRAGMENT 44
#endif
#cmakedefine HAVE_IPPROTO_ESP
#ifndef HAVE_IPPROTO_ESP
#define IPPROTO_ESP 50
#endif
#cmakedefine HAVE_IPPROTO_AH
#ifndef HAVE_IPPROTO_AH
#define IPPROTO_AH 51
#endif
#cmakedefine HAVE_IPPROTO_ICMPV6
#ifndef HAVE_IPPROTO_ICMPV6
#define IPPROTO_ICMPV6 58
#endif
#cmakedefine HAVE_IPPROTO_NONE
#ifndef HAVE_IPPROTO_NONE
#define IPPROTO_NONE 59
#endif
#cmakedefine HAVE_IPPROTO_DSTOPTS
#ifndef HAVE_IPPROTO_DSTOPTS
#define IPPROTO_DSTOPTS 60
#endif
#endif
/* IPv6 options structure defined by RFC 3542 */
#cmakedefine HAVE_IP6_OPT

/* Common IPv6 extension structure */
#cmakedefine HAVE_IP6_EXT

/* Spicy analyzers built in. */
#cmakedefine01 USE_SPICY_ANALYZERS

/* Enable/disable ZAM profiling capability */
#cmakedefine ENABLE_ZAM_PROFILE

/* Enable/disable the Spicy SSL analyzer */
#cmakedefine ENABLE_SPICY_SSL

/* String with host architecture (e.g., "linux-x86_64") */
#define HOST_ARCHITECTURE "@HOST_ARCHITECTURE@"

/* String with extension of dynamic libraries (e.g., ".so") */
#define DYNAMIC_PLUGIN_SUFFIX "@CMAKE_SHARED_MODULE_SUFFIX@"

// For builtin plugins, we don't want to include zeek-version.h.
#ifndef ZEEK_CONFIG_SKIP_VERSION_H
#include "zeek/zeek-version.h"
#endif

// GCC uses __SANITIZE_ADDRESS__, Clang uses __has_feature
#if defined(__SANITIZE_ADDRESS__)
	#define ZEEK_ASAN
#endif

#if defined(__has_feature)
	#if __has_feature(address_sanitizer)
		#define ZEEK_ASAN
	#endif
#endif

#if defined(ZEEK_ASAN) && !defined(__FreeBSD__)
    #include <sanitizer/lsan_interface.h>
    #define ZEEK_LSAN_CHECK(...) __lsan_do_leak_check(__VA_ARGS__)
    #define ZEEK_LSAN_ENABLE(...) __lsan_enable(__VA_ARGS__)
    #define ZEEK_LSAN_IGNORE(...) __lsan_ignore_object(__VA_ARGS__)
    #define ZEEK_LSAN_DISABLE(...) __lsan_disable(__VA_ARGS__)
    #define ZEEK_LSAN_DISABLE_SCOPE(...) __lsan::ScopedDisabler __VA_ARGS__
#else
    #define ZEEK_LSAN_CHECK(...)
    #define ZEEK_LSAN_ENABLE(...)
    #define ZEEK_LSAN_IGNORE(...)
    #define ZEEK_LSAN_DISABLE(...)
    #define ZEEK_LSAN_DISABLE_SCOPE(...)
#endif

// This part is dependent on calling configure with '--sanitizers=thread'
// and not manually setting CFLAGS/CXXFLAGS to include --fsanitize=thread.
// This is because some of the unit tests only work when built without
// TSan, at least until SQLite opts to fix their problems with atomics.
#if defined(__SANITIZE_THREAD__)
	#cmakedefine ZEEK_TSAN
#endif

#if defined(__has_feature)
	#if __has_feature(thread_sanitizer)
		#cmakedefine ZEEK_TSAN
	#endif
#endif

#if defined(ZEEK_TSAN)
	#define ZEEK_DISABLE_TSAN __attribute__((no_sanitize("thread")))
#else
	#define ZEEK_DISABLE_TSAN
#endif

/* compiled with Spicy support */
#cmakedefine HAVE_SPICY

// NOLINTEND(cppcoreguidelines-macro-usage)
// NOLINTEND(modernize-macro-to-enum)
