/* 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 http://mozilla.org/MPL/2.0/. */

#ifndef UA_CONFIG_H_
#define UA_CONFIG_H_

/**
 * open62541 Version
 * ----------------- */
#define UA_OPEN62541_VER_MAJOR ${OPEN62541_VER_MAJOR}
#define UA_OPEN62541_VER_MINOR ${OPEN62541_VER_MINOR}
#define UA_OPEN62541_VER_PATCH ${OPEN62541_VER_PATCH}
#define UA_OPEN62541_VER_LABEL "${OPEN62541_VER_LABEL}" /* Release candidate label, etc. */
#define UA_OPEN62541_VER_COMMIT "${OPEN62541_VER_COMMIT}"

/**
 * Feature Options
 * ---------------
 * Changing the feature options has no effect on a pre-compiled library. */

#define UA_LOGLEVEL ${UA_LOGLEVEL}
#ifndef UA_ENABLE_AMALGAMATION
#cmakedefine UA_ENABLE_AMALGAMATION
#endif
#cmakedefine UA_ENABLE_METHODCALLS
#cmakedefine UA_ENABLE_NODEMANAGEMENT
#cmakedefine UA_ENABLE_SUBSCRIPTIONS
#cmakedefine UA_ENABLE_PUBSUB
#cmakedefine UA_ENABLE_PUBSUB_ETH_UADP
#cmakedefine UA_ENABLE_PUBSUB_DELTAFRAMES
#cmakedefine UA_ENABLE_PUBSUB_INFORMATIONMODEL
#cmakedefine UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
#cmakedefine UA_ENABLE_DA
#cmakedefine UA_ENABLE_ENCRYPTION
#cmakedefine UA_ENABLE_HISTORIZING
#cmakedefine UA_ENABLE_EXPERIMENTAL_HISTORIZING
#cmakedefine UA_ENABLE_SUBSCRIPTIONS_EVENTS
#cmakedefine UA_ENABLE_JSON_ENCODING

/* Multithreading */
#cmakedefine UA_ENABLE_MULTITHREADING
#cmakedefine UA_ENABLE_IMMUTABLE_NODES
#if defined(UA_ENABLE_MULTITHREADING) && !defined(UA_ENABLE_IMMUTABLE_NODES)
#error "The multithreading feature requires nodes to be immutable"
#endif

/* Advanced Options */
#cmakedefine UA_ENABLE_CUSTOM_NODESTORE
#cmakedefine UA_ENABLE_STATUSCODE_DESCRIPTIONS
#cmakedefine UA_ENABLE_TYPENAMES
#cmakedefine UA_ENABLE_NODESET_COMPILER_DESCRIPTIONS
#cmakedefine UA_ENABLE_DETERMINISTIC_RNG
#cmakedefine UA_ENABLE_DISCOVERY
#cmakedefine UA_ENABLE_DISCOVERY_MULTICAST
#cmakedefine UA_ENABLE_QUERY
#cmakedefine UA_ENABLE_MALLOC_SINGLETON
#cmakedefine UA_ENABLE_DISCOVERY_SEMAPHORE
#cmakedefine UA_ENABLE_UNIT_TEST_FAILURE_HOOKS
#cmakedefine UA_ENABLE_VALGRIND_INTERACTIVE
#define UA_VALGRIND_INTERACTIVE_INTERVAL ${UA_VALGRIND_INTERACTIVE_INTERVAL}
#cmakedefine UA_GENERATED_NAMESPACE_ZERO
#cmakedefine UA_ENABLE_PUBSUB_CUSTOM_PUBLISH_HANDLING

#cmakedefine UA_PACK_DEBIAN

/* Options for Debugging */
#cmakedefine UA_DEBUG
#cmakedefine UA_DEBUG_DUMP_PKGS

/**
 * Function Export
 * ---------------
 * On Win32: Define ``UA_DYNAMIC_LINKING`` and ``UA_DYNAMIC_LINKING_EXPORT`` in
 * order to export symbols for a DLL. Define ``UA_DYNAMIC_LINKING`` only to
 * import symbols from a DLL.*/
#cmakedefine UA_DYNAMIC_LINKING

/* Shortcuts for extern "C" declarations */
#if !defined(_UA_BEGIN_DECLS)
# ifdef __cplusplus
#  define _UA_BEGIN_DECLS extern "C" {
# else
#  define _UA_BEGIN_DECLS
# endif
#endif
#if !defined(_UA_END_DECLS)
# ifdef __cplusplus
#  define _UA_END_DECLS }
# else
#  define _UA_END_DECLS
# endif
#endif

/* Select default architecture if non is selected through CMake or compiler define */
#if ${UA_ARCHITECTURES_NODEF}
# ifdef _WIN32
#  define UA_ARCHITECTURE_WIN32
# else
#  define UA_ARCHITECTURE_POSIX
# endif
#endif

#include "${UA_ARCHITECTURE}/ua_architecture.h"

#endif /* UA_CONFIG_H_ */
