---
builder/Makefile.am | 18 +++++++++++++-
configure.ac | 2 ++
mllib/Makefile.am | 60 +++++++++++++++++++++++++++++++---------------
ocaml/Makefile.am | 28 +++++++++++++++-------
ocaml/examples/Makefile.am | 13 ++++++++++
resize/Makefile.am | 18 +++++++++++++-
sparsify/Makefile.am | 18 +++++++++++++-
sysprep/Makefile.am | 18 +++++++++++++-
8 files changed, 143 insertions(+), 32 deletions(-)
diff --git a/builder/Makefile.am b/builder/Makefile.am
index f0cb1dd..bc7ab6e 100644
--- a/builder/Makefile.am
+++ b/builder/Makefile.am
@@ -68,7 +68,7 @@ noinst_DATA =
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 \
@@ -109,6 +109,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
@@ -134,12 +140,22 @@ OCAMLCLIBS = \
-pthread -lpthread \
-lncurses -lcrypt
+if HAVE_OCAMLOPT
virt-builder: $(OBJECTS)
$(OCAMLFIND) ocamlopt $(OCAMLOPTFLAGS) \
mlguestfs.cmxa -linkpkg $^ \
-cclib '$(OCAMLCLIBS)' \
$(OCAML_GCOV_LDFLAGS) \
-o $@
+else
+virt-builder: $(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/configure.ac b/configure.ac
index 0326640..61281f2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1026,6 +1026,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 920928d..2e35d1e 100644
--- a/mllib/Makefile.am
+++ b/mllib/Makefile.am
@@ -69,6 +69,25 @@ 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 \
+ timezone \
+ firstboot \
+ perl_edit \
+ tTY \
+ fsync \
+ progress \
+ uRI \
+ crypt \
+ password \
+ mkdtemp \
+ planner
+
OBJECTS = \
$(top_builddir)/fish/guestfish-progress.o \
$(top_builddir)/fish/guestfish-uri.o \
@@ -77,25 +96,13 @@ OBJECTS = \
progress-c.o \
uri-c.o \
crypt-c.o \
- mkdtemp-c.o \
- config.cmx \
- libdir.cmx \
- common_gettext.cmx \
- common_utils.cmx \
- urandom.cmx \
- random_seed.cmx \
- hostname.cmx \
- timezone.cmx \
- firstboot.cmx \
- perl_edit.cmx \
- tTY.cmx \
- fsync.cmx \
- progress.cmx \
- uRI.cmx \
- crypt.cmx \
- password.cmx \
- mkdtemp.cmx \
- planner.cmx
+ mkdtemp-c.o
+
+if HAVE_OCAMLOPT
+OBJECTS += $(patsubst %,%.cmx,$(ocaml_modules))
+else
+OBJECTS += $(patsubst %,%.cmo,$(ocaml_modules))
+endif
noinst_SCRIPTS = dummy
@@ -116,11 +123,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 $@
@@ -153,9 +169,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..708b2e7 100644
--- a/ocaml/Makefile.am
+++ b/ocaml/Makefile.am
@@ -40,7 +40,10 @@ if HAVE_OCAML
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 +54,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 +121,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
\
@@ -178,3 +184,7 @@ install-data-hook:
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 9c9ab14..22da6fd 100644
--- a/sysprep/Makefile.am
+++ b/sysprep/Makefile.am
@@ -85,7 +85,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 \
@@ -106,6 +106,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
@@ -128,12 +134,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 $@
--
1.9.0