Openembedded Core Discussions
 help / color / mirror / Atom feed
From: Mark Hatle <mark.hatle@windriver.com>
To: Alexander Kanavin <alexander.kanavin@linux.intel.com>,
	<openembedded-core@lists.openembedded.org>
Subject: Re: [PATCH 00/29] Add gobject introspection support to oe-core
Date: Tue, 10 Nov 2015 08:31:48 -0600	[thread overview]
Message-ID: <5641FFD4.1050506@windriver.com> (raw)
In-Reply-To: <cover.1447080392.git.alexander.kanavin@linux.intel.com>

On 11/9/15 8:50 AM, Alexander Kanavin wrote:
> 1. Introduction
> 
> This patchset adds support for gobject introspection to oe-core. 
> Gir files go to -dev packages, typelib files go to main packages 
> (they are packaged together with libraries that are 
> introspected).
> 
> The work is based on a meta-gir layer, which was used as a proof of
> concept; overall approach is same and some implementation ideas were 
> used, but this implementation is otherwise different, and hopefully 
> simpler and cleaner.

I have a concern since this uses QEMU.  What do we do for BSPs that do NOT have
QEMU support?

I realize QEMU supports most of the major arch families, but once we enable
certain tuning flags and such there are a fair number of common configurations
that do not have QEMU support.

> 
> 2. 30 second tutorial for adding introspection support to a package:
> 
> a. Inherit gobject-introspection class (or a class that inherits it,
> such as gnome-base).
> 
> b. Make sure introspection is not disabled anywhere in the recipe or
> its includes.
> 
> 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.
> 
> 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.

Is there a way that the qemu calls can be replaced by calls to an actual running
board (via SSH perhaps) to get the necessary information?  While inconvenient
this might be a valid workaround.

Also is there any facility to caching the gobject responses (other then standard
sstate-cache) so for machine that do not have QEMU support we can used a cached
set of responses?  (I'm not sure if these responses could be considered to be a
global cache, or if they are distribution specific in configuration.  Likely the
later.)

> 
> 3. How to verify that introspection works in an image:
> 
> a. Build core-image-sato.
> 
> b. Start terminal, start python3 in the terminal.
> 
> c. Type out something like:
> 
>>>> from gi.repository import GLib
>>>> GLib.get_host_name()
> 
> d. Also, try something more advanced, for example:
> http://python-gtk-3-tutorial.readthedocs.org/en/latest/introduction.html
> 
> 
> 4. Request for testing - I would like this patchset to be checked on three
> levels:
> 
> a. Test it in all of the build environments you have. Let me know any errors
> or warnings. Also let me know, if some package can be built with introspection
> enabled, but is not.
> 
> b. Check the patchset for correct use of Yocto idioms. It touches a lot of things
> in a lot of different ways, and maybe there are better ways to do what it does.
> 
> c. Check that the overall design is sensible: how things work is hopefully
> explained in comments and commit messages.
> 
> 
> 5. Known issues:
> 
> - there is no way to globally switch off the whole thing at the moment;
> this should probably be a DISTRO_FEATURE (also see the next item)

I agree.  For tunes where QEMU can't be used there should be a way to switch
this behavior off.  I don't know if it should be a DISTRO_FEATURE or other switch.

> - qemu-ppc64 crashes out immediately; so anything that supports introspection 
> cannot be built on that architecture:
> Invalid data memory access: 0x00000040d89c5008
> ...
> 
> - gcr introspection is disabled in x86_64, because introspection helper binary
> goes into an infinite loop under qemu (on that architecture only).
> 
> - gcr and libsecret introspection is disabled in mips64, because introspection helper
> binary fails an assertion in libgpg-error
> 
> - webkit introspection is disabled in powerpc, because qemu-ppc crashes out when
> running g-ir-compiler

We should definitely inspect the items above and see if any of them are bugs in
the built software or due to the QEMU application environment.

> - the patchset has not been tested with layers in meta-oe; just making oe-core 
> build without errors on all standard architectures has been a big, long task.

