portage-3.0.37 (2022-09-23)
--------------

Bug fixes:
* _emerge: SpawnProcess: Avoid sandbox violations with PROPERTIES="interactive"
  when accessing /dev/tty* (bug #870310).

* _emerge: Binpkg: Don't create empty stray binpkgs (bug #870283).

* bin: gpkg-sign: Check gpg configuration before using (bug #869470).

* portage: gpkg: Allow missing files (needed for when ebuilds touch
  ${EROOT} in pkg_*) when creating binpkgs with quickpkg (bug #870229).

* portage: getbinpkg: Fix --getbinpkgonly command list with e.g. rsync (bug #866197).

* portage: checksum: Fix PORTAGE_CHECKSUM_FILTER. Regression from 3.0.31.

portage-3.0.36 (2022-09-09)
--------------

Bug fixes:
* The layout of gpkg (new binpkg format) packages has been fixed (bug #865905).

* Fix getbinpkg fetching (bug #864160).

portage-3.0.35 (2022-08-23)
--------------

Features:
* Portage can now set scheduling policies using the PORTAGE_SCHEDULING_POLICY
  and PORTAGE_SCHEDULING_PRIORITY variables. See make.conf.example for details.

  See also https://wiki.gentoo.org/wiki/Portage_niceness.

* The header of build.log now contains the package's slot (bug #864382).

Bug fixes:
* xml: Fix XML node parsing (resulted in duplicate USE flag descriptions
  in gentoolkit, bug 858791). This code is thought to have only one
  consumer (gentoolkit, and only as of its most recent releases), so
  impact is not severe.

* portage: dbapi: porttree: fix _set_porttrees() to operate correctly if passed
  a generator. Fixes e.g. blank emerge --metadata caches in /var/cache/edb
  which affected eix (bug #865635). Regression from 3.0.31.

* logging: don't clutter with a global logger and instead scope to
  each module. Allows further logging refactoring in future.

* estrip: fix double slash for older EAPIs (bug #862600).

* estrip: avoid spurious NEEDED warning when no ELF files installed for
  < EAPI 7 (bug #749624, bug #862606).

* estrip: apply scanelf optimisation for EAPI 7+ too (bug #749624, bug #862606).

* dispatch-conf: respect (E)ROOT

* install-qa-check.d: 60pkgconfig: drop noisy pkg-config mismatched Version
  field check (bug 857654).

* install-qa-check.d: 60pkgconfig: fix --validate check by adding
  ${ED}/usr/{lib*,share} to search path.

* install-qa-check.d: 60pkgconfig: only check defined variables for
  ${EPREFIX} compliance (bug 860825).

* install-qa-check.d: 60pkgconfig: display the detected version from
  the .pc file (improves the QA warning output), and hint to the user/developer
  about the existence of QA_PKGCONFIG_VERSION to silence the warning.

* install-qa-check.d: 60pkgconfig: use eqatag for nicer output.

* install-qa-check.d: 60pkgconfig: use ver_test where possible in version
  comparison checks to avoid warning if the Version field in the .pc file
  is equivalent to the ebuild version.

* install-qa-check.d: 80libraries: include Darwin/Mach-O objects in checks.

* install-qa-check.d: 80multilib-strict: use file/find from Prefix instead
  of absolute paths in /usr/bin.

* install-qa-checks.d: 90gcc-warnings: add arm64, aarch64 (used by Apple),
  loongarch64, riscv64, s390x to list of 64-bit arches which affects the
  severity of some warnings (like pointer truncation).

* install-qa-check.d: 90world-writable: include EPREFIX in paths.

* portage: output: update obsolete /etc/init.d/functions.sh path.

* bin: style tweaks to conform to Gentoo style (mostly variable bracing).

* doins: fix D check, add EPREFIX check

* misc-functions.sh: add Prefix fixups, like including EPREFIX in
  INSTALL_MASK for /usr/share for noman, noinfo, nodoc.

* phase-function.sh: mark ED, EROOT read-only variables

* eapi.sh: cleanup obsolete references to unofficial 5-hdepend EAPI.

* isolated-functions.sh: sync __makeopts_jobs implementation with
  multiprocessing.eclass.

* ebuild(1): improve descriptions of various phase functions.

* emerge(1): mention --with-bdeps=n behavior for both --usepkg (-k) and
  --usepkgonly (-K) (bug #863422).

* ecompress: add option to lz4 in order to be able to compress multiple
  files at once (bug #672916).

portage-3.0.34 (2022-07-20)
--------------

Bug fixes:
* checksum: fix trying to use discard on a frozenset().

* ebuild(5): mention doexe behavior is undefined if exeinto not yet called.

* ebuild(5): fix typos.

portage-3.0.33 (2022-07-18)
--------------

Bug fixes:
* env-update: Handle BROOT vs ROOT distinction for PATH (and other
  variables like PREROOTPATH and ROOTPATH). The issue being that
  only some variables are relevant for execution (and hence need
  to be derived from BROOT), while others need to correspond to
  EROOT for e.g. library paths. This should help with Clang
  stage building.

* Build: Fix test suite file data processing (copying of .gnupg data
  for the gpkg tests led to a failure in src_test in the portage ebuild).

* emerge: drop obsolete fixpackages warning (as a result of refactoring,
  started to show on every emerge, but is harmless and left over
  from many years ago). Bug #858407.

* quickpkg: Fix quoting/splitting of BINPKG_COMPRESS_FLAGS arguments. Bug #857933.

* estrip: fix double prefix (regression from "don't call estrip twice" fix
  in 3.0.31). Bug #858818.

* ebuild(5): dolib, libopts: mention dolib, libopts being banned in EAPI 7.

* ebuild(5): dohtml: mention dohtml is banned in EAPI 7.

* ebuild(5): hasv: mention hasv is banned in EAPI 8.

* ebuild(5): dosym: mention dosym -r for EAPI 8.

* ebuild(5): einstall: mention einstall was banned in EAPI 6.

* ebuild(5): econf: add --docdir and --htmldir for EAPI 6,
  add --with-sysroot for EAPI 7, add --datarootdir and --disable-static for EAPI
  8.

* ebuild(5): econf: drop --disable-dependency-tracking from "example"
  because it's confusing (implies it was always added, even before EAPI 4).

* ebuild(5): modernize examples slightly.

portage-3.0.32 (2022-07-11)
--------------

Bug fixes:
* Fix marking all news items as relevant. See bug #857669.

* Allow nested ebegin again while there's a lack of consensus on banning it.

* Fix use of deprecated (now removed) getchildren() call in XML parser,
  which caused failures with gentoolkit. See bug #857537. (Note that this
  was not originally in the release notes for 3.0.32, but the fix was in
  3.0.32).

* Fix doc generation by removing reference to removed EAPIs. See bug #857486.

portage-3.0.31 (2022-07-10)
--------------

Breaking changes:
* repoman support dropped. Please migrate to pkgcheck. See bug 835013.

* Remove support for never-official EAPIs: "4-python", "5-progress".
  Further cleanups as a result allowed removal of "USE alias" support too.

* Drop support for Python 3.6. It's been EOL upstream since 2021-12-23.
  The minimum version of Python for Portage is now Python 3.7.

Features:
* GLEP 78 "gpkg" binary package format support, including the ability to sign
  binpkgs! See bug 500630, bug 659864, bug 672672, bug 773259, bug 820578.

  This is still somewhat experimental!

  To try it out:
  - set BINPKG_FORMAT="gpkg" in make.conf;

  - optionally, set FEATURES="binpkg-signing binpkg-request-signature", and so on.
    See cnf/make.conf.example for the full details, options, and documentation.

* emerge: Add -X short option for --exclude.

* emerge: Support the "foot" terminal for title updates.

* Recognize LoongArch ABIs in multilib_category.

* depclean: Return failure via exit code if requested packages
  aren't depcleaned. See bug 851750.

* estrip: Optimize calls (avoid duplicate call) by using previously
  collected scanelf data. See bug 749624

* autoclean: Optimize unmerges by only enabling autoclean for global
  updates and/or depcleans. This avoids needing to iterate over all
  installed packages after each individual removal.

* vartree: Optimize by skipping `env-update` call (which is expensive, as
  it ends up calling `ldconfig` to regenerate ld.so.cache) if no files
  were installed (e.g. virtual/).

* vartree: Optimize by avoiding VDB lock contention (avoid taking
  lock if no blockers).

* QA: warn if 'eend' is called without a corresponding 'ebegin',
  and vice-versa: if 'ebegin' is called without a corresponding 'eend'.
  See bug 835824 and bug 835823.

* QA: install-qa-check.d: Add 60pkgconfig check which:
  - checks libdir in installed .pc files
  - checks paths not respecting EPREFIX in .pc files
  - runs pkg-config --validate on .pc files
  - checks for mismatched version in .pc files vs ${PV}. Ebuilds can override
    this using QA_PKGCONFIG_VERSION.

* QA: install-qa-check.d: Update 20runtime-directories to warn on /var/tmp
  usage too.

* emerge: Deduplicate atoms in 'dropped' message for --keep-going.

* dispatch-conf: Warn about changing the 'use-rcs' setting. See bug 837533.

* Lots of general refactoring and code cleanups.

Bug fixes:
* Disable SONAME dependencies by default again (i.e. set --ignore-soname-deps=y
  to default on). See bug 687956 and bug 829623.

  This was done because of problems caused with depcleans.

* git: Mark repository as safe for newer versions of git (>= git-2.35.2).
  See bug 838223 and bug 838271.

* dosym: Fix EAPI check for '-r' (relative) flag. It would previously allow
  using an EAPI 8 only feature.

* ebuild: Fix re-sourcing IDEPEND (EAPI 8+).

* estrip: Fix race when creating build-id debug symlinks. See bug 831927.

* MergeProcess: Fix bug causing unnecessary ld.so.cache regeneration even
  when no libraries were installed. This used to work in the past, so is viewed
  as a bug fix, rather than an optimization, although it's a bit of both.
  See bug 836375.

* MiscFunctionsProcess: Avoid clobbering the main sandbox.log if a "die hook"
  is invoked. This should prevent sandbox.log being blank in many cases.

* Drop /run warning as it ended up being too noisy and we've decided
  to workaround/fix (depending on your perspective) the issues in packages
  themselves, given only one package was actually at fault here: bug 832853.

* movefile: Merge symlinks atomically. This should reduce the risk of build
  failures during parallel builds (multiple emerge jobs). See bug 836400.

* Improve error message when Bash version is too old for an ebuild
  to be read.

* Minor improvements to 'die' output.

* Undo dep_zapdeps change in 3.0.29 as it introduced a regression w.r.t solving
  blockers for gentoo-kernel. See bug 833014.

* QA: install-qa-check.d: update 95empty-dirs to mention Portage behavior
  change for EAPI 8+.

* QA: install-qa-check.d: Fix usage of obsolete 'egrep' and 'fgrep' which
  now emit warnings with an upcoming grep release (> 3.7).

* portageq: Ditto re egrep/fgrep.

* util: Fix Whirlpool implementation breaking (crashing/failing tests) with
  OpenSSL 3. This wasn't noticed before as previously, OpenSSL exposed its
  Whirlpool implementation by default, whereas it's now marked as legacy.
  See bug 846389.

* socks5-server: Fix Python 3.10 DeprecationWarning. See bug 794115.

* portage.eapi: Include workaround for consumers with misconfigured
  logger to avoid needing a newer gentoolkit. See bug 838406.

* CI: Run 'black' on remaining files missed in the previous conversion and fix
  CI to catch regressions related to this.

* CI: Test with Python 3.11.

* CI: Drop references to unsupported Python 3.6.

* make.conf: document MAKEOPTS defaulting to the number of processors for
  the number of jobs in make.conf(5).

* dispatch-conf: fix description of 'frozen-files' format in dispatch-conf.conf
  man page. See bug 830618.

portage-3.0.30
--------------
* fix warning/crash on bad PROVIDES in package. See bug 828966.
* avoid infinite loop in _optimized_copyfile. See bug 828844.

portage-3.0.29
--------------
* check for inconsistent/missing PROVIDES during package (and binpkg)
  installation. See bug 811462.
* avoid pulling in newer slots for upgrades in some cases. See bug 828136.
* enable SONAME dependencies for binpkgs by default. See bug 687956.
* add new options to allow avoiding building/using binpkgs for live ebuilds:
  FEATURES="binpkg-live" and --usepkg-exclude-live.
* add emphasis in output to user patches being applied.

portage-3.0.27
--------------
* improve blocker output to make it clear which blockers
  are not satisfied.
* use distinct colors for einfo/elog and ewarn/eqawarn.

portage-3.0.26
--------------
* fix broken FILESDIR copying logic.

portage-3.0.25 (yanked)
-----------------------
* fix Python < 3.8 compatibility of FILESDIR copying code.

portage-3.0.24
--------------
* remove doebuild(dbkey=...) support that was deprecated since 2013.
* pass metadata internally using key=value format.
* include INHERIT key md5-cache to match pkgcore.
* reformat Portage code using black.
* fix Python 3.10 deprecation warnings.
* replace compat_coroutine use with modern async.

portage-3.0.23
--------------
* enable autogroup scheduling with pid-sandbox if possible. This should
  make the kernel respect niceness better.
* add support conf-update.d hooks.
* display all preserved libraries with --verbose.
* restore QA warnings when EXPORT_FUNCTIONS is called before inherit.
* catch more setuptools warnings via the respective QA check.

portage-3.0.22
--------------
* USE flags are now sorted with respect to numerical segments in emerge
  output (e.g. python3_10 comes after python3_9).
* setuptools version normalization warnings are now ignored.
* FEATURES=installsources no longer copies irrelevant directory trees
  with gcc-11.
* sdist archives built using "build" now include setup.py.

portage-3.0.21
--------------
* EAPI 8 fixups.

portage-3.0.20
--------------
* Finalize EAPI 8.

portage-3.0.19
--------------
* Enable EAPI 8.

portage-3.0.18
--------------
* profile-repo-deps is supported in layout.conf profile-formats.

portage-3.0.16
--------------
* emirrordist supports the content-hash distfiles mirror layout.

portage-3.0.15
--------------
* FEATURES=binpkg-multi-instance is now enabled by default.

portage-3.0.13
--------------
* FETCHCOMMAND now supports a \${DIGESTS} placeholder which expands
  to a space separated list of digests. Refer to the FETCHCOMMAND
  documentation in the make.conf(5) man page.

portage-3.0.6
--------------
* emerge --search now detects regular expressions automatically. This
  behavior is controlled by the --regex-search-auto option.
* make.conf now treats variable names that begin with two underscores
  as local variables which are not displayed by emerge --info --verbose.
* egencache --update-pkg-desc now has a --verbose option which causes
  it to emulate esync --verbose output.
* env-update now generates a systemd user-session environment in a file
  named /etc/environment.d/10-gentoo-env.conf.
* binrepos.conf is a new configuration file that acts as a substitute
  for the PORTAGE_BINHOST variable, and allows each repository to have
  a separate FETCHCOMMAND which can be used to customize authentication.
  This file is documented in the portage(5) man page.

portage-3.0.0
--------------
* Dropped support for Python 2.x.

portage-2.3.101
--------------
* The new PORTAGE_LOG_FILTER_FILE_CMD make.conf(5) variable specifies a
  command that filters build log output to a log file. In order to
  filter ANSI escape codes from build logs, ansifilter(1) is a
  convenient setting for this variable.

portage-2.3.100
--------------
* New BINPKG_COMPRESS=zstd default (does not apply to installed systems
  using the old bzip2 default).

portage-2.3.97
--------------
* Support for the PORTAGE_LOG_FILTER_FILE_CMD variable has been
  temporarily removed due to bug 716636.

portage-2.3.90
--------------
* The new PORTAGE_LOG_FILTER_FILE_CMD make.conf(5) variable specifies a
  command that filters build log output to a log file. In order to
  filter ANSI escape codes from build logs, ansifilter(1) is a
  convenient setting for this variable.

portage-2.3.80
--------------
* The emerge --quickpkg-direct option enables use of installed packages
  directly as binary packages. It can be used to create minimal runtime
  container images (which need not include a package manager), or to
  enable a live image to act as a binary installer that uses packages
  installed in the live image as a source of binary packages. This
  option is especially useful in combination with --usepkgonly and
  --ignore-soname-deps=n options, allowing implicit system dependencies
  such as libc to be automatically accounted for.

portage-2.3.77
--------------
* The emerge --autounmask option is now disabled by default, except for
  portions of behavior which are controlled by the --autounmask-use and
  --autounmask-license options. For backward compatibility, previous
  behavior of --autounmask=y and --autounmask=n is entirely preserved.
  Users can get the old behavior simply by adding --autounmask to the
  make.conf EMERGE_DEFAULT_OPTS variable.

portage-2.3.72
--------------
* The glsa-check program is now provided by portage, and it has been
  removed from gentoolkit. See bug 463952.

portage-2.3.70
--------------
* The @live-rebuild package set now searches for PROPERTIES=live, see
  bug 233589. The @deprecated-live-rebuild package set provides the
  old behavior which was based on inherited eclasses.

portage-2.3.64
--------------
* New (council approved) default locations for the Gentoo repository,
  distfiles, and binary packages (does not apply to installed systems
  using the old defaults):
  /usr/portage -> /var/db/repos/gentoo
  /usr/portage/distfiles -> /var/cache/distfiles
  /usr/portage/packages -> /var/cache/binpkgs

portage-2.3.53
--------------
* Renamed PORT_LOGDIR and PORT_LOGDIR_CLEAN variables to
  PORTAGE_LOGDIR and PORTAGE_LOGDIR_CLEAN to match other existing
  similar variables
* Enable FEATURES={ipc,network,pid}-sandbox by default

portage-2.3.42
----------------
* Sync with rsync quarantines data prior to verification, using the
  rsync --link-dest option (can be disabled by setting
  "sync-allow-hardlinks = no" in repos.conf).
* Sync with git quarantines data prior to verification, see
  https://wiki.gentoo.org/wiki/Portage_Security#git-mirror_repo.
* Sync with shallow git pull is supported, by "setting sync-depth = 1"
  in repos.conf.

portage-2.3.32
----------------
* EAPI 7 support.

portage-2.3.29
----------------
* Portage API consumers can use asyncio with portage's internal event
  loop, see portage.util.futures.unix_events.DefaultEventLoopPolicy.

portage-2.3.25
----------------
* Experimental support for EAPI 7_pre1.

portage-2.3.20
----------------
* Support RESTRICT=network-sandbox in ebuilds.

portage-2.3.17
----------------
* The doins ebuild helper has been rewritten in python for performance, and
  it does in-kernel file copying on Linux.

portage-2.3.14
----------------
* Repository metadata/layout.conf supports manifest-required-hashes
  attribute (default value is SHA512).

portage-2.3.12
----------------
* better_cache implemented to use less expensive os.listdir() instead of
  os.stat() operations to scan for ebuilds. Avoids exhaustively scanning
  overlays for all ebuilds which allows Portage to not slow down significantly
  with lots of overlays enabled. (Daniel Robbins)

portage-2.3.7
-----------------
* eapply_user combines patch basenames from all matched directories into a
  list, and applies them in POSIX sorted order. This allows patches in
  more-specific directories to override patches of the same basename found
  in less-specific directories. An empty patch (or /dev/null symlink) negates
  a patch with the same basename found in a less-specific directory.
* FEATURES=multilib-strict no longer recurses into subdirectories, in order
  to avoid false-positives. The MULTILIB_STRICT_EXEMPT variable only served
  to filter false-positives that were triggered by recursion, so it will no
  longer be needed.
* New emerge --autounmask-keep-keywords and --onlydeps-with-rdeps=<y|n>
  options.
* Set compression method for binpackages via BINPKG_COMPRESS variable
* Support for environment variables for git cmd in repos.conf via sync-git-env


portage-2.3.5
-----------------
* Numerous patches updating checksums code and python module imports for them
  including new checksum methods
* New linux in kernel movefile support via a new "C" extension module


portage-2.3.3
-----------------
* Reverted commits:
    - Bug 552814 Revert "GitSync.update: respect sync-depth
                 (Shallow fetch is not a practical default at this time,
                  given performance issues introduced by `git update-index`
                  and `git prune` (see bug 599008).
                 )


portage-2.3.1
-----------------
* Support News-Item-Format 2.0
* emerge: add --fuzzy-search and --search-similarity
* Add emerge --autounmask-continue option

portage-2.3.0
-----------------
* Final release
* Includes numerous bugfixes

portage-2.3.0_rc1
-----------------
* New split release for the repoman Q/A tool
* Includes the stage2 rewite of the repoman code base


portage-2.2.26
--------------
* EAPI 6 stable portage release


portage-2.2.25
--------------
* EAPI 6 final fully implemented.


portage-2.2.22
-------------
* Stage 1 of the repoman re-write code merged in to master branch
  This is the first release of the new code base.


portage-2.2.19
-------------
* The squashdelta sync module was removed for separate installation
  and development work


portage-2.2.19
-------------
* websync module now fully renamed to webrsync
* New squashdelta sync module for downloading full or updates for a squasfs tree
  requires dev-util/squashmerge be installed
* New binpkg-multi-instance feature allows for multiple variations
    (USE settings) to be saved in the pkgdir and index.


portage-2.2.16
-------------
* New portage plug-in sync system.
    Read the news anouncement for more details of the changes in config
    settings and operation.
* New native portage postsync.d capability
* New native portage repo.postsync.d capability
* New native indexed search capability for decent search speed
* Tentative EAPI 6 patches for additional testing


portage-2.2.14
-------------
* Remaining bugs in build/install system should be fixed.


portge-2.2.14_rc1
-------------
* Many new build/installation system errors fixed.


portage-2.2.13
-------------
* New setup.py build system and distutils-r1 ebuild at EAPI 5
* PORTAGE_{BIN,PYM}_PATH variables. If you want to call internal portage tools,
    you need to query PORTAGE_BIN_PATH and PORTAGE_PYM_PATH, use them
    and re-export them.
* New @changed-deps set to update packages which need dependecy change updates.


portage-2.2.12
-------------
* New emaint module "merges"  for finding and fixing failed merges
  If a pkg fails to merge to the live filesystem correctly, that pkg may
  not work correctly if at all.  This module scans the installed pkg database
  for those failures and can re-emerge those packages.

portage-2.2.1
-------------

* Add cgroups, ipc-sandbox, and network-sandbox FEATURES.

portage-2.2
-------------

* Add extended set configuration via /etc/portage/sets.conf. See
  /usr/share/portage/config/sets/portage.conf for examples.

portage-2.1.11.20
-------------
* Add support for EAPI 5. Refer to the PMS EAPI Cheat Sheet, portage's html
  docs installed with USE=doc, or `man 5 ebuild` for more info about EAPI 5.
* Add support for FEATURES=preserve-libs which preserves libraries when the
  sonames change during upgrade or downgrade, and the @preserved-rebuild
  package set which rebuilds consumers of preserved libraries.
* Add link level dependency awareness to emerge --depclean and --prune actions
  in order to protect against uninstallation of required libraries. Refer to
  the --depclean-lib-check option in the emerge(1) man page.

portage-2.1.11
-------------

* Add support for experimental EAPI "4-slot-abi". Refer to the corresponding
  html documentation that is installed with USE=doc, and also to the emerge(1)
  man page for information about the related --ignore-built-slot-operator-deps and
  --rebuild-if-new-slot options.

portage-2.1.10
-------------

* Improve handling of repositories/overlays for cases in which the same ebuild
  is provided by multiple repositories but with different masking status, and
  support for repository constraints on atoms (atom::repo) in configuration
  files.
* Add emerge --rebuild-if-* options that trigger rebuilds of reverse
  dependencies when packages are rebuilt or updated. Related --rebuild-exclude
  and --rebuild-ignore options can be used to avoid rebuilds for specific
  packages.
* Add emerge --reinstall-atoms, --useoldpkg-atoms, and --usepkg-exclude options
  which can be used to alter selection rules for specific packages.
* Add FEATURES=parallel-install and ebuild-locks, allowing for greater
  parallelization when installing packages (by using finer-grained locks).

portage-2.1.9.27
-------------

* Add support for EAPI 4. Refer to the PMS EAPI Cheat Sheet, portage's html
  docs installed with USE=doc, or `man 5 ebuild` for more info about EAPI 4.
  Bug #273620 tracks EAPI 4 implementation in portage.

portage-2.1.9
-------------

* There is a new ipc (inter-process communication) USE flag which is enabled
  by default. This allows portage to communicate with running ebuild processes,
  for things like best_version, has_version, and die calls in nested processes.
  This flag should remain enabled unless it is found to be incompatible with a
  specific profile or environment. When enabled, it fixes bug #278895,
  bug #315615, and makes subshell die support more robust (so that repoman's
  ebuild.nesteddie check is irrelevant).

portage-2.1.8
-------------
* The top-level __init__.py for the portage python package has been split into
  many smaller python modules, making the code easier to navigate and allowing
  small parts of the portage api to be imported with less overhead.

portage-2.1.7.17
-------------
* Add support for EAPI 3. This adds support for installation prefix, including
  new EPREFIX, ED, and EROOT variables which are used by econf and einstall
  helpers. Also, EAPI 3 adds xz extension support to the unpack helper.

portage-2.1.7
-------------

* Add license visibility filtering (GLEP 23)
* Add --accept-properties option for emerge which allows you to use
  --accept-properties=-interactive in order to temporarily exclude
  interactive updates.
* Add support for Python 3.0. At least Python 2.6 is now required in order to
  support the new syntax which is used by Python 3.0.

portage-2.1.6
-------------

* Add support for a new EAPI="2" value. For more information about new EAPI
  features, refer to the "Ebuild" chapter of the html documentation that is
  installed with portage.
* Add PORTAGE_IONICE_COMMAND setting for make.conf which is called to adjust
  IO priority on portage and it's subprocesses.
* Add emerge --jobs and --load-average options which specify behavior
  for building packages in parallel or for generating metadata in parallel
  with emerge --regen.
* Add emerge --keep-going option to continue as much as possible after
  an error. When an error occurs, dependencies are recalculated for
  remaining packages and any with unsatisfied dependencies are
  automatically dropped. The --skipfirst option automatically drops
  packages in the same way, and also drops any masked packages.
* Add git and subversion support for repoman.
* It is now possible to use `emerge <file>` to reinstall the package that
  installed a particular file. Package contents entries are indexed to
  improve performance. A command such as `emerge /lib/modules` can serve
  as a decent substitute for module-rebuild.
* Namespace sanitizing: move all portage related code into portage.* namespace,
  rename portage_foo modules to portage.foo (but keep symlinks for compability)
* Add support for news items (GLEP 42)
* Add FEATURES=protect-owned which is identical to the collision-protect
  feature except that files may be overwritten if they are not explicitly
  listed in the contents of a currently installed package.

portage-2.1.5
-------------

* For extra careful dependency handling, emerge has a new --complete-graph
  option that causes it to consider the deep dependencies of all packages from
  the system and world sets. With this option enabled, emerge will bail out
  if it determines that the given operation will break any dependencies of
  the packages that have been added to the graph. Unlike the --deep option,
  the --complete-graph option does not cause any more packages to be updated
  than would have otherwise been updated with the option disabled.
* Blockers are now resolved automatically in many more cases
  than before.  When it's safe, blocked packages are uninstalled
  automatically so that users are no longer inconvenienced with the
  task. Automatically uninstalled packages are displayed in the merge
  list, marked "uninstall" and highlighted in red. With the --tree
  option enabled, it's possible to see which package(s) caused other
  ones to be automatically uninstalled.
* The dependency resolver now has a feedback mechanism that helps make atom
  selections more consistent with previous selections that have been added to
  the graph. This solves some common cases of bug #1343.

portage-2.1.4
-------------

* After the initial setup phase, the original ebuild and eclasses are no
  longer needed because the same ebuild environment is reused for the
  entire lifecycle of the package, including uninstallation.
* The emerge --search action supports searching of both installed and binary packages
  The --usepkg and --usepkgonly options control which repositories are searched.

portage-2.1.3
-------------

* Allow per-module setting of PORTAGE_ELOG_CLASSES
* Add new elog module "echo" to simply display messages when emerge exits
* Add ** as new token for package.keywords to bypass the keyword visibility layer
* USE_EXPAND variables such as LINGUAS support a * wildcard that will enable
  all of the corresponding flags that are listed in IUSE for a given package.
  USE_EXPAND wildcards such as linguas_* are supported in USE and package.use.
* The merge process preserves the modification timestamp of files that it
  installs. The unmerge process will not uninstall files that are claimed by
  another package in the same slot.
* PDEPEND is now installed as soon as possible so that it behaves more like
  RDEPEND.  This makes PDEPEND more useful for breaking the dependency cycles
  that are sometimes triggered by RDEPEND and DEPEND.
* Enable "echo" and "save_summary" elog modules by default
* Fix -* handling in package.keywords to work as intended (reset the accepted
  keywords list), also see RELEASE-NOTES.
* Make elog functionality available to python code

portage-2.1.2
-------------

* Ebuilds support default USE flags via +flag in IUSE.
* New-style virtuals are now usable for packages that depend on themselves for
  bootstrap.
* Profiles support multiple inheritance and package.use.
* CONFIG_PROTECT and CONFIG_PROTECT_MASK both support files (not just
  directories).
* Collision protection handles symlinks properly.
* Dependencies can be satisfied by installed packages that do not have matching
  ebuilds in the portage tree or overlay.
* Emerge automatically ignores blockers that are made irrelevant by an upgrade.
* Emerge supports "reverse blocker detection" which means that the blockers of
  installed packages will always be respected.
* Emerge builds a complete dependency graph in order to ensure correct merge
  order and detection of circular dependencies.
* The world and system sets allow automatic update of all installed slots.
* DEPEND atoms support SLOT dependencies of the form ${CATEGORY}/${PN}:${SLOT}.
* Development: Extend PYTHONPATH support to allow overriding the hardcoded
  /usr/lib/portage/pym for development/testing purposes
* New "finalize" hook for elog modules enabling modules to perform actions on
  shutdown (like dispatching collected messages).
* New elog modules mail_summary and save_summary that act like the mail/save
  modules except that they merge messages from multiple packages in a single
  file/mail.
* New QA loglevel and matching eqawarn function
* `ebuild foo test` now always runs src_test if available
* If DOC_SYMLINK_DIR is set portage installs symlinks to html documention there
* FEATURES="test" automatically implies USE="test".

portage-2.1.1
-------------

* Profiles support use.force, package.use.force, and package.use.mask files.

portage-2.1 (ongoing via pre releases)
------------

* FEATURES="confcache" integration; global caching to speed up configure calls,
  requires dev-util/confcache
* elog framework and accompanying modules for logging ebuild warnings, errors
  and general notices. Collects eerror/ewarn/elog/einfo messages.
* New elog function (should replace einfo in many cases)
* version syntax enhancements allowing multiple suffixes and a new 'cvs'
  version prefix for denoting "live sources" ebuilds.
* config files as directories enabling more flexible settings management.
* Addition of an register_die_hook method that allows ebuild/eclasses to
  register functions to be called for better debugging on errors.
* Addition of pre and post user hookable functions for each ebuild phase, accessible
  via portage bashrc.  Example would be pre_src_unpack .
* cache refactoring- runtime improvement from 35% -> 65%.
* Intelligently handle and display USE_EXPAND-based IUSE variables.
* FEATURES="parallel-fetch".  Download in parallel to compilation.
* Include a "changed or new" USE flag output when --verbose isn't specified.
* Support for splitting out debug information into separate files in
  /usr/lib{,32,64}.
* exec subsystem refactoring (now with less bugs!)
* Added sha256 and rmd160 hashes for digests/manifests
* Make --emptytree only apply to ${ROOT} rather than always including /.
* Allow packages to be upgraded that are only depended on via a
  "|| ( =cat/pkg-1* =cat/pkg-2* )" construct.
* Ebuild output is no longer cut off early when using PORTAGE_LOGDIR.
* Distfiles indirection- $DISTFILES access goes through a tmp dir to fail
  access to files not listed in SRC_URI.
* Emerge now uses --resume to restart itself after portage upgrade.
* Atomic file updates via the new atomic_ofstream class.
* Global updates and fixpackages performance optimizations.
* Tests show that file locking is now more reliable.
* A bash call stack is printed when an ebuild dies in ebuild.sh.
* New rsync option handling by using a generic PORTAGE_RSYNC_EXTRA_OPTS variable
* Manifest2 support that will allow digest-* files to be eliminated from the tree.
