Subject: 23.1.95; gcc: unrecognized option '-2.0/'
From: Sven Joachim <[email-masked]>
To: [email-masked]
Date: Wed, 07 Apr 2010 23:28:54 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

I noticed strange gcc warnings like this for files in the src/ directory
in both emacs-23 and the trunk:

,----
| make[1]: Entering directory `/usr/local/src/emacs-git/src'
| gcc -c -D_BSD_SOURCE   -Demacs -DHAVE_CONFIG_H  -I. -I/usr/local/src/emacs-git/src -D_BSD_SOURCE -D_REENTRANT -pthread -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/gio-1 -2.0/ -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/directfb -I/usr/include/libpng12 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/alsa -pthread -D_REENTRANT -I/usr/include/librsvg-2 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/gtk-2.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/directfb -I/usr/include/libpng12 -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include  -g -O2 -Wdeclaration-after-statement -Wno-pointer-sign   -I/usr/include/freetype2 -MMD -MF deps/pre-crt0.d pre-crt0.c
| gcc: unrecognized option '-2.0/'
`----
 
These rather baffling messages happen because src/Makefile contains this
line:

,----
| ALL_CFLAGS=-Demacs -DHAVE_CONFIG_H $(MYCPPFLAGS) -I. -I${srcdir} -D_BSD_SOURCE -D_REENTRANT -pthread -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/gio-1 -2.0/ -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/directfb -I/usr/include/libpng12 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 ${CFLAGS_SOUND} ${RSVG_CFLAGS} ${DBUS_CFLAGS} ${GCONF_CFLAGS} ${CFLAGS} -I/usr/include/freetype2 ${DEPFLAGS}
`----

Note the "-I/usr/include/gio-1 -2.0/" part with the space in it.  Now
the interesting question is where that comes from, grepping shows that
src/Makefile is the only file in the Emacs tree to contain a "gio-1"
string.  The following directories in /usr/include have a "gio" in in
their name:

,----
| % ls /usr/include | grep gio
| gio-unix-2.0
| giomm-2.4
`----

There is a pkgconfig file corresponding to the /usr/include/gio-unix-2.0
directory:

,----
| % cat /usr/lib/pkgconfig/gio-unix-2.0.pc
| prefix=/usr
| exec_prefix=${prefix}
| libdir=${exec_prefix}/lib
| includedir=${prefix}/include
| 
| Name: GIO unix specific APIs
| Description: unix specific headers for glib I/O library
| Version: 2.24.0
| Requires: gobject-2.0,gmodule-no-export-2.0,gio-2.0
| Libs: -L${libdir} -lgio-2.0
| Cflags: -I${includedir}/gio-unix-2.0/
`----

My preliminary conclusion is that the 'configure' script, in the
subshell following the "echo creating src/Makefile" line, does something
like 's/unix/1 /' with sed to create the "-I/usr/include/gio-1 -2.0/"
part of ALL_CFLAGS.

Note that I had upgraded glib to version 2.24.0 recently, with 2.22.4
this problem did not show up.