The XDR routine .c file generated by rpcgen includes the corresponding Header file. however, the path in include directive of the header file is picked up based on the path of .x file. In the situation of VPATH Builds it will include full path of the header file rather than relative path. Hence, the error happens when compiling time For example: The libvirt source code resides in /home/testuser, I make dist in /tmp/buildvpath, the XDR routine .c file will include full path of the header file like: #include "/home/testuser/src/rpc/virnetprotocol.h" #include "internal.h" #include <arpa/inet.h> If we distribute the tarball to another machine to compile, it will report error as follows: rpc/virnetprotocol.c:7:59: fatal error: /home/testuser/src/rpc/virnetprotocol.h: No such file or directory --- src/Makefile.am | 14 ++++++++++---- 1 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index e57eca2..6c9f598 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -662,12 +662,18 @@ $(srcdir)/remote/remote_driver.c: $(REMOTE_DRIVER_GENERATED) endif WITH_REMOTE %protocol.c: %protocol.x %protocol.h $(srcdir)/rpc/genprotocol.pl - $(AM_V_GEN)perl -w $(srcdir)/rpc/genprotocol.pl $(RPCGEN) -c \ - $< $@ + $(AM_V_GEN)protocolx='$<'; \ + protocolc='$@'; \ + cd $(srcdir); \ + perl -w $(srcdir)/rpc/genprotocol.pl $(RPCGEN) -c \ + $${protocolx/'$(srcdir)/'/''} $${protocolc/'$(srcdir)/'/''} %protocol.h: %protocol.x $(srcdir)/rpc/genprotocol.pl - $(AM_V_GEN)perl -w $(srcdir)/rpc/genprotocol.pl $(RPCGEN) -h \ - $< $@ + $(AM_V_GEN)protocolx='$<'; \ + protocolh='$@'; \ + cd $(srcdir); \ + perl -w $(srcdir)/rpc/genprotocol.pl $(RPCGEN) -h \ + $${protocolx/'$(srcdir)/'/''} $${protocolh/'$(srcdir)/'/''} if WITH_XEN if WITH_DRIVER_MODULES -- 1.7.7.5 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list