aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-04-01 14:58:22 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2013-04-01 14:58:22 +0300
commit3d4aad9e0d0038061960469d4d380b7e57d53144 (patch)
tree5aea5bc253987766f1e28b64f47359c06e47b039
parent137365b5b3f5169f16106792a8f8e01bca1c181a (diff)
downloadmeson-3d4aad9e0d0038061960469d4d380b7e57d53144.zip
meson-3d4aad9e0d0038061960469d4d380b7e57d53144.tar.gz
meson-3d4aad9e0d0038061960469d4d380b7e57d53144.tar.bz2
Can have multiple different configurations of the same dependency.
-rw-r--r--coredata.py2
-rw-r--r--dependencies.py13
-rwxr-xr-xinterpreter.py7
-rw-r--r--test cases/frameworks/1 boost/meson.build9
-rw-r--r--test cases/frameworks/1 boost/nolinkexe.cc12
5 files changed, 34 insertions, 9 deletions
diff --git a/coredata.py b/coredata.py
index 4a56b74..fa0709f 100644
--- a/coredata.py
+++ b/coredata.py
@@ -72,4 +72,4 @@ forbidden_target_names = {'clean': None,
class MesonException(Exception):
def __init__(self, *args, **kwargs):
- Exception.__init__(args, kwargs)
+ Exception.__init__(self, *args, **kwargs)
diff --git a/dependencies.py b/dependencies.py
index 1fd734d..554eac4 100644
--- a/dependencies.py
+++ b/dependencies.py
@@ -25,8 +25,8 @@ import os, stat, glob, subprocess, shutil
from coredata import MesonException
class DependencyException(MesonException):
- def __init__(self, args, **kwargs):
- MesonException.__init__(args, kwargs)
+ def __init__(self, *args, **kwargs):
+ MesonException.__init__(self, *args, **kwargs)
class Dependency():
def __init__(self):
@@ -322,6 +322,15 @@ class Qt5Dependency():
return False
return True
+def get_dep_identifier(name, kwargs):
+ elements = [name]
+ modlist = kwargs.get('modules', [])
+ if isinstance(modlist, str):
+ modlist = [modlist]
+ for module in modlist:
+ elements.append(module)
+ return '/'.join(elements)
+
# This has to be at the end so the classes it references
# are defined.
packages = {'boost': BoostDependency,
diff --git a/interpreter.py b/interpreter.py
index 5b32cc7..091ec78 100755
--- a/interpreter.py
+++ b/interpreter.py
@@ -680,13 +680,14 @@ class Interpreter():
def func_find_dep(self, node, args, kwargs):
self.validate_arguments(args, 1, [str])
name = args[0]
- if name in self.coredata.deps:
- dep = self.coredata.deps[name]
+ identifier = dependencies.get_dep_identifier(name, kwargs)
+ if identifier in self.coredata.deps:
+ dep = self.coredata.deps[identifier]
else:
dep = dependencies.Dependency() # Returns always false for dep.found()
if not dep.found():
dep = dependencies.find_external_dependency(name, kwargs)
- self.coredata.deps[name] = dep
+ self.coredata.deps[identifier] = dep
return dep
def func_executable(self, node, args, kwargs):
diff --git a/test cases/frameworks/1 boost/meson.build b/test cases/frameworks/1 boost/meson.build
index 968cf23..4bd5582 100644
--- a/test cases/frameworks/1 boost/meson.build
+++ b/test cases/frameworks/1 boost/meson.build
@@ -1,11 +1,14 @@
project('boosttest', 'cxx')
-# Use a Boost module that requires a shared library.
-# Eventually we would like to be able to detect Boost
-# multiple times with different library combinations.
+# We want to have multiple separate configurations of Boost
+# within one project. The need to be independent of each other.
+# Use one without a library dependency and one with it.
+nolinkdep = find_dep('boost', modules: 'utility', required : true)
linkdep = find_dep('boost', modules : 'thread', required : true)
+nolinkexe = executable('nolinkedexe', 'nolinkexe.cc', deps : nolinkdep)
linkexe = executable('linkedexe', 'linkexe.cc', deps : linkdep)
+add_test('Boost nolinktext', nolinkexe)
add_test('Boost linktext', linkexe)
diff --git a/test cases/frameworks/1 boost/nolinkexe.cc b/test cases/frameworks/1 boost/nolinkexe.cc
new file mode 100644
index 0000000..7b6c6d9
--- /dev/null
+++ b/test cases/frameworks/1 boost/nolinkexe.cc
@@ -0,0 +1,12 @@
+#include<boost/utility.hpp>
+
+class MyClass : boost::noncopyable {
+public:
+ MyClass() {};
+ ~MyClass() {};
+};
+
+int main(int argc, char **argv) {
+ MyClass obj;
+ return 0;
+}