]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
libfuse: check the libfuse version from the pkconfig/fuse{3}.pc file
authorXiubo Li <xiubli@redhat.com>
Wed, 6 May 2020 00:43:12 +0000 (20:43 -0400)
committerXiubo Li <xiubli@redhat.com>
Mon, 25 May 2020 01:39:47 +0000 (21:39 -0400)
Since libfuse 3.2 to 3.8 the minor version for FUSE library has
stopped updating together with the releases. So we cannot check
version by using the FUSE_VERSION macro in the fuse_common.h header
file directly.

This will check the major/minor version from the fuse{3}.pc pkconfig
file.

Fixes: https://tracker.ceph.com/issues/45396
Signed-off-by: Xiubo Li <xiubli@redhat.com>
cmake/modules/FindFUSE.cmake
src/ceph_fuse.cc
src/client/fuse_ll.cc
src/include/ceph_fuse.h
src/include/config-h.in.cmake

index 1d0766f33553442968d12c95724ae98fcc77476e..db489bdc1ad6a6346f83307f6b879a284a7c88fb 100644 (file)
@@ -28,14 +28,25 @@ find_library(FUSE_LIBRARIES
   NAMES ${fuse_names}
   PATHS /usr/local/lib64 /usr/local/lib)
 
-foreach(ver "MAJOR" "MINOR")
-  file(STRINGS "${FUSE_INCLUDE_DIR}/fuse_common.h" fuse_ver_${ver}_line
-    REGEX "^#define[\t ]+FUSE_${ver}_VERSION[\t ]+[0-9]+$")
-  string(REGEX REPLACE ".*#define[\t ]+FUSE_${ver}_VERSION[\t ]+([0-9]+)$"
-    "\\1" FUSE_VERSION_${ver} "${fuse_ver_${ver}_line}")
-endforeach()
+find_package(PkgConfig QUIET)
+if(PKG_CONFIG_FOUND)
+  pkg_search_module(PKG_FUSE QUIET ${fuse_names})
+
+  string(REGEX REPLACE "([0-9]+)\.([0-9]+)\.([0-9]+)"
+    "\\1" FUSE_MAJOR_VERSION "${PKG_FUSE_VERSION}")
+  string(REGEX REPLACE "([0-9]+)\.([0-9]+)\.([0-9]+)"
+    "\\2" FUSE_MINOR_VERSION "${PKG_FUSE_VERSION}")
+else()
+  foreach(ver "MAJOR" "MINOR")
+    file(STRINGS "${FUSE_INCLUDE_DIR}/fuse_common.h" fuse_ver_${ver}_line
+      REGEX "^#define[\t ]+FUSE_${ver}_VERSION[\t ]+[0-9]+$")
+    string(REGEX REPLACE ".*#define[\t ]+FUSE_${ver}_VERSION[\t ]+([0-9]+)$"
+      "\\1" FUSE_${ver}_VERSION "${fuse_ver_${ver}_line}")
+  endforeach()
+endif()
+
 set(FUSE_VERSION
-  "${FUSE_VERSION_MAJOR}.${FUSE_VERSION_MINOR}")
+  "${FUSE_MAJOR_VERSION}.${FUSE_MINOR_VERSION}")
 
 include(FindPackageHandleStandardArgs)
 find_package_handle_standard_args(FUSE
index 3692b5c6ff6f6aa4152fc9d801e221a3dba6c227..02aed32ac6994068ef30da388b2c8ed98198f052 100644 (file)
@@ -44,6 +44,7 @@
 
 #include <fuse.h>
 #include <fuse_lowlevel.h>
+#include "include/ceph_fuse.h"
 
 #define dout_context g_ceph_context
 
index 43b33e32a06c4c51f63960a9b35e523c82605f4c..034977b1832e79a84c8ab5fa6c882c39d4b64205 100644 (file)
@@ -34,6 +34,7 @@
 #include "common/config.h"
 #include "include/ceph_assert.h"
 #include "include/cephfs/ceph_ll_client.h"
+#include "include/ceph_fuse.h"
 
 #include "fuse_ll.h"
 #include <fuse.h>
index 45881930b87b4eb15dfc6288df5aa2431401f60e..ae504f6715de476f56b8166f0f243ade7132b3e1 100644 (file)
 #define CEPH_FUSE_H
 
 #define FUSE_USE_VERSION 30
-#include "acconfig.h"
 #include <fuse.h>
+#include "acconfig.h"
+
+/*
+ * Redefine the FUSE_VERSION macro defined in "fuse_common.h"
+ * header file, because the MINOR numner has been forgotten to
+ * update since libfuse 3.2 to 3.8. We need to fetch the MINOR
+ * number from pkgconfig file.
+ */
+#ifdef FUSE_VERSION
+#undef FUSE_VERSION
+#define FUSE_VERSION FUSE_MAKE_VERSION(CEPH_FUSE_MAJOR_VERSION, CEPH_FUSE_MINOR_VERSION)
+#endif
 
 static inline int filler_compat(fuse_fill_dir_t filler,
                                 void *buf, const char *name,
index e26671d3a005df4e770158e39fe9780590cbaf49..40cbc430730b9f39ca1fe95b00bb5d0054c53389 100644 (file)
 /* Define if you have fuse */
 #cmakedefine HAVE_LIBFUSE
 
+/* Define version major */
+#define CEPH_FUSE_MAJOR_VERSION @FUSE_MAJOR_VERSION@
+
+/* Define version minor */
+#define CEPH_FUSE_MINOR_VERSION @FUSE_MINOR_VERSION@
+
 /* Define to 1 if you have libxfs */
 #cmakedefine HAVE_LIBXFS 1