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

cpp = meson.get_compiler('cpp')

sdbusplus_dep = dependency('sdbusplus')
sdeventplus_dep = dependency('sdeventplus')
phosphor_dbus_interfaces_dep = dependency('phosphor-dbus-interfaces')
phosphor_logging_dep = dependency('phosphor-logging')

cli11_dep = dependency('cli11', required: false)
has_cli11 = meson.get_compiler('cpp').has_header_symbol(
  'CLI/CLI.hpp',
  'CLI::App',
  dependencies: cli11_dep,
  required: false)
if not has_cli11
  cli11_proj = subproject('cli11', required: false)
  assert(cli11_proj.found(), 'CLI11 is required')
  cli11_dep = cli11_proj.get_variable('CLI11_dep')
endif

systemd_dep = dependency('systemd')
openssl_dep = dependency('openssl')

config_data = configuration_data()
config_data.set(
    'authority_limit',
     get_option('authority-limit')
)
config_data.set(
    'authorities_list_name',
     get_option('authorities-list-name')
)

if not get_option('allow-expired').disabled()
  config_data.set('allow_expired', 'true')
else
  config_data.set('allow_expired', 'false')
endif

configure_file(
    input: 'config.h.in',
    output: 'config.h',
    configuration: config_data
)

phosphor_certificate_deps = [
    openssl_dep,
    phosphor_dbus_interfaces_dep,
    phosphor_logging_dep,
    sdbusplus_dep,
    sdeventplus_dep,
    cli11_dep,
]

cert_manager_lib = static_library(
    'phosphor-certificate-manager',
    [
        'argument.cpp',
        'certificate.cpp',
        'certs_manager.cpp',
        'csr.cpp',
        'watch.cpp',
        'x509_utils.cpp',
    ],
    dependencies: phosphor_certificate_deps,
)

cert_manager_dep = declare_dependency(
    link_with: cert_manager_lib,
    dependencies: phosphor_certificate_deps
)

executable(
    'phosphor-certificate-manager',
    'mainapp.cpp',
    dependencies: cert_manager_dep,
    install: true,
)

if not get_option('ca-cert-extension').disabled()
  subdir('bmc-vmi-ca')
endif

subdir('dist')

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

