]> git.uio.no Git - u/mrichter/AliRoot.git/blob - cmake/FindRuleChecker.cmake
4843427b339252e8707259eb17765e70e2c7917f
[u/mrichter/AliRoot.git] / cmake / FindRuleChecker.cmake
1 # AliRoot Build System Module to find and configure IRST ALICE Coding Coventions RuleChecker
2 #
3 # Author: Johny Jose (johny.jose@cern.ch)
4 #         Port of previous Makefile build to cmake
5
6 cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
7
8 find_program(RULECHECKER_SRCML NAMES src2srcml)
9 message(STATUS "Check for src2srcml: ${RULECHECKER_SRCML}")
10 find_package(Java)
11 message(STATUS "Check for Java: ${JAVA_RUNTIME}")
12
13 set(IRST_INSTALLDIR $ENV{IRST_INSTALLDIR})
14 if(NOT IRST_INSTALLDIR)
15   if(ALICE)
16     message(STATUS "Setting IRST_INSTALLDIR to ${ALICE}/local/ALICENewRuleChecker")
17     set(IRST_INSTALLDIR ${ALICE}/local/ALICENewRuleChecker)
18   endif(ALICE)
19 endif(NOT IRST_INSTALLDIR)
20
21 if(IRST_INSTALLDIR)
22   find_file(RULECHECKER_JAR NAMES NewRuleChecker.jar PATHS ${IRST_INSTALLDIR}/NewRuleChecker)
23   find_file(RULECHECKER_RULES NAMES CodingConventions.xml PATHS ${IRST_INSTALLDIR}/NewRuleChecker/config)
24   find_file(FACTEXTRACTOR_JAR NAME FactExtractor.jar PATHS ${IRST_INSTALLDIR}/FactExtractor)
25   if(RULECHECKER_JAR AND RULECHECKER_RULES AND RULECHECKER_SRCML AND JAVA_RUNTIME)
26     set(RULECHECKER_FOUND TRUE)
27     message(STATUS "RuleChecker found on the system")
28   else()
29     message(STATUS "RuleChecker not found on this system")
30   endif(RULECHECKER_JAR AND RULECHECKER_RULES AND RULECHECKER_SRCML AND JAVA_RUNTIME)
31 else()
32   message(STATUS "RuleChecker not found on this system")
33 endif(IRST_INSTALLDIR)
34
35 macro(ALICE_CheckModule)
36   if(RULECHECKER_FOUND)
37     set(CHECKDIR ${CMAKE_BINARY_DIR}/${MODULE}/check)
38     set(violFiles)
39     add_custom_command( OUTPUT ${MODULE}-${PACKAGE}-factFile
40                         COMMAND ${CMAKE_COMMAND} -E make_directory ${CHECKDIR}
41                         COMMAND ${CMAKE_COMMAND} -E make_directory ${CHECKDIR}/viols
42                         COMMAND ${JAVA_RUNTIME} -jar ${FACTEXTRACTOR_JAR} ${CHECKDIR} ${CHECKDIR} 
43                         WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
44
45     foreach(_srcfile ${SRCS})
46       string (REGEX REPLACE "cxx$" "h" _header ${_srcfile})
47       get_filename_component(_srcname ${_srcfile} NAME)
48       string (REGEX REPLACE "cxx$" "viol" _viol ${_srcname})
49       string (REGEX REPLACE "cxx$" "cxx.xml" _srcxml ${_srcname})
50       string (REGEX REPLACE "cxx$" "h.xml" _hxml ${_srcname})
51       string (REGEX REPLACE ".cxx$" "" _class ${_srcname})
52       set(_depends ${_srcfile} ${MODULE}-${PACKAGE}-factFile)
53
54       if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${_header})
55         list(APPEND depends ${_header})
56         add_custom_command( OUTPUT ${_viol}
57                           COMMAND ${RULECHECKER_SRCML} ${_srcfile} ${CHECKDIR}/${_srcxml}
58                           COMMAND ${RULECHECKER_SRCML} ${_header} ${CHECKDIR}/${_hxml}
59                           COMMAND ${JAVA_RUNTIME} -jar ${RULECHECKER_JAR} ${CHECKDIR}/${_srcxml} ${CHECKDIR}/${_hxml} ${CHECKDIR}/factFile.xml ${RULECHECKER_RULES} > ${CHECKDIR}/viols/${_viol}
60                           DEPENDS ${_depends}
61                           WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
62         list(APPEND violFiles ${_viol})
63       else()
64         add_custom_command( OUTPUT ${_viol}
65                           COMMAND ${RULECHECKER_SRCML} ${_srcfile} ${CHECKDIR}/${_srcxml}
66                           COMMAND ${JAVA_RUNTIME} -jar ${RULECHECKER_JAR} ${CHECKDIR}/${_srcxml} ${CHECKDIR}/${_hxml} ${CHECKDIR}/factFile.xml ${RULECHECKER_RULES} > ${CHECKDIR}/viols/${_viol}
67                           DEPENDS ${_depends}
68                           WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
69         list(APPEND violFiles ${_viol})
70       endif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${_header})
71       if(CLASSCHECK STREQUAL "YES")
72         add_custom_target(${MODULE}-${_class}-check DEPENDS ${_viol})
73       endif(CLASSCHECK STREQUAL "YES")
74     endforeach(_srcfile ${SRCS})
75     if(violFiles)
76       add_custom_target(${PACKAGE}-check DEPENDS ${violFiles})
77       add_dependencies(${PACKAGE}-check ${violFiles})
78       add_dependencies(${MODULE}-check-all ${PACKAGE}-check)
79     endif(violFiles)
80     add_custom_command(TARGET clean
81                        COMMAND ${CMAKE_COMMAND} -E remove_directory ${CHECKDIR})
82
83   endif(RULECHECKER_FOUND)
84 endmacro(ALICE_CheckModule)
85