# Path: mod/log.py
# RED = '\033[1;31m'
# GREEN = '\033[1;32m'
# YELLOW = '\033[1;33m'
# BLUE = '\033[1;36m'
# DEF = '\033[0;0m'
# def error(msg, fatal=True) :
# def warn(msg) :
# def ok(item, status) :
# def failed(item, status) :
# def optional(item, status) :
# def info(msg) :
# def colored(color, msg) :
# 
# Path: mod/util.py
# def fix_path(path) :
# def get_workspace_dir(fips_dir) :
# def get_project_dir(fips_dir, proj_name) :
# def get_build_root_dir(fips_dir, proj_name):
# def get_deploy_root_dir(fips_dir, proj_name):
# def get_build_dir(fips_dir, proj_name, cfg) :
# def get_deploy_dir(fips_dir, proj_name, cfg) :
# def get_fips_dir(proj_dir, name):
# def get_configs_dir(proj_dir):
# def get_verbs_dir(proj_dir):
# def get_generators_dir(proj_dir):
# def get_toolchains_dir(proj_dir):
# def get_giturl_from_url(url) :
# def get_gitbranch_from_url(url) :
# def get_project_name_from_url(url) :
# def get_project_name_from_dir(proj_dir) :
# def load_fips_yml(proj_dir) :
# def lookup_target_cwd(proj_dir, target) :
# def is_valid_project_dir(proj_dir) :
# def ensure_valid_project_dir(proj_dir) :
# def is_git_url(url) :
# def confirm(question) :
# def url_download_hook(count, block_size, total_size) :
# def get_host_platform() :
# def get_cfg_target_list(fips_dir, proj_dir, cfg):
# def get_cfg_headersdirs_by_target(fips_dir, proj_dir, cfg):
# def get_cfg_defines_by_target(fips_dir, proj_dir, cfg):
# def get_num_cpucores():
# 
# Path: mod/tools/java.py
# def check_exists(fips_dir) :
# 
# Path: mod/tools/javac.py
# def check_exists(fips_dir) :


import os
import sys
import zipfile
import subprocess
import hashlib
    from urllib.request import urlretrieve
    from urllib import urlretrieve
from mod import log, util
from mod.tools import java, javac
        subprocess.call('unzip {}'.format(path), cwd=get_sdk_dir(fips_dir), shell=True)
    else:
        with zipfile.ZipFile(path, 'r') as archive:
            archive.extractall(get_sdk_dir(fips_dir))

#-------------------------------------------------------------------------------
def compute_sha256(path, converter=lambda x: x, chunk_size=65536) :
    if not os.path.isfile(path) :
        return None
    result = hashlib.sha256()
    with open(path, 'rb') as file :
        chunk = file.read(chunk_size)
        while chunk :
            result.update(converter(chunk))
            chunk = file.read(chunk_size)
    return result.hexdigest()

#-------------------------------------------------------------------------------
def strip_whitespace(bin_str) :
    for ws in [b' ', b'\t', b'\n', b'\r', b'\x0b', b'\x0c']:
        bin_str = bin_str.replace(ws, b'')
    return bin_str

#-------------------------------------------------------------------------------
def setup(fips_dir) :
    """setup the Android SDK and NDK"""
    log.colored(log.YELLOW, '=== setup Android SDK/NDK :')

    # first make sure that java is present, otherwise the Android
    # SDK setup will finish without errors, but is not actually usable

# Path: mod/log.py
# RED = '\033[1;31m'
# GREEN = '\033[1;32m'
# YELLOW = '\033[1;33m'
# BLUE = '\033[1;36m'
# DEF = '\033[0;0m'
# def error(msg, fatal=True) :
# def warn(msg) :
# def ok(item, status) :
# def failed(item, status) :
# def optional(item, status) :
# def info(msg) :
# def colored(color, msg) :
# 
# Path: mod/util.py
# def fix_path(path) :
# def get_workspace_dir(fips_dir) :
# def get_project_dir(fips_dir, proj_name) :
# def get_build_root_dir(fips_dir, proj_name):
# def get_deploy_root_dir(fips_dir, proj_name):
# def get_build_dir(fips_dir, proj_name, cfg) :
# def get_deploy_dir(fips_dir, proj_name, cfg) :
# def get_fips_dir(proj_dir, name):
# def get_configs_dir(proj_dir):
# def get_verbs_dir(proj_dir):
# def get_generators_dir(proj_dir):
# def get_toolchains_dir(proj_dir):
# def get_giturl_from_url(url) :
# def get_gitbranch_from_url(url) :
# def get_project_name_from_url(url) :
# def get_project_name_from_dir(proj_dir) :
# def load_fips_yml(proj_dir) :
# def lookup_target_cwd(proj_dir, target) :
# def is_valid_project_dir(proj_dir) :
# def ensure_valid_project_dir(proj_dir) :
# def is_git_url(url) :
# def confirm(question) :
# def url_download_hook(count, block_size, total_size) :
# def get_host_platform() :
# def get_cfg_target_list(fips_dir, proj_dir, cfg):
# def get_cfg_headersdirs_by_target(fips_dir, proj_dir, cfg):
# def get_cfg_defines_by_target(fips_dir, proj_dir, cfg):
# def get_num_cpucores():
# 
# Path: mod/tools/java.py
# def check_exists(fips_dir) :
# 
# Path: mod/tools/javac.py
# def check_exists(fips_dir) :


# Path: mod/android.py
import os
import sys
import zipfile
import subprocess
import hashlib
    from urllib.request import urlretrieve
    from urllib import urlretrieve
from mod import log, util
from mod.tools import java, javac

        subprocess.call('unzip {}'.format(path), cwd=get_sdk_dir(fips_dir), shell=True)
    else:
        with zipfile.ZipFile(path, 'r') as archive:
            archive.extractall(get_sdk_dir(fips_dir))

#-------------------------------------------------------------------------------
def compute_sha256(path, converter=lambda x: x, chunk_size=65536) :
    if not os.path.isfile(path) :
        return None
    result = hashlib.sha256()
    with open(path, 'rb') as file :
        chunk = file.read(chunk_size)
        while chunk :
            result.update(converter(chunk))
            chunk = file.read(chunk_size)
    return result.hexdigest()

#-------------------------------------------------------------------------------
def strip_whitespace(bin_str) :
    for ws in [b' ', b'\t', b'\n', b'\r', b'\x0b', b'\x0c']:
        bin_str = bin_str.replace(ws, b'')
    return bin_str

#-------------------------------------------------------------------------------
def setup(fips_dir) :
    """setup the Android SDK and NDK"""
    log.colored(log.YELLOW, '=== setup Android SDK/NDK :')

    # first make sure that java is present, otherwise the Android
    # SDK setup will finish without errors, but is not actually usable

    if not java.check_exists(fips_dir) or not javac.check_exists(fips_dir) :