We can't really use traditional include guards, because the header file may be piped to stdout (which means we might not have a file name).