# ChangeLog for app-admin/profiler
# Copyright 1999-2010 Gentoo Foundation; Distributed under the GPL v2
# $Header: /var/cvsroot/gentoo-x86/app-admin/profiler/ChangeLog,v 1.16 2010/03/08 08:33:58 sping Exp $

  08 Mar 2010; Sebastian Pipping <sping@gentoo.org> profiler-1-r1.ebuild:
  Fix SRC_URI and HOMEPAGE (bug #288717)

  11 Oct 2009; Mark Loeser <halcy0n@gentoo.org> profiler-1-r1.ebuild:
  QA fixes; unquoted variables

  22 Oct 2007; Petteri Räty <betelgeuse@gentoo.org> -profiler-1.ebuild:
  Remove generation 1 ebuild.

  15 Aug 2007; Christian Faulhammer <opfer@gentoo.org> profiler-1-r1.ebuild:
  stable x86, bug 188564

  14 Aug 2007; Tobias Scherbaum <dertobi123@gentoo.org>
  profiler-1-r1.ebuild:
  ppc stable, bug #188564

  14 Aug 2007; William L. Thomson Jr. <wltjr@gentoo.org>
  profiler-1-r1.ebuild:
  amd64 stable, bug #188564

*profiler-1-r1 (12 Sep 2006)

  12 Sep 2006; Krzysiek Pawlik <nelchael@gentoo.org> +profiler-1-r1.ebuild:
  Migrated to new Java build system.

  07 Sep 2006; Daniel Gryniewicz <dang@gentoo.org> profiler-1.ebuild:
  Marked stable on amd64 for bug #146741

  03 Dec 2005; Joshua Nichols <nichoj@gentoo.org> profiler-1.ebuild:
  Added ~amd64 keyword.

  17 Oct 2004; Thomas Matthijs <axxo@gentoo.org> profiler-1.ebuild:
  dojar --> java-pkg_dojar

  05 Oct 2004; Pieter Van den Abeele <pvdabeel@gentoo.org> profiler-1.ebuild:
  Masked profiler-1.ebuild stable for ppc

  03 Sep 2004; David Holm <dholm@gentoo.org> profiler-1.ebuild:
  Added to ~ppc.

  06 Jun 2004; Daniel Black <dragonheart@gentoo.org> +metadata.xml,
  profiler-1.ebuild:
  QA - IUSE fix

*profiler-1 (10 Jul 2003)

  10 Jul 2003; Mike Frysinger <vapier@gentoo.org> :
  Initial import.  Ebuild submitted by me.
