function(psc_metrics_ps_array out_value) set(values) foreach(item IN LISTS ARGN) string(REPLACE "'" "''" escaped "${item}") list(APPEND values "'${escaped}'") endforeach() string(REPLACE ";" "," value "${values}") set(${out_value} "@(${value})" PARENT_SCOPE) endfunction() function(psc_add_coupling_target target_name) set(options) set(oneValueArgs OUTPUT_DIR TOP_N DOT_EXECUTABLE) set(multiValueArgs INPUT_DIRS EXCLUDE_DIRS) cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if (NOT ARG_OUTPUT_DIR) set(ARG_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/metrics/${target_name}/coupling") endif () if (NOT ARG_TOP_N) set(ARG_TOP_N 50) endif () if (NOT ARG_DOT_EXECUTABLE) set(ARG_DOT_EXECUTABLE "C:/Program Files/Graphviz/bin/dot.exe") endif () if (NOT ARG_INPUT_DIRS) set(ARG_INPUT_DIRS "${CMAKE_SOURCE_DIR}") endif () psc_metrics_ps_array(PSC_COUPLING_INPUT_DIRS ${ARG_INPUT_DIRS}) psc_metrics_ps_array(PSC_COUPLING_EXCLUDE_DIRS ${ARG_EXCLUDE_DIRS}) set(PSC_COUPLING_OUTPUT_DIR "${ARG_OUTPUT_DIR}") set(PSC_COUPLING_TOP_N "${ARG_TOP_N}") set(PSC_COUPLING_DOT "${ARG_DOT_EXECUTABLE}") set(script_dir "${CMAKE_CURRENT_BINARY_DIR}/psc_metrics_scripts/${target_name}") file(MAKE_DIRECTORY "${script_dir}") set(script "${script_dir}/${target_name}_coupling.ps1") configure_file("${CMAKE_CURRENT_FUNCTION_LIST_DIR}/Coupling.ps1.in" "${script}" @ONLY) add_custom_target(${target_name} COMMAND pwsh -NoProfile -ExecutionPolicy Bypass -File "${script}" VERBATIM ) set(${target_name}_OUTPUT_DIR "${ARG_OUTPUT_DIR}" PARENT_SCOPE) endfunction() function(psc_add_metrics_report_target target_name) set(options) set(oneValueArgs OUTPUT_DIR LLVM_DIR CPPCHECK_DIR LIZARD_DIR CODE_COUNT_DIR COUPLING_DIR PROJECT_NAME) set(multiValueArgs DEPENDS) cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if (NOT ARG_OUTPUT_DIR) set(ARG_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/metrics/${target_name}") endif () if (NOT ARG_PROJECT_NAME) set(ARG_PROJECT_NAME "${PROJECT_NAME}") endif () set(PSC_REPORT_OUTPUT_DIR "${ARG_OUTPUT_DIR}") set(PSC_REPORT_LLVM_DIR "${ARG_LLVM_DIR}") set(PSC_REPORT_CPPCHECK_DIR "${ARG_CPPCHECK_DIR}") set(PSC_REPORT_LIZARD_DIR "${ARG_LIZARD_DIR}") set(PSC_REPORT_CODE_COUNT_DIR "${ARG_CODE_COUNT_DIR}") set(PSC_REPORT_COUPLING_DIR "${ARG_COUPLING_DIR}") set(PSC_REPORT_PROJECT_NAME "${ARG_PROJECT_NAME}") set(script_dir "${CMAKE_CURRENT_BINARY_DIR}/psc_metrics_scripts/${target_name}") file(MAKE_DIRECTORY "${script_dir}") set(script "${script_dir}/${target_name}_report.ps1") configure_file("${CMAKE_CURRENT_FUNCTION_LIST_DIR}/Report.ps1.in" "${script}" @ONLY) add_custom_target(${target_name} COMMAND pwsh -NoProfile -ExecutionPolicy Bypass -File "${script}" DEPENDS ${ARG_DEPENDS} VERBATIM ) set(${target_name}_OUTPUT_DIR "${ARG_OUTPUT_DIR}" PARENT_SCOPE) endfunction()