We've had a few commits over the years to help parallel builds along by splitting rules with two targets into two separate rules, one a pure dependency and the other with the actual contents of the rule (usually compile_et).

A typical example is 147aeeb6c59b5f4a9f8a795a91e0c42ecf80278c (gerrit/257) (trimmed):
-budb_errs.c budb_client.h: budb_errs.et budb_client.p.h
+budb_client.h: budb_errs.c
+
+budb_errs.c: budb_errs.et budb_client.p.h
        $(RM) -f budb_client.h budb_errs.c; ${COMPILE_ET} -p ${srcdir} 
budb_errs -h budb_client

However, these changes seem to cause problems for FreeBSD make, even for serial builds. The build log shows a failure to install budb_client.h , No such file or directory, but then continues on to compile linktest before bailing out (sorry for the poorly wrapped copy/paste):

install -o root -g wheel -m 444 JUAFS/libjuafs.a /usr/ports/net/openafs/work/openafs-1.6.2/lib/libjuafs.a install -o root -g wheel -m 444 UAFS/libuafs.a /usr/ports/net/openafs/work/openafs-1.6.2/lib/libuafs.a case amd64_fbsd_91 in alpha_dux*|sgi_*|sun4x_*|sunx86_*|rs_aix*|*linux*|hp_ux11*|ia64_hpux*|*_darwin_1*|*nbsd*|*obsd*|*fbsd*) cd src && cd shlibafsauthent && make all ;; *) echo Not building shared libafsauthent for amd64_fbsd_91 ;; esac install -o root -g wheel -m 444 budb_client.h /usr/ports/net/openafs/work/openafs-1.6.2/include/afs/budb_client.h
install: budb_client.h: No such file or directory
*** [/usr/ports/net/openafs/work/openafs-1.6.2/include/afs/budb_client.h] Error code 71 cc -g -O -I/usr/ports/net/openafs/work/openafs-1.6.2/src/config -I/usr/ports/net/openafs/work/openafs-1.6.2/include -I. -I. -O2 -pipe -fPIC -c budb_errs.c [ yes != "" ] || case amd64_fbsd_91 in alpha_dux*|sgi_*|sun*_5*|rs_aix*|*linux*|hp_ux11*|ia64_hpux*|*[nof]bsd*) cd src && cd tptserver && make all ;; *_darwin_[1-6][0-9]) echo Not building MT ptserver for amd64_fbsd_91 ;; *_darwin_*) cd src && cd tptserver && make all ;; *) echo Not building MT ptserver for amd64_fbsd_91 ;; esac



The make debugging output is not immediately enlightening, but provides some hints.

budb_server (???) depends on ${TOP_INCDIR}/afs/budb_client.h depends on budb_client.h depends on budb_errs.c depends on budb_errs.et. Yet budb_errs.c has been generated from the rule for budb_errs.h (${COMPILE_ET} -p ${srcdir} budb_errs) and is up-to-date, so make's internal bookkeeping sees the empty rule to make budb_client.h from budb_errs.c, claims succes (I don't see this in the debugging log, though?!) and tries to install the header.

The problem seems to stem from there being two calls to compile_et using budb_errs.et, one of which makes budb_errs.h and the other which makes budb_client.h. Swapping the order in which the multiple targets are split out, so that budb_errs.c depends on budb_client.h which is made via compile_et, lets my build finish here, but it's probably not the best solution.

Is there reason to not make a budb_client.h that is the contents of budb_client.p.h with #include <budb_errs.h> added? Alternately we could process the template manually with the shell.

[tbudb has the same issue]

-Ben
_______________________________________________
OpenAFS-devel mailing list
OpenAFS-devel@openafs.org
https://lists.openafs.org/mailman/listinfo/openafs-devel

Reply via email to