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_PATH = Path to the java class containing the ALICE Rule Checker
8 # RULE_CHECKER = Rules (defaults to ALICE rules!)
9 # RULE_CHECKER_PATCH = Perl script to be executed to patch preprocessor files
12 # We suppose that perl and java are present and working
14 Find_File(RULE_CHECKER_PATCH patch4alice.prl
15 /usr/local/IRST/patch ${ALICE}/local/IRST/patch /opt/IRST/patch)
17 If(RULE_CHECKER_PATCH)
18 Set(RULE_CHECKER_FOUND YES)
19 Set(RULE_CHECKER rules.ALICE.ALICERuleChecker)
20 String(REPLACE "/patch/patch4alice.prl" ""
21 RULE_CHECKER_PATH "${RULE_CHECKER_PATCH}")
23 Else(RULE_CHECKER_PATCH)
24 Set(RULE_CHECKER_FOUND NO)
25 Message(STATUS "RuleChecker not installed on this system")
27 EndIf(RULE_CHECKER_PATCH)
30 #_______________________________________________________________________________
31 Function(CheckViols LIB SRCS)
33 If(RULE_CHECKER_FOUND)
34 String(REGEX MATCHALL "[^ ]*.cxx" CXXSRCS "${SRCS}")
36 Set(_checkDir "${CMAKE_CURRENT_BINARY_DIR}/check")
38 If(NOT EXISTS ${_checkDir})
39 File(MAKE_DIRECTORY ${_checkDir})
40 EndIf(NOT EXISTS ${_checkDir})
43 Foreach(_dir ${INCLUDE_DIRECTORIES})
44 Set(_inc_dirs ${_inc_dirs} -I${_dir})
45 EndForeach(_dir ${INCLUDE_DIRECTORIES})
48 Foreach(_checkFile ${CXXSRCS})
49 Get_Filename_Component(_checkFilePath ${_checkFile} PATH)
50 If(NOT EXISTS ${_checkDir}/${_checkFilePath})
51 File(MAKE_DIRECTORY ${_checkDir}/${_checkFilePath})
52 EndIf(NOT EXISTS ${_checkDir}/${_checkFilePath})
53 String(REGEX REPLACE "([^;]*).cxx" "${_checkDir}/\\1.viol" _violFile "${_checkFile}")
54 String(REGEX REPLACE "([^;]*).cxx" "\\1.i" _tempFile_in ${_checkFile})
57 COMMAND ${CMAKE_CXX_COMPILER}
58 ARGS -E ${CMAKE_CXX_FLAGS} ${_inc_dirs} -I. ${CMAKE_CURRENT_SOURCE_DIR}/${_checkFile} > ${_tempFile_in}
59 COMMAND ${RULE_CHECKER_PATCH} ARGS ${_tempFile_in}
60 COMMAND CLASSPATH=${RULE_CHECKER_PATH} java ${RULE_CHECKER}
61 ARGS ${_tempFile_in} ${CMAKE_CURRENT_SOURCE_DIR} > ${_violFile}
63 WORKING_DIRECTORY ${_checkDir})
64 Set(VIOLS ${VIOLS} ${_violFile})
65 EndForeach(_checkFile ${CXXSRCS})
67 Add_Custom_Target(check-${LIB} DEPENDS ${VIOLS})
68 Add_Dependencies(check-all check-${LIB})
70 EndIf(RULE_CHECKER_FOUND)
72 EndFunction (CheckViols)
74 #_______________________________________________________________________________
75 Function(CheckViolsNew LIB SRCS)
77 If(RULE_CHECKER_FOUND)
78 Set(_FactExt $ENV{ALICE}/local/ALICENewRuleChecker/FactExtractor/FactExtractor.jar)
79 Set(_RuleCheck $ENV{ALICE}/local/ALICENewRuleChecker/NewRuleChecker/NewRuleChecker.jar)
81 String(REGEX MATCHALL "[^ ]*.cxx" CXXSRCS "${SRCS}")
83 Set(_checkDir "${CMAKE_CURRENT_BINARY_DIR}/check_new")
85 If(NOT EXISTS ${_checkDir})
86 File(MAKE_DIRECTORY ${_checkDir})
87 EndIf(NOT EXISTS ${_checkDir})
90 Foreach(_dir ${INCLUDE_DIRECTORIES})
91 Set(_inc_dirs ${_inc_dirs} -I${_dir})
92 EndForeach(_dir ${INCLUDE_DIRECTORIES})
95 Foreach(_checkFile ${CXXSRCS})
96 Get_Filename_Component(_checkFilePath ${_checkFile} PATH)
97 If(NOT EXISTS ${_checkDir}/${_checkFilePath})
98 File(MAKE_DIRECTORY ${_checkDir}/${_checkFilePath})
99 EndIf(NOT EXISTS ${_checkDir}/${_checkFilePath})
100 String(REGEX REPLACE "([^;]*).cxx" "${_checkDir}/\\1.cxx.xml" _srcxml "${_checkFile}")
101 String(REGEX REPLACE "([^;]*).cxx" "${_checkDir}/\\1.h.xml" _hdrxml "${_checkFile}")
102 String(REGEX REPLACE "([^;]*).cxx" "${_checkDir}/\\1.h.viol" _violFile "${_checkFile}")
103 String(REGEX REPLACE "([^;]*).cxx" "\\1.h" _checkHead "${_checkFile}")
107 ARGS ${CMAKE_CURRENT_SOURCE_DIR}/${_checkFile} ${_srcxml}
109 ARGS ${CMAKE_CURRENT_SOURCE_DIR}/${_checkHead} ${_hdrxml}
111 ARGS -jar ${_FactExt}
112 COMMAND ${RULE_CHECKER_PATCH} ARGS ${_tempFile_in}
113 COMMAND CLASSPATH=${RULE_CHECKER_PATH} java ${RULE_CHECKER}
114 ARGS ${_tempFile_in} ${CMAKE_CURRENT_SOURCE_DIR} > ${_violFile}
115 DEPENDS ${_checkFile}
116 WORKING_DIRECTORY ${_checkDir})
117 Set(VIOLS ${VIOLS} ${_violFile})
118 EndForeach(_checkFile ${CXXSRCS})
120 Add_Custom_Target(check-${LIB} DEPENDS ${VIOLS})
121 Add_Dependencies(check-all check-${LIB})
123 EndIf(RULE_CHECKER_FOUND)
125 EndFunction (CheckViolsNew)