cmake_minimum_required(VERSION 3.8)
project(TestFindDoxygen VERSION 1.0 LANGUAGES NONE)

# Testing backward compatible signature
find_package(Doxygen REQUIRED)

if(TARGET Doxygen::doxygen)
    # Check backward compatibility
    if(NOT DOXYGEN_EXECUTABLE)
        message(FATAL_ERROR "Backward compatibility broken: DOXYGEN_EXECUTABLE not set")
    endif()
    if(NOT DOXYGEN)
        message(FATAL_ERROR "Backward compatibility broken: DOXYGEN not set")
    endif()
    # Check presence of expected generated files
    foreach(file CMakeDoxyfile.in CMakeDoxygenDefaults.cmake)
        if(NOT EXISTS "${PROJECT_BINARY_DIR}/${file}")
            message(FATAL_ERROR "Missing generated file: ${file}")
        endif()
    endforeach()
else()
    message(FATAL_ERROR "Import target Doxygen::doxygen not defined")
endif()

set(DOXYGEN_OUTPUT_DIRECTORY noArgs)
doxygen_add_docs(docsNoArgs)
if(NOT EXISTS "${PROJECT_BINARY_DIR}/Doxyfile.docsNoArgs")
    message(FATAL_ERROR "Missing generated file: Doxyfile.docsNoArgs")
endif()
if(NOT TARGET docsNoArgs)
    message(FATAL_ERROR "Target docsNoArgs not created")
endif()

set(DOXYGEN_OUTPUT_DIRECTORY withArgs)
configure_file(spaces_in_name.cpp.in "spaces in name.cpp" COPYONLY)
doxygen_add_docs(docsWithArgs
    "${CMAKE_CURRENT_BINARY_DIR}/spaces in name.cpp"
    main.cpp
)
if(NOT EXISTS "${PROJECT_BINARY_DIR}/Doxyfile.docsWithArgs")
    message(FATAL_ERROR "Missing generated file: Doxyfile.docsWithArgs")
endif()
if(NOT TARGET docsWithArgs)
    message(FATAL_ERROR "Target docsWithArgs not created")
endif()
# Note that CMake inserts at least one entry into SOURCES when a COMMAND or
# DEPENDS option is given to add_custom_target(), so rather than looking for an
# exact match, we only verify that the files we expect to be there are present
get_target_property(srcList docsWithArgs SOURCES)
set(expectedList
    "${CMAKE_CURRENT_BINARY_DIR}/spaces in name.cpp"
    "${CMAKE_CURRENT_SOURCE_DIR}/main.cpp"
)
foreach(f IN LISTS expectedList)
    if(NOT f IN_LIST srcList)
        message(FATAL_ERROR "SOURCES missing file: ${f}")
    endif()
endforeach()

add_custom_target(allDocTargets)
add_dependencies(allDocTargets docsNoArgs docsWithArgs)
