project(
    'phosphor-snmp', 'cpp',
    version : '1.0.0',
    meson_version: '>=1.1.1',
    default_options: [
        'warning_level=3',
        'werror=true',
        'cpp_std=c++23',
        'buildtype=debugoptimized',
    ]
)

conf_data = configuration_data()
conf_data.set_quoted('BUSNAME_NETWORK_SNMP', 'xyz.openbmc_project.Network.SNMP')
conf_data.set_quoted('OBJ_NETWORK_SNMP', '/xyz/openbmc_project/network/snmp/manager')
conf_data.set_quoted('SNMP_CONF_PERSIST_PATH', '/var/lib/phosphor-snmp/managers/')
conf_data.set('CLASS_VERSION', 1)

sdbusplus_dep = dependency('sdbusplus')
phosphor_dbus_interfaces_dep = dependency('phosphor-dbus-interfaces')
phosphor_logging_dep = dependency('phosphor-logging')
libsystemd_dep = dependency('libsystemd')
netsnmp_dep = dependency('netsnmp')
libcrypto_dep = dependency('libcrypto')

cpp = meson.get_compiler('cpp')

# Get Cereal dependency.
cereal_dep = dependency('cereal', required: false)
has_cereal = cpp.has_header_symbol(
    'cereal/cereal.hpp',
    'cereal::specialize',
    dependencies: cereal_dep,
    required: false)
if not has_cereal
    cereal_opts = import('cmake').subproject_options()
    cereal_opts.add_cmake_defines({'BUILD_TESTS': 'OFF', 'SKIP_PERFORMANCE_COMPARISON': 'ON'})
    cereal_proj = import('cmake').subproject(
        'cereal',
        options: cereal_opts,
        required: false)
    assert(cereal_proj.found(), 'cereal is required')
    cereal_dep = cereal_proj.dependency('cereal')
endif

snmp_headers = include_directories('.')

deps = [
    libsystemd_dep,
    phosphor_dbus_interfaces_dep,
    phosphor_logging_dep,
    sdbusplus_dep,
    cereal_dep,
]

sources = [
    'snmp_main.cpp',
    'snmp_conf_manager.cpp',
    'snmp_client.cpp',
    'snmp_util.cpp',
    'snmp_serialize.cpp',
]

configure_file(output: 'config.h',
    configuration: conf_data
)

executable(
    'phosphor-network-snmpconf',
    sources,
    implicit_include_directories: true,
    dependencies: deps,
    install: true,
    install_dir: get_option('bindir')
)

libsnmp_deps = [
    sdbusplus_dep,
    phosphor_logging_dep,
    phosphor_dbus_interfaces_dep,
    netsnmp_dep,
    libcrypto_dep,
]

libsnmp_sources = files(
    'snmp_notification.cpp',
    'snmp_util.cpp',
)

libsnmp_lib = library(
    'snmp',
    libsnmp_sources,
    include_directories: snmp_headers,
    implicit_include_directories: false,
    dependencies: libsnmp_deps,
    version: meson.project_version(),
    install: true,
)

phosphor_snmp_dep = declare_dependency(
    include_directories: snmp_headers,
    link_with: libsnmp_lib,
)

import('pkgconfig').generate(
    libsnmp_lib,
    name: meson.project_name(),
    version: meson.project_version(),
    libraries: sdbusplus_dep,
    description: 'Phosphor snmp utilities',
)

install_headers(
    'snmp.hpp',
    'snmp_notification.hpp',
    subdir: '.',
)

build_tests = get_option('tests')
if not build_tests.disabled()
  subdir('test')
endif
