First Last Prev Next    No search results available      Search page      Enter new bug
Bug#: 69270
Alias:
Product:
Component:
Status: RESOLVED
Resolution: FIXED
Assigned To: Gentoo's Haskell Language team <haskell@gentoo.org>
Hardware:
OS:
Version:
Priority:
Severity:
Reporter: Andres Loeh (RETIRED) <kosmikus@gentoo.org>
Add CC:
CC:
Remove selected CCs
URL:
Summary:
Status Whiteboard:
Keywords:

Filename Description Type Creator Created Size Actions
haskell.eclass haskell.eclass text/plain Andres Loeh (RETIRED) 2004-10-28 07:38 0000 2.70 KB Details
c2hs-0.13.1-r1.ebuild c2hs-0.13.1-r1.ebuild text/plain Andres Loeh (RETIRED) 2004-10-28 07:40 0000 1.08 KB Details
WASH-2.0.5-r1.ebuild WASH-2.0.5-r1.ebuild text/plain Andres Loeh (RETIRED) 2004-10-28 07:41 0000 1.33 KB Details
wxhaskell-0.8-r1.ebuild wxhaskell-0.8-r1.ebuild text/plain Andres Loeh (RETIRED) 2004-10-28 07:42 0000 1.79 KB Details
buddha-1.2.ebuild buddha-1.2.ebuild text/plain Duncan Coutts (RETIRED) 2004-11-03 10:33 0000 960 bytes Details
gtk2hs-0.9.6-r1.ebuild gtk2hs-0.9.6-r1.ebuild text/plain Duncan Coutts (RETIRED) 2004-11-03 10:43 0000 3.08 KB Details
gtk2hs-0.9.6-r1.ebuild gtk2hs-0.9.6-r1.ebuild text/plain Duncan Coutts (RETIRED) 2004-11-03 18:13 0000 2.72 KB Details
c2hs-0.13.4.ebuild c2hs-0.13.4.ebuild text/plain Duncan Coutts (RETIRED) 2004-11-16 17:32 0000 915 bytes Details
buddha-1.2-r1.ebuild buddha-1.2-r1.ebuild text/plain Duncan Coutts (RETIRED) 2004-11-16 17:38 0000 1.08 KB Details
gtk2hs-0.9.6-r1.ebuild.patch gtk2hs-0.9.6-r1.ebuild.patch patch Duncan Coutts (RETIRED) 2004-11-21 16:13 0000 644 bytes Details | Diff
Create a New Attachment (proposed patch, testcase, etc.) View All

Bug 69270 depends on: Show dependency tree
Bug 69270 blocks:
Votes: 0    Show votes for this bug    Vote for this bug

Additional Comments: (this is where you put emerge --info)


Not eligible to see or edit group visibility for this bug.






View Bug Activity   |   Format For Printing   |   XML   |   Clone This Bug


Description:   Opened: 2004-10-28 07:36 0000
I have written an eclass for ebuilds that offer libraries for the GHC
(Glasgow Haskell Compiler).

The idea is that the eclass handles administration stuff such as

* detecting the library path
* registering packages with the ghc-pkg command
* unregistering packages upon uninstallation

Currently, I have rewritten a number of ebuilds to test the eclass, and
they seem to work fine:

* c2hs
* WASH
* wxhaskell

I have not yet rewritten gtk2hs, but I will try to do so.
With the eclass in place, all ebuild maintainers should try to get the
package to use a *local* package.conf file, which should be named
$(get-localpkgconf) and placed in ${S}.

If required, an empty local file can be generated in place by calling
ghc-setup-pkg.

During installation, the file will be moved to its final location by
calling ghc-install-pkg. That's it. All the rest is handled by the
eclass.

Please provide comments/feedback, and if possible, test.

I won't have much time before next Monday, but I will try to write an
email to gentoo-dev soon, asking for approval of the eclass.

Cheers,
  ks

------- Comment #1 From Andres Loeh (RETIRED) 2004-10-28 07:38:54 0000 -------
Created an attachment (id=42775) [edit]
haskell.eclass

Should probably be renamed to ghc-package.eclass, reserving haskell.eclass for
something of wider scope (like haskell-cabal support).

