# Copyright 2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

import os

import portage
from portage.const import CACHE_PATH, PROFILE_PATH


def _get_legacy_global(name):
    constructed = portage._legacy_globals_constructed
    if name in constructed:
        return getattr(portage, name)

    if name == "portdb":
        portage.portdb = portage.db[portage.root]["porttree"].dbapi
        constructed.add(name)
        return getattr(portage, name)

    if name in ("mtimedb", "mtimedbfile"):
        portage.mtimedbfile = os.path.join(
            portage.settings["EROOT"], CACHE_PATH, "mtimedb"
        )
        constructed.add("mtimedbfile")
        portage.mtimedb = portage.MtimeDB(portage.mtimedbfile)
        constructed.add("mtimedb")
        return getattr(portage, name)

    # Portage needs to ensure a sane umask for the files it creates.
    os.umask(0o22)

    kwargs = {}
    for k, envvar in (
        ("config_root", "PORTAGE_CONFIGROOT"),
        ("target_root", "ROOT"),
        ("sysroot", "SYSROOT"),
        ("eprefix", "EPREFIX"),
    ):
        kwargs[k] = os.environ.get(envvar)

    portage._initializing_globals = True
    portage.db = portage.create_trees(**kwargs)
    constructed.add("db")
    del portage._initializing_globals

    settings = portage.db[portage.db._target_eroot]["vartree"].settings

    portage.settings = settings
    constructed.add("settings")

    # Since portage.db now uses EROOT for keys instead of ROOT, we make
    # portage.root refer to EROOT such that it continues to work as a key.
    portage.root = portage.db._target_eroot
    constructed.add("root")

    # COMPATIBILITY
    # These attributes should not be used within
    # Portage under any circumstances.

    portage.archlist = settings.archlist()
    constructed.add("archlist")

    portage.features = settings.features
    constructed.add("features")

    portage.groups = settings.get("ACCEPT_KEYWORDS", "").split()
    constructed.add("groups")

    portage.pkglines = settings.packages
    constructed.add("pkglines")

    portage.selinux_enabled = settings.selinux_enabled()
    constructed.add("selinux_enabled")

    portage.thirdpartymirrors = settings.thirdpartymirrors()
    constructed.add("thirdpartymirrors")

    profiledir = os.path.join(settings["PORTAGE_CONFIGROOT"], PROFILE_PATH)
    if not os.path.isdir(profiledir):
        profiledir = None
    portage.profiledir = profiledir
    constructed.add("profiledir")

    return getattr(portage, name)
