From c2a2c0b8a8eaa02ee9187d5a5fdffc3672e0c03a Mon Sep 17 00:00:00 2001 From: jjose Date: Fri, 5 Nov 2010 13:46:56 +0000 Subject: [PATCH] Integrated New Rule Checker with the CMake Build --- CMakeLists.txt | 6 +++-- README_CMake | 8 ++++++ cmake/ALICE_CMake.cmake | 2 +- cmake/FindRuleChecker.cmake | 53 ++++++++++++++++++++++++++++++++++--- 4 files changed, 63 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1a08b5dc30f..0653fa62f68 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -114,7 +114,7 @@ set(BINLIBDIRS "-L${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") # Standard Modules # ------------------------------ -set(ALIROOTMODULES STEER PHOS TRD TPC ZDC MUON PMD FMD TOF ITS ACORDE HMPID T0 BCM STRUCT VZERO THijing THbtp EMCAL THerwig TEPEMGEN FASTSIM TPHIC RAW MONITOR ANALYSIS JETAN HLT LHC ESDCheck STAT TTherminator CORRFW DPMJET TDPMjet PWG0 PWG1 PWG2 PWG3 PWG4 TRIGGER PYTHIA8 ) +set(ALIROOTMODULES STEER PHOS TRD TPC ZDC MUON PMD FMD TOF ITS ACORDE HMPID T0 BCM STRUCT VZERO THijing THbtp EMCAL THerwig TEPEMGEN FASTSIM TPHIC RAW MONITOR ANALYSIS JETAN HLT LHC ESDCheck STAT TTherminator CORRFW DPMJET TDPMjet PWG0 PWG1 PWG2 PWG3 PWG4 TRIGGER PYTHIA8 TAmpt ) if(THydjet) list(APPEND ALIROOTMODULES THydjet) @@ -190,7 +190,7 @@ set(EXPORTFILES) add_custom_target(alilibs-static) add_custom_target(include-headers) add_custom_target(DA-all) - +add_custom_target(check-all) # Add Modules # ------------------------------ @@ -198,6 +198,8 @@ foreach(MODULE ${MODDIRS}) set(${MODULE}ALIBS) configure_file(${PROJECT_SOURCE_DIR}/cmake/Module.tmp ${PROJECT_SOURCE_DIR}/${MODULE}/CMakeLists.txt @ONLY) add_custom_target(${MODULE}-all ALL) + add_custom_target(${MODULE}-check-all) + add_dependencies(check-all "${MODULE}-check-all") add_custom_target(${MODULE}-all-static) add_dependencies(alilibs-static "${MODULE}-static") add_subdirectory(${MODULE}) diff --git a/README_CMake b/README_CMake index ad517e09dbc..a4a7f6b4ccc 100644 --- a/README_CMake +++ b/README_CMake @@ -42,6 +42,14 @@ eg. make STEER-all STEER-all-static eg. make STEERbase STEERbase-static +8. The code can be checked for the ALICE coding conventions on a package or module level using the following targets. + + make check-all + make -check-all + make -check + + The resulting violations will be written to the folder $ALICE_ROOT//check/viols + !IMPORTANT! - Make sure your source folder is clean. If you used the old make system to build aliroot run make clean in the source directory before you run cmake diff --git a/cmake/ALICE_CMake.cmake b/cmake/ALICE_CMake.cmake index b75fc856589..aff924a9a7d 100644 --- a/cmake/ALICE_CMake.cmake +++ b/cmake/ALICE_CMake.cmake @@ -327,7 +327,6 @@ macro(ALICE_BuildPackage) message(STATUS "No dictionary generated for ${PACKAGE}") endif(lib) endif(WITHDICT) - if(PS OR PCS OR PFS) if(lib) ALICE_BuildLibrary() @@ -335,6 +334,7 @@ macro(ALICE_BuildPackage) ALICE_BuildExecutable() endif(lib) endif(PS OR PCS OR PFS) + ALICE_CheckModule() endmacro(ALICE_BuildPackage) diff --git a/cmake/FindRuleChecker.cmake b/cmake/FindRuleChecker.cmake index e56317f0474..5a170a3f84c 100644 --- a/cmake/FindRuleChecker.cmake +++ b/cmake/FindRuleChecker.cmake @@ -13,14 +13,15 @@ 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/IRST") + 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}) - find_file(RULECHECKER_RULES NAMES AliceCodingConventions.xml PATHS ${IRST_INSTALLDIR}) + find_file(RULECHECKER_JAR NAMES NewRuleChecker.jar PATHS ${IRST_INSTALLDIR}/NewRuleChecker) + find_file(RULECHECKER_RULES NAMES AliceCodingConventions.xml PATHS ${IRST_INSTALLDIR}/NewRuleChecker/config) + find_file(FACTEXTRACTOR_JAR NAME FactExtractor.jar PATHS ${IRST_INSTALLDIR}/FactExtractor) if(RULECHECKER_JAR AND RULECHECKER_RULES AND RULECHECKER_SRCML AND JAVA_RUNTIME) set(RULECHECKER_FOUND TRUE) message(STATUS "RuleChecker found on the system") @@ -31,3 +32,49 @@ else() message(STATUS "RuleChecker not found on this system") endif(IRST_INSTALLDIR) +macro(ALICE_CheckModule) + if(RULECHECKER_FOUND) + set(CHECKDIR ${ALICE_ROOT}/${MODULE}/check) + set(violFiles) + foreach(_srcfile ${SRCS}) + string (REGEX REPLACE "cxx$" "h" _header ${_srcfile}) + get_filename_component(_srcname ${_srcfile} NAME) + string (REGEX REPLACE "cxx$" "viol" _viol ${_srcname}) + string (REGEX REPLACE "cxx$" "cxx.xml" _srcxml ${_srcname}) + string (REGEX REPLACE "cxx$" "h.xml" _hxml ${_srcname}) + set(depends) + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${_header}) + list(APPEND depends ${_header}) + add_custom_command( OUTPUT ${_viol} + COMMAND ${CMAKE_COMMAND} -E make_directory ${CHECKDIR} + COMMAND ${CMAKE_COMMAND} -E make_directory ${CHECKDIR}/viols + COMMAND ${RULECHECKER_SRCML} ${_srcfile} ${CHECKDIR}/${_srcxml} + COMMAND ${RULECHECKER_SRCML} ${_header} ${CHECKDIR}/${_hxml} + COMMAND ${Java_JAVA_EXECUTABLE} -jar ${FACTEXTRACTOR_JAR} ${CHECKDIR} ${CHECKDIR} + COMMAND ${Java_JAVA_EXECUTABLE} -jar ${RULECHECKER_JAR} ${CHECKDIR}/${_srcxml} ${CHECKDIR}/${_hxml} ${CHECKDIR}/factFile.xml ${RULECHECKER_RULES} > ${CHECKDIR}/viols/${_viol} + DEPENDS ${_depends} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) + list(APPEND violFiles ${_viol}) + else() + add_custom_command( OUTPUT ${_viol} + COMMAND ${CMAKE_COMMAND} -E make_directory ${CHECKDIR} + COMMAND ${CMAKE_COMMAND} -E make_directory ${CHECKDIR}/viols + COMMAND ${RULECHECKER_SRCML} ${_srcfile} ${CHECKDIR}/${_srcxml} + COMMAND ${Java_JAVA_EXECUTABLE} -jar ${FACTEXTRACTOR_JAR} ${CHECKDIR} ${CHECKDIR} + COMMAND ${Java_JAVA_EXECUTABLE} -jar ${RULECHECKER_JAR} ${CHECKDIR}/${_srcxml} ${CHECKDIR}/${_hxml} ${CHECKDIR}/factFile.xml ${RULECHECKER_RULES} > ${CHECKDIR}/viols/${_viol} + DEPENDS ${_depends} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) + list(APPEND violFiles ${_viol}) + endif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${_header}) + endforeach(_srcfile ${SRCS}) + if(violFiles) + add_custom_target(${PACKAGE}-check DEPENDS ${violFiles}) + add_dependencies(${PACKAGE}-check ${violFiles}) + add_dependencies(${MODULE}-check-all ${PACKAGE}-check) + endif(violFiles) + add_custom_command(TARGET clean + COMMAND ${CMAKE_COMMAND} -E remove_directory ${CHECKDIR}) + + endif(RULECHECKER_FOUND) +endmacro(ALICE_CheckModule) + -- 2.43.0