GObject Introspectionに入門している

https://github.com/RubyData/workshop-materials/blob/master/gobject-introspection/introduction.md とても丁寧に書いてあって凄い。ありがたい。

少しずつ進めているが、macOS High Sierra 10.13.6環境で詰まったのでメモしておく。

https://github.com/RubyData/workshop-materials/blob/master/gobject-introspection/introduction.md#gobject-introspection%E5%AF%BE%E5%BF%9C

GObject Introspection対応のところで、 gnome.generate_girをした後に再ビルド/インストールしようとしたときに、以下のようにエラーが出て止まった。

% ninja -C ../opencv-glib.build install
ninja: Entering directory `../opencv-glib.build'
[0/1] Regenerating build files.
The Meson build system
Version: 0.48.0
Source dir: /Users/kono/project/rdt/gobject_introspection
Build dir: /Users/kono/project/rdt/opencv-glib.build
Build type: native build
Project name: opencv-glib
Project version: 1.0.0
Native C compiler: cc (clang 10.0.0 "Apple LLVM version 10.0.0 (clang-1000.11.45.2)")
Native C++ compiler: c++ (clang 10.0.0 "Apple LLVM version 10.0.0 (clang-1000.11.45.2)")
Build machine cpu family: x86_64
Build machine cpu: x86_64
Dependency opencv found: YES (cached)
Dependency gobject-2.0 found: YES (cached)
Found pkg-config: /usr/local/bin/pkg-config (0.29.2)

opencv-glib/meson.build:25:6: ERROR:  gobject-introspection dependency was not found, gir cannot be generated.

Googleで検索したところ、以下がHit。 https://github.com/mesonbuild/meson/issues/2273

同じ現象なのか手元で試したところ...

% pkg-config --cflags gobject-introspection-1.0                                     [~/project/rdt/gobject_introspection]
Package libffi was not found in the pkg-config search path.
Perhaps you should add the directory containing `libffi.pc'
to the PKG_CONFIG_PATH environment variable
Package 'libffi', required by 'gobject-introspection-1.0', not found

どうやら同じで、libffiがpkg-configが見つからないのが原因との事なので、libffiをreinstallしてpathを通す。

% brew reinstall libffi                                                             [~/project/rdt/gobject_introspection]
==> Reinstalling libffi
==> Downloading https://homebrew.bintray.com/bottles/libffi-3.2.1.high_sierra.bottle.tar.gz
Already downloaded: /Users/kono/Library/Caches/Homebrew/downloads/2b94fcbd05c57dd780b931b4889951260b361d368dd3be9c8a38cb2c6e310fcc--libffi-3.2.1.high_sierra.bottle.tar.gz
==> Pouring libffi-3.2.1.high_sierra.bottle.tar.gz
==> Caveats
libffi is keg-only, which means it was not symlinked into /usr/local,
because some formulae require a newer version of libffi.

For compilers to find libffi you may need to set:
  export LDFLAGS="-L/usr/local/opt/libffi/lib"

For pkg-config to find libffi you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/libffi/lib/pkgconfig"

==> Summary
🍺  /usr/local/Cellar/libffi/3.2.1: 16 files, 297.0KB

% export PKG_CONFIG_PATH="$(brew --prefix libffi)/lib/pkgconfig"

再度buildを試したところ、成功した。

% ninja -C ../opencv-glib.build install                                             [~/project/rdt/gobject_introspection]
ninja: Entering directory `../opencv-glib.build'
[0/1] Regenerating build files.
The Meson build system
WARNING: PKG_CONFIG_PATH has changed between invocations from "" to "/usr/local/opt/libffi/lib/pkgconfig".
Version: 0.48.0
Source dir: /Users/kono/project/rdt/gobject_introspection
Build dir: /Users/kono/project/rdt/opencv-glib.build
Build type: native build
Project name: opencv-glib
Project version: 1.0.0
Native C compiler: cc (clang 10.0.0 "Apple LLVM version 10.0.0 (clang-1000.11.45.2)")
Native C++ compiler: c++ (clang 10.0.0 "Apple LLVM version 10.0.0 (clang-1000.11.45.2)")
Build machine cpu family: x86_64
Build machine cpu: x86_64
Dependency opencv found: YES (cached)
Dependency gobject-2.0 found: YES (cached)
Found pkg-config: /usr/local/bin/pkg-config (0.29.2)
Build targets in project: 3
Found ninja-1.8.2 at /usr/local/bin/ninja
[1/3] Generating CV-1.0.gir with a custom command.
g-ir-scanner: link: cc -o /Users/kono/project/rdt/opencv-glib.build/tmp-introspect49_jUZ/CV-1.0 /Users/kono/project/rdt/opencv-glib.build/tmp-introspect49_jUZ/CV-1.0.o -L. -Wl,-rpath,. -lopencv-glib -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_flann -lopencv_xobjdetect -lopencv_imgcodecs -lopencv_objdetect -lopencv_xphoto -lopencv_imgproc -lopencv_core -lgobject-2.0 -lglib-2.0 -lintl -L/Users/kono/project/rdt/opencv-glib.build/opencv-glib -Wl,-rpath,/Users/kono/project/rdt/opencv-glib.build/opencv-glib -L/usr/local/Cellar/opencv/3.4.3/lib -Wl,-rpath,/usr/local/Cellar/opencv/3.4.3/lib -L/usr/local/Cellar/glib/2.58.0_1/lib -Wl,-rpath,/usr/local/Cellar/glib/2.58.0_1/lib -L/usr/local/opt/gettext/lib -Wl,-rpath,/usr/local/opt/gettext/lib -L/usr/local/Cellar/glib/2.58.1/lib -L/usr/local/opt/gettext/lib -lgio-2.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -Wl,-framework -Wl,CoreFoundation
ld: warning: text-based stub file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd and library file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation are out of sync. Falling back to library file for linking.
[2/3] Installing files.
Installing opencv-glib/libopencv-glib.1.dylib to /tmp/local/lib
Installing opencv-glib/CV-1.0.gir to /tmp/local/share/gir-1.0
Installing opencv-glib/CV-1.0.typelib to /tmp/local/lib/girepository-1.0
Installing /Users/kono/project/rdt/gobject_introspection/opencv-glib/matrix.h to /tmp/local/include/opencv-glib