/** @file

  Some small general interest definitions. The general standard is to
  prefix these defines with TS_.

  @section license License

  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
 */

#pragma once

// Note: All "defines" should be prefixed with TS_ when appropriate, please
// don't use ATS_ any more.

// Note 2: If you make changes here, please update the traffic_layout.cc file as well.

/* GENERATED FILE WARNING!  DO NOT EDIT ink_config.h
 *
 * You must modify ink_config.h.in instead.
 *
 */

/* Include automake generated defines
 */
#include "ink_autoconf.h"

// Helper macro to convert integer defines into string literals
#define _TS_STR(x) #x
#define TS_STR(x) _TS_STR(x)

/* clang-format off */
#define BUILD_MACHINE "@build_machine@"
#define BUILD_PERSON "@build_person@"
#define BUILD_GROUP "@build_group@"
#define BUILD_NUMBER "@build_number@"

/* Libraries */
#define TS_HAS_JEMALLOC @jemalloch@
#define TS_HAS_TCMALLOC @has_tcmalloc@

/* Features */
#define TS_HAS_IN6_IS_ADDR_UNSPECIFIED @has_in6_is_addr_unspecified@
#define TS_HAS_BACKTRACE @has_backtrace@
#define TS_HAS_PROFILER @has_profiler@
#define TS_USE_FAST_SDK @use_fast_sdk@
#define TS_ENABLE_FIPS @enable_fips@
#define TS_USE_DIAGS @use_diags@
#define TS_USE_EPOLL @use_epoll@
#define TS_USE_KQUEUE @use_kqueue@
#define TS_USE_PORT @use_port@
#define TS_USE_POSIX_CAP @use_posix_cap@
#define TS_USE_TPROXY @use_tproxy@
#define TS_HAS_SO_MARK @has_so_mark@
#define TS_HAS_IP_TOS @has_ip_tos@
#define TS_USE_HWLOC @use_hwloc@
#define TS_USE_TLS_ASYNC @use_tls_async@
#define TS_USE_HELLO_CB @use_hello_cb@
#define TS_USE_SET_RBIO @use_set_rbio@
#define TS_USE_GET_DH_2048_256 @use_dh_get_2048_256@
#define TS_USE_TLS13 @use_tls13@
#define TS_USE_QUIC @use_quic@
#define TS_USE_TLS_SET_CIPHERSUITES @use_tls_set_ciphersuites@
#define TS_USE_LINUX_NATIVE_AIO @use_linux_native_aio@
#define TS_USE_REMOTE_UNWINDING @use_remote_unwinding@
#define TS_USE_TLS_OCSP @use_tls_ocsp@
#define TS_HAS_TLS_EARLY_DATA @has_tls_early_data@

#define TS_HAS_SO_PEERCRED @has_so_peercred@

/* OS API definitions */
#define TS_IP_TRANSPARENT @ip_transparent@
#define TS_HAS_128BIT_CAS @has_128bit_cas@

/* API */
#define TS_HAS_TESTS @has_tests@
#define TS_HAS_WCCP @has_wccp@

#define TS_MAX_THREADS_IN_EACH_THREAD_TYPE @max_threads_per_type@
#define TS_MAX_NUMBER_EVENT_THREADS @max_event_threads@

#define TS_MAX_HOST_NAME_LEN @max_host_name_len@

/* Defaults for user / group */
#define TS_PKGSYSUSER "@pkgsysuser@"
#define TS_PKGSYSGROUP "@pkgsysgroup@"

/* Various "build" defines */
#define TS_BUILD_PREFIX "@prefix@"
#define TS_BUILD_EXEC_PREFIX "@rel_exec_prefix@"
#define TS_BUILD_BINDIR "@rel_bindir@"
#define TS_BUILD_SBINDIR "@rel_sbindir@"
#define TS_BUILD_SYSCONFDIR "@rel_sysconfdir@"
#define TS_BUILD_DATADIR "@rel_datadir@"
#define TS_BUILD_INCLUDEDIR "@rel_includedir@"
#define TS_BUILD_LIBDIR "@rel_libdir@"
#define TS_BUILD_LIBEXECDIR "@rel_libexecdir@"
#define TS_BUILD_LOCALSTATEDIR "@rel_localstatedir@"
#define TS_BUILD_RUNTIMEDIR "@rel_runtimedir@"
#define TS_BUILD_LOGDIR "@rel_logdir@"
#define TS_BUILD_MANDIR "@rel_mandir@"
#define TS_BUILD_CACHEDIR "@rel_cachedir@"
#define TS_BUILD_INFODIR "@rel_infodir@"

#define TS_ABS_TOP_SRCDIR "@abs_top_srcdir@"

#define TS_BUILD_CANONICAL_HOST "@host@"

#define TS_BUILD_DEFAULT_LOOPBACK_IFACE "@default_loopback_iface@"

static const int DEFAULT_STACKSIZE = @default_stack_size@;
/* clang-format on */
