]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
build: Fix fmt version check
authorAdam Emerson <aemerson@redhat.com>
Sat, 28 Oct 2023 17:29:59 +0000 (13:29 -0400)
committerAdam Emerson <aemerson@redhat.com>
Mon, 30 Oct 2023 14:38:36 +0000 (10:38 -0400)
Currently, when attempting to build ceph on a system with fmt
installed, we try to build against it whatever the version. This
constantly breaks people's builds, since newer versions of fmt often
change the API.

This change specifies that versions must be below 10 as well as at or
above 8.1.1, so that on systems with a new format, we fall back to
using the submodule.

It also removes the `Findfmt.cmake` module, as that does not check
the installed version. Instead, we use the cmake config file installed by
the system package of fmt and does support version checking.

Signed-off-by: Adam Emerson <aemerson@redhat.com>
cmake/modules/Findfmt.cmake [deleted file]
src/CMakeLists.txt

diff --git a/cmake/modules/Findfmt.cmake b/cmake/modules/Findfmt.cmake
deleted file mode 100644 (file)
index 734c2b0..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-find_path(fmt_INCLUDE_DIR NAMES fmt/format.h)
-
-if(fmt_INCLUDE_DIR)
-  set(_fmt_version_file "${fmt_INCLUDE_DIR}/fmt/core.h")
-  if(NOT EXISTS "${_fmt_version_file}")
-    set(_fmt_version_file "${fmt_INCLUDE_DIR}/fmt/format.h")
-  endif()
-  if(EXISTS "${_fmt_version_file}")
-    # parse "#define FMT_VERSION 40100" to 4.1.0
-    file(STRINGS "${_fmt_version_file}" fmt_VERSION_LINE
-      REGEX "^#define[ \t]+FMT_VERSION[ \t]+[0-9]+$")
-    string(REGEX REPLACE "^#define[ \t]+FMT_VERSION[ \t]+([0-9]+)$"
-      "\\1" fmt_VERSION "${fmt_VERSION_LINE}")
-    foreach(ver "fmt_VERSION_PATCH" "fmt_VERSION_MINOR" "fmt_VERSION_MAJOR")
-      math(EXPR ${ver} "${fmt_VERSION} % 100")
-      math(EXPR fmt_VERSION "(${fmt_VERSION} - ${${ver}}) / 100")
-    endforeach()
-    set(fmt_VERSION
-      "${fmt_VERSION_MAJOR}.${fmt_VERSION_MINOR}.${fmt_VERSION_PATCH}")
-  endif()
-endif()
-
-find_library(fmt_LIBRARY NAMES fmt)
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(fmt
-  REQUIRED_VARS fmt_INCLUDE_DIR fmt_LIBRARY
-  VERSION_VAR fmt_VERSION)
-mark_as_advanced(
-  fmt_INCLUDE_DIR
-  fmt_LIBRARY
-  fmt_VERSION_MAJOR
-  fmt_VERSION_MINOR
-  fmt_VERSION_PATCH
-  fmt_VERSION_STRING)
-
-if(fmt_FOUND AND NOT (TARGET fmt::fmt))
-  add_library(fmt-header-only INTERFACE)
-  set_target_properties(fmt-header-only PROPERTIES
-    INTERFACE_INCLUDE_DIRECTORIES "${fmt_INCLUDE_DIR}"
-    INTERFACE_COMPILE_DEFINITIONS FMT_HEADER_ONLY=1
-    INTERFACE_COMPILE_FEATURES cxx_std_11)
-
-  add_library(fmt UNKNOWN IMPORTED GLOBAL)
-  set_target_properties(fmt PROPERTIES
-    INTERFACE_INCLUDE_DIRECTORIES "${fmt_INCLUDE_DIR}"
-    INTERFACE_COMPILE_FEATURES cxx_std_11
-    IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
-    IMPORTED_LOCATION "${fmt_LIBRARY}")
-
-  if(WITH_FMT_HEADER_ONLY)
-    # please note, this is different from how upstream defines fmt::fmt.
-    # in order to force 3rd party libraries to link against fmt-header-only if
-    # WITH_FMT_HEADER_ONLY is ON, we have to point fmt::fmt to fmt-header-only
-    # in this case.
-    add_library(fmt::fmt ALIAS fmt-header-only)
-  else()
-    add_library(fmt::fmt ALIAS fmt)
-  endif()
-
-endif()
index 8aa271a2b5b23eb0a87a541063ab7bfe1e003dac..deb27a1c36cfd71ca91f5882533fa96642da6c08 100644 (file)
@@ -326,13 +326,15 @@ if(NOT TARGET RapidJSON::RapidJSON)
 endif()
 
 option(WITH_FMT_HEADER_ONLY "use header-only version of fmt library" OFF)
-set(WITH_FMT_VERSION "8.1.1" CACHE
-  STRING "build with fmt version")
-find_package(fmt ${WITH_FMT_VERSION} QUIET)
+find_package(fmt 8.1.1...<10.0.0)
 if(fmt_FOUND)
-  include_directories(SYSTEM "${fmt_INCLUDE_DIR}")
+  message(STATUS "Building with system fmt.")
+  if (WITH_FMT_HEADER_ONLY)
+    message(STATUS "Using fmt header-only.")
+    add_library(fmt::fmt ALIAS fmt::fmt-header-only)
+  endif()
 else()
-  message(STATUS "Could not find fmt, will build it")
+  message(STATUS "Building fmt as submodule")
   set(old_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
   set(BUILD_SHARED_LIBS FALSE)
   add_subdirectory(fmt)