]> git.uio.no Git - u/mrichter/AliRoot.git/blame - cmake/modules/FindRuleChecker.cmake
fixed bugs with the rule checker.
[u/mrichter/AliRoot.git] / cmake / modules / FindRuleChecker.cmake
CommitLineData
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 13Find_Program(RULE_CHECKER_SRCML src2srcml $ENV{PATH})
14Find_Program(RULE_CHECKER_JAVA java $ENV{PATH})
15#Message(STATUS "${RULE_CHECKER_SRCML} ${RULE_CHECKER_JAVA}")
16Set(RULE_CHECKER_FOUND NO)
17If(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)
25EndIf(RULE_CHECKER_SRCML AND RULE_CHECKER_JAVA)
26If(NOT RULE_CHECKER_FOUND)
e969a926 27 Message(STATUS "RuleChecker not installed on this system")
3314debd 28EndIf(NOT RULE_CHECKER_FOUND)
e969a926 29
3314debd 30#______________________________________________________________________________________________________________
e969a926 31Function(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 106EndFunction (CheckViols)
84641bd5 107