# Check if the toml Python module is installed.
execute_process(
  COMMAND
  ${PYTHON_EXECUTABLE} -c "import toml"
  RESULT_VARIABLE
    RET_TOML
  ERROR_QUIET
)

if(RET_TOML)
    message(FATAL_ERROR
      "Could not find Python module toml. Install via `pip install toml'.")
endif()

libcvc4_add_sources(
  base_handlers.h
  decision_weight.h
  didyoumean.cpp
  didyoumean.h
  language.cpp
  language.h
  open_ostream.cpp
  open_ostream.h
  option_exception.cpp
  option_exception.h
  options.h
  options_handler.cpp
  options_handler.h
  options_public_functions.cpp
  printer_modes.cpp
  printer_modes.h
  set_language.cpp
  set_language.h
)

set(options_toml_files
  arith_options.toml
  arrays_options.toml
  base_options.toml
  booleans_options.toml
  builtin_options.toml
  bv_options.toml
  datatypes_options.toml
  decision_options.toml
  expr_options.toml
  fp_options.toml
  main_options.toml
  parser_options.toml
  printer_options.toml
  proof_options.toml
  prop_options.toml
  quantifiers_options.toml
  sep_options.toml
  sets_options.toml
  smt_options.toml
  strings_options.toml
  theory_options.toml
  uf_options.toml
)

string(REPLACE "toml" "cpp;" options_gen_cpp_files ${options_toml_files})
string(REPLACE "toml" "h;"   options_gen_h_files ${options_toml_files})

libcvc4_add_sources(GENERATED options.cpp ${options_gen_cpp_files})

list_prepend(options_toml_files "${CMAKE_CURRENT_LIST_DIR}/" abs_toml_files)

add_custom_command(
    OUTPUT
      options.cpp options_holder.h
      ${options_gen_cpp_files} ${options_gen_h_files}
    COMMAND
      ${PYTHON_EXECUTABLE}
      ${CMAKE_CURRENT_LIST_DIR}/mkoptions.py
      ${CMAKE_CURRENT_LIST_DIR}
      ${CMAKE_CURRENT_BINARY_DIR}/../../doc
      ${CMAKE_CURRENT_BINARY_DIR}
      ${abs_toml_files}
    DEPENDS
      mkoptions.py
      ${options_toml_files}
      module_template.h
      module_template.cpp
      options_holder_template.h
      options_template.cpp
      ${CMAKE_CURRENT_BINARY_DIR}/../../doc/cvc4.1_template
      ${CMAKE_CURRENT_BINARY_DIR}/../../doc/SmtEngine.3cvc_template
      ${CMAKE_CURRENT_BINARY_DIR}/../../doc/options.3cvc_template
)

add_custom_target(gen-options
  DEPENDS
    options.cpp
    options_holder.h
    ${options_gen_cpp_files}
    ${options_gen_h_files}
)
