From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <gentoo-commits+bounces-1573266-garchives=archives.gentoo.org@lists.gentoo.org>
Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
	 key-exchange X25519 server-signature RSA-PSS (2048 bits))
	(No client certificate requested)
	by finch.gentoo.org (Postfix) with ESMTPS id 3C252158099
	for <garchives@archives.gentoo.org>; Fri, 24 Nov 2023 20:06:24 +0000 (UTC)
Received: from pigeon.gentoo.org (localhost [127.0.0.1])
	by pigeon.gentoo.org (Postfix) with SMTP id 395CF2BC061;
	Fri, 24 Nov 2023 20:06:23 +0000 (UTC)
Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
	 key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
	(No client certificate requested)
	by pigeon.gentoo.org (Postfix) with ESMTPS id 073C92BC061
	for <gentoo-commits@lists.gentoo.org>; Fri, 24 Nov 2023 20:06:23 +0000 (UTC)
Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
	 key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
	(No client certificate requested)
	by smtp.gentoo.org (Postfix) with ESMTPS id CC2B433FE7D
	for <gentoo-commits@lists.gentoo.org>; Fri, 24 Nov 2023 20:06:21 +0000 (UTC)
Received: from localhost.localdomain (localhost [IPv6:::1])
	by oystercatcher.gentoo.org (Postfix) with ESMTP id 122F013A3
	for <gentoo-commits@lists.gentoo.org>; Fri, 24 Nov 2023 20:06:20 +0000 (UTC)
From: "Fabian Groffen" <grobian@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Content-Transfer-Encoding: 8bit
Content-type: text/plain; charset=UTF-8
Reply-To: gentoo-dev@lists.gentoo.org, "Fabian Groffen" <grobian@gentoo.org>
Message-ID: <1700855669.df8959465f680edf4c37f0c41b9301b6cdc7eb54.grobian@gentoo>
Subject: [gentoo-commits] proj/portage:prefix commit in: /
X-VCS-Repository: proj/portage
X-VCS-Committer: grobian
X-VCS-Committer-Name: Fabian Groffen
X-VCS-Revision: df8959465f680edf4c37f0c41b9301b6cdc7eb54
X-VCS-Branch: prefix
Date: Fri, 24 Nov 2023 20:06:20 +0000 (UTC)
Precedence: bulk
List-Post: <mailto:gentoo-commits@lists.gentoo.org>
List-Help: <mailto:gentoo-commits+help@lists.gentoo.org>
List-Unsubscribe: <mailto:gentoo-commits+unsubscribe@lists.gentoo.org>
List-Subscribe: <mailto:gentoo-commits+subscribe@lists.gentoo.org>
List-Id: Gentoo Linux mail <gentoo-commits.gentoo.org>
X-BeenThere: gentoo-commits@lists.gentoo.org
X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply
X-Archives-Salt: 98ea6b79-dbab-4478-8317-4aa80c49cbbe
X-Archives-Hash: fb468c0679290de5e14897e72b8daa86

commit:     df8959465f680edf4c37f0c41b9301b6cdc7eb54
Author:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Fri Nov 24 19:54:29 2023 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Fri Nov 24 19:54:29 2023 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=df895946

