# ChangeLog for x11-apps/xman
# Copyright 1999-2010 Gentoo Foundation; Distributed under the GPL v2
# $Header: /var/cvsroot/gentoo-x86/x11-apps/xman/ChangeLog,v 1.42 2010/01/23 19:13:48 scarabeus Exp $

  23 Jan 2010; Tomáš Chvátal <scarabeus@gentoo.org>
  -xman-1.0.2-r1.ebuild:
  rm

  19 Jan 2010; Raúl Porcel <armin76@gentoo.org> xman-1.1.0.ebuild:
  s390 stable wrt #294958

  18 Jan 2010; Raúl Porcel <armin76@gentoo.org> xman-1.1.0.ebuild:
  sh/sparc stable wrt #294958

  17 Jan 2010; Jeroen Roovers <jer@gentoo.org> xman-1.1.0.ebuild:
  Stable for HPPA (bug #294958).

  14 Jan 2010; Markus Meier <maekke@gentoo.org> xman-1.1.0.ebuild:
  arm stable, bug #294958

  27 Dec 2009; Joseph Jezak <josejx@gentoo.org> xman-1.1.0.ebuild:
  Marked ppc stable for bug #294958.

  15 Dec 2009; Brent Baude <ranger@gentoo.org> xman-1.1.0.ebuild:
  Marking xman-1.1.0 ppc64 stable for bug 294958

  11 Dec 2009; Tomáš Chvátal <scarabeus@gentoo.org> -xman-1.0.3.ebuild:
  Drop no-longer required ebuild.

  10 Dec 2009; Christian Faulhammer <fauli@gentoo.org> xman-1.1.0.ebuild:
  x86 stable, bug 294958

  10 Dec 2009; Samuli Suominen <ssuominen@gentoo.org> xman-1.1.0.ebuild:
  amd64 stable wrt #294958

*xman-1.1.0 (18 Oct 2009)

  18 Oct 2009; Rémi Cardona <remi@gentoo.org> +xman-1.1.0.ebuild:
  bump to 1.1.0, sync with overlay

*xman-1.0.3 (03 Oct 2009)

  03 Oct 2009; Tomáš Chvátal <scarabeus@gentoo.org> +xman-1.0.3.ebuild:
  Version bump.

  07 Jul 2009; Jeroen Roovers <jer@gentoo.org> xman-1.0.2-r1.ebuild:
  Stable for HPPA too.

  22 Apr 2009; Brent Baude <ranger@gentoo.org> ChangeLog:
  Marking xman-1.0.2-r1 ppc64 stable for bug 264982

  17 Apr 2009; Jeroen Roovers <jer@gentoo.org> xman-1.0.2-r1.ebuild:
  Marked ~hppa too.

  11 Apr 2009; nixnut <nixnut@gentoo.org> xman-1.0.2-r1.ebuild:
  ppc stable #264982

  09 Apr 2009; Raúl Porcel <armin76@gentoo.org> xman-1.0.2-r1.ebuild:
  arm/s390/sh stable wrt #264892

  06 Apr 2009; Friedrich Oslage <bluebird@gentoo.org> xman-1.0.2-r1.ebuild:
  Stable on sparc, bug #264982

  05 Apr 2009; Markus Meier <maekke@gentoo.org> xman-1.0.2-r1.ebuild:
  x86 stable, bug #264982

  05 Apr 2009; Olivier Crête <tester@gentoo.org> xman-1.0.2-r1.ebuild:
  Stable on amd64, bug #264982

  27 Feb 2009; Rémi Cardona <remi@gentoo.org> xman-1.0.2-r1.ebuild:
  really remove xprint support (see bug #254874)

*xman-1.0.2-r1 (14 Jan 2009)

  14 Jan 2009; Rémi Cardona <remi@gentoo.org> +xman-1.0.2-r1.ebuild:
  remove xprint support (see bug #254874)

  11 Oct 2008; Diego Pettenò <flameeyes@gentoo.org> xman-1.0.2.ebuild:
  Fix dependencies.

  24 Mar 2008; Markus Meier <maekke@gentoo.org> xman-1.0.2.ebuild:
  amd64 stable, bug #202087

  06 Apr 2007; Joshua Baergen <joshuabaergen@gentoo.org> xman-1.0.2.ebuild:
  If building with xprint enabled, make sure libXaw is also built with xprint
  enabled. (Bug #150954, Scott Alfter)

  10 Oct 2006; Donnie Berkholz <dberkholz@gentoo.org>; xman-1.0.2.ebuild:
  Update description to be less generic.

  17 Aug 2006; Markus Rothe <corsair@gentoo.org> xman-1.0.2.ebuild:
  Stable on ppc64

  20 May 2006; Robin H. Johnson <robbat2@gentoo.org> xman-1.0.2.ebuild:
  Added ~ppc after testing.

  08 Apr 2006; Donnie Berkholz <spyderous@gentoo.org>; -xman-1.0.1.ebuild:
  Pull old ebuild.

*xman-1.0.2 (04 Apr 2006)

  04 Apr 2006; Donnie Berkholz <spyderous@gentoo.org>; +xman-1.0.2.ebuild:
  Man page fixes.

  14 Feb 2006; Markus Rothe <corsair@gentoo.org> xman-1.0.1.ebuild:
  Added ~ppc64

  26 Dec 2005; Joshua Baergen <joshuabaergen@gentoo.org>
  -xman-0.99.3.ebuild, -xman-1.0.0.ebuild:
  Pull old versions.

*xman-1.0.1 (23 Dec 2005)

  23 Dec 2005; Donnie Berkholz <spyderous@gentoo.org>; +xman-1.0.1.ebuild:
  Bump for 7.0.

*xman-1.0.0 (18 Dec 2005)

  18 Dec 2005; Joshua Baergen <joshuabaergen@gentoo.org> +xman-1.0.0.ebuild:
  Bump for 7.0RC4.

  09 Dec 2005; Donnie Berkholz <spyderous@gentoo.org>; -xman-0.99.0.ebuild,
  -xman-0.99.1.ebuild, -xman-0.99.2.ebuild:
  Pull old versions.

*xman-0.99.3 (04 Dec 2005)

  04 Dec 2005; Joshua Baergen <joshuabaergen@gentoo.org>
  +xman-0.99.3.ebuild:
  Bump for 7.0RC3.

  17 Nov 2005; Herbie Hopkins <herbs@gentoo.org> xman-0.99.2.ebuild:
  Marked ~amd64.

*xman-0.99.2 (11 Nov 2005)

  11 Nov 2005; Joshua Baergen <joshuabaergen@gentoo.org>
  +xman-0.99.2.ebuild:
  Bump for 7.0RC2.

*xman-0.99.1 (20 Oct 2005)

  20 Oct 2005; Donnie Berkholz <spyderous@gentoo.org>; +xman-0.99.1.ebuild:
  Bump for 7.0 RC1.

  09 Sep 2005; Donnie Berkholz <spyderous@gentoo.org>; +metadata.xml:
  Add metadata.

  08 Aug 2005; Ferris McCormick <fmccor@gentoo.org> xman-0.99.0.ebuild:
  Add ~sparc keyword (Modular X testing).

*xman-0.99.0 (08 Aug 2005)

  08 Aug 2005; Donnie Berkholz <spyderous@gentoo.org>; +xman-0.99.0.ebuild:
  Initial commit for modular X.

