l i n u x - u s e r s - g r o u p - o f - d a v i s
L U G O D
 
Next Meeting:
December 2: Social gathering
Next Installfest:
TBD
Latest News:
Nov. 18: Club officer elections
Page last updated:
2003 Jul 20 11:43

The following is an archive of a post made to our 'vox-tech mailing list' by one of its subscribers.

Report this post as spam:

(Enter your email address)
Re: [vox-tech] Asking C compiler to test for #include file
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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



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

Attachment: pgp00006.pgp
Description: PGP signature



LinkedIn
LUGOD Group on LinkedIn
Sign up for LUGOD event announcements
Your email address:
facebook
LUGOD Group on Facebook
'Like' LUGOD on Facebook:

Hosting provided by:
Sunset Systems
Sunset Systems offers preconfigured Linux systems, remote system administration and custom software development.

LUGOD: Linux Users' Group of Davis
PO Box 2082, Davis, CA 95617
Contact Us

LUGOD is a 501(c)7 non-profit organization
based in Davis, California
and serving the Sacramento area.
"Linux" is a trademark of Linus Torvalds.

Sponsored in part by:
EDGE Tech Corp.
For donating some give-aways for our meetings.