[vox-tech] Asking C compiler to test for #include file

Ken Bloom vox-tech@lists.lugod.org
Sun, 20 Jul 2003 10:23:08 -0700


--UugvWAfsgieZRqgk
Content-Type: text/plain; format=flowed; charset=ISO-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable


On 2003.07.20 08:23, Bill Kendrick wrote:
>=20
> Right now I have a program that will die if certain headers can't be
> found.
>=20
> 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!")
>=20
>=20
> I'd like, if possible, GCC to barf with my OWN error, stating
> something along these lines,
> rather than just:
>=20
>   src/myprog.c:15: foo.h: No such file or directory
>=20
>=20
> I realize I can spit out an error message using the C "#error"
> directive, but is there a simple
> (and portable) way of TESTING?
>=20
> e.g.:
>=20
>   #SOME_IF-LIKE_DIRECTIVE_I_DON'T_KNOW_ABOUT
>=20
>     #include "somelib.h"
>=20
>   #else
>=20
>     #error "Ya big dummy!  You need to install the 'somelib-dev'
> package!"
>=20
>   #endif
>=20
> 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=20
there's no predefined macro to test for the existance of a file, and I=20
know of no way to create one so that's out of the question. (See=20
"Conditional Syntax" in the cpp TeXinfo manual for more information)


I don't think the header guards (the #ifndef/#define/#endif that is=20
supposed to surround every header file) are necessarily portable, but=20
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=20
this becomes portable when you test for one of the documented macros=20
instead. This doesn't prevent #include from writing an error of its=20
own, but at least the user sees your error too.

--=20
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
--UugvWAfsgieZRqgk
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQA/Gs/8lHapveKyytERAmSZAJ0Yc5xdYyJP998R89uFd2Nx/zMvewCgpE5q
eoUuDaSXCkq5WnbyDrrBf8U=
=caBY
-----END PGP SIGNATURE-----

--UugvWAfsgieZRqgk--