blob: f4a24985b74379de86183b9e5e108592f1a32789 [file] [log] [blame]
# Copyright 2018-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
import re
import portage
from portage import os
from portage.const import GLOBAL_CONFIG_PATH
COMPAT_DISTDIR = "usr/portage/distfiles"
COMPAT_PKGDIR = "usr/portage/packages"
COMPAT_RPMDIR = "usr/portage/rpm"
COMPAT_MAIN_REPO = "usr/portage"
def main():
"""
If the current installation is still configured to use any of the
legacy default /usr/portage locations, then patch make.globals and
repos.conf inside ${ED} to maintain compatible defaults. This is
intended to be called from the ebuild as follows:
pkg_preinst() {
python_setup
python_export PYTHON_SITEDIR
env -u DISTDIR \
-u PORTAGE_OVERRIDE_EPREFIX \
-u PORTAGE_REPOSITORIES \
-u PORTDIR \
-u PORTDIR_OVERLAY \
PYTHONPATH="${ED%/}${PYTHON_SITEDIR}${PYTHONPATH:+:${PYTHONPATH}}" \
"${PYTHON}" -m portage._compat_upgrade.default_locations || die
}
"""
out = portage.output.EOutput()
config = portage.settings
compat_distdir = os.path.join(portage.const.EPREFIX or "/", COMPAT_DISTDIR)
try:
do_distdir = os.path.samefile(config["DISTDIR"], compat_distdir)
except OSError:
do_distdir = False
compat_pkgdir = os.path.join(portage.const.EPREFIX or "/", COMPAT_PKGDIR)
try:
do_pkgdir = os.path.samefile(config["PKGDIR"], compat_pkgdir)
except OSError:
do_pkgdir = False
compat_rpmdir = os.path.join(portage.const.EPREFIX or "/", COMPAT_RPMDIR)
try:
do_rpmdir = os.path.samefile(config["RPMDIR"], compat_rpmdir)
except OSError:
do_rpmdir = False
compat_main_repo = os.path.join(portage.const.EPREFIX or "/", COMPAT_MAIN_REPO)
try:
do_main_repo = os.path.samefile(
config.repositories.mainRepoLocation(), compat_main_repo
)
except OSError:
do_main_repo = False
if do_distdir or do_pkgdir or do_rpmdir:
config_path = os.path.join(
os.environ["ED"], GLOBAL_CONFIG_PATH.lstrip(os.sep), "make.globals"
)
with open(config_path) as f:
content = f.read()
if do_distdir:
compat_setting = 'DISTDIR="{}"'.format(compat_distdir)
out.einfo(
"Setting make.globals default {} for backward compatibility".format(
compat_setting
)
)
content = re.sub(
"^DISTDIR=.*$", compat_setting, content, flags=re.MULTILINE
)
if do_pkgdir:
compat_setting = 'PKGDIR="{}"'.format(compat_pkgdir)
out.einfo(
"Setting make.globals default {} for backward compatibility".format(
compat_setting
)
)
content = re.sub(
"^PKGDIR=.*$", compat_setting, content, flags=re.MULTILINE
)
if do_rpmdir:
compat_setting = 'RPMDIR="{}"'.format(compat_rpmdir)
out.einfo(
"Setting make.globals default {} for backward compatibility".format(
compat_setting
)
)
content = re.sub(
"^RPMDIR=.*$", compat_setting, content, flags=re.MULTILINE
)
with open(config_path, "wt") as f:
f.write(content)
if do_main_repo:
config_path = os.path.join(
os.environ["ED"], GLOBAL_CONFIG_PATH.lstrip(os.sep), "repos.conf"
)
with open(config_path) as f:
content = f.read()
compat_setting = "location = {}".format(compat_main_repo)
out.einfo(
"Setting repos.conf default {} for backward compatibility".format(
compat_setting
)
)
content = re.sub(
"^location =.*$", compat_setting, content, flags=re.MULTILINE
)
with open(config_path, "wt") as f:
f.write(content)
if __name__ == "__main__":
main()