################################################################################
# CSG Parser
################################################################################
add_library(csg)

target_sources(csg PRIVATE
  src/csg/impl/parser.cpp
  src/csg/impl/levelset.cpp
  src/csg/impl/csg.cpp
  )

target_include_directories(csg PRIVATE
  ${CMAKE_CURRENT_SOURCE_DIR}/subprojects/PEGTL/include)

target_link_libraries(csg PRIVATE stdc++fs)

target_compile_features(csg PRIVATE cxx_std_17)

SET(catch2_dir ${CMAKE_CURRENT_SOURCE_DIR}/subprojects/Catch2)

if(NOT EXISTS "${catch2_dir}/CMakeLists.txt")
  message(FATAL_ERROR "File ${catch2_dir}/CMakeLists.txt does not exist!  The submodules were not downloaded! GIT_SUBMODULE was turned off or failed. Please update submodules and try again.")
endif()

add_subdirectory(${catch2_dir} ${CMAKE_CURRENT_BINARY_DIR}/catch_build)
list(APPEND CMAKE_MODULE_PATH "${catch2_dir}/contrib/")

include(CTest)
include(Catch)


find_program(CLANG_FMT NAMES clang-format-9 clang-format-8 clang-format-7 clang-format)

if(CLANG_FMT)
  get_target_property(_csg_srcs csg SOURCES)
  file(GLOB _csg_incs ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ${CMAKE_CURRENT_SOURCE_DIR}/impl/*.hpp)

  add_custom_target(fmt_csg
    COMMAND ${CLANG_FMT} -i ${_csg_srcs} ${_csg_incs}
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    )
  add_custom_target(fmt_test
    COMMAND ${CLANG_FMT} -i ${_ut_srcs} ${_ft_srcs}
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests
    )

  add_custom_target(fmt)
  add_dependencies(fmt fmt_test fmt_csg)
endif()
