diff options
-rw-r--r-- | mesonbuild/build.py | 8 | ||||
-rw-r--r-- | mesonbuild/dependencies.py | 12 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 4 | ||||
-rw-r--r-- | test cases/common/87 declare dep/entity/entity1.c | 4 | ||||
-rw-r--r-- | test cases/common/87 declare dep/entity/meson.build | 4 | ||||
-rw-r--r-- | test cases/common/87 declare dep/main.c | 4 |
6 files changed, 32 insertions, 4 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py index e2dd7ca..c96a69f 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -486,10 +486,18 @@ class BuildTarget(): if hasattr(dep, 'held_object'): dep = dep.held_object if isinstance(dep, dependencies.InternalDependency): + # Those parts that are internal. self.process_sourcelist(dep.sources) self.add_include_dirs(dep.include_directories) for l in dep.libraries: self.link(l) + # Those parts that are external. + extpart = dependencies.InternalDependency([], + dep.compile_args, + dep.link_args, + [], [], []) + self.external_deps.append(extpart) + # Deps of deps. self.add_external_deps(dep.ext_deps) elif isinstance(dep, dependencies.Dependency): self.external_deps.append(dep) diff --git a/mesonbuild/dependencies.py b/mesonbuild/dependencies.py index ca5fa89..70486dc 100644 --- a/mesonbuild/dependencies.py +++ b/mesonbuild/dependencies.py @@ -58,14 +58,22 @@ class Dependency(): def need_threads(self): return False -class InternalDependency(): - def __init__(self, incdirs, libraries, sources, ext_deps): +class InternalDependency(Dependency): + def __init__(self, incdirs, compile_args, link_args, libraries, sources, ext_deps): super().__init__() self.include_directories = incdirs + self.compile_args = compile_args + self.link_args = link_args self.libraries = libraries self.sources = sources self.ext_deps = ext_deps + def get_compile_args(self): + return self.compile_args + + def get_link_args(self): + return self.link_args + class PkgConfigDependency(Dependency): pkgconfig_found = None diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index b64eb7f..ffd4689 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -1122,6 +1122,8 @@ class Interpreter(): deps = kwargs.get('dependencies', []) if not isinstance(deps, list): deps = [deps] + compile_args = mesonlib.stringlistify(kwargs.get('compile_args', [])) + link_args = mesonlib.stringlistify(kwargs.get('link_args', [])) final_deps = [] for d in deps: try: @@ -1131,7 +1133,7 @@ class Interpreter(): if not isinstance(d, (dependencies.Dependency, dependencies.ExternalLibrary, dependencies.InternalDependency)): raise InterpreterException('Dependencies must be external deps') final_deps.append(d) - dep = dependencies.InternalDependency(incs, libs, sources, final_deps) + dep = dependencies.InternalDependency(incs, compile_args, link_args, libs, sources, final_deps) return InternalDependencyHolder(dep) @noKwargs diff --git a/test cases/common/87 declare dep/entity/entity1.c b/test cases/common/87 declare dep/entity/entity1.c index 9b5024a..204eb8b 100644 --- a/test cases/common/87 declare dep/entity/entity1.c +++ b/test cases/common/87 declare dep/entity/entity1.c @@ -1,5 +1,9 @@ #include"entity.h" +#ifdef USING_ENT +#error "Entity use flag leaked into entity compilation." +#endif + int entity_func1() { return 5; } diff --git a/test cases/common/87 declare dep/entity/meson.build b/test cases/common/87 declare dep/entity/meson.build index d427bc3..12050b5 100644 --- a/test cases/common/87 declare dep/entity/meson.build +++ b/test cases/common/87 declare dep/entity/meson.build @@ -2,4 +2,6 @@ entity_lib = static_library('entity', 'entity1.c') entity_dep = declare_dependency(link_with : entity_lib, include_directories : include_directories('.'), - sources : 'entity2.c') + sources : 'entity2.c', + compile_args : ['-DUSING_ENT=1'], + link_args : []) # No simple way of testing linker flags :(. diff --git a/test cases/common/87 declare dep/main.c b/test cases/common/87 declare dep/main.c index be6733a..4ad9d2a 100644 --- a/test cases/common/87 declare dep/main.c +++ b/test cases/common/87 declare dep/main.c @@ -1,6 +1,10 @@ #include<entity.h> #include<stdio.h> +#ifndef USING_ENT +#error "Entity use flag not used for compilation." +#endif + int main(int argc, char **argv) { if(entity_func1() != 5) { printf("Error in func1.\n"); |