aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-02-24 23:11:14 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2013-02-24 23:11:14 +0200
commit9948b616df2a9a64a080fd690ae0a0bf0565d56f (patch)
tree457f56821b101b5392bf6cb868f0a8e866a03312
parente7a2121bdc446c53648d62d3a0e9b186fab0ee1f (diff)
downloadmeson-9948b616df2a9a64a080fd690ae0a0bf0565d56f.zip
meson-9948b616df2a9a64a080fd690ae0a0bf0565d56f.tar.gz
meson-9948b616df2a9a64a080fd690ae0a0bf0565d56f.tar.bz2
Store bunch of data to coredata.
-rw-r--r--coredata.py7
-rwxr-xr-xenvironment.py46
-rwxr-xr-xinterpreter.py29
3 files changed, 60 insertions, 22 deletions
diff --git a/coredata.py b/coredata.py
index a24f594..ea02b39 100644
--- a/coredata.py
+++ b/coredata.py
@@ -34,6 +34,13 @@ class CoreData():
self.strip = options.strip
self.coverage = options.coverage
+ if isinstance(options, CoreData):
+ self.compilers = options.compilers.copy()
+ self.deps = options.deps.copy()
+ else:
+ self.compilers = {}
+ self.deps = {}
+
def load(filename):
obj = pickle.load(open(filename, 'rb'))
if not isinstance(obj, CoreData):
diff --git a/environment.py b/environment.py
index 84d08ae..cf7158e 100755
--- a/environment.py
+++ b/environment.py
@@ -264,6 +264,12 @@ class Environment():
def get_script_dir(self):
return os.path.dirname(self.meson_script_file)
+ def get_old_coredata(self):
+ return self.old_coredata
+
+ def get_new_coredata(self):
+ return self.new_coredata
+
def get_build_command(self):
return self.meson_script_file
@@ -397,6 +403,9 @@ class Dependency():
def get_link_flags(self):
return []
+ def found(self):
+ return False
+
# This should be an InterpreterObject. Fix it.
class PkgConfigDependency(Dependency):
@@ -404,6 +413,7 @@ class PkgConfigDependency(Dependency):
def __init__(self, name):
Dependency.__init__(self)
+ self.is_found = False
if not PkgConfigDependency.pkgconfig_found:
self.check_pkgconfig()
@@ -411,22 +421,27 @@ class PkgConfigDependency(Dependency):
stderr=subprocess.PIPE)
out = p.communicate()[0]
if p.returncode != 0:
- raise RuntimeError('Dependency %s not known to pkg-config.' % name)
- self.modversion = out.decode().strip()
- p = subprocess.Popen(['pkg-config', '--cflags', name], stdout=subprocess.PIPE,
+ print('Dependency %s not known to pkg-config.' % name)
+ self.modversion = 'none'
+ self.cflags = []
+ self.libs = []
+ else:
+ self.is_found = True
+ self.modversion = out.decode().strip()
+ p = subprocess.Popen(['pkg-config', '--cflags', name], stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
- out = p.communicate()[0]
- if p.returncode != 0:
- raise RuntimeError('Could not generate cflags for %s.' % name)
- self.cflags = out.decode().split()
-
- p = subprocess.Popen(['pkg-config', '--libs', name], stdout=subprocess.PIPE,
+ out = p.communicate()[0]
+ if p.returncode != 0:
+ raise RuntimeError('Could not generate cflags for %s.' % name)
+ self.cflags = out.decode().split()
+
+ p = subprocess.Popen(['pkg-config', '--libs', name], stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
- out = p.communicate()[0]
- if p.returncode != 0:
- raise RuntimeError('Could not generate libs for %s.' % name)
- self.libs = out.decode().split()
-
+ out = p.communicate()[0]
+ if p.returncode != 0:
+ raise RuntimeError('Could not generate libs for %s.' % name)
+ self.libs = out.decode().split()
+
def get_modversion(self):
return self.modversion
@@ -445,6 +460,9 @@ class PkgConfigDependency(Dependency):
print('Found pkg-config version %s.' % out.decode().strip())
PkgConfigDependency.pkgconfig_found = True
+ def found(self):
+ return self.is_found
+
# Fixme, move to environment.
def find_external_dependency(name, kwargs):
# Add detectors for non-pkg-config deps (e.g. Boost) etc here.
diff --git a/interpreter.py b/interpreter.py
index 35c9a62..3cdf8c4 100755
--- a/interpreter.py
+++ b/interpreter.py
@@ -446,6 +446,8 @@ class Interpreter():
self.build_def_files = [environment.build_filename]
self.subdir = ''
self.generators = []
+ self.old_coredata = self.environment.get_old_coredata()
+ self.new_coredata = self.environment.get_new_coredata()
def build_func_dict(self):
self.funcs = {'project' : self.func_project,
@@ -464,7 +466,7 @@ class Interpreter():
'include_directories' : self.func_include_directories,
'add_global_arguments' : self.func_add_global_arguments,
}
-
+
def get_build_def_files(self):
return self.build_def_files
@@ -563,19 +565,30 @@ class Interpreter():
def add_languages(self, node, args):
for lang in args:
- if lang.lower() == 'c':
- comp = self.environment.detect_c_compiler()
- elif lang.lower() == 'cxx':
- comp = self.environment.detect_cxx_compiler()
+ if lang in self.new_coredata.compilers:
+ comp = self.new_coredata.compilers[lang]
else:
- raise InvalidCode('Tried to use unknown language "%s".' % lang)
- comp.sanity_check(self.environment.get_scratch_dir())
+ if lang.lower() == 'c':
+ comp = self.environment.detect_c_compiler()
+ elif lang.lower() == 'cxx':
+ comp = self.environment.detect_cxx_compiler()
+ else:
+ raise InvalidCode('Tried to use unknown language "%s".' % lang)
+ comp.sanity_check(self.environment.get_scratch_dir())
+ self.new_coredata.compilers[lang] = comp
self.build.compilers.append(comp)
def func_find_dep(self, node, args, kwargs):
self.validate_arguments(args, 1, [str])
name = args[0]
- dep = environment.find_external_dependency(name, kwargs)
+ if name in self.old_coredata.deps:
+ dep = self.old_coredata.deps[name]
+ if not dep.found():
+ raise RuntimeError('Non-found dependency stored in coredata.')
+ else:
+ dep = environment.find_external_dependency(name, kwargs)
+ if dep.found():
+ self.new_coredata.deps[name] = dep
return dep
def func_executable(self, node, args, kwargs):