Can specify compile and link args for internal deps.

pull/423/head
Jussi Pakkanen 9 years ago
parent 352b5badd2
commit 52b66edb6c
  1. 8
      mesonbuild/build.py
  2. 12
      mesonbuild/dependencies.py
  3. 4
      mesonbuild/interpreter.py
  4. 4
      test cases/common/87 declare dep/entity/entity1.c
  5. 4
      test cases/common/87 declare dep/entity/meson.build
  6. 4
      test cases/common/87 declare dep/main.c

@ -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)

@ -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

@ -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

@ -1,5 +1,9 @@
#include"entity.h"
#ifdef USING_ENT
#error "Entity use flag leaked into entity compilation."
#endif
int entity_func1() {
return 5;
}

@ -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 :(.

@ -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");

Loading…
Cancel
Save