]> git.puffer.fish Git - mirror/frr.git/commitdiff
lib: print version information in libfrr.so 3116/head
authorDavid Lamparter <equinox@diac24.net>
Mon, 1 Oct 2018 17:02:39 +0000 (19:02 +0200)
committerDavid Lamparter <equinox@opensourcerouting.org>
Tue, 2 Oct 2018 08:26:25 +0000 (10:26 +0200)
This makes libfrr.so executable to print its version info.  This is
useful if you need to check your libfrr.so matches your daemons.

Signed-off-by: David Lamparter <equinox@diac24.net>
configure.ac
lib/libfrr.c
lib/subdir.am

index 4d18c7997acefdb3136ab0982d278ae5bfb9e04c..93b7f7a5ff2f17c42ba35d8a96be5dca2bdb4c47 100755 (executable)
@@ -741,6 +741,20 @@ if test "x$with_pkg_git_version" = "xyes"; then
 fi
 AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
 
+AC_CHECK_TOOL([OBJCOPY], [objcopy], [:])
+AC_CACHE_CHECK([for .interp value to use], [frr_cv_interp], [
+  frr_cv_interp=""
+  AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])], [
+    if $OBJCOPY -j.interp -Obinary conftest conftest.interp; then
+      frr_cv_interp="`xargs -0 echo < conftest.interp`"
+    fi
+    test -f conftest.interp && rm conftest.interp
+  ])
+])
+if test -n "$frr_cv_interp"; then
+  AC_DEFINE_UNQUOTED(INTERP, ["$frr_cv_interp"], [.interp value])
+fi
+
 dnl ------------------------------------
 dnl Check C keywords and standard  types
 dnl ------------------------------------
index 2bce4766d3d44af059c2b5068a65b18fdeb611ab..94cd0ab623c8e0e777e2e26d7e00b8e55b653f01 100644 (file)
@@ -973,3 +973,25 @@ void frr_fini(void)
                fclose(fp);
        }
 }
+
+#ifdef INTERP
+static const char interp[]
+       __attribute__((section(".interp"), used)) = INTERP;
+#endif
+/*
+ * executable entry point for libfrr.so
+ *
+ * note that libc initialization is skipped for this so the set of functions
+ * that can be called is rather limited
+ */
+extern void _libfrr_version(void)
+       __attribute__((visibility("hidden"), noreturn));
+void _libfrr_version(void)
+{
+       const char banner[] =
+               FRR_FULL_NAME " " FRR_VERSION ".\n"
+               FRR_COPYRIGHT GIT_INFO "\n"
+               "configured with:\n    " FRR_CONFIG_ARGS "\n";
+       write(1, banner, sizeof(banner) - 1);
+       _exit(0);
+}
index 6dc2fc529ef064deb30b3164d3c2bdc7ac8522be..a1d4e12d8f4808721903a5eb24dc7d98ca6b3e99 100644 (file)
@@ -2,7 +2,7 @@
 # libfrr
 #
 lib_LTLIBRARIES += lib/libfrr.la
-lib_libfrr_la_LDFLAGS = -version-info 0:0:0
+lib_libfrr_la_LDFLAGS = -version-info 0:0:0 -Xlinker -e_libfrr_version
 lib_libfrr_la_LIBADD = @LIBCAP@
 
 lib_libfrr_la_SOURCES = \