From d2d5635662358debe45430d041501e47f529be39711223e9e238ac21cb42b8f6 Mon Sep 17 00:00:00 2001
From: Olaf Hering <ohering@suse.com>
Date: Fri, 28 Feb 2014 15:26:04 +0000
Subject: [PATCH] use backport of upstream commit
 f75142c577255b30f2a8e1d27baa5fd185594197

OBS-URL: https://build.opensuse.org/package/show/Virtualization/libguestfs?expand=0&rev=279
---
 0001-ocamlopt.patch | 541 +++++++++++++++++---------------------------
 1 file changed, 203 insertions(+), 338 deletions(-)

diff --git a/0001-ocamlopt.patch b/0001-ocamlopt.patch
index 6dd116c..b37cb39 100644
--- a/0001-ocamlopt.patch
+++ b/0001-ocamlopt.patch
@@ -1,111 +1,71 @@
-From bf074c1343edec1c85079157e9877f79d85c376c Mon Sep 17 00:00:00 2001
+From 26cb4963efe2345f5dcbb16e66b127012dd5289a Mon Sep 17 00:00:00 2001
 From: Olaf Hering <olaf@aepfle.de>
 Date: Wed, 26 Feb 2014 11:08:36 +0100
 Subject: ocamlopt
 
 Signed-off-by: Olaf Hering <olaf@aepfle.de>
 ---
- builder/Makefile.am        | 50 ++++++++++++++++++++++++++++++++++++++----
+ builder/Makefile.am        | 18 +++++++++++++++-
  configure.ac               |  2 ++
- mllib/Makefile.am          | 54 ++++++++++++++++++++++++++++++++++++++++++----
- ocaml/Makefile.am          | 32 ++++++++++++++++++++++-----
- ocaml/examples/Makefile.am | 25 +++++++++++++++++++--
- resize/Makefile.am         | 43 ++++++++++++++++++++++++++++++++----
- sparsify/Makefile.am       | 39 +++++++++++++++++++++++++++++----
- sysprep/Makefile.am        | 40 ++++++++++++++++++++++++++++++++--
- 8 files changed, 260 insertions(+), 25 deletions(-)
+ mllib/Makefile.am          | 54 ++++++++++++++++++++++++++++++++--------------
+ ocaml/Makefile.am          | 35 +++++++++++++++++++++---------
+ ocaml/examples/Makefile.am | 13 +++++++++++
+ resize/Makefile.am         | 18 +++++++++++++++-
+ sparsify/Makefile.am       | 18 +++++++++++++++-
+ sysprep/Makefile.am        | 18 +++++++++++++++-
+ 8 files changed, 146 insertions(+), 30 deletions(-)
 
 diff --git a/builder/Makefile.am b/builder/Makefile.am
-index b8bf6ac..83ef46b 100644
+index b8bf6ac..80646c1 100644
 --- a/builder/Makefile.am
 +++ b/builder/Makefile.am
-@@ -43,7 +43,30 @@ SOURCES = \
+@@ -43,7 +43,7 @@ SOURCES = \
  if HAVE_OCAML
  
  # Note this list must be in dependency order.
 -OBJECTS = \
-+OBJECTS_bc = \
-+	$(top_builddir)/mllib/libdir.cmo \
-+	$(top_builddir)/mllib/common_gettext.cmo \
-+	$(top_builddir)/mllib/common_utils.cmo \
-+	$(top_builddir)/mllib/urandom.cmo \
-+	$(top_builddir)/mllib/random_seed.cmo \
-+	$(top_builddir)/mllib/hostname.cmo \
-+	$(top_builddir)/mllib/firstboot.cmo \
-+	$(top_builddir)/mllib/perl_edit.cmo \
-+	$(top_builddir)/mllib/crypt-c.o \
-+	$(top_builddir)/mllib/crypt.cmo \
-+	$(top_builddir)/mllib/fsync-c.o \
-+	$(top_builddir)/mllib/fsync.cmo \
-+	$(top_builddir)/mllib/password.cmo \
-+	$(top_builddir)/mllib/config.cmo \
-+	get_kernel.cmo \
-+	downloader.cmo \
-+	sigchecker.cmo \
-+	index_parser.cmo \
-+	list_entries.cmo \
-+	cmdline.cmo \
-+	builder.cmo
-+
-+OBJECTS_opt = \
++deps = \
  	$(top_builddir)/mllib/libdir.cmx \
  	$(top_builddir)/mllib/common_gettext.cmx \
  	$(top_builddir)/mllib/common_utils.cmx \
-@@ -66,6 +89,12 @@ OBJECTS = \
+@@ -66,6 +66,12 @@ OBJECTS = \
  	cmdline.cmx \
  	builder.cmx
  
 +if HAVE_OCAMLOPT
