Re: [PATCH v3 1/2] configure: use pkg-config to find liburing

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



On 19/12/24 20:25, Mark Harmstone wrote:
Change our autoconf macros so that instead of checking for the presence
of liburing.h, we use pkg-config.

The benefit of this is that we can then check the version of liburing,
and do conditional compilation based on this. There's a macro
IO_URING_CHECK_VERSION already, but it's only in relatively recent
versions of liburing.h.

This replaces HAVE_URING_H, defined by AC_CHECK_HEADERS, with
HAVE_URING. I also had to rename PKG_{MAJOR,MINOR,REVISION,BUILD} to
start with PACKAGE_, to avoid "possibly undefined macro" errors; it
looks like pkg-config assumes that anything called PKG_* is for its own
use.

Signed-off-by: Mark Harmstone <maharmstone@xxxxxx>
---
  VERSION                         | 8 ++++----
  m4/package_globals.m4           | 4 ++--
  m4/package_liburing.m4          | 6 +++++-
  release.sh                      | 2 +-
  src/feature.c                   | 4 ++--
  src/vfs/idmapped-mounts.c       | 6 +++---
  src/vfs/idmapped-mounts.h       | 2 +-
  src/vfs/tmpfs-idmapped-mounts.c | 6 +++---
  src/vfs/utils.c                 | 4 ++--
  src/vfs/utils.h                 | 6 +++---
  src/vfs/vfstest.c               | 6 +++---
  11 files changed, 29 insertions(+), 25 deletions(-)

diff --git a/VERSION b/VERSION
index 7294a002..afcab53e 100644
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
  #
  # This file is used by configure to get version information
  #
