Introspection data generation error in evince (autotools vs meson)
- From: Iñigo Martínez <inigomartinez gmail com>
- To: gtk-app-devel-list gnome org
- Subject: Introspection data generation error in evince (autotools vs meson)
- Date: Fri, 7 Sep 2018 08:34:47 +0200
Hello,
I have recently started porting evince to meson. The port is almost
complete but I have an issue with the generation of introspection data of
one of its libraries, `libevview3`, which I haven't been able to figure out
due to my limited introspection knowledge.
The introspection build parameters are as follows in the autotools'
Makefile[0]:
```
INTROSPECTION_COMPILER_ARGS = --includedir=$(top_builddir)/libdocument
EvinceView-$(EV_API_VERSION).gir: libevview3.la
EvinceView_@EV_API_VERSION_U@_gir_FILES = \
$(INST_H_SRC_FILES) \
$(INST_H_BUILT_FILES) \
$(filter %.c,$(libevview3_la_SOURCES))
EvinceView_@EV_API_VERSION_U@_gir_INCLUDES = GLib-2.0 GObject-2.0 Gio-2.0
Gdk-3.0 GdkPixbuf-2.0 Gtk-3.0
EvinceView_@EV_API_VERSION_U@_gir_LIBS = libevview3.la
$(top_builddir)/libdocument/libevdocument3.la
EvinceView_@EV_API_VERSION_U@_gir_CFLAGS = \
-I$(top_srcdir) \
-I$(top_builddir) \
-I$(top_srcdir)/libdocument \
-I$(top_builddir)/libdocument \
-DEVINCE_COMPILATION
EvinceView_@EV_API_VERSION_U@_gir_EXPORT_PACKAGES =
evince-view-$(EV_API_VERSION)
EvinceView_@EV_API_VERSION_U@_gir_SCANNERFLAGS = \
--add-include-path=$(top_builddir)/libdocument \
--include-uninstalled=$(top_builddir)/libdocument/EvinceDocument-$(EV_API_VERSION).gir
\
--identifier-prefix=Ev \
--symbol-prefix=ev
INTROSPECTION_GIRS = EvinceView-$(EV_API_VERSION).gir
girdir = $(datadir)/gir-1.0
gir_DATA = EvinceView-$(EV_API_VERSION).gir
typelibsdir = $(libdir)/girepository-1.0
typelibs_DATA = EvinceView-$(EV_API_VERSION).typelib
```
These produces the following command lines:
```
CPPFLAGS="" CFLAGS="-g -O2" LDFLAGS="-L/home/imartinez/jhbuild/install/lib
" CC="gcc" PKG_CONFIG="/usr/bin/pkg-config" GI_HOST_OS="" DLLTOOL="false"
/usr/bin/g-ir-scanner --namespace=EvinceView --nsversion=3.0
--libtool="/bin/bash ../libtool" --include=GLib-2.0 --include=GObject-2.0
--include=Gio-2.0 --include=Gdk-3.0 --include=GdkPixbuf-2.0
--include=Gtk-3.0 --pkg-export=evince-view-3.0 --library=libevview3.la
--library=../libdocument/libevdocument3.la
--add-include-path=../libdocument
--include-uninstalled=../libdocument/EvinceDocument-3.0.gir
--identifier-prefix=Ev --symbol-prefix=ev --cflags-begin -I.. -I..
-I../libdocument -I../libdocument -DEVINCE_COMPILATION --cflags-end
ev-document-model.h ev-jobs.h ev-job-scheduler.h ev-print-operation.h
ev-stock-icons.h ev-view.h ev-view-presentation.h ev-view-type-builtins.h
ev-annotation-window.c ev-document-model.c ev-form-field-accessible.c
ev-image-accessible.c ev-jobs.c ev-job-scheduler.c ev-link-accessible.c
ev-page-accessible.c ev-page-cache.c ev-pixbuf-cache.c ev-print-operation.c
ev-stock-icons.c ev-timeline.c ev-transition-animation.c ev-view.c
ev-view-accessible.c ev-view-cursor.c ev-view-presentation.c
ev-media-player.c libevview3.la --output EvinceView-3.0.gir
g-ir-scanner: link: /bin/bash ../libtool --mode=link --tag=CC gcc -o
/home/imartinez/Development/gnome/evince-at/libview/tmp-introspectfyj_c9fn/EvinceView-3.0
-export-dynamic -g -O2
/home/imartinez/Development/gnome/evince-at/libview/tmp-introspectfyj_c9fn/EvinceView-3.0.o
-L. libevview3.la ../libdocument/libevdocument3.la
-L/home/imartinez/jhbuild/install/lib -lgio-2.0 -lgobject-2.0
-Wl,--export-dynamic -lgmodule-2.0 -pthread -lglib-2.0
-L/home/imartinez/jhbuild/install/lib
libtool: link: gcc -o
/home/imartinez/Development/gnome/evince-at/libview/tmp-introspectfyj_c9fn/.libs/EvinceView-3.0
-g -O2
/home/imartinez/Development/gnome/evince-at/libview/tmp-introspectfyj_c9fn/EvinceView-3.0.o
-Wl,--export-dynamic -pthread -Wl,--export-dynamic -L.
./.libs/libevview3.so ../libdocument/.libs/libevdocument3.so
-L/home/imartinez/jhbuild/install/lib -lgio-2.0 -lgobject-2.0 -lgmodule-2.0
-lglib-2.0 -pthread -Wl,-rpath -Wl,/tmp/evince/lib
g-ir-scanner: EvinceView: warning: 2 warnings suppressed (use --warn-all to
see them)
```
This command creates the `EvinceView-3.0.gir` file properly. I tried to
replicate this on meson by using the same parameters[1]:
```
incs = [
'Gdk-3.0',
'GdkPixbuf-2.0',
'Gio-2.0',
'GLib-2.0',
'GObject-2.0',
'Gtk-3.0',
libevdocument_gir[0],
]
gnome.generate_gir(
[libevview, libevdocument],
sources: sources + headers + [enum_sources[1]],
includes: incs,
nsversion: ev_api_version,
namespace: 'EvinceView',
identifier_prefix: ev_code_prefix,
symbol_prefix: ev_code_prefix.to_lower(),
export_packages: 'evince-view-' + ev_api_version,
extra_args: '-DEVINCE_COMPILATION',
install: true,
)
```
These produces the following command line:
```
/usr/bin/g-ir-scanner -pthread
-I/home/imartinez/jhbuild/install/include/glib-2.0
-I/home/imartinez/jhbuild/install/lib/glib-2.0/include
-I/usr/include/gobject-introspection-1.0 --no-libtool
--namespace=EvinceView --nsversion=3.0 --warn-all --output
libview/EvinceView-3.0.gir -DEVINCE_COMPILATION
-I/home/imartinez/Development/gnome/evince/libview
-I/home/imartinez/Development/gnome/evince/_build/libview -I./. -I../.
-I./libdocument/. -I../libdocument/. -I./. -I../.
--filelist=/home/imartinez/Development/gnome/evince/_build/libview/libview@
@evview3@sha/EvinceView_3.0_gir_filelist --include=Gdk-3.0
--include=GdkPixbuf-2.0 --include=Gio-2.0 --include=GLib-2.0
--include=GObject-2.0 --include=Gtk-3.0
--include-uninstalled=libdocument/EvinceDocument-3.0.gir --symbol-prefix=ev
--identifier-prefix=Ev --pkg-export=evince-view-3.0 --cflags-begin
-DHAVE_CONFIG_H -DHAVE_CONFIG_H -I./. -I../. -I./libdocument/.
-I../libdocument/. -I/home/imartinez/jhbuild/install/include/gio-unix-2.0
-I/home/imartinez/jhbuild/install/include/glib-2.0
-I/home/imartinez/jhbuild/install/lib/glib-2.0/include
-I/usr/include/gspell-1 -I/usr/include/gtk-3.0
-I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0
-I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include
-I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/harfbuzz
-I/usr/include/fribidi -I/usr/include/atk-1.0 -I/usr/include/pixman-1
-I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16
-I/usr/include/gdk-pixbuf-2.0 -I/usr/include/enchant
-I/usr/include/gstreamer-1.0 -I/usr/include/orc-0.4
-I/usr/include/gtk-3.0/unix-print -I/usr/include/synctex --cflags-end -I./.
-I../. -I./libdocument/. -I../libdocument/.
--add-include-path=/usr/share/gir-1.0
--add-include-path=/home/imartinez/Development/gnome/evince/_build/libdocument
--add-include-path=./. --add-include-path=../.
--add-include-path=./libdocument/. --add-include-path=../libdocument/.
-L/home/imartinez/Development/gnome/evince/_build/libdocument
-L/home/imartinez/jhbuild/install/lib --extra-library=evdocument3
-L/home/imartinez/Development/gnome/evince/_build/libdocument
-L/home/imartinez/jhbuild/install/lib --library evview3
-L/home/imartinez/Development/gnome/evince/_build/libview
-L/home/imartinez/jhbuild/install/lib --library evdocument3
-L/home/imartinez/Development/gnome/evince/_build/libview
-L/home/imartinez/jhbuild/install/lib -L/home/imartinez/jhbuild/install/lib
-L/home/imartinez/jhbuild/install/lib --extra-library=gspell-1
--extra-library=gtk-3 --extra-library=gdk-3 --extra-library=pangocairo-1.0
--extra-library=pango-1.0 --extra-library=atk-1.0
--extra-library=cairo-gobject --extra-library=cairo
--extra-library=gdk_pixbuf-2.0 --extra-library=gio-2.0
--extra-library=gobject-2.0 --extra-library=glib-2.0
--extra-library=enchant --extra-library=gstbase-1.0
--extra-library=gstreamer-1.0 --extra-library=gstvideo-1.0
--extra-library=gthread-2.0 --extra-library=m --extra-library=gmodule-2.0
--extra-library=synctex --extra-library=z
```
However, it seems that the important parameters are in place, in the same
way as autotools does.
libs: `--library evview3 --library evdocument3`
namespace: `--namespace=EvinceView`
namespace version: `--nsversion=3.0`
girs: `--output EvinceView-3.0.gir`
includes: `--include=Gdk-3.0 --include=GdkPixbuf-2.0 --include=Gio-2.0
--include=GLib-2.0 --include=GObject-2.0 --include=Gtk-3.0`
scanner flags: `--add-include-path=./libdocument/
--include-uninstalled=libdocument/EvinceDocument-3.0.gir
--identifier-prefix=Ev --symbol-prefix=ev`
export packages: `--pkg-export=evince-view-3.0`
cflags: `-DEVINCE_COMPILATION`
The contents of the 'filelist' file 'EvinceView_3.0_gir_filelist', contains
the same list of files as those used by autotools:
```
../libview/ev-annotation-window.c
../libview/ev-document-model.c
../libview/ev-form-field-accessible.c
../libview/ev-image-accessible.c
../libview/ev-jobs.c
../libview/ev-job-scheduler.c
../libview/ev-link-accessible.c
../libview/ev-page-accessible.c
../libview/ev-page-cache.c
../libview/ev-pixbuf-cache.c
../libview/ev-print-operation.c
../libview/ev-stock-icons.c
../libview/ev-timeline.c
../libview/ev-transition-animation.c
../libview/ev-view.c
../libview/ev-view-accessible.c
../libview/ev-view-cursor.c
../libview/ev-view-presentation.c
../libview/ev-media-player.c
../libview/ev-document-model.h
../libview/ev-jobs.h
../libview/ev-job-scheduler.h
../libview/ev-print-operation.h
../libview/ev-stock-icons.h
../libview/ev-view.h
../libview/ev-view-presentation.h
/home/imartinez/Development/gnome/evince/_build/libview/ev-view-type-builtins.h
```
As you can also see, meson doesn't use libtool to assist in the creation of
the introspection data. It also appends some libraries/dependencies used in
the generation of the `libevview3` by using the `--extra-libraries` option.
However, meson is not able to generate the introspection data due to the
following error:
```
libview/ev-document-model.h:33:
libview/ev-document-model.h:57: Fatal: EvinceView: Namespace conflict for
'document_model_get_type'
libview/ev-document-model.h:57: Fatal: EvinceView: Namespace conflict for
'document_model_get_type'
```
I'm not able to figure out what is the reason behind the `Namespace
conflict`. When using autotools, the information from `DocumentModel` is
properly included in the introspection data in the following way:
```
<namespace name="EvinceView"
version="3.0"
shared-library="libevview3.so.3,libevdocument3.so.4"
c:identifier-prefixes="Ev"
c:symbol-prefixes="ev">
<class name="DocumentModel"
c:symbol-prefix="document_model"
c:type="EvDocumentModel"
parent="GObject.Object"
glib:type-name="EvDocumentModel"
glib:get-type="ev_document_model_get_type"
glib:type-struct="DocumentModelClass">
```
Does anyone have any idea about what might be happening?
Thanks,
Best regards,
[0]
https://gitlab.gnome.org/GNOME/evince/blob/master/libview/Makefile.am#L137
[1]
https://gitlab.gnome.org/inigomartinez/evince/blob/meson/libview/meson.build#L124
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]