------- Comment #2 From Andres Loeh (RETIRED) 2004-10-28 07:40:35 0000 -------
Created an attachment (id=42777) [edit]
c2hs-0.13.1-r1.ebuild

(using the eclass)

------- Comment #3 From Andres Loeh (RETIRED) 2004-10-28 07:41:22 0000 -------
Created an attachment (id=42778) [edit]
WASH-2.0.5-r1.ebuild

(using the eclass)

------- Comment #4 From Andres Loeh (RETIRED) 2004-10-28 07:42:16 0000 -------
Created an attachment (id=42779) [edit]
wxhaskell-0.8-r1.ebuild

(using the eclass)

------- Comment #5 From Karl Trygve Kalleberg (RETIRED) 2004-11-02 16:33:17 0000 -------
Copyright header is wrong. It's 2004 and we're no longer Gentoo Technologies,
Inc:)

If the ghc-listpkg should ever return a package with spaces in its name, the
functions calling won't work, as they are currently implemented. Nasty
(ba)shism:(

------- Comment #6 From Duncan Coutts (RETIRED) 2004-11-03 05:30:16 0000 -------
I think ghc-register-pkg should be conditional on $(ghclocalpkg) existing. For
my buddha ebuild, it installs things in versioned dirs (ie it wants
$(ghc-libdir)) but does not register any packages (the buddha script calls ghc
specifying the buddha.pkg.conf file).

------- Comment #7 From Andres Loeh (RETIRED) 2004-11-03 05:43:04 0000 -------
re Karl's comments:

The copyright header was fixed already in my local version.
About spaces in package names: I think I'll worry about this
issue once someone decides to have such a package.

re Duncan's comment:

I agree, checking for the presence of the file is definitely
a good idea.

------- Comment #8 From Andres Loeh (RETIRED) 2004-11-03 07:08:26 0000 -------
I've just committed the eclass to CVS as ghc-package.eclass.

I will soon start adapting ebuilds to make use of it.

ks

------- Comment #9 From Duncan Coutts (RETIRED) 2004-11-03 10:33:37 0000 -------
Created an attachment (id=43232) [edit]
buddha-1.2.ebuild

new ebuild for buddha.
It gives an non-fatal error message during ghc-register-pkg because there is no
package to register.

------- Comment #10 From Duncan Coutts (RETIRED) 2004-11-03 10:37:18 0000 -------
Oops, that buddha-1.2.ebuild says Gentoo Technologies, Inc. rather than Gentoo
Foundation

------- Comment #11 From Duncan Coutts (RETIRED) 2004-11-03 10:43:04 0000 -------
Created an attachment (id=43234) [edit]
gtk2hs-0.9.6-r1.ebuild

updated version of gtk2hs-0.9.6.ebuild to use new ghc-package.eclass
also adds a 'doc' USE flag.
(Note my haddock segfaulted building the docs, I re-emerged it and it worked
fine - something we may have to watch for. It was haddock-0.8-r2.ebuild
compiled by ghc-6.2.1.ebuild)

------- Comment #12 From Andres Loeh (RETIRED) 2004-11-03 11:13:28 0000 -------
Ok, I've added buddha and made it the first package in the tree to use
ghc-package.eclass.

BTW, with the committed version of the eclass, no warning should occur.

Thanks,
  ks

------- Comment #13 From Duncan Coutts (RETIRED) 2004-11-03 12:07:24 0000 -------
I've got a problem with gtk2hs using the eclass: registering the package
generates the .o ghci files from the .a lib. However this happens after merging
the package so the .o file is orphaned.

We had better not do the ghc-pkg --auto-ghci-libs during package post install.
Perhaps we should provide a command to convert the .a to the .o in the right
way.

A more general issue is that perhaps it would be better, or as an alternative
to the $(ghc-localpkg) to provide a way to add given .conf files to the
packages to be registered. So some builds put their stuff into an 'installed'
package file, eg wash, while ones like c2hs, gtk2hs (and buddha if it
registered its package) produce 'uninstalled' .conf files. For c2hs you've we
just slap [] around the file and it is fine. For gtk2hs you can see I'm using
ghc-pkg to build an 'isntalled' package file. So perhaps a better way is for
the ebuild to specify  a list of .conf files which will get registered.

------- Comment #14 From Andres Loeh (RETIRED) 2004-11-03 12:46:33 0000 -------
Ok, I didn't think about it, but I agree that it's bad.
I therefore removed --auto-ghci-libs from the eclass, which
makes it the individual ebuilds responsibility to ensure that
the ghci libraries are present.

If you want to have a function in the eclass to assist, feel
free to submit a patch.

Regarding the other problem, I'm not sure I agree. I'm inclined
to say that a package is broken if it does not offer using a local
package config file. In the case of gtk2hs, you should probably
submit a patch upstream so that the ghc-pkg calls do not have
to occur within the ebuild.

I haven't looked at the .tar.gz, but possibly an alternative would
be to sed replace "ghc-pkg" to "ghc-pkg -f ${S}/$(ghc-localpkgconf)"
in the Makefiles, which would also remove the need for the manual
calls to ghc-pkg in the ebuild.

I do not want to make the eclass unnecessarily complicated, but if
you can convince me that the additional complexity is justified, we
can do it ...

ks

------- Comment #15 From Duncan Coutts (RETIRED) 2004-11-03 16:46:06 0000 -------
> Regarding the other problem, I'm not sure I agree. I'm inclined
> to say that a package is broken if it does not offer using a local
> package config file.

As it happens gtk2hs can use a local pkg file but I don't think it'll work for what we want because it contains a dummy package and build tree paths.

But I don't think it's unreasonable for a package to produce a collection of .conf files which it then registeres when you make install. gtk2hs has make install-without-pkg which is what I use. Instead of using ghc-pkg to add these to the $(ghc-localpkgconf) I could do what you do in the c2hs ebuild:

echo '[' > ${S}/$(ghc-localpkgconf)
cat ${D}/$(ghc-libdir)/gtk2hs/gtk2/gtk2.conf >> ${S}/$(ghc-localpkgconf)
echo ',' >> ${S}/$(ghc-localpkgconf)
cat ${D}/$(ghc-libdir)/gtk2hs/mogul/mogul.conf >> ${S}/$(ghc-localpkgconf)
etc...

Would that be better?

------- Comment #16 From Andres Loeh (RETIRED) 2004-11-03 16:57:27 0000 -------
First gtk2hs:
Ok, if there are incompatible paths in the package configuration file
upon use of a local file, I can see why it goes wrong.

Common situation:
The [ , , ... ] solution might be a simple way of having one configuration
file per package in the end (something I somehow would prefer, because it
makes it easier for possible external tools to analyze quickly from which
package a certain file stems). This could get eclass support, though.

Atm, there are the two functions

ghc-setup-pkg
ghc-install-pkg

The function ghc-setup-pkg does nothing but to create ${S}/$(ghc-localpkgconf)
with content []. If we'd make ghc-setup-pkg take an arbitrary number of
package configuration files as argument, with the idea that all of these are
uninstalled, singular package descriptions, ghc-setup-pkg could concatenate
them into ${S}/$(ghc-localpkgconf), separated by commas.

The relevant part of the gtk2hs ebuild would then become something like

ghc-setup-pkg /gtk2hs/gtk2/gtk2.conf /gtk2hs/mogul/mogul.conf ...

which is almost what you wanted originally, only with slightly different
semantics. Acceptable or bad idea?

Cheers,
ks

------- Comment #17 From Duncan Coutts (RETIRED) 2004-11-03 17:22:46 0000 -------
That sounds like a good idea. It allows both styles of build systems to work
without too much fuss.

I'm currently testing this function which could be added to the eclass:

# make a ghci foo.o file from a libfoo.a file
ghc-makeghcilib() {
    local outfile
    outfile=`echo $1 | sed 's:lib\(.*\)\.a$:\1.o:'`
    ld --relocatable --discard-all --output=$outfile $1
}

------- Comment #18 From Duncan Coutts (RETIRED) 2004-11-03 18:13:06 0000 -------
Created an attachment (id=43257) [edit]
gtk2hs-0.9.6-r1.ebuild

updated to not use ghc-pkg just for combining several .conf files into
$(ghc-localpkgconf). Also uses new eclass function (updated from previous
definition):

# make a ghci foo.o file from a libfoo.a file
ghc-makeghcilib() {
    local outfile
    outfile=`dirname $1`/`basename $1 | sed 's:^lib\(.*\)\.a$:\1.o:'`
    ld --relocatable --discard-all --output=$outfile $1
}

------- Comment #19 From Duncan Coutts (RETIRED) 2004-11-04 06:13:27 0000 -------
Last version honnestly! This is what it should be:

# make a ghci foo.o file from a libfoo.a file
ghc-makeghcilib() {
    local outfile
    outfile=`dirname $1`/`basename $1 | sed 's:^lib\(.*\)\.a$:\1.o:'`
    ld --relocatable --discard-all --output=$outfile --whole-archive $1
}

------- Comment #20 From Andres Loeh (RETIRED) 2004-11-04 07:00:04 0000 -------
I've committed a version of your gtk2hs ebuild using ghc-package.eclass.
Please test, because I've made a couple of modifications.

ks

------- Comment #21 From Duncan Coutts (RETIRED) 2004-11-04 09:47:52 0000 -------
All those changes look fine. I've tried it and it seems to install and register
 fine.

BTW why the extra \? in  sed 's:^lib\?\(.*\)\.a$:\1.o:'

One thing I forgot to change before attaching the ebuild here was to use
optimisations (I'd been testing without optimisations as it takes much longer
to build otherwise) so that just involves changing:
--with-hcflags="-H180m" \
to
--with-hcflags="-O -H180m" \
in the econf bit

------- Comment #22 From Andres Loeh (RETIRED) 2004-11-04 17:16:35 0000 -------
About the \? ... I'm not sure, I guess I wanted to make it more unlikely
that the function actually destroys the .a file if it doesn't conform to
the correct naming convention. Anyway, it should make no difference on
correct function calls.

I'll try to remember adding the -O tomorrow, tonight is HCAR time ...

ks

------- Comment #23 From David Morgan 2004-11-14 09:01:02 0000 -------
These all emerge ok and seem to work (though I've not done much testing),
except for gtk2hs.

Everytime I try to emerge gtk2hs, X ends up being killed, as far as I can tell
because I run out of RAM (this is on a machine with 256MB of ram, and 1GB of
swap, and only running fluxbox and an aterm). The offending program seems to be
c2hs (according to top), regardless of whether or not I have the c2hs package
emerged or not.

Is anyone else experiencing a lot of memory being used when compiling gtk2hs?

Here's my emerge info:

Portage 2.0.51-r3 (default-linux/x86/2004.2/gcc34/2.6, gcc-3.4.2,
glibc-2.3.4.20041102-r0, 2.6.9-rc2-mm1 i686)
=================================================================
System uname: 2.6.9-rc2-mm1 i686 Mobile Intel(R) Pentium(R) 4 - M CPU 1.80GHz
Gentoo Base System version 1.6.6
Autoconf: sys-devel/autoconf-2.59-r5
Automake: sys-devel/automake-1.8.5-r1
Binutils: sys-devel/binutils-2.15.92.0.2-r1
Headers:  sys-kernel/linux26-headers-2.6.8.1-r1
Libtools: sys-devel/libtool-1.5.2-r7
ACCEPT_KEYWORDS="x86 ~x86"
AUTOCLEAN="yes"
CFLAGS="-O2 -march=pentium4 -pipe"
CHOST="i686-pc-linux-gnu"
COMPILER=""
CONFIG_PROTECT="/etc /usr/X11R6/lib/X11/xkb /usr/kde/2/share/config
/usr/kde/3.3/env /usr/kde/3.3/share/config /usr/kde/3.3/shutdown
/usr/kde/3/share/config /usr/lib/mozilla/defaults/pref /usr/share/config
/usr/share/texmf/dvipdfm/config/ /usr/share/texmf/dvips/config/
/usr/share/texmf/tex/generic/config/ /usr/share/texmf/tex/platex/config/
/usr/share/texmf/xdvi/ /var/qmail/control"
CONFIG_PROTECT_MASK="/etc/gconf /etc/terminfo /etc/env.d"
CXXFLAGS="-O2 -march=pentium4 -pipe"
DISTDIR="/usr/portage/distfiles"
FEATURES="autoaddcvs ccache distlocks sandbox sfperms"
GENTOO_MIRRORS="http://194.117.158.28 http://194.117.158.29
ftp://194.117.158.28/mirrors/gentoo"
MAKEOPTS="-j2"
PKGDIR="/usr/portage/packages"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/usr/portage"
PORTDIR_OVERLAY="/usr/local/portage"
SYNC="rsync://rsync.gentoo.org/gentoo-portage"
USE="X aalib alsa apm atm avi berkdb bitmap-fonts cdparanoia cdr crypt cups
directfb divx4linux dvd encode f77 fam fbcon flac foomaticdb fortran gdbm ggi
gif gpm gstreamer gtk gtk+ gtk2 imagemagick imlib java jpeg ldap libg++ libwww
live lzo mad mikmod mmx mmx2 motif mozilla mpeg mysql ncurses network nls
oggvorbis pam pdflib perl png python quicktime readline sdl slang spell sqlite
sse sse2 ssl svga tcltk tcpd tetex theora tiff truetype usb v4l v4l2 x86 xine
xml2 xmms xv xvid zlib"

------- Comment #24 From Duncan Coutts (RETIRED) 2004-11-14 10:56:43 0000 -------
It's a known issue with gtk2hs. Building gtk2hs uses a preprocessor tool called
c2hs which uses a huge amount of memory. I reckon it needs about 400Mb of RAM.

I'm a gtk2hs developer and I'm actually working on this issue at the moment.
There will not be a quick fix however, you'll have to wait for the next release
of gtk2hs.

Perhaps I should put a check in the ebuild to make it bail out if the machine
has less than 512Mb of RAM.

------- Comment #25 From Duncan Coutts (RETIRED) 2004-11-16 04:05:10 0000 -------
Andres, what's the most sensible way of checking the emount of system memory in
an ebuild? A couple people have hit this issue now.

------- Comment #26 From Duncan Coutts (RETIRED) 2004-11-16 17:32:56 0000 -------
Created an attachment (id=44121) [edit]
c2hs-0.13.4.ebuild

updated c2hs ebuild, updated to version 0.13.4
make sure ghc package actually gets registered
ghc package missing haskell98 dependency hack no longer needed as it was fixed
in 0.13.4
new hack to stop c2hs from using versioned dirs, as we're already doing that
ourselves.

------- Comment #27 From Duncan Coutts (RETIRED) 2004-11-16 17:38:07 0000 -------
Created an attachment (id=44122) [edit]
buddha-1.2-r1.ebuild

Just a small change to where interface files get installed.
ghc .hi files get installed in a dir under ghc-libdir.
buddha .i files get put under /usr/share/buddha/ifaces/
(previously they were mixed in with the .hi files)

------- Comment #28 From David Morgan 2004-11-18 05:46:19 0000 -------
One way to test whether or not someone has enough ram would be along the lines
of

mem=`cat /proc/meminfo | grep MemTotal | sed -e 's/\(.*: *\)\(.*\)\( .*\)/\2/'`
if [[ $(mem)/1024 < 512 ]] ; then die "need more ram" ; fi

Though maybe it's better to do a similar thing using free, in case the user
isn't using /proc (or maybe there's an even better way that I don't know about,
but no-one else has suggested anything here)

------- Comment #29 From Andres Loeh (RETIRED) 2004-11-18 06:11:53 0000 -------
eclipse-sdk_3.1_pre2 uses the following, very similar, construct:

function get-memory-total() {
        cat /proc/meminfo | grep MemTotal | sed -r "s/[^0-9]*([0-9]+).*/\1/"
}

function check-ram() {

        local mem=$(get-memory-total)
        [ $(get-memory-total) -lt 775000 ] &&
                (
                echo
                ewarn "To build Eclipse, at least 768MB of RAM is recommended."
                ewarn "Your machine has less RAM. Continuing anyway."
                echo
                )
}

I don't like it. I don't think it is the job of individual ebuilds to
check the available memory. If at all, we should do something similar
and print a warning, but no more.

ks

------- Comment #30 From David Morgan 2004-11-18 07:34:17 0000 -------
People often miss such warnings though.

I'd much rather return to my computer after I've told it to emerge something(s) and find that the emerge failed rather than find that X got shutdown because I ran out of memory (which will stop the emerge anyway).

Perhaps a combination of this with something like the BREAKME variable being used in xorg ebuilds [1] so that the emerge fails if the user doesn't have enough memory, unless this variable is set.

Still not a very good solution, but if people miss the warning and then find that X has been killed they'll probably think that it's a bug in X, when clearly it's not. I agree that ebulids checking whether or not the user has enough memory is a bad thing, but I think that it's the lesser of 2 evils

What do you think? This makes it easy for the user to try emerging anyway, and makes sure that they don't be making any bug reports about X (though maybe that needs to be explained in the warning)

On a different subject, is there any reason why the other packages that depend on ghc don't have ebuilds using the eclass? If not then I can probably write new ebuilds for them over the weekend.


[1] from xorg-x11-6.8.0-r2.ebuild
if [ -z "${BREAKME}" ]; then
		die "Set the BREAKME variable to emerge this. It's in development. Stop using it."
fi

------- Comment #31 From Andres Loeh (RETIRED) 2004-11-18 07:53:25 0000 -------
I'm still not convinced, but more so than before ;)

Are there so many ebuilds that need to be ghc-packages and aren't yet?
I know I haven't added wxhaskell and WASH yet, but which others did you
have in mind?

ks

------- Comment #32 From David Morgan 2004-11-18 09:28:00 0000 -------
Alex and Haddock both use PATH="${PATH}:/opt/ghc/bin", other than that I didn't
notice anything else when I just gave the ebuilds a quick look over. Is it
worth inheriting the eclass just for that?

------- Comment #33 From Andres Loeh (RETIRED) 2004-11-18 09:33:09 0000 -------
I'd vote no. I think this ugly hack can be removed anyway,
but I've been too lazy to test until now.

If you have spare time during the weekend, you could write a 
fresh ebuild for some Haskell library you want in portage.

I've added the wash ebuild today, and renamed WASH to wash.
That was a bit of a mess, but I hope everything works alright
now.

ks

------- Comment #34 From Duncan Coutts (RETIRED) 2004-11-18 11:23:32 0000 -------
Andres, I'll implement whichever mem check method you think is more appropriate
/ tastefull. As the Gentoo Haskell Tsar you get the privilege of deciding :-).

