aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/modules/gnome.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/modules/gnome.py')
-rw-r--r--mesonbuild/modules/gnome.py97
1 files changed, 71 insertions, 26 deletions
diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py
index f451cce..d6a0fcf 100644
--- a/mesonbuild/modules/gnome.py
+++ b/mesonbuild/modules/gnome.py
@@ -19,6 +19,7 @@ from .. import build
import os, sys
import subprocess
from ..mesonlib import MesonException
+from .. import dependencies
from .. import mlog
from .. import mesonlib
@@ -90,6 +91,33 @@ class GnomeModule:
return stdout.split('\n')[:-1]
+ def get_link_args(self, state, lib, depends):
+ link_command = ['-l%s' % lib.name]
+ if isinstance(lib, build.SharedLibrary):
+ link_command += ['-L%s' %
+ os.path.join(state.environment.get_build_dir(),
+ lib.subdir)]
+ depends.append(lib)
+ return link_command
+
+ def get_include_args(self, state, include_dirs):
+ if not include_dirs:
+ return []
+
+ dirs_str = []
+ for incdirs in include_dirs:
+ if hasattr(incdirs, "held_object"):
+ dirs = incdirs.held_object
+ else:
+ dirs = incdirs
+ for incdir in dirs.get_incdirs():
+ if os.path.isabs(incdir):
+ dirs_str += ['-I%s' % os.path.join(incdir)]
+ else:
+ dirs_str += ['-I%s' % os.path.join(state.environment.get_source_dir(),
+ dirs.curdir, incdir)]
+ return dirs_str
+
def generate_gir(self, state, args, kwargs):
if len(args) != 1:
raise MesonException('Gir takes one argument')
@@ -120,23 +148,14 @@ class GnomeModule:
extra_args = mesonlib.stringlistify(kwargs.pop('extra_args', []))
scan_command += extra_args
-
- for incdirs in girtarget.include_dirs:
- for incdir in incdirs.get_incdirs():
- scan_command += ['-I%s' % os.path.join(state.environment.get_source_dir(), incdir)]
+ scan_command += self.get_include_args(state, girtarget.include_dirs)
if 'link_with' in kwargs:
link_with = kwargs.pop('link_with')
if not isinstance(link_with, list):
link_with = [link_with]
for link in link_with:
- lib = link.held_object
- scan_command += ['-l%s' % lib.name]
- if isinstance(lib, build.SharedLibrary):
- scan_command += ['-L%s' %
- os.path.join(state.environment.get_build_dir(),
- lib.subdir)]
- depends.append(lib)
+ scan_command += self.get_link_args(state, link.held_object, depends)
if 'includes' in kwargs:
includes = kwargs.pop('includes')
@@ -175,24 +194,43 @@ class GnomeModule:
if not isinstance (deps, list):
deps = [deps]
for dep in deps:
- girdir = dep.held_object.get_variable ("girdir")
- if girdir:
- scan_command += ["--add-include-path=%s" % girdir]
- for lib in dep.held_object.libs:
- if os.path.isabs(lib) and dep.held_object.is_libtool:
- scan_command += ["-L%s" % os.path.dirname(lib)]
- libname = os.path.basename(lib)
- if libname.startswith("lib"):
- libname = libname[3:]
- libname = libname.split(".so")[0]
- lib = "-l%s" % libname
- scan_command += [lib]
+ if isinstance(dep.held_object, dependencies.InternalDependency):
+ scan_command += self.get_include_args(state, dep.held_object.include_directories)
+ for lib in dep.held_object.libraries:
+ scan_command += self.get_link_args(state, lib.held_object, depends)
+ for source in dep.held_object.sources:
+ if isinstance(source.held_object, GirTarget):
+ scan_command += ["--add-include-path=%s" %
+ os.path.join(state.environment.get_build_dir(),
+ source.held_object.get_subdir())]
+ elif isinstance(dep.held_object, dependencies.PkgConfigDependency):
+ for lib in dep.held_object.libs:
+ if os.path.isabs(lib) and dep.held_object.is_libtool:
+ scan_command += ["-L%s" % os.path.dirname(lib)]
+ libname = os.path.basename(lib)
+ if libname.startswith("lib"):
+ libname = libname[3:]
+ libname = libname.split(".so")[0]
+ lib = "-l%s" % libname
+ # Hack to avoid passing some compiler options in
+ if lib.startswith("-W"):
+ continue
+ scan_command += [lib]
+
+ girdir = dep.held_object.get_variable ("girdir")
+ if girdir:
+ scan_command += ["--add-include-path=%s" % girdir]
+ else:
+ mlog.log('dependency %s not handled to build gir files' % dep)
+ continue
inc_dirs = None
if kwargs.get('include_directories'):
inc_dirs = kwargs.pop('include_directories')
+
if not isinstance(inc_dirs, list):
inc_dirs = [inc_dirs]
+
for ind in inc_dirs:
if isinstance(ind.held_object, build.IncludeDirs):
scan_command += ['--add-include-path=%s' % inc for inc in ind.held_object.get_incdirs()]
@@ -222,9 +260,16 @@ class GnomeModule:
incd.held_object.get_incdirs()]
if deps:
for dep in deps:
- girdir = dep.held_object.get_variable ("girdir")
- if girdir:
- typelib_cmd += ["--includedir=%s" % girdir]
+ if isinstance(dep.held_object, dependencies.InternalDependency):
+ for source in dep.held_object.sources:
+ if isinstance(source.held_object, GirTarget):
+ typelib_cmd += ["--includedir=%s" %
+ os.path.join(state.environment.get_build_dir(),
+ source.held_object.get_subdir())]
+ elif isinstance(dep.held_object, dependencies.PkgConfigDependency):
+ girdir = dep.held_object.get_variable ("girdir")
+ if girdir:
+ typelib_cmd += ["--includedir=%s" % girdir]
kwargs['output'] = typelib_output
kwargs['command'] = typelib_cmd