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)
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

index 7dbb9f4..c407c01 100644 (file)
@@ -16,12 +16,14 @@ all: depinstall
 
 generated: afs_trace.h afs_trace.msf unified_afs.c unified_afs.h
 
-afs_trace.h afs_trace.msf: afs_trace.et
+afs_trace.msf afs_trace.h: afs_trace.et
        ${COMPILE_ET} -v 2 -p ${srcdir} afs_trace.et
+afs_trace.h: afs_trace.msf
 
 unified_afs.c unified_afs.h: unified_afs.et
        $(RM) -f unified_afs.c unified_afs.h
        ${COMPILE_ET} -p ${srcdir} unified_afs -h unified_afs
+unified_afs.h: unified_afs.c
 
 afszcm.cat: afs_trace.msf
        -$(RM) -f afszcm.cat
index 2a2c400..2a69713 100644 (file)
@@ -113,10 +113,12 @@ setkey: setkey.o ${LIBS}
 acfg_errors.c cellconfig.h: acfg_errors.et cellconfig.p.h
        $(RM) -f cellconfig.h acfg_errors.c
        ${COMPILE_ET} -p ${srcdir} acfg_errors -h cellconfig
+cellconfig.h: acfg_errors.c
 
 ktc_errors.c auth.h: ktc_errors.et auth.p.h
        $(RM) -f auth.h ktc_errors.c
        ${COMPILE_ET} -p ${srcdir} ktc_errors -h auth
+auth.h: ktc_errors.c
 
 Ktoken.xdr.c: token.xg
        $(RXGEN) -A -x -k -c -o $@ $(srcdir)/token.xg
index b565d17..8ce9cc1 100644 (file)
@@ -81,11 +81,10 @@ bosint.cs.c: bosint.h
 bosint.ss.c: bosint.h
 bosint.xdr.c: bosint.h
 
-bnode.h: boserr.c
-
-boserr.c: bnode.p.h boserr.et
+boserr.c bnode.h: bnode.p.h boserr.et
        $(RM) -f boserr.c bnode.h
        ${COMPILE_ET} -p ${srcdir} boserr -h bnode
+bnode.h: boserr.c
 
 bosserver.o: bosserver.c ${INCLS} AFS_component_version_number.o
 
index f0fb018..eff5efd 100644 (file)
@@ -80,23 +80,20 @@ bumon.xdr.c: bumon.h
 bumon.ss.c: bumon.h
 bumon.cs.c: bumon.h
 
-butm.h: butm_errs.c
-
-butm_errs.c: butm_errs.et butm.p.h
+butm_errs.c butm.h: butm_errs.et butm.p.h
        $(RM) -f butm.h butm_errs.c
        ${COMPILE_ET} -p ${srcdir} butm_errs -h butm
+butm.h: butm_errs.c
 
-tcdata.h: butc_errs.c
-
-butc_errs.c: butc_errs.et tcdata.p.h butm.h
+butc_errs.c tcdata.h: butc_errs.et tcdata.p.h butm.h
        $(RM) -f tcdata.h butc_errs.c
        ${COMPILE_ET} -p ${srcdir} butc_errs -h tcdata
+tcdata.h: butc_errs.c
 
-butx.h: butx_errs.c
-
-butx_errs.c: butx_errs.et
+butx_errs.c butx.h: butx_errs.et
        $(RM) -f butx.h butx_errs.c
        ${COMPILE_ET} -p ${srcdir} butx_errs -h butx
+butx.h: butx_errs.c
 
 #
 # Installation targets
index f70369e..b9748d0 100644 (file)
@@ -70,11 +70,10 @@ $(BACKOBJS): bc.h ${TOP_INCDIR}/afs/butc.h
 backup:  $(BACKOBJS) ${LIBS}
        $(AFS_LDRULE) $(BACKOBJS) ${LIBS} $(LIB_roken) ${XLIBS}
 
-bc.h: bucoord_errs.c
-
-bucoord_errs.c:        bucoord_errs.et bc.p.h
+bucoord_errs.c bc.h: bucoord_errs.et bc.p.h
        $(RM) -f bc.h bucoord_errs.c
        ${COMPILE_ET} -p ${srcdir} bucoord_errs -h bc
+bc.h: bucoord_errs.c
 
 #
 # Errors
index 1d39793..c6972b9 100644 (file)
@@ -71,11 +71,10 @@ ${TOP_INCDIR}/afs/budb_client.h: budb_client.h
 ${TOP_INCDIR}/afs/budb_prototypes.h: budb_prototypes.h
        ${INSTALL_DATA} $? $@
 
