]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - cmake/FindRuleChecker.cmake
- changes for QA part of standard GG task
[u/mrichter/AliRoot.git] / cmake / FindRuleChecker.cmake
index 64a78b02d26c558f14b41fcc6176eba202f3bf0d..bd2e4ba456f322a3b16bec23e188240bdbc605b1 100644 (file)
@@ -5,60 +5,50 @@
 # Author: Johny Jose (johny.jose@cern.ch)
 #         Port of previous Makefile build to cmake
 
-cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
+cmake_minimum_required(VERSION 2.8.4 FATAL_ERROR)
 
 find_program(RULECHECKER_SRCML NAMES src2srcml)
 message(STATUS "Check for src2srcml: ${RULECHECKER_SRCML}")
 find_package(Java)
 message(STATUS "Check for Java: ${JAVA_RUNTIME}")
 
-set(IRST_INSTALLDIR $ENV{IRST_INSTALLDIR})
-if(NOT IRST_INSTALLDIR)
-  if(ALICE)
-    message(STATUS "Setting IRST_INSTALLDIR to ${ALICE}/local/ALICENewRuleChecker")
-    set(IRST_INSTALLDIR ${ALICE}/local/ALICENewRuleChecker)
-  endif(ALICE)
-endif(NOT IRST_INSTALLDIR)
-
-if(IRST_INSTALLDIR)
-  find_file(RULECHECKER_JAR NAMES NewRuleChecker.jar PATHS ${IRST_INSTALLDIR}/NewRuleChecker NO_DEFAULT_PATH)
-  find_file(RULECHECKER_RULES NAMES CodingConventions.xml PATHS ${IRST_INSTALLDIR}/NewRuleChecker/config NO_DEFAULT_PATH)
-  find_file(FACTEXTRACTOR_JAR NAMES FactExtractor.jar PATHS ${IRST_INSTALLDIR}/FactExtractor NO_DEFAULT_PATH)
-  if(RULECHECKER_JAR AND RULECHECKER_RULES AND RULECHECKER_SRCML AND JAVA_RUNTIME)
-    set(RULECHECKER_FOUND TRUE)
-    message(STATUS "RuleChecker jar : ${RULECHECKER_JAR}")
-    message(STATUS "RuleChecker rules : ${RULECHECKER_RULES}")
-    message(STATUS "RuleChecker factextractor : ${FACTEXTRACTOR_JAR}")
-    message(STATUS "RuleChecker found on the system")
-
-    if(NOT EXISTS ${CMAKE_BINARY_DIR}/check-hxml-touchfile)
-      file(WRITE ${CMAKE_BINARY_DIR}/check-hxml-touchfile "Dummy dependency for factfile")
-    endif(NOT EXISTS ${CMAKE_BINARY_DIR}/check-hxml-touchfile)
-    set(FACTFILE ${CMAKE_BINARY_DIR}/factFile.xml)
-    set(_factfile_deps)
-
-    file(GLOB_RECURSE _root_headers  ${ROOTSYS}/include/*.h)
-    foreach(_root_header ${_root_headers})
-      if(NOT _root_header MATCHES ".*G__ci.h")
-       string (REGEX REPLACE "${ROOTSYS}/include/" "" _rel_root_header ${_root_header})
-       string (REGEX REPLACE "h$" "h.xml" _rel_root_hxml ${_rel_root_header})
-       get_filename_component(_rel_root_header_path ${_rel_root_hxml} PATH)
-       set(_root_hxml ${CMAKE_BINARY_DIR}/roothxml/${_rel_root_hxml})
-       if(NOT EXISTS ${CMAKE_BINARY_DIR}/roothxml/${_rel_root_header_path})
-         file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/roothxml/${_rel_root_header_path})
-       endif(NOT EXISTS ${CMAKE_BINARY_DIR}/roothxml/${_rel_root_header_path})
-       list(APPEND _factfile_deps ${_root_hxml})
-       add_custom_command(OUTPUT  ${_root_hxml}
-                           COMMAND ${RULECHECKER_SRCML} ${_root_header} ${_root_hxml}
-                           DEPENDS ${_root_header})
-      endif(NOT _root_header MATCHES ".*G__ci.h")
-    endforeach(_root_header ${_root_headers})
-  else()
-    message(STATUS "RuleChecker not found on this system")
-  endif(RULECHECKER_JAR AND RULECHECKER_RULES AND RULECHECKER_SRCML AND JAVA_RUNTIME)
+find_file(RULECHECKER_JAR   NAMES NewRuleChecker.jar    PATHS  ${CMAKE_SOURCE_DIR}/RuleChecker NO_DEFAULT_PATH)
+find_file(RULECHECKER_RULES NAMES CodingConventions.xml PATHS  ${CMAKE_SOURCE_DIR}/RuleChecker NO_DEFAULT_PATH)
+find_file(FACTEXTRACTOR_JAR NAMES FactExtractor.jar     PATHS  ${CMAKE_SOURCE_DIR}/RuleChecker NO_DEFAULT_PATH)
+find_file(SMELLDETECTOR_JAR NAMES SmellDetector.jar     PATHS  ${CMAKE_SOURCE_DIR}/RuleChecker NO_DEFAULT_PATH)
+if(RULECHECKER_JAR AND RULECHECKER_RULES AND RULECHECKER_SRCML AND JAVA_RUNTIME AND SMELLDETECTOR_JAR)
+  set(RULECHECKER_FOUND TRUE)
+  message(STATUS "RuleChecker jar :           ${RULECHECKER_JAR}")
+  message(STATUS "RuleChecker rules :         ${RULECHECKER_RULES}")
+  message(STATUS "RuleChecker factextractor : ${FACTEXTRACTOR_JAR}")
+  message(STATUS "RuleChecker smelldetector : ${SMELLDETECTOR_JAR}")
+  message(STATUS "RuleChecker found on the system")
+  
+  if(NOT EXISTS ${CMAKE_BINARY_DIR}/check-hxml-touchfile)
+    file(WRITE ${CMAKE_BINARY_DIR}/check-hxml-touchfile "Dummy dependency for factfile")
+  endif(NOT EXISTS ${CMAKE_BINARY_DIR}/check-hxml-touchfile)
+  set(FACTFILE ${CMAKE_BINARY_DIR}/factFile.xml)
+  set(_factfile_deps)
+  
+  file(GLOB_RECURSE _root_headers  ${ROOTSYS}/include/*.h)
+  foreach(_root_header ${_root_headers})
+    if(NOT _root_header MATCHES ".*G__ci.h")
+      string (REGEX REPLACE "${ROOTSYS}/include/" "" _rel_root_header ${_root_header})
+      string (REGEX REPLACE "h$" "h.xml" _rel_root_hxml ${_rel_root_header})
+      get_filename_component(_rel_root_header_path ${_rel_root_hxml} PATH)
+      set(_root_hxml ${CMAKE_BINARY_DIR}/roothxml/${_rel_root_hxml})
+      if(NOT EXISTS ${CMAKE_BINARY_DIR}/roothxml/${_rel_root_header_path})
+       file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/roothxml/${_rel_root_header_path})
+      endif(NOT EXISTS ${CMAKE_BINARY_DIR}/roothxml/${_rel_root_header_path})
+      list(APPEND _factfile_deps ${_root_hxml})
+      add_custom_command(OUTPUT  ${_root_hxml}
+        COMMAND ${RULECHECKER_SRCML} ${_root_header} -o ${_root_hxml}
+        DEPENDS ${_root_header})
+    endif(NOT _root_header MATCHES ".*G__ci.h")
+  endforeach(_root_header ${_root_headers})
 else()
   message(STATUS "RuleChecker not found on this system")
-endif(IRST_INSTALLDIR)
+endif(RULECHECKER_JAR AND RULECHECKER_RULES AND RULECHECKER_SRCML AND JAVA_RUNTIME AND SMELLDETECTOR_JAR)
 
 macro(ALICE_CheckModule)
   if(RULECHECKER_FOUND)
@@ -76,18 +66,21 @@ macro(ALICE_CheckModule)
     list(SORT _sources)
 
     set(_violfiles)
+    set(_smellfiles)
     set(_module_factfile_deps)
     foreach(_srcfile ${_sources})
-      if(NOT _srcfile MATCHES "^.*LinkDef$" AND NOT _srcfile MATCHES ".*PYTHIA8/pythia8.*")
+      if(NOT _srcfile MATCHES "^.*LinkDef$" AND NOT _srcfile MATCHES ".*PYTHIA8/pythia8.*" AND NOT _srcfile MATCHES "#.*" AND NOT _srcfile MATCHES ".*~")
        set(_violdeps)
        string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" _srcfile_short ${_srcfile})
        set(_viol ${CHECKDIR}/${_srcfile_short}.viol)
+       set(_smell ${CHECKDIR}/${_srcfile_short}.smell)
        get_filename_component(_viol_path ${_viol} PATH)
        list(APPEND _violfiles ${_viol})
+       list(APPEND _smellfiles ${_smell})
        if(EXISTS ${_srcfile}.h)
          add_custom_command(OUTPUT ${CHECKDIR}/${_srcfile_short}.h.xml
                             COMMAND ${CMAKE_COMMAND} -E make_directory ${_viol_path}
-                             COMMAND ${RULECHECKER_SRCML} ${_srcfile}.h ${CHECKDIR}/${_srcfile_short}.h.xml
+                             COMMAND ${RULECHECKER_SRCML} ${_srcfile}.h -o ${CHECKDIR}/${_srcfile_short}.h.xml
                             COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_BINARY_DIR}/check-hxml-touchfile
                             DEPENDS ${_srcfile}.h)
          list(APPEND _violdeps ${CHECKDIR}/${_srcfile_short}.h.xml)
@@ -96,29 +89,51 @@ macro(ALICE_CheckModule)
        if(EXISTS ${_srcfile}.cxx)
          add_custom_command(OUTPUT ${CHECKDIR}/${_srcfile_short}.cxx.xml
                             COMMAND ${CMAKE_COMMAND} -E make_directory ${_viol_path}
-                             COMMAND ${RULECHECKER_SRCML} ${_srcfile}.cxx ${CHECKDIR}/${_srcfile_short}.cxx.xml
+                             COMMAND ${RULECHECKER_SRCML} ${_srcfile}.cxx -o ${CHECKDIR}/${_srcfile_short}.cxx.xml
                             DEPENDS ${_srcfile}.cxx)
          list(APPEND _violdeps ${CHECKDIR}/${_srcfile_short}.cxx.xml)
        endif(EXISTS ${_srcfile}.cxx)
+       # message("Violations are ${_viol}")
        add_custom_command( OUTPUT ${_viol}
                             COMMAND ${JAVA_RUNTIME} -Xmx1024M -jar ${RULECHECKER_JAR} ${CHECKDIR}/${_srcfile_short}.cxx.xml ${CHECKDIR}/${_srcfile_short}.h.xml ${FACTFILE} ${RULECHECKER_RULES} > ${_viol}
                             DEPENDS ${_violdeps}
                             WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
-      endif(NOT _srcfile MATCHES "^.*LinkDef$" AND NOT _srcfile MATCHES ".*PYTHIA8/pythia8.*")
+       add_custom_command( OUTPUT ${_smell}
+                            COMMAND ${JAVA_RUNTIME} -Xmx1024M -jar ${SMELLDETECTOR_JAR} ${CHECKDIR}/${_srcfile_short}.cxx.xml ${CHECKDIR}/${_srcfile_short}.h.xml > ${_smell}
+                            DEPENDS ${_violdeps}
+                            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+      endif(NOT _srcfile MATCHES "^.*LinkDef$" AND NOT _srcfile MATCHES ".*PYTHIA8/pythia8.*" AND NOT _srcfile MATCHES "#.*" AND NOT _srcfile MATCHES ".*~")
     endforeach(_srcfile ${_sources})
 
-
     if(_violfiles)
-      add_custom_target(${MODULE}-check DEPENDS ${_violfiles})
-      add_dependencies(${MODULE}-check factfile)
-      add_dependencies(check-all ${MODULE}-check)
-
+      #
+      if(TARGET ${MODULE}-check)
+       message("Target ${MODULE}-check already exist, apparently created in nested CMakeLists. Skipping")
+      else()
+       add_custom_target(${MODULE}-check DEPENDS ${_violfiles})
+       add_dependencies(${MODULE}-check factfile)
+       add_dependencies(check-all ${MODULE}-check)     
+      endif(TARGET ${MODULE}-check)
+      #
+      if(TARGET ${MODULE}-smell)      
+       message("Target ${MODULE}-smell already exist, apparently created in nested CMakeLists. Skipping")
+      else()
+       add_custom_target(${MODULE}-smell DEPENDS ${_smellfiles})
+       add_dependencies(smell-all ${MODULE}-smell)     
+      endif(TARGET ${MODULE}-smell)
+      #
       if(_module_factfile_deps)
-       add_custom_target(${MODULE}-hxml DEPENDS ${_module_factfile_deps})
-       add_dependencies(check-hxml ${MODULE}-hxml)
+       #
+       if(TARGET ${MODULE}-hxml)
+         message("Target ${MODULE}-hxml already exist, apparently created in nested CMakeLists. Skipping")
+       else()
+         add_custom_target(${MODULE}-hxml DEPENDS ${_module_factfile_deps})
+         add_dependencies(check-hxml ${MODULE}-hxml)     
+       endif(TARGET ${MODULE}-hxml)
+       #
       endif(_module_factfile_deps)
     endif(_violfiles)
-
+    
 
   endif(RULECHECKER_FOUND)
 endmacro(ALICE_CheckModule)