OpenMiInk/third_party/krita-deps-management/tools/download-macos-tools.py
Hellings b8c8ff98e2 Hi
2026-10-16 09:05:56 -04:00

76 lines
2.8 KiB
Python

#!/bin/env python3
import requests
import os
import shutil
import tarfile
from zipfile import ZipFile
toolsPath = os.path.abspath('_krita-tools')
baseToolsUrl = 'https://files.kde.org/krita/build/dependencies/'
cmakeArchive = 'cmake-3.29.3-macos-universal.tar.gz'
ninjaArchive = 'ninja-mac-1.12.1.zip'
ccacheArchive = 'ccache-4.9.1-darwin.tar.gz'
downloadsDir = os.environ.pop('EXTERNALS_DOWNLOAD_DIR', os.path.join(os.getcwd(), 'cache', 'downloads'))
# autocreate the downloads dialog, otherwise downloading will fail
if not os.path.isdir(downloadsDir):
os.makedirs(downloadsDir)
def download_url(url, filePath, useCompression = False):
headers = {'Accept-Encoding': 'gzip, deflate'} if useCompression else {}
with requests.get(url, stream=True, headers=headers) as r:
r.raise_for_status()
with open(filePath, 'wb') as f:
for chunk in r.iter_content(chunk_size=8192):
# If you have chunk encoded response uncomment if
# and set chunk_size parameter to None.
#if chunk:
f.write(chunk)
f.flush()
def strip_extension(fn: str, extensions=[".tar.bz2", ".tar.gz"]):
for ext in extensions:
if fn.endswith(ext):
return fn[: -len(ext)]
raise ValueError(f"Unexpected extension for filename: {fn}")
for archive in [cmakeArchive, ninjaArchive, ccacheArchive]:
targetFilePath = os.path.join(downloadsDir, archive)
if not os.path.exists(targetFilePath):
print (f'## Downloading {archive}...')
download_url(baseToolsUrl + '/' + archive, targetFilePath)
else:
print (f'## Using cached download for {archive}...')
if os.path.isdir(toolsPath):
print('## Removing old _krita-tools: {}'.format(toolsPath))
shutil.rmtree(toolsPath)
os.makedirs(toolsPath)
print(f'## Extracting {cmakeArchive}')
with tarfile.open( name=os.path.join(downloadsDir, cmakeArchive), mode='r' ) as archive:
archive.extractall( path=toolsPath )
print(f'## Extracting {ccacheArchive}')
with tarfile.open( name=os.path.join(downloadsDir, ccacheArchive), mode='r' ) as archive:
archive.extractall( path=toolsPath )
print(f'## Extracting {ninjaArchive}')
with ZipFile( os.path.join(downloadsDir, ninjaArchive), mode='r' ) as archive:
archive.extractall( path=os.path.join(toolsPath, 'ninja' ))
os.chmod(os.path.join(toolsPath, 'ninja', 'ninja'), 0o744)
with open(os.path.join(toolsPath, 'activate'), mode='w') as envFile:
path = os.path.join(toolsPath, 'ninja')
envFile.write(f'export PATH={path}:$PATH\n')
path = os.path.join(toolsPath, strip_extension(cmakeArchive), 'CMake.app', 'Contents', 'bin')
envFile.write(f'export PATH={path}:$PATH\n')
path = os.path.join(toolsPath, strip_extension(ccacheArchive))
envFile.write(f'export PATH={path}:$PATH\n')