On 2003.07.20 08:23, Bill Kendrick wrote:
Right now I have a program that will die if certain headers can't be found.
The issue of getting these headers has practically become an FAQ for the libraries installed. ("You forgot to download the *-dev packages of the library, which contains the headers!")
I'd like, if possible, GCC to barf with my OWN error, stating something along these lines, rather than just:
src/myprog.c:15: foo.h: No such file or directory
I realize I can spit out an error message using the C "#error" directive, but is there a simple (and portable) way of TESTING?
e.g.:
#SOME_IF-LIKE_DIRECTIVE_I_DON'T_KNOW_ABOUT
#include "somelib.h"
#else
#error "Ya big dummy! You need to install the 'somelib-dev' package!"
#endif
Is there such a thing? I'm actually realtively unfamiliar with all of the C directives out there. I've stuck to the typical "#define", "#ifdef", "#include" trio. ;^)
Doing something with #if (a la #if defined(...)) seems tempting, but there's no predefined macro to test for the existance of a file, and I know of no way to create one so that's out of the question. (See "Conditional Syntax" in the cpp TeXinfo manual for more information)
I don't think the header guards (the #ifndef/#define/#endif that is supposed to surround every header file) are necessarily portable, but you could try somehting like this:
#include "somelib.h" #ifndef __SOMELIB_Hs_HEADER_GUARD__ #error "Ya big dummy!..." #endif
If "somelib.h" defines *documented* macros when it is defined, then this becomes portable when you test for one of the documented macros instead. This doesn't prevent #include from writing an error of its own, but at least the user sees your error too.
-- I usually have a GPG digital signature included as an attachment. If you don't know what it is, either ignore it or visit www.gnupg.org My PGP key was last signed 6/10/2003 please download my key again if it is more recent than your copy. If you use GPG, *please* talk to me to sign it. The key is keyID E2B2CAD1 on pgp.mit.edu
pgp00000.pgp
Description: PGP signature
