public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Fabian Groffen" <grobian@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/portage:prefix commit in: /
Date: Sat, 17 Jun 2023 08:41:04 +0000 (UTC)	[thread overview]
Message-ID: <1686991227.46fc4d8a2205d98584c4198070e42933c1cd1e62.grobian@gentoo> (raw)

commit:     46fc4d8a2205d98584c4198070e42933c1cd1e62
Author:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Sat Jun 17 08:40:27 2023 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Sat Jun 17 08:40:27 2023 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=46fc4d8a

Merge remote-tracking branch 'origin/master' into prefix

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

 .builds/ci.yml                                     |   39 +
 .builds/lint.yml                                   |   47 +
 .builds/setup-python.sh                            |   30 +
 .editorconfig                                      |    4 +
 .git-blame-ignore-revs                             |    6 +
 .github/workflows/black.yml                        |   18 -
 .github/workflows/ci.yml                           |   64 +-
 .github/workflows/lint.yml                         |   49 +
 .github/workflows/pre-commit.yml                   |   14 +
 .gitignore                                         |    6 +
 .pre-commit-config.yaml                            |   21 +
 DEVELOPING                                         |   47 +-
 NEWS                                               |  695 ++++-
 README.md                                          |   11 +
 bin/archive-conf                                   |   23 +-
 bin/bashrc-functions.sh                            |   18 +-
 bin/binhost-snapshot                               |   33 +-
 bin/check-implicit-pointer-usage.py                |   79 -
 bin/chmod-lite.py                                  |    1 -
 bin/chpathtool.py                                  |   20 +-
 bin/clean_locks                                    |    6 +-
 bin/deprecated-path                                |   28 -
 bin/dispatch-conf                                  |   51 +-
 bin/dohtml.py                                      |   26 +-
 bin/doins.py                                       |   24 +-
 bin/eapi.sh                                        |    4 +-
 bin/ebuild                                         |  773 +++---
 bin/ebuild-helpers/bsd/sed                         |    3 +-
 bin/ebuild-helpers/dobin                           |   16 +-
 bin/ebuild-helpers/doconfd                         |    6 +-
 bin/ebuild-helpers/dodir                           |    4 +-
 bin/ebuild-helpers/dodoc                           |    8 +-
 bin/ebuild-helpers/doenvd                          |    6 +-
 bin/ebuild-helpers/doexe                           |   23 +-
 bin/ebuild-helpers/dohard                          |    4 +-
 bin/ebuild-helpers/doheader                        |    6 +-
 bin/ebuild-helpers/dohtml                          |   10 +-
 bin/ebuild-helpers/doinfo                          |    6 +-
 bin/ebuild-helpers/doinitd                         |    4 +-
 bin/ebuild-helpers/doins                           |   20 +-
 bin/ebuild-helpers/dolib                           |   22 +-
 bin/ebuild-helpers/doman                           |   10 +-
 bin/ebuild-helpers/domo                            |   20 +-
 bin/ebuild-helpers/dosbin                          |   14 +-
 bin/ebuild-helpers/dosed                           |    8 +-
 bin/ebuild-helpers/dosym                           |   20 +-
 bin/ebuild-helpers/fowners                         |   36 +-
 bin/ebuild-helpers/fperms                          |   33 +-
 bin/ebuild-helpers/newins                          |   14 +-
 bin/ebuild-helpers/portageq                        |   27 +-
 bin/ebuild-helpers/prepallstrip                    |    6 +-
 bin/ebuild-helpers/prepinfo                        |   11 +-
 bin/ebuild-helpers/prepman                         |    6 +-
 bin/ebuild-helpers/prepstrip                       |    6 +-
 bin/ebuild-helpers/unprivileged/chown              |    3 +-
 bin/ebuild-helpers/xattr/install                   |    2 +-
 bin/ebuild-ipc.py                                  |  526 ++--
 bin/ebuild-pyhelper                                |    4 +-
 bin/ebuild.sh                                      |  192 +-
 bin/ecompress                                      |   25 +-
 bin/ecompress-file                                 |   15 +-
 bin/egencache                                      | 2433 +++++++++--------
 bin/emaint                                         |   87 +-
 bin/emerge                                         |   62 +-
 bin/emerge-webrsync                                |  490 ++--
 bin/env-update                                     |    2 +-
 bin/estrip                                         |  108 +-
 bin/etc-update                                     |   32 +-
 bin/filter-bash-environment.py                     |    2 +-
 bin/fixpackages                                    |    4 +-
 bin/glsa-check                                     |   37 +-
 bin/gpkg-helper.py                                 |   27 +-
 bin/gpkg-sign                                      |   77 +
 bin/install-qa-check.d/05prefix                    |    8 +-
 bin/install-qa-check.d/10executable-issues         |    2 +-
 bin/install-qa-check.d/10ignored-flags             |    2 +-
 bin/install-qa-check.d/20deprecated-directories    |    6 +-
 bin/install-qa-check.d/60pkgconfig                 |   61 +-
 bin/install-qa-check.d/60udev                      |    5 +-
 bin/install-qa-check.d/80libraries                 |    2 +-
 bin/install-qa-check.d/90bad-bin-owner             |    2 +-
 bin/install-qa-check.d/90config-impl-decl          |  141 +
 bin/install-qa-check.d/90cython-dep                |   45 +
 bin/install-qa-check.d/90gcc-warnings              |  132 +-
 bin/install-qa-check.d/90world-writable            |   10 +-
 bin/install.py                                     |    3 +-
 bin/isolated-functions.sh                          |   80 +-
 bin/lock-helper.py                                 |    1 -
 bin/misc-functions.sh                              |  133 +-
 bin/phase-functions.sh                             |  278 +-
 bin/phase-helpers.sh                               |  246 +-
 bin/pid-ns-init                                    |    6 +-
 bin/portageq                                       | 2854 ++++++++++----------
 bin/portageq-wrapper                               |   19 +
 bin/postinst-qa-check.d/50xdg-utils                |   21 +-
 bin/quickpkg                                       |  102 +-
 bin/regenworld                                     |   14 +-
 bin/save-ebuild-env.sh                             |   12 +-
 bin/socks5-server.py                               |    2 +-
 bin/xattr-helper.py                                |    7 +-
 bin/xpak-helper.py                                 |   14 +-
 cnf/make.conf.example                              |   17 +
 cnf/make.conf.example.loong.diff                   |   56 +
 cnf/sets/portage.conf                              |   12 +-
 doc/api/conf.py                                    |    6 +-
 lib/_emerge/AbstractEbuildProcess.py               |   94 +-
 lib/_emerge/AbstractPollTask.py                    |    5 +-
 lib/_emerge/AsynchronousLock.py                    |   40 +-
 lib/_emerge/AsynchronousTask.py                    |    3 +-
 lib/_emerge/AtomArg.py                             |    1 -
 lib/_emerge/Binpkg.py                              |   88 +-
 lib/_emerge/BinpkgEnvExtractor.py                  |    6 +-
 lib/_emerge/BinpkgExtractorAsync.py                |   71 +-
 lib/_emerge/BinpkgFetcher.py                       |   50 +-
 lib/_emerge/BinpkgPrefetcher.py                    |   10 +-
 lib/_emerge/BinpkgVerifier.py                      |   22 +-
 lib/_emerge/Blocker.py                             |    1 -
 lib/_emerge/BlockerCache.py                        |    5 +-
 lib/_emerge/BlockerDB.py                           |    5 +-
 lib/_emerge/CompositeTask.py                       |    3 +-
 lib/_emerge/DepPriority.py                         |    1 -
 lib/_emerge/DependencyArg.py                       |    3 +-
 lib/_emerge/EbuildBinpkg.py                        |   36 +-
 lib/_emerge/EbuildBuild.py                         |   34 +-
 lib/_emerge/EbuildBuildDir.py                      |    3 +-
 lib/_emerge/EbuildExecuter.py                      |    7 +-
 lib/_emerge/EbuildFetcher.py                       |   17 +-
 lib/_emerge/EbuildFetchonly.py                     |    5 +-
 lib/_emerge/EbuildIpcDaemon.py                     |    3 +-
 lib/_emerge/EbuildMerge.py                         |   11 +-
 lib/_emerge/EbuildMetadataPhase.py                 |    5 +-
 lib/_emerge/EbuildPhase.py                         |   33 +-
 lib/_emerge/EbuildProcess.py                       |    2 -
 lib/_emerge/EbuildSpawnProcess.py                  |    1 -
 lib/_emerge/FakeVartree.py                         |    7 +-
 lib/_emerge/FifoIpcDaemon.py                       |    1 -
 lib/_emerge/JobStatusDisplay.py                    |   23 +-
 lib/_emerge/MergeListItem.py                       |   13 +-
 lib/_emerge/MetadataRegen.py                       |   21 +-
 lib/_emerge/Package.py                             |   50 +-
 lib/_emerge/PackageMerge.py                        |   65 +-
 lib/_emerge/PackagePhase.py                        |    6 +-
 lib/_emerge/PackageUninstall.py                    |   10 +-
 lib/_emerge/PipeReader.py                          |    2 -
 lib/_emerge/PollScheduler.py                       |    8 +-
 lib/_emerge/Scheduler.py                           |  105 +-
 lib/_emerge/SequentialTaskQueue.py                 |    2 -
 lib/_emerge/SetArg.py                              |    1 -
 lib/_emerge/SpawnProcess.py                        |   27 +-
 lib/_emerge/SubProcess.py                          |    9 +-
 lib/_emerge/Task.py                                |    7 +-
 lib/_emerge/UseFlagDisplay.py                      |    7 +-
 lib/_emerge/UserQuery.py                           |    7 +-
 lib/_emerge/actions.py                             |  496 ++--
 lib/_emerge/chk_updated_cfg_files.py               |    8 +-
 lib/_emerge/countdown.py                           |    6 +-
 lib/_emerge/create_depgraph_params.py              |    8 +-
 lib/_emerge/create_world_atom.py                   |    4 +-
 lib/_emerge/depgraph.py                            | 1060 ++++----
 lib/_emerge/emergelog.py                           |   10 +-
 lib/_emerge/getloadavg.py                          |    2 +-
 lib/_emerge/is_valid_package_atom.py               |    2 +-
 lib/_emerge/main.py                                |   22 +-
 lib/_emerge/post_emerge.py                         |    9 +-
 lib/_emerge/resolver/backtracking.py               |    8 +-
 lib/_emerge/resolver/circular_dependency.py        |   24 +-
 lib/_emerge/resolver/output.py                     |   59 +-
 lib/_emerge/resolver/output_helpers.py             |   50 +-
 lib/_emerge/resolver/package_tracker.py            |    6 +-
 lib/_emerge/resolver/slot_collision.py             |   95 +-
 lib/_emerge/search.py                              |   25 +-
 lib/_emerge/show_invalid_depstring_notice.py       |   11 +-
 lib/_emerge/stdout_spinner.py                      |    1 +
 lib/_emerge/unmerge.py                             |   49 +-
 lib/portage/__init__.py                            |   31 +-
 lib/portage/_compat_upgrade/binpkg_compression.py  |    4 +-
 .../_compat_upgrade/binpkg_multi_instance.py       |    8 +-
 lib/portage/_compat_upgrade/default_locations.py   |   12 +-
 lib/portage/_emirrordist/Config.py                 |   17 +-
 lib/portage/_emirrordist/ContentDB.py              |   16 +-
 lib/portage/_emirrordist/DeletionIterator.py       |   18 +-
 lib/portage/_emirrordist/DeletionTask.py           |   40 +-
 lib/portage/_emirrordist/FetchIterator.py          |   21 +-
 lib/portage/_emirrordist/FetchTask.py              |  118 +-
 lib/portage/_emirrordist/MirrorDistTask.py         |   55 +-
 lib/portage/_emirrordist/main.py                   |   12 +-
 lib/portage/_global_updates.py                     |    4 +-
 lib/portage/_selinux.py                            |    4 +-
 lib/portage/_sets/ProfilePackageSet.py             |    6 +-
 lib/portage/_sets/__init__.py                      |   42 +-
 lib/portage/_sets/base.py                          |   16 +-
 lib/portage/_sets/dbapi.py                         |   74 +-
 lib/portage/_sets/files.py                         |   38 +-
 lib/portage/_sets/libs.py                          |    6 +-
 lib/portage/_sets/profiles.py                      |   12 +-
 lib/portage/_sets/security.py                      |    4 +-
 lib/portage/_sets/shell.py                         |    4 +-
 lib/portage/binpkg.py                              |   32 +-
 lib/portage/cache/anydbm.py                        |    5 +-
 lib/portage/cache/cache_errors.py                  |   15 +-
 lib/portage/cache/ebuild_xattr.py                  |   17 +-
 lib/portage/cache/flat_hash.py                     |   22 +-
 lib/portage/cache/fs_template.py                   |    7 +-
 lib/portage/cache/index/IndexStreamIterator.py     |    4 -
 lib/portage/cache/index/pkg_desc_index.py          |    3 +-
 lib/portage/cache/mappings.py                      |    3 -
 lib/portage/cache/metadata.py                      |   20 +-
 lib/portage/cache/sql_template.py                  |   18 +-
 lib/portage/cache/sqlite.py                        |   25 +-
 lib/portage/cache/template.py                      |   35 +-
 lib/portage/cache/volatile.py                      |    3 +-
 lib/portage/checksum.py                            |  235 +-
 lib/portage/const.py                               |   10 +-
 lib/portage/cvstree.py                             |   12 +-
 lib/portage/data.py                                |    7 +-
 lib/portage/dbapi/IndexedPortdb.py                 |    8 +-
 .../dbapi/_ContentsCaseSensitivityManager.py       |    8 +-
 lib/portage/dbapi/_MergeProcess.py                 |   15 +-
 lib/portage/dbapi/_SyncfsProcess.py                |    2 -
 lib/portage/dbapi/_VdbMetadataDelta.py             |   11 +-
 lib/portage/dbapi/__init__.py                      |   19 +-
 lib/portage/dbapi/_similar_name_search.py          |    1 -
 lib/portage/dbapi/bintree.py                       |  717 +++--
 lib/portage/dbapi/porttree.py                      |   67 +-
 lib/portage/dbapi/vartree.py                       |  378 ++-
 lib/portage/dbapi/virtual.py                       |   21 +-
 lib/portage/debug.py                               |   12 +-
 lib/portage/dep/__init__.py                        |   51 +-
 lib/portage/dep/_dnf.py                            |   10 +-
 lib/portage/dep/_slot_operator.py                  |    9 +-
 lib/portage/dep/dep_check.py                       |   36 +-
 lib/portage/dep/soname/SonameAtom.py               |   11 +-
 lib/portage/dep/soname/multilib_category.py        |    7 +-
 lib/portage/dispatch_conf.py                       |    7 +-
 lib/portage/elog/__init__.py                       |    9 +-
 lib/portage/elog/messages.py                       |    4 +-
 lib/portage/elog/mod_mail.py                       |    2 +-
 lib/portage/elog/mod_mail_summary.py               |    4 +-
 lib/portage/elog/mod_save.py                       |   10 +-
 lib/portage/elog/mod_save_summary.py               |    9 +-
 lib/portage/elog/mod_syslog.py                     |    2 +-
 lib/portage/emaint/main.py                         |   40 +-
 lib/portage/emaint/modules/binhost/binhost.py      |    8 +-
 lib/portage/emaint/modules/config/config.py        |    5 +-
 lib/portage/emaint/modules/logs/logs.py            |    5 +-
 lib/portage/emaint/modules/merges/merges.py        |   26 +-
 lib/portage/emaint/modules/move/move.py            |   13 +-
 lib/portage/emaint/modules/resume/resume.py        |    9 +-
 lib/portage/emaint/modules/sync/sync.py            |    6 +-
 lib/portage/emaint/modules/world/world.py          |    9 +-
 lib/portage/env/config.py                          |   16 +-
 lib/portage/env/loaders.py                         |    8 +-
 lib/portage/exception.py                           |    2 +-
 lib/portage/getbinpkg.py                           |   15 +-
 lib/portage/glsa.py                                |   33 +-
 lib/portage/gpkg.py                                |  386 ++-
 lib/portage/locks.py                               |   32 +-
 lib/portage/mail.py                                |    5 +-
 lib/portage/manifest.py                            |   36 +-
 lib/portage/module.py                              |   16 +-
 lib/portage/news.py                                |  137 +-
 lib/portage/output.py                              |   29 +-
 .../package/ebuild/_config/LicenseManager.py       |    1 -
 .../package/ebuild/_config/LocationsManager.py     |   29 +-
 .../package/ebuild/_config/special_env_vars.py     |  545 ++--
 lib/portage/package/ebuild/_ipc/ExitCommand.py     |    2 -
 lib/portage/package/ebuild/_ipc/IpcCommand.py      |    1 -
 lib/portage/package/ebuild/_ipc/QueryCommand.py    |   29 +-
 lib/portage/package/ebuild/_metadata_invalid.py    |    3 +-
 .../ebuild/_parallel_manifest/ManifestProcess.py   |    7 +-
 .../ebuild/_parallel_manifest/ManifestScheduler.py |    5 +-
 .../ebuild/_parallel_manifest/ManifestTask.py      |    3 +-
 lib/portage/package/ebuild/config.py               |   74 +-
 .../package/ebuild/deprecated_profile_check.py     |    4 +-
 lib/portage/package/ebuild/digestcheck.py          |    2 +-
 lib/portage/package/ebuild/digestgen.py            |    8 +-
 lib/portage/package/ebuild/doebuild.py             |  277 +-
 lib/portage/package/ebuild/fetch.py                |   70 +-
 lib/portage/package/ebuild/getmaskingstatus.py     |   13 +-
 lib/portage/package/ebuild/prepare_build_dirs.py   |   32 +-
 lib/portage/process.py                             |   87 +-
 lib/portage/proxy/lazyimport.py                    |   12 +-
 lib/portage/repository/config.py                   |   80 +-
 .../repository/storage/hardlink_quarantine.py      |    6 +-
 lib/portage/repository/storage/hardlink_rcu.py     |    4 +-
 lib/portage/sync/controller.py                     |   13 +-
 lib/portage/sync/modules/git/git.py                |  258 +-
 lib/portage/sync/modules/mercurial/mercurial.py    |   40 +-
 lib/portage/sync/modules/rsync/rsync.py            |   58 +-
 lib/portage/sync/modules/svn/svn.py                |   10 +-
 lib/portage/sync/modules/webrsync/__init__.py      |    4 +-
 lib/portage/sync/modules/webrsync/webrsync.py      |   56 +-
 lib/portage/sync/old_tree_timestamp.py             |    4 +-
 lib/portage/sync/syncbase.py                       |   33 +-
 lib/portage/tests/__init__.py                      |   23 +-
 lib/portage/tests/bin/test_doins.py                |    4 +-
 lib/portage/tests/bin/test_eapi7_ver_funcs.py      |   30 +-
 lib/portage/tests/bin/test_filter_bash_env.py      |   23 +-
 lib/portage/tests/conftest.py                      |   89 +
 lib/portage/tests/dbapi/test_auxdb.py              |    5 +-
 lib/portage/tests/dbapi/test_bintree.py            |  155 ++
 lib/portage/tests/dbapi/test_fakedbapi.py          |    2 +-
 lib/portage/tests/dbapi/test_portdb_cache.py       |   32 +-
 lib/portage/tests/dep/testAtom.py                  |   27 +-
 lib/portage/tests/dep/testStandalone.py            |    5 +-
 lib/portage/tests/dep/test_dep_getcpv.py           |    1 -
 lib/portage/tests/dep/test_dep_getrepo.py          |    1 -
 lib/portage/tests/dep/test_dep_getslot.py          |    1 -
 lib/portage/tests/dep/test_dep_getusedeps.py       |    3 +-
 lib/portage/tests/dep/test_dnf_convert.py          |    1 -
 lib/portage/tests/dep/test_get_operator.py         |    3 +-
 .../tests/dep/test_get_required_use_flags.py       |    2 +-
 lib/portage/tests/dep/test_isjustname.py           |    5 +-
 lib/portage/tests/dep/test_isvalidatom.py          |    3 +-
 lib/portage/tests/dep/test_match_from_list.py      |    2 +-
 lib/portage/tests/dep/test_overlap_dnf.py          |    1 -
 lib/portage/tests/dep/test_paren_reduce.py         |    1 -
 lib/portage/tests/dep/test_soname_atom_pickle.py   |    1 -
 lib/portage/tests/dep/test_use_reduce.py           |    3 +-
 .../tests/ebuild/test_array_fromfile_eof.py        |    2 +-
 lib/portage/tests/ebuild/test_config.py            |   10 +-
 lib/portage/tests/ebuild/test_doebuild_fd_pipes.py |    2 -
 lib/portage/tests/ebuild/test_doebuild_spawn.py    |    2 -
 lib/portage/tests/ebuild/test_fetch.py             |   48 +-
 lib/portage/tests/ebuild/test_ipc_daemon.py        |    1 -
 lib/portage/tests/ebuild/test_shell_quote.py       |    2 +-
 lib/portage/tests/ebuild/test_spawn.py             |    8 +-
 .../tests/ebuild/test_use_expand_incremental.py    |    8 +-
 lib/portage/tests/emerge/test_actions.py           |   45 +
 lib/portage/tests/emerge/test_config_protect.py    |   12 +-
 .../emerge/test_emerge_blocker_file_collision.py   |   10 +-
 lib/portage/tests/emerge/test_emerge_slot_abi.py   |   10 +-
 lib/portage/tests/emerge/test_simple.py            |   19 +-
 .../tests/env/config/test_PackageKeywordsFile.py   |    3 +-
 .../tests/env/config/test_PackageUseFile.py        |    3 +-
 .../tests/env/config/test_PortageModulesFile.py    |    3 +-
 lib/portage/tests/glsa/test_security_set.py        |  139 +-
 lib/portage/tests/gpkg/test_gpkg_checksum.py       |   46 +-
 lib/portage/tests/gpkg/test_gpkg_gpg.py            |   48 +-
 .../tests/gpkg/test_gpkg_metadata_update.py        |    3 -
 lib/portage/tests/gpkg/test_gpkg_metadata_url.py   |   13 -
 lib/portage/tests/gpkg/test_gpkg_path.py           |   20 -
 lib/portage/tests/gpkg/test_gpkg_size.py           |    4 -
 lib/portage/tests/gpkg/test_gpkg_stream.py         |   19 -
 .../test_lazy_import_portage_baseline.py           |    1 -
 lib/portage/tests/lint/test_compile_modules.py     |    2 +-
 lib/portage/tests/lint/test_import_modules.py      |    2 +-
 lib/portage/tests/locks/test_asynchronous_lock.py  |   31 +-
 lib/portage/tests/news/test_NewsItem.py            |  442 ++-
 lib/portage/tests/process/test_PipeLogger.py       |    2 +-
 lib/portage/tests/process/test_PopenProcess.py     |   15 +-
 .../tests/process/test_PopenProcessBlockingIO.py   |   22 +-
 lib/portage/tests/process/test_poll.py             |   15 +-
 lib/portage/tests/process/test_spawn_fail_e2big.py |   30 +
 .../tests/process/test_spawn_warn_large_env.py     |   46 +
 lib/portage/tests/process/test_unshare_net.py      |   38 +-
 lib/portage/tests/resolver/ResolverPlayground.py   |   78 +-
 .../test_build_id_profile_format.py                |    4 +-
 .../binpkg_multi_instance/test_rebuilt_binaries.py |    4 +-
 .../tests/resolver/soname/test_autounmask.py       |    4 +-
 lib/portage/tests/resolver/soname/test_depclean.py |    1 -
 .../tests/resolver/soname/test_downgrade.py        |    7 +-
 .../tests/resolver/soname/test_or_choices.py       |    4 +-
 .../tests/resolver/soname/test_reinstall.py        |    4 +-
 .../tests/resolver/soname/test_skip_update.py      |    4 +-
 .../soname/test_slot_conflict_reinstall.py         |   18 +-
 .../resolver/soname/test_slot_conflict_update.py   |    4 +-
 .../tests/resolver/soname/test_soname_provided.py  |    4 +-
 .../tests/resolver/soname/test_unsatisfiable.py    |    4 +-
 .../tests/resolver/soname/test_unsatisfied.py      |    4 +-
 .../test_aggressive_backtrack_downgrade.py         |    1 -
 lib/portage/tests/resolver/test_autounmask.py      |   26 +-
 .../tests/resolver/test_autounmask_binpkg_use.py   |    3 +-
 .../tests/resolver/test_autounmask_multilib_use.py |    6 +-
 .../tests/resolver/test_autounmask_parent.py       |    1 -
 .../tests/resolver/test_autounmask_use_breakage.py |    1 -
 .../resolver/test_autounmask_use_slot_conflict.py  |    5 +-
 lib/portage/tests/resolver/test_bdeps.py           |    4 +-
 .../resolver/test_binary_pkg_ebuild_visibility.py  |    4 +-
 lib/portage/tests/resolver/test_changed_deps.py    |    4 +-
 .../tests/resolver/test_circular_choices.py        |    5 -
 .../tests/resolver/test_circular_choices_rust.py   |    1 -
 .../tests/resolver/test_circular_dependencies.py   |    2 -
 ...test_complete_if_new_subslot_without_revbump.py |    4 +-
 lib/portage/tests/resolver/test_depclean.py        |    3 -
 lib/portage/tests/resolver/test_depclean_order.py  |    1 -
 lib/portage/tests/resolver/test_depth.py           |    1 -
 .../resolver/test_disjunctive_depend_order.py      |    3 +-
 lib/portage/tests/resolver/test_eapi.py            |   44 +-
 .../resolver/test_imagemagick_graphicsmagick.py    |    1 -
 lib/portage/tests/resolver/test_multirepo.py       |    5 +-
 lib/portage/tests/resolver/test_onlydeps_ideps.py  |  172 ++
 .../tests/resolver/test_onlydeps_minimal.py        |   25 +
 lib/portage/tests/resolver/test_or_choices.py      |    8 +-
 lib/portage/tests/resolver/test_package_tracker.py |    3 +-
 .../tests/resolver/test_perl_rebuild_bug.py        |  121 +
 .../tests/resolver/test_profile_default_eapi.py    |    6 +-
 .../tests/resolver/test_profile_package_set.py     |    6 +-
 .../test_regular_slot_change_without_revbump.py    |    4 +-
 lib/portage/tests/resolver/test_required_use.py    |    1 -
 lib/portage/tests/resolver/test_simple.py          |    3 +-
 lib/portage/tests/resolver/test_slot_abi.py        |    9 +-
 .../tests/resolver/test_slot_abi_downgrade.py      |    7 +-
 .../resolver/test_slot_change_without_revbump.py   |    4 +-
 lib/portage/tests/resolver/test_slot_collisions.py |    1 -
 .../resolver/test_slot_conflict_blocked_prune.py   |   78 +
 .../resolver/test_slot_conflict_force_rebuild.py   |    1 -
 .../tests/resolver/test_slot_conflict_rebuild.py   |   10 +-
 .../test_slot_conflict_unsatisfied_deep_deps.py    |    1 -
 .../tests/resolver/test_slot_conflict_update.py    |    1 -
 .../resolver/test_slot_conflict_update_virt.py     |    1 -
 .../resolver/test_slot_operator_autounmask.py      |    5 +-
 .../tests/resolver/test_slot_operator_bdeps.py     |    4 +-
 .../resolver/test_slot_operator_complete_graph.py  |    1 -
 .../resolver/test_slot_operator_exclusive_slots.py |    1 -
 .../resolver/test_slot_operator_missed_update.py   |    1 -
 .../tests/resolver/test_slot_operator_rebuild.py   |    4 +-
 .../resolver/test_slot_operator_required_use.py    |    1 -
 .../resolver/test_slot_operator_reverse_deps.py    |    1 -
 .../test_slot_operator_runtime_pkg_mask.py         |    1 -
 .../resolver/test_slot_operator_unsatisfied.py     |    1 -
 .../tests/resolver/test_slot_operator_unsolved.py  |    5 +-
 ..._slot_operator_update_probe_parent_downgrade.py |    1 -
 .../test_solve_non_slot_operator_slot_conflicts.py |    1 -
 lib/portage/tests/resolver/test_update.py          |  106 +
 .../tests/resolver/test_use_dep_defaults.py        |    1 -
 lib/portage/tests/resolver/test_useflags.py        |    3 +-
 lib/portage/tests/resolver/test_virtual_slot.py    |    4 -
 lib/portage/tests/runTests.py                      |   14 +-
 .../tests/sets/base/testInternalPackageSet.py      |    4 +-
 .../base/testVariableSet.py}                       |   24 +-
 lib/portage/tests/sets/shell/testShell.py          |    3 +-
 lib/portage/tests/sync/test_sync_local.py          |   21 +-
 lib/portage/tests/unicode/test_string_format.py    |   15 +-
 lib/portage/tests/update/test_move_ent.py          |    7 +-
 lib/portage/tests/update/test_move_slot_ent.py     |    4 +-
 lib/portage/tests/update/test_update_dbentry.py    |    4 +-
 .../tests/util/eventloop/test_call_soon_fifo.py    |    1 -
 lib/portage/tests/util/file_copy/test_copyfile.py  |   16 +-
 .../util/futures/asyncio/test_child_watcher.py     |    1 -
 .../tests/util/futures/asyncio/test_pipe_closed.py |    4 +-
 .../util/futures/asyncio/test_subprocess_exec.py   |    2 -
 .../util/futures/asyncio/test_wakeup_fd_sigchld.py |    2 +-
 .../tests/util/futures/test_compat_coroutine.py    |    1 -
 .../tests/util/futures/test_done_callback.py       |    1 -
 .../tests/util/futures/test_iter_completed.py      |    2 -
 lib/portage/tests/util/futures/test_retry.py       |   16 +-
 lib/portage/tests/util/test_checksum.py            |   49 +-
 lib/portage/tests/util/test_digraph.py             |   60 +-
 lib/portage/tests/util/test_file_copier.py         |    1 -
 lib/portage/tests/util/test_getconfig.py           |    4 +-
 lib/portage/tests/util/test_install_mask.py        |    6 +-
 lib/portage/tests/util/test_manifest.py            |   31 +
 lib/portage/tests/util/test_normalizedPath.py      |    1 -
 lib/portage/tests/util/test_shelve.py              |    4 +-
 lib/portage/tests/util/test_socks5.py              |    4 +-
 lib/portage/tests/util/test_stackDicts.py          |    2 -
 lib/portage/tests/util/test_stackLists.py          |    1 -
 lib/portage/tests/util/test_varExpand.py           |   17 +-
 lib/portage/tests/util/test_whirlpool.py           |   49 +-
 lib/portage/tests/util/test_xattr.py               |    2 +-
 lib/portage/tests/versions/test_cpv_sort_key.py    |    1 -
 lib/portage/tests/versions/test_vercmp.py          |   11 +-
 lib/portage/tests/xpak/test_decodeint.py           |    1 -
 lib/portage/update.py                              |   23 +-
 lib/portage/util/ExtractKernelVersion.py           |   10 +-
 lib/portage/util/__init__.py                       |  163 +-
 lib/portage/util/_async/AsyncScheduler.py          |    4 +-
 lib/portage/util/_async/BuildLogger.py             |    2 +-
 lib/portage/util/_async/FileCopier.py              |    2 +-
 lib/portage/util/_async/FileDigester.py            |    1 -
 lib/portage/util/_async/ForkProcess.py             |    9 +-
 lib/portage/util/_async/PipeLogger.py              |    1 -
 lib/portage/util/_async/PipeReaderBlockingIO.py    |   23 +-
 lib/portage/util/_async/PopenProcess.py            |    2 -
 lib/portage/util/_async/SchedulerInterface.py      |    4 +-
 lib/portage/util/_dyn_libs/LinkageMapELF.py        |   46 +-
 .../util/_dyn_libs/PreservedLibsRegistry.py        |    6 +-
 .../util/_dyn_libs/display_preserved_libs.py       |   13 +-
 lib/portage/util/_dyn_libs/soname_deps.py          |    4 +-
 lib/portage/util/_dyn_libs/soname_deps_qa.py       |    9 +-
 lib/portage/util/_get_vm_info.py                   |    2 -
 lib/portage/util/_info_files.py                    |   13 +-
 lib/portage/util/_path.py                          |    4 +-
 lib/portage/util/_pty.py                           |    4 +-
 lib/portage/util/_xattr.py                         |   10 +-
 lib/portage/util/backoff.py                        |    2 +-
 lib/portage/util/bin_entry_point.py                |    2 +-
 lib/portage/util/changelog.py                      |    2 +-
 lib/portage/util/compression_probe.py              |    9 +-
 lib/portage/util/configparser.py                   |    7 +-
 lib/portage/util/cpuinfo.py                        |   22 +-
 lib/portage/util/digraph.py                        |   12 +-
 lib/portage/util/elf/constants.py                  |    1 +
 lib/portage/util/elf/header.py                     |    1 -
 lib/portage/util/env_update.py                     |   69 +-
 lib/portage/util/file_copy/__init__.py             |    2 -
 lib/portage/util/futures/_asyncio/__init__.py      |    6 +-
 lib/portage/util/futures/_asyncio/streams.py       |    2 +-
 lib/portage/util/futures/_sync_decorator.py        |    1 -
 lib/portage/util/futures/compat_coroutine.py       |    1 +
 lib/portage/util/futures/executor/fork.py          |   13 +-
 lib/portage/util/futures/extendedfutures.py        |   10 +-
 lib/portage/util/futures/iter_completed.py         |    3 +-
 lib/portage/util/futures/unix_events.py            |    4 +-
 lib/portage/util/hooks.py                          |    2 +-
 lib/portage/util/iterators/MultiIterGroupBy.py     |    5 -
 lib/portage/util/listdir.py                        |    6 +-
 lib/portage/util/locale.py                         |    7 +-
 lib/portage/util/movefile.py                       |   77 +-
 lib/portage/util/mtimedb.py                        |    4 +-
 lib/portage/util/netlink.py                        |    2 +-
 lib/portage/util/shelve.py                         |    4 +-
 lib/portage/util/socks5.py                         |    2 +-
 lib/portage/util/whirlpool.py                      |   81 +-
 lib/portage/util/writeable_check.py                |    7 +-
 lib/portage/versions.py                            |   21 +-
 lib/portage/xml/metadata.py                        |   12 +-
 lib/portage/xpak.py                                |   23 +-
 man/ebuild.1                                       |    9 +-
 man/ebuild.5                                       |  100 +-
 man/emerge.1                                       |   53 +-
 man/make.conf.5                                    |   70 +-
 man/portage.5                                      |   51 +-
 man/ru/ebuild.1                                    |   10 +-
 man/xpak.5                                         |    9 +-
 runtests                                           |   17 +-
 setup.py                                           |   50 +-
 src/portage_util__whirlpool.c                      | 1141 ++++++++
 src/portage_util_file_copy_reflink_linux.c         |   25 +-
 src/portage_util_libc.c                            |   27 +-
 tox.ini                                            |   30 +-
 532 files changed, 13827 insertions(+), 10224 deletions(-)

