Fix for ticket:236, parallel makes are indeterminate.
authoreb <eb@221aa14e-8319-0410-a670-987f0aec2ac5>
Mon, 3 Mar 2008 22:14:50 +0000 (22:14 +0000)
committereb <eb@221aa14e-8319-0410-a670-987f0aec2ac5>
Mon, 3 Mar 2008 22:14:50 +0000 (22:14 +0000)
Merged eb/pmake r7909:7911 into trunk

git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@7912 221aa14e-8319-0410-a670-987f0aec2ac5

gnuradio-core/src/lib/filter/Makefile.am
gnuradio-core/src/lib/gengen/Makefile.am
gr-trellis/src/lib/Makefile.am
pmt/src/lib/Makefile.am

index ca5838510288f527de929632ae335a1c13f84381..1b1a0c0a8660340cf09905994999a35fcdf94a7f 100644 (file)
@@ -64,9 +64,35 @@ CODE_GENERATOR =                                     \
 
 include $(srcdir)/Makefile.gen
 
-$(srcdir)/Makefile.gen $(GENERATED_H) $(GENERATED_I) $(GENERATED_CC): $(CODE_GENERATOR)
+# Ensure parallel does the right thing.
+# http://sources.redhat.com/automake/automake.html#Multiple-Outputs
+
+generate-stamp: $(CODE_GENERATOR)
+       @rm -f generate-tmp
+       @touch generate-tmp
        PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) $(PYTHON) $(srcdir)/generate_all.py
        touch $(srcdir)/Makefile.in
+       @mv -f generate-tmp $@
+
+
+$(srcdir)/Makefile.gen $(GENERATED_H) $(GENERATED_I) $(GENERATED_CC): generate-stamp
+## Recover from the removal of $@
+       @if test -f $@; then :; else \
+               trap 'rm -rf generate-lock generate-stamp' 1 2 13 15; \
+               if mkdir generate-lock 2>/dev/null; then \
+## This code is being executed by the first process.
+                 rm -f generate-stamp; \
+                 $(MAKE) $(AM_MAKEFLAGS) generate-stamp; \
+                 rmdir generate-lock; \
+               else \
+## This code is being executed by the follower processes.
+## Wait until the first process is done.
+                 while test -d generate-lock; do sleep 1; done; \
+## Succeed if and only if the first process succeeded.
+                 test -f generate-stamp; exit $$?; \
+               fi; \
+             fi
+
 
 BUILT_SOURCES = $(GENERATED_H) $(GENERATED_I) $(GENERATED_CC)
 
index b1a3b261314bbb02ad99e037e9dcf463fa254097..a4330f10347e9335348e36e6e084375db765ad56 100644 (file)
@@ -113,9 +113,35 @@ CODE_GENERATOR =                   \
 
 include $(srcdir)/Makefile.gen
 
-$(srcdir)/Makefile.gen $(GENERATED_H) $(GENERATED_I) $(GENERATED_CC): $(CODE_GENERATOR)
+# Ensure parallel does the right thing.
+# http://sources.redhat.com/automake/automake.html#Multiple-Outputs
+
+generate-stamp: $(CODE_GENERATOR)
+       @rm -f generate-tmp
+       @touch generate-tmp
        PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) $(PYTHON) $(srcdir)/generate_all.py
        touch $(srcdir)/Makefile.in
+       @mv -f generate-tmp $@
+
+
+$(srcdir)/Makefile.gen $(GENERATED_H) $(GENERATED_I) $(GENERATED_CC): generate-stamp
+## Recover from the removal of $@
+       @if test -f $@; then :; else \
+               trap 'rm -rf generate-lock generate-stamp' 1 2 13 15; \
+               if mkdir generate-lock 2>/dev/null; then \
+## This code is being executed by the first process.
+                 rm -f generate-stamp; \
+                 $(MAKE) $(AM_MAKEFLAGS) generate-stamp; \
+                 rmdir generate-lock; \
+               else \
+## This code is being executed by the follower processes.
+## Wait until the first process is done.
+                 while test -d generate-lock; do sleep 1; done; \
+## Succeed if and only if the first process succeeded.
+                 test -f generate-stamp; exit $$?; \
+               fi; \
+             fi
+
 
 BUILT_SOURCES = $(GENERATED_H) $(GENERATED_I) $(GENERATED_CC)
 
