thanks for the write up.

- armin

On 04/19/2016 11:39 AM, alexander.kana...@linux.intel.com wrote:
> Hello,
> 
> here is the information about gobject introspection that should be placed
> to the release notes of the upcoming yocto release.
> 
> 1. Introduction
> 
> This Yocto release adds support for generating and packaging GObject 
> introspection data. GObject introspection data is a description of the API
> provided by libraries built on top of GLib framework, and that framework's
> GObject mechanism in particular. The data is generated when building such
> a library, by linking the library with a small executable binary that 
> asks the library to describe itself, then executing the binary and 
> processing its output. Making this work in a cross-compilation environment
> is difficult, because the library is produced for the target architecture,
> 
> but its code needs to be executed on the build host. This problem is 
> solved in Yocto by running the code through Qemu emulator which allows 
> precisely that, but unfortunately Qemu does not always work perfectly (see
> known issues list below).
> 
> 2. Why all this trouble?
> 
> GObject introspection is nowadays the standard mechanism for accessing
> GObject-based software from runtime environments. If you want to construct
> 
> GStreamer pipelines using Python, or control UPnP infrastructure using 
> Javascript and GUPnP, this is the only way to do it.
> 
> 3. Where does generated introspection data go?
> 
> Gir files go to -dev packages, typelib files go to main packages
> (they are packaged together with libraries that are introspected).
> 
> 4. I don't need introspection data (or Qemu does not work on my
> combination of build host and target architecture), how can I switch it  
> off?
> 
> You have two options:
> a) add
> DISTRO_FEATURES_BACKFILL_CONSIDERED = "gobject-introspection-data" to your
> distro configuration. This will disable building introspection data using
> qemu, but will still enable building introspection tools and  libraries
> (building them does not require the use of qemu).
> 
> b) add
> MACHINE_FEATURES_BACKFILL_CONSIDERED = "qemu-usermode"
> to your machine configuration. This will disable the use of qemu when 
> building packages for your machine; at the moment this feature is
> used only by introspection recipes and has the same effect as option a), 
> but in the future there may be other features that this affects.
> 
> If introspection data is disabled, it can still be obtained through other 
> means (for example, by copying the data from a suitable sysroot, or 
> generating it on the target hardware). Yocto currently does not provide 
> specific support for these techniques.
> 
> 5. How do I enable generating introspection data in my library package?
> (variant: I have a library that no longer builds against latest Yocto  
> release, and build process prints introspection related errors, how to fix
> it?)
> 
> a. Inherit gobject-introspection class.
> 
> b. Make sure introspection is not disabled anywhere in the recipe or its
> includes. Also, make sure that 'gobject-introspection-data' is neither
> 
> in DISTRO_FEATURES_BACKFILL_CONSIDERED, and 'qemu-usermode is not in 
> MACHINE_FEATURES_BACKFILL_CONSIDERED, or nothing will happen.
> 
> c. Try to build the recipe; if this results in build errors that look like
> something is unable to find .so libraries, check where these
> libraries
> are in the source tree and add GIR_EXTRA_LIBS_PATH=${B}/something/.libs to
> the recipe (look at recipes in oe-core which have that variable for a 
> template).
> 
> c. Any other errors probably mean that introspection support in a package
> is not entirely standard, and breaks down in a cross-compilation
> environment. Custom-made fixing is needed then - please come to the yocto 
> mailing list for help.
> 
> 6. How do I test that introspection works in an image?
> 
> a. Make sure that 'gobject-introspection-data' is not in
> DISTRO_FEATURES_BACKFILL_CONSIDERED and 'qemu-usermode' is not in
> MACHINE_FEATURES_BACKFILL_CONSIDERED.
> 
> b. Build core-image-sato.
> 
> c. Start terminal, start python in the terminal.
> 
> d. Type out something like:
> 
>>>> from gi.repository import GLib
>>>> GLib.get_host_name()
> 
> e. Also, try something more advanced, for example:
> http://python-gtk-3-tutorial.readthedocs.org/en/latest/introduction.html
> 
> 7. Known issues:
> 
> - qemu-ppc64 crashes out immediately; so introspection data
> cannot be built on that architecture
> 
> - x32 is not supported by qemu; therefore introspection data is disabled
> there.
> 
> - musl is causing transient glib binaries to crash on assertion failures,
> so generating introspection data is disabled there as well
> 
> - introspection is disabled for some specific packages under specific
> arhcitectures (such as gcr, libsecret, webkit), because qemu is not able 
> to run the binaries correctly
> 
> 
> Thanks,
> Alex
> 
-- 
_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to