xref: /openbmc/openbmc/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.84.0.bb (revision c9537f57ab488bf5d90132917b0184e2527970a5)
1*c9537f57SPatrick WilliamsSUMMARY = "Middleware layer between GObject-using C libraries and language bindings"
2*c9537f57SPatrick WilliamsDESCRIPTION = "GObject Introspection is a project for providing machine \
3*c9537f57SPatrick Williamsreadable introspection data of the API of C libraries. This introspection \
4*c9537f57SPatrick Williamsdata can be used in several different use cases, for example automatic code \
5*c9537f57SPatrick Williamsgeneration for bindings, API verification and documentation generation."
6*c9537f57SPatrick WilliamsHOMEPAGE = "https://wiki.gnome.org/action/show/Projects/GObjectIntrospection"
7*c9537f57SPatrick WilliamsBUGTRACKER = "https://gitlab.gnome.org/GNOME/gobject-introspection/issues"
8*c9537f57SPatrick WilliamsSECTION = "libs"
9*c9537f57SPatrick WilliamsLICENSE = "LGPL-2.0-or-later & GPL-2.0-or-later & MIT"
10*c9537f57SPatrick WilliamsLIC_FILES_CHKSUM = "file://COPYING;md5=c434e8128a68bedd59b80b2ac1eb1c4a \
11*c9537f57SPatrick Williams                    file://tools/compiler.c;endline=20;md5=fc5007fc20022720e6c0b0cdde41fabd \
12*c9537f57SPatrick Williams                    file://giscanner/sourcescanner.c;endline=22;md5=194d6e0c1d00662f32d030ce44de8d39 \
13*c9537f57SPatrick Williams                    file://girepository/giregisteredtypeinfo.c;endline=21;md5=661847611ae6979465415f31a759ba27 \
14*c9537f57SPatrick Williams                    "
15*c9537f57SPatrick Williams
16*c9537f57SPatrick WilliamsSRC_URI = "${GNOME_MIRROR}/${BPN}/${@oe.utils.trim_version("${PV}", 2)}/${BPN}-${PV}.tar.xz \
17*c9537f57SPatrick Williams           "
18*c9537f57SPatrick Williams
19*c9537f57SPatrick WilliamsSRC_URI[sha256sum] = "945b57da7ec262e5c266b89e091d14be800cc424277d82a02872b7d794a84779"
20*c9537f57SPatrick Williams
21*c9537f57SPatrick WilliamsSRC_URI:append:class-native = " file://0001-Relocate-the-repository-directory-for-native-builds.patch"
22*c9537f57SPatrick Williams
23*c9537f57SPatrick Williamsinherit meson pkgconfig gtk-doc python3targetconfig qemu gobject-introspection-data upstream-version-is-even multilib_script
24*c9537f57SPatrick Williams
25*c9537f57SPatrick WilliamsGTKDOC_MESON_OPTION = "gtk_doc"
26*c9537f57SPatrick Williams
27*c9537f57SPatrick WilliamsMULTILIB_SCRIPTS = "${PN}-tools:${bindir}/g-ir-annotation-tool ${PN}-tools:${bindir}/g-ir-scanner"
28*c9537f57SPatrick Williams
29*c9537f57SPatrick Williams# setuptools are required to provide distutils to build the tools
30*c9537f57SPatrick WilliamsDEPENDS += " libffi zlib python3 python3-setuptools flex-native bison-native"
31*c9537f57SPatrick WilliamsDEPENDS:append:class-native = " glib-2.0"
32*c9537f57SPatrick WilliamsDEPENDS:append:class-target = " glib-2.0-initial"
33*c9537f57SPatrick Williams
34*c9537f57SPatrick Williams# target build needs qemu to run temporary introspection binaries created
35*c9537f57SPatrick Williams# on the fly by g-ir-scanner and a native version of itself to run
36*c9537f57SPatrick Williams# native versions of its own tools during build.
37*c9537f57SPatrick WilliamsDEPENDS:append:class-target = " gobject-introspection-native qemu-native"
38*c9537f57SPatrick Williams
39*c9537f57SPatrick Williams# needed for writing out the qemu wrapper script
40*c9537f57SPatrick Williamsexport STAGING_DIR_HOST
41*c9537f57SPatrick Williamsexport B
42*c9537f57SPatrick Williams
43*c9537f57SPatrick WilliamsPACKAGECONFIG ?= ""
44*c9537f57SPatrick WilliamsPACKAGECONFIG[doctool] = "-Ddoctool=enabled,-Ddoctool=disabled,python3-mako,"
45*c9537f57SPatrick Williams
46*c9537f57SPatrick Williams# Configure target build to use native tools of itself and to use a qemu wrapper
47*c9537f57SPatrick Williams# and optionally to generate introspection data
48*c9537f57SPatrick WilliamsEXTRA_OEMESON:class-target = " \
49*c9537f57SPatrick Williams    -Dgi_cross_use_prebuilt_gi=true \
50*c9537f57SPatrick Williams    -Dgi_cross_binary_wrapper=${B}/g-ir-scanner-qemuwrapper \
51*c9537f57SPatrick Williams    -Dgi_cross_ldd_wrapper=${B}/g-ir-scanner-lddwrapper \
52*c9537f57SPatrick Williams    -Dgi_cross_pkgconfig_sysroot_path=${PKG_CONFIG_SYSROOT_DIR} \
53*c9537f57SPatrick Williams    ${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-Dbuild_introspection_data=true', '-Dbuild_introspection_data=false', d)} \
54*c9537f57SPatrick Williams    ${@'-Dgir_dir_prefix=${libdir}' if d.getVar('MULTILIBS') else ''} \
55*c9537f57SPatrick Williams"
56*c9537f57SPatrick Williams
57*c9537f57SPatrick Williamsdo_configure:prepend:class-native() {
58*c9537f57SPatrick Williams        # Tweak the native python scripts so that they don't refer to the
59*c9537f57SPatrick Williams        # full path of native python binary (the solution is taken from glib-2.0 recipe)
60*c9537f57SPatrick Williams        # This removes the risk of exceeding Linux kernel's shebang line limit (128 bytes)
61*c9537f57SPatrick Williams        sed -i -e '1s,#!.*,#!${USRBINPATH}/env python3,' ${S}/tools/g-ir-tool-template.in
62*c9537f57SPatrick Williams}
63*c9537f57SPatrick Williams
64*c9537f57SPatrick Williamsdo_configure:prepend:class-target() {
65*c9537f57SPatrick Williams        # Write out a qemu wrapper that will be given to gi-scanner so that it
66*c9537f57SPatrick Williams        # can run target helper binaries through that.
67*c9537f57SPatrick Williams        qemu_binary="${@qemu_wrapper_cmdline(d, '$STAGING_DIR_HOST', ['\\$GIR_EXTRA_LIBS_PATH','.libs','$STAGING_DIR_HOST/${libdir}','$STAGING_DIR_HOST/${base_libdir}'])}"
68*c9537f57SPatrick Williams        cat > ${B}/g-ir-scanner-qemuwrapper << EOF
69*c9537f57SPatrick Williams#!/bin/sh
70*c9537f57SPatrick Williams# Use a modules directory which doesn't exist so we don't load random things
71*c9537f57SPatrick Williams# which may then get deleted (or their dependencies) and potentially segfault
72*c9537f57SPatrick Williamsexport GIO_MODULE_DIR=${STAGING_LIBDIR}/gio/modules-dummy
73*c9537f57SPatrick Williams
74*c9537f57SPatrick Williams$qemu_binary "\$@"
75*c9537f57SPatrick Williamsif [ \$? -ne 0 ]; then
76*c9537f57SPatrick Williams    echo "If the above error message is about missing .so libraries, then setting up GIR_EXTRA_LIBS_PATH in the recipe should help."
77*c9537f57SPatrick Williams    echo "(typically like this: GIR_EXTRA_LIBS_PATH=\"$""{B}/something/.libs\" )"
78*c9537f57SPatrick Williams    exit 1
79*c9537f57SPatrick Williamsfi
80*c9537f57SPatrick WilliamsEOF
81*c9537f57SPatrick Williams        chmod +x ${B}/g-ir-scanner-qemuwrapper
82*c9537f57SPatrick Williams
83*c9537f57SPatrick Williams        # Write out a wrapper for g-ir-scanner itself, which will be used when building introspection files
84*c9537f57SPatrick Williams        # for glib-based packages. This wrapper calls the native version of the scanner, and tells it to use
85*c9537f57SPatrick Williams        # a qemu wrapper for running transient target binaries produced by the scanner, and an include directory
86*c9537f57SPatrick Williams        # from the target sysroot.
87*c9537f57SPatrick Williams        cat > ${B}/g-ir-scanner-wrapper << EOF
88*c9537f57SPatrick Williams#!/bin/sh
89*c9537f57SPatrick Williams# This prevents g-ir-scanner from writing cache data to user's HOME dir
90*c9537f57SPatrick Williamsexport GI_SCANNER_DISABLE_CACHE=1
91*c9537f57SPatrick Williams
92*c9537f57SPatrick Williamsg-ir-scanner --lib-dirs-envvar=GIR_EXTRA_LIBS_PATH --use-binary-wrapper=${STAGING_BINDIR}/g-ir-scanner-qemuwrapper --use-ldd-wrapper=${STAGING_BINDIR}/g-ir-scanner-lddwrapper --add-include-path=${STAGING_DATADIR}/gir-1.0 --add-include-path=${STAGING_LIBDIR}/gir-1.0 "\$@"
93*c9537f57SPatrick WilliamsEOF
94*c9537f57SPatrick Williams        chmod +x ${B}/g-ir-scanner-wrapper
95*c9537f57SPatrick Williams
96*c9537f57SPatrick Williams        # Write out a wrapper for g-ir-compiler, which runs the target version of it through qemu.
97*c9537f57SPatrick Williams        # g-ir-compiler writes out the raw content of a C struct to disk, and therefore is architecture dependent.
98*c9537f57SPatrick Williams        cat > ${B}/g-ir-compiler-wrapper << EOF
99*c9537f57SPatrick Williams#!/bin/sh
100*c9537f57SPatrick Williams${STAGING_BINDIR}/g-ir-scanner-qemuwrapper ${STAGING_BINDIR}/g-ir-compiler "\$@"
101*c9537f57SPatrick WilliamsEOF
102*c9537f57SPatrick Williams        chmod +x ${B}/g-ir-compiler-wrapper
103*c9537f57SPatrick Williams
104*c9537f57SPatrick Williams        # Write out a wrapper to use instead of ldd, which does not work when a binary is built
105*c9537f57SPatrick Williams        # for a different architecture
106*c9537f57SPatrick Williams        cat > ${B}/g-ir-scanner-lddwrapper << EOF
107*c9537f57SPatrick Williams#!/bin/sh
108*c9537f57SPatrick Williams\$OBJDUMP -p "\$@"
109*c9537f57SPatrick WilliamsEOF
110*c9537f57SPatrick Williams        chmod +x ${B}/g-ir-scanner-lddwrapper
111*c9537f57SPatrick Williams
112*c9537f57SPatrick Williams        # Also tweak the target python scripts so that they don't refer to the
113*c9537f57SPatrick Williams        # native version of python binary (the solution is taken from glib-2.0 recipe)
114*c9537f57SPatrick Williams        sed -i -e '1s,#!.*,#!${USRBINPATH}/env python3,' ${S}/tools/g-ir-tool-template.in
115*c9537f57SPatrick Williams}
116*c9537f57SPatrick Williams
117*c9537f57SPatrick Williamsdo_compile:prepend() {
118*c9537f57SPatrick Williams        # Needed to run g-ir unit tests, which won't be able to find the built libraries otherwise
119*c9537f57SPatrick Williams        export GIR_EXTRA_LIBS_PATH=$B/.libs
120*c9537f57SPatrick Williams}
121*c9537f57SPatrick Williams
122*c9537f57SPatrick Williamsdo_install:prepend() {
123*c9537f57SPatrick Williams        # This prevents g-ir-scanner from writing cache data to $HOME
124*c9537f57SPatrick Williams        export GI_SCANNER_DISABLE_CACHE=1
125*c9537f57SPatrick Williams}
126*c9537f57SPatrick Williams
127*c9537f57SPatrick Williams# Our wrappers need to be available system-wide, because they will be used
128*c9537f57SPatrick Williams# to build introspection files for all other gobject-based packages
129*c9537f57SPatrick Williamsdo_install:append:class-target() {
130*c9537f57SPatrick Williams        install -d ${D}${bindir}/
131*c9537f57SPatrick Williams        install ${B}/g-ir-scanner-qemuwrapper ${D}${bindir}/
132*c9537f57SPatrick Williams        install ${B}/g-ir-scanner-wrapper ${D}${bindir}/
133*c9537f57SPatrick Williams        install ${B}/g-ir-compiler-wrapper ${D}${bindir}/
134*c9537f57SPatrick Williams        install ${B}/g-ir-scanner-lddwrapper ${D}${bindir}/
135*c9537f57SPatrick Williams}
136*c9537f57SPatrick Williams
137*c9537f57SPatrick Williams# we need target versions of introspection tools in sysroot so that they can be run via qemu
138*c9537f57SPatrick Williams# when building introspection files in other packages
139*c9537f57SPatrick WilliamsSYSROOT_DIRS:append:class-target = " ${bindir}"
140*c9537f57SPatrick Williams
141*c9537f57SPatrick WilliamsSYSROOT_PREPROCESS_FUNCS:append:class-target = " gi_binaries_sysroot_preprocess"
142*c9537f57SPatrick Williamsgi_binaries_sysroot_preprocess() {
143*c9537f57SPatrick Williams        # Tweak the binary names in the introspection pkgconfig file, so that it
144*c9537f57SPatrick Williams        # picks up our wrappers which do the cross-compile and qemu magic.
145*c9537f57SPatrick Williams        sed -i \
146*c9537f57SPatrick Williams           -e "s|g_ir_scanner=.*|g_ir_scanner=${bindir}/g-ir-scanner-wrapper|" \
147*c9537f57SPatrick Williams           -e "s|g_ir_compiler=.*|g_ir_compiler=${bindir}/g-ir-compiler-wrapper|" \
148*c9537f57SPatrick Williams           ${SYSROOT_DESTDIR}${libdir}/pkgconfig/gobject-introspection-1.0.pc
149*c9537f57SPatrick Williams}
150*c9537f57SPatrick Williams
151*c9537f57SPatrick WilliamsSYSROOT_PREPROCESS_FUNCS:append = " gi_ldsoconf_sysroot_preprocess"
152*c9537f57SPatrick Williamsgi_ldsoconf_sysroot_preprocess () {
153*c9537f57SPatrick Williams	mkdir -p ${SYSROOT_DESTDIR}${bindir}
154*c9537f57SPatrick Williams	dest=${SYSROOT_DESTDIR}${bindir}/postinst-ldsoconf-${PN}
155*c9537f57SPatrick Williams	echo "#!/bin/sh" > $dest
156*c9537f57SPatrick Williams	echo "mkdir -p ${STAGING_DIR_TARGET}${sysconfdir}" >> $dest
157*c9537f57SPatrick Williams	echo "echo ${base_libdir} >> ${STAGING_DIR_TARGET}${sysconfdir}/ld.so.conf" >> $dest
158*c9537f57SPatrick Williams	echo "echo ${libdir} >> ${STAGING_DIR_TARGET}${sysconfdir}/ld.so.conf" >> $dest
159*c9537f57SPatrick Williams	chmod 755 $dest
160*c9537f57SPatrick Williams}
161*c9537f57SPatrick Williams
162*c9537f57SPatrick Williams# Remove wrapper files from the package, only used for cross-compiling
163*c9537f57SPatrick WilliamsPACKAGE_PREPROCESS_FUNCS += "gi_package_preprocess"
164*c9537f57SPatrick Williamsgi_package_preprocess() {
165*c9537f57SPatrick Williams	rm -f ${PKGD}${bindir}/g-ir-scanner-qemuwrapper
166*c9537f57SPatrick Williams	rm -f ${PKGD}${bindir}/g-ir-scanner-wrapper
167*c9537f57SPatrick Williams	rm -f ${PKGD}${bindir}/g-ir-compiler-wrapper
168*c9537f57SPatrick Williams	rm -f ${PKGD}${bindir}/g-ir-scanner-lddwrapper
169*c9537f57SPatrick Williams}
170*c9537f57SPatrick Williams
171*c9537f57SPatrick WilliamsSSTATE_SCAN_FILES += "g-ir-scanner-qemuwrapper g-ir-scanner-wrapper g-ir-compiler-wrapper g-ir-scanner-lddwrapper Gio-2.0.gir postinst-ldsoconf-${PN}"
172*c9537f57SPatrick Williams
173*c9537f57SPatrick WilliamsPACKAGES =+ "\
174*c9537f57SPatrick Williams    ${PN}-tools \
175*c9537f57SPatrick Williams"
176*c9537f57SPatrick Williams
177*c9537f57SPatrick WilliamsFILES:${PN}-tools = "\
178*c9537f57SPatrick Williams    ${bindir} \
179*c9537f57SPatrick Williams    ${libdir}/gobject-introspection/giscanner \
180*c9537f57SPatrick Williams"
181*c9537f57SPatrick Williams
182*c9537f57SPatrick Williams# .typelib files are needed at runtime and so they go to the main package
183*c9537f57SPatrick WilliamsFILES:${PN}:append = " ${libdir}/girepository-*/*.typelib"
184*c9537f57SPatrick Williams
185*c9537f57SPatrick Williams# .gir files go to dev package, as they're needed for developing (but not for running)
186*c9537f57SPatrick Williams# things that depends on introspection.
187*c9537f57SPatrick WilliamsFILES:${PN}-dev:append = " ${datadir}/gir-*/*.gir ${libdir}/gir-*/*.gir"
188*c9537f57SPatrick WilliamsFILES:${PN}-dev:append = " ${datadir}/gir-*/*.rnc"
189*c9537f57SPatrick Williams
190*c9537f57SPatrick Williams# These are used by gobject-based packages
191*c9537f57SPatrick Williams# to generate transient introspection binaries
192*c9537f57SPatrick WilliamsFILES:${PN}-dev:append = " ${datadir}/gobject-introspection-1.0/gdump.c \
193*c9537f57SPatrick Williams                           ${datadir}/gobject-introspection-1.0/Makefile.introspection"
194*c9537f57SPatrick Williams
195*c9537f57SPatrick Williams# These are used by dependent packages (e.g. pygobject) to build their
196*c9537f57SPatrick Williams# testsuites.
197*c9537f57SPatrick WilliamsFILES:${PN}-dev:append = " ${datadir}/gobject-introspection-1.0/tests/*.c \
198*c9537f57SPatrick Williams                           ${datadir}/gobject-introspection-1.0/tests/*.h"
199*c9537f57SPatrick Williams
200*c9537f57SPatrick WilliamsFILES:${PN}-dbg += "${libdir}/gobject-introspection/giscanner/.debug/"
201*c9537f57SPatrick WilliamsFILES:${PN}-staticdev += "${libdir}/gobject-introspection/giscanner/*.a"
202*c9537f57SPatrick Williams
203*c9537f57SPatrick Williams# glib-2.0 is required for libgirepository
204*c9537f57SPatrick WilliamsRDEPENDS:${PN} = "glib-2.0"
205*c9537f57SPatrick Williams
206*c9537f57SPatrick Williams# setuptools can be removed when upstream removes all uses of distutils
207*c9537f57SPatrick WilliamsRDEPENDS:${PN}-tools = "\
208*c9537f57SPatrick Williams    glib-2.0 \
209*c9537f57SPatrick Williams    python3-pickle \
210*c9537f57SPatrick Williams    python3-setuptools \
211*c9537f57SPatrick Williams    python3-xml \
212*c9537f57SPatrick Williams"
213*c9537f57SPatrick Williams
214*c9537f57SPatrick WilliamsBBCLASSEXTEND = "native"
215