From cb5598c47252d563e7b9744834a43bc1b3e813a0 Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Sat, 28 Mar 2020 19:44:48 +0000 Subject: project.boost: factor out BoostVersion --- project/boost/build.py | 71 ++------------------------------------------------ 1 file changed, 2 insertions(+), 69 deletions(-) (limited to 'project/boost/build.py') diff --git a/project/boost/build.py b/project/boost/build.py index 14c4b80..e9f2ffc 100644 --- a/project/boost/build.py +++ b/project/boost/build.py @@ -40,6 +40,7 @@ import sys import tempfile import urllib.request +from project.boost.version import Version from project.configuration import Configuration from project.linkage import Linkage from project.platform import Platform @@ -74,74 +75,6 @@ def _run_executable(cmd_line): return subprocess.run(cmd_line, check=True) -_Version = namedtuple('_Version', ['major', 'minor', 'patch']) - - -@total_ordering -class BoostVersion: - def __init__(self, major, minor, patch): - self._impl = _Version(major, minor, patch) - - @property - def major(self): - return self._impl.major - - @property - def minor(self): - return self._impl.minor - - @property - def patch(self): - return self._impl.patch - - def __lt__(self, other): - return self._impl < other._impl - - def __eq__(self, other): - return self._impl == other._impl - - @staticmethod - def from_string(s): - result = re.match(r'^(\d+)\.(\d+)\.(\d+)$', s) - if result is None: - raise ValueError(f'invalid Boost version: {s}') - major = int(result.group(1)) - minor = int(result.group(2)) - patch = int(result.group(3)) - return BoostVersion(major, minor, patch) - - def __str__(self): - return f'{self.major}.{self.minor}.{self.patch}' - - @property - def archive_ext(self): - return '.tar.gz' - - def dir_path(self, parent_dir): - return os.path.join(parent_dir, self.dir_name) - - @property - def dir_name(self): - return f'boost_{self.major}_{self.minor}_{self.patch}' - - @property - def archive_name(self): - return f'{self.dir_name}{self.archive_ext}' - - def _get_bintray_url(self): - return f'https://dl.bintray.com/boostorg/release/{self}/source/{self.archive_name}' - - def _get_sourceforge_url(self): - return f'https://sourceforge.net/projects/boost/files/boost/{self}/{self.archive_name}/download' - - def get_download_urls(self): - if self._impl < _Version(1, 63, 0): - # For versions older than 1.63.0, SourceForge is the only option: - return [self._get_sourceforge_url()] - # Otherwise, Bintray is preferred (the official website links to it). - return [self._get_bintray_url(), self._get_sourceforge_url()] - - class BoostArchive: def __init__(self, version, path): self.version = version @@ -407,7 +340,7 @@ def _parse_args(argv=None): type=_parse_dir, default='.', help='directory to unpack the archive to') download.add_argument('boost_version', metavar='VERSION', - type=BoostVersion.from_string, + type=Version.from_string, help='Boost version (in the MAJOR.MINOR.PATCH format)') build = subparsers.add_parser('build', help='build the libraries') -- cgit v1.2.3