-+FINAL_BINARY = virt-builder.opt
++OBJECTS = $(deps)
 +else
-+FINAL_BINARY = virt-builder.bc
++OBJECTS = $(patsubst %.cmx,%.cmo,$(deps))
 +endif
 +
  bin_SCRIPTS = virt-builder
  
  # -I $(top_builddir)/src/.libs is a hack which forces corresponding -L
-@@ -73,7 +102,6 @@ bin_SCRIPTS = virt-builder
- # installed copy of libguestfs.
- OCAMLPACKAGES = \
- 	-package str,unix \
--	-I $(top_builddir)/src/.libs \
- 	-I $(top_builddir)/ocaml \
- 	-I $(top_builddir)/mllib
- if HAVE_OCAML_PKG_GETTEXT
-@@ -81,15 +109,29 @@ OCAMLPACKAGES += -package gettext-stub
- endif
- 
+@@ -83,12 +89,22 @@ endif
  OCAMLCFLAGS = -g -warn-error CDEFLMPSUVYZX $(OCAMLPACKAGES)
--OCAMLOPTFLAGS = $(OCAMLCFLAGS)
-+OCAMLOPTFLAGS = \
-+	-I $(top_builddir)/src/.libs \
-+	$(OCAMLCFLAGS)
+ OCAMLOPTFLAGS = $(OCAMLCFLAGS)
  
--virt-builder: $(OBJECTS)
-+virt-builder.bc: $(OBJECTS_bc)
-+	$(top_builddir)/libtool -dlopen $(top_builddir)/src/.libs/libguestfs.la --mode=execute \
-+	$(OCAMLFIND) ocamlc $(OCAMLCFLAGS) \
-+	  -custom \
-+	  mlguestfs.cma -linkpkg $^ \
-+	  -cclib '-lncurses -lcrypt' \
-+	  $(OCAML_GCOV_LDFLAGS) \
-+	  -o $@
-+
-+virt-builder.opt: $(OBJECTS_opt)
++if HAVE_OCAMLOPT
+ virt-builder: $(OBJECTS)
  	$(OCAMLFIND) ocamlopt $(OCAMLOPTFLAGS) \
  	  mlguestfs.cmxa -linkpkg $^ \
  	  -cclib '-lncurses -lcrypt' \
  	  $(OCAML_GCOV_LDFLAGS) \
  	  -o $@
++else
++virt-builder: $(OBJECTS)
++	$(OCAMLFIND) ocamlc $(OCAMLCFLAGS) \
++	  mlguestfs.cma -linkpkg $^ \
++	  -cclib '-lncurses -lcrypt' \
++	  -custom \
++	  $(OCAML_GCOV_LDFLAGS) \
++	  -o $@
++endif
  
-+virt-builder: $(FINAL_BINARY)
-+	cp -vf $< $@
-+
  .mli.cmi:
  	$(OCAMLFIND) ocamlc $(OCAMLCFLAGS) -c $< -o $@
- .ml.cmo:
 diff --git a/configure.ac b/configure.ac
