On Sep-21, Gregor N. Purdy wrote: > Nick -- > > Looks like I'm the guilty party. I do tend to do this > every now and again, even though I don't consider myself > thoughtless or careless. > > I think sometimes I get focused on my local changes and > as I'm testing and committing it just isn't natural to > consider that a change in something that *depends on* > the rest of Parrot will cause a build failure of Parrot. > > It may be that I'm the only one that feels that way, but > perhaps not. A sure way to make the problem go away is > to make the building of these other pieces of code fail > when the problem exists. One way to accomplish that would > be to have the various languages have their own MANIFEST > files that are checked every time you do a 'make' there. > > That way, if I have a clean checkout of the entirety of > Parrot, and it builds fine, and then I go off and make > a change to Jako, I'll get the complaint right then and > there instead of having to remember to go back and build/test > Parrot again (which hasn't been changed after all).
Given the number of times the same failure has been triggered by other people, I would say that you are definitely not the only one. I know I've done it a few times. I don't really like splitting up the MANIFEST, though -- that changes what it means and reduces its ability to be plugged into existing tools. I propose instead that we should make it easy to write local manifest checks. Then all non-root makefiles could add a local-manicheck target to their 'test' target that would check only the portions of the manifest that are within the relevant subdirectory. Except that parts of a local area may be outside that directory, eg config/gen/makefiles/jako.in is really part of the Jako project. But that's easy to fix -- just don't bother to filter out the rest of the system in your local-manicheck target. Since the MANIFEST should be up-to-date during checkin at all times, this should catch exactly the same set of errors, and the check is fast enough to not be a burden. So we just need to come up with a good canonical way of calling the root-level t/src/manifest.t from subdirectories. We probably ought to implement it as a parrot/lib/ module.