[Python-Dev] To -I(nclude) or not to -I(nclude), that is the
question...
M.-A. Lemburg
mal@lemburg.com
Sat, 19 Oct 2002 12:18:43 +0200
Skip Montanaro wrote:
> In installing mxBase 2.0.4 on my MacOS 10.2.1 system I get warnings like the
> following:
>
> gcc -DNDEBUG -g -O3 -Wall -Wstrict-prototypes -Wno-long-double -no-cpp-precomp -Imx/Queue/mxQueue -I/Users/skip/local/include/python2.3 -I/usr/include -I/usr/local/include -c mx/Queue/mxQueue/mxQueue.c -o build/temp.darwin-6.1-Power Macintosh-2.3/mx/Queue/mxQueue/mxQueue/mxQueue.o
> cc1: warning: changing search order for system directory "/usr/local/include"
> cc1: warning: as it has already been specified as a non-system directory
> cc1: warning: changing search order for system directory "/usr/include"
> cc1: warning: as it has already been specified as a non-system directory
>
> This warning bothers me a bit, as it suggests I'm screwing up the compiler's
> notions about header file search order. Has anyone else seen this and
> investigated how to get rid of this problem?
I've had a few bug reports related to this, but all of them
were from Solaris users. The -I/usr/include causes the GCC compiler
to pick up a system stdarg.h header file which causes a compile
error (GCC ships with its own stdarg.h files).
The report for MacOS is new, though. Perhaps this is a generic GCC problem ?
(#include <stdarg.h> should look in the compiler dirs first and only
then scan the additional -I paths)
> This is related to bug
> http://python.org/sf/589427 (which was assigned to me). It's due to the
> gen_preprocess_options() function in distutils/ccompiler.py. This warning
> seems to be related to gcc version >= 3.1.
>
> I have a quick hack in my local copy of distutils/ccompiler.py. At the
> bottom of gen_preprocess_options() I replaced
>
> for dir in include_dirs:
> pp_opts.append ("-I%s" % dir)
>
> with
>
> pp_opts.extend (gen_preprocess_includes(include_dirs))
>
> and added these two functions to the file:
>
> def gen_preprocess_includes_macosx_gcc(dirs):
> """GCC on MacOSX complains if /usr/include or /usr/local/include are
> mentioned in -I.
> """
> pp_opts = []
> for dir in dirs:
> if dir not in ("/usr/include", "/usr/local/include"):
> pp_opts.append ("-I%s" % dir)
> return pp_opts
>
> def gen_preprocess_includes(dirs):
> """Generate the -I flags for a compile command."""
> if sys.platform == "darwin":
> return gen_preprocess_includes_macosx_gcc(dirs)
>
> pp_opts = []
> for dir in dirs:
> pp_opts.append ("-I%s" % dir)
> return pp_opts
>
> This is an obscure solution, at best. I'd prefer to at least test the
> compiler and version. How can I tell what compiler and version will be used
> to compile files, or can't I can this level? (Seems to me that
> gen_preprocess_options begs to be a method of the CCompiler class.)
>
> Thx,
>
> Skip
>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev@python.org
> http://mail.python.org/mailman/listinfo/python-dev
--
Marc-Andre Lemburg
CEO eGenix.com Software GmbH
_______________________________________________________________________
eGenix.com -- Makers of the Python mx Extensions: mxDateTime,mxODBC,...
Python Consulting: http://www.egenix.com/
Python Software: http://www.egenix.com/files/python/