# The CERN Tape Archive (CTA) project # Copyright (C) 2015 CERN # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. cmake_minimum_required (VERSION 2.6) project(cta) set(CMAKE_C_FLAGS "-fPIC -pedantic -Wall -Wextra -Werror -Wno-unused-parameter") # Please note that the -fms-extensions option should be dropped when this # project gets to be compiled on a fully C++ 11 compliant compiler. The option # is being used to support anonymous structs and avoid errors similar to the # following: # # ClientSimulator.hpp:65: error: ISO C++ prohibits anonymous structs set(CMAKE_CXX_FLAGS "-fPIC -pedantic -Wall -Wextra -Werror -Wno-unused-parameter -Wno-long-long -std=c++1y -fstack-protector-all") # # A maximalist error checking parameter combo has been suggested by S. Ponce and D. Come: # to be tested once we have a stable compilation on CC7: #-Wno-unused-parameter -Wlogical-op -Wfloat-equal -Wdeclaration-after- statement -Wundef -Wno-endif-labels -Wshadow -Wunsafe-loop- optimizations -Wpointer-arith -Wbad-function-cast -Wcast-align -Wwrite- strings -Wconversion -Wmissing-field-initializers -Wredundant-decls -Wnested-externs -Wunreachable-code -Winline -Wvariadic-macros -Wtraditional -Wmissing-prototypes -Wmissing-declarations -Wold-style- definition -Wc++-compat -Wstrict-prototypes -Wpadded -Wcast-qual -Wnon-virtual-dtor -Wlogical-op -Wmissing-declarations -Wsign-conversion -Wredundant-decls -Wold-style-cast -Wshadow # Explicitly setting the C and C++ compiler flags for the RelWithDebInfo build # in order to prevent the -O2 flag from being used. set(CMAKE_C_FLAGS_RELWITHDEBINFO "-g") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-g") set (CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -Wnon-virtual-dtor") # Switch on support for c++0x if the compiler is gcc 4.4.7 or clang execute_process( COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) if (CMAKE_COMPILER_IS_GNUCC) if (GCC_VERSION VERSION_GREATER 4.4.6) message(STATUS "Detected gcc >= 4.4.7 - switching on support for c++1y") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y") endif (GCC_VERSION VERSION_GREATER 4.4.6) endif (CMAKE_COMPILER_IS_GNUCC) set (GCC_VERSION_GE_4_8_0 FALSE) if (CMAKE_COMPILER_IS_GNUCC AND ((GCC_VERSION VERSION_GREATER 4.8.0) OR (GCC_VERSION VERSION_EQUAL 4.8.0))) set (GCC_VERSION_GE_4_8_0 TRUE) endif (CMAKE_COMPILER_IS_GNUCC AND ((GCC_VERSION VERSION_GREATER 4.8.0) OR (GCC_VERSION VERSION_EQUAL 4.8.0))) if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") message(STATUS "Detected clang - switching on support for c++0x") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") endif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") # Generate the compilation variables, if needed if (NOT DEFINED SKIP_UNIT_TESTS) message (STATUS "Setting SKIP_UNIT_TESTS to the value of 0") message (STATUS "Override with -DSKIP_UNIT_TESTS:STRING=1") set(SKIP_UNIT_TESTS 0) else (NOT DEFINED SKIP_UNIT_TESTS) message (STATUS "Already set: SKIP_UNIT_TESTS=${SKIP_UNIT_TESTS}") endif (NOT DEFINED SKIP_UNIT_TESTS) #Load version information in all cases. include(cmake/CTAVersions.cmake) IF(DEFINED PackageOnly) message (STATUS "Running CMake in package-only mode") set(COMPILE_PACKAGING "1") ELSE(DEFINED PackageOnly) message (STATUS "Running in full configuration mode.") message (STATUS "Override with -DPackageOnly:Bool=true") # Generate the compilation variables, if needed if (NOT DEFINED COMPILE_PACKAGING) message (STATUS "Setting COMPILE_PACKAGING to the value of 1") message (STATUS "Override with -DCOMPILE_PACKAGING:STRING=0") set(COMPILE_PACKAGING 1) else (NOT DEFINED COMPILE_PACKAGING) message (STATUS "Already set: COMPILE_PACKAGING=${COMPILE_PACKAGING}") endif (NOT DEFINED COMPILE_PACKAGING) IF(NOT CMAKE_BUILD_TYPE STREQUAL "") # If the user specifies -DCMAKE_BUILD_TYPE on the command line, take their definition and dump it in the cache message(STATUS "Setting build type to ${CMAKE_BUILD_TYPE} as requested.") SET(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "Choose the type of build.") ELSE() # log choosen default (RelWithDebInfo) and set it message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.") message (STATUS "Override with -DCMAKE_BUILD_TYPE:STRING=Debug") set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE) # Set the possible values of build type for cmake-gui # this command is not yet available in SLC6's cmake 2.6 # set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") ENDIF(NOT CMAKE_BUILD_TYPE STREQUAL "") set(CMAKE_DISABLE_SOURCE_CHANGES ON) set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) include(cmake/CTAInstallationFunctions.cmake) include(GNUInstallDirs) set(CMAKE_INSTALL_PREFIX "/") include_directories(${PROJECT_SOURCE_DIR}) include_directories(${CMAKE_BINARY_DIR}) add_subdirectory(catalogue) add_subdirectory(cmdline) add_subdirectory(common) add_subdirectory(objectstore) add_subdirectory(remotens) add_subdirectory(scheduler) add_subdirectory(tapeserver) add_subdirectory(tests) add_subdirectory(xroot_plugins) #Generate version information configure_file(${PROJECT_SOURCE_DIR}/version.hpp.in ${CMAKE_BINARY_DIR}/version.h) ENDIF(DEFINED PackageOnly) ################################################################################ # Packaging step (replacing the maketar) # See http://www.vtk.org/Wiki/CMakeUserUseRPMTools ################################################################################ if (${COMPILE_PACKAGING} STREQUAL "1") include(cmake/UseRPMToolsEnvironment.cmake) set(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${CTA_VERSION}-${CTA_RELEASE}") message (STATUS "Setting package file name to: ${CPACK_SOURCE_PACKAGE_FILE_NAME}") set(CPACK_SOURCE_IGNORE_FILES "/.git/") include(CPack) include(cmake/UseRPMTools.cmake) if (RPMTools_FOUND) RPMTools_ADD_RPM_TARGETS( ${PROJECT_NAME} ${PROJECT_NAME}.spec.in) endif (RPMTools_FOUND) endif (${COMPILE_PACKAGING} STREQUAL "1") #add_custom_target(test test/castorUnitTests # COMMENT "Not running the unit tests" VERBATIM) configure_file(tests/valgrind.suppr tests/valgrind.suppr COPYONLY) configure_file(tests/helgrind.suppr tests/helgrind.suppr COPYONLY) add_custom_target(fullunittests tests/cta-unitTests COMMAND tests/cta-unitTests-multiProcess COMMAND valgrind --track-fds=yes --leak-check=full --demangle=yes --gen-suppressions=all --show-reachable=yes --error-exitcode=1 --suppressions=tests/valgrind.suppr tests/cta-unitTests COMMAND valgrind --tool=helgrind -v --demangle=yes --gen-suppressions=all --conflict-cache-size=30000000 --error-exitcode=1 --suppressions=tests/helgrind.suppr tests/cta-unitTests COMMAND tests/cta-unitTests-multiProcess COMMAND valgrind --track-fds=yes --child-silent-after-fork=yes --leak-check=full --demangle=yes --gen-suppressions=all --show-reachable=yes --error-exitcode=1 --suppressions=tests/valgrind.suppr tests/cta-unitTests-multiProcess COMMAND valgrind --tool=helgrind -v --demangle=yes --gen-suppressions=all --conflict-cache-size=30000000 --error-exitcode=1 --suppressions=tests/helgrind.suppr tests/cta-unitTests-multiProcess DEPENDS tests/cta-unitTests tests/cta-unitTests-multiProcess tests/valgrind.suppr tests/helgrind.suppr COMMENT "Running unit tests with memory leak and race conditions detection" VERBATIM) add_custom_target(valgrind valgrind --track-fds=yes --leak-check=full --demangle=yes --gen-suppressions=all --show-reachable=yes --error-exitcode=1 --suppressions=tests/valgrind.suppr tests/cta-unitTests COMMAND valgrind --track-fds=yes --child-silent-after-fork=yes --leak-check=full --demangle=yes --gen-suppressions=all --show-reachable=yes --error-exitcode=1 --suppressions=tests/valgrind.suppr tests/cta-unitTests-multiProcess DEPENDS tests/cta-unitTests tests/cta-unitTests-multiProcess tests/valgrind.suppr COMMENT "Running unit tests with memory leak detection" VERBATIM) add_custom_target(helgrind valgrind --tool=helgrind -v --demangle=yes --gen-suppressions=all --conflict-cache-size=30000000 --error-exitcode=1 --suppressions=tests/helgrind.suppr tests/cta-unitTests COMMAND valgrind --tool=helgrind -v --child-silent-after-fork=yes --demangle=yes --gen-suppressions=all --conflict-cache-size=30000000 --error-exitcode=1 --suppressions=tests/helgrind.suppr tests/cta-unitTests-multiProcess DEPENDS tests/cta-unitTests tests/cta-unitTests-multiProcess tests/helgrind.suppr COMMENT "Running unit tests with race conditions detection" VERBATIM) add_custom_target(shortunittests tests/cta-unitTests COMMAND tests/cta-unitTests-multiProcess DEPENDS tests/cta-unitTests tests/cta-unitTests-multiProcess COMMENT "Running unit tests" VERBATIM)