On Thu, Aug 31, 2017 at 05:45:38AM -0400, Yongkui Guo wrote: > Hi, > > I tried to do code coverage testing for libguestfs with gcov. > > The steps are shown as follows: > 1. Download and install the source package(libguestfs-1.36.5-1.el7.src.rpm)
Probably best to try building this from git instead of using RPMs, so we can get the changes working upstream first. Make sure to read this page first: http://libguestfs.org/guestfs-building.1.html > +CFLAGS="-fprofile-arcs -ftest-coverage -g -O0"; export CFLAGS > +LDFLAGS="-fprofile-arcs -ftest-coverage -lgcov"; export LDFLAGS > +sed -i 's/^CFLAGS = -fprofile-arcs -ftest-coverage -g -O0/CFLAGS = /g' > /home/mockbuild/rpmbuild/BUILD/libguestfs-1.36.5/ocaml/Makefile > ../libmlguestfs.a(libguestfsocaml_a-utils.o): In function > `guestfs_int_string_is_valid': > utils.c:(.text+0xb99): undefined reference to `c_isalpha' > utils.c:(.text+0xbbf): undefined reference to `c_isdigit' I suppose that we need to link the OCaml bindings to -lgnu, which your patch attempts: > +libguestfsocaml_a_LIBADD = \ > + $(top_builddir)/gnulib/lib/libgnu.la > + ... but the problem is that libguestfsocaml.a isn't really used for anything. See the comment in the same Makefile.am: # Build the C part into a library, so that automake handles the C # compilation step for us. Note that we don't directly use this # library; we link with the object files that it generates. noinst_LIBRARIES = libguestfsocaml.a You'll need to change all the places where $(libguestfsocaml_a_OBJECTS) is used instead, eg something like this untested change: stamp-mlguestfs: libguestfsocaml.a $(guestfs_cmm) $(OCAMLMKLIB) -o mlguestfs \ $(libguestfsocaml_a_OBJECTS) guestfs.cmo \ $(LDFLAGS) \ $(LTLIBINTL) \ - -L../lib/.libs -lguestfs + -L../lib/.libs -lguestfs \ + -L../gnulib/lib/.libs -lgnu if HAVE_OCAMLOPT $(OCAMLMKLIB) -o mlguestfs \ $(libguestfsocaml_a_OBJECTS) guestfs.cmx \ $(LDFLAGS) \ $(LTLIBINTL) \ - -L../lib/.libs -lguestfs + -L../lib/.libs -lguestfs \ + -L../gnulib/lib/.libs -lgnu endif touch $@ Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com libguestfs lets you edit virtual machines. Supports shell scripting, bindings from many languages. http://libguestfs.org _______________________________________________ Libguestfs mailing list [email protected] https://www.redhat.com/mailman/listinfo/libguestfs
