I was beating my head on the wall yesterday trying to figure out why an intlist test was failing on a freshly updated source tree. (I rarely use 'make clean', because that's almost always just covering up dependency problems.) I'll leave out the gory details, but the problem boiled down to parrot/intlist.o and parrot/classes/intlist.o being treated as identical by ar. Upon further reading, it appears that for portability, we can only depend on the basename of ar entries.
So, what's the best approach to avoid this? For this particular case, it's easy enough to just rename one or the other. (Or maybe all of intlist.c should be inserted into intlist.pmc.) But generally, should we have pmc in the name of all PMCs? Or should we make a separate library for PMCs and any other major component? Is there some standard trick I don't know about? Should we rebuild the archive from scratch every time instead of replacing? (Would that be sufficient, or just conceal the problem?)