3 # - Find IRST Code Analysis Tool (RuleChecker)
4 # Finds if the RuleChecker is installed and sets the following variables:
6 # RULE_CHECKER_FOUND = Boolean defining if Rule Checker is available
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!)
12 # We suppose that perl and java are present and working
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)
27 Message(STATUS "RuleChecker not installed on this system")
28 EndIf(NOT RULE_CHECKER_FOUND)
30 #______________________________________________________________________________________________________________
31 Function(CheckViols LIB SRCS)
33 If(RULE_CHECKER_FOUND)
34 Set(_FactExt $ENV{ALICE}/local/ALICENewRuleChecker/FactExtractor/FactExtractor.jar)
35 Set(_RuleCheck ${RULE_CHECKER_JAR})
37 String(REGEX MATCHALL "[^ ]*.cxx" CXXSRCS "${SRCS}")
39 Set(_checkDir "${CMAKE_CURRENT_BINARY_DIR}/check")
41 If(NOT EXISTS ${_checkDir})
42 File(MAKE_DIRECTORY ${_checkDir})
43 EndIf(NOT EXISTS ${_checkDir})
46 Foreach(_dir ${INCLUDE_DIRECTORIES})
47 Set(_inc_dirs ${_inc_dirs} -I${_dir})
48 EndForeach(_dir ${INCLUDE_DIRECTORIES})
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}")
58 String(REGEX REPLACE "([^;]*).cxx" "${_checkDir}/\\1.viol" _violFile "${_checkFile}")
59 String(REGEX REPLACE "([^;]*).cxx" "\\1.h" _checkHead "${_checkFile}")
60 get_filename_component(_cxxFile ${_checkFile} ABSOLUTE)
61 string(REGEX REPLACE "([^;]*).cxx" "\\1.h" _hFile "${_cxxFile}")
62 if(EXISTS ${_cxxFile} AND NOT EXISTS ${_hFile})
66 ARGS ${CMAKE_CURRENT_SOURCE_DIR}/${_checkFile} ${_srcxml}
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}
72 WORKING_DIRECTORY ${_checkDir})
73 elseif(EXISTS ${_hFile} AND NOT EXISTS ${_cxxFile})
77 ARGS ${CMAKE_CURRENT_SOURCE_DIR}/${_checkHead} ${_hdrxml}
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}
83 WORKING_DIRECTORY ${_checkDir})
88 ARGS ${CMAKE_CURRENT_SOURCE_DIR}/${_checkFile} ${_srcxml}
90 ARGS ${CMAKE_CURRENT_SOURCE_DIR}/${_checkHead} ${_hdrxml}
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})
98 Set(VIOLS ${VIOLS} ${_violFile})
99 EndForeach(_checkFile ${CXXSRCS})
101 Add_Custom_Target(check-${LIB} DEPENDS ${VIOLS})
102 Add_Dependencies(check-all check-${LIB})
104 EndIf(RULE_CHECKER_FOUND)
106 EndFunction (CheckViols)