Introspection data generation error in evince (autotools vs meson)



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]