Merge branch 'master' into prefix

Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>

 .builds/ci.yml                                     |  38 +-
 .builds/lint.yml                                   |  12 +-
 .builds/setup-python.sh                            |   2 +
 .github/workflows/ci.yml                           |  38 +-
 .github/workflows/lint.yml                         |  15 +-
 .pre-commit-config.yaml                            |  10 +-
 DEVELOPING                                         |  16 +-
 MANIFEST.in                                        |  30 -
 NEWS                                               | 228 +++++
 README.md                                          |   2 +-
 TEST-NOTES                                         |   2 +-
 bin/cgroup-release-agent                           |   2 -
 bin/dispatch-conf                                  |  27 +
 bin/ebuild                                         | 102 +--
 bin/ebuild-helpers/portageq                        |   8 -
 bin/ebuild-helpers/prepall                         |   2 +-
 bin/ebuild-helpers/prepalldocs                     |   9 +-
 bin/ebuild-helpers/prepallinfo                     |   9 +-
 bin/ebuild-helpers/prepallman                      |   9 +-
 bin/ebuild-helpers/prepallstrip                    |  18 +-
 bin/ebuild-helpers/prepinfo                        |  41 +-
 bin/ebuild-helpers/prepman                         |  13 +-
 bin/ebuild-helpers/prepstrip                       |  14 +-
 bin/emaint                                         |  27 +-
 bin/emerge                                         | 151 ++--
 bin/emerge-webrsync                                |  40 +-
 bin/env-update                                     |  19 +-
 bin/estrip                                         |   4 +-
 bin/etc-update                                     |  13 +-
 bin/install-qa-check.d/05double-D                  |   2 +-
 bin/install-qa-check.d/05prefix                    |   4 +-
 bin/install-qa-check.d/60openrc                    |   2 +-
 bin/meson.build                                    |  73 ++
 bin/misc-functions.sh                              |  13 -
 bin/phase-functions.sh                             |   5 +-
 bin/phase-helpers.sh                               |   8 +-
 bin/portageq-wrapper                               |   1 -
 bin/save-ebuild-env.sh                             |   2 +-
 cnf/make.globals                                   |   5 +-
 cnf/meson.build                                    | 144 ++++
 cnf/repos.conf                                     |   2 +-
 doc/api/meson.build                                |  43 +
 doc/config/sets.docbook                            |   6 +-
 doc/fragment/meson.build                           |   5 +
 doc/fragment/version.in                            |   1 +
 doc/meson.build                                    |  57 ++
 doc/package/ebuild/eapi/4.docbook                  |   2 +-
 doc/portage.docbook                                |   2 -
 doc/qa.docbook                                     |   4 +-
 lib/_emerge/AbstractEbuildProcess.py               |  95 +--
 lib/_emerge/BinpkgVerifier.py                      |   4 +-
 lib/_emerge/EbuildFetcher.py                       |  31 +-
 lib/_emerge/Package.py                             |   4 +-
 lib/_emerge/Scheduler.py                           |  24 +-
 lib/_emerge/SpawnProcess.py                        | 177 ++--
 lib/_emerge/UseFlagDisplay.py                      |   2 +-
 lib/_emerge/actions.py                             |  85 +-
 lib/_emerge/create_depgraph_params.py              |  10 +-
 lib/_emerge/depgraph.py                            | 322 +++++--
 lib/_emerge/main.py                                |  18 +-
 lib/_emerge/meson.build                            | 101 +++
 lib/_emerge/resolver/meson.build                   |  14 +
 lib/_emerge/search.py                              |  14 +-
 lib/meson.build                                    |   2 +
 lib/portage/__init__.py                            |  55 +-
 lib/portage/_compat_upgrade/meson.build            |  10 +
 lib/portage/_emirrordist/ContentDB.py              |   4 +-
 lib/portage/_emirrordist/DeletionTask.py           |  14 +-
 lib/portage/_emirrordist/FetchIterator.py          |   2 +-
 lib/portage/_emirrordist/FetchTask.py              |   3 +-
 lib/portage/_emirrordist/MirrorDistTask.py         |  24 +-
 lib/portage/_emirrordist/main.py                   |  14 +-
 lib/portage/_emirrordist/meson.build               |  15 +
 lib/portage/_sets/__init__.py                      |  10 +-
 lib/portage/_sets/files.py                         |  13 +-
 lib/portage/_sets/meson.build                      |  15 +
 lib/portage/_sets/shell.py                         |   2 +-
 lib/portage/binrepo/config.py                      |   2 +-
 lib/portage/binrepo/meson.build                    |   8 +
 lib/portage/cache/index/meson.build                |   9 +
 lib/portage/cache/mappings.py                      | 322 +++----
 lib/portage/cache/meson.build                      |  20 +
 lib/portage/cache/sql_template.py                  |   4 +-
 lib/portage/cache/sqlite.py                        |  19 +-
 lib/portage/cache/template.py                      |  10 +-
 lib/portage/const.py                               |  70 +-
 lib/portage/dbapi/_MergeProcess.py                 | 105 ++-
 lib/portage/dbapi/_SyncfsProcess.py                |  15 +-
 lib/portage/dbapi/__init__.py                      |  45 +-
 lib/portage/dbapi/bintree.py                       | 145 +++-
 lib/portage/dbapi/meson.build                      |  22 +
 lib/portage/dbapi/porttree.py                      |  41 +-
 lib/portage/dbapi/vartree.py                       | 108 +--
 lib/portage/dep/__init__.py                        |  17 +-
 lib/portage/dep/_slot_operator.py                  |   8 +-
 lib/portage/dep/dep_check.py                       |   6 +-
 lib/portage/dep/meson.build                        |  12 +
 lib/portage/dep/soname/SonameAtom.py               |   6 +-
 lib/portage/dep/soname/meson.build                 |  10 +
 lib/portage/elog/meson.build                       |  16 +
 lib/portage/elog/mod_echo.py                       |  16 +-
 lib/portage/emaint/main.py                         |   2 +-
 lib/portage/emaint/meson.build                     |  11 +
 lib/portage/emaint/modules/binhost/meson.build     |   8 +
 lib/portage/emaint/modules/config/meson.build      |   8 +
 lib/portage/emaint/modules/logs/meson.build        |   8 +
 lib/portage/emaint/modules/merges/merges.py        |   2 +-
 lib/portage/emaint/modules/merges/meson.build      |   8 +
 lib/portage/emaint/modules/meson.build             |  16 +
 lib/portage/emaint/modules/move/meson.build        |   8 +
 lib/portage/emaint/modules/resume/meson.build      |   8 +
 lib/portage/emaint/modules/sync/meson.build        |   8 +
 lib/portage/emaint/modules/sync/sync.py            |   2 +-
 lib/portage/emaint/modules/world/meson.build       |   8 +
 lib/portage/env/config.py                          |   2 +-
 lib/portage/env/meson.build                        |  10 +
 lib/portage/gpg.py                                 |   4 +-
 lib/portage/gpkg.py                                | 172 +---
 lib/portage/installation.py                        |  21 +
 lib/portage/locks.py                               |  52 +-
 lib/portage/meson.build                            |  74 ++
 lib/portage/news.py                                |  10 +-
 lib/portage/output.py                              |   4 +-
 .../package/ebuild/_config/VirtualsManager.py      |   4 +-
 .../package/ebuild/_config/env_var_validation.py   |   2 +-
 lib/portage/package/ebuild/_config/helper.py       |   2 +-
 lib/portage/package/ebuild/_config/meson.build     |  17 +
 .../package/ebuild/_config/special_env_vars.py     |   2 +
 lib/portage/package/ebuild/_ipc/meson.build        |  10 +
 lib/portage/package/ebuild/_metadata_invalid.py    |   2 +-
 .../ebuild/_parallel_manifest/ManifestProcess.py   |  30 +-
 .../ebuild/_parallel_manifest/ManifestScheduler.py |   2 +-
 .../package/ebuild/_parallel_manifest/meson.build  |  10 +
 lib/portage/package/ebuild/config.py               |  12 +-
 lib/portage/package/ebuild/digestgen.py            |   2 +-
 lib/portage/package/ebuild/doebuild.py             |  50 +-
 lib/portage/package/ebuild/fetch.py                |   4 +-
 lib/portage/package/ebuild/meson.build             |  23 +
 lib/portage/package/meson.build                    |   9 +
 lib/portage/process.py                             |  27 +-
 lib/portage/proxy/meson.build                      |   9 +
 lib/portage/repository/config.py                   |   4 +-
 lib/portage/repository/meson.build                 |  10 +
 .../repository/storage/hardlink_quarantine.py      |   2 +-
 lib/portage/repository/storage/hardlink_rcu.py     |   6 +-
 lib/portage/repository/storage/meson.build         |  11 +
 lib/portage/sync/controller.py                     |  11 +-
 lib/portage/sync/meson.build                       |  14 +
 lib/portage/sync/modules/cvs/cvs.py                |   4 +-
 lib/portage/sync/modules/cvs/meson.build           |   8 +
 lib/portage/sync/modules/git/__init__.py           |   1 +
 lib/portage/sync/modules/git/git.py                | 143 +++-
 lib/portage/sync/modules/git/meson.build           |   8 +
 lib/portage/sync/modules/mercurial/meson.build     |   8 +
 lib/portage/sync/modules/meson.build               |  14 +
 lib/portage/sync/modules/rsync/meson.build         |   8 +
 lib/portage/sync/modules/rsync/rsync.py            |  13 +-
 lib/portage/sync/modules/svn/meson.build           |   8 +
 lib/portage/sync/modules/webrsync/meson.build      |   8 +
 lib/portage/sync/syncbase.py                       |  16 +-
 lib/portage/tests/__init__.py                      | 269 +-----
 lib/portage/tests/bin/meson.build                  |  14 +
 lib/portage/tests/bin/test_doins.py                |   8 +-
 lib/portage/tests/conftest.py                      |  26 +-
 lib/portage/tests/dbapi/meson.build                |  12 +
 lib/portage/tests/dbapi/test_auxdb.py              | 103 ++-
 lib/portage/tests/dbapi/test_bintree.py            |  86 +-
 lib/portage/tests/dbapi/test_portdb_cache.py       |   2 +-
 lib/portage/tests/dep/meson.build                  |  28 +
 .../tests/dep/{testAtom.py => test_atom.py}        |   0
 ...ckRequiredUse.py => test_check_required_use.py} |   0
 ...endedAtomDict.py => test_extended_atom_dict.py} |   0
 ...fectingUSE.py => test_extract_affecting_use.py} |   0
 .../dep/{testStandalone.py => test_standalone.py}  |   0
 lib/portage/tests/ebuild/meson.build               |  17 +
 lib/portage/tests/ebuild/test_doebuild_fd_pipes.py |  42 +-
 lib/portage/tests/ebuild/test_fetch.py             |  26 +-
 lib/portage/tests/ebuild/test_ipc_daemon.py        |  25 +-
 lib/portage/tests/ebuild/test_spawn.py             |   2 +-
 lib/portage/tests/emerge/conftest.py               | 845 +++++++++++++++++++
 lib/portage/tests/emerge/meson.build               |  14 +
 lib/portage/tests/emerge/test_actions.py           |   4 +-
 lib/portage/tests/emerge/test_baseline.py          | 221 +++++
 lib/portage/tests/emerge/test_config_protect.py    |  14 +-
 .../emerge/test_emerge_blocker_file_collision.py   |   7 +-
 lib/portage/tests/emerge/test_emerge_slot_abi.py   |  14 +-
 lib/portage/tests/emerge/test_simple.py            | 724 ----------------
 lib/portage/tests/env/config/meson.build           |  12 +
 lib/portage/tests/env/meson.build                  |  10 +
 lib/portage/tests/glsa/meson.build                 |   9 +
 lib/portage/tests/glsa/test_security_set.py        |  16 +-
 lib/portage/tests/gpkg/meson.build                 |  15 +
 lib/portage/tests/gpkg/test_gpkg_checksum.py       |   2 +-
 lib/portage/tests/gpkg/test_gpkg_gpg.py            |   2 +-
 .../tests/gpkg/test_gpkg_metadata_update.py        |   2 +-
 lib/portage/tests/gpkg/test_gpkg_metadata_url.py   |   2 +-
 lib/portage/tests/gpkg/test_gpkg_path.py           |   2 +-
 lib/portage/tests/gpkg/test_gpkg_size.py           |   2 +-
 lib/portage/tests/gpkg/test_gpkg_stream.py         |   2 +-
 lib/portage/tests/lafilefixer/meson.build          |   9 +
 lib/portage/tests/lafilefixer/test_lafilefixer.py  |   4 +-
 lib/portage/tests/lazyimport/meson.build           |  10 +
 .../test_lazy_import_portage_baseline.py           |   1 +
 lib/portage/tests/lint/meson.build                 |  12 +
 lib/portage/tests/locks/meson.build                |  10 +
 lib/portage/tests/meson.build                      |  31 +
 lib/portage/tests/news/meson.build                 |   9 +
 lib/portage/tests/news/test_NewsItem.py            |   8 +-
 lib/portage/tests/process/meson.build              |  18 +
 lib/portage/tests/process/test_AsyncFunction.py    |  92 +-
 lib/portage/tests/process/test_ForkProcess.py      |  46 +
 lib/portage/tests/process/test_pickle.py           |  43 +
 lib/portage/tests/process/test_poll.py             |   1 -
 lib/portage/tests/process/test_unshare_net.py      |  13 -
 lib/portage/tests/resolver/ResolverPlayground.py   |  10 +-
 .../resolver/binpkg_multi_instance/meson.build     |  10 +
 lib/portage/tests/resolver/meson.build             |  98 +++
 lib/portage/tests/resolver/soname/meson.build      |  19 +
 .../tests/resolver/soname/test_skip_update.py      |  19 +-
 .../tests/resolver/test_alternatives_gzip.py       | 245 ++++++
 .../tests/resolver/test_autounmask_binpkg_use.py   |   2 +-
 .../tests/resolver/test_autounmask_multilib_use.py |   2 -
 .../resolver/test_autounmask_use_slot_conflict.py  |   2 -
 .../tests/resolver/test_circular_choices_rust.py   |   2 +-
 .../resolver/test_depclean_slot_unavailable.py     |   2 +-
 lib/portage/tests/resolver/test_merge_order.py     |  24 +-
 lib/portage/tests/resolver/test_or_choices.py      |   2 -
 .../tests/resolver/test_rebuild_ghostscript.py     | 160 ++++
 lib/portage/tests/resolver/test_useflags.py        | 176 ++++
 lib/portage/tests/runTests.py                      |  84 --
 lib/portage/tests/sets/base/meson.build            |  10 +
 ...lPackageSet.py => test_internal_package_set.py} |   0
 .../{testVariableSet.py => test_variable_set.py}   |   0
 lib/portage/tests/sets/files/meson.build           |  10 +
 ...estConfigFileSet.py => test_config_file_set.py} |   0
 ...estStaticFileSet.py => test_static_file_set.py} |   0
 lib/portage/tests/sets/meson.build                 |  12 +
 lib/portage/tests/sets/shell/meson.build           |   9 +
 .../sets/shell/{testShell.py => test_shell.py}     |   0
 lib/portage/tests/sync/meson.build                 |   9 +
 lib/portage/tests/sync/test_sync_local.py          |  15 +-
 lib/portage/tests/unicode/meson.build              |   9 +
 lib/portage/tests/unicode/test_string_format.py    |   2 +-
 lib/portage/tests/update/meson.build               |  11 +
 lib/portage/tests/util/dyn_libs/meson.build        |   9 +
 lib/portage/tests/util/eventloop/meson.build       |   9 +
 lib/portage/tests/util/file_copy/meson.build       |   9 +
 lib/portage/tests/util/file_copy/test_copyfile.py  |  11 +-
 lib/portage/tests/util/futures/asyncio/meson.build |  15 +
 .../tests/util/futures/asyncio/test_pipe_closed.py |   4 +-
 .../util/futures/asyncio/test_subprocess_exec.py   |   4 +-
 lib/portage/tests/util/futures/meson.build         |  15 +
 .../tests/util/futures/test_iter_completed.py      |  17 +-
 lib/portage/tests/util/meson.build                 |  31 +
 lib/portage/tests/util/test_getconfig.py           |   2 +-
 lib/portage/tests/util/test_uniqueArray.py         |   3 +-
 lib/portage/tests/versions/meson.build             |  10 +
 lib/portage/tests/xpak/meson.build                 |   9 +
 lib/portage/util/ExtractKernelVersion.py           |   4 -
 lib/portage/util/_async/AsyncFunction.py           |  32 +-
 lib/portage/util/_async/FileCopier.py              |  18 +-
 lib/portage/util/_async/FileDigester.py            |  71 +-
 lib/portage/util/_async/ForkProcess.py             | 187 ++++-
 lib/portage/util/_async/PipeLogger.py              |   2 +-
 lib/portage/util/_async/meson.build                |  20 +
 lib/portage/util/_dyn_libs/meson.build             |  14 +
 lib/portage/util/_eventloop/asyncio_event_loop.py  |  40 +-
 lib/portage/util/_eventloop/meson.build            |   9 +
 lib/portage/util/bin_entry_point.py                |  18 +-
 lib/portage/util/elf/meson.build                   |   9 +
 lib/portage/util/endian/meson.build                |   8 +
 lib/portage/util/env_update.py                     |  67 +-
 lib/portage/util/file_copy/meson.build             |   7 +
 lib/portage/util/futures/_asyncio/meson.build      |   8 +
 lib/portage/util/futures/executor/meson.build      |   8 +
 lib/portage/util/futures/extendedfutures.py        |   2 +-
 lib/portage/util/futures/meson.build               |  17 +
 lib/portage/util/futures/retry.py                  |   2 +-
 lib/portage/util/iterators/meson.build             |   8 +
 lib/portage/util/lafilefixer.py                    |   2 +-
 lib/portage/util/meson.build                       |  49 ++
 lib/portage/util/movefile.py                       |   5 +-
 lib/portage/util/mtimedb.py                        |   2 +-
 lib/portage/util/socks5.py                         |   2 +-
 lib/portage/util/writeable_check.py                |   2 +-
 lib/portage/versions.py                            |  91 +-
 lib/portage/xml/meson.build                        |   8 +
 lib/portage/xpak.py                                |   7 +-
 man/color.map.5                                    |   8 +-
 man/dispatch-conf.1                                |   2 +-
 man/ebuild.1                                       |   2 +-
 man/ebuild.5                                       |  34 +-
 man/egencache.1                                    |   2 +-
 man/emaint.1                                       |   2 +-
 man/emerge.1                                       |  20 +-
 man/emirrordist.1                                  |   4 +-
 man/env-update.1                                   |   2 +-
 man/etc-update.1                                   |   2 +-
 man/fixpackages.1                                  |   2 +-
 man/glsa-check.1                                   |   2 +-
 man/make.conf.5                                    |  53 +-
 man/meson.build                                    |  31 +
 man/portage.5                                      |  40 +-
 man/quickpkg.1                                     |   2 +-
 man/ru/color.map.5                                 |   2 +-
 man/ru/dispatch-conf.1                             |   2 +-
 man/ru/ebuild.1                                    |   2 +-
 man/ru/env-update.1                                |   2 +-
 man/ru/etc-update.1                                |   2 +-
 man/ru/fixpackages.1                               |   2 +-
 man/ru/meson.build                                 |  19 +
 meson.build                                        | 126 +++
 meson_options.txt                                  |  59 ++
 misc/emerge-delta-webrsync                         | 303 +++++--
 pyproject.toml                                     |  44 +-
 runtests                                           | 184 ----
 setup.py                                           | 925 ---------------------
 src/meson.build                                    |  50 ++
 src/portage_util_file_copy_reflink_linux.c         |   1 +
 tox.ini                                            |   7 +-
 320 files changed, 6795 insertions(+), 4202 deletions(-)