-budb_errs.h: budb_errs.c
-
-budb_errs.c: budb_errs.et
+budb_errs.c bubd_errs.h: budb_errs.et
        $(RM) -f budb_errs.c
        ${COMPILE_ET} -p ${srcdir} budb_errs
+budb_errs.h: budb_errs.c
 
 database.o: database.c budb_errs.h globals.h ${INCLS}
 db_alloc.o: db_alloc.c budb_errs.h ${INCLS}
index 452aca9..a287a28 100644 (file)
@@ -35,11 +35,11 @@ ${TOP_LIBDIR}/libcmd64.a: libcmd64.a
 ${TOP_INCDIR}/afs/cmd.h: cmd.h
        ${INSTALL_DATA} $? $@
 
-cmd.h: cmd_errors.et cmd.p.h
+cmd_errors.c cmd.h: cmd_errors.et cmd.p.h
        $(RM) -f cmd.h cmd_errors.c
        ${COMPILE_ET} -p ${srcdir} cmd_errors -h cmd
+cmd.h: cmd_errors.c
 
-cmd_errors.c: cmd.h 
 cmd.lo: cmd.h
 
 config_file.lo: $(TOP_SRCDIR)/external/heimdal/krb5/config_file.c krb5_locl.h
index 572b620..032cee1 100644 (file)
@@ -124,11 +124,10 @@ kadatabase.o: kadatabase.c ${INCLS}
 
 kaprocs.o: kaprocs.c ${INCLS} kaport.h
 
-kautils.h: kaerrors.c
-
-kaerrors.c: kaerrors.et kautils.p.h
+kaerrors.c kautils.h: kaerrors.et kautils.p.h
        $(RM) -f kautils.h kaerrors.c
        ${COMPILE_ET} -p ${srcdir} kaerrors -h kautils
+kautils.h: kaerrors.c
 
 kauth.xdr.lo: kauth.xdr.c kauth.h
 
index 15dc10c..7053e82 100644 (file)
@@ -28,76 +28,75 @@ ${TOP_LIBDIR}/libafsadminutil.a: libafsadminutil.a
 ${TOP_INCDIR}/afs/afs_utilAdmin.h: afs_utilAdmin.h
        ${INSTALL_DATA} $? $@
 
-afs_AdminBosErrors.h: afs_AdminBosErrors.c
-afs_AdminBosErrors.c: afs_AdminBosErrors.et
+afs_AdminBosErrors.c afs_AdminBosErrors.h: afs_AdminBosErrors.et
        ${INSTALL_DATA} ${srcdir}/afs_AdminErrors.h ${TOP_INCDIR}/afs
        $(RM) -f afs_AdminBosErrors.c afs_AdminBosErrors.h
        ${COMPILE_ET} -p ${srcdir} afs_AdminBosErrors.et -h afs_AdminBosErrors
+afs_AdminBosErrors.h: afs_AdminBosErrors.c
 
 ${TOP_INCDIR}/afs/afs_AdminBosErrors.h: afs_AdminBosErrors.h
        cp afs_AdminBosErrors.h ${TOP_INCDIR}/afs/afs_AdminBosErrors.h
 
-afs_AdminCfgErrors.h: afs_AdminCfgErrors.c
-afs_AdminCfgErrors.c: afs_AdminCfgErrors.et
+afs_AdminCfgErrors.c afs_AdminCfgErrors.h: afs_AdminCfgErrors.et
        $(RM) -f ${srcdir}/afs_AdminCfgErrors.c afs_AdminCfgErrors.h
        ${COMPILE_ET} -p ${srcdir} afs_AdminCfgErrors.et -h afs_AdminCfgErrors
+afs_AdminCfgErrors.h: afs_AdminCfgErrors.c
 
 ${TOP_INCDIR}/afs/afs_AdminCfgErrors.h: afs_AdminCfgErrors.h
        cp afs_AdminCfgErrors.h ${TOP_INCDIR}/afs/afs_AdminCfgErrors.h
 
-afs_AdminClientErrors.h: afs_AdminClientErrors.c
-afs_AdminClientErrors.c: afs_AdminClientErrors.et
+afs_AdminClientErrors.c afs_AdminClientErrors.h: afs_AdminClientErrors.et
        $(RM) -f ${srcdir}/afs_AdminClientErrors.c afs_AdminClientErrors.h
        ${COMPILE_ET} -p ${srcdir} afs_AdminClientErrors.et -h afs_AdminClientErrors
+afs_AdminClientErrors.h: afs_AdminClientErrors.c
 
 ${TOP_INCDIR}/afs/afs_AdminClientErrors.h: afs_AdminClientErrors.h
        cp afs_AdminClientErrors.h ${TOP_INCDIR}/afs/afs_AdminClientErrors.h
 
