blob: e61a72e3d7a0560537dca17179d2c5726d9371f9 [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()