X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=cmake%2FFindRuleChecker.cmake;h=bd2e4ba456f322a3b16bec23e188240bdbc605b1;hb=d9d6352b7810772cb825c103e462037bd98c14fd;hp=64a78b02d26c558f14b41fcc6176eba202f3bf0d;hpb=e93f6949ae9649824f74937f87f6dc4ba613996e;p=u%2Fmrichter%2FAliRoot.git diff --git a/cmake/FindRuleChecker.cmake b/cmake/FindRuleChecker.cmake index 64a78b02d26..bd2e4ba456f 100644 --- a/cmake/FindRuleChecker.cmake +++ b/cmake/FindRuleChecker.cmake @@ -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)