[Haskell-cafe] Haskellers hate GUIs!!

Thomas Schilling nominolo at googlemail.com
Fri Apr 2 08:37:32 EDT 2010


Haskeller's certainly aren't GUI-haters!  It's just difficult in
general to write cross-platform GUIs.  The goal *is* to put gtk2hs
into the platform, but in order to do that, it needs to be buildable
using Cabal.  The limiting factor is time, not motivation.

2010/4/2 Jürgen Nicklisch-Franken <jnf at arcor.de>:
> I am in the damned position to have tried to develop a GUI app in
> Haskell. I'm building on top of gtk2hs, now we have a new compiler
> version a new Platform release and no gtk2hs release, so
> I cite from a mail from a potential user/contributor for my GUI app.
> What shall I say, how should he install gtk2hs? Is their a way to get a
> stable version from a changing darcs repo?
> If not all Haskellers were such GUI haters, we would have GUI libs with
> the platform.
>
> Jürgen
>
>        "
>        ...
>        Each gtk2hs package (like glib-0.10.1) installed in that
>        non-standard
>        location by Ubuntu apt-get does at least have a package.conf
>        file, like
>        glib.package.conf. However, on inspection, the "id" fields are
>        missing,
>        and the "depends" fields look more like .cabal file "depends"
>        fields (no
>        ABI ID).
>
>        I tried an experiment on my glib.package.conf, used "ghc
>        --abi-hash" to
>        generate an ID, so eventually creating a new line something like
>
>        id: glib-0.10.1-d41d8cd98f00b204e9800998ecf8427e
>
>        and then set up the "depends" properly by getting the real
>        dependencies
>        using "ghc-pkg -v list".
>
>        After doing this then
>
>        ghc-pkg register glib.package.conf
>
>        worked just fine, and I see it in my global DB. It's cool that
>        this
>        works but it seems highly roundabout. :-)
>
>
>        Building gtk2hs from source is broken. Not sure why - I did it
>        OK with
>        ghc-6.10.3. I can run ./configure no problem with
>
>        ./configure --with-hcflags=-O0 --disable-split-objs
>        --with-ghc=/usr/local/lib/ghc-6.12.1
>
>        and it claims that it will build:
>
>        * The following packages will be built:
>        *
>        * glib           : yes
>        * gtk            : yes
>        * gio            : yes
>        * glade          : yes
>        * cairo          : yes
>        * svgcairo       : yes
>        * gtkglext       : no
>        * gconf          : yes
>        * sourceview     : no
>        * gtksourceview2 : yes
>        * mozembed       : no
>        * soegtk         : yes
>        * gnomevfs       : no
>        * gstreamer      : yes
>        * documentation  : no
>
>        But "make" fails horribly...can't find any packages like "base"
>        that
>        configure had no problems finding, so I have no idea what the
>        problem is
>        there. Which is why I'd rather figure out a way to make
>        ghc-6.12.1
>        recognize the gtk2hs packages that I have in that non-standard
>        location.
>
>        It works but it's awkward. :-)
>
>        Each gtk2hs package (like glib-0.10.1) installed in that
>        non-standard
>        location by Ubuntu apt-get does at least have a package.conf
>        file, like
>        glib.package.conf. However, on inspection, the "id" fields are
>        missing,
>        and the "depends" fields look more like .cabal file "depends"
>        fields (no
>        ABI ID).
>
>        I tried an experiment on my glib.package.conf, used "ghc
>        --abi-hash" to
>        generate an ID, so eventually creating a new line something like
>
>        id: glib-0.10.1-d41d8cd98f00b204e9800998ecf8427e
>
>        and then set up the "depends" properly by getting the real
>        dependencies
>        using "ghc-pkg -v list".
>
>        After doing this then
>
>        ghc-pkg register glib.package.conf
>
>        worked just fine, and I see it in my global DB. It's cool that
>        this
>        works but it seems highly roundabout. :-)
>
>        I think I'll pack it in for the evening. The procedure I
>        described works
>        well in theory, but apparently if the "depends" field in the
>        "package
>        conf" files says something like foo-2.0.1.0, it's not OK to use
>        an
>        existing registered "foo" that has a higher version number...I
>        registered everything in gtk2hs manually but when building ltk
>        it
>        complains with
>
>        Bad interface
>        file: /usr/lib/haskell-packages/ghc6/lib/gtk-0.10.1/imports/Graphics/UI/Gtk.hi
>                mismatched interface file versions (wanted "6121", got
>        "")
>
>        Unfortunately when using these package configuration files one
>        has to
>        use the ABI ID - "ghc-pkg register" won't work otherwise - so
>        it's very
>        finicky.
>
>        I'll have to un-register all my gtk2hs packages, and start again
>        from
>        scratch.
>
>        Anyway, back to Ubuntu, Haskell and Leksah. :-)
>
>        I am removing vestiges of ghc-6.10.3 off my Ubuntu system as I
>        encounter
>        them, although I have no reason to believe that the presence of
>        directories and files for that old version are causing me any
>        harm. I am
>        keeping ghc-6.10.4 around, in parallel with ghc-6.12.1.
>
>        In any case, to the degree that I have exercised it, ghc-6.12.1
>        is
>        apparently OK. I have done some "cabal install"s on a few
>        executables
>        and libraries, both into user and global, and things seem OK as
>        evidenced by "ghc-pkg list".
>
>        Now, to gtk2hs and ltk and Leksah. After having initial problems
>        with
>        building gtk2hs from source, for reasons I don't want to spend
>        time
>        investigating (yet), I am returning to the apt package approach,
>        command-line this time instead of through the Synaptic GUI.
>        Running
>
>            sudo apt-get install libghc6-gtk-dev
>
>        partially returns
>
>        ---------------
>        Selecting previously deselected package libghc6-glib-dev.
>        (Reading database ... 257458 files and directories currently
>        installed.)
>        Unpacking libghc6-glib-dev
>        (from .../libghc6-glib-dev_0.10.1-1ubuntu2_i386.deb) ...
>        Selecting previously deselected package libghc6-cairo-dev.
>        Unpacking libghc6-cairo-dev
>        (from .../libghc6-cairo-dev_0.10.1-1ubuntu2_i386.deb) ...
>        Selecting previously deselected package libghc6-gtk-dev.
>        Unpacking libghc6-gtk-dev
>        (from .../libghc6-gtk-dev_0.10.1-1ubuntu2_i386.deb) ...
>        Setting up libghc6-glib-dev (0.10.1-1ubuntu2) ...
>        Reading package info from
>        "/usr/lib/haskell-packages/ghc6/lib/glib-0.10.1/glib.package.conf" ...
>        done.
>        Writing new package config file... done.
>
>        Setting up libghc6-cairo-dev (0.10.1-1ubuntu2) ...
>        Reading package info from
>        "/usr/lib/haskell-packages/ghc6/lib/cairo-0.10.1/cairo.package.conf" ...
>        done.
>        Writing new package config file... done.
>
>        Setting up libghc6-gtk-dev (0.10.1-1ubuntu2) ...
>        Reading package info from
>        "/usr/lib/haskell-packages/ghc6/lib/gtk-0.10.1/gtk.package.conf" ...
>        done.
>        Writing new package config file... done.
>        ---------------
>
>        You'll see the files I was talking about, the *.package.conf
>        files. I've
>        attached the one for cairo, so you can also see what I was
>        talking
>        about: these files are real close to the *.conf files in the
>        user and
>        global package.conf.d databases, but they are missing the "id"
>        field,
>        and the "depends" field entries are like
>
>        base-4.1.0.0
>
>        as opposed to a full
>
>        base-3.0.3.2-52acef427378232ec569bca0486ee48f
>
>        In other words, as is, "ghc-pkg register" can't use these files.
>        Which
>        is why I manually edited them.
>
>        I still see no reason why my manual approach will not work
>        (although
>        figuring out how to build from source would be even better), but
>        I'll
>        have to keep the exact versions specified in these
>        *.package.conf files.
>
>        Much obliged for the tip about using darcs for the gtk2hs build.
>        Worked
>        like a charm. Combined with that, and doing occasional "cabal
>        install"'s
>        along the way, I have ltk and haddock-leksah-6.12 now built.
>
>        I don't consider the 5 or 6 hours I spent on all this (which
>        includes
>        building ghc-6.12.1 from source) to be wasted; I learned a lot
>        more
>        about GHC package management.
>
>        Bit of a snag now with leksah-server (the version in
>        leksah-server.cabal
>        is 0.8.0.5). I've included the console output of the build.
>
>        Looking at that very first problem:
>
>        /home/arved/.cabal/lib/ltk-0.8/ghc-6.12.1/libHSltk-0.8.a(Parameters.o):
>        In function `s9Ao_info':
>        (.text+0x28b9): undefined reference to
>        `gtkzm0zi10zi1_GraphicsziUIziGtkziGeneralziEnums_zdfShowShadowType_closure'
>
>        I can sort of parse this. I see code concerning ShadowType in
>        ltk/Graphics.UI.Editor.Parameters.hs, and I can see that a
>        complaint is
>        being made about something related to ShadowType not being found
>        (I
>        believe) in gtk/Graphics.UI.Gtk.General.Enums.
>
>        With the
>
>        {--        #if MIN_VERSION_gtk(0,9,13)
>                    -- now defined in gtk
>                #else
>                instance Show ShadowType
>                    where show _    =   "Any Shadow"
>                #endif
>        --}
>
>        in Parameters.hs, and seeing as how gtk is 0.10.1, I would
>        expect us to
>        be using gtk code to provide that Show instance for ShadowType,
>        no?
>
>        Any ideas?
>        ...
>        "
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>



-- 
Push the envelope.  Watch it bend.


More information about the Haskell-Cafe mailing list