From f2dc9872f76970730965502cc93b8f2a19f82471 Mon Sep 17 00:00:00 2001 From: Patrick Wuttke Date: Sun, 13 Oct 2024 13:36:01 +0200 Subject: [PATCH] Automatically apply patch when compiling SDL3. --- SConscript | 18 ++++++++++++++---- addons/gitbranch.py | 4 +++- recipes/SDL/recipe.py | 8 ++++++++ .../tools/External Tools.xml.jinja | 9 +-------- 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/SConscript b/SConscript index d2a0c8e..027f3a3 100644 --- a/SConscript +++ b/SConscript @@ -119,6 +119,14 @@ def _inject_dependency(dependency, kwargs: dict, add_sources: bool = True) -> No _inject_list(kwargs, dependency.cook_result, 'LIBS') for depdep in dependency.depdeps: _inject_dependency(depdep, kwargs) + elif isinstance(dependency, _Target): + _inject_list(kwargs, dependency.kwargs, 'CPPPATH') + _inject_list(kwargs, dependency.kwargs, 'CPPDEFINES') + _inject_list(kwargs, dependency.kwargs, 'LIBPATH') + _inject_list(kwargs, dependency.kwargs, 'LIBS') + _inject_list(kwargs, {'LIBS': [dependency]}, 'LIBS') + for depdep in dependency.dependencies: + _inject_dependency(depdep, kwargs) def _rglob(env: Environment, root_path: str, pattern: str, **kwargs): result_nodes = [] @@ -335,10 +343,11 @@ def _wrap_builder(builder, target_type: TargetType): if version_spec == {}: dep_target = _find_target(env, name) if dep_target is not None and dep_target.target_type == TargetType.LIBRARY: - if 'LIBS' in kwargs: - kwargs['LIBS'].append(dep_target) - else: - kwargs['LIBS'] = [dep_target] + #if 'LIBS' in kwargs: + # kwargs['LIBS'].append(dep_target) + #else: + # kwargs['LIBS'] = [dep_target] + target_dependencies.append(dep_target) continue target_dependencies.append(_add_dependency(env, name, _parse_version_spec(version_spec))) @@ -747,6 +756,7 @@ env.Append(CPPDEFINES = []) env.Append(LINKFLAGS = []) # init SPP environment variables +env['SPP_DIR'] = _spp_dir.abspath env['SPP_TARGETS'] = [] env['SPP_DEFAULT_TARGETS'] = [] env['SPP_TARGET_DEPENDENCIES'] = [] diff --git a/addons/gitbranch.py b/addons/gitbranch.py index 7808807..a30ed74 100644 --- a/addons/gitbranch.py +++ b/addons/gitbranch.py @@ -35,7 +35,9 @@ def _git_branch(env: Environment, repo_name: str, remote_url: str, git_ref: str else: print(f'Not updating git repository {worktree_dir} as it is not on a branch.') return { - 'checkout_root': worktree_dir + 'checkout_root': worktree_dir, + 'repo': repo, + 'origin': origin } def _git_tags(env: Environment, repo_name: str, remote_url: str, force_fetch: bool = False) -> 'list[str]': diff --git a/recipes/SDL/recipe.py b/recipes/SDL/recipe.py index fc4b731..f351c1a 100644 --- a/recipes/SDL/recipe.py +++ b/recipes/SDL/recipe.py @@ -1,4 +1,5 @@ +import os import platform import re from SCons.Script import * @@ -7,6 +8,13 @@ from SCons.Script import * def _git_cook(env: Environment, repo: dict) -> dict: checkout_root = repo['checkout_root'] + if os.path.exists(os.path.join(repo['checkout_root'], 'cmake', 'GetGitRevisionDescription.cmake')): + try: + repo['repo'].git.apply('--unsafe-paths', '--directory', repo['checkout_root'], os.path.join(env['SPP_DIR'], 'recipes', 'SDL', 'fix_sdl3_from_worktree.patch')) + except: + # either already applied or not applicable anymore + pass + build_result = env.CMakeProject(project_root=checkout_root, generate_args = ['-DSDL_STATIC=ON', '-DSDL_SHARED=OFF']) libs = [] if platform.system() == 'Windows': diff --git a/util/clion_project_template/tools/External Tools.xml.jinja b/util/clion_project_template/tools/External Tools.xml.jinja index 710db31..faf4cd5 100644 --- a/util/clion_project_template/tools/External Tools.xml.jinja +++ b/util/clion_project_template/tools/External Tools.xml.jinja @@ -5,7 +5,7 @@ @@ -18,11 +18,4 @@ {% endfor %} {% endfor %} - - - -