CMakeLists.txt 10.1 KB
Newer Older
Steven Murray's avatar
Steven Murray committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 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/>.
Steven Murray's avatar
Steven Murray committed
16
17
18
19
cmake_minimum_required (VERSION 2.6)

project(cta)

20
set(CMAKE_C_FLAGS "-fPIC -pedantic -Wall -Wextra -Werror -Wno-unused-parameter")
21
22
23
24
25
26
27

# 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
28
set(CMAKE_CXX_FLAGS "-fPIC -pedantic -Wall -Wextra -Werror -Wno-unused-parameter -Wno-long-long -fstack-protector-all -Wnon-virtual-dtor")
29
30
31
32
33
#
# 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

Steven Murray's avatar
Steven Murray committed
34
35
36
37
38
# 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")

39
set (BUILD_CMDLINE_ONLY FALSE)
Steven Murray's avatar
Steven Murray committed
40
41
42
43

execute_process(
  COMMAND ${CMAKE_C_COMPILER} -dumpversion
  OUTPUT_VARIABLE GCC_VERSION)
44

Steven Murray's avatar
Steven Murray committed
45
if (CMAKE_COMPILER_IS_GNUCC)
46
47
48
49
50
51
52
  if (GCC_VERSION VERSION_EQUAL 4.4.7)
    message(STATUS "Detected gcc = 4.4.7 - build cmdline only with c++0x")
    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
    set (BUILD_CMDLINE_ONLY TRUE)
  endif (GCC_VERSION VERSION_EQUAL 4.4.7)
  if (GCC_VERSION VERSION_GREATER 4.4.7)
    message(STATUS "Detected gcc > 4.4.7 - switching on support for c++1y")
53
    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y")
54
  endif (GCC_VERSION VERSION_GREATER 4.4.7)
Steven Murray's avatar
Steven Murray committed
55
56
endif (CMAKE_COMPILER_IS_GNUCC)

57
58
59
60
61
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)))

62
63
# Generate the compilation variables, if needed
if (NOT DEFINED SKIP_UNIT_TESTS)
64
65
66
  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)
67
68
69
70
else (NOT DEFINED SKIP_UNIT_TESTS)
  message (STATUS "Already set: SKIP_UNIT_TESTS=${SKIP_UNIT_TESTS}")
endif (NOT DEFINED SKIP_UNIT_TESTS)

71
72
73
#Load version information in all cases.
include(cmake/CTAVersions.cmake)

74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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)
106
107
  include(GNUInstallDirs)
  set(CMAKE_INSTALL_PREFIX "/")
108
109
110
111

  include_directories(${PROJECT_SOURCE_DIR})
  include_directories(${CMAKE_BINARY_DIR})

112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
  # OCCI support is on by default
  set (OCCI_SUPPORT ON)

  # Switch OCCI support off if using gcc 5.1 or higher
  if (CMAKE_COMPILER_IS_GNUCC)
    if (GCC_VERSION VERSION_GREATER 5.0)
      message (STATUS "Detected gcc >= 5.1 - Switching off OCCI support")
      set (OCCI_SUPPORT OFF)
    endif (GCC_VERSION VERSION_GREATER 5.0)
  endif (CMAKE_COMPILER_IS_GNUCC)

  if (OCCI_SUPPORT)
    find_package (oracle-instantclient REQUIRED)
  endif (OCCI_SUPPORT)

127
128
129
130
  if(BUILD_CMDLINE_ONLY)
    message(STATUS "Build cmdline only")
    add_subdirectory(cmdline)
  else(BUILD_CMDLINE_ONLY)
131
132
133
    install (CODE "message (STATUS \"Installing directory \$ENV{DESTDIR}/var/log/cta\")")
    install (CODE "file (MAKE_DIRECTORY \$ENV{DESTDIR}/var/log/cta)")

134
135
136
    add_subdirectory(catalogue)
    add_subdirectory(cmdline)
    add_subdirectory(common)
137
    add_subdirectory(eos)
138
    add_subdirectory(mediachanger)
139
140
141
142
143
144
145
    add_subdirectory(objectstore)
    add_subdirectory(rdbms)
    add_subdirectory(scheduler)
    add_subdirectory(tapeserver)
    add_subdirectory(tests)
    add_subdirectory(xroot_plugins)
  endif(BUILD_CMDLINE_ONLY)
146
147
148
149
  
  #Generate version information
  configure_file(${PROJECT_SOURCE_DIR}/version.hpp.in
    ${CMAKE_BINARY_DIR}/version.h)
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
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)

174
configure_file(tests/valgrind.suppr tests/valgrind.suppr COPYONLY)
175
176
177
configure_file(tests/helgrind.suppr tests/helgrind.suppr COPYONLY)
add_custom_target(fullunittests
  tests/cta-unitTests
178
179
  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
Eric Cano's avatar
Eric Cano committed
180
  COMMAND valgrind --tool=helgrind -v --demangle=yes --gen-suppressions=all --num-callers=25 --conflict-cache-size=30000000 --error-exitcode=1 --suppressions=tests/helgrind.suppr tests/cta-unitTests
181
182
  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
Eric Cano's avatar
Eric Cano committed
183
  COMMAND valgrind --tool=helgrind -v --demangle=yes --gen-suppressions=all --num-callers=25 --conflict-cache-size=30000000 --error-exitcode=1 --suppressions=tests/helgrind.suppr tests/cta-unitTests-multiProcess
184
  
185
  DEPENDS tests/cta-unitTests tests/cta-unitTests-multiProcess tests/valgrind.suppr tests/helgrind.suppr
186
  COMMENT "Running unit tests with memory leak and race conditions detection" VERBATIM)
187

188
add_custom_target(valgrind
189
190
191
192
193
  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)
194
195

add_custom_target(helgrind
Eric Cano's avatar
Eric Cano committed
196
197
  valgrind --tool=helgrind -v --demangle=yes --gen-suppressions=all --num-callers=25 --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 --num-callers=25 --conflict-cache-size=30000000 --error-exitcode=1 --suppressions=tests/helgrind.suppr tests/cta-unitTests-multiProcess
198
  
199
200
  DEPENDS tests/cta-unitTests tests/cta-unitTests-multiProcess tests/helgrind.suppr
  COMMENT "Running unit tests with race conditions detection" VERBATIM)
201

202
203
add_custom_target(shortunittests
  tests/cta-unitTests
204
  COMMAND tests/cta-unitTests-multiProcess
205
  
206
  DEPENDS tests/cta-unitTests tests/cta-unitTests-multiProcess
207
  COMMENT "Running unit tests" VERBATIM)