|
search path wierdness: msg#00015lang.haskell.glasgow.bugs
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> |
|---|---|---|
| Previous by Date: | [ ghc-Bugs-1097471 ] amd64: adjustor creation not supported, SourceForge.net |
|---|---|
| Next by Date: | Re: search path wierdness, Duncan Coutts |
| Previous by Thread: | [ ghc-Bugs-1097471 ] amd64: adjustor creation not supported, SourceForge.net |
| Next by Thread: | Re: search path wierdness, Duncan Coutts |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |