#Only edit file in g3

project(
  'gPowerD',
  ['c', 'cpp'],
  version: '0.1',
  meson_version: '>=1.1.1',
  default_options: [
    'cpp_std=c++23',
    'c_std=c18',
  ],
)
conf_data = configuration_data()
conf_data.set('LOAS3_AUTH_FLAG', 0)
loas_deps = []
if get_option('loas3-validation').enabled()
  loas_deps += dependency('authentication_policy_validation')
  conf_data.set('LOAS3_AUTH_FLAG', 1)
endif

conf_data.set('version', '1.1.1')
configure_file(input : 'gpowerd_build_config.h.in',
               output : 'gpowerd_build_config.h',
               configuration : conf_data)

safepower_include = include_directories('.')
subdir('proto')
cppc = meson.get_compiler('cpp')
safepower_deps = [
    gpowerd_proto,
    dependency('absl_base'),
    dependency('absl_statusor'),
    dependency('absl_flat_hash_set'),
]

boost = dependency('boost', modules: ['url'], version : '>=1.82.0', required : false, include_type: 'system')
safepower_deps += [boost]

daemon_context_lib = static_library(
  'daemon_context',
  'daemon_context.cc',
  include_directories: safepower_include,
  implicit_include_directories: false,
  dependencies: [
    safepower_deps,
  ],
  cpp_args: ['-fno-exceptions'],
)

daemon_context = declare_dependency(
  dependencies: safepower_deps,
  include_directories: safepower_include,
  link_with: [daemon_context_lib],
)

parse_text_proto_lib = static_library(
  'parse_text_proto',
  'parse_text_proto.cc',
  include_directories: safepower_include,
  implicit_include_directories: false,
  dependencies: [
    safepower_deps,
  ],
  cpp_args: ['-fno-exceptions'],
)

parse_text_proto = declare_dependency(
  dependencies: safepower_deps,
  include_directories: safepower_include,
  link_with: [parse_text_proto_lib],
)

subdir('bmc')

libsafepower = static_library(
  'safepower_agent',
  'safepower_agent.cc',
  include_directories: safepower_include,
  implicit_include_directories: false,
  dependencies: [safepower_deps],
  cpp_args: ['-fno-exceptions'],
)

safepower = declare_dependency(
  dependencies: safepower_deps,
  include_directories: safepower_include,
  link_with: [libsafepower],
)

libconvert_proto = static_library(
  'convert_proto',
  'convert_proto.cc',
  include_directories: safepower_include,
  implicit_include_directories: false,
  dependencies: [safepower_deps],
)
convert_proto = declare_dependency(
  dependencies: safepower_deps,
  include_directories: safepower_include,
  link_with: [libconvert_proto],
)

libaction_context = static_library(
  'action_context',
  'action_context.cc',
  include_directories: safepower_include,
  implicit_include_directories: false,
  dependencies: [safepower_deps, convert_proto],
)
action_context = declare_dependency(
  dependencies: safepower_deps,
  include_directories: safepower_include,
  link_with: [libaction_context],
)

libstate_merge = static_library(
  'state_merge',
  'state_merge.cc',
  include_directories: safepower_include,
  implicit_include_directories: false,
  dependencies: [safepower_deps],
)
state_merge = declare_dependency(
  dependencies: safepower_deps,
  include_directories: safepower_include,
  link_with: [libstate_merge],
)

libcondition = static_library(
  'condition',
  'condition.cc',
  include_directories: safepower_include,
  implicit_include_directories: false,
  dependencies: [safepower_deps],
)
condition = declare_dependency(
  dependencies: safepower_deps,
  include_directories: safepower_include,
  link_with: [libcondition],
)

grpcpp_auth = dependency('libgrpc++_authorization_provider', required: false)
if not grpcpp_auth.found()
  grpcpp_auth = cppc.find_library('libgrpc++_authorization_provider', dirs: '/usr/local/lib')
endif

gpowerd_deps = [
  loas_deps,
  parse_text_proto,
  safepower,
  safepower_deps,
  scheduler,
  proto_reader,
  gmi_reader,
  auth_bmc,
  grpcpp_auth,
  action_context,
  persistent_storage,
  daemon_context,
  daemon_context_bmc,
  state_merge,
  http_connection_bmc,
  redfish_bmc,
  convert_proto,
  condition,
  state_monitor_bmc,
  dependency('openssl'),
  register_actions_bmc,
  bmc_deps,
 ]

executable(
  'gpowerd',
  'bmc/gpowerd.cc',
  implicit_include_directories: false,
  dependencies: gpowerd_deps,
  include_directories: safepower_include,
  install:true)

build_tests = get_option('tests')
gtest = dependency('gtest', main: true, disabler: true, required: build_tests)
gmock = dependency('gmock', disabler: true, required: build_tests)

tests = [
  'bmc/scheduler_bmc_test',
  'bmc/proto_reader_test',
  'bmc/gmi_reader_test',
  'bmc/persistent_storage_bmc_test',
  'bmc/daemon_context_bmc_test',
  'bmc/http_connection_test',
  'bmc/register_actions_bmc_test',
]


foreach t : tests
  test(t, executable(t.underscorify(), t + '.cc',
                     implicit_include_directories: false,
                     dependencies: [
                       gtest,
                       gmock,
                       safepower,
                       scheduler,
                       proto_reader,
                       gmi_reader,
                       persistent_storage,
                       gpowerd_proto,
                       daemon_context,
                       daemon_context_bmc,
                       http_connection_bmc,
                       redfish_bmc,
                       dependency('openssl'),
                       boost,
                       state_monitor_bmc,
                       state_merge,
                       register_actions_bmc,
                       action_context,
                       condition,
                     ],
                     cpp_args: ['-fexceptions'],  # Enable exceptions
                     include_directories: [safepower_include, 'bmc/.']))
endforeach
