# ChangeLog for sys-devel/libtool
# Copyright 1999-2016 Gentoo Foundation; Distributed under the GPL v2
# (auto-generated from git log)

*libtool-9999 (09 Aug 2015)
*libtool-2.4.6-r1 (09 Aug 2015)
*libtool-2.4.6 (09 Aug 2015)
*libtool-2.4.5 (09 Aug 2015)
*libtool-2.4.4 (09 Aug 2015)
*libtool-2.4.2-r1 (09 Aug 2015)

  09 Aug 2015; Robin H. Johnson <robbat2@gentoo.org>
  +files/1.5.20/libtool-1.5.20-use-linux-version-in-fbsd.patch,
  +files/libtool-2.4.3-use-linux-version-in-fbsd.patch,
  +files/libtool-2.4.6-fuse-ld.patch, +libtool-2.4.2-r1.ebuild,
  +libtool-2.4.4.ebuild, +libtool-2.4.5.ebuild, +libtool-2.4.6.ebuild,
  +libtool-2.4.6-r1.ebuild, +libtool-9999.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

  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; Justin Lecher <jlec@gentoo.org> libtool-2.4.2-r1.ebuild,
  libtool-2.4.4.ebuild, libtool-2.4.5.ebuild, libtool-2.4.6.ebuild,
  libtool-2.4.6-r1.ebuild, libtool-9999.ebuild:
  Use https for most gnu.org URLs

  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

  11 Sep 2015; Mike Frysinger <vapier@gentoo.org>
  files/libtool-2.4.6-fuse-ld.patch, libtool-2.4.6-r1.ebuild,
  libtool-9999.ebuild:
  force disable help2man w/releases #556512

  We want to make sure that help2man isn't run inadvertently (since we
  explicitly do not depend on it w/releases), so set HELP2MAN to `false`
  so it hard fails immediately.

  We also fix the build-aux/ltmain.in patch as it triggers rebuilding of
  build-aux/ltmain.sh which triggers rebuilding of doc/libtool.1 which
  requires `help2man`.

  24 Nov 2015; Mike Frysinger <vapier@gentoo.org> metadata.xml:
  standardize various metadata.xml style

  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:
  Replace all herds with appropriate projects (GLEP 67)

  Replace all uses of herd with appropriate project maintainers, or no
  maintainers in case of herds requested to be disbanded.

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

*libtool-2.4.6-r2 (13 Feb 2016)

  13 Feb 2016; Mike Frysinger <vapier@gentoo.org>
  +files/libtool-2.4.6-libtoolize-delay-help.patch,
  +files/libtool-2.4.6-libtoolize-slow.patch,
  +files/libtool-2.4.6-link-fsanitize.patch,
  +files/libtool-2.4.6-link-fuse-ld.patch,
  +files/libtool-2.4.6-link-specs.patch,
  +files/libtool-2.4.6-sed-quote-speedup.patch, +libtool-2.4.6-r2.ebuild:
  add various upstream patches #542252 #573744 #574550

  Three sets of fixes here, mostly from upstream:
   - speed up libtool/libtoolize #542252
   - update some set of flags accepted at link time #573744
   - make $SED look up use $PATH at runtime #574550

