| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- from dataclasses import dataclass
- from pathlib import Path
- import os
- import stat
- import subprocess
- from typing import Optional
- from .config import Arch, LinuxTag
- from ..utils.deps import CACHE_DIR
- from ..utils.log import debug, log
- from ..utils.url import urlretrieve
- @dataclass(frozen=True)
- class Patcher:
- '''Manylinux tag.'''
- tag: LinuxTag
- '''Platform architecture.'''
- arch: Optional[Arch] = None
- def patch(self, destination: Path):
- '''Apply any patch'''
- cache = Path(CACHE_DIR) / f'share/patches/'
- if self.tag == LinuxTag.MANYLINUX_1:
- patch = f'tk-manylinux1_{self.arch}'
- log('PATCH', patch)
- tarfile = f'{patch}.tar.gz'
- path = cache / tarfile
- if not path.exists():
- url = f'https://github.com/niess/python-appimage/releases/download/manylinux1/{tarfile}'
- urlretrieve(url, path)
- mode = os.stat(path)[stat.ST_MODE]
- os.chmod(path, mode | stat.S_IWGRP | stat.S_IWOTH)
- debug('EXTRACT', tarfile)
- cmd = ''.join((
- f'trap \'chmod u+rw -R {destination}\' EXIT ; ',
- f'mkdir -p {destination} && ',
- f'tar -xzf {path} -C {destination}',
- ))
- r = subprocess.run(f'/bin/bash -c "{cmd}"', shell=True,
- capture_output=True)
- if r.returncode != 0:
- raise ValueError(r.stderr.decode())
|