build: compile_et rules for parallel make
authorMichael Meffie <mmeffie@sinenomine.net>
Tue, 10 Sep 2013 02:25:50 +0000 (22:25 -0400)
committerDerrick Brashear <shadow@your-file-system.com>
Mon, 30 Sep 2013 13:31:02 +0000 (06:31 -0700)
commitdbf68229c6c90d65781fdc16565dd1e9b56248c0
treece44e4e9f64dc66555c499a9dbcbdd7b1c35bfd0
parentd477118fbda470c6f9f890a1a3f45ad8bad97be5
build: compile_et rules for parallel make

Change all makefile rules which run compile_et in order support parallel
make.  The compile_et generates two outputs, so special care must be
taken in rules which run compile_et.

All the rules for compile_et have been changed to the form:

    foo.c foo.h: foo.et
        compile_et foo.et -h foo
    foo.h: foo.c

The above rules are equivalent to:

    foo.c: foo.et
        compile_et foo.et -h foo

    foo.h: foo.et foo.c
        compile_et foo.et -h foo

therefore a parallel make will serialize the builds of foo.c and foo.h,
and should detect that the second is no longer needed once the first is
over.  This form works since foo.et is not a phony target, and does not
depend on a phony target.

Previously, the rules for compile_et were of the one of the two forms:

    a)  foo.c foo.h: foo.et
            compile_et foo.et -h foo

or

    b)  foo.h: foo.c
        foo.c: foo.et
            compile_et foo.et -h foo

Form a) is problematic for parallel makes, since it is equivalent to:

        foo.c:
            compile_et foo.et -h foo
        foo.h:
            compile_et foo.et -h foo

In a parallel make, compile_et will be run concurrently, clobbering
each other's output files.

Form b) is better, but is problematic when foo.h is removed, since foo.h
will not be updated.

Thanks to Russ Allbery for pointing out the automake documentation which
describes issues with commands that produce multiple outputs, and
portable solutions.

http://www.gnu.org/software/automake/manual/automake.html#Multiple-Outputs

Change-Id: I14c056606084f80270e05592d3d09a600f804e24
Reviewed-on: http://gerrit.openafs.org/10237
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
20 files changed:
src/afs/Makefile.in
src/auth/Makefile.in
src/bozo/Makefile.in
src/bubasics/Makefile.in
src/bucoord/Makefile.in
src/budb/Makefile.in
src/cmd/Makefile.in
src/kauth/Makefile.in
src/libadmin/adminutil/Makefile.in
src/ptserver/Makefile.in
src/rxkad/Makefile.in
src/rxkad/test/Makefile.in
src/tbudb/Makefile.in
src/tools/dumpscan/Makefile.in
src/tptserver/Makefile.in
src/tvlserver/Makefile.in
src/tvolser/Makefile.in
src/ubik/Makefile.in
src/vlserver/Makefile.in
src/volser/Makefile.in