# ChangeLog for dev-haskell/hmake
# Copyright 2000-2008 Gentoo Foundation; Distributed under the GPL v2
# $Header: /var/cvsroot/gentoo-x86/dev-haskell/hmake/ChangeLog,v 1.36 2008/07/05 23:48:17 araujo Exp $

  05 Jul 2008; Luis F. Araujo <araujo@gentoo.org> hmake-3.11.ebuild,
  hmake-3.13.ebuild:
  Fixed bug #154848. Latest hmake versions only compile with >= 6.8 too

  10 Mar 2008; Luis F. Araujo <araujo@gentoo.org> hmake-3.11.ebuild,
  hmake-3.13.ebuild:
  3.11 and 3.13 versions dont work with >=ghc6.8

  13 Dec 2007; Duncan Coutts <dcoutts@gentoo.org> hmake-3.10.ebuild,
  hmake-3.11.ebuild, hmake-3.13.ebuild:
  Fix quoting in ebuild.

  31 Oct 2007; Duncan Coutts <dcoutts@gentoo.org> hmake-3.10.ebuild,
  hmake-3.11.ebuild, hmake-3.13.ebuild:
  Drop virtual/ghc in favour of dev-lang/ghc

*hmake-3.13 (29 Jul 2007)

  29 Jul 2007; Duncan Coutts <dcoutts@gentoo.org> hmake-3.11.ebuild,
  +hmake-3.13.ebuild:
  New minor version and fix building with ghc-6.6.1.

  28 Jul 2007; nixnut <nixnut@gentoo.org> ChangeLog:
  Stable on ppc wrt bug 186849

  12 Oct 2006; Duncan Coutts <dcoutts@gentoo.org> hmake-3.10.ebuild:
  Block version 3.10 on ghc-6.6 and tidy deps.

  11 Oct 2006; Duncan Coutts <dcoutts@gentoo.org>
  +files/hmake-3.11-ghc66.patch, hmake-3.11.ebuild:
  Added patch to fix building with ghc-6.6

  05 Oct 2006; Chris Parrott <cparrott@gentoo.org> hmake-3.11.ebuild:
  marked stable for amd64 (bug 144678)

  04 Oct 2006; Joshua Jackson <tsunam@gentoo.org> hmake-3.11.ebuild:
  Stable x86; bug #144678

  29 Aug 2006; Stephanie Lockwood-Childs <wormo@gentoo.org> hmake-3.11.ebuild:
  mark ~ppc (related to Bug #144678, though not specifically requested...)

  25 Aug 2006; Ferris McCormick <fmccor@gentoo.org> hmake-3.11.ebuild:
  Stable on sparc --- Bug #144678 --- no problems.

  24 Aug 2006; Markus Rothe <corsair@gentoo.org> hmake-3.11.ebuild:
  Stable on ppc64; bug #144678

  13 Aug 2006; <kolmodin@gentoo.org> hmake-3.11.ebuild:
  Fix to always use Gentoo installed GHC compiler. Se bug #134379.
  Thanks to Mario Blazevi for reporting the bug.

*hmake-3.11 (12 May 2006)

  12 May 2006; Duncan Coutts <dcoutts@gentoo.org> +hmake-3.11.ebuild:
  New version

  16 Mar 2006; Duncan Coutts <dcoutts@gentoo.org> hmake-3.10.ebuild:
  QA fix; Add eutils to inherit.

  10 Mar 2006; Duncan Coutts <dcoutts@gentoo.org> hmake-3.10.ebuild:
  Add ~sparc to KEYWORDS. See bug #124902

  01 Mar 2006; Markus Rothe <corsair@gentoo.org> hmake-3.10.ebuild:
  Added ~ppc64; bug #124469

  04 Feb 2006; Alexandre Buisse <nattfodd@gentoo.org>
  +files/ghc-version.patch, hmake-3.10.ebuild:
  Refactored the way ghc version is obtained, as the old solution wasn't
  working anymore with gcc4 and was too complicated (thanks to dcoutts for 
  the cut/sed line).

  17 Aug 2005; Andres Loeh <loeh@gentoo.org> hmake-3.10.ebuild:
  Added dependency on sandbox-1.2.12 due to bug #97441.

  05 Aug 2005; Andres Loeh <kosmikus@gentoo.org> -hmake-3.08.ebuild,
  -hmake-3.09.ebuild:
  Removed old ebuilds.

  05 Aug 2005; Andres Loeh <kosmikus@gentoo.org> hmake-3.10.ebuild:
  Added a workaround to prevent sandbox violations (see bug #97441).

  23 Mar 2005; Andres Loeh <kosmikus@gentoo.org> hmake-3.08.ebuild,
  hmake-3.09.ebuild:
  Clarified which versions of hmake work with which versions of ghc.

*hmake-3.10 (23 Mar 2005)

  23 Mar 2005; Luis F. Araujo <araujo@gentoo.org> +hmake-3.10.ebuild:
  New hmake release.

*hmake-3.09 (08 Mar 2005)

  08 Mar 2005; Luis F. Araujo <araujo@gentoo.org> metadata.xml,
  +hmake-3.09.ebuild:
  New hmake release

  21 Jan 2005; Andres Loeh <kosmikus@gentoo.org> -hmake-3.07.ebuild,
  hmake-3.08.ebuild:
  Restored gcc compatibility (bug #71713). Removed optional nhc98 dependency
  for now.

  01 Jul 2004; Jeremy Huddleston <eradicator@gentoo.org> hmake-3.08.ebuild:
  virtual/glibc -> virtual/libc

  02 Jun 2004; Aron Griffis <agriffis@gentoo.org> hmake-3.07.ebuild,
  hmake-3.08.ebuild:
  Fix use invocation

  24 Mar 2004; Michael Sterrett <mr_bones_@gentoo.org> hmake-3.08.ebuild:
  don't use deprecated ? : use syntax

  17 Sep 2003; John Mylchreest <johnm@gentoo.org>; hmake-3.08.ebuild:
  updating to fix headtails issue

  03 Jul 2003; Andres Loeh <kosmikus@gentoo.org> hmake-3.08.ebuild:
  Removed garbage from the ebuild.

  24 Jun 2003; Andres Loeh <kosmikus@gentoo.org> hmake-3.08.ebuild,
  files/patch-3.08-cpp:
  Removed the patches again. Source archive includes them now.

*hmake-3.08 (24 Jun 2003)

  24 Jun 2003; Andres Loeh <kosmikus@gentoo.org> hmake-3.08.ebuild,
  files/patch-3.08-cpp:
  Version bump. Cleaned up the ebuild. Readline usage now really is disabled if
  corresponding USE flag is not set.

*hmake-3.07 (22 Apr 2003)

  22 Apr 2003; Andres Loeh <kosmikus@gentoo.org> all :

  Initial import. Thanks to Thomas L. Bevan <tom@regex.com.au> for submitting an
  ebuild (#3970). hmake is a make-like tool that can be used with the major Haskell
  compilers (i.e. ghc, nhc98, hbc).
