diff options
author | Alex Turbov <i.zaufi@gmail.com> | 2017-04-10 09:37:35 (GMT) |
---|---|---|
committer | Alex Turbov <i.zaufi@gmail.com> | 2017-05-24 03:15:45 (GMT) |
commit | 59ffabfeece31db8026aaa715f3ab0dbfbf8bb7e (patch) | |
tree | 65f775818d96d8b8742e120c26307d33642e1f47 /Tests/FindDoxygen | |
parent | ae5f98a5e36da8cf3c75625ffb9a1d34aa2407cb (diff) | |
download | CMake-59ffabfeece31db8026aaa715f3ab0dbfbf8bb7e.zip CMake-59ffabfeece31db8026aaa715f3ab0dbfbf8bb7e.tar.gz CMake-59ffabfeece31db8026aaa715f3ab0dbfbf8bb7e.tar.bz2 |
Improve Doxygen support
Except Graphviz's `dot` Doxygen may use few other utilities like
`mscgen` (Message Sequence Chart) and `dia` (Diagram Editor).
Now this module allows to manage Doxygen settings from `CMakeLists.txt`
and forget about `Doxyfile`s. Also it provides a helper function
to add a target to generate documentation: `doxygen_add_docs`.
Implement code review notes:
- Introduce `COMPONENTS` to find: `dot`, `mscgen` and `dia`;
- Deprecate variables `DOXYGEN_SKIP_DOT`, `DOXYGEN_EXECUTABLE`,
`DOXYGEN_DOT_EXECUTABLE`, `DOXYGEN_DOT_FOUND` in favour of
`doxygen_add_docs ` usage instead;
- Properly handle paths to found tools in Windows;
- Prevent adding a custom target if Doxygen was not really found;
- Introduce exported (executable) targets for found components.
Co-Author: Craig Scott <craig.scott@crascit.com>
Diffstat (limited to 'Tests/FindDoxygen')
-rw-r--r-- | Tests/FindDoxygen/CMakeLists.txt | 20 | ||||
-rw-r--r-- | Tests/FindDoxygen/DotComponentTestTest/CMakeLists.txt | 18 | ||||
-rw-r--r-- | Tests/FindDoxygen/SimpleTest/CMakeLists.txt | 59 | ||||
-rw-r--r-- | Tests/FindDoxygen/SimpleTest/main.cpp | 4 | ||||
-rw-r--r-- | Tests/FindDoxygen/SimpleTest/spaces_in_name.cpp.in | 4 |
5 files changed, 105 insertions, 0 deletions
diff --git a/Tests/FindDoxygen/CMakeLists.txt b/Tests/FindDoxygen/CMakeLists.txt new file mode 100644 index 0000000..daceaa3 --- /dev/null +++ b/Tests/FindDoxygen/CMakeLists.txt @@ -0,0 +1,20 @@ +add_test(NAME FindDoxygen.SimpleTest COMMAND + ${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION> + --build-and-test + "${CMake_SOURCE_DIR}/Tests/FindDoxygen/SimpleTest" + "${CMake_BINARY_DIR}/Tests/FindDoxygen/SimpleTest" + --build-target allDocTargets + ${build_generator_args} + --build-options ${build_options} +) + +if(CMake_TEST_FindDoxygen_Dot) + add_test(NAME FindDoxygen.DotComponentTest COMMAND + ${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION> + --build-and-test + "${CMake_SOURCE_DIR}/Tests/FindDoxygen/DotComponentTestTest" + "${CMake_BINARY_DIR}/Tests/FindDoxygen/DotComponentTestTest" + ${build_generator_args} + --build-options ${build_options} + ) +endif() diff --git a/Tests/FindDoxygen/DotComponentTestTest/CMakeLists.txt b/Tests/FindDoxygen/DotComponentTestTest/CMakeLists.txt new file mode 100644 index 0000000..586f0ff --- /dev/null +++ b/Tests/FindDoxygen/DotComponentTestTest/CMakeLists.txt @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 3.8) +project(TestFindDoxygenDot VERSION 1.0 LANGUAGES NONE) + +# Testing a new signature w/ components +find_package(Doxygen REQUIRED COMPONENTS dot) + +# No backwards compatibility expected when component form is used +if(TARGET Doxygen::doxygen) + if(DOXYGEN) + message(FATAL_ERROR "DOXYGEN unexpectedly defined with component form") + endif() +else() + message(FATAL_ERROR "Import target Doxygen::doxygen not defined") +endif() + +if(NOT TARGET Doxygen::dot) + message(FATAL_ERROR "Import target Doxygen::dot not defined") +endif() diff --git a/Tests/FindDoxygen/SimpleTest/CMakeLists.txt b/Tests/FindDoxygen/SimpleTest/CMakeLists.txt new file mode 100644 index 0000000..332cecc --- /dev/null +++ b/Tests/FindDoxygen/SimpleTest/CMakeLists.txt @@ -0,0 +1,59 @@ +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() + +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() + +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) diff --git a/Tests/FindDoxygen/SimpleTest/main.cpp b/Tests/FindDoxygen/SimpleTest/main.cpp new file mode 100644 index 0000000..925f0af --- /dev/null +++ b/Tests/FindDoxygen/SimpleTest/main.cpp @@ -0,0 +1,4 @@ +/** + * \file + * \brief One C++ file w/ sample Doxygen comment just to produce any docs... + */ diff --git a/Tests/FindDoxygen/SimpleTest/spaces_in_name.cpp.in b/Tests/FindDoxygen/SimpleTest/spaces_in_name.cpp.in new file mode 100644 index 0000000..c1b9ffd --- /dev/null +++ b/Tests/FindDoxygen/SimpleTest/spaces_in_name.cpp.in @@ -0,0 +1,4 @@ +/** + * \file + * \brief This file name contains spaces + */ |