index 9eeb3e043d6faf93b1a2b91490aa2e7078474292..62a8bc94b1bae7e26ba66dab99221dd12646c179 100644 (file)
@@ -54,10 +54,35 @@ CODE_GENERATOR =                            \
 
 include $(srcdir)/Makefile.gen
 
-$(srcdir)/Makefile.gen $(GENERATED_H) $(GENERATED_I) $(GENERATED_CC): $(CODE_GENERATOR)
-       PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python \
-               srcdir=$(srcdir) $(PYTHON) $(srcdir)/generate_all.py
+
+# Ensure parallel does the right thing.
+# http://sources.redhat.com/automake/automake.html#Multiple-Outputs
+
+generate-stamp: $(CODE_GENERATOR)
+       @rm -f generate-tmp
+       @touch generate-tmp
+       PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) $(PYTHON) $(srcdir)/generate_all.py
        touch $(srcdir)/Makefile.in
+       @mv -f generate-tmp $@
+
+$(srcdir)/Makefile.gen $(GENERATED_H) $(GENERATED_I) $(GENERATED_CC): generate-stamp
+## Recover from the removal of $@
+       @if test -f $@; then :; else \
+               trap 'rm -rf generate-lock generate-stamp' 1 2 13 15; \
+               if mkdir generate-lock 2>/dev/null; then \
+## This code is being executed by the first process.
+                 rm -f generate-stamp; \
+                 $(MAKE) $(AM_MAKEFLAGS) generate-stamp; \
+                 rmdir generate-lock; \
+               else \
+## This code is being executed by the follower processes.
+## Wait until the first process is done.
+                 while test -d generate-lock; do sleep 1; done; \
+## Succeed if and only if the first process succeeded.
+                 test -f generate-stamp; exit $$?; \
+               fi; \
+             fi
+
 
 # These files are built by SWIG.  The first is the C++ glue.
 # The second is the python wrapper that loads the _trellis shared library
index 1ea670281a7368546d6d6b54d4bc727d3c56e8a5..16834746ddfbc046fdf06e8d896adc63aa69f687 100644 (file)
@@ -46,8 +46,34 @@ GENERATED_CC =                               \
        qa_pmt_unv.cc                   
 
 
-$(GENERATED_H) $(GENERATED_I) $(GENERATED_CC): $(CODE_GENERATOR)
+
+# Ensure parallel does the right thing.
+# http://sources.redhat.com/automake/automake.html#Multiple-Outputs
+
+generate-stamp: $(CODE_GENERATOR)
+       @rm -f generate-tmp
+       @touch generate-tmp
        PYTHONPATH=$(top_srcdir)/pmt/src/lib srcdir=$(srcdir) $(PYTHON) $(srcdir)/generate_unv.py
+       @mv -f generate-tmp $@
+
+$(GENERATED_H) $(GENERATED_I) $(GENERATED_CC): generate-stamp
+## Recover from the removal of $@
+       @if test -f $@; then :; else \
+               trap 'rm -rf generate-lock generate-stamp' 1 2 13 15; \
+               if mkdir generate-lock 2>/dev/null; then \
+## This code is being executed by the first process.
+                 rm -f generate-stamp; \
+                 $(MAKE) $(AM_MAKEFLAGS) generate-stamp; \
+                 rmdir generate-lock; \
+               else \
+## This code is being executed by the follower processes.
+## Wait until the first process is done.
+                 while test -d generate-lock; do sleep 1; done; \
+## Succeed if and only if the first process succeeded.
+                 test -f generate-stamp; exit $$?; \
+               fi; \
+             fi
+
 
 pmt_serial_tags.h: $(srcdir)/../scheme/gnuradio/gen-serial-tags.scm $(srcdir)/../scheme/gnuradio/pmt-serial-tags.scm
        $(RUN_GUILE) $(srcdir)/../scheme/gnuradio/gen-serial-tags.scm $(srcdir)/../scheme/gnuradio/pmt-serial-tags.scm pmt_serial_tags.h