On Tuesday, 14 November 2017 19:02:51 CET Richard W.M. Jones wrote: > In OCaml 4.06 we need to link to daemon to libasmrun_pic.a (the OCaml > runtime linked with -fPIC). Otherwise you will see many errors like > this: > > /usr/bin/ld: /usr/lib64/ocaml/libasmrun.a(startup_aux.o): relocation > R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared > object; recompile with -fPIC > /usr/bin/ld: /usr/lib64/ocaml/libasmrun.a(startup.o): relocation > R_X86_64_32S against symbol `caml_data_segments' can not be used when making > a shared object; recompile with -fPIC > /usr/bin/ld: /usr/lib64/ocaml/libasmrun.a(fail.o): relocation R_X86_64_32 > against symbol `caml_exn_Failure' can not be used when making a shared > object; recompile with -fPIC > /usr/bin/ld: /usr/lib64/ocaml/libasmrun.a(roots.o): relocation > R_X86_64_32 against symbol `caml_frametable' can not be used when making a > shared object; recompile with -fPIC > > This commit use a configure-time test to find the best OCaml runtime. > --- > daemon/Makefile.am | 2 -- > m4/guestfs-ocaml.m4 | 26 ++++++++++++++++++++++++++ > 2 files changed, 26 insertions(+), 2 deletions(-) > > diff --git a/daemon/Makefile.am b/daemon/Makefile.am > index af3184d3e..27630d2bc 100644 > --- a/daemon/Makefile.am > +++ b/daemon/Makefile.am > @@ -328,10 +328,8 @@ OCAMLFLAGS = $(OCAML_FLAGS) $(OCAML_WARN_ERROR) > > if !HAVE_OCAMLOPT > OBJECTS = $(BOBJECTS) > -CAMLRUN = camlrun > else > OBJECTS = $(XOBJECTS) > -CAMLRUN = asmrun > endif > OCAML_LIBS = \ > -lmlpcre \ > diff --git a/m4/guestfs-ocaml.m4 b/m4/guestfs-ocaml.m4 > index 54ad355cd..3f78d1fb3 100644 > --- a/m4/guestfs-ocaml.m4 > +++ b/m4/guestfs-ocaml.m4 > @@ -85,6 +85,32 @@ if test "x$enable_daemon" = "xyes"; then > if test "x$OCAML_PKG_hivex" = "xno"; then > AC_MSG_ERROR([the OCaml module 'hivex' is required]) > fi > + > + dnl Check which OCaml runtime to link the daemon again. > + dnl We can't use AC_CHECK_LIB here unfortunately because > + dnl the other symbols are resolved by OCaml itself. > + AC_MSG_CHECKING([which OCaml runtime we should link the daemon with]) > + if test "x$OCAMLOPT" != "xno"; then > + for f in asmrun_pic asmrun; do > + if test -f "$OCAMLLIB/lib$f.a"; then > + CAMLRUN=$f > + break > + fi > + done > + else > + for f in camlrun; do > + if test -f "$OCAMLLIB/lib$f.a"; then > + CAMLRUN=$f > + break > + fi > + done > + fi > + if test "x$CAMLRUN" != "x"; then > + AC_MSG_RESULT([$CAMLRUN]) > + else > + AC_MSG_ERROR([could not find or link to libasmrun or libcamlrun]) > + fi > + AC_SUBST([CAMLRUN])
LGTM. Thanks, -- Pino Toscano
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://www.redhat.com/mailman/listinfo/libguestfs