]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Use new libkqueue EVFILT_LIBKQUEUE version interface
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 24 Jan 2022 18:20:34 +0000 (12:20 -0600)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 24 Jan 2022 18:32:16 +0000 (12:32 -0600)
This lets us retrieve the real version at runtime.

src/lib/server/dependency.c

index 61afa0cc25cafb1882482e344cb97073e5835ace..0c57343a5c70676d8b1115f0222e5ef413c4e584 100644 (file)
@@ -317,17 +317,25 @@ void dependency_version_numbers_init(CONF_SECTION *cs)
 #  endif
 #endif
 
-#ifdef LIBKQUEUE_VERSION_STRING
+#ifdef EVFILT_LIBKQUEUE
        {
-               char const *libkqueue_version = LIBKQUEUE_VERSION_STRING
-#  ifdef LIBKQUEUE_VERSION_COMMIT
-               " (git #"LIBKQUEUE_VERSION_COMMIT")"
-#  endif
-#  ifdef LIBKQUEUE_VERSION_DATE
-               " ("LIBKQUEUE_VERSION_DATE") retrieved at build time"
-#  endif
-               ;
-               dependency_version_number_add(cs, "libkqueue", libkqueue_version);
+               int kqfd, ret;
+               struct kevent kev, receipt;
+
+               kqfd = kqueue();
+               if (kqfd < 0) {
+               kqueue_error:
+                       dependency_version_number_add(cs, "libkqueue", fr_syserror(errno));
+                       goto kqueue_done;
+               }
+
+               EV_SET(&kev, 0, EVFILT_LIBKQUEUE, EV_ADD, NOTE_VERSION_STR, 0, NULL);
+               ret = kevent(kqfd, &kev, 1, &receipt, 1, &(struct timespec){}) ;
+               close(kqfd);
+               if (ret != 1) goto kqueue_error;
+
+               dependency_version_number_add(cs, "libkqueue", (char *)receipt.udata);
+kqueue_done:
        }
 #endif
 }