From d8a1d1f93ab3ee6505f4c48e8b27917464302a89 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Thu, 15 Apr 2021 18:46:11 +0800 Subject: [PATCH] cmake: rearrange configure_file() AddCephTest and googletest's CMake scripts also call find_package(Python3...), but they do not specify the required minor version of Python3. by default, find_package(Python3...) picks the highest available python3. so, if we have multiple python3 versions installed in the system, and the highest python3 version is not the one specified by the -DWITH_PYTHON3=3.x.y in the cmake command line, we might end up using a different python3 for the ceph CLI. and even worse, the required python3 package might not available for the picked python3 interpreter found by googletest. as, in general, only a single python3 has the full access to prepackaged python3-* shipped by a GNU/Linux distro. in this change, the configure_file() calls are rearranged to the top of src/CMakeLists.txt, so they have less chance to use the "polluted" cmake variable for their subvars. this change address the test failure where we have, for instance, python3.8 installed on RHEL8/CentOS8, where python3.6 is the python3 which has the access to the python3-* packages. Signed-off-by: Kefu Chai --- src/CMakeLists.txt | 113 ++++++++++++++++++++++----------------------- 1 file changed, 56 insertions(+), 57 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 01a4bf69e6d0..72ff9ac9cd11 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -22,6 +22,55 @@ set(pkgdatadir ${CMAKE_INSTALL_FULL_DATADIR}) set(datadir ${CEPH_INSTALL_DATADIR}) set(prefix ${CMAKE_INSTALL_PREFIX}) +configure_file(${CMAKE_SOURCE_DIR}/src/init-ceph.in + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/init-ceph @ONLY) + +configure_file(ceph-post-file.in + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-post-file @ONLY) + +configure_file(ceph-crash.in + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-crash @ONLY) + +# the src/.git_version file may be written out by make-dist; otherwise +# we pull the git version from .git +option(ENABLE_GIT_VERSION "build Ceph with git version string" ON) +if(ENABLE_GIT_VERSION) + get_git_head_revision(GIT_REFSPEC CEPH_GIT_VER) + git_describe(CEPH_GIT_NICE_VER_WITH_V --always) + # remove leading 'v' + string(SUBSTRING ${CEPH_GIT_NICE_VER_WITH_V} 1 -1 CEPH_GIT_NICE_VER) + #if building from a source tarball via make-dist + if(${CEPH_GIT_VER} STREQUAL "GITDIR-NOTFOUND") + message(STATUS "Ceph/.git directory not found, parsing ${CMAKE_CURRENT_SOURCE_DIR}/.git_version for CEPH_GIT_VER and CEPH_GIT_NICE_VER") + file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/.git_version CEPH_GIT_SHA_AND_TAG) + list(GET CEPH_GIT_SHA_AND_TAG 0 CEPH_GIT_VER) + list(GET CEPH_GIT_SHA_AND_TAG 1 CEPH_GIT_NICE_VER) + endif(${CEPH_GIT_VER} STREQUAL "GITDIR-NOTFOUND") +else(ENABLE_GIT_VERSION) + set(CEPH_GIT_VER "no_version") + set(CEPH_GIT_NICE_VER "Development") +endif(ENABLE_GIT_VERSION) + +# the src/ceph_release file is 3 lines, +# +# +# +# note that the release name is semi-redundant and must match CEPH_RELEASE_* +# definitions in include/rados.h and common/ceph_strings.c. +file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/ceph_release CEPH_RELEASE_FILE) +list(GET CEPH_RELEASE_FILE 0 CEPH_RELEASE) +list(GET CEPH_RELEASE_FILE 1 CEPH_RELEASE_NAME) +list(GET CEPH_RELEASE_FILE 2 CEPH_RELEASE_TYPE) + +configure_file(${CMAKE_SOURCE_DIR}/src/ceph.in + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph @ONLY) + +# Common infrastructure +configure_file( + ${CMAKE_SOURCE_DIR}/src/ceph_ver.h.in.cmake + ${CMAKE_BINARY_DIR}/src/include/ceph_ver.h + @ONLY) + add_definitions( -DHAVE_CONFIG_H -D__CEPH__ @@ -217,38 +266,13 @@ if(${ENABLE_COVERAGE}) list(APPEND EXTRALIBS gcov) endif(${ENABLE_COVERAGE}) -set(GCOV_PREFIX_STRIP 4) - -# the src/.git_version file may be written out by make-dist; otherwise -# we pull the git version from .git -option(ENABLE_GIT_VERSION "build Ceph with git version string" ON) -if(${ENABLE_GIT_VERSION}) - get_git_head_revision(GIT_REFSPEC CEPH_GIT_VER) - git_describe(CEPH_GIT_NICE_VER_WITH_V --always) - # remove leading 'v' - string(SUBSTRING ${CEPH_GIT_NICE_VER_WITH_V} 1 -1 CEPH_GIT_NICE_VER) - #if building from a source tarball via make-dist - if(${CEPH_GIT_VER} STREQUAL "GITDIR-NOTFOUND") - message(STATUS "Ceph/.git directory not found, parsing ${CMAKE_CURRENT_SOURCE_DIR}/.git_version for CEPH_GIT_VER and CEPH_GIT_NICE_VER") - file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/.git_version CEPH_GIT_SHA_AND_TAG) - list(GET CEPH_GIT_SHA_AND_TAG 0 CEPH_GIT_VER) - list(GET CEPH_GIT_SHA_AND_TAG 1 CEPH_GIT_NICE_VER) - endif(${CEPH_GIT_VER} STREQUAL "GITDIR-NOTFOUND") -else(${ENABLE_GIT_VERSION}) - set(CEPH_GIT_VER "no_version") - set(CEPH_GIT_NICE_VER "Development") -endif(${ENABLE_GIT_VERSION}) - -# the src/ceph_release file is 3 lines, -# -# -# -# note that the release name is semi-redundant and must match CEPH_RELEASE_* -# definitions in include/rados.h and common/ceph_strings.c. -file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/ceph_release CEPH_RELEASE_FILE) -list(GET CEPH_RELEASE_FILE 0 CEPH_RELEASE) -list(GET CEPH_RELEASE_FILE 1 CEPH_RELEASE_NAME) -list(GET CEPH_RELEASE_FILE 2 CEPH_RELEASE_TYPE) +if(WITH_TESTS) + set(GCOV_PREFIX_STRIP 4) + configure_file(${CMAKE_SOURCE_DIR}/src/ceph-coverage.in + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-coverage @ONLY) + configure_file(${CMAKE_SOURCE_DIR}/src/ceph-debugpack.in + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-debugpack @ONLY) +endif() option(WITH_OCF "build OCF-compliant cluster resource agent" OFF) if(WITH_OCF) @@ -285,12 +309,6 @@ if (WITH_BLKIN) add_subdirectory(blkin/blkin-lib) endif(WITH_BLKIN) -# Common infrastructure -configure_file( - ${CMAKE_SOURCE_DIR}/src/ceph_ver.h.in.cmake - ${CMAKE_BINARY_DIR}/src/include/ceph_ver.h - @ONLY) - set(mds_files) list(APPEND mds_files mds/MDSMap.cc @@ -722,25 +740,6 @@ endif() add_subdirectory(crypto) -if(WITH_TESTS) - configure_file(${CMAKE_SOURCE_DIR}/src/ceph-coverage.in - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-coverage @ONLY) - configure_file(${CMAKE_SOURCE_DIR}/src/ceph-debugpack.in - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-debugpack @ONLY) -endif() - -configure_file(${CMAKE_SOURCE_DIR}/src/ceph.in - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph @ONLY) - -configure_file(${CMAKE_SOURCE_DIR}/src/init-ceph.in - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/init-ceph @ONLY) - -configure_file(ceph-post-file.in - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-post-file @ONLY) - -configure_file(ceph-crash.in - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-crash @ONLY) - if(WITH_TESTS) install(PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-debugpack -- 2.47.3