mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-02-08 16:53:49 +08:00
tools cleanup
This commit is contained in:
parent
8e545189bd
commit
ab73649892
@ -760,16 +760,61 @@ def update_docs_md(check: bool) -> None:
|
|||||||
|
|
||||||
|
|
||||||
def cmake_prep_dir(dirname: str, verbose: bool = False) -> None:
|
def cmake_prep_dir(dirname: str, verbose: bool = False) -> None:
|
||||||
"""Create a dir, recreating it when cmake/python/etc. version changes.
|
"""Create a dir, recreating it when cmake/python/etc. versions change.
|
||||||
|
|
||||||
Useful to prevent builds from breaking when cmake or other components
|
Useful to prevent builds from breaking when cmake or other components
|
||||||
are updated.
|
are updated.
|
||||||
"""
|
"""
|
||||||
# pylint: disable=too-many-locals
|
# pylint: disable=too-many-locals
|
||||||
# pylint: disable=too-many-branches
|
|
||||||
# pylint: disable=too-many-statements
|
|
||||||
import json
|
import json
|
||||||
|
import platform
|
||||||
from efrotools import PYVER
|
from efrotools import PYVER
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Entry:
|
||||||
|
"""Item examined for presence/change."""
|
||||||
|
name: str
|
||||||
|
current_value: str
|
||||||
|
|
||||||
|
entries: List[Entry] = []
|
||||||
|
|
||||||
|
# Start fresh if cmake version changes.
|
||||||
|
cmake_ver_output = subprocess.run(['cmake', '--version'],
|
||||||
|
check=True,
|
||||||
|
capture_output=True).stdout.decode()
|
||||||
|
cmake_ver = cmake_ver_output.splitlines()[0].split('cmake version ')[1]
|
||||||
|
entries.append(Entry('cmake version', cmake_ver))
|
||||||
|
|
||||||
|
# ...or if the actual location of cmake on disk changes.
|
||||||
|
cmake_path = os.path.realpath(
|
||||||
|
subprocess.run(['which', 'cmake'], check=True,
|
||||||
|
capture_output=True).stdout.decode().strip())
|
||||||
|
entries.append(Entry('cmake path', cmake_path))
|
||||||
|
|
||||||
|
# ...or if python's version changes.
|
||||||
|
python_ver_output = subprocess.run(
|
||||||
|
[f'python{PYVER}', '--version'], check=True,
|
||||||
|
capture_output=True).stdout.decode().strip()
|
||||||
|
python_ver = python_ver_output.splitlines()[0].split('Python ')[1]
|
||||||
|
entries.append(Entry('python_version', python_ver))
|
||||||
|
|
||||||
|
# ...or if the actual location of python on disk changes.
|
||||||
|
python_path = os.path.realpath(
|
||||||
|
subprocess.run(['which', f'python{PYVER}'],
|
||||||
|
check=True,
|
||||||
|
capture_output=True).stdout.decode())
|
||||||
|
entries.append(Entry('python_path', python_path))
|
||||||
|
|
||||||
|
# ...or if mac xcode sdk paths change
|
||||||
|
mac_xcode_sdks = (','.join(
|
||||||
|
sorted(
|
||||||
|
os.listdir('/Applications/Xcode.app/Contents/'
|
||||||
|
'Developer/Platforms/MacOSX.platform/'
|
||||||
|
'Developer/SDKs/')))
|
||||||
|
if platform.system() == 'Darwin' else '')
|
||||||
|
entries.append(Entry('mac_xcode_sdks', mac_xcode_sdks))
|
||||||
|
|
||||||
|
# Ok; do the thing.
|
||||||
verfilename = os.path.join(dirname, '.ba_cmake_env')
|
verfilename = os.path.join(dirname, '.ba_cmake_env')
|
||||||
title = 'cmake_prep_dir'
|
title = 'cmake_prep_dir'
|
||||||
|
|
||||||
@ -778,89 +823,31 @@ def cmake_prep_dir(dirname: str, verbose: bool = False) -> None:
|
|||||||
with open(verfilename) as infile:
|
with open(verfilename) as infile:
|
||||||
versions = json.loads(infile.read())
|
versions = json.loads(infile.read())
|
||||||
assert isinstance(versions, dict)
|
assert isinstance(versions, dict)
|
||||||
|
assert all(isinstance(x, str) for x in versions.keys())
|
||||||
|
assert all(isinstance(x, str) for x in versions.values())
|
||||||
else:
|
else:
|
||||||
versions = {}
|
versions = {}
|
||||||
|
changed = False
|
||||||
|
for entry in entries:
|
||||||
|
previous_value = versions.get(entry.name)
|
||||||
|
if entry.current_value != previous_value:
|
||||||
|
print(f'{Clr.BLU}{entry.name} changed from {previous_value}'
|
||||||
|
f' to {entry.current_value}; clearing existing build at'
|
||||||
|
f' "{dirname}".{Clr.RST}')
|
||||||
|
changed = True
|
||||||
|
break
|
||||||
|
|
||||||
# Start fresh if cmake version changes.
|
if changed:
|
||||||
cmake_ver_output = subprocess.run(['cmake', '--version'],
|
|
||||||
check=True,
|
|
||||||
capture_output=True).stdout.decode()
|
|
||||||
cmake_ver = cmake_ver_output.splitlines()[0].split('cmake version ')[1]
|
|
||||||
cmake_ver_existing = versions.get('cmake_version')
|
|
||||||
assert isinstance(cmake_ver_existing, (str, type(None)))
|
|
||||||
if verbose:
|
|
||||||
print(f'{Clr.BLD}{title}:{Clr.RST} {cmake_ver=} {cmake_ver_existing=}')
|
|
||||||
|
|
||||||
# ...or if the actual location of cmake on disk changes.
|
|
||||||
cmake_path = os.path.realpath(
|
|
||||||
subprocess.run(['which', 'cmake'], check=True,
|
|
||||||
capture_output=True).stdout.decode().strip())
|
|
||||||
cmake_path_existing = versions.get('cmake_path')
|
|
||||||
assert isinstance(cmake_path_existing, (str, type(None)))
|
|
||||||
if verbose:
|
|
||||||
print(f'{Clr.BLD}{title}:{Clr.RST}'
|
|
||||||
f' {cmake_path=} {cmake_path_existing=}')
|
|
||||||
|
|
||||||
# ...or if python's version changes.
|
|
||||||
python_ver_output = subprocess.run(
|
|
||||||
[f'python{PYVER}', '--version'], check=True,
|
|
||||||
capture_output=True).stdout.decode().strip()
|
|
||||||
python_ver = python_ver_output.splitlines()[0].split('Python ')[1]
|
|
||||||
python_ver_existing = versions.get('python_version')
|
|
||||||
assert isinstance(python_ver_existing, (str, type(None)))
|
|
||||||
if verbose:
|
|
||||||
print(f'{Clr.BLD}{title}:{Clr.RST}'
|
|
||||||
f' {python_ver=} {python_ver_existing=}')
|
|
||||||
|
|
||||||
# ...or if the actual location of python on disk changes.
|
|
||||||
python_path = os.path.realpath(
|
|
||||||
subprocess.run(['which', f'python{PYVER}'],
|
|
||||||
check=True,
|
|
||||||
capture_output=True).stdout.decode())
|
|
||||||
python_path_existing = versions.get('python_path')
|
|
||||||
assert isinstance(python_path_existing, (str, type(None)))
|
|
||||||
if verbose:
|
|
||||||
print(f'{Clr.BLD}{title}:{Clr.RST}'
|
|
||||||
f' {python_path=} {python_path_existing=}')
|
|
||||||
|
|
||||||
# Blow away and start from scratch if any vals differ from existing.
|
|
||||||
if (cmake_ver_existing == cmake_ver and cmake_path == cmake_path_existing
|
|
||||||
and python_ver_existing == python_ver
|
|
||||||
and python_path == python_path_existing):
|
|
||||||
if verbose:
|
|
||||||
print(f'{Clr.BLD}{title}:{Clr.RST} Keeping existing build dir.')
|
|
||||||
else:
|
|
||||||
if verbose:
|
if verbose:
|
||||||
print(
|
print(
|
||||||
f'{Clr.BLD}{title}:{Clr.RST} Blowing away existing build dir.')
|
f'{Clr.BLD}{title}:{Clr.RST} Blowing away existing build dir.')
|
||||||
|
|
||||||
if (cmake_ver_existing is not None
|
|
||||||
and cmake_ver_existing != cmake_ver):
|
|
||||||
print(f'{Clr.BLU}CMake version changed from {cmake_ver_existing}'
|
|
||||||
f' to {cmake_ver}; clearing existing build at'
|
|
||||||
f' "{dirname}".{Clr.RST}')
|
|
||||||
if (cmake_path_existing is not None
|
|
||||||
and cmake_path_existing != cmake_path):
|
|
||||||
print(f'{Clr.BLU}CMake path changed from {cmake_path_existing}'
|
|
||||||
f' to {cmake_path}; clearing existing build at'
|
|
||||||
f' "{dirname}".{Clr.RST}')
|
|
||||||
if (python_ver_existing is not None
|
|
||||||
and python_ver_existing != python_ver):
|
|
||||||
print(f'{Clr.BLU}Python version changed from {python_ver_existing}'
|
|
||||||
f' to {python_ver}; clearing existing build at'
|
|
||||||
f' "{dirname}".{Clr.RST}')
|
|
||||||
if (python_path_existing is not None
|
|
||||||
and python_path_existing != python_path):
|
|
||||||
print(f'{Clr.BLU}Python path changed from {python_path_existing}'
|
|
||||||
f' to {python_path}; clearing existing build at'
|
|
||||||
f' "{dirname}".{Clr.RST}')
|
|
||||||
subprocess.run(['rm', '-rf', dirname], check=True)
|
subprocess.run(['rm', '-rf', dirname], check=True)
|
||||||
os.makedirs(dirname, exist_ok=True)
|
os.makedirs(dirname, exist_ok=True)
|
||||||
with open(verfilename, 'w') as outfile:
|
with open(verfilename, 'w') as outfile:
|
||||||
outfile.write(
|
outfile.write(
|
||||||
json.dumps({
|
json.dumps(
|
||||||
'cmake_version': cmake_ver,
|
{entry.name: entry.current_value
|
||||||
'cmake_path': cmake_path,
|
for entry in entries}))
|
||||||
'python_version': python_ver,
|
else:
|
||||||
'python_path': python_path
|
if verbose:
|
||||||
}))
|
print(f'{Clr.BLD}{title}:{Clr.RST} Keeping existing build dir.')
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user