From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> If from a clean GIT checkout 'make -j 8' is run, the ESX and Hyper-V code will be generated multiple times over. This is because there are multiple files being generated from one invocation of the generator script. make does not realize this and so invokes the generator once per file. This doesn't matter with serialized builds, but with parallel builds multiple instances of the generator get run at once. make[2]: Entering directory `/home/berrange/src/virt/libvirt/src' GEN util/virkeymaps.h GEN remote/remote_protocol.h GEN remote/remote_client_bodies.h GEN remote/qemu_protocol.h GEN remote/qemu_client_bodies.h GEN esx/esx_vi_methods.generated.c GEN esx/esx_vi_methods.generated.h GEN esx/esx_vi_methods.generated.macro GEN esx/esx_vi_types.generated.c GEN esx/esx_vi_types.generated.h GEN esx/esx_vi_types.generated.typedef GEN esx/esx_vi_types.generated.typedef GEN esx/esx_vi_types.generated.typeenum GEN esx/esx_vi_types.generated.typetostring GEN esx/esx_vi_types.generated.typefromstring GEN esx/esx_vi_types.generated.h GEN esx/esx_vi_types.generated.c GEN esx/esx_vi_methods.generated.h GEN esx/esx_vi_methods.generated.c GEN esx/esx_vi_methods.generated.macro GEN esx/esx_vi.generated.h GEN esx/esx_vi.generated.c GEN esx/esx_vi_types.generated.typeenum GEN esx/esx_vi_types.generated.typedef GEN esx/esx_vi_types.generated.typeenum GEN esx/esx_vi_types.generated.typetostring GEN esx/esx_vi_types.generated.typefromstring GEN esx/esx_vi_types.generated.h GEN esx/esx_vi_types.generated.c GEN esx/esx_vi_methods.generated.h ...snip... GEN hyperv/hyperv_wmi.generated.h GEN libvirt_qemu_probes.h GEN locking/qemu-sanlock.conf GEN hyperv/hyperv_wmi.generated.c GEN rpc/virnetprotocol.h GEN hyperv/hyperv_wmi_classes.generated.typedef GEN hyperv/hyperv_wmi_classes.generated.h GEN hyperv/hyperv_wmi_classes.generated.c GEN rpc/virkeepaliveprotocol.h GEN remote/remote_protocol.c GEN remote/qemu_protocol.c GEN rpc/virkeepaliveprotocol.c GEN rpc/virnetprotocol.c GEN libvirt.def Prevent this using a timestamp file to control generation, as was previously done for the python bindings in commit a7868e0131516ef2dece82586edd52dc87fe336c Signed-off-by: Daniel P. Berrange <berrange@xxxxxxxxxx> --- .gitignore | 1 + src/Makefile.am | 25 ++++++++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 46dbcdf..b4cbb5f 100644 --- a/.gitignore +++ b/.gitignore @@ -93,6 +93,7 @@ /python/libvirt.py /python/libvirt_qemu.py /sc_* +/src/.*.stamp /src/esx/*.generated.* /src/hyperv/*.generated.* /src/libvirt*.def diff --git a/src/Makefile.am b/src/Makefile.am index a9f8d94..93fcf3b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -874,9 +874,17 @@ endif BUILT_SOURCES += $(ESX_DRIVER_GENERATED) -$(ESX_DRIVER_GENERATED): $(srcdir)/esx/esx_vi_generator.input \ +ESX_GENERATED_STAMP = .esx_vi_generator.stamp + +$(ESX_DRIVER_GENERATED): $(ESX_GENERATED_STAMP) + +$(ESX_GENERATED_STAMP): $(srcdir)/esx/esx_vi_generator.input \ $(srcdir)/esx/esx_vi_generator.py - $(AM_V_GEN)srcdir=$(srcdir) $(PYTHON) $(srcdir)/esx/esx_vi_generator.py + $(AM_V_GEN)srcdir=$(srcdir) $(PYTHON) $(srcdir)/esx/esx_vi_generator.py \ + && touch $@ + +MAINTAINERCLEANFILES += $(ESX_DRIVER_GENERATED) $(ESX_GENERATED_STAMP) + if WITH_ESX noinst_LTLIBRARIES += libvirt_driver_esx.la @@ -892,9 +900,16 @@ endif BUILT_SOURCES += $(HYPERV_DRIVER_GENERATED) -$(HYPERV_DRIVER_GENERATED): $(srcdir)/hyperv/hyperv_wmi_generator.input \ +HYPERV_GENERATED_STAMP = .hyperv_wmi_generator.stamp + +$(HYPERV_DRIVER_GENERATED): $(HYPERV_GENERATED_STAMP) + +$(HYPERV_GENERATED_STAMP): $(srcdir)/hyperv/hyperv_wmi_generator.input \ $(srcdir)/hyperv/hyperv_wmi_generator.py - $(AM_V_GEN)srcdir=$(srcdir) $(PYTHON) $(srcdir)/hyperv/hyperv_wmi_generator.py + $(AM_V_GEN)srcdir=$(srcdir) $(PYTHON) $(srcdir)/hyperv/hyperv_wmi_generator.py \ + && touch $@ + +MAINTAINERCLEANFILES += $(HYPERV_DRIVER_GENERATED) $(HYPERV_GENERATED_STAMP) if WITH_HYPERV noinst_LTLIBRARIES += libvirt_driver_hyperv.la @@ -1675,4 +1690,4 @@ endif CLEANFILES += *.gcov .libs/*.gcda .libs/*.gcno *.gcno *.gcda *.i *.s DISTCLEANFILES += $(GENERATED_SYM_FILES) -MAINTAINERCLEANFILES += $(REMOTE_DRIVER_GENERATED) $(VIR_NET_RPC_GENERATED) $(ESX_DRIVER_GENERATED) +MAINTAINERCLEANFILES += $(REMOTE_DRIVER_GENERATED) $(VIR_NET_RPC_GENERATED) -- 1.7.10.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list