cmake_minimum_required(VERSION 3.12)
project(flb_wasm_profile_test NONE)

# This fixture tests option policy only. The real dependency smoke target is
# compiled and executed with Emscripten; no compiler is simulated here.
if(NOT DEFINED FLB_SOURCE_DIR)
  get_filename_component(FLB_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../.." ABSOLUTE)
endif()
set(PROFILE_TEST_MODE browser CACHE STRING "Profile policy test mode")
if(PROFILE_TEST_MODE STREQUAL "native")
  set(FLB_WASM_BROWSER OFF)
else()
  set(FLB_WASM_BROWSER ON)
  if(NOT PROFILE_TEST_MODE STREQUAL "wrong_toolchain")
    set(CMAKE_SYSTEM_NAME Emscripten)
    set(EMSCRIPTEN_VERSION "6.0.9" CACHE STRING "SDK version for option-policy tests")
  endif()
  include("${FLB_SOURCE_DIR}/cmake/wasm-browser.cmake")
endif()

include("${FLB_SOURCE_DIR}/cmake/plugins_options.cmake")

if(PROFILE_TEST_MODE STREQUAL "native")
  if(NOT FLB_IN_HTTP OR NOT FLB_OUT_HTTP OR NOT FLB_FILTER_GREP)
    message(FATAL_ERROR "Native plugin defaults changed")
  endif()
else()
  if(FLB_IN_HTTP OR FLB_OUT_TCP OR FLB_FILTER_WASM OR FLB_IN_TAIL OR FLB_FILTER_CHECKLIST)
    message(FATAL_ERROR "A native-only plugin was enabled")
  endif()
  if(FLB_TLS OR FLB_WASM OR FLB_HAVE_FORK OR FLB_HAVE_ACCEPT4 OR FLB_HAVE_UNIX_SOCKET)
    message(FATAL_ERROR "An unavailable browser feature was enabled")
  endif()
  if(NOT CIO_BACKEND_FILESYSTEM OR NOT FLB_CONFIG_YAML)
    message(FATAL_ERROR "Browser filesystem and YAML defaults were lost")
  endif()
  if(FLB_PROCESSOR_TDA)
    message(FATAL_ERROR "Unvalidated TDA processor was enabled")
  endif()
  if(NOT FLB_MINIMAL AND (NOT FLB_IN_LIB OR NOT FLB_OUT_LIB OR NOT FLB_FILTER_MODIFY))
    message(FATAL_ERROR "Local processing plugin defaults were lost")
  endif()
  if(DEFINED EXPECT_FTS)
    if((EXPECT_FTS AND NOT FLB_PROCESSOR_FTS) OR (NOT EXPECT_FTS AND FLB_PROCESSOR_FTS))
      message(FATAL_ERROR "FTS browser default or override was lost")
    endif()
  endif()
  if(NOT FLB_WASM_LUA AND FLB_PROCESSOR_FTS)
    message(FATAL_ERROR "FTS requires a Lua backend")
  endif()
  if(FLB_MINIMAL AND (FLB_IN_LIB OR FLB_OUT_LIB OR FLB_FILTER_MODIFY OR FLB_PROCESSOR_FTS))
    message(FATAL_ERROR "Minimal mode was ignored")
  endif()
endif()
