# ChangeLog for sci-visualization/ggobi
# Copyright 1999-2010 Gentoo Foundation; Distributed under the GPL v2
# $Header: /var/cvsroot/gentoo-x86/sci-visualization/ggobi/ChangeLog,v 1.4 2010/01/21 13:52:16 fauli Exp $

  21 Jan 2010; Christian Faulhammer <fauli@gentoo.org> ggobi-2.1.8.ebuild:
  stable x86, bug 301484

  14 Dec 2009; Sébastien Fabbro <bicatali@gentoo.org> ggobi-2.1.8.ebuild,
  +files/ggobi-2.1.8-plugindir.patch, +files/ggobi-2.1.8-syslibltdl.patch:
  Now use system libltdl instead of bundled one. Closing bug #273766

  14 Dec 2009; Sébastien Fabbro <bicatali@gentoo.org> ggobi-2.1.8.ebuild:
  Changed plugin directory to libdir instead of datadir

*ggobi-2.1.8 (20 Mar 2009)

  20 Mar 2009; Sébastien Fabbro <bicatali@gentoo.org>
  +files/ggobi-2.1.8-graphviz.patch, +metadata.xml, +ggobi-2.1.8.ebuild:
  Initial import from the science overlay to the main tree, with a patch for
  graphviz > 2.22 from Guillaume Horel, bug #262595

  29 Jan 2009; Sébastien Fabbro <bicatali@gentoo.org>
  +sci-visualization/ggobi/metadata.xml:
  Initial import