-PKG_MAJOR=1
-PKG_MINOR=1
-PKG_REVISION=1
-PKG_BUILD=1
+PACKAGE_MAJOR=1
+PACKAGE_MINOR=1
+PACKAGE_REVISION=1
+PACKAGE_BUILD=1
diff --git a/m4/package_globals.m4 b/m4/package_globals.m4
index ce7a8c51..c8d5d124 100644
--- a/m4/package_globals.m4
+++ b/m4/package_globals.m4
@@ -9,9 +9,9 @@ AC_DEFUN([AC_PACKAGE_GLOBALS],
      AC_SUBST(pkg_name)
. ./VERSION
-    pkg_version=${PKG_MAJOR}.${PKG_MINOR}.${PKG_REVISION}
+    pkg_version=${PACKAGE_MAJOR}.${PACKAGE_MINOR}.${PACKAGE_REVISION}
      AC_SUBST(pkg_version)
-    pkg_release=$PKG_BUILD
+    pkg_release=$PACKAGE_BUILD
      test -z "$BUILD_VERSION" || pkg_release="$BUILD_VERSION"
      AC_SUBST(pkg_release)
diff --git a/m4/package_liburing.m4 b/m4/package_liburing.m4
index c92cc02a..0553966d 100644
--- a/m4/package_liburing.m4
+++ b/m4/package_liburing.m4
@@ -1,4 +1,8 @@
  AC_DEFUN([AC_PACKAGE_WANT_URING],
-  [ AC_CHECK_HEADERS(liburing.h, [ have_uring=true ], [ have_uring=false ])
+  [ PKG_CHECK_MODULES([LIBURING], [liburing],
+    [ AC_DEFINE([HAVE_LIBURING], [1], [Use liburing])
+      have_uring=true
+    ],
+    [ have_uring=false ])
      AC_SUBST(have_uring)
    ])
diff --git a/release.sh b/release.sh
index 5b78ec79..70fbf47e 100644
--- a/release.sh
+++ b/release.sh
@@ -5,7 +5,7 @@
. ./VERSION -version=${PKG_MAJOR}.${PKG_MINOR}.${PKG_REVISION}
+version=${PACKAGE_MAJOR}.${PACKAGE_MINOR}.${PACKAGE_REVISION}
  date=`date +"%-d %B %Y"`
echo "Cleaning up"
diff --git a/src/feature.c b/src/feature.c
index 7e474ce5..7df36acf 100644
--- a/src/feature.c
+++ b/src/feature.c
@@ -42,7 +42,7 @@
  #include <libaio.h>
  #endif
-#ifdef HAVE_LIBURING_H
+#ifdef HAVE_LIBURING
  #include <liburing.h>
  #endif
@@ -227,7 +227,7 @@ check_aio_support(void)
  static int
  check_uring_support(void)
  {
-#ifdef HAVE_LIBURING_H
+#ifdef HAVE_LIBURING
  	struct io_uring ring;
  	int err;
diff --git a/src/vfs/idmapped-mounts.c b/src/vfs/idmapped-mounts.c
index f4dfc3f3..ed9992f9 100644
--- a/src/vfs/idmapped-mounts.c
+++ b/src/vfs/idmapped-mounts.c
@@ -2206,7 +2206,7 @@ out:
  }
-#ifdef HAVE_LIBURING_H
+#ifdef HAVE_LIBURING
  int tcore_io_uring_idmapped(const struct vfstest_info *info)
  {
  	int fret = -1;
@@ -2743,7 +2743,7 @@ out_unmap:
return fret;
  }
-#endif /* HAVE_LIBURING_H */
+#endif /* HAVE_LIBURING */
/* Validate that protected symlinks work correctly on idmapped mounts. */
  int tcore_protected_symlinks_idmapped_mounts(const struct vfstest_info *info)
@@ -8859,7 +8859,7 @@ static const struct test_struct t_idmapped_mounts[] = {
  	{ tcore_hardlink_crossing_idmapped_mounts,				true,	"cross idmapped mount hardlink",								},
  	{ tcore_hardlink_from_idmapped_mount,					true,	"hardlinks from idmapped mounts",								},
  	{ tcore_hardlink_from_idmapped_mount_in_userns,			true,	"hardlinks from idmapped mounts in user namespace",						},
-#ifdef HAVE_LIBURING_H
+#ifdef HAVE_LIBURING
  	{ tcore_io_uring_idmapped,						true,	"io_uring from idmapped mounts",								},
  	{ tcore_io_uring_idmapped_userns,					true,	"io_uring from idmapped mounts in user namespace",						},
  	{ tcore_io_uring_idmapped_unmapped,					true,	"io_uring from idmapped mounts with unmapped ids",						},
diff --git a/src/vfs/idmapped-mounts.h b/src/vfs/idmapped-mounts.h
index 4a2c7b39..688394c8 100644
--- a/src/vfs/idmapped-mounts.h
+++ b/src/vfs/idmapped-mounts.h
@@ -30,7 +30,7 @@ int tcore_fscaps_idmapped_mounts_in_userns_separate_userns(const struct vfstest_
  int tcore_hardlink_crossing_idmapped_mounts(const struct vfstest_info *info);
  int tcore_hardlink_from_idmapped_mount(const struct vfstest_info *info);
  int tcore_hardlink_from_idmapped_mount_in_userns(const struct vfstest_info *info);
-#ifdef HAVE_LIBURING_H
+#ifdef HAVE_LIBURING
  int tcore_io_uring_idmapped(const struct vfstest_info *info);
  int tcore_io_uring_idmapped_userns(const struct vfstest_info *info);
  int tcore_io_uring_idmapped_unmapped(const struct vfstest_info *info);
diff --git a/src/vfs/tmpfs-idmapped-mounts.c b/src/vfs/tmpfs-idmapped-mounts.c
index 0899aed9..d8212bce 100644
--- a/src/vfs/tmpfs-idmapped-mounts.c
+++ b/src/vfs/tmpfs-idmapped-mounts.c
@@ -167,7 +167,7 @@ static int tmpfs_hardlink_from_idmapped_mount_in_userns(const struct vfstest_inf
  	return tmpfs_nested_mount_setup(info, tcore_hardlink_from_idmapped_mount_in_userns);
  }
-#ifdef HAVE_LIBURING_H
+#ifdef HAVE_LIBURING
  static int tmpfs_io_uring_idmapped(const struct vfstest_info *info)
  {
  	return tmpfs_nested_mount_setup(info, tcore_io_uring_idmapped);
@@ -184,7 +184,7 @@ static int tmpfs_io_uring_idmapped_unmapped_userns(const struct vfstest_info *in
  {
  	return tmpfs_nested_mount_setup(info, tcore_io_uring_idmapped_unmapped_userns);
  }
-#endif /* HAVE_LIBURING_H */
+#endif /* HAVE_LIBURING */
static int tmpfs_protected_symlinks_idmapped_mounts(const struct vfstest_info *info)
  {
@@ -272,7 +272,7 @@ static const struct test_struct t_tmpfs[] = {
  	{ tmpfs_hardlink_crossing_idmapped_mounts,				T_REQUIRE_USERNS | T_REQUIRE_IDMAPPED_MOUNTS,	"tmpfs cross idmapped mount hardlink",								},
  	{ tmpfs_hardlink_from_idmapped_mount,					T_REQUIRE_USERNS | T_REQUIRE_IDMAPPED_MOUNTS,	"tmpfs hardlinks from idmapped mounts",								},
  	{ tmpfs_hardlink_from_idmapped_mount_in_userns,				T_REQUIRE_USERNS | T_REQUIRE_IDMAPPED_MOUNTS,	"tmpfs hardlinks from idmapped mounts in user namespace",						},
-#ifdef HAVE_LIBURING_H
+#ifdef HAVE_LIBURING
  	{ tmpfs_io_uring_idmapped,						T_REQUIRE_USERNS | T_REQUIRE_IDMAPPED_MOUNTS,	"tmpfs io_uring from idmapped mounts",								      },
  	{ tmpfs_io_uring_idmapped_userns,					T_REQUIRE_USERNS | T_REQUIRE_IDMAPPED_MOUNTS,	"tmpfs io_uring from idmapped mounts in user namespace",					      },
  	{ tmpfs_io_uring_idmapped_unmapped,					T_REQUIRE_USERNS | T_REQUIRE_IDMAPPED_MOUNTS,	"tmpfs io_uring from idmapped mounts with unmapped ids",					      },
diff --git a/src/vfs/utils.c b/src/vfs/utils.c
index 0ab5de15..c1c7951c 100644
--- a/src/vfs/utils.c
+++ b/src/vfs/utils.c
@@ -502,7 +502,7 @@ out:
  	return fret;
  }
-#ifdef HAVE_LIBURING_H
+#ifdef HAVE_LIBURING
  int io_uring_openat_with_creds(struct io_uring *ring, int dfd, const char *path,
  			       int cred_id, bool with_link, int *ret_cqe)
  {
@@ -555,7 +555,7 @@ int io_uring_openat_with_creds(struct io_uring *ring, int dfd, const char *path,
  out:
  	return ret;
  }
-#endif /* HAVE_LIBURING_H */
+#endif /* HAVE_LIBURING */
/* caps_up - raise all permitted caps */
  int caps_up(void)
diff --git a/src/vfs/utils.h b/src/vfs/utils.h
index 872fd96f..c086885a 100644
--- a/src/vfs/utils.h
+++ b/src/vfs/utils.h
@@ -25,7 +25,7 @@
  #include <sys/capability.h>
  #endif
-#ifdef HAVE_LIBURING_H
+#ifdef HAVE_LIBURING
  #include <liburing.h>
  #endif
@@ -349,11 +349,11 @@ static inline bool switch_fsids(uid_t fsuid, gid_t fsgid)
  	return true;
  }
-#ifdef HAVE_LIBURING_H
+#ifdef HAVE_LIBURING
  extern int io_uring_openat_with_creds(struct io_uring *ring, int dfd,
  				      const char *path, int cred_id,
  				      bool with_link, int *ret_cqe);
-#endif /* HAVE_LIBURING_H */
+#endif /* HAVE_LIBURING */
extern int chown_r(int fd, const char *path, uid_t uid, gid_t gid);
  extern int rm_r(int fd, const char *path);
diff --git a/src/vfs/vfstest.c b/src/vfs/vfstest.c
index f842117d..e0c897bb 100644
--- a/src/vfs/vfstest.c
+++ b/src/vfs/vfstest.c
@@ -1222,7 +1222,7 @@ out:
  	return fret;
  }
-#ifdef HAVE_LIBURING_H
+#ifdef HAVE_LIBURING
  static int io_uring(const struct vfstest_info *info)
  {
  	int fret = -1;
@@ -1495,7 +1495,7 @@ out_unmap:
return fret;
  }
-#endif /* HAVE_LIBURING_H */
+#endif /* HAVE_LIBURING */
/* The following tests are concerned with setgid inheritance. These can be
   * filesystem type specific. For xfs, if a new file or directory or node is
@@ -2349,7 +2349,7 @@ static const struct option longopts[] = {
  static const struct test_struct t_basic[] = {
  	{ fscaps,							T_REQUIRE_USERNS,	"fscaps on regular mounts",									},
  	{ hardlink_crossing_mounts,					0,			"cross mount hardlink",										},
-#ifdef HAVE_LIBURING_H
+#ifdef HAVE_LIBURING
  	{ io_uring,							0,			"io_uring",											},
  	{ io_uring_userns,						T_REQUIRE_USERNS,	"io_uring in user namespace",									},
  #endif


Looks good. This can be integrated independent of the 2/2.

Reviewed-by: Anand Jain <anand.jain@xxxxxxxxxx>

Thx.





[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux