# ChangeLog for app-text/discount
# Copyright 1999-2015 Gentoo Foundation; Distributed under the GPL v2
# $Header: /var/cvsroot/gentoo-x86/app-text/discount/ChangeLog,v 1.13 2015/07/13 02:01:14 binki Exp $

*discount-2.1.8a-r1 (13 Jul 2015)

  13 Jul 2015; Nathan Phillip Brink <binki@gentoo.org>
  +discount-2.1.8a-r1.ebuild, -discount-2.1.8a.ebuild:
  Turn on deterministic email address mangling, see debian bug #762622.

  12 Jul 2015; Nathan Phillip Brink <binki@gentoo.org> discount-2.1.8a.ebuild:
  Add some requested elog() about DISCOUNT_EXTRA_CONFIGURE_SH for bug #554520.

*discount-2.1.8a (12 Jul 2015)

  12 Jul 2015; Nathan Phillip Brink <binki@gentoo.org> +discount-2.1.8a.ebuild:
  Bump to discount-2.1.8a and add DISCOUNT_EXTRA_CONFIGURE_SH support for bug
  #554322 and bug #554520.

  19 Jan 2014; Pacho Ramos <pacho@gentoo.org> discount-2.1.6-r1.ebuild:
  ia64 stable, bug #488810 (thanks to Emeric Maschino for testing)

  24 Nov 2013; Agostino Sarubbo <ago@gentoo.org> discount-2.1.6-r1.ebuild:
  Stable for ppc64, wrt bug #488810

  24 Nov 2013; Agostino Sarubbo <ago@gentoo.org> discount-2.1.6-r1.ebuild:
  Stable for arm, wrt bug #488810

  24 Nov 2013; Agostino Sarubbo <ago@gentoo.org> discount-2.1.6-r1.ebuild:
  Stable for x86, wrt bug #488810

  24 Nov 2013; Agostino Sarubbo <ago@gentoo.org> discount-2.1.6-r1.ebuild:
  Stable for sparc, wrt bug #488810

  24 Nov 2013; Agostino Sarubbo <ago@gentoo.org> discount-2.1.6-r1.ebuild:
  Stable for ppc, wrt bug #488810

  24 Nov 2013; Agostino Sarubbo <ago@gentoo.org> discount-2.1.6-r1.ebuild:
  Stable for alpha, wrt bug #488810

  29 Oct 2013; Tony Vroon <chainsaw@gentoo.org> discount-2.1.6-r1.ebuild:
  Marked stable on AMD64 based on arch testing by Elijah "Armageddon" El
  Lazkani in bug #488810.

*discount-2.1.6-r1 (31 Jul 2013)

  31 Jul 2013; Nathan Phillip Brink <binki@gentoo.org>
  +discount-2.1.6-r1.ebuild, -discount-2.1.6.ebuild:
  Use prefix of “discount-” instead of “mkd” for overly-generic binary names to
  match the prefix chosen in fedora.

*discount-2.1.6 (29 Jul 2013)

  29 Jul 2013; Nathan Phillip Brink <binki@gentoo.org> +discount-2.1.6.ebuild,
  +files/discount-2.1.6-portage-multilib-CFLAGS.patch, +metadata.xml:
  Add app-text/discount for bug #294000 by Egil Hanger and jauhien. Imported
  from sunrise with fixes including CFLAGS, LDFLAGS, CPPFLAGS, sandbox, and
  shared/dynamic library support. Prefixed some generically-named binaries with
  'mkd'.
