# ChangeLog for dev-ruby/ruby-gconf2
# Copyright 1999-2010 Gentoo Foundation; Distributed under the GPL v2
# $Header: /var/cvsroot/gentoo-x86/dev-ruby/ruby-gconf2/ChangeLog,v 1.47 2010/01/13 19:11:36 graaff Exp $

*ruby-gconf2-0.19.3 (13 Jan 2010)

  13 Jan 2010; Hans de Graaff <graaff@gentoo.org>
  +ruby-gconf2-0.19.3.ebuild:
  Version bump. Now uses ruby-ng-gnome2 eclass.

  13 Jan 2010; Hans de Graaff <graaff@gentoo.org>
  -ruby-gconf2-0.16.0.ebuild, -ruby-gconf2-0.19.0.ebuild:
  Remove old versions.

  10 Jan 2010; nixnut <nixnut@gentoo.org> ruby-gconf2-0.19.1.ebuild:
  ppc stable #295942

  18 Dec 2009; Raúl Porcel <armin76@gentoo.org> ruby-gconf2-0.19.1.ebuild:
  alpha/ia64/sparc stable wrt #295942

  16 Dec 2009; Markus Meier <maekke@gentoo.org> ruby-gconf2-0.19.1.ebuild:
  amd64/x86 stable, bug #295942

  13 Sep 2009; Diego E. Pettenò <flameeyes@gentoo.org>
  ruby-gconf2-0.19.1.ebuild:
  Don't enable ruby 1.9 support (doesn't work with ruby-gnome2 yet).

*ruby-gconf2-0.19.1 (13 Sep 2009)

  13 Sep 2009; Hans de Graaff <graaff@gentoo.org>
  +ruby-gconf2-0.19.1.ebuild:
  Version bump.

*ruby-gconf2-0.19.0 (16 Jul 2009)

  16 Jul 2009; Hans de Graaff <graaff@gentoo.org>
  +ruby-gconf2-0.19.0.ebuild:
  Version bump. Thanks to Mark Somerville for providing an updated version
  in the ruby overlay.

  16 Jul 2009; Hans de Graaff <graaff@gentoo.org>
  -ruby-gconf2-0.14.1.ebuild:
  Remove old version.

  09 Dec 2008; Ferris McCormick <fmccor@gentoo.org> ChangeLog:
  Sparc stable, Bug #215149.

  06 Oct 2008; Hans de Graaff <graaff@gentoo.org> ruby-gconf2-0.16.0.ebuild:
  Add missing pkgconfig dependency, #239578

  07 Apr 2008; Hans de Graaff <graaff@gentoo.org>
  -ruby-gconf2-0.12.0.ebuild, -ruby-gconf2-0.15.0.ebuild:
  Remove old versions

  02 Apr 2008; Christian Faulhammer <opfer@gentoo.org>
  ruby-gconf2-0.16.0.ebuild:
  stable x86, bug 215149

  30 Mar 2008; Santiago M. Mola <coldwind@gentoo.org>
  ruby-gconf2-0.16.0.ebuild:
  amd64 stable wrt bug #215149

  30 Mar 2008; Raúl Porcel <armin76@gentoo.org> ruby-gconf2-0.16.0.ebuild:
  alpha/ia64 stable wrt #215149

  28 Mar 2008; Ferris McCormick <fmccor@gentoo.org>
  ruby-gconf2-0.16.0.ebuild:
  Sparc stable, part of Bug #215149.

*ruby-gconf2-0.16.0 (30 Dec 2006)

  30 Dec 2006; Luis Medinas <metalgod@gentoo.org>
  -ruby-gconf2-0.10.1.ebuild, -ruby-gconf2-0.11.0.ebuild,
  -ruby-gconf2-0.12.0.ebuild, +ruby-gconf2-0.16.0.ebuild:
  Version Bump. Remove older versions.

  20 Oct 2006; Aron Griffis <agriffis@gentoo.org> ruby-gconf2-0.14.1.ebuild:
  Mark 0.14.1 stable on alpha

  17 Sep 2006; Tobias Scherbaum <dertobi123@gentoo.org>
  ruby-gconf2-0.14.1.ebuild:
  ppc stable

*ruby-gconf2-0.15.0 (30 Aug 2006)

  30 Aug 2006; Nguyễn Thái Ngọc Duy <pclouds@gentoo.org>
  +ruby-gconf2-0.15.0.ebuild:
  Version bump

  03 Apr 2006; Aron Griffis <agriffis@gentoo.org> ruby-gconf2-0.14.1.ebuild:
  Mark 0.14.1 stable on ia64

  30 Mar 2006; Ferris McCormick <fmccor@gentoo.org>
  ruby-gconf2-0.14.1.ebuild:
  Stable on sparc for upgrade to ruby-gtk2-0.14.1 suite.

