I've spotted 3 issues, two related and one unrelated. First, ml/mkfile and send/mkfile have a recipe rebuilding only rfc822.tab.$O despite the targets being both ../smtp/rfc822.tab.h and ../smtp/rfc822.tab.$O If ../smtp/rfc822.tab.$O already exists, then ../smtp/rfc822.tab.h doesn't get rebuilt. Second, the CLEANFILES=*.tab.? didn't actually cause *.tab.? to be deleted, despite mk's output clearly stating: rm -f *.[05678qv] *.a[05678qv] y.tab.? lex.yy.c y.debug y.output [05678qv].??* smtpd smtp *.tab.? I think this has to do with CLEANFILES being a variable, and the metacharacters were effectively quoted. Since smtp/rfc822.tab.$O didn't get deleted, and the recipe only specifies 'mk smtp/rfc822.tab.$O', smtp/rfc822.tab.h wouldn't rebuild. Neat interaction! Fixing the rule and the CLEANFILES variable will work. Unrelated, since I put <../mkupas at the top, the libcommon rule was being the default target. Instead, it should be the all rule. Moving the include after the mkmany or mkone include will work. The attached patch should fix all of this. Thanks, Amavect