常规更新
This commit is contained in:
+48
-16
@@ -1,13 +1,17 @@
|
||||
function(ys_add_doxygen_target target_name)
|
||||
function(psc_join_doxygen_list out_value)
|
||||
string(REPLACE ";" " " value "${ARGN}")
|
||||
set(${out_value} "${value}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
function(psc_generate_doxygen_directory_scripts script_name)
|
||||
set(options)
|
||||
set(oneValueArgs PROJECT_NAME OUTPUT_DIR WORKING_DIRECTORY DOXYGEN_EXECUTABLE DOT_EXECUTABLE)
|
||||
set(multiValueArgs INPUT EXCLUDE FILE_PATTERNS PREDEFINED)
|
||||
set(multiValueArgs INPUT_DIRS EXCLUDE_DIRS 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}")
|
||||
set(ARG_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/doxygen/${script_name}")
|
||||
endif ()
|
||||
if (NOT ARG_WORKING_DIRECTORY)
|
||||
set(ARG_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}")
|
||||
@@ -18,23 +22,51 @@ function(ys_add_doxygen_target target_name)
|
||||
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}")
|
||||
if (NOT ARG_INPUT_DIRS)
|
||||
set(ARG_INPUT_DIRS "${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")
|
||||
psc_join_doxygen_list(doxygen_input ${ARG_INPUT_DIRS})
|
||||
psc_join_doxygen_list(doxygen_exclude ${ARG_EXCLUDE_DIRS})
|
||||
psc_join_doxygen_list(doxygen_file_patterns ${ARG_FILE_PATTERNS})
|
||||
psc_join_doxygen_list(doxygen_predefined ${ARG_PREDEFINED})
|
||||
set(script_dir "${CMAKE_CURRENT_BINARY_DIR}/psc_doc_scripts/${script_name}")
|
||||
file(MAKE_DIRECTORY "${script_dir}")
|
||||
set(doxygen_file "${script_dir}/${script_name}.Doxyfile")
|
||||
set(power_shell_script "${script_dir}/${script_name}_doxygen.ps1")
|
||||
set(bash_script "${script_dir}/${script_name}_doxygen.sh")
|
||||
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
|
||||
)
|
||||
file(WRITE "${power_shell_script}" "$ErrorActionPreference = 'Stop'\n$outputDir = '${ARG_OUTPUT_DIR}'\nNew-Item -ItemType Directory -Force -Path $outputDir | Out-Null\n& '${ARG_DOXYGEN_EXECUTABLE}' '${doxygen_file}'\nif ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }\nSet-Content -LiteralPath (Join-Path $outputDir 'index.html') -Encoding UTF8 -Value '<!doctype html><meta charset=\"utf-8\"><meta http-equiv=\"refresh\" content=\"0; url=html/index.html\"><a href=\"html/index.html\">Open Doxygen HTML</a>'\nSet-Content -LiteralPath (Join-Path $outputDir 'html_index.html') -Encoding UTF8 -Value '<!doctype html><meta charset=\"utf-8\"><meta http-equiv=\"refresh\" content=\"0; url=html/index.html\"><a href=\"html/index.html\">Open Doxygen HTML</a>'\nif (Test-Path -LiteralPath (Join-Path $outputDir 'xml/index.xml')) { Copy-Item -LiteralPath (Join-Path $outputDir 'xml/index.xml') -Destination (Join-Path $outputDir 'index.xml') -Force }\n")
|
||||
file(WRITE "${bash_script}" "#!/usr/bin/env bash\nset -euo pipefail\noutput_dir='${ARG_OUTPUT_DIR}'\nmkdir -p \"$output_dir\"\n'${ARG_DOXYGEN_EXECUTABLE}' '${doxygen_file}'\nprintf '%s\\n' '<!doctype html><meta charset=\"utf-8\"><meta http-equiv=\"refresh\" content=\"0; url=html/index.html\"><a href=\"html/index.html\">Open Doxygen HTML</a>' > \"$output_dir\"/index.html\nprintf '%s\\n' '<!doctype html><meta charset=\"utf-8\"><meta http-equiv=\"refresh\" content=\"0; url=html/index.html\"><a href=\"html/index.html\">Open Doxygen HTML</a>' > \"$output_dir\"/html_index.html\nif [ -f \"$output_dir\"/xml/index.xml ]; then cp \"$output_dir\"/xml/index.xml \"$output_dir\"/index.xml; fi\n")
|
||||
set(${script_name}_DOXYGEN_FILE "${doxygen_file}" PARENT_SCOPE)
|
||||
set(${script_name}_POWERSHELL_SCRIPT "${power_shell_script}" PARENT_SCOPE)
|
||||
set(${script_name}_BASH_SCRIPT "${bash_script}" PARENT_SCOPE)
|
||||
set(${script_name}_OUTPUT_DIR "${ARG_OUTPUT_DIR}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
function(psc_add_doxygen_directory_target target_name)
|
||||
psc_generate_doxygen_directory_scripts(${target_name} ${ARGN})
|
||||
if (WIN32)
|
||||
add_custom_target(${target_name}
|
||||
COMMAND pwsh -NoProfile -ExecutionPolicy Bypass -File "${${target_name}_POWERSHELL_SCRIPT}"
|
||||
VERBATIM
|
||||
)
|
||||
else ()
|
||||
add_custom_target(${target_name}
|
||||
COMMAND bash "${${target_name}_BASH_SCRIPT}"
|
||||
VERBATIM
|
||||
)
|
||||
endif ()
|
||||
endfunction()
|
||||
function(psc_generate_doxygen_scripts script_name)
|
||||
psc_generate_doxygen_directory_scripts(${script_name} ${ARGN})
|
||||
set(${script_name}_DOXYGEN_FILE "${${script_name}_DOXYGEN_FILE}" PARENT_SCOPE)
|
||||
set(${script_name}_POWERSHELL_SCRIPT "${${script_name}_POWERSHELL_SCRIPT}" PARENT_SCOPE)
|
||||
set(${script_name}_BASH_SCRIPT "${${script_name}_BASH_SCRIPT}" PARENT_SCOPE)
|
||||
set(${script_name}_OUTPUT_DIR "${${script_name}_OUTPUT_DIR}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
function(psc_add_doxygen_target target_name)
|
||||
psc_add_doxygen_directory_target(${target_name} ${ARGN})
|
||||
endfunction()
|
||||
|
||||
Reference in New Issue
Block a user