summaryrefslogtreecommitdiffstats
path: root/rpc/xdr/gen/Makefile.am
diff options
context:
space:
mode:
authorKaleb S. KEITHLEY <kkeithle@redhat.com>2017-03-08 15:04:50 -0500
committerKaleb KEITHLEY <kkeithle@redhat.com>2017-03-21 13:12:15 -0400
commitc986f10adfbc5d4f728ea84640cc1c81532105ae (patch)
tree68e26d60b27164b01373fe8cefd321ddc5889f64 /rpc/xdr/gen/Makefile.am
parent1c5277d1d1ad55dfbabbd6c5bf6078e0d4b6b118 (diff)
build: libgfxdr.so calls GF_FREE(), needs to link with -lglusterfs
build: libgfxdr.so calls GF_FREE(), needs to link with -lglusterfs The previous change to remove the xdrgen script exposed (or created) a recursive build dependency: libglusterfs needs the generated headers, and libgfxdr should be linked with libglusterfs for GF_FREE/__gf_free. (Much grumbling about libglusterfs being the kitchen sink of gluster elided. This would not be necessary if there were two more more libs, a gluster "runtime" library with common gluster code shared by the xlators and daemons, and a utility library with things like the rbtree, memory allocation, and whatnot.) So. Link at build time or link at runtime? For truth-and-beauty, link with libglusterfs.so at build time. Without truth-and-beauty, don't link with libglusterfs and rely on other the libs that link with libglusterfs to provide resolution of __gf_free(). Truth-and-beauty it is. But how to generate the headers first, then build libglusterfs, then come back and build libgfxdr? Autotools is a maze of twisty passages, all different. Things that work with gnu make on linux don't work with the BSD make. Finally I hit on this solution. Add a shadow directory where make only generates the headers, then build libglusterfs using the generated headers, and finally build libgfxdr and link with libglusterfs. See original BZ 1330604 change http://review.gluster.org/14085 master BZ 1429696 master change: https://review.gluster.org/#/c/16873/ Change-Id: Iede8a30e3103176cb8f0b054885f30fcb352492b BUG: 1430512 Signed-off-by: Kaleb S. KEITHLEY <kkeithle@redhat.com> Reviewed-on: https://review.gluster.org/16874 Smoke: Gluster Build System <jenkins@build.gluster.org> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Diffstat (limited to 'rpc/xdr/gen/Makefile.am')
-rw-r--r--rpc/xdr/gen/Makefile.am48
1 files changed, 48 insertions, 0 deletions
diff --git a/rpc/xdr/gen/Makefile.am b/rpc/xdr/gen/Makefile.am
new file mode 100644
index 00000000000..fc6973c1821
--- /dev/null
+++ b/rpc/xdr/gen/Makefile.am
@@ -0,0 +1,48 @@
+XDRGENFILES = glusterfs3-xdr.x cli1-xdr.x nlm4-xdr.x nsm-xdr.x \
+ rpc-common-xdr.x glusterd1-xdr.x acl3-xdr.x portmap-xdr.x \
+ mount3udp.x changelog-xdr.x glusterfs-fops.x
+XDRHEADERS = $(XDRGENFILES:.x=.h)
+XDRSOURCES = $(XDRGENFILES:.x=.c)
+
+CLEANFILES = $(XDRSOURCES) $(XDRHEADERS)
+
+# trick automake into doing BUILT_SOURCES magic
+BUILT_SOURCES = $(XDRHEADERS) $(XDRSOURCES)
+
+xdrsrc=$(top_srcdir)/rpc/xdr/src
+
+# make's dependency resolution may mean that it decides to run
+# rpcgen again (unnecessarily), but as the .c file already exists,
+# rpcgen will exit with an error, resulting in a build error. We
+# could use a '-' (i.e. -@rpcgen ...) and suffer with noisy warnings
+# in the build. Or we do this crufty thing instead.
+$(XDRSOURCES): $(XDRGENFILES)
+ if [ ! -e $@ -o $(@:.c=.x) -nt $@ ]; then \
+ rpcgen -c -o $(@:.c=.tmp) $(@:.c=.x) && mv $(@:.c=.tmp) $@ ; \
+ cp $@ $(xdrsrc)/ ;\
+ fi
+
+# d*mn sed in netbsd6 doesn't do -i (inline)
+# (why are we still running smoke on netbsd6 and not netbsd7?)
+$(XDRHEADERS): $(XDRGENFILES)
+ if [ ! -e $@ -o $(@:.h=.x) -nt $@ ]; then \
+ rpcgen -h -o $(@:.h=.tmp) $(@:.h=.x) ; \
+ sed -e '/#ifndef/ s/-/_/g' -e '/#define/ s/-/_/g' -e '/#endif/ s/-/_/' \
+ $(@:.h=.tmp) > $@ && rm -f $(@:.h=.tmp) ; \
+ cp $@ $(xdrsrc)/ ; \
+ fi
+
+
+# link .x files when doing out-of-tree builds
+# have to use .PHONY here to force it; all versions of make
+# will think the file already exists "here" by virtue of the
+# VPATH. And we have to have the .x file in $cwd in order to
+# have rpcgen generate "nice" #include directives
+# i.e. (nice):
+# #include "acl3-xdr.h"
+# versus (not nice):
+# #include "../../../../foo/src/rpc/xdr/src/acl3-xdr.h"
+.PHONY : $(XDRGENFILES)
+$(XDRGENFILES):
+ @if [ ! -e $@ ]; then ln -s $(xdrsrc)/$@ . ; fi;
+