*ruby-gconf2-0.14.1 (15 Nov 2005)

  15 Nov 2005; Michael Kohl <citizen428@gentoo.org>
  +ruby-gconf2-0.14.1.ebuild:
  Version bump. See bugs #103470 and #109641. src_test temporarily removed.

  25 Aug 2005; Aron Griffis <agriffis@gentoo.org> ruby-gconf2-0.12.0.ebuild:
  stable on ia64

  13 Aug 2005; Michael Hanselmann <hansmi@gentoo.org>
  ruby-gconf2-0.12.0.ebuild:
  Stable on ppc.

  02 Aug 2005; Simon Stelling <blubb@gentoo.org> ruby-gconf2-0.12.0.ebuild:
  stable on amd64

  02 Jul 2005; Bryan Østergaard <kloeri@gentoo.org>
  ruby-gconf2-0.12.0.ebuild:
  Stable on alpha.

  22 May 2005; Jason Wever <weeve@gentoo.org> ruby-gconf2-0.12.0.ebuild:
  Added ~sparc keyword.

  24 Apr 2005; Simon Stelling <blubb@gentoo.org> ruby-gconf2-0.10.1.ebuild:
  stable on amd64

  21 Apr 2005; Michael Hanselmann <hansmi@gentoo.org>
  ruby-gconf2-0.10.1.ebuild:
  Stable on ppc.

  01 Apr 2005; Aron Griffis <agriffis@gentoo.org> ruby-gconf2-0.10.1.ebuild:
  stable on ia64

*ruby-gconf2-0.12.0 (14 Mar 2005)

  14 Mar 2005; Michael Kohl <citizen428@gentoo.org>
  +ruby-gconf2-0.12.0.ebuild:
  Version bump.

*ruby-gconf2-0.11.0 (25 Nov 2004)

  25 Nov 2004; Mamoru KOMACHI <usata@gentoo.org> +ruby-gconf2-0.11.0.ebuild:
  Version bumped.

  05 Oct 2004; Mamoru KOMACHI <usata@gentoo.org> -ruby-gconf2-0.10.0.ebuild,
  ruby-gconf2-0.10.1.ebuild:
  Stable on x86 and alpha; bug #66274.

*ruby-gconf2-0.10.1 (19 Aug 2004)

  19 Aug 2004; Mamoru KOMACHI <usata@gentoo.org> +ruby-gconf2-0.10.1.ebuild:
  Version bumped. Added src_test().

*ruby-gconf2-0.10.0 (09 Aug 2004)

  09 Aug 2004; Mamoru KOMACHI <usata@gentoo.org> +ruby-gconf2-0.10.0.ebuild:
  Version bumped.

  03 Jul 2004; <slarti@gentoo.org> ruby-gconf2-0.9.1.ebuild:
  Marked ~amd64.

  01 Jul 2004; Mamoru KOMACHI <usata@gentoo.org> -ruby-gconf2-0.7.0.ebuild,
  ruby-gconf2-0.8.1.ebuild, ruby-gconf2-0.9.1.ebuild:
  Stable on alpha and ppc

  24 Jun 2004; Mamoru KOMACHI <usata@gentoo.org> ruby-gconf2-0.8.1.ebuild,
  ruby-gconf2-0.9.1.ebuild:
  Stable on x86

  17 Apr 2004; David Holm <dholm@gentoo.org> ruby-gconf2-0.9.1.ebuild:
  Added to ~ppc.

  12 Apr 2004; Mamoru KOMACHI <usata@gentoo.org> ruby-gconf2-0.5.0.ebuild,
  ruby-gconf2-0.8.1.ebuild, ruby-gconf2-0.9.1.ebuild:
  Removed 0.5.0. Added ruby.eclass support.

*ruby-gconf2-0.9.1 (18 Mar 2004)

  18 Mar 2004; Aron Griffis <agriffis@gentoo.org> ruby-gconf2-0.8.0.ebuild,
  ruby-gconf2-0.9.1.ebuild:
  Mark 0.8.0 stable on alpha, ia64 and x86.  Add version 0.9.1 for bug 44739

*ruby-gconf2-0.8.1 (24 Nov 2003)

  24 Nov 2003; Aron Griffis <agriffis@gentoo.org> ruby-gconf2-0.8.1.ebuild:
  Version bump to 0.8.1

*ruby-gconf2-0.8.0 (18 Nov 2003)

  18 Nov 2003; Aron Griffis <agriffis@gentoo.org> ruby-gconf2-0.8.0.ebuild:
  Version bump to 0.8.0

*ruby-gconf2-0.7.0 (30 Oct 2003)

  30 Oct 2003; Aron Griffis <agriffis@gentoo.org> ruby-gconf2-0.7.0.ebuild:
  Version bump to 0.7.0 for bug 30665, thanks to alex f

*ruby-gconf2-0.5.0 (06 Aug 2003)

  06 Aug 2003; Aron Griffis <agriffis@gentoo.org> metadata.xml,
  ruby-gconf2-0.5.0.ebuild:
  New ebuild based on ruby-gnome2.eclass to satisfy bug 23067

