Can specify a subproject fallback for dependencies.
This commit is contained in:
parent
2984d421b7
commit
0962909120
|
@ -1262,6 +1262,9 @@ class Interpreter():
|
|||
if len(args) != 1:
|
||||
raise InterpreterException('Subproject takes exactly one argument')
|
||||
dirname = args[0]
|
||||
return self.do_subproject(dirname, kwargs)
|
||||
|
||||
def do_subproject(self, dirname, kwargs):
|
||||
if self.subdir != '':
|
||||
segs = os.path.split(self.subdir)
|
||||
if len(segs) != 2 or segs[0] != self.subproject_dir:
|
||||
|
@ -1537,10 +1540,24 @@ class Interpreter():
|
|||
else:
|
||||
dep = dependencies.Dependency() # Returns always false for dep.found()
|
||||
if not dep.found():
|
||||
dep = dependencies.find_external_dependency(name, self.environment, kwargs)
|
||||
try:
|
||||
dep = dependencies.find_external_dependency(name, self.environment, kwargs)
|
||||
except dependencies.DependencyException:
|
||||
if 'fallback' in kwargs:
|
||||
return self.dependency_fallback(kwargs)
|
||||
raise
|
||||
self.coredata.deps[identifier] = dep
|
||||
return DependencyHolder(dep)
|
||||
|
||||
def dependency_fallback(self, kwargs):
|
||||
fbinfo = kwargs['fallback']
|
||||
check_stringlist(fbinfo)
|
||||
if len(fbinfo) != 2:
|
||||
raise InterpreterException('Fallback info must have exactly two items.')
|
||||
dirname, varname = fbinfo
|
||||
self.do_subproject(dirname, kwargs)
|
||||
return self.subprojects[dirname].get_variable_method([varname], {})
|
||||
|
||||
def func_executable(self, node, args, kwargs):
|
||||
return self.build_target(node, args, kwargs, ExecutableHolder)
|
||||
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
project('dep fallback', 'c')
|
||||
|
||||
bob = dependency('boblib', fallback : ['boblib', 'bob_dep'])
|
||||
|
||||
exe = executable('bobtester', 'tester.c', dependencies : bob)
|
||||
test('bobtester', exe)
|
|
@ -0,0 +1,5 @@
|
|||
#include"bob.h"
|
||||
|
||||
const char* get_bob() {
|
||||
return "bob";
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
#pragma once
|
||||
|
||||
const char* get_bob();
|
|
@ -0,0 +1,7 @@
|
|||
project('bob', 'c')
|
||||
|
||||
boblib = static_library('bob', 'bob.c')
|
||||
bobinc = include_directories('.')
|
||||
|
||||
bob_dep = declare_dependency(link_with : boblib,
|
||||
include_directories : bobinc)
|
|
@ -0,0 +1,13 @@
|
|||
#include"bob.h"
|
||||
#include<string.h>
|
||||
#include<stdio.h>
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if(strcmp("bob", get_bob()) == 0) {
|
||||
printf("Bob is indeed bob.\n");
|
||||
} else {
|
||||
printf("ERROR: bob is not bob.\n");
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue