Skip to content

Commit ba4a62c

Browse files
committed
Extract toolchain to relenv data directory
1 parent d614b91 commit ba4a62c

File tree

8 files changed

+127
-95
lines changed

8 files changed

+127
-95
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
0.20.2
2+
======
3+
4+
* Extract ppbt toolchain to relenv data directory so it can be re-used accross
5+
environments.
6+
7+
18
0.20.1
29
======
310

relenv/build/common.py

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -115,18 +115,7 @@ def get_triplet(machine=None, plat=None):
115115
116116
buildroot = pydir.parent.parent
117117
118-
if sys.platform == "linux":
119-
toolchain = ""
120-
ppbt = None
121-
try:
122-
import ppbt
123-
except ImportError:
124-
pass
125-
if ppbt:
126-
env = ppbt.environ(auto_extract=True)
127-
toolchain = pathlib.Path(env["TOOLCHAIN_PATH"])
128-
else:
129-
toolchain = DATA_DIR / "toolchain" / get_triplet()
118+
toolchain = DATA_DIR / "toolchain" / get_triplet()
130119
131120
build_time_vars = {}
132121
for key in _build_time_vars:

relenv/common.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import time
1919

2020
# relenv package version
21-
__version__ = "0.20.1"
21+
__version__ = "0.20.2"
2222

2323
MODULE_DIR = pathlib.Path(__file__).resolve().parent
2424

@@ -229,16 +229,24 @@ def get_toolchain(arch=None, root=None):
229229
"""
230230
if sys.platform != "linux":
231231
return DATA_DIR
232+
233+
TOOLCHAIN_ROOT = DATA_DIR / "toolchain"
234+
TOOLCHAIN_PATH = TOOLCHAIN_ROOT / get_triplet()
235+
if TOOLCHAIN_PATH.exists():
236+
return TOOLCHAIN_PATH
237+
232238
ppbt = None
233239

234240
try:
235-
import ppbt
241+
import ppbt.common
236242
except ImportError:
237243
pass
238244

239245
if ppbt:
240-
env = ppbt.environ(auto_extract=True)
241-
return pathlib.Path(env["TOOLCHAIN_PATH"])
246+
DATA_DIR.mkdir(exist_ok=True)
247+
TOOLCHAIN_ROOT.mkdir(exist_ok=True)
248+
ppbt.common.extract_archive(str(TOOLCHAIN_ROOT), str(ppbt.common.ARCHIVE))
249+
return TOOLCHAIN_PATH
242250

243251

244252
def get_triplet(machine=None, plat=None):

relenv/runtime.py

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -611,17 +611,9 @@ def wrap(func):
611611
def wrapper(*args, **kwargs):
612612
if sys.platform != "linux":
613613
return func(*args, **kwargs)
614-
if not hasattr(install_cargo_config, "tmpdir") and os.environ.get(
615-
"RELENV_BUILDENV", 0
616-
):
617-
raise RuntimeError("No toolchain installed")
614+
base_dir = common().DATA_DIR / "toolchain"
615+
toolchain = base_dir / common().get_triplet()
618616
cargo_home = install_cargo_config.tmpdir.name
619-
toolchain = common().get_toolchain()
620-
if not toolchain:
621-
if os.environ.get("RELENV_BUILDENV", 0):
622-
raise RuntimeError("No toolchain installed")
623-
return func(*args, **kwargs)
624-
625617
if not toolchain.exists():
626618
debug("Unable to set CARGO_HOME no toolchain exists")
627619
else:
@@ -1083,11 +1075,3 @@ def bootstrap():
10831075
setup_crossroot()
10841076
install_cargo_config()
10851077
sys.meta_path = [importer] + sys.meta_path
1086-
# XXX This causes our m2crypto test to break
1087-
# if "RELENV_BUILDENV" in os.environ:
1088-
# env = buildenv().buildenv()
1089-
# for key in env:
1090-
# if key in os.environ:
1091-
# os.environ[key] = f"{env[key]} {os.environ[key]}"
1092-
# else:
1093-
# os.environ[key] = env[key]

tests/conftest.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ def get_build_version():
2626
versions.append(version)
2727
if versions:
2828
version = versions[0]
29-
log.warn("Environment RELENV_PY_VERSION not set, detected version %s", version)
29+
log.warning(
30+
"Environment RELENV_PY_VERSION not set, detected version %s", version
31+
)
3032
return version
3133

3234

tests/test_build.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@ def test_builder_defaults_linux():
2929
assert builder.prefix == DATA_DIR / "build" / "3.10.10-x86_64-linux-gnu"
3030
assert builder.sources == DATA_DIR / "src"
3131
assert builder.downloads == DATA_DIR / "download"
32-
assert "ppbt" in str(builder.toolchain)
33-
assert "_toolchain" in str(builder.toolchain)
32+
assert "relenv/toolchain" in str(builder.toolchain)
3433
assert callable(builder.build_default)
3534
assert callable(builder.populate_env)
3635
assert builder.recipies == {}

tests/test_common.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ def test_get_toolchain(tmp_path):
127127
if sys.platform in ["darwin", "win32"]:
128128
assert "data" in str(ret)
129129
else:
130-
assert "ppbt" in str(ret)
130+
assert f"{data_dir}/toolchain" in str(ret)
131131

132132

133133
def test_get_toolchain_no_arch(tmp_path):
@@ -137,7 +137,7 @@ def test_get_toolchain_no_arch(tmp_path):
137137
if sys.platform in ["darwin", "win32"]:
138138
assert "data" in str(ret)
139139
else:
140-
assert "ppbt" in str(ret)
140+
assert f"{data_dir}/toolchain" in str(ret)
141141

142142

143143
@pytest.mark.parametrize("open_arg", (":gz", ":xz", ":bz2", ""))

0 commit comments

Comments
 (0)