# ChangeLog for app-cdr/iat
# Copyright 1999-2015 Gentoo Foundation; Distributed under the GPL v2
# $Header: /var/cvsroot/gentoo-x86/app-cdr/iat/ChangeLog,v 1.12 2015/06/27 21:57:46 mrueg Exp $

  27 Jun 2015; Manuel Rüger <mrueg@gentoo.org> -iat-0.1.3.ebuild:
  Remove old.

  17 Oct 2012; Pawel Hajdan jr <phajdan.jr@gentoo.org> iat-0.1.7-r1.ebuild:
  x86 stable wrt bug #435658

  30 Sep 2012; Raúl Porcel <armin76@gentoo.org> iat-0.1.7-r1.ebuild:
  Drop sparc keywords

  23 Sep 2012; Anthony G. Basile <blueness@gentoo.org> iat-0.1.7-r1.ebuild:
  stable arm, bug #435658

  21 Sep 2012; Agostino Sarubbo <ago@gentoo.org> iat-0.1.7-r1.ebuild:
  Stable for amd64, wrt bug #435658

  11 Jun 2011; Markus Meier <maekke@gentoo.org> iat-0.1.7-r1.ebuild:
  add ~arm, bug #354465

  01 Jan 2011; Michael Weber <xmw@gentoo.org> iat-0.1.7-r1.ebuild:
  add ~sparc keyword (bug 350200)

*iat-0.1.7-r1 (08 Oct 2009)

  08 Oct 2009; Tomáš Chvátal <scarabeus@gentoo.org> -iat-0.1.7.ebuild,
  +iat-0.1.7-r1.ebuild:
  Revision bump for previous issue/commit, since people already might
  installed the thing.

  08 Oct 2009; Tomáš Chvátal <scarabeus@gentoo.org> iat-0.1.7.ebuild:
  Install the header files into more safe location, to avoid issues. Per bug
  #288203.

*iat-0.1.7 (07 Oct 2009)

  07 Oct 2009; Tomáš Chvátal <scarabeus@gentoo.org> +iat-0.1.7.ebuild:
  Version bump. Because they masked me the mdf2iso :]

  17 Sep 2008; Raúl Porcel <armin76@gentoo.org> iat-0.1.3.ebuild:
  Add ~x86 wrt #237762

*iat-0.1.3 (06 Jun 2008)

  06 Jun 2008; Samuli Suominen <drac@gentoo.org> +iat-0.1.3.ebuild:
  Initial commit for bug 182333. Ebuild partly by Matthias Vill.
