Skip to content

Commit

Permalink
Can specify compile and link args for internal deps.
Browse files Browse the repository at this point in the history
  • Loading branch information
jpakkane committed Feb 29, 2016
1 parent 352b5ba commit 52b66ed
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 4 deletions.
8 changes: 8 additions & 0 deletions mesonbuild/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -486,10 +486,18 @@ def add_external_deps(self, deps):
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)
Expand Down
12 changes: 10 additions & 2 deletions mesonbuild/dependencies.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,22 @@ def get_exe_args(self):
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

Expand Down
4 changes: 3 additions & 1 deletion mesonbuild/interpreter.py
Original file line number Diff line number Diff line change
Expand Up @@ -1122,6 +1122,8 @@ def func_declare_dependency(self, node, args, kwargs):
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:
Expand All @@ -1131,7 +1133,7 @@ def func_declare_dependency(self, node, args, kwargs):
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
Expand Down
4 changes: 4 additions & 0 deletions test cases/common/87 declare dep/entity/entity1.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
#include"entity.h"

#ifdef USING_ENT
#error "Entity use flag leaked into entity compilation."
#endif

int entity_func1() {
return 5;
}
4 changes: 3 additions & 1 deletion test cases/common/87 declare dep/entity/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -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 :(.
4 changes: 4 additions & 0 deletions test cases/common/87 declare dep/main.c
Original file line number Diff line number Diff line change
@@ -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");
Expand Down

0 comments on commit 52b66ed

Please sign in to comment.