Can specify a subproject fallback for dependencies.

pull/300/head
Jussi Pakkanen 9 years ago
parent 2984d421b7
commit 0962909120
  1. 19
      interpreter.py
  2. 6
      test cases/common/95 dep fallback/meson.build
  3. 5
      test cases/common/95 dep fallback/subprojects/boblib/bob.c
  4. 3
      test cases/common/95 dep fallback/subprojects/boblib/bob.h
  5. 7
      test cases/common/95 dep fallback/subprojects/boblib/meson.build
  6. 13
      test cases/common/95 dep fallback/tester.c

@ -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…
Cancel
Save