Thanks for the work.  Hopefully this and the work to follow will make it easier
to build more complex gobject based components in the future.

> - the whole thing should be documented in Yocto manuals
> 
> The following changes since commit fc45deac89ef63ca1c44e763c38ced7dfd72cbe1:
> 
>   build-appliance-image: Update to jethro head revision (2015-11-03 14:03:03 +0000)
> 
> are available in the git repository at:
> 
>   git://git.yoctoproject.org/poky-contrib akanavin/gobject-introspection-experimental
>   http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=akanavin/gobject-introspection-experimental
> 
> Alexander Kanavin (29):
>   qemu.bbclass: add qemu_wrapper_cmdline()
>   qemu: don't blacklist mips64 when building runners of userspace
>     binaries
>   gobject-introspection: add the recipe
>   gtk-doc-stub: remove introspection stubs
>   gobject-introspection.bbclass: add a class that enables gobject
>     introspection
>   python3-native: use the previous version of python-config script
>   avahi-ui: remove the dependency on python-pygtk by disabling
>     avahi-discover
>   python-pygtk: remove the recipe
>   avahi: enable gobject-introspection
>   udev: enable gobject introspection
>   vala: enable the use of vapigen by packages with vala support
>   gcr: enable generation of vapi files using vapigen
>   gdk-pixbuf: enable gobject introspection
>   gconf: enable gobject-introspection
>   gtk+: enable gobject introspection
>   gtk+3: enable gobject-introspection
>   libsecret: enable generation of vapi files using vapigen
>   clutter: enable gobject introspection
>   vala.bbclass: remove pre-packaged vapigen.m4 from tarballs
>   libsoup-2.4: enable gobject introspection
>   at-spi2-core: enable gobject introspection
>   gstreamer: enable gobject introspection
>   gnomebase.bbclass: enable gobject introspection
>   webkitgtk: enable gobject introspection
>   gcr: disable gobject introspection on x86-64 for now
>   gcr: disable gobject-introspection on mips64
>   libsecret: disable gobject-introspection on mips64
>   webkitgtk: disable gobject-introspection on powerpc
>   packagegroup-core-x11-sato: add python-pygobject and gtk+3
> 
>  meta/classes/gnomebase.bbclass                     |   5 +-
>  meta/classes/gobject-introspection.bbclass         |  36 +++
>  meta/classes/qemu.bbclass                          |  23 +-
>  meta/classes/vala.bbclass                          |   6 +
>  meta/conf/distro/include/distro_alias.inc          |   1 -
>  meta/recipes-connectivity/avahi/avahi-ui_0.6.31.bb |  16 +-
>  meta/recipes-connectivity/avahi/avahi.inc          |  12 +-
>  .../packagegroups/packagegroup-self-hosted.bb      |   1 -
>  meta/recipes-core/udev/udev.inc                    |  10 +-
>  ...file.am-don-t-hardcode-g-ir-compiler-name.patch |  27 ++
>  ...c-use-PKG_CONFIG_SYSROOT_PATH-when-findin.patch |  32 +++
>  ....am-use-libtool-when-running-g-ir-scanner.patch |  26 ++
>  ...c-add-sysroot-path-to-GI_DATADIR-don-t-se.patch |  41 +++
>  .../python/python-pygobject_2.28.3.bb              |  53 ----
>  .../python/python-pygobject_3.18.0.bb              |  29 ++
>  .../python/python-pygtk/acinclude.m4               |  90 ------
>  .../add-gtk-types.defs-into-gdk.c-dependence.patch |  32 ---
>  .../python/python-pygtk/fix-gtkunixprint.patch     |  20 --
>  .../python/python-pygtk/fix-pygtk-2.0.pc.patch     |  13 -
>  .../python/python-pygtk/nodocs.patch               |  15 -
>  .../prevent_to_get_display_during_import.patch     |  16 --
>  .../python/python-pygtk/python-pygtk2/acinclude.m4 |  90 ------
>  .../update-dependences-of-defs.c.patch             |  38 ---
>  .../recipes-devtools/python/python-pygtk_2.24.0.bb |  55 ----
>  .../python/python3-native_3.4.3.bb                 |   1 +
>  ...the-shell-version-of-python-config-that-w.patch |  38 +++
>  meta/recipes-devtools/qemu/qemu-targets.inc        |   2 +-
>  meta/recipes-devtools/vala/vala.inc                |  10 +
>  ...001-vapigen.m4-use-PKG_CONFIG_SYSROOT_DIR.patch |  38 +++
>  meta/recipes-devtools/vala/vala_0.28.0.bb          |   4 +-
>  meta/recipes-gnome/gcr/gcr_3.16.0.bb               |  22 +-
>  meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf_2.30.8.bb |   7 +-
>  meta/recipes-gnome/gnome/gconf_3.2.6.bb            |   6 +-
>  ...config-paths-with-PKG_CONFIG_SYSROOT_DIR-.patch |  99 +++++++
>  ...01-giscanner-add-a-use-ldd-wrapper-option.patch |  48 ++++
>  ...1-giscanner-add-use-binary-wrapper-option.patch |  52 ++++
>  ...c-add-host-gi-and-gi-cross-wrapper-option.patch | 158 +++++++++++
>  .../gobject-introspection_1.44.0.bb                | 146 ++++++++++
>  .../gsettings-desktop-schemas_3.16.1.bb            |   2 +-
>  meta/recipes-gnome/gtk+/gtk+.inc                   |   9 +-
>  meta/recipes-gnome/gtk+/gtk+3.inc                  |  10 +-
>  ...t-Import-introspection-stub-machinery-too.patch | 305 +++++++++++++++++++++
>  .../recipes-gnome/gtk-doc-stub/gtk-doc-stub_git.bb |   6 +-
>  meta/recipes-gnome/librsvg/librsvg_2.40.10.bb      |   3 -
>  meta/recipes-gnome/libsecret/libsecret_0.18.2.bb   |  14 +-
>  ...ation-paths-for-.gir-and-.typelib-as-reco.patch |  32 +++
>  meta/recipes-gnome/libwnck/libwnck3_3.14.0.bb      |   3 +-
>  meta/recipes-graphics/clutter/clutter-1.0.inc      |   5 +-
>  meta/recipes-graphics/clutter/clutter-gst-3.0.inc  |   4 +-
>  meta/recipes-graphics/clutter/clutter-gtk-1.0.inc  |   3 +-
>  meta/recipes-graphics/cogl/cogl-1.0.inc            |   8 +-
>  meta/recipes-graphics/mx/mx.inc                    |   5 +-
>  meta/recipes-graphics/pango/pango.inc              |   3 +-
>  ...op-introspection-macros-from-acinclude.m4.patch | 121 ++++++++
>  meta/recipes-graphics/pango/pango_1.36.8.bb        |   1 +
>  .../recipes-multimedia/gstreamer/gst-player_git.bb |   2 +-
>  .../gstreamer/gst-plugins-package.inc              |   1 +
>  ...-don-t-hardcode-libtool-name-when-running.patch |  42 +++
>  .../gstreamer/gstreamer1.0-plugins-bad_1.4.5.bb    |   1 +
>  .../gstreamer/gstreamer1.0-plugins-base.inc        |   4 +
>  ...-don-t-hardcode-libtool-name-when-running.patch | 168 ++++++++++++
>  ...-prefix-calls-to-pkg-config-with-PKG_CONF.patch | 298 ++++++++++++++++++++
>  ...ssing-include-directories-when-calling-in.patch |  28 ++
>  ...ncorrect-reference-to-gstreamer-sdp-in-Ma.patch |  27 ++
>  .../gstreamer/gstreamer1.0-plugins-base_1.4.5.bb   |   4 +
>  .../gstreamer/gstreamer1.0-plugins.inc             |  10 +-
>  .../gstreamer/gstreamer1.0-rtsp-server.inc         |   9 +-
>  ...ode-libtool-name-when-using-introspection.patch |  27 ++
>  .../gstreamer/gstreamer1.0-rtsp-server_1.4.5.bb    |   2 +
>  meta/recipes-multimedia/gstreamer/gstreamer1.0.inc |  12 +-
>  .../packagegroups/packagegroup-core-x11-sato.bb    |   2 +
>  ...Introspection.cmake-prefix-variables-obta.patch |  27 ++
>  ...ng-introspection-files-add-CMAKE_C_FLAGS-.patch |  40 +++
>  meta/recipes-sato/webkit/webkitgtk_2.8.5.bb        |  13 +-
>  meta/recipes-support/atk/at-spi2-core_2.16.0.bb    |   4 +-
>  meta/recipes-support/atk/atk_2.16.0.bb             |   2 +-
>  meta/recipes-support/libsoup/libsoup-2.4_2.50.0.bb |   2 +-
>  ...file.am-install-gir-typelib-using-datadir.patch |  34 +++
>  meta/recipes-support/vte/vte.inc                   |   4 +-
>  meta/recipes-support/vte/vte_0.28.2.bb             |   3 +-
>  80 files changed, 2106 insertions(+), 512 deletions(-)
>  create mode 100644 meta/classes/gobject-introspection.bbclass
>  create mode 100644 meta/recipes-core/udev/udev/0001-Makefile.am-don-t-hardcode-g-ir-compiler-name.patch
>  create mode 100644 meta/recipes-core/udev/udev/0001-configure.ac-use-PKG_CONFIG_SYSROOT_PATH-when-findin.patch
>  create mode 100644 meta/recipes-core/udev/udev/0002-Makefile.am-use-libtool-when-running-g-ir-scanner.patch
>  create mode 100644 meta/recipes-devtools/python/python-pygobject/0001-configure.ac-add-sysroot-path-to-GI_DATADIR-don-t-se.patch
>  delete mode 100644 meta/recipes-devtools/python/python-pygobject_2.28.3.bb
>  create mode 100644 meta/recipes-devtools/python/python-pygobject_3.18.0.bb
>  delete mode 100644 meta/recipes-devtools/python/python-pygtk/acinclude.m4
>  delete mode 100644 meta/recipes-devtools/python/python-pygtk/add-gtk-types.defs-into-gdk.c-dependence.patch
>  delete mode 100644 meta/recipes-devtools/python/python-pygtk/fix-gtkunixprint.patch
>  delete mode 100644 meta/recipes-devtools/python/python-pygtk/fix-pygtk-2.0.pc.patch
>  delete mode 100644 meta/recipes-devtools/python/python-pygtk/nodocs.patch
>  delete mode 100644 meta/recipes-devtools/python/python-pygtk/prevent_to_get_display_during_import.patch
>  delete mode 100644 meta/recipes-devtools/python/python-pygtk/python-pygtk2/acinclude.m4
>  delete mode 100644 meta/recipes-devtools/python/python-pygtk/update-dependences-of-defs.c.patch
>  delete mode 100644 meta/recipes-devtools/python/python-pygtk_2.24.0.bb
>  create mode 100644 meta/recipes-devtools/python/python3/0001-Do-not-use-the-shell-version-of-python-config-that-w.patch
>  create mode 100644 meta/recipes-devtools/vala/vala/0001-vapigen.m4-use-PKG_CONFIG_SYSROOT_DIR.patch
>  create mode 100644 meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-Prefix-pkg-config-paths-with-PKG_CONFIG_SYSROOT_DIR-.patch
>  create mode 100644 meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-giscanner-add-a-use-ldd-wrapper-option.patch
>  create mode 100644 meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-giscanner-add-use-binary-wrapper-option.patch
>  create mode 100644 meta/recipes-gnome/gobject-introspection/gobject-introspection/0002-configure.ac-add-host-gi-and-gi-cross-wrapper-option.patch
>  create mode 100644 meta/recipes-gnome/gobject-introspection/gobject-introspection_1.44.0.bb
>  create mode 100644 meta/recipes-gnome/gtk-doc-stub/files/0001-Revert-Import-introspection-stub-machinery-too.patch
>  create mode 100644 meta/recipes-gnome/libwnck/files/0001-Fix-installation-paths-for-.gir-and-.typelib-as-reco.patch
>  create mode 100644 meta/recipes-graphics/pango/pango/0001-Drop-introspection-macros-from-acinclude.m4.patch
>  create mode 100644 meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Makefile.am-don-t-hardcode-libtool-name-when-running.patch
>  create mode 100644 meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-Makefile.am-don-t-hardcode-libtool-name-when-running.patch
>  create mode 100644 meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-Makefile.am-prefix-calls-to-pkg-config-with-PKG_CONF.patch
>  create mode 100644 meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-riff-add-missing-include-directories-when-calling-in.patch
>  create mode 100644 meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0004-rtsp-drop-incorrect-reference-to-gstreamer-sdp-in-Ma.patch
>  create mode 100644 meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server/0001-Don-t-hardcode-libtool-name-when-using-introspection.patch
>  create mode 100644 meta/recipes-sato/webkit/files/0001-FindGObjectIntrospection.cmake-prefix-variables-obta.patch
>  create mode 100644 meta/recipes-sato/webkit/files/0001-When-building-introspection-files-add-CMAKE_C_FLAGS-.patch
>  create mode 100644 meta/recipes-support/vte/vte-0.28.2/0001-Makefile.am-install-gir-typelib-using-datadir.patch
> 



  parent reply	other threads:[~2015-11-10 14:31 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-09 14:50 [PATCH 00/29] Add gobject introspection support to oe-core Alexander Kanavin
2015-11-09 14:50 ` [PATCH 01/29] qemu.bbclass: add qemu_wrapper_cmdline() Alexander Kanavin
2015-11-09 14:50 ` [PATCH 02/29] qemu: don't blacklist mips64 when building runners of userspace binaries Alexander Kanavin
2015-11-09 14:50 ` [PATCH 03/29] gobject-introspection: add the recipe Alexander Kanavin
2015-11-09 14:50 ` [PATCH 04/29] gtk-doc-stub: remove introspection stubs Alexander Kanavin
2015-11-09 14:50 ` [PATCH 05/29] gobject-introspection.bbclass: add a class that enables gobject introspection Alexander Kanavin
2015-11-09 14:50 ` [PATCH 06/29] python3-native: use the previous version of python-config script Alexander Kanavin
2015-11-09 14:50 ` [PATCH 07/29] avahi-ui: remove the dependency on python-pygtk by disabling avahi-discover Alexander Kanavin
2015-11-09 14:50 ` [PATCH 08/29] python-pygtk: remove the recipe Alexander Kanavin
2015-11-10 13:13   ` Jussi Kukkonen
2015-11-10 13:25     ` Alexander Kanavin
2015-11-10 14:18       ` Jussi Kukkonen
2015-11-10 14:31         ` Paul Eggleton
2015-11-09 14:50 ` [PATCH 09/29] avahi: enable gobject-introspection Alexander Kanavin
2015-11-09 14:50 ` [PATCH 10/29] udev: enable gobject introspection Alexander Kanavin
2015-11-09 14:50 ` [PATCH 11/29] vala: enable the use of vapigen by packages with vala support Alexander Kanavin
2015-11-09 14:50 ` [PATCH 12/29] gcr: enable generation of vapi files using vapigen Alexander Kanavin
2015-11-09 14:50 ` [PATCH 13/29] gdk-pixbuf: enable gobject introspection Alexander Kanavin
2015-11-09 14:50 ` [PATCH 14/29] gconf: enable gobject-introspection Alexander Kanavin
2015-11-09 14:50 ` [PATCH 15/29] gtk+: enable gobject introspection Alexander Kanavin
2015-11-09 14:50 ` [PATCH 16/29] gtk+3: enable gobject-introspection Alexander Kanavin
2015-11-09 14:50 ` [PATCH 17/29] libsecret: enable generation of vapi files using vapigen Alexander Kanavin
2015-11-09 14:50 ` [PATCH 18/29] clutter: enable gobject introspection Alexander Kanavin
2015-11-09 14:50 ` [PATCH 19/29] vala.bbclass: remove pre-packaged vapigen.m4 from tarballs Alexander Kanavin
2015-11-09 14:50 ` [PATCH 20/29] libsoup-2.4: enable gobject introspection Alexander Kanavin
2015-11-09 14:50 ` [PATCH 21/29] at-spi2-core: " Alexander Kanavin
2015-11-09 14:50 ` [PATCH 22/29] gstreamer: " Alexander Kanavin
2015-11-09 14:50 ` [PATCH 23/29] gnomebase.bbclass: " Alexander Kanavin
2015-11-09 14:50 ` [PATCH 24/29] webkitgtk: " Alexander Kanavin
2015-11-09 14:50 ` [PATCH 25/29] gcr: disable gobject introspection on x86-64 for now Alexander Kanavin
2015-11-09 14:50 ` [PATCH 26/29] gcr: disable gobject-introspection on mips64 Alexander Kanavin
2015-11-09 14:50 ` [PATCH 27/29] libsecret: " Alexander Kanavin
2015-11-09 14:50 ` [PATCH 28/29] webkitgtk: disable gobject-introspection on powerpc Alexander Kanavin
2015-11-09 14:50 ` [PATCH 29/29] packagegroup-core-x11-sato: add python-pygobject and gtk+3 Alexander Kanavin
2015-11-10 14:31 ` Mark Hatle [this message]
2015-11-10 15:36   ` [PATCH 00/29] Add gobject introspection support to oe-core Alexander Kanavin
2015-11-10 16:39     ` Mark Hatle
2015-11-10 17:40       ` Burton, Ross
2015-11-10 18:25         ` Mark Hatle
2015-11-10 22:39           ` Richard Purdie
2015-11-10 23:10       ` Phil Blundell
2015-11-10 23:40         ` Burton, Ross
2015-11-11  0:15           ` Mark Hatle
2015-11-11  3:29           ` Khem Raj
2015-11-11 12:53           ` Alexander Kanavin
2015-11-11 13:14             ` Alexander Kanavin
2015-11-11 12:45       ` Alexander Kanavin
2015-11-11 13:34         ` Mark Hatle
2015-11-11 13:48           ` Alexander Kanavin
2015-11-11 13:50             ` Ricardo Ribalda Delgado
2015-11-11 13:55               ` Alexander Kanavin
2015-11-11 13:57                 ` Ricardo Ribalda Delgado
2015-11-11 13:59                   ` Alexander Kanavin
2015-11-11 13:58           ` Alexander Kanavin
2015-11-13 13:53             ` Mark Hatle
2015-11-13 16:12               ` alexander.kanavin
2015-11-13 16:31                 ` Mark Hatle
2015-11-16  9:52                   ` Alexander Kanavin
2015-11-16 16:12                     ` Mark Hatle
2015-11-17 14:06                       ` Alexander Kanavin
2015-11-17 15:02                         ` Mark Hatle
2015-11-18 16:10                           ` Alexander Kanavin
2016-01-19 16:03                             ` Mark Hatle
2016-03-10 16:56 ` Martin Jansa
2016-03-10 16:56   ` Burton, Ross
2016-03-10 17:05     ` Martin Jansa
  -- strict thread matches above, loose matches on Subject: below --
2015-11-26 14:26 Alexander Kanavin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5641FFD4.1050506@windriver.com \
    --to=mark.hatle@windriver.com \
    --cc=alexander.kanavin@linux.intel.com \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox