aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/modules/__init__.py54
-rw-r--r--mesonbuild/modules/gnome.py15
-rw-r--r--mesonbuild/modules/hotdoc.py3
-rw-r--r--mesonbuild/modules/qt.py4
-rw-r--r--mesonbuild/modules/windows.py5
-rw-r--r--test cases/frameworks/10 gtk-doc/doc/foobar1/foobar-docs.sgml2
-rw-r--r--test cases/frameworks/10 gtk-doc/doc/foobar1/foobar-sections.txt16
-rw-r--r--test cases/frameworks/10 gtk-doc/doc/foobar1/foobar.types4
-rw-r--r--test cases/frameworks/10 gtk-doc/doc/foobar1/meson.build6
-rw-r--r--test cases/frameworks/10 gtk-doc/foo.c30
-rw-r--r--test cases/frameworks/10 gtk-doc/include/foo.h18
-rw-r--r--test cases/frameworks/10 gtk-doc/meson.build12
-rw-r--r--test cases/frameworks/10 gtk-doc/test.json4
13 files changed, 127 insertions, 46 deletions
diff --git a/mesonbuild/modules/__init__.py b/mesonbuild/modules/__init__.py
index ddb5e3e..c097029 100644
--- a/mesonbuild/modules/__init__.py
+++ b/mesonbuild/modules/__init__.py
@@ -56,6 +56,33 @@ class ModuleState:
self.target_machine = interpreter.builtin['target_machine'].held_object
self.current_node = interpreter.current_node
+ def get_include_args(self, include_dirs, prefix='-I'):
+ if not include_dirs:
+ return []
+
+ srcdir = self.environment.get_source_dir()
+ builddir = self.environment.get_build_dir()
+
+ dirs_str = []
+ for dirs in unholder(include_dirs):
+ if isinstance(dirs, str):
+ dirs_str += [f'{prefix}{dirs}']
+ continue
+
+ # Should be build.IncludeDirs object.
+ basedir = dirs.get_curdir()
+ for d in dirs.get_incdirs():
+ expdir = os.path.join(basedir, d)
+ srctreedir = os.path.join(srcdir, expdir)
+ buildtreedir = os.path.join(builddir, expdir)
+ dirs_str += [f'{prefix}{buildtreedir}',
+ f'{prefix}{srctreedir}']
+ for d in dirs.get_extra_build_dirs():
+ dirs_str += [f'{prefix}{d}']
+
+ return dirs_str
+
+
class ModuleObject:
"""Base class for all objects returned by modules
"""
@@ -71,33 +98,6 @@ class ModuleObject:
class ExtensionModule(ModuleObject):
pass
-def get_include_args(include_dirs, prefix='-I'):
- '''
- Expand include arguments to refer to the source and build dirs
- by using @SOURCE_ROOT@ and @BUILD_ROOT@ for later substitution
- '''
- if not include_dirs:
- return []
-
- dirs_str = []
- for dirs in unholder(include_dirs):
- if isinstance(dirs, str):
- dirs_str += [f'{prefix}{dirs}']
- continue
-
- # Should be build.IncludeDirs object.
- basedir = dirs.get_curdir()
- for d in dirs.get_incdirs():
- expdir = os.path.join(basedir, d)
- srctreedir = os.path.join('@SOURCE_ROOT@', expdir)
- buildtreedir = os.path.join('@BUILD_ROOT@', expdir)
- dirs_str += [f'{prefix}{buildtreedir}',
- f'{prefix}{srctreedir}']
- for d in dirs.get_extra_build_dirs():
- dirs_str += [f'{prefix}{d}']
-
- return dirs_str
-
def is_module_library(fname):
'''
Check if the file is a library-like file generated by a module-specific
diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py
index d0b053d..c91cda6 100644
--- a/mesonbuild/modules/gnome.py
+++ b/mesonbuild/modules/gnome.py
@@ -26,7 +26,6 @@ from .. import mlog
from .. import mesonlib
from .. import interpreter
from . import GResourceTarget, GResourceHeaderTarget, GirTarget, TypelibTarget, VapiTarget
-from . import get_include_args
from . import ExtensionModule
from . import ModuleReturnValue
from ..mesonlib import (
@@ -394,7 +393,7 @@ class GnomeModule(ExtensionModule):
gi_includes.update([girdir])
if isinstance(dep, InternalDependency):
cflags.update(dep.get_compile_args())
- cflags.update(get_include_args(dep.include_directories))
+ cflags.update(state.get_include_args(dep.include_directories))
for lib in unholder(dep.libraries):
if isinstance(lib, build.SharedLibrary):
internal_ldflags.update(self._get_link_args(state, lib, depends, include_rpath))
@@ -443,7 +442,7 @@ class GnomeModule(ExtensionModule):
else:
external_ldflags.update([lib])
elif isinstance(dep, (build.StaticLibrary, build.SharedLibrary)):
- cflags.update(get_include_args(dep.get_include_dirs()))
+ cflags.update(state.get_include_args(dep.get_include_dirs()))
depends.append(dep)
else:
mlog.log(f'dependency {dep!r} not handled to build gir files')
@@ -853,7 +852,7 @@ class GnomeModule(ExtensionModule):
scan_command += self._scan_header(kwargs)
scan_command += self._scan_extra_args(kwargs)
scan_command += ['-I' + srcdir, '-I' + builddir]
- scan_command += get_include_args(girtargets_inc_dirs)
+ scan_command += state.get_include_args(girtargets_inc_dirs)
scan_command += ['--filelist=' + self._make_gir_filelist(state, srcdir, ns, nsversion, girtargets, libsources)]
scan_command += self._scan_link_withs(state, depends, kwargs)
scan_command += self._scan_include(state, depends, gir_inc_dirs, kwargs)
@@ -863,8 +862,8 @@ class GnomeModule(ExtensionModule):
scan_command += ['--cflags-begin']
scan_command += cflags
scan_command += ['--cflags-end']
- scan_command += get_include_args(inc_dirs)
- scan_command += get_include_args(list(gi_includes) + gir_inc_dirs + inc_dirs, prefix='--add-include-path=')
+ scan_command += state.get_include_args(inc_dirs)
+ scan_command += state.get_include_args(list(gi_includes) + gir_inc_dirs + inc_dirs, prefix='--add-include-path=')
scan_command += list(internal_ldflags)
scan_command += self._scan_gir_targets(state, girtargets)
scan_command += self._scan_langs(state, [lc[0] for lc in langs_compilers])
@@ -886,7 +885,7 @@ class GnomeModule(ExtensionModule):
typelib_output = f'{ns}-{nsversion}.typelib'
typelib_cmd = [gicompiler, scan_target, '--output', '@OUTPUT@']
- typelib_cmd += get_include_args(gir_inc_dirs, prefix='--includedir=')
+ typelib_cmd += state.get_include_args(gir_inc_dirs, prefix='--includedir=')
for incdir in typelib_includes:
typelib_cmd += ["--includedir=" + incdir]
@@ -1127,7 +1126,7 @@ class GnomeModule(ExtensionModule):
'Gir include dirs should be include_directories().')
cflags.extend(deps_cflags)
- cflags.extend(get_include_args(inc_dirs))
+ cflags.extend(state.get_include_args(inc_dirs))
ldflags = []
ldflags.extend(internal_ldflags)
ldflags.extend(external_ldflags)
diff --git a/mesonbuild/modules/hotdoc.py b/mesonbuild/modules/hotdoc.py
index bf8cd22..89a5d93 100644
--- a/mesonbuild/modules/hotdoc.py
+++ b/mesonbuild/modules/hotdoc.py
@@ -22,7 +22,6 @@ from mesonbuild import mlog, build
from mesonbuild.coredata import MesonException
from . import ModuleReturnValue
from . import ExtensionModule
-from . import get_include_args
from ..dependencies import Dependency, InternalDependency
from ..interpreterbase import FeatureNew, InvalidArguments, noPosargs, noKwargs
from ..interpreter import CustomTargetHolder
@@ -191,7 +190,7 @@ class HotdocTargetBuilder:
for dep in mesonlib.listify(ensure_list(deps)):
dep = getattr(dep, "held_object", dep)
if isinstance(dep, InternalDependency):
- inc_args = get_include_args(dep.include_directories)
+ inc_args = self.state.get_include_args(dep.include_directories)
cflags.update([self.replace_dirs_in_string(x)
for x in inc_args])
cflags.update(self.process_dependencies(dep.libraries))
diff --git a/mesonbuild/modules/qt.py b/mesonbuild/modules/qt.py
index b7389bd..1bf0099 100644
--- a/mesonbuild/modules/qt.py
+++ b/mesonbuild/modules/qt.py
@@ -23,7 +23,7 @@ from .. import mesonlib
from ..mesonlib import MesonException, extract_as_list, File, unholder, version_compare
from ..dependencies import Dependency
import xml.etree.ElementTree as ET
-from . import ModuleReturnValue, get_include_args, ExtensionModule
+from . import ModuleReturnValue, ExtensionModule
from ..interpreterbase import noPosargs, permittedKwargs, FeatureNew, FeatureNewKwargs
from ..interpreter import extract_required_kwarg
from ..programs import NonExistingExternalProgram
@@ -239,7 +239,7 @@ class QtBaseModule(ExtensionModule):
ui_gen = build.Generator([self.uic], ui_kwargs)
ui_output = ui_gen.process_files(f'Qt{self.qt_version} ui', ui_files, state)
sources.append(ui_output)
- inc = get_include_args(include_dirs=include_directories)
+ inc = state.get_include_args(include_dirs=include_directories)
compile_args = []
for dep in unholder(dependencies):
if isinstance(dep, Dependency):
diff --git a/mesonbuild/modules/windows.py b/mesonbuild/modules/windows.py
index d7a8638..c4fdc19 100644
--- a/mesonbuild/modules/windows.py
+++ b/mesonbuild/modules/windows.py
@@ -19,7 +19,6 @@ import re
from .. import mlog
from .. import mesonlib, build
from ..mesonlib import MachineChoice, MesonException, extract_as_list, unholder
-from . import get_include_args
from . import ModuleReturnValue
from . import ExtensionModule
from ..interpreter import CustomTargetHolder
@@ -83,12 +82,12 @@ class WindowsModule(ExtensionModule):
wrc_depends = extract_as_list(kwargs, 'depends', pop = True)
for d in wrc_depends:
if isinstance(d, CustomTargetHolder):
- extra_args += get_include_args([d.outdir_include()])
+ extra_args += state.get_include_args([d.outdir_include()])
inc_dirs = extract_as_list(kwargs, 'include_directories', pop = True)
for incd in inc_dirs:
if not isinstance(incd.held_object, (str, build.IncludeDirs)):
raise MesonException('Resource include dirs should be include_directories().')
- extra_args += get_include_args(inc_dirs)
+ extra_args += state.get_include_args(inc_dirs)
rescomp, rescomp_type = self._find_resource_compiler(state)
if rescomp_type == ResourceCompilerType.rc:
diff --git a/test cases/frameworks/10 gtk-doc/doc/foobar1/foobar-docs.sgml b/test cases/frameworks/10 gtk-doc/doc/foobar1/foobar-docs.sgml
index 95f73ef..6ccd087 100644
--- a/test cases/frameworks/10 gtk-doc/doc/foobar1/foobar-docs.sgml
+++ b/test cases/frameworks/10 gtk-doc/doc/foobar1/foobar-docs.sgml
@@ -35,7 +35,7 @@
</partintro>
<xi:include href="xml/foo.xml"/>
<xi:include href="../../include/bar.xml"/>
- <xi:include href="xml/foo-version.xml"/>
+ <xi:include href="xml/version.xml"/>
</reference>
</book>
diff --git a/test cases/frameworks/10 gtk-doc/doc/foobar1/foobar-sections.txt b/test cases/frameworks/10 gtk-doc/doc/foobar1/foobar-sections.txt
new file mode 100644
index 0000000..d14c8da
--- /dev/null
+++ b/test cases/frameworks/10 gtk-doc/doc/foobar1/foobar-sections.txt
@@ -0,0 +1,16 @@
+<SECTION>
+<FILE>foo</FILE>
+<TITLE>FooObj</TITLE>
+FooObj
+FooObjClass
+foo_do_something
+</SECTION>
+
+<SECTION>
+<FILE>version</FILE>
+<TITLE>version</TITLE>
+FOO_MAJOR_VERSION
+FOO_MINOR_VERSION
+FOO_MICRO_VERSION
+</SECTION>
+
diff --git a/test cases/frameworks/10 gtk-doc/doc/foobar1/foobar.types b/test cases/frameworks/10 gtk-doc/doc/foobar1/foobar.types
new file mode 100644
index 0000000..0a9c046
--- /dev/null
+++ b/test cases/frameworks/10 gtk-doc/doc/foobar1/foobar.types
@@ -0,0 +1,4 @@
+% This include is useless it's a regression test for https://github.com/mesonbuild/meson/issues/8744
+#include <foo.h>
+
+foo_obj_get_type
diff --git a/test cases/frameworks/10 gtk-doc/doc/foobar1/meson.build b/test cases/frameworks/10 gtk-doc/doc/foobar1/meson.build
index 149c6e9..f4b3724 100644
--- a/test cases/frameworks/10 gtk-doc/doc/foobar1/meson.build
+++ b/test cases/frameworks/10 gtk-doc/doc/foobar1/meson.build
@@ -1,5 +1,9 @@
gnome.gtkdoc('foobar',
- src_dir : inc,
+ src_dir : [inc, '.'],
main_sgml : 'foobar-docs.sgml',
content_files : [docbook, version_xml],
+ dependencies: foo_dep,
+ # Manually written types file for regression test:
+ # https://github.com/mesonbuild/meson/issues/8744
+ gobject_typesfile: 'foobar.types',
install : true)
diff --git a/test cases/frameworks/10 gtk-doc/foo.c b/test cases/frameworks/10 gtk-doc/foo.c
new file mode 100644
index 0000000..36c0639
--- /dev/null
+++ b/test cases/frameworks/10 gtk-doc/foo.c
@@ -0,0 +1,30 @@
+#include <foo.h>
+
+
+struct _FooObj {
+ GObject parent;
+ int dummy;
+};
+
+G_DEFINE_TYPE(FooObj, foo_obj, G_TYPE_OBJECT)
+
+static void foo_obj_init (FooObj *self)
+{
+}
+
+static void foo_obj_class_init (FooObjClass *klass)
+{
+}
+
+/**
+ * foo_do_something:
+ * @self: self
+ *
+ * Useless function.
+ *
+ * Returns: 0.
+ */
+int foo_do_something(FooObj *self)
+{
+ return 0;
+}
diff --git a/test cases/frameworks/10 gtk-doc/include/foo.h b/test cases/frameworks/10 gtk-doc/include/foo.h
index 7b8946b..510f3d1 100644
--- a/test cases/frameworks/10 gtk-doc/include/foo.h
+++ b/test cases/frameworks/10 gtk-doc/include/foo.h
@@ -1,5 +1,7 @@
#pragma once
+#include <glib-object.h>
+
/**
* FooIndecision:
* @FOO_MAYBE: Something maybe
@@ -13,3 +15,19 @@ typedef enum {
FOO_POSSIBLY,
} FooIndecision;
+/**
+ * FooObjClass:
+ *
+ * The class
+ */
+
+/**
+ * FooObj:
+ *
+ * The instance
+ */
+
+#define FOO_TYPE_OBJ foo_obj_get_type()
+G_DECLARE_FINAL_TYPE(FooObj, foo_obj, FOO, OBJ, GObject)
+
+int foo_do_something(FooObj *self);
diff --git a/test cases/frameworks/10 gtk-doc/meson.build b/test cases/frameworks/10 gtk-doc/meson.build
index 5c22ad0..292980f 100644
--- a/test cases/frameworks/10 gtk-doc/meson.build
+++ b/test cases/frameworks/10 gtk-doc/meson.build
@@ -24,4 +24,16 @@ if gtkdoc_ver.version_compare('<1.26')
error('MESON_SKIP_TEST gtk-doc test requires gtkdoc >= 1.26.')
endif
+gobject = dependency('gobject-2.0')
+
+libfoo = library('foo', 'foo.c',
+ include_directories: inc,
+ dependencies: gobject,
+)
+
+foo_dep = declare_dependency(
+ link_with: libfoo,
+ include_directories: inc,
+)
+
subdir('doc')
diff --git a/test cases/frameworks/10 gtk-doc/test.json b/test cases/frameworks/10 gtk-doc/test.json
index c44126c..03ad059 100644
--- a/test cases/frameworks/10 gtk-doc/test.json
+++ b/test cases/frameworks/10 gtk-doc/test.json
@@ -4,8 +4,8 @@
{"type": "file", "file": "usr/share/gtk-doc/html/foobar/BAR.html"},
{"type": "file", "file": "usr/share/gtk-doc/html/foobar/foobar.devhelp2"},
{"type": "file", "file": "usr/share/gtk-doc/html/foobar/foobar.html"},
- {"type": "file", "file": "usr/share/gtk-doc/html/foobar/foobar-foo.html"},
- {"type": "file", "file": "usr/share/gtk-doc/html/foobar/foobar-foo-version.html"},
+ {"type": "file", "file": "usr/share/gtk-doc/html/foobar/FooObj.html"},
+ {"type": "file", "file": "usr/share/gtk-doc/html/foobar/foo-version.html"},
{"type": "file", "file": "usr/share/gtk-doc/html/foobar/home.png"},
{"type": "file", "file": "usr/share/gtk-doc/html/foobar/index.html"},
{"type": "file", "file": "usr/share/gtk-doc/html/foobar/left.png"},