diff --cc bin/emerge-webrsync
index db4bb6d1e8,99da05543a..9959b6a5a7
--- a/bin/emerge-webrsync
+++ b/bin/emerge-webrsync
@@@ -71,32 -71,21 +71,29 @@@ die() 
  
  argv0=$0
  
- # Use portageq from the same directory/prefix as the current script, so
- # that we don't have to rely on PATH including the current EPREFIX.
- scriptpath=${BASH_SOURCE[0]}
- if [[ -x "${scriptpath%/*}/portageq" ]]; then
- 	portageq=${scriptpath%/*}/portageq
- elif type -P portageq > /dev/null ; then
- 	portageq=portageq
- else
- 	die "could not find 'portageq'; aborting"
- fi
+ # Use emerge and portageq from the same directory/prefix as the current script,
+ # so that we don't have to rely on PATH including the current EPREFIX.
+ emerge=$(PATH="${BASH_SOURCE[0]%/*}:${PATH}" type -P emerge)
+ [[ -n ${emerge} ]] || die "could not find 'emerge'; aborting"
+ portageq=$(PATH="${BASH_SOURCE[0]%/*}:${PATH}" type -P portageq)
+ [[ -n ${portageq} ]] || die "could not find 'portageq'; aborting"
  
 +# PREFIX LOCAL: retrieve PORTAGE_USER/PORTAGE_GROUP
  eval "$("${portageq}" envvar -v DISTDIR EPREFIX FEATURES \
  	FETCHCOMMAND GENTOO_MIRRORS \
  	PORTAGE_BIN_PATH PORTAGE_CONFIGROOT PORTAGE_GPG_DIR \
  	PORTAGE_NICENESS PORTAGE_REPOSITORIES PORTAGE_RSYNC_EXTRA_OPTS \
  	PORTAGE_RSYNC_OPTS PORTAGE_TEMP_GPG_DIR PORTAGE_TMPDIR \
 -	USERLAND http_proxy https_proxy ftp_proxy)"
 +	USERLAND http_proxy ftp_proxy \
++	USERLAND http_proxy https_proxy ftp_proxy
 +	PORTAGE_USER PORTAGE_GROUP)"
- export http_proxy ftp_proxy
+ export http_proxy https_proxy ftp_proxy
  
 +# PREFIX LOCAL: use Prefix servers, just because we want this and infra
 +# can't support us yet
 +GENTOO_MIRRORS="http://rsync.prefix.bitzolder.nl"
 +# END PREFIX LOCAL
 +
  source "${PORTAGE_BIN_PATH}"/isolated-functions.sh || exit 1
  
  repo_name=gentoo
diff --cc bin/install-qa-check.d/05prefix
index 8a83893f14,28f2c06afe..8cf3728627
--- a/bin/install-qa-check.d/05prefix
+++ b/bin/install-qa-check.d/05prefix
@@@ -80,14 -76,12 +80,12 @@@ install_qa_check_prefix() 
  			fi
  			continue
  		fi
- 		# BEGIN PREFIX LOCAL: also check init scripts
- 		# unprefixed shebang, is the script directly in ${PATH} or an init
- 		# script?
+ 		# unprefixed shebang, is the script directly in ${PATH} or an init script?
  		if [[ ":${PATH}:${EPREFIX}/etc/init.d:" == *":${fp}:"* ]] ; then
  			if [[ -e ${EROOT}${line[0]} || -e ${ED}${line[0]} ]] ; then
 -				# is it unprefixed, but we can just fix it because a
 -				# prefixed variant exists
 -				eqawarn "prefixing shebang of ${fn#${D}}"
 +				# is it unprefixed, but we can just fix it because an
 +				# eprefixed variant exists
 +				eqawarn "eprefixing shebang of ${fn#${D%/}/}"
  				# statement is made idempotent on purpose, because
  				# symlinks may point to the same target, and hence the
  				# same real file may be sedded multiple times since we
diff --cc bin/save-ebuild-env.sh
index 294cab2555,3a2560aabf..c3c83c91d2
mode 100755,100644..100755
--- a/bin/save-ebuild-env.sh
+++ b/bin/save-ebuild-env.sh
diff --cc lib/portage/const.py
index 8aa7e557ff,bf310bb6e0..8769ab2707
--- a/lib/portage/const.py
+++ b/lib/portage/const.py
@@@ -2,15 -2,10 +2,17 @@@
  # Copyright 1998-2023 Gentoo Authors
  # Distributed under the terms of the GNU General Public License v2
  
 +# BEGIN PREFIX LOCAL
 +# ===========================================================================
 +# autotool supplied constants.
 +# ===========================================================================
 +from portage.const_autotool import *
 +# END PREFIX LOCAL
 +
  import os
  
+ from portage import installation
+ 
  # ===========================================================================
  # START OF CONSTANTS -- START OF CONSTANTS -- START OF CONSTANTS -- START OF
  # ===========================================================================
@@@ -79,27 -98,12 +105,26 @@@ PORTAGE_PYM_PATH = os.path.realpath(os.
  LOCALE_DATA_PATH = f"{PORTAGE_BASE_PATH}/locale"  # FIXME: not used
  EBUILD_SH_BINARY = f"{PORTAGE_BIN_PATH}/ebuild.sh"
  MISC_SH_BINARY = f"{PORTAGE_BIN_PATH}/misc-functions.sh"
- # BEGIN PREFIX LOCAL: use EPREFIX for binaries
- SANDBOX_BINARY = f"{EPREFIX}/usr/bin/sandbox"
- FAKEROOT_BINARY = f"{EPREFIX}/usr/bin/fakeroot"
- # END PREFIX LOCAL
- BASH_BINARY = "/bin/bash"
- MOVE_BINARY = "/bin/mv"
- PRELINK_BINARY = "/usr/sbin/prelink"
+ SANDBOX_BINARY = f"{BINARY_PREFIX}/usr/bin/sandbox"
+ FAKEROOT_BINARY = f"{BINARY_PREFIX}/usr/bin/fakeroot"
+ BASH_BINARY = f"{BINARY_PREFIX}/bin/bash"
+ MOVE_BINARY = f"{BINARY_PREFIX}/bin/mv"
+ PRELINK_BINARY = f"{BINARY_PREFIX}/usr/sbin/prelink"
+ 
 +# BEGIN PREFIX LOCAL: macOS sandbox
 +MACOSSANDBOX_BINARY      = "/usr/bin/sandbox-exec"
 +MACOSSANDBOX_PROFILE     = '''(version 1)
 +(allow default)
 +(deny file-write*)
 +(allow file-write* file-write-setugid
 +@@MACOSSANDBOX_PATHS@@)
 +(allow file-write-data
 +@@MACOSSANDBOX_PATHS_CONTENT_ONLY@@)'''
 +
 +PORTAGE_GROUPNAME        = portagegroup
 +PORTAGE_USERNAME         = portageuser
 +# END PREFIX LOCAL
 +
  INVALID_ENV_FILE = "/etc/spork/is/not/valid/profile.env"
  MERGING_IDENTIFIER = "-MERGING-"
  REPO_NAME_FILE = "repo_name"
diff --cc lib/portage/dbapi/bintree.py
index 78f7604441,6446fde95a..9d09db3fe2
--- a/lib/portage/dbapi/bintree.py
+++ b/lib/portage/dbapi/bintree.py
@@@ -128,11 -128,30 +128,32 @@@ class bindbapi(fakedbapi)
              "SLOT",
              "USE",
              "_mtime_",
 +            # PREFIX LOCAL
 +            "EPREFIX",
          }
-         self._aux_cache_slot_dict = slot_dict_class(self._aux_cache_keys)
          self._aux_cache = {}
+         self._aux_cache_slot_dict_cache = None
+ 
+     @property
+     def _aux_cache_slot_dict(self):
+         if self._aux_cache_slot_dict_cache is None:
+             self._aux_cache_slot_dict_cache = slot_dict_class(self._aux_cache_keys)
+         return self._aux_cache_slot_dict_cache
+ 
+     def __getstate__(self):
+         state = self.__dict__.copy()
+         # These attributes are not picklable, so they are automatically
+         # regenerated after unpickling.
+         state["_aux_cache_slot_dict_cache"] = None
+         state["_instance_key"] = None
+         return state
+ 
+     def __setstate__(self, state):
+         self.__dict__.update(state)
+         if self._multi_instance:
+             self._instance_key = self._instance_key_multi_instance
+         else:
+             self._instance_key = self._instance_key_cpv
  
      @property
      def writable(self):
diff --cc lib/portage/package/ebuild/fetch.py
index 49cce7f063,5f970fe62d..d67d3115fe
--- a/lib/portage/package/ebuild/fetch.py
+++ b/lib/portage/package/ebuild/fetch.py
@@@ -234,10 -232,9 +234,10 @@@ def _ensure_distdir(settings, distdir)
      if "FAKED_MODE" in settings:
          # When inside fakeroot, directories with portage's gid appear
          # to have root's gid. Therefore, use root's gid instead of
-         # portage's gid to avoid spurrious permissions adjustments
+         # portage's gid to avoid spurious permissions adjustments
          # when inside fakeroot.
 -        dir_gid = 0
 +        # PREFIX LOCAL: do not assume root to be 0
 +        dir_gid = rootgid
  
      userfetch = portage.data.secpass >= 2 and "userfetch" in settings.features
      userpriv = portage.data.secpass >= 2 and "userpriv" in settings.features