diff --cc bin/ebuild-helpers/dohtml
index e061bc173,55339238e..5384eeb8b
--- a/bin/ebuild-helpers/dohtml
+++ b/bin/ebuild-helpers/dohtml
@@@ -16,10 -16,8 +16,10 @@@ f
  # Use safe cwd, avoiding unsafe import for bug #469338.
  export __PORTAGE_HELPER_CWD=${PWD}
  cd "${PORTAGE_PYM_PATH}" || die
 +# BEGIN PREFIX LOCAL: use Prefix Python fallback
  PYTHONPATH=${PORTAGE_PYTHONPATH:-${PORTAGE_PYM_PATH}} \
- 	"${PORTAGE_PYTHON:-@PREFIX_PORTAGE_PYTHON@}" "$PORTAGE_BIN_PATH/dohtml.py" "$@"
 -	"${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}/dohtml.py" "$@"
++	"${PORTAGE_PYTHON:-@PREFIX_PORTAGE_PYTHON@}" "${PORTAGE_BIN_PATH}/dohtml.py" "$@"
 +# END PREFIX LOCAL
  
  ret=$?
  # Restore cwd for display by __helpers_die
diff --cc bin/emerge-webrsync
index 85a4d15d7,3835977fc..db4bb6d1e
--- a/bin/emerge-webrsync
+++ b/bin/emerge-webrsync
@@@ -43,10 -79,9 +79,10 @@@ if [[ -x "${scriptpath%/*}/portageq" ]]
  elif type -P portageq > /dev/null ; then
  	portageq=portageq
  else
