forked from WorldVistA/VistA
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCommonFunctions.cmake
112 lines (108 loc) · 4.81 KB
/
CommonFunctions.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#---------------------------------------------------------------------------
# Copyright 2011-2012 The Open Source Electronic Health Record Agent
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#---------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Define a function for parsing and reporting XINDEX output results
function(ReportXINDEXResult PACKAGE_NAME PACKAGES_DIR VENDOR_NAME GREP_EXEC OUTPUT USE_XINDEX_WARNINGS_AS_FAILURES)
if(USE_XINDEX_WARNINGS_AS_FAILURES)
set(FAILURE_CONDITION "F -|W -")
else()
set(FAILURE_CONDITION "F -")
endif()
set(test_passed TRUE)
if(ARGC GREATER 6)
set(source_flag TRUE)
endif()
string(REPLACE "_" " " PACKAGE_NAME ${PACKAGE_NAME})
foreach (line ${OUTPUT})
# the XINDEX will always check the integrity of the routine using checksum
if(line MATCHES "^[A-Z0-9][^ ]+ +\\* \\* .*[cC]hecksum:.*")
string(REGEX MATCH "^[A-Z0-9]+[^ ]" routine_name "${line}")
elseif(line MATCHES ${FAILURE_CONDITION})
# also assume the file name is ${PACKAGE_NAME}.${routinename}
set(ExceptionFound FALSE)
if (EXISTS ${PACKAGES_DIR}/${PACKAGE_NAME}/XINDEXException/${VENDOR_NAME}.${routine_name})
file(STRINGS ${PACKAGES_DIR}/${PACKAGE_NAME}/XINDEXException/${VENDOR_NAME}.${routine_name} ExceptionList)
foreach (Exception ${ExceptionList})
string(STRIP "${line}" newline)
# this is quite stricty to ensure the text is the exactly the same
if ("${Exception}" STREQUAL "${newline}")
set(ExceptionFound TRUE)
break()
endif()
endforeach()
endif()
if (NOT ExceptionFound)
string(REGEX MATCH ^\ \ \ [A-Z]+ tag ${line})
message("${routine_name} in package ${PACKAGE_NAME}:\n${line}")
if(tag AND GREP_EXEC AND source_flag)
string(REGEX MATCH "\\+[0-9]+" position ${line})
string(STRIP ${tag} tag)
execute_process(COMMAND ${GREP_EXEC} -n -h ^${tag}
"${ARGV6}/Packages/${PACKAGE_NAME}/Routines/${routine_name}.m"
OUTPUT_VARIABLE linematch)
if(linematch)
string(REGEX MATCH ^[0-9]+ linenumber ${linematch})
math(EXPR errorposition ${linenumber}${position})
message("Error is found in ${routine_name}.m on line: ${errorposition}\n")
endif()
endif()
set(test_passed FALSE)
endif()
endif()
endforeach()
if(test_passed)
string(REPLACE ";" "\n" OUTPUT "${OUTPUT}")
message("${PACKAGE_NAME} Passed:\n${OUTPUT}")
else()
message(FATAL_ERROR "${PACKAGE_NAME} has XINDEX Errors")
endif()
endfunction()
# Define a function for parsing and reporting munit output results
function(ReportUnitTestResult PACKAGE_NAME DIRNAME OUTPUT)
set(test_passed TRUE)
foreach (line ${OUTPUT})
if(line MATCHES "^[^\\^]+>D \\^ZZUT[A-Z0-9]+")
string(REGEX MATCH "ZZUT[A-Z0-9]+$" routine_name "${line}")
elseif(line MATCHES "^ ?[^\\^]+\\^ZZUT[A-Z0-9]+")
message("${routine_name}: ${line}")
set(test_passed FALSE)
elseif(line MATCHES "^ ?Checked.*, with [1-9]+ failure")
message("${routine_name} in package ${PACKAGE_NAME}:\n${line}")
set(test_passed FALSE)
elseif(line MATCHES "encountered [1-9]+ error")
message("M Error(s) encountered in ${routine_name} in package ${PACKAGE_NAME}")
set(test_passed FALSE)
endif()
endforeach()
if(test_passed)
string(REPLACE ";" "\n" OUTPUT "${OUTPUT}")
message("${PACKAGE_NAME} Passed:\n${OUTPUT}")
else()
message(FATAL_ERROR "${PACKAGE_NAME} unit test Errors")
endif()
endfunction()
function(FindPackages SOURCE_DIR)
file(STRINGS "${SOURCE_DIR}/Packages.csv" packages_csv REGEX "^[^,]")
list(REMOVE_AT packages_csv 0) # skip column label row
foreach(packages_csv_output IN LISTS packages_csv)
if(packages_csv_output MATCHES "^[^,]+,([^,]+),")
set(package_directory_name "${CMAKE_MATCH_1}")
string(REPLACE " " "_" package_directory_name_clean "${package_directory_name}")
list(APPEND packages_tmp ${package_directory_name_clean})
endif()
endforeach()
set(PACKAGES ${packages_tmp} PARENT_SCOPE)
endfunction()