aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/build.py8
-rw-r--r--mesonbuild/dependencies.py12
-rw-r--r--mesonbuild/interpreter.py4
-rw-r--r--test cases/common/87 declare dep/entity/entity1.c4
-rw-r--r--test cases/common/87 declare dep/entity/meson.build4
-rw-r--r--test cases/common/87 declare dep/main.c4
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");