]>
Commit | Line | Data |
---|---|---|
e969a926 | 1 | # -*- mode: cmake -*- |
2 | ||
3 | # - Find IRST Code Analysis Tool (RuleChecker) | |
4 | # Finds if the RuleChecker is installed and sets the following variables: | |
5 | # | |
6 | # RULE_CHECKER_FOUND = Boolean defining if Rule Checker is available | |
3314debd | 7 | # RULE_CHECKER_SRCML = PATH TO src2srcml executable |
8 | # RULE_CHECKER_JAVA = PATH TO java executable | |
9 | # RULE_CHECKER_JAR = PATH TO NewRuleChecker.jar | |
10 | # RULE_CHECKER_RULES = Rules (defaults to ALICE rules!) | |
e969a926 | 11 | |
12 | # We suppose that perl and java are present and working | |
3314debd | 13 | Find_Program(RULE_CHECKER_SRCML src2srcml $ENV{PATH}) |
14 | Find_Program(RULE_CHECKER_JAVA java $ENV{PATH}) | |
15 | #Message(STATUS "${RULE_CHECKER_SRCML} ${RULE_CHECKER_JAVA}") | |
16 | Set(RULE_CHECKER_FOUND NO) | |
17 | If(RULE_CHECKER_SRCML AND RULE_CHECKER_JAVA) | |
18 | Find_File(RULE_CHECKER_JAR NAMES NewRuleChecker.jar PATHS $ENV{ALICE}/local/ALICENewRuleChecker/NewRuleChecker) | |
19 | Find_File(RULE_CHECKER_RULES AliceCodingConventions.xml $ENV{ALICE}/local/ALICENewRuleChecker/NewRuleChecker/config) | |
20 | #Message(STATUS "${RULE_CHECKER_JAR} ${RULE_CHECKER_RULES}") | |
21 | If(RULE_CHECKER_JAR AND RULE_CHECKER_RULES) | |
22 | Set(RULE_CHECKER_FOUND YES) | |
23 | Message(STATUS "RuleChecker installed on this system") | |
24 | EndIf(RULE_CHECKER_JAR AND RULE_CHECKER_RULES) | |
25 | EndIf(RULE_CHECKER_SRCML AND RULE_CHECKER_JAVA) | |
26 | If(NOT RULE_CHECKER_FOUND) | |
e969a926 | 27 | Message(STATUS "RuleChecker not installed on this system") |
3314debd | 28 | EndIf(NOT RULE_CHECKER_FOUND) |
e969a926 | 29 | |
3314debd | 30 | #______________________________________________________________________________________________________________ |
e969a926 | 31 | Function(CheckViols LIB SRCS) |
32 | ||
84641bd5 | 33 | If(RULE_CHECKER_FOUND) |
34 | Set(_FactExt $ENV{ALICE}/local/ALICENewRuleChecker/FactExtractor/FactExtractor.jar) | |
3314debd | 35 | Set(_RuleCheck ${RULE_CHECKER_JAR}) |
84641bd5 | 36 | |
37 | String(REGEX MATCHALL "[^ ]*.cxx" CXXSRCS "${SRCS}") | |
3314debd | 38 | |
f34fe1f8 | 39 | Set(_checkDir "${CMAKE_CURRENT_BINARY_DIR}/check") |
84641bd5 | 40 | |
41 | If(NOT EXISTS ${_checkDir}) | |
42 | File(MAKE_DIRECTORY ${_checkDir}) | |
43 | EndIf(NOT EXISTS ${_checkDir}) | |
44 | ||
45 | Set(_inc_dirs) | |
46 | Foreach(_dir ${INCLUDE_DIRECTORIES}) | |
47 | Set(_inc_dirs ${_inc_dirs} -I${_dir}) | |
48 | EndForeach(_dir ${INCLUDE_DIRECTORIES}) | |
49 | ||
50 | Set(VIOLS) | |
51 | Foreach(_checkFile ${CXXSRCS}) | |
52 | Get_Filename_Component(_checkFilePath ${_checkFile} PATH) | |
53 | If(NOT EXISTS ${_checkDir}/${_checkFilePath}) | |
54 | File(MAKE_DIRECTORY ${_checkDir}/${_checkFilePath}) | |
55 | EndIf(NOT EXISTS ${_checkDir}/${_checkFilePath}) | |
56 | String(REGEX REPLACE "([^;]*).cxx" "${_checkDir}/\\1.cxx.xml" _srcxml "${_checkFile}") | |
57 | String(REGEX REPLACE "([^;]*).cxx" "${_checkDir}/\\1.h.xml" _hdrxml "${_checkFile}") | |
3314debd | 58 | String(REGEX REPLACE "([^;]*).cxx" "${_checkDir}/\\1.viol" _violFile "${_checkFile}") |
84641bd5 | 59 | String(REGEX REPLACE "([^;]*).cxx" "\\1.h" _checkHead "${_checkFile}") |
f34fe1f8 | 60 | get_filename_component(_cxxFile ${_checkFile} ABSOLUTE) |
61 | string(REGEX REPLACE "([^;]*).cxx" "\\1.h" _hFile "${_cxxFile}") | |
62 | if(EXISTS ${_cxxFile} AND NOT EXISTS ${_hFile}) | |
63 | Add_Custom_Command( | |
64 | OUTPUT ${_violFile} | |
65 | COMMAND src2srcml | |
66 | ARGS ${CMAKE_CURRENT_SOURCE_DIR}/${_checkFile} ${_srcxml} | |
67 | COMMAND java -jar | |
68 | ARGS ${_FactExt} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} | |
69 | COMMAND java -Xmx500m -jar ${RULE_CHECKER_JAR} | |
70 | ARGS ${_srcxml} ${_hdrxml} ${CMAKE_CURRENT_SOURCE_DIR}/factFile.xml ${RULE_CHECKER_RULES} > ${_violFile} | |
71 | DEPENDS ${_checkFile} | |
72 | WORKING_DIRECTORY ${_checkDir}) | |
73 | elseif(EXISTS ${_hFile} AND NOT EXISTS ${_cxxFile}) | |
74 | Add_Custom_Command( | |
75 | OUTPUT ${_violFile} | |
76 | COMMAND src2srcml | |
77 | ARGS ${CMAKE_CURRENT_SOURCE_DIR}/${_checkHead} ${_hdrxml} | |
78 | COMMAND java -jar | |
79 | ARGS ${_FactExt} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} | |
80 | COMMAND java -Xmx500m -jar ${RULE_CHECKER_JAR} | |
81 | ARGS ${_srcxml} ${_hdrxml} ${CMAKE_CURRENT_SOURCE_DIR}/factFile.xml ${RULE_CHECKER_RULES} > ${_violFile} | |
82 | DEPENDS ${_checkHead} | |
83 | WORKING_DIRECTORY ${_checkDir}) | |
84 | else() | |
85 | Add_Custom_Command( | |
86 | OUTPUT ${_violFile} | |
87 | COMMAND src2srcml | |
88 | ARGS ${CMAKE_CURRENT_SOURCE_DIR}/${_checkFile} ${_srcxml} | |
89 | COMMAND src2srcml | |
90 | ARGS ${CMAKE_CURRENT_SOURCE_DIR}/${_checkHead} ${_hdrxml} | |
91 | COMMAND java -jar | |
92 | ARGS ${_FactExt} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} | |
93 | COMMAND java -Xmx500m -jar ${RULE_CHECKER_JAR} | |
94 | ARGS ${_srcxml} ${_hdrxml} ${CMAKE_CURRENT_SOURCE_DIR}/factFile.xml ${RULE_CHECKER_RULES} > ${_violFile} | |
95 | DEPENDS ${_checkFile} ${_checkHead} | |
96 | WORKING_DIRECTORY ${_checkDir}) | |
97 | endif(EXISTS ${_cxxFile} AND NOT EXISTS ${_hFile}) | |
84641bd5 | 98 | Set(VIOLS ${VIOLS} ${_violFile}) |
99 | EndForeach(_checkFile ${CXXSRCS}) | |
100 | ||
101 | Add_Custom_Target(check-${LIB} DEPENDS ${VIOLS}) | |
102 | Add_Dependencies(check-all check-${LIB}) | |
103 | ||
104 | EndIf(RULE_CHECKER_FOUND) | |
105 | ||
3314debd | 106 | EndFunction (CheckViols) |
84641bd5 | 107 |