-afs_AdminMiscErrors.h: afs_AdminMiscErrors.c
-afs_AdminMiscErrors.c: afs_AdminMiscErrors.et
+afs_AdminMiscErrors.c afs_AdminMiscErrors.h: afs_AdminMiscErrors.et
        $(RM) -f ${srcdir}/afs_AdminMiscErrors.c afs_AdminMiscErrors.h
        ${COMPILE_ET} -p ${srcdir} afs_AdminMiscErrors.et -h afs_AdminMiscErrors
+afs_AdminMiscErrors.h: afs_AdminMiscErrors.c
 
 ${TOP_INCDIR}/afs/afs_AdminMiscErrors.h: afs_AdminMiscErrors.h
        cp afs_AdminMiscErrors.h ${TOP_INCDIR}/afs/afs_AdminMiscErrors.h
 
-afs_AdminCommonErrors.h: afs_AdminCommonErrors.c
-afs_AdminCommonErrors.c: afs_AdminCommonErrors.et
+afs_AdminCommonErrors.c afs_AdminCommonErrors.h: afs_AdminCommonErrors.et
        $(RM) -f ${srcdir}/afs_AdminCommonErrors.c afs_AdminCommonErrors.h
        ${COMPILE_ET} -p ${srcdir} afs_AdminCommonErrors.et -h afs_AdminCommonErrors
+afs_AdminCommonErrors.h: afs_AdminCommonErrors.c
 
 ${TOP_INCDIR}/afs/afs_AdminCommonErrors.h: afs_AdminCommonErrors.h
        cp afs_AdminCommonErrors.h ${TOP_INCDIR}/afs/afs_AdminCommonErrors.h
 
-afs_AdminKasErrors.h: afs_AdminKasErrors.c
-afs_AdminKasErrors.c: afs_AdminKasErrors.et
+afs_AdminKasErrors.c afs_AdminKasErrors.h: afs_AdminKasErrors.et
        $(RM) -f ${srcdir}/afs_AdminKasErrors.c afs_AdminKasErrors.h
        ${COMPILE_ET} -p ${srcdir} afs_AdminKasErrors.et -h afs_AdminKasErrors
+afs_AdminKasErrors.h: afs_AdminKasErrors.c
 
 ${TOP_INCDIR}/afs/afs_AdminKasErrors.h: afs_AdminKasErrors.h
        cp afs_AdminKasErrors.h ${TOP_INCDIR}/afs/afs_AdminKasErrors.h
 
-afs_AdminPtsErrors.h: afs_AdminPtsErrors.c
-afs_AdminPtsErrors.c: afs_AdminPtsErrors.et
+afs_AdminPtsErrors.c afs_AdminPtsErrors.h: afs_AdminPtsErrors.et
        $(RM) -f ${srcdir}/afs_AdminPtsErrors.c afs_AdminPtsErrors.h
        ${COMPILE_ET} -p ${srcdir} afs_AdminPtsErrors.et -h afs_AdminPtsErrors
+afs_AdminPtsErrors.h: afs_AdminPtsErrors.c
 
 ${TOP_INCDIR}/afs/afs_AdminPtsErrors.h: afs_AdminPtsErrors.h
        cp afs_AdminPtsErrors.h ${TOP_INCDIR}/afs/afs_AdminPtsErrors.h
 
-afs_AdminUtilErrors.h: afs_AdminUtilErrors.c
-afs_AdminUtilErrors.c: afs_AdminUtilErrors.et
+afs_AdminUtilErrors.c afs_AdminUtilErrors.h: afs_AdminUtilErrors.et
        $(RM) -f ${srcdir}/afs_AdminUtilErrors.c afs_AdminUtilErrors.h
        ${COMPILE_ET} -p ${srcdir} afs_AdminUtilErrors.et -h afs_AdminUtilErrors
+afs_AdminUtilErrors.h: afs_AdminUtilErrors.c
 
 ${TOP_INCDIR}/afs/afs_AdminUtilErrors.h: afs_AdminUtilErrors.h
        cp afs_AdminUtilErrors.h ${TOP_INCDIR}/afs/afs_AdminUtilErrors.h
 
-afs_AdminVosErrors.c: afs_AdminVosErrors.et
+afs_AdminVosErrors.c afs_AdminVosErrors.h: afs_AdminVosErrors.et
        $(RM) -f ${srcdir}/afs_AdminVosErrors.c afs_AdminVosErrors.h
        ${COMPILE_ET} -p ${srcdir} afs_AdminVosErrors.et -h afs_AdminVosErrors
