cd ..
@echo Making clean in gssapi
-$(BUILDTOP)/include/gssapi/gssapi.h: generic/gssapi.h
- (cd generic && $(MAKE) gssapi-include)
-generic/gssapi.h: generic/gssapi.hin
- (cd generic && $(MAKE) gssapi.h)
-generic/gssapi_err_generic.h: generic/gssapi_err_generic.et
- (cd generic && $(MAKE) gssapi_err_generic.h)
-krb5/gssapi_err_krb5.h: krb5/gssapi_err_krb5.et
- (cd krb5 && $(MAKE) gssapi_err_krb5.h)
+# These rules are an attempt to handle several different problems:
+#
+# Certain files in subdirectories must be made current by the
+# recursion step before we can build files in this directory that
+# depend on them. Existing but out-of-date versions must not be used.
+#
+# In a parallel make, nothing should be built more than once. This
+# effect can be exaggerated for testing by sticking "sleep 5" into the
+# rules for generating the files in subdirectories. For example, in
+# between testing for a directory and creating it -- do you then get
+# mkdir complaining that the directory exists? Adding the sleep
+# command may also exaggerate the build-with-outdated-headers problem,
+# by causing the timestamp on the newly generated header to be several
+# seconds newer than object files built with its old version, even on
+# fast machines where the UNIX filesystem's one-second granularity
+# would mask the problem.
+#
+# We must not cause these files to always be considered newly updated
+# when it comes time to build the object files in this directory.
+# Otherwise, we wind up recompiling some files every time we run make.
+
+# This set of rules fails the parallel make case; it can build
+# gssapi-include and all-recurse at the same time, and both will
+# create include/gssapi and gssapi.h.
+#$(BUILDTOP)/include/gssapi/gssapi.h: generic/gssapi.h
+# (cd generic && $(MAKE) gssapi-include)
+#generic/gssapi.h: generic/gssapi.hin
+# (cd generic && $(MAKE) gssapi.h)
+#generic/gssapi_err_generic.h: generic/gssapi_err_generic.et
+# (cd generic && $(MAKE) gssapi_err_generic.h)
+#krb5/gssapi_err_krb5.h: krb5/gssapi_err_krb5.et
+# (cd krb5 && $(MAKE) gssapi_err_krb5.h)
+
+# This version, without the no-op command to run, reportedly caused
+# repeated rebuilds in certain cases. With the no-op command, it
+# appears to be properly serializing the subdir processing and local
+# compiles... so far.
+$(BUILDTOP)/include/gssapi/gssapi.h generic/gssapi.h krb5/gssapi_err_krb5.h generic/gssapi_err_generic.h: all-recurse
+ : $@ updated by recursion rule
# @lib_frag@
# @libobj_frag@