# ChangeLog for media-libs/liblqr
# Copyright 1999-2009 Gentoo Foundation; Distributed under the GPL v2
# $Header: /var/cvsroot/gentoo-x86/media-libs/liblqr/ChangeLog,v 1.14 2009/12/10 18:11:08 armin76 Exp $

  10 Dec 2009; Raúl Porcel <armin76@gentoo.org> liblqr-0.4.1.ebuild:
  arm stable wrt #284425

  09 Dec 2009; Brent Baude <ranger@gentoo.org> liblqr-0.4.1.ebuild:
  Marking liblqr-0.4.1 ppc64 for bug 284425

  08 Dec 2009; nixnut <nixnut@gentoo.org> liblqr-0.4.1.ebuild:
  ppc stable #291696

  03 Dec 2009; Markus Meier <maekke@gentoo.org> liblqr-0.4.1.ebuild:
  amd64 stable, bug #284425

  24 Nov 2009; Christian Faulhammer <fauli@gentoo.org> liblqr-0.4.1.ebuild:
  stable x86, bug 284425

  22 Nov 2009; Tobias Klausmann <klausman@gentoo.org> liblqr-0.4.1.ebuild:
  Stable on alpha, bug #284425

  21 Nov 2009; Jeroen Roovers <jer@gentoo.org> liblqr-0.4.1.ebuild:
  Stable for HPPA (bug #284425).

  05 Oct 2009; Mounir Lamouri <volkmar@gentoo.org> liblqr-0.4.1.ebuild:
  Keywording for ppc, bug 281573

  27 Sep 2009; Markus Meier <maekke@gentoo.org> liblqr-0.4.1.ebuild:
  add ~arm, bug #281573

  06 Sep 2009; Brent Baude <ranger@gentoo.org> liblqr-0.4.1.ebuild:
  Marking liblqr-0.4.1 ~ppc64 for bug 281573

  29 Aug 2009; Tobias Klausmann <klausman@gentoo.org> liblqr-0.4.1.ebuild:
  Keyworded on alpha, bug #281573

  26 Aug 2009; Jeroen Roovers <jer@gentoo.org> liblqr-0.4.1.ebuild:
  Marked ~hppa (bug #281573).

  18 Aug 2009; Alexis Ballier <aballier@gentoo.org> liblqr-0.4.1.ebuild:
  keyword ~x86-fbsd, bug #281573

*liblqr-0.4.1 (04 Aug 2009)

  04 Aug 2009; Markos Chandras <hwoarang@gentoo.org> +liblqr-0.4.1.ebuild,
  +metadata.xml:
  Initial commit of liblqr library. Fixes bug 203143. Thanks to Piotr
  Szymaniak
  <lazy_bum@o2.pl> for the initial ebuild