- 	eecho "could not find 'portageq'; aborting"
- 	exit 1
+ 	die "could not find 'portageq'; aborting"
  fi
+ 
 +# 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 \
@@@ -252,11 -411,9 +418,11 @@@ get_snapshot_timestamp() 
  sync_local() {
  	local file="$1"
  
- 	__vecho "Syncing local tree ..."
+ 	[[ ${PORTAGE_QUIET} -eq 1 ]] || einfo "Syncing local repository ..."
  
 -	local ownership="portage:portage"
 +	# PREFIX LOCAL: use PORTAGE_USER and PORTAGE_GROUP
 +	local ownership="${PORTAGE_USER:-portage}:${PORTAGE_GROUP:-portage}"
 +	# END PREFIX LOCAL
  	if has usersync ${FEATURES} ; then
  		case "${USERLAND}" in
  			BSD)
diff --cc bin/install-qa-check.d/05prefix
index ac059723f,7488ad9e4..8a83893f1
--- a/bin/install-qa-check.d/05prefix
+++ b/bin/install-qa-check.d/05prefix
@@@ -80,14 -76,12 +80,14 @@@ install_qa_check_prefix() 
  			fi
  			continue
  		fi
 -		# unprefixed shebang, is the script directly in ${PATH}?
 -		if [[ ":${PATH}:" == *":${fp}:"* ]] ; then
 +		# BEGIN PREFIX LOCAL: also check init scripts
- 		# unprefixed shebang, is the script directly in $PATH or an init
++		# 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/isolated-functions.sh
index 20e9c735c,06be030fb..47e18cc6b
--- a/bin/isolated-functions.sh
+++ b/bin/isolated-functions.sh
@@@ -439,26 -444,22 +444,30 @@@ if [[ -z ${NO_COLOR} ]] ; the
  	no|false)
  		__set_colors
  		;;
- esac
+ 	esac
+ else
+ 	__unset_colors
+ fi
+ 
  
 -if [[ -z ${USERLAND} ]] ; then
 -	case $(uname -s) in
 -	*BSD|DragonFly)
 -		export USERLAND="BSD"
 -		;;
 -	*)
 -		export USERLAND="GNU"
 -		;;
 -	esac
 -fi
 +# BEGIN PREFIX LOCAL
 +# In Prefix every platform has USERLAND=GNU, even FreeBSD.  Since I
 +# don't know how to reliably "figure out" we are in a Prefix instance of
 +# portage here, I for now disable this check, and hardcode it to GNU.
 +# Somehow it appears stange to me that this code is in this file,
 +# non-ebuilds/eclasses should never rely on USERLAND and XARGS, don't they?
 +#if [[ -z ${USERLAND} ]] ; then
 +#	case $(uname -s) in
 +#	*BSD|DragonFly)
 +#		export USERLAND="BSD"
 +#		;;
 +#	*)
 +#		export USERLAND="GNU"
 +#		;;
 +#	esac
 +#fi
 +[[ -z ${USERLAND} ]] && USERLAND="GNU"
 +# END PREFIX LOCAL
  
  if [[ -z ${XARGS} ]] ; then
  	case ${USERLAND} in
@@@ -644,12 -653,12 +661,13 @@@ debug-print() 
  		printf 'debug: %s\n' "${@}" >> "${ECLASS_DEBUG_OUTPUT}"
  	fi
  
