From f8cbd7140095279e40b36415d5b6fc5c36e96a40 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Fri, 6 Oct 2023 11:15:55 +0100 Subject: [PATCH] daemon: Find -lcamlstr{nat,byt} and -lunix{nat,byt}, and require -lzstd OCaml 5.1 changes the names of these libraries for some reason. Also in OCaml 5.1, if using those libraries you must link with -lzstd. Since zstd was already described as "required" (although we only used it in the appliance), there is no official change to the requirements, but I have added a configure time check for the library. Thanks: Jerry James --- daemon/Makefile.am | 8 +++++--- m4/guestfs-libraries.m4 | 3 +++ m4/guestfs-ocaml.m4 | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/daemon/Makefile.am b/daemon/Makefile.am index 01c0f6416c..b44d7712f8 100644 --- a/daemon/Makefile.am +++ b/daemon/Makefile.am @@ -376,9 +376,11 @@ OCAML_LIBS = \ -lmlstdutils \ -lmlaugeas \ -lmlhivex \ - -lcamlstr \ - -lunix \ - -l$(CAMLRUN) -ldl -lm + -l$(CAMLSTR) \ + -l$(CAMLUNIX) \ + -l$(CAMLRUN) \ + $(LIBZSTD_LIBS) \ + -ldl -lm CLEANFILES += camldaemon.o diff --git a/m4/guestfs-libraries.m4 b/m4/guestfs-libraries.m4 index 29d012a378..18c4cd3074 100644 --- a/m4/guestfs-libraries.m4 +++ b/m4/guestfs-libraries.m4 @@ -248,6 +248,9 @@ PKG_CHECK_MODULES([PCRE2], [libpcre2-8], [], [ PCRE_LIBS=`$PCRE2_CONFIG --libs8` ]) +dnl Check for zstd (required since OCaml 5.1) +PKG_CHECK_MODULES([LIBZSTD], [libzstd]) + dnl Check for Augeas >= 1.2.0 (required). PKG_CHECK_MODULES([AUGEAS],[augeas >= 1.2.0]) diff --git a/m4/guestfs-ocaml.m4 b/m4/guestfs-ocaml.m4 index 39a8346f3e..25b06408c1 100644 --- a/m4/guestfs-ocaml.m4 +++ b/m4/guestfs-ocaml.m4 @@ -122,6 +122,47 @@ if test "x$enable_daemon" = "xyes"; then AC_MSG_ERROR([could not find or link to libasmrun or libcamlrun]) fi AC_SUBST([CAMLRUN]) + + dnl OCaml 5.1 changed -lcamlstr to -lcamlstrnat / -lcamlstrbyt + dnl and -lunix to -lunixnat / -lunixbyt so we need to detect + dnl the new or old libraries. As above we cannot use AC_CHECK_LIB. + AC_MSG_CHECKING([how to link the daemon with -lcamlstr*]) + if test "x$OCAMLOPT" != "xno"; then + choices="camlstrnat camlstr" + else + choices="camlstrbyt camlstr" + fi + for f in $choices; do + if test -f "$OCAMLLIB/lib$f.a"; then + CAMLSTR=$f + break + fi + done + if test "x$CAMLSTR" != "x"; then + AC_MSG_RESULT([$CAMLSTR]) + else + AC_MSG_ERROR([could not find or link to -lcamlstr*]) + fi + AC_SUBST([CAMLSTR]) + + AC_MSG_CHECKING([how to link the daemon with -lunix*]) + if test "x$OCAMLOPT" != "xno"; then + choices="unixnat unix" + else + choices="unixbyt unix" + fi + for f in $choices; do + if test -f "$OCAMLLIB/lib$f.a"; then + CAMLUNIX=$f + break + fi + done + if test "x$CAMLUNIX" != "x"; then + AC_MSG_RESULT([$CAMLUNIX]) + else + AC_MSG_ERROR([could not find or link to -lunix*]) + fi + AC_SUBST([CAMLUNIX]) fi dnl Define HIVEX_OPEN_UNSAFE_FLAG based on test above. -- 2.41.0