logo       

search path wierdness: msg#00015

lang.haskell.glasgow.bugs

Subject: search path wierdness

Hi,

For the gtk2hs project we have the following directory layout:

glib/System/Glib/*
gtk/Graphics/UI/Gtk/Abstract/*
gtk/Graphics/UI/Gtk/General/*
gtk/Graphics/UI/Gtk/ etc...

Our build uses single invocations of ghc, ie not using --make

We build from the root and use -igtk:glib so that all modules can find
their imports (gtk modules import some glib modules).

However when building some files, eg
gtk/Graphics/UI/Gtk/Abstract/Object.hs
ghc does not look in the right places for .hi files.

Using -v:
ghc -v -c gtk/Graphics/UI/Gtk/Abstract/Object.hs -o
gtk/Graphics/UI/Gtk/Abstract/Object.o -H180m -fglasgow-exts -iglib:gtk
-package-name gtk '-#include<gtk/gtk.h>' -I/usr/include/glib-2.0
-I/usr/lib/glib-2.0/include -DXTHREADS -D_REENTRANT -DXUSE_MTSAFE_API
-I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/X11R6/include
-I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/include/atk-1.0

(..snip..)
gtk/Graphics/UI/Gtk/Abstract/Object.chs:116:
Could not find interface file for `Signal'
locations searched:
Signal.hi
Signal.hi-boot-6
Signal.hi-boot
glib/Signal.hi
glib/Signal.hi-boot-6
glib/Signal.hi-boot
gtk/Signal.hi
gtk/Signal.hi-boot-6
gtk/Signal.hi-boot
/usr/lib/ghc-6.2.2/imports/HaXml/Signal.hi
/usr/lib/ghc-6.2.2/hslibs-imports/data/Signal.hi
/usr/lib/ghc-6.2.2/hslibs-imports/util/Signal.hi
/usr/lib/ghc-6.2.2/hslibs-imports/posix/Signal.hi
/usr/lib/ghc-6.2.2/hslibs-imports/concurrent/Signal.hi
/usr/lib/ghc-6.2.2/hslibs-imports/lang/Signal.hi
/usr/lib/ghc-6.2.2/imports/Signal.hi

We can see that ghc is looking for $PATH/Signal.hi where as it should be
looking for $PATH/Graphics/UI/Gtk/General/Signals.hi since Object.hs
imports Graphics.UI.Gtk.General.Signals

Now if we change the -i search path then ghc reverts to the right
behaviour of looking for hierarchical modules but of course cannot find
them since we have not supplied a complete search path:

Using no -i flag:
ghc -v -c gtk/Graphics/UI/Gtk/Abstract/Object.hs -o
gtk/Graphics/UI/Gtk/Abstract/Object.o -H180m -fglasgow-exts
-package-name gtk '-#include<gtk/gtk.h>' -I/usr/include/glib-2.0
-I/usr/lib/glib-2.0/include -DXTHREADS -D_REENTRANT -DXUSE_MTSAFE_API
-I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/X11R6/include
-I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/include/atk-1.0

gtk/Graphics/UI/Gtk/Abstract/Object.chs:116:
Failed to load interface for `Graphics.UI.Gtk.General.Signals':
Could not find interface file for `Graphics.UI.Gtk.General.Signals'
locations searched:
Graphics/UI/Gtk/General/Signals.hi
Graphics/UI/Gtk/General/Signals.hi-boot-6
Graphics/UI/Gtk/General/Signals.hi-boot
/usr/lib/ghc-6.2.2/imports/HaXml/Graphics/UI/Gtk/General/Signals.hi

/usr/lib/ghc-6.2.2/hslibs-imports/data/Graphics/UI/Gtk/General/Signals.hi

/usr/lib/ghc-6.2.2/hslibs-imports/util/Graphics/UI/Gtk/General/Signals.hi

/usr/lib/ghc-6.2.2/hslibs-imports/posix/Graphics/UI/Gtk/General/Signals.hi

/usr/lib/ghc-6.2.2/hslibs-imports/concurrent/Graphics/UI/Gtk/General/Signals.hi

/usr/lib/ghc-6.2.2/hslibs-imports/lang/Graphics/UI/Gtk/General/Signals.hi
/usr/lib/ghc-6.2.2/imports/Graphics/UI/Gtk/General/Signals.hi

Indeed we can use -iglib:

ghc -v -c gtk/Graphics/UI/Gtk/Abstract/Object.hs -o
gtk/Graphics/UI/Gtk/Abstract/Object.o -H180m -fglasgow-exts -iglib
-package-name gtk '-#include<gtk/gtk.h>' -I/usr/include/glib-2.0
-I/usr/lib/glib-2.0/include -DXTHREADS -D_REENTRANT -DXUSE_MTSAFE_API
-I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/X11R6/include
-I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/include/atk-1.0

gtk/Graphics/UI/Gtk/Abstract/Object.chs:116:
Failed to load interface for `Graphics.UI.Gtk.General.Signals':
Could not find interface file for `Graphics.UI.Gtk.General.Signals'
locations searched:
Graphics/UI/Gtk/General/Signals.hi
Graphics/UI/Gtk/General/Signals.hi-boot-6
Graphics/UI/Gtk/General/Signals.hi-boot
glib/Graphics/UI/Gtk/General/Signals.hi
glib/Graphics/UI/Gtk/General/Signals.hi-boot-6
glib/Graphics/UI/Gtk/General/Signals.hi-boot
/usr/lib/ghc-6.2.2/imports/HaXml/Graphics/UI/Gtk/General/Signals.hi

/usr/lib/ghc-6.2.2/hslibs-imports/data/Graphics/UI/Gtk/General/Signals.hi

/usr/lib/ghc-6.2.2/hslibs-imports/util/Graphics/UI/Gtk/General/Signals.hi

/usr/lib/ghc-6.2.2/hslibs-imports/posix/Graphics/UI/Gtk/General/Signals.hi

/usr/lib/ghc-6.2.2/hslibs-imports/concurrent/Graphics/UI/Gtk/General/Signals.hi

/usr/lib/ghc-6.2.2/hslibs-imports/lang/Graphics/UI/Gtk/General/Signals.hi
/usr/lib/ghc-6.2.2/imports/Graphics/UI/Gtk/General/Signals.hi

But if we use -iglib:gtk ghc switches to the odd behaviour of ignoring the
module prefix.

-igtk on it's own works ok (it uses hierarchical names looks in the
right places but of course cannot find any of the glib imports).

Adding extra dummy search paths makes no difference, they are searched
appropriately but as soon as both glib and gtk are on the search path,
ghc switches to it's odd "forget all about hierarchical names" mode.

Adding gtk/Graphics/UI/Gtk/General to give
-iglib:gtk:gtk/Graphics/UI/Gtk/General makes ghc switch back to the
correct mode, ie it looks for
gtk/Graphics/UI/Gtk/General/Graphics/UI/Gtk/General/Signals.hi
as well as
gtk/Graphics/UI/Gtk/General/Signals.hi

Adding just gtk/Graphics/UI/Gtk does not make ghc switch to the right
mode, it has to be the full path.

What on earth is going on?! :-)

I'm using ghc version 6.2.2 on Gentoo Linux.

Duncan


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise