# 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/dep.py
# def get_imports(fips_dir, proj_dir) :
# def get_exports(proj_dir) :
# def get_policy(proj_dir, policy) :
# def _rec_get_all_imports_exports(fips_dir, proj_dir, result) :
# def get_all_imports_exports(fips_dir, proj_dir) :
# def _rec_fetch_imports(fips_dir, proj_dir, handled) :
# def fetch_imports(fips_dir, proj_dir) :
# def gather_imports(fips_dir, proj_dir) :
# def write_imports(fips_dir, proj_dir, cfg_name, imported) :
# def gather_and_write_imports(fips_dir, proj_dir, cfg_name) :
# def check_imports(fips_dir, proj_dir) :
# def check_local_changes(fips_dir, proj_dir) :
# def _rec_update_imports(fips_dir, proj_dir, handled) :
# def update_imports(fips_dir, proj_dir):


import sys
import os
import glob
    import importlib.util
    import imp
from collections import OrderedDict
from mod import log, util, dep

# dictionary of "name: module"
verbs = {}

# dictionary of "projname: name"
proj_verbs = OrderedDict()

#-------------------------------------------------------------------------------
def import_verbs_from(proj_name, proj_dir, verb_dir) :
    """import all verb modules from a directory, populates the
    verb and proj_verbs global variables

    :param proj_dir:    name of project that owns verb_dir
    :param verb_dir:    directory with verb python scripts (can be None)
    """
    global verbs, proj_verbs

    # make sure project-verbs find their modules
    sys.path.insert(0, proj_dir)

    if verb_dir and os.path.isdir(verb_dir):
        # get all .py file in verb dir
        verb_paths = glob.glob(verb_dir + '/*.py')
        if verb_paths :
            for verb_path in verb_paths :
                verb_module_name = os.path.split(verb_path)[1]
                verb_module_name = os.path.splitext(verb_module_name)[0]
                if not verb_module_name.startswith('__') :
                    if is_python3:
                        spec = importlib.util.spec_from_file_location(verb_module_name, verb_path)

# 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/dep.py
# def get_imports(fips_dir, proj_dir) :
# def get_exports(proj_dir) :
# def get_policy(proj_dir, policy) :
# def _rec_get_all_imports_exports(fips_dir, proj_dir, result) :
# def get_all_imports_exports(fips_dir, proj_dir) :
# def _rec_fetch_imports(fips_dir, proj_dir, handled) :
# def fetch_imports(fips_dir, proj_dir) :
# def gather_imports(fips_dir, proj_dir) :
# def write_imports(fips_dir, proj_dir, cfg_name, imported) :
# def gather_and_write_imports(fips_dir, proj_dir, cfg_name) :
# def check_imports(fips_dir, proj_dir) :
# def check_local_changes(fips_dir, proj_dir) :
# def _rec_update_imports(fips_dir, proj_dir, handled) :
# def update_imports(fips_dir, proj_dir):


# Path: mod/verb.py
import sys
import os
import glob
    import importlib.util
    import imp
from collections import OrderedDict
from mod import log, util, dep


# dictionary of "name: module"
verbs = {}

# dictionary of "projname: name"
proj_verbs = OrderedDict()

#-------------------------------------------------------------------------------
def import_verbs_from(proj_name, proj_dir, verb_dir) :
    """import all verb modules from a directory, populates the
    verb and proj_verbs global variables

    :param proj_dir:    name of project that owns verb_dir
    :param verb_dir:    directory with verb python scripts (can be None)
    """
    global verbs, proj_verbs

    # make sure project-verbs find their modules
    sys.path.insert(0, proj_dir)

    if verb_dir and os.path.isdir(verb_dir):
        # get all .py file in verb dir
        verb_paths = glob.glob(verb_dir + '/*.py')
        if verb_paths :
            for verb_path in verb_paths :
                verb_module_name = os.path.split(verb_path)[1]
                verb_module_name = os.path.splitext(verb_module_name)[0]
                if not verb_module_name.startswith('__') :
                    if is_python3:
                        spec = importlib.util.spec_from_file_location(verb_module_name, verb_path)

                        verb_module = importlib.util.module_from_spec(spec)