-
-afs_AdminVosErrors.h:  afs_AdminVosErrors.c
+afs_AdminVosErrors.h: afs_AdminVosErrors.c
 
 ${TOP_INCDIR}/afs/afs_AdminVosErrors.h: afs_AdminVosErrors.h
        cp afs_AdminVosErrors.h ${TOP_INCDIR}/afs/afs_AdminVosErrors.h
index dee4513..135fa3f 100644 (file)
@@ -160,9 +160,10 @@ ptclient: ptclient.o libprot.a $(LIBS)
 
 ptclient.o: ptclient.c ${INCLS} AFS_component_version_number.c
 
-pterror.h pterror.c: pterror.et
+pterror.c pterror.h: pterror.et
        $(RM) -f pterror.h pterror.c
        ${COMPILE_ET} -p ${srcdir} pterror
+pterror.h: pterror.c
 
 display.lo: $(INCLS)
 ptuser.lo: $(LINCLS)
index 4300d6a..d768a80 100644 (file)
@@ -93,11 +93,10 @@ rxkad_errs.lo: rxkad_errs.c
 ticket.lo: ticket.c lifetimes.h ${INCLS}
 ticket5.lo: ticket5.c v5gen.c v5der.c v5gen-rewrite.h ${INCLS}
 
-rxkad.h: rxkad_errs.c
-
-rxkad_errs.c: rxkad_errs.et rxkad.p.h
+rxkad_errs.c rxkad.h: rxkad_errs.et rxkad.p.h
        $(RM) -f rxkad.h rxkad_errs.c
        ${COMPILE_ET} -p ${srcdir} rxkad_errs -h rxkad
+rxkad.h: rxkad_errs.c
 
 tcrypt.o: tcrypt.c AFS_component_version_number.o
 
index 1acfe0e..6248c4c 100644 (file)
@@ -71,7 +71,9 @@ th_stress_errs.o: stress_errs.c
        ${THRULE} -c $(srcdir)/stress_errs.c -o th_stress_errs.o
 
 stress_errs.c stress_errs.h: stress_errs.et
-       $(RM) -f stress_errs.h stress_errs.c; ${COMPILE_ET} -p ${srcdir} stress_errs -h stress_errs
+       $(RM) -f stress_errs.h stress_errs.c
+       ${COMPILE_ET} -p ${srcdir} stress_errs -h stress_errs
+stress_errs.h: stress_errs.c
 
 stress.o: ${HEADERS}
 stress_c.o: ${HEADERS}
index 34751f8..32b456c 100644 (file)
@@ -48,11 +48,10 @@ SERVER_OBJS = ${COMMON_OBJS} budb.ss.o budb.xdr.o dbs_dump.o db_lock.o db_text.o
 
 all: ${TOP_LIBDIR}/libbudb.a ${TOP_INCDIR}/afs/budb.h ${TOP_INCDIR}/afs/budb_errs.h ${TOP_INCDIR}/afs/budb_client.h budb_server ${INCLS}
 
-budb_errs.h: budb_errs.c
-
-budb_errs.c: ${BUDB}/budb_errs.et
-       $(RM) -f budb_errs.c
+budb_errs.c budb_errs.h: ${BUDB}/budb_errs.et
+       $(RM) -f budb_errs.c budb_errs.h
        ${COMPILE_ET} -p ${BUDB} budb_errs
+budb_errs.h: budb_errs.c
 
 #
 # Build targets
index 13c152a..a829c65 100644 (file)
@@ -72,10 +72,14 @@ libdumpscan.a: $(OBJS_libdumpscan.a)
        $(RANLIB) libdumpscan.a
 
 xf_errs.c xf_errs.h: ${srcdir}/xf_errs.et
+       $(RM) -f xf_errs.c xf_errs.h
        $(COMPILE_ET) ${srcdir}/xf_errs.et
+xf_errs.h: xf_errs.c
 
 dumpscan_errs.c dumpscan_errs.h: ${srcdir}/dumpscan_errs.et
+       $(RM) -f dumpscan_errs.c dumpscan_errs.h
        $(COMPILE_ET) ${srcdir}/dumpscan_errs.et
+dumpscan_errs.h: dumpscan_errs.c
 
 util.o xfiles.o xf_files.o: xf_errs.h
 backuphdr.o directory.o parsedump.o parsetag.o: dumpscan_errs.h
index 5a217c6..fcf4118 100644 (file)
@@ -146,10 +146,10 @@ pt_util.o: ${PTSERVER}/pt_util.c
 ptubik.o: ${PTSERVER}/ptubik.c ${INCLS}
        $(AFS_CCRULE) $(PTSERVER)/ptubik.c
 
