diff --git a/SConscript b/SConscript index a77e68a..0724aa7 100644 --- a/SConscript +++ b/SConscript @@ -114,12 +114,12 @@ def _cook(env: Environment, recipe_name: str): return dependency.cook_result def _normalize_module_path(env: Environment, path: str) -> str|None: - module_root = env.Dir('#/private').abspath + module_root = env.Dir('#').abspath try: relative = os.path.relpath(path, module_root) if relative[:2] == '..': return None - return relative + return os.path.join(*os.path.split(relative)[1:]) except ValueError: # may be thrown on Windows if the module is on a different drive than the project return None @@ -680,13 +680,13 @@ def _generate_project(project_type: str) -> None: return result def _get_modules() -> list: result = [] - for folder, config in env['SPP_MODULES'].items(): + for folder, module in env['SPP_MODULES'].items(): result.append({ - 'name': config.name, - 'private_folder': os.path.join('private', folder), - 'public_folder': os.path.join('public', folder), - 'description': config.description, - 'cxx_namespace': config.cxx_namespace + 'name': module.name, + 'private_folder': os.path.join(config['PRIVATE_FOLDER'], folder), + 'public_folder': os.path.join(config['PUBLIC_FOLDER'], folder), + 'description': module.description, + 'cxx_namespace': module.cxx_namespace }) return result def _escape_path(input: str) -> str: @@ -721,7 +721,7 @@ def _generate_project(project_type: str) -> None: def _get_sources(target_dict: dict) -> list[str]: target : Target = target_dict['target'] sources = target.kwargs.get('source') - return [str(pathlib.Path(source.abspath).relative_to(root_path)) for source in sources] + return [str(pathlib.Path(source.abspath).relative_to(root_path)) for source in Flatten(sources)] def _get_headers(folder: str) -> list[str]: result = [] @@ -773,15 +773,15 @@ def _generate_project(project_type: str) -> None: source_path = pathlib.Path(source_folder) target_path = pathlib.Path(target_folder) - config = {} - config_file = source_path / 'template.json' - if config_file.exists(): - with config_file.open('r') as f: - config = json.load(f) - files_config = config.get('files', {}) + tmpl_config = {} + tmpl_config_file = source_path / 'template.json' + if tmpl_config_file.exists(): + with tmpl_config_file.open('r') as f: + tmpl_config = json.load(f) + files_config = tmpl_config.get('files', {}) for source_file in source_path.rglob('*'): - if source_file == config_file: + if source_file == tmpl_config_file: continue if not source_file.is_file(): continue @@ -976,6 +976,7 @@ def _sanitize_identifier(name: str) -> str: chrs.append('_') return ''.join(chrs) +config: dict Import('config') if not config.get('PROJECT_NAME'): @@ -988,6 +989,10 @@ if not config.get('PREPROCESSOR_PREFIX'): config['PREPROCESSOR_PREFIX'] = _sanitize_identifier(config['PROJECT_NAME']).upper() # TODO: may be nicer? if not config.get('SPP_TARGET_VERSION'): config['SPP_TARGET_VERSION'] = (1, 0, 0) +if not config.get('PRIVATE_FOLDER'): + config['PRIVATE_FOLDER'] = 'private' +if not config.get('PUBLIC_FOLDER'): + config['PUBLIC_FOLDER'] = 'public' if 'COMPILATIONDB_FILTER_FILES' not in config: config['COMPILATIONDB_FILTER_FILES'] = True