# 包含子目录的 meson.build 文件
subdir('dict')
subdir('fmt')
subdir('log')
subdir('memory')
subdir('reflect')
subdir('runtime')
subdir('string')
subdir('variant')
subdir('db')
subdir('io')
subdir('futures')
subdir('module')

base_src_files = [
  # 根目录源文件
  'common.cpp',
  'exception.cpp',
  'json.cpp',
  'time.cpp',
  'singleton.cpp',
  'error.cpp',
  'error_engine.cpp',
  'result.cpp',
  'array.cpp',
  'filesystem.cpp',

  dict_src_files,
  fmt_src_files,
  log_src_files,
  memory_src_files,
  reflect_src_files,
  runtime_src_files,
  string_src_files,
  variant_src_files,
  db_src_files,
  io_src_files,
  futures_src_files,
  module_src_files,
]

dep_arr = [boost_dep]
mcbasedeps = []

enable_conan_compile = get_option('enable_conan_compile')
add_project_arguments(
  '-DENABLE_CONAN_COMPILE=' + enable_conan_compile.to_int().to_string(),
  language: 'cpp',
)
if enable_conan_compile
  message('使用conan构建')
  libsomp_dep = dependency('libsomp', method: 'pkg-config', required: true)
  liblogger_dep = dependency('liblogger', method: 'pkg-config', required: true)
  dep_arr += [libsomp_dep, liblogger_dep]
endif

if meson_build
  install_dir = meson.project_build_root() / 'usr/lib64'
  run_command('mkdir', '-p', install_dir, check: false)
else
  install_dir = 'usr/lib64'
endif

# 创建基础库(WASM 构建时跳过,因为会创建单独的 mcbase_wasm)
if not is_wasm_build
  mcbase_lib = library(
    'mcbase',
    base_src_files,
    include_directories: [incdir, srcdir],
    dependencies: dep_arr,
    install: true,
    install_dir: install_dir,
    build_by_default: true,
  )
  mcbase_dep = declare_dependency(
    include_directories: incdir,
    link_with: mcbase_lib,
    dependencies: dep_arr,
  )
  mcbasedeps += [mcbase_dep]
endif

# ====================
# WASM 构建支持
# ====================
if is_wasm_build
  # WASM 基础源文件列表(排除不兼容的文件)
  wasm_base_src_files = [
    # 根目录源文件
    'common.cpp',
    'exception.cpp',
    'json.cpp',
    'time.cpp',
    'singleton.cpp',
    'error.cpp',
    'error_engine.cpp',
    'result.cpp',
    'array.cpp',

    # 包含兼容的子模块
    dict_src_files,
    fmt_src_files,
    memory_src_files,
    reflect_src_files,
    runtime_src_files,
    string_src_files,
    variant_src_files,
    db_src_files,
    io_src_files,
    futures_src_files,
  ]

  # WASM 日志源文件(排除 file_appender 和 socket appenders)
  wasm_log_src_files = []
  foreach f : log_src_files
    if not f.contains('file_appender') and not f.contains('socket_appender') and not f.contains('socket_client')
      wasm_log_src_files += f
    endif
  endforeach
  wasm_base_src_files += wasm_log_src_files

  # WASM 构建时修改依赖数组(排除 dbus 和 glib)
  wasm_dep_arr = [boost_dep]

  # 创建 WASM 基础库
  mcbase_wasm_lib = library(
    'mcbase_wasm',
    wasm_base_src_files,
    include_directories: [incdir, srcdir],
    dependencies: wasm_dep_arr,
    install: true,
    install_dir: install_dir,
    build_by_default: true,
  )

  mcbase_wasm_dep = declare_dependency(
    include_directories: incdir,
    link_with: mcbase_wasm_lib,
    dependencies: wasm_dep_arr,
  )

  message('WASM 基础库构建目标已创建: mcbase_wasm')
endif

# 导出库依赖
if is_wasm_build
  # WASM 构建:使用 mcbase_wasm 作为导出的依赖
  mcbase_dep = mcbase_wasm_dep
else
  mcbase_dep = declare_dependency(
    include_directories: incdir,
    link_with: mcbase_lib,
    dependencies: dep_arr,
  )
endif