#!/usr/bin/env python import urllib, os, os.path, sys, json, tarfile, zipfile, tempfile def download(snapshot): if snapshot == 'stable': # TODO: Default version/filename if not available? downloads = [ "https://sourceforge.net/projects/boost/files/boost/%s/%s.tar.bz2/download" % (os.environ['BOOST_VERSION'], os.environ['BOOST_FILENAME'])] else: json_response = urllib.urlopen('https://api.bintray.com/packages/boostorg/%s/snapshot/files' % (snapshot)) x = json.load(json_response) extension_priorities = { '.bz2': 2, '.gz': 1, '.zip': 0 } file_list = [] version_dates = {} for file in x: file_extension = os.path.splitext(file['path'])[1] if (file_extension in extension_priorities): file['priority'] = extension_priorities[file_extension] file_list.append(file) if not file['version'] in version_dates or file['created'] < version_dates[file['version']]: version_dates[file['version']] = file['created'] file_list.sort(key=lambda x: (version_dates[x['version']], x['priority']), reverse=True) downloads = ['http://dl.bintray.com/boostorg/%s/%s' % (snapshot, file['path']) for file in file_list] filename = '' for download_url in downloads: try: print "Downloading: " + download_url (filename, headers) = urllib.urlretrieve(download_url) print "Extracting: " + filename dir = tempfile.mkdtemp() extract(filename, dir) os.remove(filename) files = os.listdir(dir) assert(len(files) == 1) os.rename(os.path.join(dir, files[0]), 'boost') return except IOError: print "Error opening URL: " + download_url def extract(filename, path = '.'): if (filename.endswith(".gz")): tar = tarfile.open(filename, "r:gz") tar.extractall(path) tar.close elif (filename.endswith(".bz2")): tar = tarfile.open(filename, "r:bz2") tar.extractall(path) tar.close elif (filename.endswith(".zip")): zip = zipfile.ZipFile(filename, "r") zip.extractall(path) zip.close else: assert False if len(sys.argv) == 1: download('stable') elif len(sys.argv) == 2: download(sys.argv[1]) else: print "Usage: %s [stable|branch-name]" % (sys.argv[0])