-pterror.h: pterror.c
-pterror.c: ${PTSERVER}/pterror.et
+pterror.c pterror.h: ${PTSERVER}/pterror.et
        $(RM) -f pterror.h pterror.c
        ${COMPILE_ET} -p ${PTSERVER} pterror
+pterror.h: pterror.c
 
 prerror.h: pterror.h
        ${INSTALL} $? $@
index 5b81f5a..947c8cf 100644 (file)
@@ -112,8 +112,10 @@ vlclient.o: ${VLSERVER}/vlclient.c
 
 vl_errors.o: vl_errors.c
 
-vlserver.h vl_errors.c: ${VLSERVER}/vl_errors.et ${VLSERVER}/vlserver.p.h
-       $(RM) -f vlserver.h vl_errors.c; ${COMPILE_ET} -p ${VLSERVER} vl_errors -h vlserver
+vl_errors.c vlserver.h: ${VLSERVER}/vl_errors.et ${VLSERVER}/vlserver.p.h
+       $(RM) -f vlserver.h vl_errors.c
+       ${COMPILE_ET} -p ${VLSERVER} vl_errors -h vlserver
+vlserver.h: vl_errors.c
 
 system: install
 
index 77c1800..14725c5 100644 (file)
@@ -89,8 +89,10 @@ volint.xdr.o: ../volser/volint.xdr.c
 lockprocs.o: ${VOLSER}/lockprocs.c
        $(AFS_CCRULE) -I../volser $(VOLSER)/lockprocs.c
 
-vlserver.h vl_errors.c: ${VLSERVER}/vl_errors.et ${VLSERVER}/vlserver.p.h
-       $(RM) -f vlserver.h vl_errors.c; ${COMPILE_ET} -p ${VLSERVER} vl_errors -h vlserver
+vl_errors.c vlserver.h: ${VLSERVER}/vl_errors.et ${VLSERVER}/vlserver.p.h
+       $(RM) -f vlserver.h vl_errors.c
+       ${COMPILE_ET} -p ${VLSERVER} vl_errors -h vlserver
+vlserver.h: vl_errors.c
 
 vldbint.cs.o: ../vlserver/vldbint.cs.c
        $(AFS_CCRULE) -I$(VLSERVER) ../vlserver/vldbint.cs.c
index f52ebeb..e9cd30c 100644 (file)
@@ -119,11 +119,10 @@ utst_client.o: utst_client.c ${INCLS} utst_int.h AFS_component_version_number.c
 udebug.o: udebug.c ${INCLS} AFS_component_version_number.c
 uerrors.o: uerrors.c
 
-ubik.h: uerrors.c
-
-uerrors.c: uerrors.et ubik.p.h
+uerrors.c ubik.h: uerrors.et ubik.p.h
        $(RM) -f ubik.h uerrors.c
        ${COMPILE_ET} -p ${srcdir} uerrors -h ubik
+ubik.h: uerrors.c
 
 libubik.a: ${LT_objs}
        $(LT_LDLIB_lwp) $(LT_objs)
index 13957e4..a2df96f 100644 (file)
@@ -143,8 +143,11 @@ vlclient: vlclient.o libvldb.a $(LIBS)
 vlclient.o: vlclient.c ${INCLS} AFS_component_version_number.o
 
 vl_errors.o: vl_errors.c
-vlserver.h vl_errors.c: vl_errors.et vlserver.p.h
-       $(RM) -f vlserver.h vl_errors.c; ${COMPILE_ET} -p ${srcdir} vl_errors -h vlserver
+
+vl_errors.c vlserver.h : vl_errors.et vlserver.p.h
+       $(RM) -f vlserver.h vl_errors.c
+       ${COMPILE_ET} -p ${srcdir} vl_errors -h vlserver
+vlserver.h: vl_errors.c
 
 vlserver.o: vlserver.c
 
index 4066959..335c8be 100644 (file)
@@ -124,11 +124,10 @@ liboafs_volser.la: liboafs_volser.la.sym $(LT_objs) $(LT_deps)
 libauthent_volser.la: $(LT_objs)
        $(LT_LDLIB_pic) $(LT_objs)
 
-volser.h: volerr.c
-
-volerr.c: volerr.et volser.p.h
+volerr.c volser.h: volerr.et volser.p.h
        $(RM) -f volser.h volerr.c
        ${COMPILE_ET} -p ${srcdir} volerr -h volser
+volser.h: volerr.c
 
 volint.cs.c: volint.xg
        ${RXGEN} -A -x -C -o $@ ${srcdir}/volint.xg