-index d7430db..d0063e8 100644
+index d7430db..e57bbf7 100644
 --- a/configure.ac
 +++ b/configure.ac
 @@ -1024,6 +1024,8 @@ AS_IF([test "x$enable_ocaml" != "xno"],[
@@ -113,114 +73,113 @@ index d7430db..d0063e8 100644
  AM_CONDITIONAL([HAVE_OCAML],
                 [test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"])
 +AM_CONDITIONAL([HAVE_OCAMLOPT],
-+               [test "x$OCAMLOPT" != "xno" && test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"])
++               [test "x$OCAMLOPT" != "xno" && test "x$OCAMLFIND" != "xno"])
  AM_CONDITIONAL([HAVE_OCAMLDOC],
                 [test "x$OCAMLDOC" != "xno"])
  
 diff --git a/mllib/Makefile.am b/mllib/Makefile.am
-index 8c8d508..4312283 100644
+index 8c8d508..a685310 100644
 --- a/mllib/Makefile.am
 +++ b/mllib/Makefile.am
-@@ -62,7 +62,31 @@ if HAVE_OCAML
+@@ -62,6 +62,22 @@ if HAVE_OCAML
  # - We're not actually building a functioning program here, we're just
  #   linking everything together to check all the modules build OK.
  # - This list must be in dependency order.
--OBJECTS = \
-+OBJECTS_bc = \
-+	$(top_builddir)/fish/guestfish-progress.o \
-+	$(top_builddir)/fish/guestfish-uri.o \
-+	tty-c.o \
-+	fsync-c.o \
-+	progress-c.o \
-+	uri-c.o \
-+	crypt-c.o \
-+	config.cmo \
-+	libdir.cmo \
-+	common_gettext.cmo \
-+	common_utils.cmo \
-+	urandom.cmo \
-+	random_seed.cmo \
-+	hostname.cmo \
-+	firstboot.cmo \
-+	perl_edit.cmo \
-+	tTY.cmo \
-+	fsync.cmo \
-+	progress.cmo \
-+	uRI.cmo \
-+	crypt.cmo \
-+	password.cmo
++ocaml_modules = config \
++	libdir \
++	common_gettext \
++	common_utils \
++	urandom \
++	random_seed \
++	hostname \
++	firstboot \
++	perl_edit \
++	tTY \
++	fsync \
++	progress \
++	uRI \
++	crypt \
++	password
 +
-+OBJECTS_opt = \
+ OBJECTS = \
  	$(top_builddir)/fish/guestfish-progress.o \
  	$(top_builddir)/fish/guestfish-uri.o \
- 	tty-c.o \
-@@ -86,31 +110,53 @@ OBJECTS = \
- 	crypt.cmx \
- 	password.cmx
- 
+@@ -69,22 +85,13 @@ OBJECTS = \
+ 	fsync-c.o \
+ 	progress-c.o \
+ 	uri-c.o \
+-	crypt-c.o \
+-	config.cmx \
+-	libdir.cmx \
+-	common_gettext.cmx \
+-	common_utils.cmx \
+-	urandom.cmx \
+-	random_seed.cmx \
+-	hostname.cmx \
+-	firstboot.cmx \
+-	perl_edit.cmx \
+-	tTY.cmx \
+-	fsync.cmx \
+-	progress.cmx \
+-	uRI.cmx \
+-	crypt.cmx \
+-	password.cmx
++	crypt-c.o
++
 +if HAVE_OCAMLOPT
-+FINAL_BINARY = dummy.opt
++OBJECTS += $(patsubst %,%.cmx,$(ocaml_modules))
 +else
-+FINAL_BINARY = dummy.bc
++OBJECTS += $(patsubst %,%.cmo,$(ocaml_modules))
 +endif
+ 
  noinst_SCRIPTS = dummy
  
- # -I $(top_builddir)/src/.libs is a hack which forces corresponding -L
- # option to be passed to gcc, so we don't try linking against an
- # installed copy of libguestfs.
--OCAMLPACKAGES = -package str,unix -I $(top_builddir)/src/.libs -I ../ocaml
-+OCAMLPACKAGES = \
-+	-package str,unix \
-+	-I $(top_builddir)/ocaml
-+
- if HAVE_OCAML_PKG_GETTEXT
- OCAMLPACKAGES += -package gettext-stub
- endif
- 
- OCAMLCFLAGS = -g -warn-error CDEFLMPSUVYZX $(OCAMLPACKAGES)
--OCAMLOPTFLAGS = $(OCAMLCFLAGS)
-+OCAMLOPTFLAGS = \
-+	-I $(top_builddir)/src/.libs \
-+	$(OCAMLCFLAGS)
- 
- OCAMLCLIBS  = \
- 	$(LIBXML2_LIBS) -lncurses -lcrypt \
- 	-L../src/.libs -lutils \
+@@ -105,11 +112,20 @@ OCAMLCLIBS  = \
  	-L../gnulib/lib/.libs -lgnu
  
--dummy: $(OBJECTS)
-+dummy.bc: $(OBJECTS_bc)
-+	$(top_builddir)/libtool -dlopen $(top_builddir)/src/.libs/libguestfs.la --mode=execute \
-+	$(OCAMLFIND) ocamlc $(OCAMLCFLAGS) \
-+	  -custom \
-+	  mlguestfs.cma -linkpkg $^ \
-+	  -cclib '$(OCAMLCLIBS)' \
-+	  $(OCAML_GCOV_LDFLAGS) \
-+	  -o $@
-+
-+dummy.opt: $(OBJECTS_opt)
+ dummy: $(OBJECTS)
++if HAVE_OCAMLOPT
  	$(OCAMLFIND) ocamlopt $(OCAMLOPTFLAGS) \
  	  mlguestfs.cmxa -linkpkg $^ \
  	  -cclib '$(OCAMLCLIBS)' \
  	  $(OCAML_GCOV_LDFLAGS) \
  	  -o $@
++else
++	$(OCAMLFIND) ocamlc $(OCAMLCFLAGS) \
++	  mlguestfs.cma -linkpkg $^ \
++	  -cclib '$(OCAMLCLIBS)' \
++	  -custom \
++	  $(OCAML_GCOV_LDFLAGS) \
++	  -o $@
++endif
  
-+dummy: $(FINAL_BINARY)
-+	cp -vf $< $@
-+
  .mli.cmi:
  	$(OCAMLFIND) ocamlc $(OCAMLCFLAGS) -c $< -o $@
- .ml.cmo:
+@@ -142,9 +158,15 @@ DEFAULT_INCLUDES = \
+ 
+ check_SCRIPTS = common_utils_tests
+ 
++if HAVE_OCAMLOPT
+ common_utils_tests: common_gettext.cmx common_utils.cmx common_utils_tests.cmx
+ 	$(OCAMLFIND) ocamlopt $(OCAMLOPTFLAGS) \
+ 	  mlguestfs.cmxa -linkpkg $^ -cclib -lncurses -o $@
++else
++common_utils_tests: common_gettext.cmo common_utils.cmo common_utils_tests.cmo
++	$(OCAMLFIND) ocamlc $(OCAMLCFLAGS) \
++	  mlguestfs.cma -linkpkg $^ -cclib -lncurses -o $@
++endif
+ 
+ TESTS_ENVIRONMENT = $(top_builddir)/run --test
+ 
 diff --git a/ocaml/Makefile.am b/ocaml/Makefile.am
-index 5dd2c9b..43e0c59 100644
+index 5dd2c9b..698e13a 100644
 --- a/ocaml/Makefile.am
 +++ b/ocaml/Makefile.am
-@@ -37,10 +37,25 @@ CLEANFILES += t/*.cmi t/*.cmo t/*.cmx t/*.o t/*.a t/*.so
+@@ -37,10 +37,18 @@ CLEANFILES += t/*.cmi t/*.cmo t/*.cmx t/*.o t/*.a t/*.so
  
  if HAVE_OCAML
  
-+DATA_HOOK_FILES = META *.so *.a *.cma \
-+		*.cmi $(srcdir)/*.mli
++DATA_HOOK_FILES = META *.so *.a *.cma *.cmi $(srcdir)/*.mli
 +if HAVE_OCAMLOPT
 +DATA_HOOK_FILES += *.cmx *.cmxa
 +endif
@@ -229,56 +188,56 @@ index 5dd2c9b..43e0c59 100644
  OCAMLOPTFLAGS = $(OCAMLCFLAGS)
  
 -noinst_DATA = mlguestfs.cma mlguestfs.cmxa META
-+noinst_DATA = META
++noinst_DATA = mlguestfs.cma META
 +if HAVE_OCAMLOPT
-+noinst_DATA += mlguestfs.cma
-+noinst_DATA += mlguestfs.cmxa
-+endif
-+
-+guestfs_deps = guestfs.cmo
-+if HAVE_OCAMLOPT
-+guestfs_deps += guestfs.cmx
++noinst_DATA +=  mlguestfs.cmxa
 +endif
  
  # 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
-@@ -55,13 +70,15 @@ CLEANFILES += stamp-mlguestfs
- 
- mlguestfs.cma mlguestfs.cmxa: stamp-mlguestfs
+@@ -51,18 +59,15 @@ noinst_LIBRARIES = libguestfsocaml.a
+ # 'libmlguestfs.a' and if run at the same time, they will stomp on or
+ # corrupt each others copy.  Hence we have to serialize the calls.
  
+-CLEANFILES += stamp-mlguestfs
+-
+-mlguestfs.cma mlguestfs.cmxa: stamp-mlguestfs
+-
 -stamp-mlguestfs: libguestfsocaml.a guestfs.cmo guestfs.cmx
-+stamp-mlguestfs: libguestfsocaml.a $(guestfs_deps)
++mlguestfs.cma: libguestfsocaml.a guestfs.cmo
  	$(OCAMLMKLIB) -o mlguestfs \
  	  $(libguestfsocaml_a_OBJECTS) guestfs.cmo \
  	  -L$(top_builddir)/src/.libs -lguestfs
-+if HAVE_OCAMLOPT
++
++mlguestfs.cmxa: libguestfsocaml.a guestfs.cmx
  	$(OCAMLMKLIB) -o mlguestfs \
  	  $(libguestfsocaml_a_OBJECTS) guestfs.cmx \
  	  -L$(top_builddir)/src/.libs -lguestfs
-+endif
- 	touch $@
+-	touch $@
  
  libguestfsocaml_a_CPPFLAGS = \
-@@ -121,11 +138,16 @@ test_progs_opt += \
+ 	-DGUESTFS_PRIVATE=1 \
+@@ -121,11 +126,17 @@ test_progs_opt += \
  	t/guestfs_430_progress_messages.opt
  endif
  
 -test_progs_all = $(test_progs_bc) $(test_progs_opt)
 +test_progs_all = $(test_progs_bc)
-+bindtests_all = bindtests.bc
 +if HAVE_OCAMLOPT
 +test_progs_all += $(test_progs_opt)
-+bindtests_all += bindtests.opt
 +endif
  
  TESTS = run-bindtests $(test_progs_all)
  
 -noinst_DATA += bindtests.bc bindtests.opt $(test_progs_all)
-+noinst_DATA += $(bindtests_all) $(test_progs_all)
++noinst_DATA += bindtests.bc $(test_progs_all)
++if HAVE_OCAMLOPT
++noinst_DATA += bindtests.opt
++endif
  
  %.bc: %.cmo mlguestfs.cma
  	$(top_builddir)/libtool -dlopen $(top_builddir)/src/.libs/libguestfs.la --mode=execute \
-@@ -171,7 +193,7 @@ install-data-hook:
+@@ -171,10 +182,14 @@ install-data-hook:
  	$(OCAMLFIND) install \
  	  -ldconf ignore -destdir $(DESTDIR)$(OCAMLLIB) \
  	  guestfs \
@@ -287,281 +246,187 @@ index 5dd2c9b..43e0c59 100644
  	rm $(DESTDIR)$(OCAMLLIB)/guestfs/bindtests.*
  	rm $(DESTDIR)$(OCAMLLIB)/guestfs/libguestfsocaml.a
  
+ CLEANFILES += $(noinst_DATA)
+ 
+ endif
++
++# Tell version 3.79 and up of GNU make to not build goals in this
++# directory in parallel.
++.NOTPARALLEL:
 diff --git a/ocaml/examples/Makefile.am b/ocaml/examples/Makefile.am
-index 200a0aa..3dadf03 100644
+index 200a0aa..472e180 100644
 --- a/ocaml/examples/Makefile.am
 +++ b/ocaml/examples/Makefile.am
-@@ -47,14 +47,35 @@ if HAVE_OCAML
+@@ -49,6 +49,7 @@ noinst_SCRIPTS = create_disk inspect_vm
  
- noinst_SCRIPTS = create_disk inspect_vm
- 
-+if HAVE_OCAMLOPT
-+FINAL_BINARY_create_disk = create_disk.opt
-+FINAL_BINARY_inspect_vm = inspect_vm.opt
-+else
-+FINAL_BINARY_create_disk = create_disk.bc
-+FINAL_BINARY_inspect_vm = inspect_vm.bc
-+endif
  OCAMLFINDFLAGS = -cclib -L$(top_builddir)/src/.libs
  
--create_disk: create_disk.ml
-+create_disk.bc: create_disk.ml
-+	$(top_builddir)/libtool -dlopen $(top_builddir)/src/.libs/libguestfs.la --mode=execute \
-+	$(OCAMLFIND) ocamlc $(OCAMLFINDFLAGS) -package unix -linkpkg \
-+	  -custom \
-+          -warn-error A -I .. mlguestfs.cma $< -o $@
-+create_disk.opt: create_disk.ml
++if HAVE_OCAMLOPT
+ create_disk: create_disk.ml
  	$(OCAMLFIND) ocamlopt $(OCAMLFINDFLAGS) -package unix -linkpkg \
            -warn-error A -I .. mlguestfs.cmxa $< -o $@
- 
--inspect_vm: inspect_vm.ml
-+inspect_vm.bc: inspect_vm.ml
-+	$(top_builddir)/libtool -dlopen $(top_builddir)/src/.libs/libguestfs.la --mode=execute \
-+	$(OCAMLFIND) ocamlc $(OCAMLFINDFLAGS) -package unix -linkpkg \
-+	  -custom \
-+          -warn-error A -I .. mlguestfs.cma $< -o $@
-+inspect_vm.opt: inspect_vm.ml
+@@ -56,5 +57,17 @@ create_disk: create_disk.ml
+ inspect_vm: inspect_vm.ml
  	$(OCAMLFIND) ocamlopt $(OCAMLFINDFLAGS) -package unix -linkpkg \
            -warn-error A -I .. mlguestfs.cmxa $< -o $@
++else
++
++# This avoids:
++#   Error: Error on dynamically loaded library: ../dllmlguestfs.so: libguestfs.so.0: cannot open shared object file: No such file or directory
++create_disk: create_disk.ml
++	$(top_builddir)/run $(OCAMLFIND) ocamlc $(OCAMLFINDFLAGS) -package unix -linkpkg \
++          -warn-error A -I .. mlguestfs.cma $< -o $@
++
++inspect_vm: inspect_vm.ml
++	$(top_builddir)/run $(OCAMLFIND) ocamlc $(OCAMLFINDFLAGS) -package unix -linkpkg \
++          -warn-error A -I .. mlguestfs.cma $< -o $@
++endif
  
-+create_disk: $(FINAL_BINARY_create_disk)
-+	cp -vf $< $@
-+inspect_vm: $(FINAL_BINARY_inspect_vm)
-+	cp -vf $< $@
  endif
 diff --git a/resize/Makefile.am b/resize/Makefile.am
-index 76c26ee..b8a1209 100644
+index 76c26ee..ef35bf9 100644
 --- a/resize/Makefile.am
 +++ b/resize/Makefile.am
-@@ -31,7 +31,23 @@ SOURCES = \
+@@ -31,7 +31,7 @@ SOURCES = \
  if HAVE_OCAML
  
  # Note this list must be in dependency order.
 -OBJECTS = \
-+OBJECTS_bc = \
-+	$(top_builddir)/mllib/tty-c.o \
-+	$(top_builddir)/mllib/tTY.cmo \
-+	$(top_builddir)/mllib/fsync-c.o \
-+	$(top_builddir)/mllib/fsync.cmo \
-+	$(top_builddir)/fish/guestfish-progress.o \
-+	$(top_builddir)/mllib/progress-c.o \
-+	$(top_builddir)/mllib/progress.cmo \
-+	$(top_builddir)/fish/guestfish-uri.o \
-+	$(top_builddir)/mllib/uri-c.o \
-+	$(top_builddir)/mllib/uRI.cmo \
-+	$(top_builddir)/mllib/common_gettext.cmo \
-+	$(top_builddir)/mllib/common_utils.cmo \
-+	$(top_builddir)/mllib/config.cmo \
-+	resize.cmo
-+
-+OBJECTS_opt = \
++deps = \
  	$(top_builddir)/mllib/tty-c.o \
  	$(top_builddir)/mllib/tTY.cmx \
  	$(top_builddir)/mllib/fsync-c.o \
-@@ -47,6 +63,12 @@ OBJECTS = \
+@@ -47,6 +47,12 @@ OBJECTS = \
  	$(top_builddir)/mllib/config.cmx \
  	resize.cmx
  
 +if HAVE_OCAMLOPT
-+FINAL_BINARY = virt-resize.opt
++OBJECTS = $(deps)
 +else
-+FINAL_BINARY = virt-resize.bc
++OBJECTS = $(patsubst %.cmx,%.cmo,$(deps))
 +endif
 +
  bin_SCRIPTS = virt-resize
  
  # -I $(top_builddir)/src/.libs is a hack which forces corresponding -L
-@@ -54,7 +76,6 @@ bin_SCRIPTS = virt-resize
- # installed copy of libguestfs.
- OCAMLPACKAGES = \
- 	-package str,unix \
--	-I $(top_builddir)/src/.libs \
- 	-I $(top_builddir)/ocaml \
- 	-I $(top_builddir)/mllib
- if HAVE_OCAML_PKG_GETTEXT
-@@ -62,20 +83,34 @@ OCAMLPACKAGES += -package gettext-stub
- endif
- 
- OCAMLCFLAGS = -g -warn-error CDEFLMPSUVYZX $(OCAMLPACKAGES)
--OCAMLOPTFLAGS = $(OCAMLCFLAGS)
-+OCAMLOPTFLAGS = \
-+	-I $(top_builddir)/src/.libs \
-+	$(OCAMLCFLAGS)
- 
- OCAMLCLIBS  = \
- 	$(LIBXML2_LIBS) -lncurses \
+@@ -69,12 +75,22 @@ OCAMLCLIBS  = \
  	-L../src/.libs -lutils \
  	-L../gnulib/lib/.libs -lgnu
  
--virt-resize: $(OBJECTS)
-+virt-resize.bc: $(OBJECTS_bc)
-+	$(top_builddir)/libtool -dlopen $(top_builddir)/src/.libs/libguestfs.la --mode=execute \
-+	$(OCAMLFIND) ocamlc $(OCAMLCFLAGS) \
-+	  -custom \
-+	  mlguestfs.cma -linkpkg $^ \
-+	  -cclib '$(OCAMLCLIBS)' \
-+	  $(OCAML_GCOV_LDFLAGS) \
-+	  -o $@
-+
-+virt-resize.opt: $(OBJECTS_opt)
++if HAVE_OCAMLOPT
+ virt-resize: $(OBJECTS)
  	$(OCAMLFIND) ocamlopt $(OCAMLOPTFLAGS) \
  	  mlguestfs.cmxa -linkpkg $^ \
  	  -cclib '$(OCAMLCLIBS)' \
  	  $(OCAML_GCOV_LDFLAGS) \
  	  -o $@
++else
++virt-resize: $(OBJECTS)
++	$(OCAMLFIND) ocamlc $(OCAMLCFLAGS) \
++	  mlguestfs.cma -linkpkg $^ \
++	  -cclib '$(OCAMLCLIBS)' \
++	  -custom \
++	  $(OCAML_GCOV_LDFLAGS) \
++	  -o $@
++endif
  
-+virt-resize: $(FINAL_BINARY)
-+	cp -vf $< $@
-+
  .mli.cmi:
  	$(OCAMLFIND) ocamlc $(OCAMLCFLAGS) -c $< -o $@
- .ml.cmo:
 diff --git a/sparsify/Makefile.am b/sparsify/Makefile.am
-index 98d9c70..645eb11 100644
+index 98d9c70..bf6caf0 100644
 --- a/sparsify/Makefile.am
 +++ b/sparsify/Makefile.am
-@@ -32,7 +32,19 @@ SOURCES = \
+@@ -32,7 +32,7 @@ SOURCES = \
  if HAVE_OCAML
  
  # Note this list must be in dependency order.
 -OBJECTS = \
-+OBJECTS_bc = \
-+	$(top_builddir)/fish/guestfish-progress.o \
-+	$(top_builddir)/mllib/tty-c.o \
-+	$(top_builddir)/mllib/progress-c.o \
-+	$(top_builddir)/mllib/common_gettext.cmo \
-+	$(top_builddir)/mllib/common_utils.cmo \
-+	$(top_builddir)/mllib/tTY.cmo \
-+	$(top_builddir)/mllib/progress.cmo \
-+	$(top_builddir)/mllib/config.cmo \
-+	statvfs-c.o \
-+	sparsify.cmo
-+
-+OBJECTS_opt = \
++deps = \
  	$(top_builddir)/fish/guestfish-progress.o \
  	$(top_builddir)/mllib/tty-c.o \
  	$(top_builddir)/mllib/progress-c.o \
-@@ -44,6 +56,12 @@ OBJECTS = \
+@@ -44,6 +44,12 @@ OBJECTS = \
  	statvfs-c.o \
  	sparsify.cmx
  
 +if HAVE_OCAMLOPT
-+FINAL_BINARY = virt-sparsify.opt
++OBJECTS = $(deps)
 +else
-+FINAL_BINARY = virt-sparsify.bc
++OBJECTS = $(patsubst %.cmx,%.cmo,$(deps))
 +endif
 +
  bin_SCRIPTS = virt-sparsify
  
  # -I $(top_builddir)/src/.libs is a hack which forces corresponding -L
-@@ -51,7 +69,6 @@ bin_SCRIPTS = virt-sparsify
- # installed copy of libguestfs.
- OCAMLPACKAGES = \
- 	-package str,unix \
--	-I $(top_builddir)/src/.libs \
- 	-I $(top_builddir)/ocaml \
- 	-I $(top_builddir)/mllib
- if HAVE_OCAML_PKG_GETTEXT
-@@ -59,15 +76,29 @@ OCAMLPACKAGES += -package gettext-stub
- endif
- 
+@@ -61,12 +67,22 @@ endif
  OCAMLCFLAGS = -g -warn-error CDEFLMPSUVYZX $(OCAMLPACKAGES)
--OCAMLOPTFLAGS = $(OCAMLCFLAGS)
-+OCAMLOPTFLAGS = \
-+	-I $(top_builddir)/src/.libs \
-+	$(OCAMLCFLAGS)
+ OCAMLOPTFLAGS = $(OCAMLCFLAGS)
  
--virt-sparsify: $(OBJECTS)
-+virt-sparsify.bc: $(OBJECTS_bc)
-+	$(top_builddir)/libtool -dlopen $(top_builddir)/src/.libs/libguestfs.la --mode=execute \
-+	$(OCAMLFIND) ocamlc $(OCAMLCFLAGS) \
-+	  -custom \
-+	  mlguestfs.cma -linkpkg $^ \
-+	  -cclib -lncurses \
-+	  $(OCAML_GCOV_LDFLAGS) \
-+	  -o $@
-+
-+virt-sparsify.opt: $(OBJECTS_opt)
++if HAVE_OCAMLOPT
+ virt-sparsify: $(OBJECTS)
  	$(OCAMLFIND) ocamlopt $(OCAMLOPTFLAGS) \
  	  mlguestfs.cmxa -linkpkg $^ \
  	  -cclib -lncurses \
  	  $(OCAML_GCOV_LDFLAGS) \
  	  -o $@
++else
++virt-sparsify: $(OBJECTS)
++	$(OCAMLFIND) ocamlc $(OCAMLCFLAGS) \
++	  mlguestfs.cma -linkpkg $^ \
++	  -cclib -lncurses \
++	  -custom \
++	  $(OCAML_GCOV_LDFLAGS) \
++	  -o $@
++endif
  
-+virt-sparsify: $(FINAL_BINARY)
-+	cp -vf $< $@
-+
  .mli.cmi:
  	$(OCAMLFIND) ocamlc $(OCAMLCFLAGS) -c $< -o $@
- .ml.cmo:
 diff --git a/sysprep/Makefile.am b/sysprep/Makefile.am
-index 24654cb..cc9e958 100644
+index 24654cb..352735b 100644
 --- a/sysprep/Makefile.am
 +++ b/sysprep/Makefile.am
-@@ -81,7 +81,25 @@ SOURCES = \
+@@ -81,7 +81,7 @@ SOURCES = \
  if HAVE_OCAML
  
  # Note this list must be in dependency order.
 -OBJECTS = \
-+OBJECTS_bc = \
-+	$(top_builddir)/mllib/common_gettext.cmo \
-+	$(top_builddir)/mllib/common_utils.cmo \
-+	$(top_builddir)/fish/guestfish-uri.o \
-+	$(top_builddir)/mllib/uri-c.o \
-+	$(top_builddir)/mllib/uRI.cmo \
-+	$(top_builddir)/mllib/crypt-c.o \
-+	$(top_builddir)/mllib/crypt.cmo \
-+	$(top_builddir)/mllib/urandom.cmo \
-+	$(top_builddir)/mllib/password.cmo \
-+	$(top_builddir)/mllib/random_seed.cmo \
-+	$(top_builddir)/mllib/hostname.cmo \
-+	$(top_builddir)/mllib/firstboot.cmo \
-+	$(top_builddir)/mllib/config.cmo \
-+	sysprep_operation.cmo \
-+	$(patsubst %,sysprep_operation_%.cmo,$(operations)) \
-+	main.cmo
-+
-+OBJECTS_opt = \
++deps = \
  	$(top_builddir)/mllib/common_gettext.cmx \
  	$(top_builddir)/mllib/common_utils.cmx \
  	$(top_builddir)/fish/guestfish-uri.o \
-@@ -99,6 +117,12 @@ OBJECTS = \
+@@ -99,6 +99,12 @@ OBJECTS = \
  	$(patsubst %,sysprep_operation_%.cmx,$(operations)) \
  	main.cmx
  
 +if HAVE_OCAMLOPT
-+FINAL_BINARY = virt-sysprep.opt
++OBJECTS = $(deps)
 +else
-+FINAL_BINARY = virt-sysprep.bc
++OBJECTS = $(patsubst %.cmx,%.cmo,$(deps))
 +endif
 +
  bin_SCRIPTS = virt-sysprep
  
  # -I $(top_builddir)/src/.libs is a hack which forces corresponding -L
-@@ -121,13 +145,25 @@ OCAMLCLIBS  = \
+@@ -121,12 +127,22 @@ OCAMLCLIBS  = \
  	-L../src/.libs -lutils \
  	-L../gnulib/lib/.libs -lgnu
  
--virt-sysprep: $(OBJECTS)
-+virt-sysprep.bc: $(OBJECTS_bc)
-+	$(top_builddir)/libtool -dlopen $(top_builddir)/src/.libs/libguestfs.la --mode=execute \
-+	$(OCAMLFIND) ocamlc $(OCAMLOPTFLAGS) \
-+	  -custom \
-+	  mlguestfs.cma -linkpkg $^ \
-+	  -cclib '$(OCAMLCLIBS)' \
-+	  $(OCAML_GCOV_LDFLAGS) \
-+	  -o $@
-+
-+virt-sysprep.opt: $(OBJECTS_opt)
++if HAVE_OCAMLOPT
+ virt-sysprep: $(OBJECTS)
  	$(OCAMLFIND) ocamlopt $(OCAMLOPTFLAGS) \
  	  mlguestfs.cmxa -linkpkg $^ \
  	  -cclib '$(OCAMLCLIBS)' \
  	  $(OCAML_GCOV_LDFLAGS) \
  	  -o $@
++else
++virt-sysprep: $(OBJECTS)
++	$(OCAMLFIND) ocamlc $(OCAMLCFLAGS) \
++	  mlguestfs.cma -linkpkg $^ \
++	  -cclib '$(OCAMLCLIBS)' \
++	  -custom \
++	  $(OCAML_GCOV_LDFLAGS) \
++	  -o $@
++endif
  
-+virt-sysprep: $(FINAL_BINARY)
-+	cp -vf $< $@
-+
  .mli.cmi:
  	$(OCAMLFIND) ocamlc $(OCAMLCFLAGS) -c $< -o $@
- .ml.cmo: