49 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
 | 
						|
 | 
						|
import json
 | 
						|
import os
 | 
						|
import re
 | 
						|
import requests
 | 
						|
from SCons.Script import *
 | 
						|
 | 
						|
_VERSIONS_URL = 'https://api.github.com/repos/rockdaboot/libpsl/releases'
 | 
						|
_VERSION_PATTERN = re.compile(r'^Release v([0-9]+)\.([0-9]+)\.([0-9]+)$')
 | 
						|
 | 
						|
def versions(env: Environment, update: bool = False):
 | 
						|
    versions_file = os.path.join(env['DOWNLOAD_DIR'], 'libpsl_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(result, f)
 | 
						|
        return result
 | 
						|
    else:
 | 
						|
        try:
 | 
						|
            with open(versions_file, 'r') as f:
 | 
						|
                return [tuple(v) for v in json.load(f)]
 | 
						|
        except:
 | 
						|
            print('libpsl_versions.json is empty or broken, redownloading.')
 | 
						|
            return versions(env, update=True)
 | 
						|
 | 
						|
def dependencies(env: Environment, version) -> 'dict':
 | 
						|
    return {
 | 
						|
        'idn2': {},
 | 
						|
        'unistring': {}
 | 
						|
    }
 | 
						|
 | 
						|
def cook(env: Environment, version) -> dict:
 | 
						|
    url = f'https://github.com/rockdaboot/libpsl/releases/download/{version[0]}.{version[1]}.{version[2]}/libpsl-{version[0]}.{version[1]}.{version[2]}.tar.gz'
 | 
						|
    repo = env.DownloadAndExtract(f'libpsl_{version[0]}.{version[1]}.{version[2]}', url = url, skip_folders = 1)
 | 
						|
    checkout_root = repo['extracted_root']
 | 
						|
    build_result = env.AutotoolsProject(checkout_root)
 | 
						|
    return {
 | 
						|
        'CPPPATH': build_result['CPPPATH'],
 | 
						|
        'LIBS': [env.FindLib('psl', paths=build_result['LIBPATH'])]
 | 
						|
    }
 |