58 lines
2.3 KiB
Python
58 lines
2.3 KiB
Python
|
|
|
|
import json
|
|
import re
|
|
import requests
|
|
from SCons.Script import *
|
|
|
|
_VERSIONS_URL = 'https://api.github.com/repos/boostorg/boost/releases'
|
|
_VERSION_PATTERN = re.compile(r'^boost-([0-9]+)\.([0-9]+)\.([0-9]+)$')
|
|
|
|
def versions(env: Environment, update: bool = False):
|
|
versions_file = os.path.join(env['DOWNLOAD_DIR'], 'boost_versions.json')
|
|
if update or not os.path.exists(versions_file):
|
|
req = requests.get(_VERSIONS_URL)
|
|
versions_data = json.loads(req.text)
|
|
result = []
|
|
for version_data in versions_data:
|
|
match = _VERSION_PATTERN.match(version_data['name'])
|
|
if not match:
|
|
continue
|
|
result.append((int(match.groups()[0]), int(match.groups()[1]), int(match.groups()[2])))
|
|
with open(versions_file, 'w') as f:
|
|
json.dump(versions, f)
|
|
return result
|
|
else:
|
|
with open(versions_file, 'r') as f:
|
|
return [tuple(v) for v in json.load(f)]
|
|
|
|
def dependencies(env: Environment, version) -> 'dict':
|
|
return {}
|
|
|
|
def cook(env: Environment, version) -> dict:
|
|
if env.get('BOOST_LIBS') is None:
|
|
raise Exception('BOOST_LIBS not set. Set to a list of boost libs to link or "*" to link everything.')
|
|
if version >= (1, 85, 0):
|
|
url = f'https://github.com/boostorg/boost/releases/download/boost-{version[0]}.{version[1]}.{version[2]}/boost-{version[0]}.{version[1]}.{version[2]}-cmake.tar.gz'
|
|
else:
|
|
url = f'https://github.com/boostorg/boost/releases/download/boost-{version[0]}.{version[1]}.{version[2]}/boost-{version[0]}.{version[1]}.{version[2]}.tar.gz'
|
|
repo = env.DownloadAndExtract(f'boost_{version[0]}.{version[1]}.{version[2]}', url = url, skip_folders = 1)
|
|
checkout_root = repo['extracted_root']
|
|
build_result = env.CMakeProject(checkout_root)
|
|
|
|
libs = []
|
|
if '*' in env['BOOST_LIBS']:
|
|
lib_dir = build_result['LIBPATH'][0]
|
|
for lib_file in os.listdir(lib_dir):
|
|
fname = os.path.join(lib_dir, lib_file)
|
|
if not os.path.isfile(fname):
|
|
continue
|
|
libs.append(fname)
|
|
else:
|
|
for lib in set(env['BOOST_LIBS']):
|
|
libs.append(env.FindLib(f'boost_{lib}', paths=build_result['LIBPATH']))
|
|
return {
|
|
'CPPPATH': build_result['CPPPATH'],
|
|
'LIBS': libs
|
|
}
|