# ChangeLog for dev-libs/jsoncpp
# Copyright 1999-2016 Gentoo Foundation; Distributed under the GPL v2
# (auto-generated from git log)

*jsoncpp-1.6.2-r1 (09 Aug 2015)
*jsoncpp-0.10.2-r1 (09 Aug 2015)
*jsoncpp-0.5.0-r1 (09 Aug 2015)

  09 Aug 2015; Robin H. Johnson <robbat2@gentoo.org>
  +files/jsoncpp-1.6.2-fix-pkgconfig.patch, +jsoncpp-0.5.0-r1.ebuild,
  +jsoncpp-0.10.2-r1.ebuild, +jsoncpp-1.6.2-r1.ebuild, +metadata.xml:
  proj/gentoo: Initial commit

  This commit represents a new era for Gentoo:
  Storing the gentoo-x86 tree in Git, as converted from CVS.

  This commit is the start of the NEW history.
  Any historical data is intended to be grafted onto this point.

  Creation process:
  1. Take final CVS checkout snapshot
  2. Remove ALL ChangeLog* files
  3. Transform all Manifests to thin
  4. Remove empty Manifests
  5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$
  5.1. Do not touch files with -kb/-ko keyword flags.

  Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
  X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration
  tests
  X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this
  project
  X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo
  developer, wrote Git features for the migration
  X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve
  cvs2svn
  X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts
  X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014
  work in migration
  X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging
  X-Thanks: All of other Gentoo developers - many ideas and lots of paint on
  the bikeshed

  10 Aug 2015; Johannes Huber <johu@gentoo.org>
  +files/jsoncpp-0.10.2-arm.patch, jsoncpp-0.10.2-r1.ebuild:
  Fix build on arm, bug #552572

  Adds upstream patch commit: 96412d2964775fd6fb9bf359936743dd508af8ba

  Gentoo-bug: 552572
  Acked-by: Markus Meier <maekke@gentoo.org>
  Acked-by: Michał Górny <mgorny@gentoo.org>

  Package-Manager: portage-2.2.20

  21 Aug 2015; Markus Meier <maekke@gentoo.org> jsoncpp-0.10.2-r1.ebuild:
  arm stable, bug #551320

  Package-Manager: portage-2.2.20.1
  RepoMan-Options: --include-arches="arm"

  24 Aug 2015; Justin Lecher <jlec@gentoo.org> metadata.xml:
  Use https by default

  Convert all URLs for sites supporting encrypted connections from http to
  https

  Signed-off-by: Justin Lecher <jlec@gentoo.org>

  24 Aug 2015; Mike Gilbert <floppym@gentoo.org> metadata.xml:
  Revert DOCTYPE SYSTEM https changes in metadata.xml

  repoman does not yet accept the https version.
  This partially reverts eaaface92ee81f30a6ac66fe7acbcc42c00dc450.

  Bug: https://bugs.gentoo.org/552720

*jsoncpp-1.6.5 (30 Sep 2015)

  30 Sep 2015; Michał Górny <mgorny@gentoo.org> +jsoncpp-1.6.5.ebuild:
  Bump to 1.6.5

  Package-Manager: portage-2.2.20

  01 Oct 2015; Justin Lecher <jlec@gentoo.org> metadata.xml:
  Add missing remote-id type=sourceforge

  Signed-off-by: Justin Lecher <jlec@gentoo.org>

  08 Nov 2015; Mikle Kolyada <zlogene@gentoo.org> jsoncpp-0.10.2-r1.ebuild,
  jsoncpp-1.6.2-r1.ebuild, jsoncpp-1.6.5.ebuild:
  Add ~ia64 keyword

  Package-Manager: portage-2.2.20.1

  08 Nov 2015; Mikle Kolyada <zlogene@gentoo.org> jsoncpp-0.10.2-r1.ebuild:
  ia64 stable (fast) due to bug #551320

  Package-Manager: portage-2.2.20.1

  24 Jan 2016; Michał Górny <mgorny@gentoo.org> metadata.xml:
  Unify quoting in metadata.xml files for machine processing

  Force unified quoting in all metadata.xml files since lxml does not
  preserve original use of single and double quotes. Ensuring unified
  quoting before the process allows distinguishing the GLEP 67-related
  metadata.xml changes from unrelated quoting changes.

  24 Jan 2016; Michał Górny <mgorny@gentoo.org> metadata.xml:
  Set appropriate maintainer types in metadata.xml (GLEP 67)

  24 May 2016; Michał Górny <mgorny@gentoo.org> -jsoncpp-0.5.0-r1.ebuild,
  -jsoncpp-1.6.2-r1.ebuild:
  Clean up old versions

*jsoncpp-1.7.2 (24 May 2016)
*jsoncpp-0.10.6 (24 May 2016)

  24 May 2016; Michał Górny <mgorny@gentoo.org> +jsoncpp-0.10.6.ebuild,
  +jsoncpp-1.7.2.ebuild:
  Bump to 1.7.2 and 0.10.6

  1.7* involves mostly gcc-6 fixes. 0.10* catches late fixes. Bump both
  ebuilds to EAPI 6. Disable building static libraries. Work-around
  implicit ccache use that upstream added in 1.7*.

*jsoncpp-1.7.3 (27 Jun 2016)

  27 Jun 2016; Michał Górny <mgorny@gentoo.org> +jsoncpp-1.7.3.ebuild:
  Bump to 1.7.3

  02 Jul 2016; Michał Górny <mgorny@gentoo.org> jsoncpp-0.10.2-r1.ebuild,
  jsoncpp-0.10.6.ebuild, jsoncpp-1.6.5.ebuild, jsoncpp-1.7.2.ebuild,
  jsoncpp-1.7.3.ebuild:
  Add missing cond RESTRICT=test

*jsoncpp-1.7.4 (09 Jul 2016)

  09 Jul 2016; Michał Górny <mgorny@gentoo.org> -jsoncpp-1.7.3.ebuild,
  +jsoncpp-1.7.4.ebuild:
  Bump to 1.7.4 w/ pkg-config fix

*jsoncpp-1.7.5 (03 Sep 2016)

  03 Sep 2016; Michał Górny <mgorny@gentoo.org> +jsoncpp-1.7.5.ebuild:
  Version bump to 1.7.5 (minor fixes)

*jsoncpp-1.7.6 (26 Sep 2016)

  26 Sep 2016; Michał Górny <mgorny@gentoo.org> +jsoncpp-1.7.6.ebuild:
  Bump to 1.7.6 (minor bugfix)

