You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.7 KiB
83 lines
2.7 KiB
include(RunCMake)
|
|
|
|
find_program(DOT dot)
|
|
|
|
# Set to TRUE to re-generate the reference files from the actual outputs.
|
|
# Make sure you verify them!
|
|
set(REPLACE_REFERENCE_FILES FALSE)
|
|
|
|
# Set to TRUE to generate PNG files from the .dot files, using Graphviz (dot).
|
|
# Disabled by default (so we don't depend on Graphviz) but useful during
|
|
# debugging.
|
|
set(GENERATE_PNG_FILES FALSE)
|
|
|
|
# 1. Generate the Graphviz (.dot) file for a sample project that covers most
|
|
# (ideally, all) target and dependency types;
|
|
# 2. Compare that generated file with a reference file.
|
|
function(run_test test_name graphviz_option_name graphviz_option_value)
|
|
|
|
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test_name})
|
|
set(RunCMake_TEST_NO_CLEAN 1)
|
|
file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
|
|
file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
|
|
|
|
# Set ${graphviz_option_name} to ${graphviz_option_value}.
|
|
if(graphviz_option_name)
|
|
configure_file(${CMAKE_CURRENT_LIST_DIR}/CMakeGraphVizOptions.cmake.in
|
|
${RunCMake_TEST_BINARY_DIR}/CMakeGraphVizOptions.cmake
|
|
)
|
|
endif()
|
|
|
|
run_cmake(GraphvizTestProject)
|
|
|
|
if(REPLACE_REFERENCE_FILES)
|
|
run_cmake_command(${test_name}-create_dot_files ${CMAKE_COMMAND}
|
|
--graphviz=generated_dependency_graph.dot .
|
|
)
|
|
|
|
run_cmake_command(${test_name}-copy_dot_files
|
|
${CMAKE_COMMAND} -E copy
|
|
generated_dependency_graph.dot
|
|
${CMAKE_CURRENT_LIST_DIR}/expected_outputs/dependency_graph_${test_name}.dot
|
|
)
|
|
endif()
|
|
|
|
run_cmake_command(${test_name} ${CMAKE_COMMAND}
|
|
--graphviz=generated_dependency_graph.dot .
|
|
)
|
|
|
|
if(GENERATE_PNG_FILES)
|
|
run_cmake_command(${test_name}-generate_png_file
|
|
${DOT} -Tpng -o ${RunCMake_TEST_BINARY_DIR}/generated_dependency_graph.png
|
|
${RunCMake_TEST_BINARY_DIR}/generated_dependency_graph.dot
|
|
)
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
run_test(default_options "" "")
|
|
|
|
run_test(set_graph_name GRAPHVIZ_GRAPH_NAME "\"CMake Project Dependencies\"")
|
|
run_test(set_graph_header GRAPHVIZ_GRAPH_HEADER
|
|
"\"node [\n fontsize = \\\"16\\\"\n];\"")
|
|
run_test(set_node_prefix GRAPHVIZ_NODE_PREFIX "point")
|
|
|
|
run_test(no_executables GRAPHVIZ_EXECUTABLES FALSE)
|
|
|
|
run_test(no_static_libs GRAPHVIZ_STATIC_LIBS FALSE)
|
|
run_test(no_shared_libs GRAPHVIZ_SHARED_LIBS FALSE)
|
|
run_test(no_module_libs GRAPHVIZ_MODULE_LIBS FALSE)
|
|
|
|
run_test(no_interface_libs GRAPHVIZ_INTERFACE_LIBS FALSE)
|
|
run_test(no_object_libs GRAPHVIZ_OBJECT_LIBS FALSE)
|
|
run_test(no_unknown_libs GRAPHVIZ_UNKNOWN_LIBS FALSE)
|
|
|
|
run_test(no_external_libs GRAPHVIZ_EXTERNAL_LIBS FALSE)
|
|
|
|
run_test(custom_targets GRAPHVIZ_CUSTOM_TARGETS TRUE)
|
|
|
|
run_test(no_graphic_libs GRAPHVIZ_IGNORE_TARGETS "Graphic")
|
|
|
|
run_test(no_per_target_files GRAPHVIZ_GENERATE_PER_TARGET FALSE)
|
|
run_test(no_dependers_files GRAPHVIZ_GENERATE_DEPENDERS FALSE)
|