diff --git a/0001-ocamlopt.patch b/0001-ocamlopt.patch new file mode 100644 index 0000000..b37cb39 --- /dev/null +++ b/0001-ocamlopt.patch @@ -0,0 +1,432 @@ +From 26cb4963efe2345f5dcbb16e66b127012dd5289a Mon Sep 17 00:00:00 2001 +From: Olaf Hering +Date: Wed, 26 Feb 2014 11:08:36 +0100 +Subject: ocamlopt + +Signed-off-by: Olaf Hering +--- + builder/Makefile.am | 18 +++++++++++++++- + configure.ac | 2 ++ + 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..80646c1 100644 +--- a/builder/Makefile.am ++++ b/builder/Makefile.am +@@ -43,7 +43,7 @@ SOURCES = \ + if HAVE_OCAML + + # Note this list must be in dependency order. +-OBJECTS = \ ++deps = \ + $(top_builddir)/mllib/libdir.cmx \ + $(top_builddir)/mllib/common_gettext.cmx \ + $(top_builddir)/mllib/common_utils.cmx \ +@@ -66,6 +66,12 @@ OBJECTS = \ + cmdline.cmx \ + builder.cmx + ++if HAVE_OCAMLOPT ++OBJECTS = $(deps) ++else ++OBJECTS = $(patsubst %.cmx,%.cmo,$(deps)) ++endif ++ + bin_SCRIPTS = virt-builder + + # -I $(top_builddir)/src/.libs is a hack which forces corresponding -L +@@ -83,12 +89,22 @@ endif + OCAMLCFLAGS = -g -warn-error CDEFLMPSUVYZX $(OCAMLPACKAGES) + OCAMLOPTFLAGS = $(OCAMLCFLAGS) + ++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 + + .mli.cmi: + $(OCAMLFIND) ocamlc $(OCAMLCFLAGS) -c $< -o $@ +diff --git a/configure.ac b/configure.ac +index d7430db..e57bbf7 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1024,6 +1024,8 @@ AS_IF([test "x$enable_ocaml" != "xno"],[ + ]) + AM_CONDITIONAL([HAVE_OCAML], + [test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"]) ++AM_CONDITIONAL([HAVE_OCAMLOPT], ++ [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..a685310 100644 +--- a/mllib/Makefile.am ++++ b/mllib/Makefile.am +@@ -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. ++ocaml_modules = config \ ++ libdir \ ++ common_gettext \ ++ common_utils \ ++ urandom \ ++ random_seed \ ++ hostname \ ++ firstboot \ ++ perl_edit \ ++ tTY \ ++ fsync \ ++ progress \ ++ uRI \ ++ crypt \ ++ password ++ + OBJECTS = \ + $(top_builddir)/fish/guestfish-progress.o \ + $(top_builddir)/fish/guestfish-uri.o \ +@@ -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 ++OBJECTS += $(patsubst %,%.cmx,$(ocaml_modules)) ++else ++OBJECTS += $(patsubst %,%.cmo,$(ocaml_modules)) ++endif + + noinst_SCRIPTS = dummy + +@@ -105,11 +112,20 @@ OCAMLCLIBS = \ + -L../gnulib/lib/.libs -lgnu + + 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 + + .mli.cmi: + $(OCAMLFIND) ocamlc $(OCAMLCFLAGS) -c $< -o $@ +@@ -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..698e13a 100644 +--- a/ocaml/Makefile.am ++++ b/ocaml/Makefile.am +@@ -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 ++if HAVE_OCAMLOPT ++DATA_HOOK_FILES += *.cmx *.cmxa ++endif ++ + OCAMLCFLAGS = -g -warn-error CDEFLMPSUVYZX + OCAMLOPTFLAGS = $(OCAMLCFLAGS) + +-noinst_DATA = mlguestfs.cma mlguestfs.cmxa META ++noinst_DATA = mlguestfs.cma META ++if HAVE_OCAMLOPT ++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 +@@ -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 ++mlguestfs.cma: libguestfsocaml.a guestfs.cmo + $(OCAMLMKLIB) -o mlguestfs \ + $(libguestfsocaml_a_OBJECTS) guestfs.cmo \ + -L$(top_builddir)/src/.libs -lguestfs ++ ++mlguestfs.cmxa: libguestfsocaml.a guestfs.cmx + $(OCAMLMKLIB) -o mlguestfs \ + $(libguestfsocaml_a_OBJECTS) guestfs.cmx \ + -L$(top_builddir)/src/.libs -lguestfs +- touch $@ + + libguestfsocaml_a_CPPFLAGS = \ + -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) ++if HAVE_OCAMLOPT ++test_progs_all += $(test_progs_opt) ++endif + + TESTS = run-bindtests $(test_progs_all) + +-noinst_DATA += bindtests.bc bindtests.opt $(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,10 +182,14 @@ install-data-hook: + $(OCAMLFIND) install \ + -ldconf ignore -destdir $(DESTDIR)$(OCAMLLIB) \ + guestfs \ +- META *.so *.a *.cma *.cmx *.cmxa *.cmi $(srcdir)/*.mli ++ $(DATA_HOOK_FILES) + 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..472e180 100644 +--- a/ocaml/examples/Makefile.am ++++ b/ocaml/examples/Makefile.am +@@ -49,6 +49,7 @@ noinst_SCRIPTS = create_disk inspect_vm + + OCAMLFINDFLAGS = -cclib -L$(top_builddir)/src/.libs + ++if HAVE_OCAMLOPT + create_disk: create_disk.ml + $(OCAMLFIND) ocamlopt $(OCAMLFINDFLAGS) -package unix -linkpkg \ + -warn-error A -I .. mlguestfs.cmxa $< -o $@ +@@ -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 + + endif +diff --git a/resize/Makefile.am b/resize/Makefile.am +index 76c26ee..ef35bf9 100644 +--- a/resize/Makefile.am ++++ b/resize/Makefile.am +@@ -31,7 +31,7 @@ SOURCES = \ + if HAVE_OCAML + + # Note this list must be in dependency order. +-OBJECTS = \ ++deps = \ + $(top_builddir)/mllib/tty-c.o \ + $(top_builddir)/mllib/tTY.cmx \ + $(top_builddir)/mllib/fsync-c.o \ +@@ -47,6 +47,12 @@ OBJECTS = \ + $(top_builddir)/mllib/config.cmx \ + resize.cmx + ++if HAVE_OCAMLOPT ++OBJECTS = $(deps) ++else ++OBJECTS = $(patsubst %.cmx,%.cmo,$(deps)) ++endif ++ + bin_SCRIPTS = virt-resize + + # -I $(top_builddir)/src/.libs is a hack which forces corresponding -L +@@ -69,12 +75,22 @@ OCAMLCLIBS = \ + -L../src/.libs -lutils \ + -L../gnulib/lib/.libs -lgnu + ++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 + + .mli.cmi: + $(OCAMLFIND) ocamlc $(OCAMLCFLAGS) -c $< -o $@ +diff --git a/sparsify/Makefile.am b/sparsify/Makefile.am +index 98d9c70..bf6caf0 100644 +--- a/sparsify/Makefile.am ++++ b/sparsify/Makefile.am +@@ -32,7 +32,7 @@ SOURCES = \ + if HAVE_OCAML + + # Note this list must be in dependency order. +-OBJECTS = \ ++deps = \ + $(top_builddir)/fish/guestfish-progress.o \ + $(top_builddir)/mllib/tty-c.o \ + $(top_builddir)/mllib/progress-c.o \ +@@ -44,6 +44,12 @@ OBJECTS = \ + statvfs-c.o \ + sparsify.cmx + ++if HAVE_OCAMLOPT ++OBJECTS = $(deps) ++else ++OBJECTS = $(patsubst %.cmx,%.cmo,$(deps)) ++endif ++ + bin_SCRIPTS = virt-sparsify + + # -I $(top_builddir)/src/.libs is a hack which forces corresponding -L +@@ -61,12 +67,22 @@ endif + OCAMLCFLAGS = -g -warn-error CDEFLMPSUVYZX $(OCAMLPACKAGES) + OCAMLOPTFLAGS = $(OCAMLCFLAGS) + ++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 + + .mli.cmi: + $(OCAMLFIND) ocamlc $(OCAMLCFLAGS) -c $< -o $@ +diff --git a/sysprep/Makefile.am b/sysprep/Makefile.am +index 24654cb..352735b 100644 +--- a/sysprep/Makefile.am ++++ b/sysprep/Makefile.am +@@ -81,7 +81,7 @@ SOURCES = \ + if HAVE_OCAML + + # Note this list must be in dependency order. +-OBJECTS = \ ++deps = \ + $(top_builddir)/mllib/common_gettext.cmx \ + $(top_builddir)/mllib/common_utils.cmx \ + $(top_builddir)/fish/guestfish-uri.o \ +@@ -99,6 +99,12 @@ OBJECTS = \ + $(patsubst %,sysprep_operation_%.cmx,$(operations)) \ + main.cmx + ++if HAVE_OCAMLOPT ++OBJECTS = $(deps) ++else ++OBJECTS = $(patsubst %.cmx,%.cmo,$(deps)) ++endif ++ + bin_SCRIPTS = virt-sysprep + + # -I $(top_builddir)/src/.libs is a hack which forces corresponding -L +@@ -121,12 +127,22 @@ OCAMLCLIBS = \ + -L../src/.libs -lutils \ + -L../gnulib/lib/.libs -lgnu + ++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 + + .mli.cmi: + $(OCAMLFIND) ocamlc $(OCAMLCFLAGS) -c $< -o $@ diff --git a/libguestfs.changes b/libguestfs.changes index c57c156..567bbab 100644 --- a/libguestfs.changes +++ b/libguestfs.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Thu Feb 27 13:40:20 CET 2014 - ohering@suse.de + +- Build without ocaml.opt on s390x and ppc64le + 0001-ocamlopt.patch + ------------------------------------------------------------------- Thu Feb 13 00:41:23 CET 2014 - ohering@suse.de diff --git a/libguestfs.spec b/libguestfs.spec index 3e45e55..bf9cc35 100644 --- a/libguestfs.spec +++ b/libguestfs.spec @@ -85,7 +85,7 @@ Release: 0 %ifarch ia64 %ix86 x86_64 %define kernel_binary /boot/vmlinuz %endif -%ifarch ppc ppc64 sparc64 +%ifarch ppc ppc64 ppc64le sparc64 %define kernel_binary /boot/vmlinux %endif %ifarch s390 s390x @@ -99,7 +99,7 @@ Release: 0 # Name: libguestfs %if "%{?_ignore_exclusive_arch}" == "" -ExclusiveArch: x86_64 ppc64 +ExclusiveArch: x86_64 ppc64 ppc64le s390x %endif BuildRequires: aaa_base BuildRequires: attr-devel @@ -134,9 +134,6 @@ BuildRequires: readline-devel # Required to build tools, its independent from bindings BuildRequires: ocaml BuildRequires: ocaml-findlib -%if %suse_version > 1310 -BuildRequires: ocaml(ocaml.opt) -%endif %define _configure_ocaml --enable-ocaml %endif # @@ -155,6 +152,7 @@ Summary: Compatibility package for guestfs-tools License: GPL-2.0 Group: System/Filesystems Patch1000: 1000-force-virtio_blk-in-old-guest-kernel.patch +Patch1: 0001-ocamlopt.patch Source0: %{name}-%{version}.tar.xz Source42: libguestfs.mkinitrd.tar.bz2 Source789653: Pod-Simple-3.23.tar.xz @@ -462,6 +460,7 @@ virtual machines. %prep : _ignore_exclusive_arch '%{?_ignore_exclusive_arch}' %setup -q -a 789653 -a 42 +%patch1 -p1 %patch1000 -p1 %build