I think it needs something doing however since quite a few people have hit this
issue.

------- Comment #35 From Andres Loeh (RETIRED) 2004-11-18 13:30:03 0000 -------
Ok. I'd suggest writing a mail to the gentoo-dev mailing list
in this case. Point out the path taken by the eclipse-sdk ebuild
as a possibility, and possibly the BUILD_ANYWAY variable ...

Perhaps we've overlooked other possibilities -- I ran a few more
greps on /usr/portage, but couldn't find anything.

I'd write the mail myself (and will do), but probably won't have
time for it before Monday.

ks

------- Comment #36 From Duncan Coutts (RETIRED) 2004-11-21 16:13:44 0000 -------
Created an attachment (id=44443) [edit]
gtk2hs-0.9.6-r1.ebuild.patch

Following discussion on the gentoo-dev mailing list an eclass "check-reqs" was
added to the portage tree. This patch modifies the gtk2hs-0.9.6-r1.ebuild to
use this eclass to implement a memory check. I have set the memory requirement
at 350Mb.

------- Comment #37 From Andres Loeh (RETIRED) 2005-01-19 03:01:27 0000 -------
Duncan, I finally applied your patch.

ks

------- Comment #38 From Andres Loeh (RETIRED) 2005-12-19 03:09:29 0000 -------
I think this can be considered fixed. The eclass is in portage for a long
time now, and seems to work nicely.

------- Comment #39 From Andres Loeh (RETIRED) 2005-12-19 03:09:57 0000 -------
I meant to close the bug.

First Last Prev Next    No search results available      Search page      Enter new bug