- 	if [[ -w $T ]] ; then
- 		# default target
+ 	if [[ -w ${T} ]] ; then
+ 		# Default target
  		printf '%s\n' "${@}" >> "${T}/eclass-debug.log"
- 		# let the portage user own/write to this file
+ 
+ 		# Let the portage user own/write to this file
 -		chgrp "${PORTAGE_GRPNAME:-portage}" "${T}/eclass-debug.log"
 +		# PREFIX LOCAL: fallback to configured group
 +		chgrp "${PORTAGE_GRPNAME:-${PORTAGE_GROUP}}" "${T}/eclass-debug.log"
  		chmod g+w "${T}/eclass-debug.log"
  	fi
  }
diff --cc bin/misc-functions.sh
index 91010ec65,d9319d5af..b32d06483
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@@ -275,163 -265,14 +292,160 @@@ install_qa_check_misc() 
  			"${PORTAGE_BIN_PATH}"/estrip --ignore "${PORTAGE_DOSTRIP_SKIP[@]}"
  			"${PORTAGE_BIN_PATH}"/estrip --dequeue
  		else
- 			prepallstrip
+ 			"${PORTAGE_BIN_PATH}"/estrip --prepallstrip
  		fi
  	fi
- 
- 	# Portage regenerates this on the installed system.
- 	rm -f "${ED%/}"/usr/share/info/dir{,.gz,.bz2} || die "rm failed!"
  }
  
 +install_qa_check_macho() {
 +	if ! has binchecks ${RESTRICT} ; then
 +		# on Darwin, dynamic libraries are called .dylibs instead of
 +		# .sos.  In addition the version component is before the
 +		# extension, not after it.  Check for this, and *only* warn
 +		# about it.  Some packages do ship .so files on Darwin and make
 +		# it work (ugly!).
 +		rm -f "${T}/mach-o.check"
 +		find ${ED%/} -name "*.so" -or -name "*.so.*" | \
 +		while read i ; do
 +			[[ $(file $i) == *"Mach-O"* ]] && \
 +				echo "${i#${D}}" >> "${T}/mach-o.check"
 +		done
 +		if [[ -f ${T}/mach-o.check ]] ; then
 +			f=$(< "${T}/mach-o.check")
 +			__vecho -ne '\a\n'
 +			eqawarn "QA Notice: Found .so dynamic libraries on Darwin:"
 +			eqawarn "    ${f//$'\n'/\n    }"
 +		fi
 +		rm -f "${T}/mach-o.check"
 +
 +		# The naming for dynamic libraries is different on Darwin; the
 +		# version component is before the extention, instead of after
 +		# it, as with .sos.  Again, make this a warning only.
 +		rm -f "${T}/mach-o.check"
 +		find ${ED%/} -name "*.dylib.*" | \
 +		while read i ; do
 +			echo "${i#${D}}" >> "${T}/mach-o.check"
 +		done
 +		if [[ -f "${T}/mach-o.check" ]] ; then
 +			f=$(< "${T}/mach-o.check")
 +			__vecho -ne '\a\n'
 +			eqawarn "QA Notice: Found wrongly named dynamic libraries on Darwin:"
 +			eqawarn "    ${f// /\n    }"
 +		fi
 +		rm -f "${T}/mach-o.check"
 +	fi
 +
 +	install_name_is_relative() {
 +		case $1 in
 +			"@executable_path/"*)  return 0  ;;
 +			"@loader_path"/*)      return 0  ;;
 +			"@rpath/"*)            return 0  ;;
 +			*)                     return 1  ;;
 +		esac
 +	}
 +
 +	# While we generate the NEEDED files, check that we don't get kernel
 +	# traps at runtime because of broken install_names on Darwin.
 +	rm -f "${T}"/.install_name_check_failed
 +	scanmacho -qyRF '%a;%p;%S;%n' "${D}" | { while IFS= read l ; do
 +		arch=${l%%;*}; l=${l#*;}
 +		obj="/${l%%;*}"; l=${l#*;}
 +		install_name=${l%%;*}; l=${l#*;}
 +		needed=${l%%;*}; l=${l#*;}
 +
 +		ignore=
 +		qa_var="QA_IGNORE_INSTALL_NAME_FILES_${ARCH/-/_}"
 +		eval "[[ -n \${!qa_var} ]] &&
 +			QA_IGNORE_INSTALL_NAME_FILES=(\"\${${qa_var}[@]}\")"
 +
 +		if [[ ${#QA_IGNORE_INSTALL_NAME_FILES[@]} -gt 1 ]] ; then
 +			for x in "${QA_IGNORE_INSTALL_NAME_FILES[@]}" ; do
 +				[[ ${obj##*/} == ${x} ]] && \
 +					ignore=true
 +			done
 +		else
 +			local shopts=$-
 +			set -o noglob
 +			for x in ${QA_IGNORE_INSTALL_NAME_FILES} ; do
 +				[[ ${obj##*/} == ${x} ]] && \
 +					ignore=true
 +			done
 +			set +o noglob
 +			set -${shopts}
 +		fi
 +
 +		# See if the self-reference install_name points to an existing
 +		# and to be installed file.  This usually is a symlink for the
 +		# major version.
 +		if install_name_is_relative ${install_name} ; then
 +			# try to locate the library in the installed image
 +			local inpath=${install_name#@*/}
 +			local libl
 +			for libl in $(find "${ED}" -name "${inpath##*/}") ; do
 +				if [[ ${libl} == */${inpath} ]] ; then
 +					install_name=/${libl#${D}}
 +					break
 +				fi
 +			done
 +		fi
 +		if [[ ! -e ${D}${install_name} ]] ; then
 +			eqawarn "QA Notice: invalid self-reference install_name ${install_name} in ${obj}"
 +			# remember we are in an implicit subshell, that's
 +			# why we touch a file here ... ideally we should be
 +			# able to die correctly/nicely here
 +			[[ -z ${ignore} ]] && touch "${T}"/.install_name_check_failed
 +		fi
 +
 +		# this is ugly, paths with spaces won't work
 +		for lib in ${needed//,/ } ; do
 +			if [[ ${lib} == ${D}* ]] ; then
 +				eqawarn "QA Notice: install_name references \${D}: ${lib} in ${obj}"
 +				[[ -z ${ignore} ]] && touch "${T}"/.install_name_check_failed
 +			elif [[ ${lib} == ${S}* ]] ; then
 +				eqawarn "QA Notice: install_name references \${S}: ${lib} in ${obj}"
 +				[[ -z ${ignore} ]] && touch "${T}"/.install_name_check_failed
 +			elif ! install_name_is_relative ${lib} ; then
 +				local isok=no
 +				if [[ -e ${lib} || -e ${D}${lib} ]] ; then
 +					isok=yes  # yay, we're ok
 +				elif [[ -e "${EROOT}"/MacOSX.sdk ]] ; then
 +					# trigger SDK mode, at least since Big Sur (11.0)
 +					# there are no libraries in /usr/lib any more, but
 +					# there are references too it (some library cache is
 +					# in place), yet we can validate it sort of is sane
 +					# by looking at the SDK metacaches, TAPI-files, .tbd
 +					# text versions of libraries, so just look there
 +					local tbd=${lib%.*}.tbd
 +					if [[ -e ${EROOT}/MacOSX.sdk/${lib%.*}.tbd ]] ; then
 +						isok=yes  # it's in the SDK, so ok
 +					elif [[ -e ${EROOT}/MacOSX.sdk/${lib}.tbd ]] ; then
 +						isok=yes  # this happens in case of Framework refs
 +					fi
 +				fi
 +				if [[ ${isok} == no ]] ; then
 +					eqawarn "QA Notice: invalid reference to ${lib} in ${obj}"
 +					[[ -z ${ignore} ]] && \
 +						touch "${T}"/.install_name_check_failed
 +				fi
 +			fi
 +		done
 +
 +		# backwards compatibility
 +		echo "${obj} ${needed}" >> "${PORTAGE_BUILDDIR}"/build-info/NEEDED
 +		# what we use
 +		echo "${arch};${obj};${install_name};${needed}" >> "${PORTAGE_BUILDDIR}"/build-info/NEEDED.MACHO.3
 +	done }
 +	if [[ -f ${T}/.install_name_check_failed ]] ; then
 +		# secret switch "allow_broken_install_names" to get
 +		# around this and install broken crap (not a good idea)
 +		has allow_broken_install_names ${FEATURES} || \
 +			die "invalid install_name found, your application or library will crash at runtime"
 +	fi
 +}
 +
  __dyn_instprep() {
  	if [[ -e ${PORTAGE_BUILDDIR}/.instprepped ]] ; then
- 		__vecho ">>> It appears that '$PF' is already instprepped; skipping."
+ 		__vecho ">>> It appears that '${PF}' is already instprepped; skipping."
  		__vecho ">>> Remove '${PORTAGE_BUILDDIR}/.instprepped' to force instprep."
  		return 0
  	fi
@@@ -686,20 -526,25 +699,27 @@@ __dyn_package() 
  		die "PORTAGE_BINPKG_TMPFILE is unset"
  	mkdir -p "${PORTAGE_BINPKG_TMPFILE%/*}" || die "mkdir failed"
  
+ 	if [[ ! -z "${BUILD_ID}" ]]; then
+ 		echo -n "${BUILD_ID}" > "${PORTAGE_BUILDDIR}"/build-info/BUILD_ID
+ 	fi
+ 
  	if [[ "${BINPKG_FORMAT}" == "xpak" ]]; then
  		local tar_options=""
- 		[[ $PORTAGE_VERBOSE = 1 ]] && tar_options+=" -v"
+ 
+ 		[[ ${PORTAGE_VERBOSE} = 1 ]] && tar_options+=" -v"
  		has xattr ${FEATURES} && [[ $(tar --help 2> /dev/null) == *--xattrs* ]] && tar_options+=" --xattrs"
- 		[[ -z "${PORTAGE_COMPRESSION_COMMAND}" ]] && \
- 			die "PORTAGE_COMPRESSION_COMMAND is unset"
- 		tar $tar_options -cf - $PORTAGE_BINPKG_TAR_OPTS -C "${D}" . | \
- 			$PORTAGE_COMPRESSION_COMMAND > "$PORTAGE_BINPKG_TMPFILE"
- 		assert "failed to pack binary package: '$PORTAGE_BINPKG_TMPFILE'"
+ 
+ 		[[ -z "${PORTAGE_COMPRESSION_COMMAND}" ]] && die "PORTAGE_COMPRESSION_COMMAND is unset"
+ 
+ 		tar ${tar_options} -cf - ${PORTAGE_BINPKG_TAR_OPTS} -C "${D}" . | \
+ 			${PORTAGE_COMPRESSION_COMMAND} > "${PORTAGE_BINPKG_TMPFILE}"
+ 		assert "failed to pack binary package: '${PORTAGE_BINPKG_TMPFILE}'"
+ 
 +		# BEGIN PREFIX LOCAL: use PREFIX_PORTAGE_PYTHON fallback
  		PYTHONPATH=${PORTAGE_PYTHONPATH:-${PORTAGE_PYM_PATH}} \
- 			"${PORTAGE_PYTHON:-@PREFIX_PORTAGE_PYTHON@}" "$PORTAGE_BIN_PATH"/xpak-helper.py recompose \
- 			"$PORTAGE_BINPKG_TMPFILE" "$PORTAGE_BUILDDIR/build-info"
 -			"${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}"/xpak-helper.py recompose \
++			"${PORTAGE_PYTHON:-@PREFIX_PORTAGE_PYTHON@}" "${PORTAGE_BIN_PATH}"/xpak-helper.py recompose \
+ 			"${PORTAGE_BINPKG_TMPFILE}" "${PORTAGE_BUILDDIR}/build-info"
 +		# END PREFIX LOCAL
  		if [[ $? -ne 0 ]]; then
  			rm -f "${PORTAGE_BINPKG_TMPFILE}"
  			die "Failed to append metadata to the tbz2 file"
@@@ -717,11 -563,9 +738,11 @@@
  		__vecho ">>> Done."
  
  	elif [[ "${BINPKG_FORMAT}" == "gpkg" ]]; then
 +		# BEGIN PREFIX LOCAL: use PREFIX_PORTAGE_PYTHON fallback
  		PYTHONPATH=${PORTAGE_PYTHONPATH:-${PORTAGE_PYM_PATH}} \
- 			"${PORTAGE_PYTHON:-@PREFIX_PORTAGE_PYTHON@}" "$PORTAGE_BIN_PATH"/gpkg-helper.py compress \
- 			"${CATEGORY}/${PF}" "$PORTAGE_BINPKG_TMPFILE" "$PORTAGE_BUILDDIR/build-info" "${D}"
 -			"${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}"/gpkg-helper.py compress \
++			"${PORTAGE_PYTHON:-@PREFIX_PORTAGE_PYTHON@}" "${PORTAGE_BIN_PATH}"/gpkg-helper.py compress \
+ 			"${PF}${BUILD_ID:+-${BUILD_ID}}" "${PORTAGE_BINPKG_TMPFILE}" "${PORTAGE_BUILDDIR}/build-info" "${D}"
 +		# END PREFIX LOCAL
  		if [[ $? -ne 0 ]]; then
  			rm -f "${PORTAGE_BINPKG_TMPFILE}"
  			die "Failed to create binpkg file"
diff --cc bin/phase-functions.sh
index 8efd12f22,071941ff7..d0f3a0f85
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -1099,15 -1108,17 +1109,17 @@@ __ebuild_main() 
  		# Use safe cwd, avoiding unsafe import for bug #469338.
  		cd "${PORTAGE_PYM_PATH}"
  		__save_ebuild_env | __filter_readonly_variables \
- 			--filter-features > "$T/environment"
+ 			--filter-features > "${T}/environment"
  		assert "__save_ebuild_env failed"
- 		# PREFIX LOCAL: use configure group
- 		chgrp "${PORTAGE_GRPNAME:-${PORTAGE_GROUP}}" "$T/environment"
- 		chmod g+w "$T/environment"
 -
 -		chgrp "${PORTAGE_GRPNAME:-portage}" "${T}/environment"
++		# PREFIX LOCAL: use configured group
++		chgrp "${PORTAGE_GRPNAME:-${PORTAGE_GROUP}}" "${T}/environment"
+ 		chmod g+w "${T}/environment"
  	fi
- 	[[ -n $PORTAGE_EBUILD_EXIT_FILE ]] && > "$PORTAGE_EBUILD_EXIT_FILE"
- 	if [[ -n $PORTAGE_IPC_DAEMON ]] ; then
- 		[[ ! -s $SANDBOX_LOG ]]
- 		"$PORTAGE_BIN_PATH"/ebuild-ipc exit $?
+ 
+ 	[[ -n ${PORTAGE_EBUILD_EXIT_FILE} ]] && > "${PORTAGE_EBUILD_EXIT_FILE}"
+ 	if [[ -n ${PORTAGE_IPC_DAEMON} ]] ; then
+ 		[[ ! -s ${SANDBOX_LOG} ]]
+ 
+ 		"${PORTAGE_BIN_PATH}"/ebuild-ipc exit $?
  	fi
  }
diff --cc bin/save-ebuild-env.sh
index 3520d0416,bba468da1..36eedc7fa
mode 100755,100644..100755
--- a/bin/save-ebuild-env.sh
+++ b/bin/save-ebuild-env.sh
diff --cc lib/_emerge/depgraph.py
index c5d0343b7,28acfed9d..c6b63738a
--- a/lib/_emerge/depgraph.py
+++ b/lib/_emerge/depgraph.py
@@@ -11869,20 -11801,8 +11801,20 @@@ def _get_masking_status(pkg, pkgsetting
  
      if not pkg.installed:
          if not pkgsettings._accept_chost(pkg.cpv, pkg._metadata):
-             mreasons.append(_MaskReason("CHOST", "CHOST: %s" % pkg._metadata["CHOST"]))
+             mreasons.append(_MaskReason("CHOST", f"CHOST: {pkg._metadata['CHOST']}"))
  
 +    # BEGIN PREFIX LOCAL: check EPREFIX
 +    eprefix = pkgsettings["EPREFIX"]
 +    if len(eprefix.rstrip('/')) > 0 and pkg.built and not pkg.installed:
 +        if not "EPREFIX" in pkg._metadata:
 +            mreasons.append(_MaskReason("EPREFIX",
 +                "missing EPREFIX"))
 +        elif len(pkg._metadata["EPREFIX"].strip()) < len(eprefix):
 +            mreasons.append(_MaskReason("EPREFIX",
 +                "EPREFIX: '%s' too small" % \
 +                    pkg._metadata["EPREFIX"]))
 +    # END PREFIX LOCAL
 +
      if pkg.invalid:
          for msgs in pkg.invalid.values():
              for msg in msgs:
diff --cc lib/portage/__init__.py
index ab3017a5d,aa7e69920..ea1ebc2bb
--- a/lib/portage/__init__.py
+++ b/lib/portage/__init__.py
@@@ -53,18 -51,7 +53,17 @@@ except ImportError as e
      sys.stderr.write(f"    {e}\n\n")
      raise
  
 +# BEGIN PREFIX LOCAL
 +# for bug #758230, on macOS the default was switched from fork to spawn,
 +# the latter causing issues because all kinds of things can't be
 +# pickled, so force fork mode for now
 +try:
 +    multiprocessing.set_start_method('fork')
 +except RuntimeError:
 +    pass
 +# END PREFIX LOCAL
 +
  try:
- 
      import portage.proxy.lazyimport
      import portage.proxy as proxy
  
diff --cc lib/portage/const.py
index 980b40b4b,10a208ceb..8aa7e557f
--- a/lib/portage/const.py
+++ b/lib/portage/const.py
@@@ -1,16 -1,8 +1,15 @@@
  # portage: Constants
- # Copyright 1998-2021 Gentoo Authors
+ # 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
- import sys
  
  # ===========================================================================
  # START OF CONSTANTS -- START OF CONSTANTS -- START OF CONSTANTS -- START OF
diff --cc lib/portage/dbapi/bintree.py
index 986ffeb3d,5f58c548d..78f760444
--- a/lib/portage/dbapi/bintree.py
+++ b/lib/portage/dbapi/bintree.py
@@@ -104,36 -104,31 +104,33 @@@ class bindbapi(fakedbapi)
          self.bintree = mybintree
          self.move_ent = mybintree.move_ent
          # Selectively cache metadata in order to optimize dep matching.
-         self._aux_cache_keys = set(
-             [
-                 "BDEPEND",
-                 "BINPKG_FORMAT",
-                 "BUILD_ID",
-                 "BUILD_TIME",
-                 "CHOST",
-                 "DEFINED_PHASES",
-                 "DEPEND",
-                 "EAPI",
-                 "IDEPEND",
-                 "IUSE",
-                 "KEYWORDS",
-                 "LICENSE",
-                 "MD5",
-                 "PDEPEND",
-                 "PROPERTIES",
-                 "PROVIDES",
-                 "RDEPEND",
-                 "repository",
-                 "REQUIRES",
-                 "RESTRICT",
-                 "SIZE",
-                 "SLOT",
-                 "USE",
-                 "_mtime_",
-                 # PREFIX LOCAL
-                 "EPREFIX",
-             ]
-         )
+         self._aux_cache_keys = {
+             "BDEPEND",
+             "BUILD_ID",
+             "BUILD_TIME",
+             "CHOST",
+             "DEFINED_PHASES",
+             "DEPEND",
+             "EAPI",
+             "IDEPEND",
+             "IUSE",
+             "KEYWORDS",
+             "LICENSE",
+             "MD5",
+             "PDEPEND",
+             "PROPERTIES",
+             "PROVIDES",
+             "RDEPEND",
+             "repository",
+             "REQUIRES",
+             "RESTRICT",
+             "SIZE",
+             "SLOT",
+             "USE",
+             "_mtime_",
++            # PREFIX LOCAL
++            "EPREFIX",
+         }
          self._aux_cache_slot_dict = slot_dict_class(self._aux_cache_keys)
          self._aux_cache = {}
  
@@@ -474,150 -468,134 +470,140 @@@ class binarytree
                  stacklevel=2,
              )
  
-         if True:
-             self.pkgdir = normalize_path(pkgdir)
-             # NOTE: Event if binpkg-multi-instance is disabled, it's
-             # still possible to access a PKGDIR which uses the
-             # binpkg-multi-instance layout (or mixed layout).
-             self._multi_instance = "binpkg-multi-instance" in settings.features
-             if self._multi_instance:
-                 self._allocate_filename = self._allocate_filename_multi
-             self.dbapi = bindbapi(self, settings=settings)
-             self.update_ents = self.dbapi.update_ents
-             self.move_slot_ent = self.dbapi.move_slot_ent
-             self.populated = 0
-             self.tree = {}
-             self._binrepos_conf = None
-             self._remote_has_index = False
-             self._remotepkgs = None  # remote metadata indexed by cpv
-             self._additional_pkgs = {}
-             self.invalids = []
-             self.settings = settings
-             self._pkg_paths = {}
-             self._populating = False
-             self._all_directory = os.path.isdir(os.path.join(self.pkgdir, "All"))
-             self._pkgindex_version = 0
-             self._pkgindex_hashes = ["MD5", "SHA1"]
-             self._pkgindex_file = os.path.join(self.pkgdir, "Packages")
-             self._pkgindex_keys = self.dbapi._aux_cache_keys.copy()
-             self._pkgindex_keys.update(["CPV", "SIZE"])
-             self._pkgindex_aux_keys = [
-                 "BASE_URI",
-                 "BDEPEND",
-                 "BINPKG_FORMAT",
-                 "BUILD_ID",
-                 "BUILD_TIME",
-                 "CHOST",
-                 "DEFINED_PHASES",
-                 "DEPEND",
-                 "DESCRIPTION",
-                 "EAPI",
-                 "FETCHCOMMAND",
-                 "IDEPEND",
-                 "IUSE",
-                 "KEYWORDS",
-                 "LICENSE",
-                 "PDEPEND",
-                 "PKGINDEX_URI",
-                 "PROPERTIES",
-                 "PROVIDES",
-                 "RDEPEND",
-                 "repository",
-                 "REQUIRES",
-                 "RESTRICT",
-                 "RESUMECOMMAND",
-                 "SIZE",
-                 "SLOT",
-                 "USE",
-                 # PREFIX LOCAL
-                 "EPREFIX",
-             ]
-             self._pkgindex_aux_keys = list(self._pkgindex_aux_keys)
-             self._pkgindex_use_evaluated_keys = (
-                 "BDEPEND",
-                 "DEPEND",
-                 "IDEPEND",
-                 "LICENSE",
-                 "RDEPEND",
-                 "PDEPEND",
-                 "PROPERTIES",
-                 "RESTRICT",
-             )
-             self._pkgindex_header = None
-             self._pkgindex_header_keys = set(
-                 [
-                     "ACCEPT_KEYWORDS",
-                     "ACCEPT_LICENSE",
-                     "ACCEPT_PROPERTIES",
-                     "ACCEPT_RESTRICT",
-                     "BINPKG_FORMAT",
-                     "CBUILD",
-                     "CONFIG_PROTECT",
-                     "CONFIG_PROTECT_MASK",
-                     "FEATURES",
-                     "GENTOO_MIRRORS",
-                     "INSTALL_MASK",
-                     "IUSE_IMPLICIT",
-                     "USE",
-                     "USE_EXPAND",
-                     "USE_EXPAND_HIDDEN",
-                     "USE_EXPAND_IMPLICIT",
-                     "USE_EXPAND_UNPREFIXED",
-                     # PREFIX LOCAL
-                     "EPREFIX",
-                 ]
-             )
-             self._pkgindex_default_pkg_data = {
-                 "BDEPEND": "",
-                 "BUILD_ID": "",
-                 "BUILD_TIME": "",
-                 "DEFINED_PHASES": "",
-                 "DEPEND": "",
-                 "EAPI": "0",
-                 "IDEPEND": "",
-                 "IUSE": "",
-                 "KEYWORDS": "",
-                 "LICENSE": "",
-                 "PATH": "",
-                 "PDEPEND": "",
-                 "PROPERTIES": "",
-                 "PROVIDES": "",
-                 "RDEPEND": "",
-                 "REQUIRES": "",
-                 "RESTRICT": "",
-                 "SLOT": "0",
-                 "USE": "",
-             }
-             self._pkgindex_inherited_keys = ["BINPKG_FORMAT", "CHOST",
-                     # PREFIX LOCAL
-                     "EPREFIX",
-                     "repository"]
- 
-             # Populate the header with appropriate defaults.
-             self._pkgindex_default_header_data = {
-                 "BINPKG_FORMAT": self.settings.get(
-                     "BINPKG_FORMAT", SUPPORTED_GENTOO_BINPKG_FORMATS[0]
-                 ),
-                 "CHOST": self.settings.get("CHOST", ""),
-                 "repository": "",
-             }
- 
-             self._pkgindex_translated_keys = (
-                 ("DESCRIPTION", "DESC"),
-                 ("_mtime_", "MTIME"),
-                 ("repository", "REPO"),
-             )
+         self.pkgdir = normalize_path(pkgdir)
+         # NOTE: Event if binpkg-multi-instance is disabled, it's
+         # still possible to access a PKGDIR which uses the
+         # binpkg-multi-instance layout (or mixed layout).
+         self._multi_instance = "binpkg-multi-instance" in settings.features
+         if self._multi_instance:
+             self._allocate_filename = self._allocate_filename_multi
+         self.dbapi = bindbapi(self, settings=settings)
+         self.update_ents = self.dbapi.update_ents
+         self.move_slot_ent = self.dbapi.move_slot_ent
+         self.populated = 0
+         self.tree = {}
+         self._binrepos_conf = None
+         self._remote_has_index = False
+         self._remotepkgs = None  # remote metadata indexed by cpv
+         self._additional_pkgs = {}
+         self.invalids = []
+         self.settings = settings
+         self._pkg_paths = {}
+         self._populating = False
+         self._all_directory = os.path.isdir(os.path.join(self.pkgdir, "All"))
+         self._pkgindex_version = 0
+         self._pkgindex_hashes = ["MD5", "SHA1"]
+         self._pkgindex_file = os.path.join(self.pkgdir, "Packages")
+         self._pkgindex_keys = self.dbapi._aux_cache_keys.copy()
+         self._pkgindex_keys.update(["CPV", "SIZE"])
+         self._pkgindex_aux_keys = [
+             "BASE_URI",
+             "BDEPEND",
+             "BUILD_ID",
+             "BUILD_TIME",
+             "CHOST",
+             "DEFINED_PHASES",
+             "DEPEND",
+             "DESCRIPTION",
+             "EAPI",
+             "FETCHCOMMAND",
+             "IDEPEND",
+             "IUSE",
+             "KEYWORDS",
+             "LICENSE",
+             "PDEPEND",
+             "PKGINDEX_URI",
+             "PROPERTIES",
+             "PROVIDES",
+             "RDEPEND",
+             "repository",
+             "REQUIRES",
+             "RESTRICT",
+             "RESUMECOMMAND",
+             "SIZE",
+             "SLOT",
+             "USE",
++            # PREFIX LOCAL
++            "EPREFIX",
+         ]
+         self._pkgindex_use_evaluated_keys = (
+             "BDEPEND",
+             "DEPEND",
+             "IDEPEND",
+             "LICENSE",
+             "RDEPEND",
+             "PDEPEND",
+             "PROPERTIES",
+             "RESTRICT",
+         )
+         self._pkgindex_header = None
+         self._pkgindex_header_keys = {
+             "ACCEPT_KEYWORDS",
+             "ACCEPT_LICENSE",
+             "ACCEPT_PROPERTIES",
+             "ACCEPT_RESTRICT",
+             "CBUILD",
+             "CONFIG_PROTECT",
+             "CONFIG_PROTECT_MASK",
+             "FEATURES",
+             "GENTOO_MIRRORS",
+             "INSTALL_MASK",
+             "IUSE_IMPLICIT",
+             "USE",
+             "USE_EXPAND",
+             "USE_EXPAND_HIDDEN",
+             "USE_EXPAND_IMPLICIT",
+             "USE_EXPAND_UNPREFIXED",
++            # PREFIX LOCAL
++            "EPREFIX",
+         }
+         self._pkgindex_default_pkg_data = {
+             "BDEPEND": "",
+             "BUILD_ID": "",
+             "BUILD_TIME": "",
+             "DEFINED_PHASES": "",
+             "DEPEND": "",
+             "EAPI": "0",
+             "IDEPEND": "",
+             "IUSE": "",
+             "KEYWORDS": "",
+             "LICENSE": "",
+             "PATH": "",
+             "PDEPEND": "",
+             "PROPERTIES": "",
+             "PROVIDES": "",
+             "RDEPEND": "",
+             "REQUIRES": "",
+             "RESTRICT": "",
+             "SLOT": "0",
+             "USE": "",
+         }
+         self._pkgindex_inherited_keys = ["CHOST", "repository"]
++        # PREFIX LOCAL
++        self._pkgindex_inherited_keys += ["EPREFIX"]
+ 
+         # Populate the header with appropriate defaults.
+         self._pkgindex_default_header_data = {
+             "CHOST": self.settings.get("CHOST", ""),
+             "repository": "",
+         }
+ 
+         self._pkgindex_translated_keys = (
+             ("DESCRIPTION", "DESC"),
+             ("_mtime_", "MTIME"),
+             ("repository", "REPO"),
+         )
  
-             self._pkgindex_allowed_pkg_keys = set(
-                 chain(
-                     self._pkgindex_keys,
-                     self._pkgindex_aux_keys,
-                     self._pkgindex_hashes,
-                     self._pkgindex_default_pkg_data,
-                     self._pkgindex_inherited_keys,
-                     chain(*self._pkgindex_translated_keys),
-                 )
+         self._pkgindex_allowed_pkg_keys = set(
+             chain(
+                 self._pkgindex_keys,
+                 self._pkgindex_aux_keys,
+                 self._pkgindex_hashes,
+                 self._pkgindex_default_pkg_data,
+                 self._pkgindex_inherited_keys,
+                 chain(*self._pkgindex_translated_keys),
              )
+         )
  
      @property
      def root(self):
diff --cc lib/portage/package/ebuild/_config/special_env_vars.py
index d974325e0,beb411188..b41c952e2
--- a/lib/portage/package/ebuild/_config/special_env_vars.py
+++ b/lib/portage/package/ebuild/_config/special_env_vars.py
@@@ -82,174 -80,167 +80,172 @@@ env_blacklist = frozenset
  # important to set our special BASH_ENV variable in the ebuild
  # environment in order to prevent sandbox from sourcing /etc/profile
  # in it's bashrc (causing major leakage).
- environ_whitelist += [
-     "ACCEPT_LICENSE",
-     "BASH_ENV",
-     "BASH_FUNC____in_portage_iuse%%",
-     "BINPKG_FORMAT",
-     "BROOT",
-     "BUILD_PREFIX",
-     "COLUMNS",
-     "D",
-     "DISTDIR",
-     "DOC_SYMLINKS_DIR",
-     "EAPI",
-     "EBUILD",
-     "EBUILD_FORCE_TEST",
-     "EBUILD_PHASE",
-     "EBUILD_PHASE_FUNC",
-     "ECLASSDIR",
-     "ECLASS_DEPTH",
-     "ED",
-     "EMERGE_FROM",
-     "ENV_UNSET",
-     "EPREFIX",
-     "EROOT",
-     "ESYSROOT",
-     "FEATURES",
-     "FILESDIR",
-     "HOME",
-     "MERGE_TYPE",
-     "NOCOLOR",
-     "PATH",
-     "PKGDIR",
-     "PKGUSE",
-     "PKG_LOGDIR",
-     "PKG_TMPDIR",
-     "PORTAGE_ACTUAL_DISTDIR",
-     "PORTAGE_ARCHLIST",
-     "PORTAGE_BASHRC_FILES",
-     "PORTAGE_BASHRC",
-     "PM_EBUILD_HOOK_DIR",
-     "PORTAGE_BINPKG_FILE",
-     "PORTAGE_BINPKG_TAR_OPTS",
-     "PORTAGE_BINPKG_TMPFILE",
-     "PORTAGE_BIN_PATH",
-     "PORTAGE_BUILDDIR",
-     "PORTAGE_BUILD_GROUP",
-     "PORTAGE_BUILD_USER",
-     "PORTAGE_BUNZIP2_COMMAND",
-     "PORTAGE_BZIP2_COMMAND",
-     "PORTAGE_COLORMAP",
-     "PORTAGE_COMPRESS",
-     "PORTAGE_COMPRESSION_COMMAND",
-     "PORTAGE_COMPRESS_EXCLUDE_SUFFIXES",
-     "PORTAGE_CONFIGROOT",
-     "PORTAGE_DEBUG",
-     "PORTAGE_DEPCACHEDIR",
-     "PORTAGE_DOHTML_UNWARNED_SKIPPED_EXTENSIONS",
-     "PORTAGE_DOHTML_UNWARNED_SKIPPED_FILES",
-     "PORTAGE_DOHTML_WARN_ON_SKIPPED_FILES",
-     "PORTAGE_EBUILD_EXIT_FILE",
-     "PORTAGE_FEATURES",
-     "PORTAGE_GID",
-     "PORTAGE_GRPNAME",
-     "PORTAGE_INTERNAL_CALLER",
-     "PORTAGE_INST_GID",
-     "PORTAGE_INST_UID",
-     "PORTAGE_IPC_DAEMON",
-     "PORTAGE_IUSE",
-     "PORTAGE_ECLASS_LOCATIONS",
-     "PORTAGE_LOG_FILE",
-     "PORTAGE_OVERRIDE_EPREFIX",
-     "PORTAGE_PIPE_FD",
-     "PORTAGE_PROPERTIES",
-     "PORTAGE_PYM_PATH",
-     "PORTAGE_PYTHON",
-     "PORTAGE_PYTHONPATH",
-     "PORTAGE_QUIET",
-     "PORTAGE_REPO_NAME",
-     "PORTAGE_REPOSITORIES",
-     "PORTAGE_RESTRICT",
-     "PORTAGE_SIGPIPE_STATUS",
-     "PORTAGE_SOCKS5_PROXY",
-     "PORTAGE_TMPDIR",
-     "PORTAGE_UPDATE_ENV",
-     "PORTAGE_USERNAME",
-     "PORTAGE_VERBOSE",
-     "PORTAGE_WORKDIR_MODE",
-     "PORTAGE_XATTR_EXCLUDE",
-     "PORTDIR",
-     "PORTDIR_OVERLAY",
-     "PREROOTPATH",
-     "PYTHONDONTWRITEBYTECODE",
-     "REPLACING_VERSIONS",
-     "REPLACED_BY_VERSION",
-     "ROOT",
-     "ROOTPATH",
-     "SANDBOX_LOG",
-     "SYSROOT",
-     "T",
-     "TMP",
-     "TMPDIR",
-     "USE_EXPAND",
-     "USE_ORDER",
-     "WORKDIR",
-     "XARGS",
-     "__PORTAGE_TEST_HARDLINK_LOCKS",
-     # BEGIN PREFIX LOCAL
-     "EXTRA_PATH",
-     "PORTAGE_GROUP",
-     "PORTAGE_USER",
-     # END PREFIX LOCAL
- ]
- 
- # user config variables
- environ_whitelist += ["DOC_SYMLINKS_DIR", "INSTALL_MASK", "PKG_INSTALL_MASK"]
- 
- environ_whitelist += ["A", "AA", "CATEGORY", "P", "PF", "PN", "PR", "PV", "PVR"]
- 
- # misc variables inherited from the calling environment
- environ_whitelist += [
-     "COLORTERM",
-     "DISPLAY",
-     "EDITOR",
-     "LESS",
-     "LESSOPEN",
-     "LOGNAME",
-     "LS_COLORS",
-     "PAGER",
-     "TERM",
-     "TERMCAP",
-     "USER",
-     "ftp_proxy",
-     "http_proxy",
-     "no_proxy",
- ]
- 
- # tempdir settings
- environ_whitelist += [
-     "TMPDIR",
-     "TEMP",
-     "TMP",
- ]
- 
- # localization settings
- environ_whitelist += [
-     "LANG",
-     "LC_COLLATE",
-     "LC_CTYPE",
-     "LC_MESSAGES",
-     "LC_MONETARY",
-     "LC_NUMERIC",
-     "LC_TIME",
-     "LC_PAPER",
-     "LC_ALL",
- ]
- 
- # other variables inherited from the calling environment
- environ_whitelist += [
-     "CVS_RSH",
-     "ECHANGELOG_USER",
-     "GPG_AGENT_INFO",
-     "SSH_AGENT_PID",
-     "SSH_AUTH_SOCK",
-     "STY",
-     "WINDOW",
-     "XAUTHORITY",
- ]
- 
- environ_whitelist = frozenset(environ_whitelist)
+ environ_whitelist = frozenset(
+     (
+         "A",
+         "AA",
+         "ACCEPT_LICENSE",
+         "BASH_ENV",
+         "BASH_FUNC____in_portage_iuse%%",
+         "BINPKG_FORMAT",
+         "BROOT",
+         "BUILD_ID",
+         "BUILD_PREFIX",
+         "CATEGORY",
+         "COLUMNS",
+         "D",
+         "DISTDIR",
+         "DOC_SYMLINKS_DIR",
+         "EAPI",
+         "EBUILD",
+         "EBUILD_FORCE_TEST",
+         "EBUILD_PHASE",
+         "EBUILD_PHASE_FUNC",
+         "ECLASSDIR",
+         "ECLASS_DEPTH",
+         "ED",
+         "EMERGE_FROM",
+         "ENV_UNSET",
+         "EPREFIX",
+         "EROOT",
+         "ESYSROOT",
+         "FEATURES",
+         "FILESDIR",
+         "HOME",
+         "MERGE_TYPE",
+         "NOCOLOR",
+         "NO_COLOR",
+         "P",
+         "PATH",
+         "PF",
+         "PKGDIR",
+         "PKGUSE",
+         "PKG_LOGDIR",
+         "PKG_TMPDIR",
+         "PM_EBUILD_HOOK_DIR",
+         "PN",
+         "PORTAGE_ACTUAL_DISTDIR",
+         "PORTAGE_ARCHLIST",
+         "PORTAGE_BASHRC_FILES",
+         "PORTAGE_BASHRC",
+         "PORTAGE_BINPKG_FILE",
+         "PORTAGE_BINPKG_TAR_OPTS",
+         "PORTAGE_BINPKG_TMPFILE",
+         "PORTAGE_BIN_PATH",
+         "PORTAGE_BUILDDIR",
+         "PORTAGE_BUILD_GROUP",
+         "PORTAGE_BUILD_USER",
+         "PORTAGE_BUNZIP2_COMMAND",
+         "PORTAGE_BZIP2_COMMAND",
+         "PORTAGE_COLORMAP",
+         "PORTAGE_COMPRESS",
+         "PORTAGE_COMPRESSION_COMMAND",
+         "PORTAGE_COMPRESS_EXCLUDE_SUFFIXES",
+         "PORTAGE_CONFIGROOT",
+         "PORTAGE_DEBUG",
+         "PORTAGE_DEPCACHEDIR",
+         "PORTAGE_DOHTML_UNWARNED_SKIPPED_EXTENSIONS",
+         "PORTAGE_DOHTML_UNWARNED_SKIPPED_FILES",
+         "PORTAGE_DOHTML_WARN_ON_SKIPPED_FILES",
+         "PORTAGE_EBUILD_EXIT_FILE",
+         "PORTAGE_FEATURES",
+         "PORTAGE_GID",
+         "PORTAGE_GRPNAME",
+         "PORTAGE_INTERNAL_CALLER",
+         "PORTAGE_INST_GID",
+         "PORTAGE_INST_UID",
+         "PORTAGE_IPC_DAEMON",
+         "PORTAGE_IUSE",
+         "PORTAGE_ECLASS_LOCATIONS",
+         "PORTAGE_LOG_FILE",
+         "PORTAGE_OVERRIDE_EPREFIX",
+         "PORTAGE_PIPE_FD",
+         "PORTAGE_PROPERTIES",
+         "PORTAGE_PYM_PATH",
+         "PORTAGE_PYTHON",
+         "PORTAGE_PYTHONPATH",
+         "PORTAGE_QUIET",
+         "PORTAGE_REPO_NAME",
+         "PORTAGE_REPOSITORIES",
+         "PORTAGE_RESTRICT",
+         "PORTAGE_SIGPIPE_STATUS",
+         "PORTAGE_SOCKS5_PROXY",
+         "PORTAGE_TMPDIR",
+         "PORTAGE_UPDATE_ENV",
+         "PORTAGE_USERNAME",
+         "PORTAGE_VERBOSE",
+         "PORTAGE_WORKDIR_MODE",
+         "PORTAGE_XATTR_EXCLUDE",
+         "PORTDIR",
+         "PORTDIR_OVERLAY",
+         "PR",
+         "PREROOTPATH",
+         "PV",
+         "PVR",
+         "PYTHONDONTWRITEBYTECODE",
+         "REPLACING_VERSIONS",
+         "REPLACED_BY_VERSION",
+         "ROOT",
+         "ROOTPATH",
+         "SANDBOX_LOG",
+         "SYSROOT",
+         "T",
+         "TMP",
+         "TMPDIR",
+         "USE_EXPAND",
+         "USE_ORDER",
+         "WORKDIR",
+         "XARGS",
+         "__PORTAGE_TEST_HARDLINK_LOCKS",
+         # user config variables
+         "DOC_SYMLINKS_DIR",
+         "INSTALL_MASK",
+         "PKG_INSTALL_MASK",
+         # misc variables inherited from the calling environment
+         "COLORTERM",
+         "DISPLAY",
+         "EDITOR",
+         "LESS",
+         "LESSOPEN",
+         "LOGNAME",
+         "LS_COLORS",
+         "PAGER",
+         "TERM",
+         "TERMCAP",
+         "USER",
+         "ftp_proxy",
+         "http_proxy",
+         "no_proxy",
+         # tempdir settings
+         "TMPDIR",
+         "TEMP",
+         "TMP",
+         # localization settings
+         "LANG",
+         "LC_COLLATE",
+         "LC_CTYPE",
+         "LC_MESSAGES",
+         "LC_MONETARY",
+         "LC_NUMERIC",
+         "LC_TIME",
+         "LC_PAPER",
+         "LC_ALL",
+         # other variables inherited from the calling environment
+         "CVS_RSH",
+         "ECHANGELOG_USER",
+         "GPG_AGENT_INFO",
+         "SSH_AGENT_PID",
+         "SSH_AUTH_SOCK",
+         "STY",
+         "WINDOW",
+         "XAUTHORITY",
++        # BEGIN PREFIX LOCAL
++        "EXTRA_PATH",
++        "PORTAGE_GROUP",
++        "PORTAGE_USER",
++        # END PREFIX LOCAL
+     )
+ )
  
  environ_whitelist_re = re.compile(r"^(CCACHE_|DISTCC_).*")
  
@@@ -258,116 -249,91 +254,104 @@@
  # Exclude anything that could be extremely long here (like SRC_URI)
  # since that could cause execve() calls to fail with E2BIG errors. For
  # example, see bug #262647.
- environ_filter += [
-     "DEPEND",
-     "RDEPEND",
-     "PDEPEND",
-     "SRC_URI",
-     "BDEPEND",
-     "IDEPEND",
- ]
- 
- # misc variables inherited from the calling environment
- environ_filter += [
-     "INFOPATH",
-     "MANPATH",
-     "USER",
-     # BEGIN PREFIX LOCAL
-     "HOST",
-     "GROUP",
-     "LOGNAME",
-     "MAIL",
-     "REMOTEHOST",
-     "SECURITYSESSIONID",
-     "TERMINFO",
-     "TERM_PROGRAM",
-     "TERM_PROGRAM_VERSION",
-     "VENDOR",
-     "__CF_USER_TEXT_ENCODING",
-     # END PREFIX LOCAL
- ]
- 
- # variables that break bash
- environ_filter += [
-     "HISTFILE",
-     "POSIXLY_CORRECT",
- ]
- 
- # portage config variables and variables set directly by portage
- environ_filter += [
-     "ACCEPT_CHOSTS",
-     "ACCEPT_KEYWORDS",
-     "ACCEPT_PROPERTIES",
-     "ACCEPT_RESTRICT",
-     "AUTOCLEAN",
-     "BINPKG_COMPRESS",
-     "BINPKG_COMPRESS_FLAGS",
-     "CLEAN_DELAY",
-     "COLLISION_IGNORE",
-     "CONFIG_PROTECT",
-     "CONFIG_PROTECT_MASK",
-     "EGENCACHE_DEFAULT_OPTS",
-     "EMERGE_DEFAULT_OPTS",
-     "EMERGE_LOG_DIR",
-     "EMERGE_WARNING_DELAY",
-     "FETCHCOMMAND",
-     "FETCHCOMMAND_FTP",
-     "FETCHCOMMAND_HTTP",
-     "FETCHCOMMAND_HTTPS",
-     "FETCHCOMMAND_RSYNC",
-     "FETCHCOMMAND_SFTP",
-     "GENTOO_MIRRORS",
-     "NOCONFMEM",
-     "O",
-     "PORTAGE_BACKGROUND",
-     "PORTAGE_BACKGROUND_UNMERGE",
-     "PORTAGE_BINHOST",
-     "PORTAGE_BINPKG_FORMAT",
-     "PORTAGE_BUILDDIR_LOCKED",
-     "PORTAGE_CHECKSUM_FILTER",
-     "PORTAGE_ELOG_CLASSES",
-     "PORTAGE_ELOG_MAILFROM",
-     "PORTAGE_ELOG_MAILSUBJECT",
-     "PORTAGE_ELOG_MAILURI",
-     "PORTAGE_ELOG_SYSTEM",
-     "PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS",
-     "PORTAGE_FETCH_RESUME_MIN_SIZE",
-     "PORTAGE_GPG_DIR",
-     "PORTAGE_GPG_KEY",
-     "PORTAGE_GPG_SIGNING_COMMAND",
-     "PORTAGE_IONICE_COMMAND",
-     "PORTAGE_PACKAGE_EMPTY_ABORT",
-     "PORTAGE_REPO_DUPLICATE_WARN",
-     "PORTAGE_RO_DISTDIRS",
-     "PORTAGE_RSYNC_EXTRA_OPTS",
-     "PORTAGE_RSYNC_OPTS",
-     "PORTAGE_RSYNC_RETRIES",
-     "PORTAGE_SSH_OPTS",
-     "PORTAGE_SYNC_STALE",
-     "PORTAGE_USE",
-     "PORTAGE_LOG_FILTER_FILE_CMD",
-     "PORTAGE_LOGDIR",
-     "PORTAGE_LOGDIR_CLEAN",
-     "QUICKPKG_DEFAULT_OPTS",
-     "REPOMAN_DEFAULT_OPTS",
-     "RESUMECOMMAND",
-     "RESUMECOMMAND_FTP",
-     "RESUMECOMMAND_HTTP",
-     "RESUMECOMMAND_HTTPS",
-     "RESUMECOMMAND_RSYNC",
-     "RESUMECOMMAND_SFTP",
-     "UNINSTALL_IGNORE",
-     "USE_EXPAND_HIDDEN",
-     "USE_ORDER",
-     "__PORTAGE_HELPER",
- ]
- 
- # No longer supported variables
- environ_filter += ["SYNC"]
- 
- environ_filter = frozenset(environ_filter)
+ environ_filter = frozenset(
+     (
+         "DEPEND",
+         "RDEPEND",
+         "PDEPEND",
+         "SRC_URI",
+         "BDEPEND",
+         "IDEPEND",
+         # misc variables inherited from the calling environment
+         "INFOPATH",
+         "MANPATH",
+         "USER",
++        # BEGIN PREFIX LOCAL
++        "HOST",
++        "GROUP",
++        "LOGNAME",
++        "MAIL",
++        "REMOTEHOST",
++        "SECURITYSESSIONID",
++        "TERMINFO",
++        "TERM_PROGRAM",
++        "TERM_PROGRAM_VERSION",
++        "VENDOR",
++        "__CF_USER_TEXT_ENCODING",
++        # END PREFIX LOCAL
+         # variables that break bash
+         "HISTFILE",
+         "POSIXLY_CORRECT",
+         # portage config variables and variables set directly by portage
+         "ACCEPT_CHOSTS",
+         "ACCEPT_KEYWORDS",
+         "ACCEPT_PROPERTIES",
+         "ACCEPT_RESTRICT",
+         "AUTOCLEAN",
+         "BINPKG_COMPRESS",
+         "BINPKG_COMPRESS_FLAGS",
+         "CLEAN_DELAY",
+         "COLLISION_IGNORE",
+         "CONFIG_PROTECT",
+         "CONFIG_PROTECT_MASK",
+         "EGENCACHE_DEFAULT_OPTS",
+         "EMERGE_DEFAULT_OPTS",
+         "EMERGE_LOG_DIR",
+         "EMERGE_WARNING_DELAY",
+         "FETCHCOMMAND",
+         "FETCHCOMMAND_FTP",
+         "FETCHCOMMAND_HTTP",
+         "FETCHCOMMAND_HTTPS",
+         "FETCHCOMMAND_RSYNC",
+         "FETCHCOMMAND_SFTP",
+         "GENTOO_MIRRORS",
+         "NOCONFMEM",
+         "O",
+         "PORTAGE_BACKGROUND",
+         "PORTAGE_BACKGROUND_UNMERGE",
+         "PORTAGE_BINHOST",
+         "PORTAGE_BINPKG_FORMAT",
+         "PORTAGE_BUILDDIR_LOCKED",
+         "PORTAGE_CHECKSUM_FILTER",
+         "PORTAGE_ELOG_CLASSES",
+         "PORTAGE_ELOG_MAILFROM",
+         "PORTAGE_ELOG_MAILSUBJECT",
+         "PORTAGE_ELOG_MAILURI",
+         "PORTAGE_ELOG_SYSTEM",
+         "PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS",
+         "PORTAGE_FETCH_RESUME_MIN_SIZE",
+         "PORTAGE_GPG_DIR",
+         "PORTAGE_GPG_KEY",
+         "PORTAGE_GPG_SIGNING_COMMAND",
+         "PORTAGE_IONICE_COMMAND",
+         "PORTAGE_PACKAGE_EMPTY_ABORT",
+         "PORTAGE_REPO_DUPLICATE_WARN",
+         "PORTAGE_RO_DISTDIRS",
+         "PORTAGE_RSYNC_EXTRA_OPTS",
+         "PORTAGE_RSYNC_OPTS",
+         "PORTAGE_RSYNC_RETRIES",
+         "PORTAGE_SSH_OPTS",
+         "PORTAGE_SYNC_STALE",
+         "PORTAGE_USE",
+         "PORTAGE_LOG_FILTER_FILE_CMD",
+         "PORTAGE_LOGDIR",
+         "PORTAGE_LOGDIR_CLEAN",
+         "QUICKPKG_DEFAULT_OPTS",
+         "REPOMAN_DEFAULT_OPTS",
+         "RESUMECOMMAND",
+         "RESUMECOMMAND_FTP",
+         "RESUMECOMMAND_HTTP",
+         "RESUMECOMMAND_HTTPS",
+         "RESUMECOMMAND_RSYNC",
+         "RESUMECOMMAND_SFTP",
+         "UNINSTALL_IGNORE",
+         "USE_EXPAND_HIDDEN",
+         "USE_ORDER",
+         "__PORTAGE_HELPER",
+         # No longer supported variables
+         "SYNC",
+     )
+ )
  
  # Variables that are not allowed to have per-repo or per-package
  # settings.
diff --cc lib/portage/package/ebuild/doebuild.py
index e9d7a858f,8b65a7862..48e9c9896
--- a/lib/portage/package/ebuild/doebuild.py
+++ b/lib/portage/package/ebuild/doebuild.py
@@@ -324,30 -305,20 +311,25 @@@ def _doebuild_path(settings, eapi=None)
  
      for x in portage_bin_path:
          path.append(os.path.join(x, "ebuild-helpers"))
-     path.extend(prerootpath)
- 
-     for prefix in prefixes:
-         prefix = prefix if prefix else "/"
-         for x in (
-             "usr/local/sbin",
-             "usr/local/bin",
-             "usr/sbin",
-             "usr/bin",
-             "sbin",
-             "bin",
-         ):
-             # Respect order defined in ROOTPATH
-             x_abs = os.path.join(prefix, x)
-             if x_abs not in rootpath_set:
-                 path.append(x_abs)
  
-     path.extend(rootpath)
+     # If PATH is set in env.d, ignore PATH from the calling environment.
+     # This allows packages to update our PATH as they get installed.
+     if "PATH" in settings.configdict["env.d"]:
+         settings.configdict["env"].pop("PATH", None)
+ 
+     if "PATH" in settings:
+         pathset = set(path)
+         for p in settings["PATH"].split(":"):
+             # Avoid duplicate entries.
+             if p not in pathset:
+                 path.append(p)
+                 pathset.add(p)
  
 +    # BEGIN PREFIX LOCAL: append EXTRA_PATH from make.globals
 +    extrapath = [x for x in settings.get("EXTRA_PATH", "").split(":") if x]
 +    path.extend(extrapath)
 +    # END PREFIX LOCAL
 +
      settings["PATH"] = ":".join(path)
  
  
diff --cc lib/portage/tests/runTests.py
index da6d83e85,bf4c2a7c5..17c244dbe
mode 100755,100644..100644
--- a/lib/portage/tests/runTests.py
+++ b/lib/portage/tests/runTests.py
diff --cc lib/portage/util/__init__.py
index 6855a87f1,1f8c9e94f..0be05ab03
--- a/lib/portage/util/__init__.py
+++ b/lib/portage/util/__init__.py
@@@ -51,8 -72,9 +72,11 @@@ import strin
  import sys
  import traceback
  import glob
+ from typing import Optional, TextIO
  
  import portage
++# PREFIX LOCAL
++from portage.const import EPREFIX
  
  portage.proxy.lazyimport.lazyimport(
      globals(),
@@@ -2015,16 -2007,19 +2009,25 @@@ def getlibpaths(root, env=None)
      """ Return a list of paths that are used for library lookups """
      if env is None:
          env = os.environ
 +    # BEGIN PREFIX LOCAL:
 +    # For Darwin, match LD_LIBRARY_PATH with DYLD_LIBRARY_PATH.
 +    # We don't need any host OS lib paths in Prefix, so just going with
 +    # the prefixed one is fine.
      # the following is based on the information from ld.so(8)
      rval = env.get("LD_LIBRARY_PATH", "").split(":")
 -    rval.extend(read_ld_so_conf(os.path.join(root, "etc", "ld.so.conf")))
 -    rval.append("/usr/lib")
 -    rval.append("/lib")
 +    rval.extend(env.get("DYLD_LIBRARY_PATH", "").split(":"))
 +    rval.extend(read_ld_so_conf(os.path.join(root, EPREFIX, "etc", "ld.so.conf")))
 +    rval.append(f"{EPREFIX}/usr/lib")
 +    rval.append(f"{EPREFIX}/lib")
 +    # END PREFIX LOCAL
  
      return [normalize_path(x) for x in rval if x]
+ 
+ 
+ def no_color(settings: Optional[dict]) -> bool:
+     # In several years (2026+), we can cleanup NOCOLOR support, and just support NO_COLOR.
+     has_color: str = settings.get("NO_COLOR")
+     nocolor: str = settings.get("NOCOLOR", "false").lower()
+     if has_color is None:
+         return nocolor in ("yes", "true")
+     return bool(has_color)
diff --cc lib/portage/util/_info_files.py
index 5d4aff1d7,45d674b9b..a5b2b30b4
--- a/lib/portage/util/_info_files.py
+++ b/lib/portage/util/_info_files.py
@@@ -14,9 -12,7 +14,8 @@@ from portage.const import EPREFI
  
  
  def chk_updated_info_files(root, infodirs, prev_mtimes):
- 
 -    if os.path.exists("/usr/bin/install-info"):
 +    # PREFIX LOCAL
 +    if os.path.exists(EPREFIX + "/usr/bin/install-info"):
          out = portage.output.EOutput()
          regen_infodirs = []
          for z in infodirs:
@@@ -80,9 -75,8 +79,9 @@@
                      try:
                          proc = subprocess.Popen(
                              [
 -                                "/usr/bin/install-info",
 +                                # PREFIX LOCAL
-                                 "%s/usr/bin/install-info", EPREFIX,
-                                 "--dir-file=%s" % os.path.join(inforoot, "dir"),
++                                f"{EPREFIX}/usr/bin/install-info",
+                                 f"--dir-file={os.path.join(inforoot, 'dir')}",
                                  os.path.join(inforoot, x),
                              ],
                              env=dict(os.environ, LANG="C", LANGUAGE="C"),


             reply	other threads:[~2023-06-17  8:41 UTC|newest]

Thread overview: 195+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-17  8:41 Fabian Groffen [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-02-25  9:40 [gentoo-commits] proj/portage:prefix commit in: / Fabian Groffen
2024-02-22  7:27 Fabian Groffen
2024-01-18 10:22 Fabian Groffen
2024-01-18  9:36 Fabian Groffen
2023-12-03 10:10 Fabian Groffen
2023-12-03  9:54 Fabian Groffen
2023-12-03  9:54 Fabian Groffen
2023-12-03  9:54 Fabian Groffen
2023-11-24 20:18 Fabian Groffen
2023-11-24 20:06 Fabian Groffen
2023-11-24 20:06 Fabian Groffen
2023-06-22  8:47 Fabian Groffen
2023-06-17  9:04 Fabian Groffen
2022-07-28 17:38 Fabian Groffen
2022-07-27 19:20 Fabian Groffen
2022-07-26 19:39 Fabian Groffen
2022-07-25 15:20 Fabian Groffen
2022-07-24 19:27 Fabian Groffen
2022-07-24 14:01 Fabian Groffen
2022-07-24  9:45 Fabian Groffen
2022-01-14 10:40 Fabian Groffen
2022-01-14 10:32 Fabian Groffen
2021-07-06  7:10 Fabian Groffen
2021-04-16 13:37 Fabian Groffen
2021-01-24  9:02 Fabian Groffen
2021-01-04 10:48 Fabian Groffen
2020-12-07 17:28 Fabian Groffen
2020-12-07 16:46 Fabian Groffen
2020-11-23  7:48 Fabian Groffen
2020-11-22 11:15 Fabian Groffen
2020-09-26 11:29 Fabian Groffen
2020-08-02 12:33 Fabian Groffen
2020-06-02 18:55 Fabian Groffen
2020-01-08 19:14 Fabian Groffen
2019-07-01 13:11 Fabian Groffen
2019-05-30  9:20 Fabian Groffen
2019-02-28 12:31 Fabian Groffen
2019-01-11 10:19 Fabian Groffen
2019-01-07 10:22 Fabian Groffen
2018-12-23 11:14 Fabian Groffen
2018-12-12 18:54 Fabian Groffen
2018-08-04  6:56 Fabian Groffen
2018-06-25  8:34 Fabian Groffen
2018-06-17 14:38 Fabian Groffen
2018-06-17 14:38 Fabian Groffen
2018-05-28 15:24 Fabian Groffen
2018-05-25 19:44 Fabian Groffen
2018-05-25 19:44 Fabian Groffen
2018-05-18 19:46 Fabian Groffen
2017-12-12  8:19 Fabian Groffen
2017-10-29 14:51 Fabian Groffen
2017-10-03  7:32 Fabian Groffen
2017-09-22 10:08 Fabian Groffen
2017-08-21 13:27 Fabian Groffen
2017-08-13  7:21 Fabian Groffen
2017-05-23 13:34 Fabian Groffen
2017-03-25  9:12 Fabian Groffen
2017-03-24 19:09 Fabian Groffen
2017-03-24  7:43 Fabian Groffen
2017-03-23 17:46 Fabian Groffen
2017-03-23 17:32 Fabian Groffen
2017-03-23 17:23 Fabian Groffen
2017-03-23 15:38 Fabian Groffen
2017-03-17  8:25 Fabian Groffen
2017-03-02  8:48 Fabian Groffen
2017-03-02  8:18 Fabian Groffen
2017-02-23 14:05 Fabian Groffen
2017-01-27 15:08 Fabian Groffen
2017-01-27 15:08 Fabian Groffen
2016-03-20 19:31 Fabian Groffen
2016-02-21 16:17 Fabian Groffen
2016-02-21 16:17 Fabian Groffen
2016-02-18 19:35 Fabian Groffen
2016-02-18 19:35 Fabian Groffen
2015-06-20  7:12 Fabian Groffen
2015-06-09 18:30 Fabian Groffen
2015-06-09 18:01 Fabian Groffen
2015-06-04 19:47 Fabian Groffen
2015-04-05  9:15 Fabian Groffen
2014-11-12 17:31 Fabian Groffen
2014-10-02 18:48 Fabian Groffen
2014-09-28 17:52 Fabian Groffen
2014-05-06 19:32 Fabian Groffen
2014-05-06 19:18 Fabian Groffen
2014-04-22 19:52 Fabian Groffen
2014-02-06 21:09 Fabian Groffen
2014-01-06  9:47 Fabian Groffen
2013-09-24 17:29 Fabian Groffen
2013-09-20 17:59 Fabian Groffen
2013-09-18 18:34 Fabian Groffen
2013-09-13 18:02 Fabian Groffen
2013-08-10 20:54 Fabian Groffen
2013-07-10  5:31 Fabian Groffen
2013-07-08 19:32 Fabian Groffen
2013-06-29  5:41 Fabian Groffen
2013-06-27 17:20 Fabian Groffen
2013-06-12  9:02 Fabian Groffen
2013-06-09 15:53 Fabian Groffen
2013-05-04 18:55 Fabian Groffen
2013-04-02 16:57 Fabian Groffen
2013-03-31 19:03 Fabian Groffen
2013-03-31 19:00 Fabian Groffen
2013-03-24  8:36 Fabian Groffen
2013-03-23 19:54 Fabian Groffen
2013-02-28 19:29 Fabian Groffen
2013-02-07 20:01 Fabian Groffen
2013-01-27 21:41 Fabian Groffen
2013-01-27 21:41 Fabian Groffen
2013-01-13 10:26 Fabian Groffen
2013-01-10 21:02 Fabian Groffen
2013-01-05 18:14 Fabian Groffen
2012-12-26 14:48 Fabian Groffen
2012-12-02 15:47 Fabian Groffen
2012-12-02 15:36 Fabian Groffen
2012-12-02 15:33 Fabian Groffen
2012-12-02 15:33 Fabian Groffen
2012-12-02 15:33 Fabian Groffen
2012-12-02 13:12 Fabian Groffen
2012-12-02 12:59 Fabian Groffen
2012-11-04 10:48 Fabian Groffen
2012-10-22 17:25 Fabian Groffen
2012-10-02 12:02 Fabian Groffen
2012-09-30 11:22 Fabian Groffen
2012-09-26 18:26 Fabian Groffen
2012-09-12 18:18 Fabian Groffen
2012-09-09  7:40 Fabian Groffen
2012-09-06 18:14 Fabian Groffen
2012-08-27  6:44 Fabian Groffen
2012-08-12  7:50 Fabian Groffen
2012-07-19 16:25 Fabian Groffen
2012-07-06  7:05 Fabian Groffen
2012-04-23 19:23 Fabian Groffen
2012-04-03 18:04 Fabian Groffen
2012-03-31 19:31 Fabian Groffen
2012-03-01 20:32 Fabian Groffen
2012-02-19  9:58 Fabian Groffen
2012-02-09  8:01 Fabian Groffen
2012-01-10 17:45 Fabian Groffen
2011-12-31 16:45 Fabian Groffen
2011-12-26  9:12 Fabian Groffen
2011-12-23  9:51 Fabian Groffen
2011-12-22  9:51 Fabian Groffen
2011-12-19 18:30 Fabian Groffen
2011-12-14 15:25 Fabian Groffen
2011-12-10 11:28 Fabian Groffen
2011-12-09 20:33 Fabian Groffen
2011-12-02 20:31 Fabian Groffen
2011-12-02 19:20 Fabian Groffen
2011-12-02 19:19 Fabian Groffen
2011-12-02 19:18 Fabian Groffen
2011-12-02 18:03 Fabian Groffen
2011-10-21 17:34 Fabian Groffen
2011-10-21 17:34 Fabian Groffen
2011-10-20 20:28 Fabian Groffen
2011-10-20 17:08 Fabian Groffen
2011-10-20 16:38 Fabian Groffen
2011-10-17 18:36 Fabian Groffen
2011-10-16 13:59 Fabian Groffen
2011-10-15 18:27 Fabian Groffen
2011-10-13  6:52 Fabian Groffen
2011-09-23 18:38 Fabian Groffen
2011-09-23 18:23 Fabian Groffen
2011-09-20 18:25 Fabian Groffen
2011-09-14 18:43 Fabian Groffen
2011-09-14 18:38 Fabian Groffen
2011-09-13 17:41 Fabian Groffen
2011-08-31 18:39 Fabian Groffen
2011-08-30 18:45 Fabian Groffen
2011-08-29 19:03 Fabian Groffen
2011-08-25 20:25 Fabian Groffen
2011-08-20 17:50 Fabian Groffen
2011-07-26 17:35 Fabian Groffen
2011-07-17  9:48 Fabian Groffen
2011-07-17  8:12 Fabian Groffen
2011-07-01 17:44 Fabian Groffen
2011-06-14 15:39 Fabian Groffen
2011-06-06 17:12 Fabian Groffen
2011-05-28  8:29 Fabian Groffen
2011-05-27 17:41 Fabian Groffen
2011-05-14 13:59 Fabian Groffen
2011-05-02 17:41 Fabian Groffen
2011-04-24 12:08 Fabian Groffen
2011-04-15 18:27 Fabian Groffen
2011-04-15 18:27 Fabian Groffen
2011-03-28 16:52 Fabian Groffen
2011-03-23 19:26 Fabian Groffen
2011-03-17 19:08 Fabian Groffen
2011-03-13 14:45 Fabian Groffen
2011-03-09 19:44 Fabian Groffen
2011-02-26 21:15 Fabian Groffen
2011-02-10 18:46 Fabian Groffen
2011-02-10 18:44 Fabian Groffen
2011-02-10 18:20 Fabian Groffen
2011-02-05 12:25 Fabian Groffen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1686991227.46fc4d8a2205d98584c4198070e42933c1cd1e62.grobian@gentoo \
    --to=grobian@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox