From 3170f16e864e257416bccdd73777bff775767a8f Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 22 Jul 2016 00:54:17 +0800 Subject: [PATCH 01/14] cmake: do not check libuuid anymore libuuid dependency is not found in ceph.spec.in or debian/control. and we are not using libuuid since 62bfc7a. Signed-off-by: Kefu Chai --- CMakeLists.txt | 2 -- cmake/modules/Findlibuuid.cmake | 33 --------------------------------- 2 files changed, 35 deletions(-) delete mode 100644 cmake/modules/Findlibuuid.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 3b6b1e525235b..ba7ce08179385 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -292,8 +292,6 @@ if(NOT FREEBSD) find_package(keyutils REQUIRED) endif(NOT FREEBSD) -find_package(libuuid REQUIRED) - find_package(CURL REQUIRED) set(CMAKE_REQUIRED_INCLUDES ${CURL_INCLUDE_DIRS}) set(CMAKE_REQUIRED_LIBRARIES ${CURL_LIBRARIES}) diff --git a/cmake/modules/Findlibuuid.cmake b/cmake/modules/Findlibuuid.cmake deleted file mode 100644 index a2d1fbc57faab..0000000000000 --- a/cmake/modules/Findlibuuid.cmake +++ /dev/null @@ -1,33 +0,0 @@ -# Try to find libuuid -# Once done, this will define -# -# UUID_FOUND - system has Profiler -# UUID_INCLUDE_DIR - the Profiler include directories -# UUID_LIBRARIES - link these to use Profiler - -if(UUID_INCLUDE_DIR AND UUID_LIBRARIES) - set(UUID_FIND_QUIETLY TRUE) -endif(UUID_INCLUDE_DIR AND UUID_LIBRARIES) - -INCLUDE(CheckCXXSymbolExists) - -# include dir - -find_path(UUID_INCLUDE_DIR uuid.h NO_DEFAULT_PATH PATHS - /usr/include - /usr/include/uuid - /opt/local/include - /usr/local/include -) - - -# finally the library itself -find_library(LIBUUID NAMES uuid) -set(UUID_LIBRARIES ${LIBUUID}) - -# handle the QUIETLY and REQUIRED arguments and set UUID_FOUND to TRUE if -# all listed variables are TRUE -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(libuuid DEFAULT_MSG UUID_LIBRARIES UUID_INCLUDE_DIR) - -mark_as_advanced(UUID_LIBRARIES UUID_INCLUDE_DIR) From 3f6fd585f8afa93d4462881232ebf7c206b78259 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 22 Jul 2016 01:13:48 +0800 Subject: [PATCH 02/14] cmake: cleanup Findtcmalloc.cmake use find_package_handle_standard_args() and remove unused bits. Signed-off-by: Kefu Chai --- cmake/modules/Findtcmalloc.cmake | 45 +++++++++----------------------- 1 file changed, 13 insertions(+), 32 deletions(-) diff --git a/cmake/modules/Findtcmalloc.cmake b/cmake/modules/Findtcmalloc.cmake index d9b3a456f5c31..9b4cf1a807054 100644 --- a/cmake/modules/Findtcmalloc.cmake +++ b/cmake/modules/Findtcmalloc.cmake @@ -5,43 +5,24 @@ # Tcmalloc_LIBRARIES - List of libraries when using Tcmalloc. # Tcmalloc_FOUND - True if Tcmalloc found. -find_path(Tcmalloc_INCLUDE_DIR google/tcmalloc.h NO_DEFAULT_PATH PATHS - ${HT_DEPENDENCY_INCLUDE_DIR} +find_path(Tcmalloc_INCLUDE_DIR google/tcmalloc.h PATHS /usr/include /opt/local/include - /usr/local/include -) + /usr/local/include) -if (USE_TCMALLOC) - set(Tcmalloc_NAMES tcmalloc) -else () - set(Tcmalloc_NAMES tcmalloc_minimal tcmalloc) -endif () +find_library(Tcmalloc_LIBRARY + NAMES tcmalloc_minimal tcmalloc + PATHS /lib /usr/lib /usr/local/lib /opt/local/lib) -find_library(Tcmalloc_LIBRARY NO_DEFAULT_PATH - NAMES ${Tcmalloc_NAMES} - PATHS ${HT_DEPENDENCY_LIB_DIR} /lib /usr/lib /usr/local/lib /opt/local/lib -) +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Tcmalloc + FOUND_VAR Tcmalloc_FOUND + REQUIRED_VARS Tcmalloc_INCLUDE_DIR Tcmalloc_LIBRARY) -if (Tcmalloc_INCLUDE_DIR AND Tcmalloc_LIBRARY) - set(Tcmalloc_FOUND TRUE) - set( Tcmalloc_LIBRARIES ${Tcmalloc_LIBRARY} ) -else () - set(Tcmalloc_FOUND FALSE) - set( Tcmalloc_LIBRARIES ) -endif () - -if (Tcmalloc_FOUND) - message(STATUS "Found Tcmalloc: ${Tcmalloc_LIBRARY}") -else () - message(STATUS "Not Found Tcmalloc: ${Tcmalloc_LIBRARY}") - if (Tcmalloc_FIND_REQUIRED) - message(STATUS "Looked for Tcmalloc libraries named ${Tcmalloc_NAMES}.") - message(FATAL_ERROR "Could NOT find Tcmalloc library") - endif () -endif () +if(Tcmalloc_FOUND) + set(Tcmalloc_LIBRARIES ${Tcmalloc_LIBRARY}) +endif() mark_as_advanced( Tcmalloc_LIBRARY - Tcmalloc_INCLUDE_DIR - ) + Tcmalloc_INCLUDE_DIR) From e21d98aed4ac18bbe0b4a3f29c4e6225cd787707 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 22 Jul 2016 01:28:21 +0800 Subject: [PATCH 03/14] cmake: cleanup FindOpenLdap.cmake * use find_package_handle_standard_args() and remove unused bits. * rename OPENLDAP_LIBS to OPENLDAP_LIBRARIES, to be consistent with find_package() modules. Signed-off-by: Kefu Chai --- CMakeLists.txt | 1 - cmake/modules/FindOpenLdap.cmake | 38 +++++++++----------------------- src/rgw/CMakeLists.txt | 2 +- src/test/CMakeLists.txt | 2 +- 4 files changed, 13 insertions(+), 30 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ba7ce08179385..2c87ffc177d48 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -197,7 +197,6 @@ option(WITH_OPENLDAP "OPENLDAP is here" ON) if(${WITH_OPENLDAP}) find_package(OpenLdap REQUIRED) set(HAVE_OPENLDAP ${OPENLDAP_FOUND}) -message(STATUS "${OPENLDAP_LIBS}") endif(${WITH_OPENLDAP}) option(WITH_FUSE "Fuse is here" ON) diff --git a/cmake/modules/FindOpenLdap.cmake b/cmake/modules/FindOpenLdap.cmake index 42b3edd01d612..35b711d6b3315 100644 --- a/cmake/modules/FindOpenLdap.cmake +++ b/cmake/modules/FindOpenLdap.cmake @@ -1,38 +1,22 @@ # - Find OpenLDAP C Libraries # -# OPENLDAP_PREFIX - where to find ldap.h and libraries # OPENLDAP_FOUND - True if found. +# OPENLDAP_INCLUDE_DIR - Path to the openldap include directory +# OPENLDAP_LIBRARIES - Paths to the ldap and lber libraries -set(OPENLDAP_LIB_DIR "${OPENLDAP_PREFIX}/lib") - -find_path(OPENLDAP_INCLUDE_DIR ldap.h NO_DEFAULT_PATH PATHS +find_path(OPENLDAP_INCLUDE_DIR ldap.h PATHS /usr/include /opt/local/include - /usr/local/include - "${OPENLDAP_PREFIX}/include" - ) - -find_library(LIBLDAP NAMES ldap) -find_library(LIBLBER NAMES lber) + /usr/local/include) -if (OPENLDAP_INCLUDE_DIR AND LIBLDAP AND LIBLBER) - set(OPENLDAP_FOUND TRUE) -else (OPENLDAP_INCLUDE_DIR AND LIBLDAP AND LIBLBER) - set(OPENLDAP_FOUND FALSE) -endif (OPENLDAP_INCLUDE_DIR AND LIBLDAP AND LIBLBER) +find_library(LDAP_LIBRARY ldap) +find_library(LBER_LIBRARY lber) -if (OPENLDAP_FOUND) - message(STATUS "Found ldap: ${OPENLDAP_INCLUDE_DIR}") -else (OPENLDAP_FOUND) - if (NOT OPENLDAP_INCLUDE_DIR) - message(FATAL_ERROR "Missing required ldap.h (openldap-devel)") - else (NOT OPENLDAP_INCLUDE_DIR) - message (FATAL_ERROR "Missing required LDAP libraries (openldap)") - endif (NOT OPENLDAP_INCLUDE_DIR) -endif (OPENLDAP_FOUND) +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(OpenLdap DEFAULT_MSG + OPENLDAP_INCLUDE_DIR LDAP_LIBRARY LBER_LIBRARY) -set(OPENLDAP_LIBS ${LIBLDAP} ${LIBLBER}) +set(OPENLDAP_LIBRARIES ${LDAP_LIBRARY} ${LBER_LIBRARY}) mark_as_advanced( - OPENLDAP_INCLUDE_DIR OPENLDAP_LIB_DIR OPENLDAP_LIBRARIES -) + OPENLDAP_INCLUDE_DIR LDAP_LIBRARY LBER_LIBRARY) diff --git a/src/rgw/CMakeLists.txt b/src/rgw/CMakeLists.txt index 6c449233dc5ad..8b6eb6815ce9a 100644 --- a/src/rgw/CMakeLists.txt +++ b/src/rgw/CMakeLists.txt @@ -91,7 +91,7 @@ add_library(rgw_a STATIC ${rgw_a_srcs}) target_include_directories(rgw_a PUBLIC ${FCGI_INCLUDE_DIR}) target_link_libraries(rgw_a librados cls_rgw_client cls_refcount_client cls_log_client cls_statelog_client cls_timeindex_client cls_version_client - cls_replica_log_client cls_user_client curl global expat ${OPENLDAP_LIBS} + cls_replica_log_client cls_user_client curl global expat ${OPENLDAP_LIBRARIES} ${CRYPTO_LIBS}) set(radosgw_srcs diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt index 9c1163b684552..5bbe0cc917698 100644 --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -338,7 +338,7 @@ set_target_properties(test_rgw_ldap PROPERTIES COMPILE_FLAGS ${UNITTEST_CXX_FLAGS}) target_link_libraries(test_rgw_ldap librados - ${OPENLDAP_LIBS} + ${OPENLDAP_LIBRARIES} ${Boost_LIBRARIES} ${UNITTEST_LIBS} ) From d4104b747f6da8e23a8f5a1dd4ec909a1aa5410e Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 22 Jul 2016 01:42:39 +0800 Subject: [PATCH 04/14] cmake: add "WITH_SUBMAN" option it is used by ceph.spec.in for installing subscription manager cron job on rhel. Signed-off-by: Kefu Chai --- src/CMakeLists.txt | 2 ++ src/script/CMakeLists.txt | 7 +++++++ 2 files changed, 9 insertions(+) create mode 100644 src/script/CMakeLists.txt diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a09ed17f5afa4..8784350b775a4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -878,3 +878,5 @@ if (IS_DIRECTORY "${PROJECT_SOURCE_DIR}/.git") COMMAND git submodule update --force --init --recursive WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") endif() + +add_subdirectory(script) diff --git a/src/script/CMakeLists.txt b/src/script/CMakeLists.txt new file mode 100644 index 0000000000000..7a20ba31aa901 --- /dev/null +++ b/src/script/CMakeLists.txt @@ -0,0 +1,7 @@ +option(WITH_SUBMAN "install subscription manager cron job" OFF) + +if(WITH_SUBMAN) + install(PROGRAMS + ${CMAKE_CURRENT_SOURCE_DIR}/subman + DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/cron.hourly) +endif() From 89521942c9194ec7d93c5e3e4921288d27455bc6 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 22 Jul 2016 01:45:59 +0800 Subject: [PATCH 05/14] cmake: add "make uninstall" support following https://cmake.org/Wiki/RecipeAddUninstallTarget Signed-off-by: Kefu Chai --- src/script/CMakeLists.txt | 8 ++++++++ src/script/cmake_uninstall.cmake.in | 21 +++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 src/script/cmake_uninstall.cmake.in diff --git a/src/script/CMakeLists.txt b/src/script/CMakeLists.txt index 7a20ba31aa901..42568a13e5679 100644 --- a/src/script/CMakeLists.txt +++ b/src/script/CMakeLists.txt @@ -5,3 +5,11 @@ if(WITH_SUBMAN) ${CMAKE_CURRENT_SOURCE_DIR}/subman DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/cron.hourly) endif() + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" + IMMEDIATE @ONLY) + +add_custom_target(uninstall + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) diff --git a/src/script/cmake_uninstall.cmake.in b/src/script/cmake_uninstall.cmake.in new file mode 100644 index 0000000000000..4c07dc7bd4620 --- /dev/null +++ b/src/script/cmake_uninstall.cmake.in @@ -0,0 +1,21 @@ +if(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt") + message(FATAL_ERROR "Cannot find install manifest: @CMAKE_BINARY_DIR@/install_manifest.txt") +endif(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt") + +file(READ "@CMAKE_BINARY_DIR@/install_manifest.txt" files) +string(REGEX REPLACE "\n" ";" files "${files}") +foreach(file ${files}) + message(STATUS "Uninstalling $ENV{DESTDIR}${file}") + if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + exec_program( + "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" + OUTPUT_VARIABLE rm_out + RETURN_VALUE rm_retval + ) + if(NOT "${rm_retval}" STREQUAL 0) + message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") + endif(NOT "${rm_retval}" STREQUAL 0) + else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + message(STATUS "File $ENV{DESTDIR}${file} does not exist.") + endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") +endforeach(file) From 03a860ed1105e8b60a1d6db2cbe106256f035161 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 22 Jul 2016 09:19:20 +0800 Subject: [PATCH 06/14] cmake: add missing FindBacktrace.cmake FindBacktrace.cmake is missing in older versions of cmake. so put a copy in our tree. Signed-off-by: Kefu Chai --- cmake/modules/FindBacktrace.cmake | 101 ++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 cmake/modules/FindBacktrace.cmake diff --git a/cmake/modules/FindBacktrace.cmake b/cmake/modules/FindBacktrace.cmake new file mode 100644 index 0000000000000..936875c843030 --- /dev/null +++ b/cmake/modules/FindBacktrace.cmake @@ -0,0 +1,101 @@ +#.rst: +# FindBacktrace +# ------------- +# +# Find provider for backtrace(3). +# +# Checks if OS supports backtrace(3) via either libc or custom library. +# This module defines the following variables: +# +# ``Backtrace_HEADER`` +# The header file needed for backtrace(3). Cached. +# Could be forcibly set by user. +# ``Backtrace_INCLUDE_DIRS`` +# The include directories needed to use backtrace(3) header. +# ``Backtrace_LIBRARIES`` +# The libraries (linker flags) needed to use backtrace(3), if any. +# ``Backtrace_FOUND`` +# Is set if and only if backtrace(3) support detected. +# +# The following cache variables are also available to set or use: +# +# ``Backtrace_LIBRARY`` +# The external library providing backtrace, if any. +# ``Backtrace_INCLUDE_DIR`` +# The directory holding the backtrace(3) header. +# +# Typical usage is to generate of header file using configure_file() with the +# contents like the following:: +# +# #cmakedefine01 Backtrace_FOUND +# #if Backtrace_FOUND +# # include <${Backtrace_HEADER}> +# #endif +# +# And then reference that generated header file in actual source. + +#============================================================================= +# Copyright 2013 Vadim Zhukov +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + + +include(CMakePushCheckState) +include(CheckSymbolExists) +include(FindPackageHandleStandardArgs) + +# List of variables to be provided to find_package_handle_standard_args() +set(_Backtrace_STD_ARGS Backtrace_INCLUDE_DIR) + +if(Backtrace_HEADER) + set(_Backtrace_HEADER_TRY "${Backtrace_HEADER}") +else(Backtrace_HEADER) + set(_Backtrace_HEADER_TRY "execinfo.h") +endif(Backtrace_HEADER) + +find_path(Backtrace_INCLUDE_DIR "${_Backtrace_HEADER_TRY}") +set(Backtrace_INCLUDE_DIRS ${Backtrace_INCLUDE_DIR}) + +if (NOT DEFINED Backtrace_LIBRARY) + # First, check if we already have backtrace(), e.g., in libc + cmake_push_check_state(RESET) + set(CMAKE_REQUIRED_INCLUDES ${Backtrace_INCLUDE_DIRS}) + set(CMAKE_REQUIRED_QUIET ${Backtrace_FIND_QUIETLY}) + check_symbol_exists("backtrace" "${_Backtrace_HEADER_TRY}" _Backtrace_SYM_FOUND) + cmake_pop_check_state() +endif() + +if(_Backtrace_SYM_FOUND) + # Avoid repeating the message() call below each time CMake is run. + if(NOT Backtrace_FIND_QUIETLY AND NOT DEFINED Backtrace_LIBRARY) + message(STATUS "backtrace facility detected in default set of libraries") + endif() + set(Backtrace_LIBRARY "" CACHE FILEPATH "Library providing backtrace(3), empty for default set of libraries") +else() + # Check for external library, for non-glibc systems + if(Backtrace_INCLUDE_DIR) + # OpenBSD has libbacktrace renamed to libexecinfo + find_library(Backtrace_LIBRARY "execinfo") + elseif() # respect user wishes + set(_Backtrace_HEADER_TRY "backtrace.h") + find_path(Backtrace_INCLUDE_DIR ${_Backtrace_HEADER_TRY}) + find_library(Backtrace_LIBRARY "backtrace") + endif() + + # Prepend list with library path as it's more common practice + set(_Backtrace_STD_ARGS Backtrace_LIBRARY ${_Backtrace_STD_ARGS}) +endif() + +set(Backtrace_LIBRARIES ${Backtrace_LIBRARY}) +set(Backtrace_HEADER "${_Backtrace_HEADER_TRY}" CACHE STRING "Header providing backtrace(3) facility") + +find_package_handle_standard_args(Backtrace FOUND_VAR Backtrace_FOUND REQUIRED_VARS ${_Backtrace_STD_ARGS}) +mark_as_advanced(Backtrace_HEADER Backtrace_INCLUDE_DIR Backtrace_LIBRARY) From bfc25cbc93c10cf2c7811090e630220157f70d37 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 22 Jul 2016 11:56:58 +0800 Subject: [PATCH 07/14] cmake: cleanup Findbabeltrace.cmake * we don't need the BABELTRACE_PATH_HINT setting, as packaging script requires the the babeltrace pacakges explicitly. Signed-off-by: Kefu Chai --- cmake/modules/Findbabeltrace.cmake | 55 +++++------------------------- 1 file changed, 8 insertions(+), 47 deletions(-) diff --git a/cmake/modules/Findbabeltrace.cmake b/cmake/modules/Findbabeltrace.cmake index d576186b53e2a..76f6210578a09 100644 --- a/cmake/modules/Findbabeltrace.cmake +++ b/cmake/modules/Findbabeltrace.cmake @@ -1,61 +1,22 @@ # - Find Babeltrace -# This module accepts the following optional variables: -# BABELTRACE_PATH_HINT = A hint on BABELTRACE install path. -# # This module defines the following variables: # BABELTRACE_FOUND = Was Babeltrace found or not? # BABELTRACE_EXECUTABLE = The path to lttng command # BABELTRACE_LIBRARIES = The list of libraries to link to when using Babeltrace # BABELTRACE_INCLUDE_DIR = The path to Babeltrace include directory # -# On can set BABELTRACE_PATH_HINT before using find_package(Babeltrace) and the -# module with use the PATH as a hint to find Babeltrace. -# -# The hint can be given on the command line too: -# cmake -DBABELTRACE_PATH_HINT=/DATA/ERIC/Babeltrace /path/to/source - -if(BABELTRACE_PATH_HINT) - message(STATUS "FindBabeltrace: using PATH HINT: ${BABELTRACE_PATH_HINT}") -else() - set(BABELTRACE_PATH_HINT) -endif() - -#One can add his/her own builtin PATH. -#FILE(TO_CMAKE_PATH "/DATA/ERIC/Babeltrace" MYPATH) -#list(APPEND BABELTRACE_PATH_HINT ${MYPATH}) find_path(BABELTRACE_INCLUDE_DIR - NAMES babeltrace/babeltrace.h babeltrace/ctf/events.h babeltrace/ctf/iterator.h - PATHS ${BABELTRACE_PATH_HINT} - PATH_SUFFIXES include - DOC "The Babeltrace include headers") - -find_path(BABELTRACE_LIBRARY_DIR - NAMES libbabeltrace.so - NAMES libbabeltrace-ctf.so - PATHS ${BABELTRACE_PATH_HINT} - PATH_SUFFIXES lib lib64 - DOC "The Babeltrace libraries") - -find_library(BABELTRACE NAMES babeltrace babeltrace-ctf PATHS ${BABELTRACE_LIBRARY_DIR}) + NAMES babeltrace/babeltrace.h babeltrace/ctf/events.h babeltrace/ctf/iterator.h) -set(BABELTRACE_LIBRARIES ${BABELTRACE}) +find_library(BABELTRACE_LIBRARY + NAMES babeltrace babeltrace-ctf) -message(STATUS "Looking for Babeltrace...") -set(BABELTRACE_NAMES "babeltrace;babeltrace-ctf") -# FIND_PROGRAM twice using NO_DEFAULT_PATH on first shot find_program(BABELTRACE_EXECUTABLE - NAMES ${BABELTRACE_NAMES} - PATHS ${BABELTRACE_PATH_HINT}/bin /bin - NO_DEFAULT_PATH - DOC "The BABELTRACE command line tool") + NAMES babeltrace babeltrace-ctf) -# handle the QUIETLY and REQUIRED arguments and set PRELUDE_FOUND to TRUE if -# all listed variables are TRUE include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(BABELTRACE - REQUIRED_VARS BABELTRACE_INCLUDE_DIR BABELTRACE_LIBRARY_DIR) -# VERSION FPHSA options not handled by CMake version < 2.8.2) -# VERSION_VAR) -mark_as_advanced(BABELTRACE_INCLUDE_DIR) -mark_as_advanced(BABELTRACE_LIBRARY_DIR) +find_package_handle_standard_args(BABELTRACE DEFAULT_MSG + BABELTRACE_INCLUDE_DIR BABELTRACE_LIBRARY) +set(BABELTRACE_LIBRARIES ${BABELTRACE_LIBRARY}) +mark_as_advanced(BABELTRACE_INCLUDE_DIR BABELTRACE_LIBRARY) From f8553f3ab9fc537f646c1f91c4d366a108a4441d Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 22 Jul 2016 12:23:32 +0800 Subject: [PATCH 08/14] cmake: do not include undefind paths for example ``` include_directories(${LEVELDB_PREFIX}/include) ``` does not make sense if `LEVELDB_PREFIX` is not defined. Signed-off-by: Kefu Chai --- CMakeLists.txt | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2c87ffc177d48..aeb59b49ad800 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -57,22 +57,24 @@ endif(WITH_MANPAGE) include_directories( ${PROJECT_BINARY_DIR}/src/include - ${OFED_PREFIX}/include - ${LEVELDB_PREFIX}/include - ${PROJECT_SOURCE_DIR}/src -) - -link_directories( - ${OFED_PREFIX}/lib - ${LEVELDB_PREFIX}/lib -) + ${PROJECT_SOURCE_DIR}/src) + +if(LEVELDB_PREFIX) + include_directories(${LEVELDB_PREFIX}/include) + link_directories(${LEVELDB_PREFIX}/lib) +endif() + +if(OFED_PREFIX) + include_directories(${OFED_PREFIX}/include) + link_directories(${OFED_PREFIX}/lib) +endif() + if(FREEBSD) include_directories(/usr/local/include) link_directories(/usr/local/lib) list(APPEND CMAKE_REQUIRED_INCLUDES /usr/local/include) endif(FREEBSD) - #put all the libs and binaries in one place set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) From 94db627c315fba2dd7933f1e5fc19d424e6bc105 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 22 Jul 2016 12:51:04 +0800 Subject: [PATCH 09/14] cmake: fix libaio detection * we used to check the header file of "aio.h" which is part of glibc, the glibc async i/o, and the corresponding library is librt. but what we are using is libaio. * reference libaio using AIO_LIBRARIES for consistency. Signed-off-by: Kefu Chai --- cmake/modules/Findaio.cmake | 52 +++++++------------------------------ src/os/CMakeLists.txt | 2 +- 2 files changed, 11 insertions(+), 43 deletions(-) diff --git a/cmake/modules/Findaio.cmake b/cmake/modules/Findaio.cmake index da4ac11e071a3..04b064297c0f9 100644 --- a/cmake/modules/Findaio.cmake +++ b/cmake/modules/Findaio.cmake @@ -1,50 +1,18 @@ # - Find AIO # -# AIO_INCLUDE - Where to find AIO/aio.h +# AIO_INCLUDE - Where to find libaio.h # AIO_LIBS - List of libraries when using AIO. # AIO_FOUND - True if AIO found. -get_filename_component(module_file_path ${CMAKE_CURRENT_LIST_FILE} PATH) +find_path(AIO_INCLUDE_DIR + libaio.h + HINTS $ENV{AIO_ROOT}/include) -# Look for the header file. -find_path(AIO_INCLUDE -NAMES aio.h -PATHS /usr/include $ENV{AIO_ROOT}/include /opt/local/include /usr/local/include -DOC "Path in which the file AIO/aio.h is located." ) +find_library(AIO_LIBRARIES + aio + HINTS $ENV{AIO_ROOT}/lib) -mark_as_advanced(AIO_INCLUDE) - -# Look for the library. -# Does this work on UNIX systems? (LINUX) -find_library(AIO_LIBS -NAMES aio -PATHS /usr/lib /usr/lib/x86_64-linux-gnu $ENV{AIO_ROOT}/lib -DOC "Path to AIO library.") - -mark_as_advanced(AIO_LIBS) - -# Copy the results to the output variables. -if (AIO_INCLUDE AND AIO_LIBS) - message(STATUS "Found AIO in ${AIO_INCLUDE} ${AIO_LIBS}") - set(AIO_FOUND 1) - include(CheckCXXSourceCompiles) - set(CMAKE_REQUIRED_LIBRARY ${AIO_LIBS} pthread) - set(CMAKE_REQUIRED_INCLUDES ${AIO_INCLUDE}) - else () - set(AIO_FOUND 0) - endif () - - # Report the results. - if (NOT AIO_FOUND) - set(AIO_DIR_MESSAGE "AIO was not found. Make sure AIO_LIBS and AIO_INCLUDE are set.") - if (AIO_FIND_REQUIRED) - message(FATAL_ERROR "${AIO_DIR_MESSAGE}") - elseif (NOT AIO_FIND_QUIETLY) - message(STATUS "${AIO_DIR_MESSAGE}") - endif () - endif () - -# handle the QUIETLY and REQUIRED arguments and set UUID_FOUND to TRUE if -# all listed variables are TRUE include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(aio DEFAULT_MSG AIO_LIBS AIO_INCLUDE) +find_package_handle_standard_args(aio DEFAULT_MSG AIO_LIBRARIES AIO_INCLUDE_DIR) + +mark_as_advanced(AIO_INCLUDE_DIR AIO_LIBRARIES) diff --git a/src/os/CMakeLists.txt b/src/os/CMakeLists.txt index ad79e1b022010..9cc14367c1b40 100644 --- a/src/os/CMakeLists.txt +++ b/src/os/CMakeLists.txt @@ -54,7 +54,7 @@ endif() add_library(os STATIC ${libos_srcs} $) if(HAVE_LIBAIO) - target_link_libraries(os aio) + target_link_libraries(os ${AIO_LIBRARIES}) endif() if(HAVE_LIBFUSE) From 342d8279d4d1daeffe76f2fa566a47b62ad01d10 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 22 Jul 2016 13:06:59 +0800 Subject: [PATCH 10/14] cmake: cleanup Findblkid.cmake * remove unused bits * fix the wrong mark_as_advanced() call. Signed-off-by: Kefu Chai --- cmake/modules/Findblkid.cmake | 28 ++-------------------------- 1 file changed, 2 insertions(+), 26 deletions(-) diff --git a/cmake/modules/Findblkid.cmake b/cmake/modules/Findblkid.cmake index 08ef0fcd9256e..66de92f63f986 100644 --- a/cmake/modules/Findblkid.cmake +++ b/cmake/modules/Findblkid.cmake @@ -25,33 +25,9 @@ find_path(BLKID_INCLUDE_DIR blkid/blkid.h) -set(BLKID_NAMES ${BLKID_NAMES} blkid) -find_library(BLKID_LIBRARY NAMES ${BLKID_NAMES}) +find_library(BLKID_LIBRARIES blkid) -if (BLKID_INCLUDE_DIR AND BLKID_LIBRARY) - set(BLKID_FOUND TRUE) - set( BLKID_LIBRARIES ${BLKID_LIBRARY} ) -else () - set(BLKID_FOUND FALSE) - set( BLKID_LIBRARIES ) -endif () - -if (BLKID_FOUND) - message(STATUS "Found libblkid: ${BLKID_LIBRARY}") -else () - message(STATUS "Not Found libblkid: ${BLKID_LIBRARY}") - if (BLKID_FIND_REQUIRED) - message(STATUS "Looked for libblkid named ${BLKID_NAMES}.") - message(FATAL_ERROR "Could NOT find libblkid") - endif () -endif () - -# handle the QUIETLY and REQUIRED arguments and set UUID_FOUND to TRUE if -# all listed variables are TRUE include(FindPackageHandleStandardArgs) find_package_handle_standard_args(blkid DEFAULT_MSG BLKID_LIBRARIES BLKID_INCLUDE_DIR) -mark_as_advanced( - BLKID_LIBRARY - BLKID_I -) +mark_as_advanced(BLKID_LIBRARIES BLKID_INCLUDE_DIR) From 98c3df5a0d79417ef89f08ca5f79f4e8979eccba Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 22 Jul 2016 13:15:54 +0800 Subject: [PATCH 11/14] cmake: cleanup Findudev.cmake remove the crufts for handling the REQUIRED argument. Signed-off-by: Kefu Chai --- cmake/modules/Findudev.cmake | 29 +++-------------------------- 1 file changed, 3 insertions(+), 26 deletions(-) diff --git a/cmake/modules/Findudev.cmake b/cmake/modules/Findudev.cmake index 5409a079cf9c4..fd936fc8887e0 100644 --- a/cmake/modules/Findudev.cmake +++ b/cmake/modules/Findudev.cmake @@ -24,34 +24,11 @@ # UDEV_FOUND - True if udev found. find_path(UDEV_INCLUDE_DIR libudev.h) +find_library(UDEV_LIBRARIES udev) -set(UDEV_NAMES ${UDEV_NAMES} udev) -find_library(UDEV_LIBRARY NAMES ${UDEV_NAMES}) - -if(UDEV_INCLUDE_DIR AND UDEV_LIBRARY) - set(UDEV_FOUND TRUE) - set(UDEV_LIBRARIES ${UDEV_LIBRARY}) -else() - set(UDEV_FOUND FALSE) - set(UDEV_LIBRARIES) -endif() - -if(UDEV_FOUND) - message(STATUS "Found libudev: ${UDEV_LIBRARY}") -else() - message(STATUS "Not Found libudev: ${UDEV_LIBRARY}") - if(UDEV_FIND_REQUIRED) - message(STATUS "Looked for libudev named ${UDEV_NAMES}.") - message(FATAL_ERROR "Could NOT find libudev") - endif() -endif() - -# handle the QUIETLY and REQUIRED arguments and set UUID_FOUND to TRUE if -# all listed variables are TRUE include(FindPackageHandleStandardArgs) find_package_handle_standard_args(udev DEFAULT_MSG UDEV_LIBRARIES UDEV_INCLUDE_DIR) mark_as_advanced( - UDEV_LIBRARY - UDEV_INCLUDE_DIR -) + UDEV_LIBRARIES + UDEV_INCLUDE_DIR) From 07206f3173699d733d5cca156a103ecd4ee3cc38 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Mon, 25 Jul 2016 16:17:15 +0800 Subject: [PATCH 12/14] cmake: cleanup Findgperftools.cmake remove unused bits Signed-off-by: Kefu Chai --- cmake/modules/Findgperftools.cmake | 5 ----- 1 file changed, 5 deletions(-) diff --git a/cmake/modules/Findgperftools.cmake b/cmake/modules/Findgperftools.cmake index 28b08b6ffbe35..f1bf24a09b58b 100644 --- a/cmake/modules/Findgperftools.cmake +++ b/cmake/modules/Findgperftools.cmake @@ -9,10 +9,7 @@ if(GPERFTOOLS_INCLUDE_DIR AND GPERFTOOLS_LIBRARIES) set(GPERFTOOLS_FIND_QUIETLY TRUE) endif(GPERFTOOLS_INCLUDE_DIR AND GPERFTOOLS_LIBRARIES) -INCLUDE(CheckCXXSymbolExists) - # include dir - find_path(GPERFTOOLS_INCLUDE_DIR profiler.h NO_DEFAULT_PATH PATHS /usr/include /usr/include/gperftools @@ -21,10 +18,8 @@ find_path(GPERFTOOLS_INCLUDE_DIR profiler.h NO_DEFAULT_PATH PATHS /usr/local/include ) - # finally the library itself find_library(LIBPROFILER NAMES profiler) -CHECK_INCLUDE_FILES("google/profiler.h" HAVE_PROFILER_H) set(GPERFTOOLS_LIBRARIES ${LIBPROFILER}) # handle the QUIETLY and REQUIRED arguments and set GPERFTOOLS_FOUND to TRUE if From 8268d1ba6aaa6e8552040e95c8bd6d6d6e035c81 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Mon, 25 Jul 2016 16:18:46 +0800 Subject: [PATCH 13/14] cmake: do not link against profiler if gperftools is found this behaviour matches the autotools. and we should not enable profiling unless asked to do so. Fixes: http://tracker.ceph.com/issues/16804 Signed-off-by: Kefu Chai --- CMakeLists.txt | 11 ----------- src/CMakeLists.txt | 18 ++++++++++++------ 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index aeb59b49ad800..6014a5ba22890 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -249,17 +249,6 @@ if(NOT ${ATOMIC_OPS_FOUND}) set(NO_ATOMIC_OPS 1) endif(NOT ${ATOMIC_OPS_FOUND}) -option(WITH_GPERFTOOLS "gperftools is here" ON) -if(${WITH_GPERFTOOLS}) - find_package(gperftools) - set(HAVE_GPERFTOOLS ${GPERFTOOLS_FOUND}) - if(${HAVE_GPERFTOOLS}) - find_file(HAVE_GPERFTOOLS_HEAP_PROFILER_H heap-profiler.h PATHS /usr/include/gperftools) - find_file(HAVE_GPERFTOOLS_MALLOC_EXTENSION_H malloc_extension.h PATHS /usr/include/gperftools) - find_file(HAVE_GPERFTOOLS_PROFILER_H profiler.h PATHS /usr/include/gperftools) - endif(${HAVE_GPERFTOOLS}) -endif(${WITH_GPERFTOOLS}) - find_package(snappy REQUIRED) #if allocator is set on command line make sure it matches below strings diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8784350b775a4..20173cb3c5414 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -201,9 +201,19 @@ set(EXTRALIBS uuid rt ${CMAKE_DL_LIBS} ${ATOMIC_OPS_LIBRARIES}) option(WITH_PROFILER "build extra profiler binaries" OFF) if(WITH_PROFILER) + find_package(gperftools REQUIRED) list(APPEND EXTRALIBS profiler) endif(WITH_PROFILER) +if(WITH_PROFILER AND ALLOCATOR STREQUAL "tcmalloc") + find_file(HAVE_GPERFTOOLS_HEAP_PROFILER_H heap-profiler.h + PATHS ${GPERFTOOLS_INCLUDE_DIR}) + find_file(HAVE_GPERFTOOLS_MALLOC_EXTENSION_H malloc_extension.h + PATHS ${GPERFTOOLS_INCLUDE_DIR}) + find_file(HAVE_GPERFTOOLS_PROFILER_H profiler.h + PATHS ${GPERFTOOLS_INCLUDE_DIR}) +endif() + if(${ENABLE_COVERAGE}) find_program(HAVE_GCOV gcov) if(NOT HAVE_GCOV) @@ -476,13 +486,13 @@ set(common_mountcephfs_files add_library(common_mountcephfs_objs OBJECT ${common_mountcephfs_files}) -if(WITH_PROFILER AND HAVE_GPERFTOOLS) +if(WITH_PROFILER) list(APPEND libcommon_files perfglue/cpu_profiler.cc) else() list(APPEND libcommon_files perfglue/disabled_stubs.cc) -endif(WITH_PROFILER AND HAVE_GPERFTOOLS) +endif() if(ENABLE_SHARED) list(APPEND libcommon_files @@ -499,10 +509,6 @@ set_source_files_properties(${CMAKE_SOURCE_DIR}/src/ceph_ver.c ${CMAKE_SOURCE_DIR}/src/test/encoding/ceph_dencoder.cc APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/src/include/ceph_ver.h) -if(${HAVE_GPERFTOOLS}) - target_link_libraries(common profiler) -endif(${HAVE_GPERFTOOLS}) - if(HAVE_ARMV8_CRC) add_library(common_crc_aarch64 STATIC common/crc32c_aarch64.c) set_target_properties(common_crc_aarch64 PROPERTIES COMPILE_FLAGS "${CMAKE_C_FLAGS} ${ARM_CRC_FLAGS}") From e92c9cc1f0899a4e898ccc9a178591570d839066 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Tue, 26 Jul 2016 13:41:48 +0800 Subject: [PATCH 14/14] cmake: move flock.cc from libmds into libcommon as we don't need to compile the whole mds just for building the libcephfs Signed-off-by: Kefu Chai --- src/CMakeLists.txt | 3 ++- src/client/CMakeLists.txt | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 20173cb3c5414..6f5273d21ea27 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -314,7 +314,8 @@ list(APPEND mds_files mds/FSMap.cc mds/FSMapUser.cc mds/inode_backtrace.cc - mds/mdstypes.cc) + mds/mdstypes.cc + mds/flock.cc) set(crush_srcs crush/builder.c diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt index d7f45f43402a7..e3e2afabd0bff 100644 --- a/src/client/CMakeLists.txt +++ b/src/client/CMakeLists.txt @@ -8,4 +8,4 @@ set(libclient_srcs Trace.cc posix_acl.cc) add_library(client STATIC ${libclient_srcs}) -target_link_libraries(client osdc mds) +target_link_libraries(client common osdc)