bz 3826, fix for parallel make in fedora build system

builds of glusterfs in the fedora build system often fail due to a
race condition between running yacc and starting to compile the y.tab.c
produced by yacc

We found that the previous fix would still occasionally trip the race
condition. This revised patch changes the automake Makefile.am to generate
the parser files without incurring the race condition. An extra dimension
of the problem is that the tarball from
  http://download.gluster.com/pub/gluster/glusterfs/3.2/3.2.5/glusterfs-3.2.5.tar.gz
contains files that you don't get when you clone from the git repo (e.g.
libgluster/src/{graph.lex.c,y.tab.c}, and all the Makefile.in files) so
build issues on fedora build systems do not manifest themselves on jenkins
and vice versa.

This works on jenkins, the fedora build system, and my f16 vm/guest
machines. (Finding the right combination that works on all three was an
exercise to say the least. I'm open to other suggestions for avoiding
the race condition.)

Run autogen.sh to (re)generate the Makefile.ins. Then run configure to
produce all Makefiles, followed by `make -j X` where X>1

see also https://bugzilla.redhat.com/show_bug.cgi?id=756510

BUG: 3826
Change-Id: Iaeecb59c61a77bf3927da18253c83cf5ffed4254
Reviewed-on: http://review.gluster.com/765
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
Reviewed-by: Anand Avati <avati@gluster.com>
This commit is contained in:
Kaleb KEITHLEY 2011-12-01 12:44:38 -05:00 committed by Anand Avati
parent f5d5e8012a
commit 430f76a6c1

View File

@ -13,7 +13,7 @@ lib_LTLIBRARIES = libglusterfs.la
CONTRIB_BUILDDIR = $(top_builddir)/contrib
libglusterfs_la_SOURCES = dict.c graph.lex.c y.tab.c xlator.c logging.c \
libglusterfs_la_SOURCES = dict.c xlator.c logging.c \
hashfn.c defaults.c common-utils.c timer.c inode.c call-stub.c \
compat.c fd.c compat-errno.c event.c mem-pool.c gf-dirent.c syscall.c \
iobuf.c globals.c statedump.c stack.c checksum.c daemon.c \
@ -25,6 +25,10 @@ libglusterfs_la_SOURCES = dict.c graph.lex.c y.tab.c xlator.c logging.c \
$(CONTRIBDIR)/uuid/isnull.c $(CONTRIBDIR)/uuid/unpack.c syncop.c \
graph-print.c trie.c run.c options.c
nodist_libglusterfs_la_SOURCES = y.tab.c graph.lex.c
BUILT_SOURCES = graph.lex.c
noinst_HEADERS = common-utils.h defaults.h dict.h glusterfs.h hashfn.h \
logging.h xlator.h stack.h timer.h list.h inode.h call-stub.h compat.h \
fd.h revision.h compat-errno.h event.h mem-pool.h byte-order.h \
@ -37,14 +41,11 @@ noinst_HEADERS = common-utils.h defaults.h dict.h glusterfs.h hashfn.h \
EXTRA_DIST = graph.l graph.y
graph.lex.c: graph.l yacc.stamp
graph.lex.c: graph.l y.tab.h
$(LEX) -t $(srcdir)/graph.l > $@
yacc.stamp: y.tab.c y.tab.h
touch $@
y.tab.c y.tab.h: graph.y
y.tab.h: graph.y
$(YACC) -d $(srcdir)/graph.y
CLEANFILES = graph.lex.c y.tab.c y.tab.h yacc.stamp
CLEANFILES = graph.lex.c y.tab.c y.tab.h
CONFIG_CLEAN_FILES = $(CONTRIB_BUILDDIR)/uuid/uuid_types.h