# ChangeLog for net-news/yencode
# Copyright 1999-2009 Gentoo Foundation; Distributed under the GPL v2
# $Header: /var/cvsroot/gentoo-x86/net-news/yencode/ChangeLog,v 1.14 2009/09/23 19:42:06 patrick Exp $

  23 Sep 2009; Patrick Lauer <patrick@gentoo.org> yencode-0.46.ebuild:
  Remove virtual/libc

  09 Feb 2007; Diego Pettenò <flameeyes@gentoo.org> ChangeLog:
  Regenerate digest in Manifest2 format.

  17 Dec 2004; Karol Wojtaszek <sekretarz@gentoo.org> yencode-0.46.ebuild:
  Added to ~amd64, bug #70011

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

  19 Jun 2004; Sven Wegener <swegener@gentoo.org> yencode-0.46.ebuild:
  Added nls to IUSE

  19 Jun 2004; Sven Wegener <swegener@gentoo.org> +metadata.xml:
  Added metadata.xml

  11 May 2004; Jason Wever <weeve@gentoo.org> yencode-0.46.ebuild:
  Added ~sparc keyword.

  11 Feb 2003; Rajiv Manglani <rajiv@gentoo.org> yencode-0.46.ebuild :

  moved to stable ppc.

  10 Feb 2003; Rajiv Manglani <rajiv@gentoo.org> yencode-0.46.ebuild :

  tested on ppc, added ~ppc to KEYWORDS.

*yencode-0.46 (1 May 2002)

  25 Apr 2003; Martin Holzer <mholzer@gentoo.org> yencode-0.46.ebuild:
  Changed SRC_URI to use mirror://sf.

  1 May 2002; Ryan Phillips <rphillips@gentoo.org> ChangeLog :
  
  Added initial ChangeLog which should be updated whenever the package is
  updated in any way. This changelog is targetted to users. This means that the
  comments should well explained and written in clean English. The details about
  writing correct changelogs are explained in the skel.ChangeLog file which you
  can find in the root directory of the portage repository.
  
