if(NOT HAVE_Fortran_FILESYSTEM)
  return()
endif()

set(test_symlink_dir ${CMAKE_CURRENT_BINARY_DIR}/symlink_test_dir)
message(VERBOSE "Creating test directory ${test_symlink_dir}")
file(MAKE_DIRECTORY ${test_symlink_dir})
file(GENERATE OUTPUT ${test_symlink_dir}/cmake-test.txt CONTENT "I was generated by CMake")

set(test_symlink_file ${test_symlink_dir}/cmake-test.txt.link)
file(CREATE_LINK ${test_symlink_dir}/cmake-test.txt ${test_symlink_file} SYMBOLIC)
message(VERBOSE "CMake test link file ${test_symlink_file}")

add_executable(fortran_symlink test_symlink.f90)
target_link_libraries(fortran_symlink PRIVATE ffilesystem)
target_compile_options(fortran_symlink PRIVATE ${${PROJECT_NAME}_fortran_test_flags})
set_property(TARGET fortran_symlink PROPERTY LINKER_LANGUAGE Fortran)

add_test(NAME Fortran_symlink
COMMAND ${CMAKE_COMMAND} -E env $<TARGET_FILE:fortran_symlink> ${test_symlink_file})
# the -E env launcher is needed to catch subprocess abort for macOS with Clang (shaky exception handling in general)

set_tests_properties(Fortran_symlink PROPERTIES
DISABLED $<AND:$<BOOL:${WIN32}>,$<NOT:$<BOOL:${HAVE_CXX_FILESYSTEM}>>>
SKIP_REGULAR_EXPRESSION "not implemented;SIGABRT;[aA]bort"
LABELS Fortran
)
