diff options
author | Egor Tensin <Egor.Tensin@gmail.com> | 2020-03-28 19:44:48 +0000 |
---|---|---|
committer | Egor Tensin <Egor.Tensin@gmail.com> | 2020-03-28 23:54:36 +0000 |
commit | cb5598c47252d563e7b9744834a43bc1b3e813a0 (patch) | |
tree | 5f582386099e15fda270a5913225fa137e3cd68b /project/boost/build.py | |
parent | project.boost: factor out Configuration/Platform/Linkage (diff) | |
download | cmake-common-cb5598c47252d563e7b9744834a43bc1b3e813a0.tar.gz cmake-common-cb5598c47252d563e7b9744834a43bc1b3e813a0.zip |
project.boost: factor out BoostVersion
Diffstat (limited to 'project/boost/build.py')
-rw-r--r-- | project/boost/build.py | 71 |
1 files changed, 2 insertions, 69 deletions
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') |