diff --git a/Doxygen/main.cmake b/Doxygen/main.cmake new file mode 100644 index 0000000..73695b7 --- /dev/null +++ b/Doxygen/main.cmake @@ -0,0 +1,40 @@ +function(ys_add_doxygen_target target_name) + set(options) + set(oneValueArgs PROJECT_NAME OUTPUT_DIR WORKING_DIRECTORY DOXYGEN_EXECUTABLE DOT_EXECUTABLE) + set(multiValueArgs INPUT EXCLUDE FILE_PATTERNS PREDEFINED) + cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + if (NOT ARG_PROJECT_NAME) + set(ARG_PROJECT_NAME "${PROJECT_NAME}") + endif () + if (NOT ARG_OUTPUT_DIR) + set(ARG_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/doxygen/${target_name}") + endif () + if (NOT ARG_WORKING_DIRECTORY) + set(ARG_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}") + endif () + if (NOT ARG_DOXYGEN_EXECUTABLE) + set(ARG_DOXYGEN_EXECUTABLE "C:/Program Files/doxygen/bin/doxygen.exe") + endif () + if (NOT ARG_DOT_EXECUTABLE) + set(ARG_DOT_EXECUTABLE "C:/Program Files/Graphviz/bin/dot.exe") + endif () + if (NOT ARG_INPUT) + set(ARG_INPUT "${CMAKE_SOURCE_DIR}") + endif () + if (NOT ARG_FILE_PATTERNS) + set(ARG_FILE_PATTERNS "*.h" "*.hpp" "*.hh" "*.cpp" "*.cxx" "*.cc") + endif () + get_filename_component(dot_dir "${ARG_DOT_EXECUTABLE}" DIRECTORY) + string(REPLACE ";" " " doxygen_input "${ARG_INPUT}") + string(REPLACE ";" " " doxygen_exclude "${ARG_EXCLUDE}") + string(REPLACE ";" " " doxygen_file_patterns "${ARG_FILE_PATTERNS}") + string(REPLACE ";" " " doxygen_predefined "${ARG_PREDEFINED}") + set(doxygen_file "${CMAKE_CURRENT_BINARY_DIR}/${target_name}.Doxyfile") + configure_file("${CMAKE_CURRENT_FUNCTION_LIST_DIR}/Doxyfile.in" "${doxygen_file}" @ONLY) + add_custom_target(${target_name} + COMMAND "${CMAKE_COMMAND}" -E make_directory "${ARG_OUTPUT_DIR}" + COMMAND "${ARG_DOXYGEN_EXECUTABLE}" "${doxygen_file}" + WORKING_DIRECTORY "${ARG_WORKING_DIRECTORY}" + VERBATIM + ) +endfunction() diff --git a/Graphviz/main.cmake b/Graphviz/main.cmake new file mode 100644 index 0000000..4499deb --- /dev/null +++ b/Graphviz/main.cmake @@ -0,0 +1,60 @@ +function(ys_add_graphviz_render_target target_name) + set(options) + set(oneValueArgs OUTPUT_DIR FORMAT DOT_EXECUTABLE) + set(multiValueArgs INPUT) + cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + if (NOT ARG_OUTPUT_DIR) + set(ARG_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/graphviz/${target_name}") + endif () + if (NOT ARG_FORMAT) + set(ARG_FORMAT "svg") + endif () + if (NOT ARG_DOT_EXECUTABLE) + set(ARG_DOT_EXECUTABLE "C:/Program Files/Graphviz/bin/dot.exe") + endif () + set(outputs) + foreach(dot_file IN LISTS ARG_INPUT) + get_filename_component(dot_name "${dot_file}" NAME_WE) + list(APPEND outputs "${ARG_OUTPUT_DIR}/${dot_name}.${ARG_FORMAT}") + endforeach() + add_custom_target(${target_name} + COMMAND "${CMAKE_COMMAND}" -E make_directory "${ARG_OUTPUT_DIR}" + VERBATIM + ) + foreach(dot_file IN LISTS ARG_INPUT) + get_filename_component(dot_name "${dot_file}" NAME_WE) + add_custom_command(TARGET ${target_name} POST_BUILD + COMMAND "${ARG_DOT_EXECUTABLE}" "-T${ARG_FORMAT}" "${dot_file}" "-o" "${ARG_OUTPUT_DIR}/${dot_name}.${ARG_FORMAT}" + VERBATIM + ) + endforeach() +endfunction() +function(ys_add_cmake_graphviz_target target_name) + set(options) + set(oneValueArgs SOURCE_DIR BINARY_DIR OUTPUT_DIR FORMAT DOT_EXECUTABLE) + set(multiValueArgs) + cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + if (NOT ARG_SOURCE_DIR) + set(ARG_SOURCE_DIR "${CMAKE_SOURCE_DIR}") + endif () + if (NOT ARG_BINARY_DIR) + set(ARG_BINARY_DIR "${CMAKE_BINARY_DIR}") + endif () + if (NOT ARG_OUTPUT_DIR) + set(ARG_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/graphviz/${target_name}") + endif () + if (NOT ARG_FORMAT) + set(ARG_FORMAT "svg") + endif () + if (NOT ARG_DOT_EXECUTABLE) + set(ARG_DOT_EXECUTABLE "C:/Program Files/Graphviz/bin/dot.exe") + endif () + set(dot_file "${ARG_OUTPUT_DIR}/${target_name}.dot") + set(image_file "${ARG_OUTPUT_DIR}/${target_name}.${ARG_FORMAT}") + add_custom_target(${target_name} + COMMAND "${CMAKE_COMMAND}" -E make_directory "${ARG_OUTPUT_DIR}" + COMMAND "${CMAKE_COMMAND}" -S "${ARG_SOURCE_DIR}" -B "${ARG_BINARY_DIR}" "--graphviz=${dot_file}" + COMMAND "${ARG_DOT_EXECUTABLE}" "-T${ARG_FORMAT}" "${dot_file}" "-o" "${image_file}" + VERBATIM + ) +endfunction()