if (NOT TARGET "test-drive::test-drive")
  find_package("test-drive" REQUIRED)
endif()

if(WIN32)
  if(CMAKE_Fortran_COMPILER_ID MATCHES "^Intel")
    add_link_options(/Qoption,link,/STACK:8388608)
  elseif(CMAKE_Fortran_COMPILER_ID STREQUAL GNU)
    add_link_options(-Wl,--stack,8388608)
  endif()
endif()

macro(ADDTEST name)
    add_executable(test_${name} test_${name}.f90)
    target_link_libraries(test_${name} "${PROJECT_NAME}" "test-drive::test-drive")
    add_test(NAME ${name}
             COMMAND $<TARGET_FILE:test_${name}> ${CMAKE_CURRENT_BINARY_DIR}
             WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
endmacro(ADDTEST)

macro(ADDTESTPP name)
    add_executable(test_${name} test_${name}.F90)
    target_link_libraries(test_${name} "${PROJECT_NAME}" "test-drive::test-drive")
    add_test(NAME ${name}
             COMMAND $<TARGET_FILE:test_${name}> ${CMAKE_CURRENT_BINARY_DIR}
             WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
endmacro(ADDTESTPP)


add_subdirectory(array)
add_subdirectory(ascii)
if (STDLIB_BITSETS)
  add_subdirectory(bitsets)
endif()
add_subdirectory(constants)
add_subdirectory(hash_functions)
add_subdirectory(hash_functions_perf)
if (STDLIB_HASHMAPS)
  add_subdirectory(hashmaps)
endif()
add_subdirectory(intrinsics)
if (STDLIB_IO)
  add_subdirectory(io)
endif()
add_subdirectory(linalg)
if (STDLIB_LOGGER)
  add_subdirectory(logger)
endif()
add_subdirectory(optval)
add_subdirectory(selection)
add_subdirectory(sorting)
add_subdirectory(specialfunctions)
if (STDLIB_STATS)
  add_subdirectory(stats)
endif()
add_subdirectory(string)
if (STDLIB_SYSTEM)
  add_subdirectory(system)
endif()
if (STDLIB_QUADRATURE)
  add_subdirectory(quadrature)
endif()
add_subdirectory(math)
if (STDLIB_STRINGLIST)
  add_subdirectory(stringlist)
endif()
if (STDLIB_ANSI)
  add_subdirectory(terminal)
endif()
