1 # Copyright (C) 2011 Jan Kundrát <kundratj@fzu.cz>
3 # This file is part of the Deska, a tool for central administration of a grid site
4 # http://projects.flaska.net/projects/show/deska
6 # This program is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU General Public
8 # License as published by the Free Software Foundation; either
9 # version 2 of the License, or the version 3 of the License.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 # General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program; see the file COPYING. If not, write to
18 # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 # Boston, MA 02110-1301, USA.
23 SET(DESKA_VERSION 1.0)
24 SET(DESKA_SOVERSION 1.0)
26 cmake_minimum_required(VERSION 2.6)
28 SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -ggdb -pipe")
29 # boost::optional fails with strict aliasing, unfortunately.
30 # http://boost.2283326.n4.nabble.com/optional-Strict-Aliasing-Warnings-on-Trunk-td2644713i20.html
31 # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41874
32 SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-strict-aliasing")
33 # STL debugging breaks ABI compatibility with virtualy any library that uses STL, hence disabled
34 # add_definitions(-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC)
35 #SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Weffc++")
36 #SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra -Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virtual -fdiagnostics-show-option" )
38 set(CMAKE_CONFIGURATION_TYPES ${CMAKE_CONFIGURATION_TYPES} Coverage )
39 set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage")
40 set(CMAKE_C_FLAGS_COVERAGE "${CMAKE_C_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage")
41 set(CMAKE_EXE_LINKER_FLAGS_COVERAGE "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
43 IF(NOT CMAKE_BUILD_TYPE)
44 SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
45 "Choose the type of build"
47 ENDIF(NOT CMAKE_BUILD_TYPE)
49 add_definitions(-DCMAKE_CURRENT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
51 # RHEL5 with EPEL Boost
52 SET(BOOST_INCLUDEDIR /usr/include/boost141)
53 SET(BOOST_LIBRARYDIR /usr/lib64/boost141)
54 FIND_PACKAGE(Boost 1.41.0 REQUIRED COMPONENTS system date_time unit_test_framework python program_options filesystem)
56 include_directories(${Boost_INCLUDE_DIRS})
58 # we do not want to link with whole boost here; there's simply no point in our libraries bringing the test framework in
59 set(DESKA_BOOST_LIBS ${Boost_SYSTEM_LIBRARY} ${Boost_DATE_TIME_LIBRARY} ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_FILESYSTEM_LIBRARY})
61 FIND_PATH(LIBEBT_PATH libebt/libebt.hh
62 ${CMAKE_CURRENT_SOURCE_DIR}/src/3rd-party/libebt-1.3.0)
64 message(FATAL "Cannot find libebt, and the internal copy seems unusable")
66 message(STATUS "Using libebt from ${LIBEBT_PATH}")
67 include_directories(${LIBEBT_PATH})
70 FIND_PATH(JSON_SPIRIT_PATH json_spirit/json_spirit_value.h
71 ${CMAKE_CURRENT_SOURCE_DIR}/src/3rd-party/json_spirit_4.04)
72 if(NOT JSON_SPIRIT_PATH)
73 message(FATAL "Cannot find json_spirit, and the internal copy seems unusable")
75 message(STATUS "Using json_spirit from ${JSON_SPIRIT_PATH}")
76 include_directories(${JSON_SPIRIT_PATH})
79 FIND_PATH(BOOST_PROCESS_PATH boost/process.hpp
80 ${CMAKE_CURRENT_SOURCE_DIR}/src/3rd-party/process)
81 if(NOT BOOST_PROCESS_PATH)
82 message(FATAL "Cannot find boost::process, and the internal copy seems unusable")
84 message(STATUS "Using boost::process from ${BOOST_PROCESS_PATH}")
85 include_directories(${BOOST_PROCESS_PATH})
88 SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
89 FIND_PACKAGE(Readline REQUIRED)
90 if(EXTRA_READLINE_LIBRARY)
91 # support extra library to link with due to the RHEL5 borkage
92 # https://bugzilla.redhat.com/show_bug.cgi?id=499837
93 set(READLINE_LIBRARY ${READLINE_LIBRARY} ${EXTRA_READLINE_LIBRARY})
96 include_directories(${READLINE_INCLUDE_DIR})
99 # We have to bring in Python explicitly
100 find_package(PythonLibs REQUIRED)
101 # yay, different versions of this package use different variable names for increased fun
102 include_directories(${PYTHON_INCLUDE_DIR} ${PYTHON_INCLUDE_PATH})
103 #link_directories(${PYTHON_LIBRARIES})
105 if(PYTHON_SITE_PACKAGES)
106 message(STATUS "Python site-packages dir specified by hand: ${PYTHON_SITE_PACKAGES}")
108 # We also require the interpreter to be able to tell the PYTHONPATH
109 find_package(PythonInterp REQUIRED)
110 if(PYTHONINTERP_FOUND)
111 execute_process(COMMAND ${PYTHON_EXECUTABLE} -c
112 "import distutils.sysconfig; import sys; sys.stdout.write(distutils.sysconfig.get_python_lib())"
113 OUTPUT_VARIABLE PYTHON_SITE_PACKAGES)
114 message(STATUS "Python site-packages target: ${PYTHON_SITE_PACKAGES}")
116 message(FATAL "Couldn't determine the PYTHON_SITE_PACKAGES directory")
120 if(PYTHON_SITE_PACKAGES_ARCH)
121 message(STATUS "Python arch-specific site-packages dir specified by hand: ${PYTHON_SITE_PACKAGES_ARCH}")
123 # We also require the interpreter to be able to tell the PYTHONPATH
124 find_package(PythonInterp REQUIRED)
125 if(PYTHONINTERP_FOUND)
126 execute_process(COMMAND ${PYTHON_EXECUTABLE} -c
127 "import distutils.sysconfig; import sys; sys.stdout.write(distutils.sysconfig.get_python_lib(1))"
128 OUTPUT_VARIABLE PYTHON_SITE_PACKAGES_ARCH)
129 message(STATUS "Python arch-specific site-packages target: ${PYTHON_SITE_PACKAGES_ARCH}")
131 message(FATAL "Couldn't determine the PYTHON_SITE_PACKAGES_ARCH directory")
137 ${CMAKE_CURRENT_SOURCE_DIR}/src
142 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/Objects.cpp
143 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/MacAddress.cpp
144 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/Revisions.cpp
145 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/ObjectModification.cpp
146 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/Filter.cpp
147 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/Api.cpp
148 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/FakeApi.cpp
149 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/JsonApi.cpp
150 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/JsonHandler.cpp
151 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/JsonException.cpp
152 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/JsonExtraction.cpp
153 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/CachingJsonApi.cpp
154 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/IOSocket.cpp
155 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/ProcessIO.cpp
156 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/UnixFdIO.cpp
157 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/Connection.cpp
158 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/Connection_p.cpp
162 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/PredefinedRules.cpp
163 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/InfoExtractor.cpp
164 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/ContextStack.cpp
165 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/Parser.cpp
166 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/Parser_p.cpp
167 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/Parser_p_AttributeRemovalsParser.cpp
168 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/Parser_p_AttributesSettingParser.cpp
169 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/Parser_p_IdentifiersSetsParser.cpp
170 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/Parser_p_AttributesParser.cpp
171 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/Parser_p_FunctionWordsParser.cpp
172 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/Parser_p_KindsOnlyParser.cpp
173 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/Parser_p_KindsConstructParser.cpp
174 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/Parser_p_FilterExpressionsParser.cpp
175 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/Parser_p_FiltersParser.cpp
176 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/Parser_p_KindsFiltersParser.cpp
177 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/Parser_p_WholeKindParser.cpp
178 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/Parser_p_KindsParser.cpp
179 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/Parser_p_TopLevelParser.cpp
180 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/ParserKeyword.cpp
181 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/ParserErrors.cpp
182 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/Exceptions.cpp
183 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/CliConfigBase.cpp
184 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/CliObjects.cpp
185 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/DbInteraction.cpp
186 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/ParserSignals.cpp
187 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/CliCommands.cpp
188 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/CliCommands_Log.cpp
189 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/CliCommands_DiffRebase.cpp
190 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/UserInterface.cpp
191 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/UserInterfaceIO.cpp
192 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/ReadlineWrapper.cpp
193 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/ChildProcess.cpp
197 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/main.cpp
198 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/CliConfig.cpp
201 set(libLowLevelPyDeska_SRCS
202 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/LowLevelPyDeska/Module.cpp
203 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/LowLevelPyDeska/Value.cpp
204 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/LowLevelPyDeska/Filter.cpp
205 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/LowLevelPyDeska/DateTimeConversions.cpp
208 add_library(DeskaDb SHARED ${libDeskaDb_SRCS})
209 target_link_libraries(DeskaDb ${DESKA_BOOST_LIBS})
210 set_target_properties(DeskaDb PROPERTIES
211 VERSION ${DESKA_SOVERSION}
212 SOVERSION ${DESKA_SOVERSION}
215 add_library(DeskaCli SHARED ${libDeskaCli_SRCS})
216 target_link_libraries(DeskaCli DeskaDb ${READLINE_LIBRARY})
217 set_target_properties(DeskaCli PROPERTIES
218 VERSION ${DESKA_SOVERSION}
219 SOVERSION ${DESKA_SOVERSION}
222 add_executable(deska-cli ${deskaCliApp_SRCS})
223 target_link_libraries(deska-cli DeskaCli)
225 find_file(GIT_DOT_GIT_HEAD HEAD PATHS ${CMAKE_CURRENT_SOURCE_DIR}/.git
226 NO_DEFAULT_PATH NO_CMAKE_ENVIRONMENT_PATH NO_CMAKE_PATH
227 NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_PATH)
229 add_custom_target(gitversion
230 "${CMAKE_CURRENT_SOURCE_DIR}/git-generate-version.sh" "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/src/deska/cli/gitversion-include.cpp"
232 add_dependencies(deska-cli gitversion)
233 set(DESKA_HAVE_GITVERSION 1)
235 set(DESKA_HAVE_GITVERSION 0)
238 SET(DESKA_VERSION_STR "${DESKA_VERSION}")
239 SET(DESKA_EXECUTABLE deska-cli)
240 include_directories(${CMAKE_CURRENT_BINARY_DIR}/src/deska/cli)
241 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/src/deska/cli/cli-config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/src/deska/cli/cli-config.h)
243 add_library(LowLevelPyDeska SHARED ${libLowLevelPyDeska_SRCS})
244 target_link_libraries(LowLevelPyDeska DeskaDb ${DESKA_BOOST_LIBS} ${Boost_PYTHON_LIBRARY} ${PYTHON_LIBRARIES})
247 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/Api.h
248 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/AdditionalValueStreamOperators.h
249 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/Connection.h
250 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/Filter.h
251 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/JsonException.h
252 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/MacAddress.h
253 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/Objects.h
254 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/ObjectModification.h
255 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/db/Revisions.h
256 DESTINATION include/deska/db
258 install(TARGETS DeskaDb DeskaCli DESTINATION lib${LIB_SUFFIX})
259 install(TARGETS deska-cli DESTINATION bin)
261 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/server/app/deska-server
262 PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
265 ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/server/app/deska_server_utils
266 DESTINATION ${PYTHON_SITE_PACKAGES})
268 install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/python/deska
269 DESTINATION ${PYTHON_SITE_PACKAGES})
270 install(TARGETS LowLevelPyDeska
271 DESTINATION ${PYTHON_SITE_PACKAGES_ARCH}/deska)
273 install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/install
274 DESTINATION share/deska/install-scripts
277 install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/deska/server/db
278 DESTINATION share/deska/install-scripts/src/deska/server
279 PATTERN "*/data_generator/*" EXCLUDE
283 ${CMAKE_CURRENT_SOURCE_DIR}/tests/prepare-git-repo.sh
284 PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
285 DESTINATION share/deska/install-scripts/tests/
289 ${CMAKE_CURRENT_SOURCE_DIR}/tests/sql
290 DESTINATION share/deska/install-scripts/tests
291 FILES_MATCHING PATTERN "util-*.sh"
297 add_subdirectory(tests)
300 message(STATUS "Will build the qml2image tool")
301 add_subdirectory(src/qml2image)
303 message(STATUS "Will skip the qml2image tool")
307 message(STATUS "Will build PDF documentation")
308 add_subdirectory(doc/technical)
310 message(STATUS "Will not build PDF documentation")