[meta-oe][PATCH 2/3] libfprint: New recipe


Zoltan Boszormenyi
 

libfprint is the library used by fprintd.

Signed-off-by: Zoltán Böszörményi <zboszor@...>
---
...001-Optionally-use-native-generators.patch | 111 ++++++++++++++++++
.../0002-Make-building-tests-optional.patch | 47 ++++++++
.../libfprint/libfprint_1.94.5.bb | 45 +++++++
3 files changed, 203 insertions(+)
create mode 100644 meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
create mode 100644 meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
create mode 100644 meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb

diff --git a/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
new file mode 100644
index 000000000..779d78c28
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
@@ -0,0 +1,111 @@
+From 4f0f84448dbc46c18d2700ddb45acdee67687574 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:45:31 +0200
+Subject: [PATCH 1/2] Optionally use native generators
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+fprint-list-udev-hwdb and fprint-list-udev-rules are run
+during the build to generate autosuspend.hwdb and 70-*.rules,
+respectively.
+
+Since they are not marked as "native: true", a cross-compiled
+version is not possible.
+
+Since these binaries are linked with the libfprint_drivers target,
+marking them as native binaries would also need libfprint_drivers
+to be duplicated as a native version and possibly other library
+targets, too.
+
+Instead, make it the responsibility of the cross-compiler
+framework to build the native variant separately and allow
+the external binaries to be passed in.
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ libfprint/meson.build | 30 ++++++++++++++++++++----------
+ meson_options.txt | 8 ++++++++
+ 2 files changed, 28 insertions(+), 10 deletions(-)
+
+diff --git a/libfprint/meson.build b/libfprint/meson.build
+index d3c8b03..2a4de67 100644
+--- a/libfprint/meson.build
++++ b/libfprint/meson.build
+@@ -301,11 +301,16 @@ libfprint_private_dep = declare_dependency(
+ ]
+ )
+
+-udev_hwdb = executable('fprint-list-udev-hwdb',
+- 'fprint-list-udev-hwdb.c',
+- dependencies: libfprint_private_dep,
+- link_with: libfprint_drivers,
+- install: false)
++udev_hwdb_cmd = get_option('udev_hwdb_cmd')
++if udev_hwdb_cmd == ''
++ udev_hwdb = executable('fprint-list-udev-hwdb',
++ 'fprint-list-udev-hwdb.c',
++ dependencies: libfprint_private_dep,
++ link_with: libfprint_drivers,
++ install: false)
++else
++ udev_hwdb = find_program(udev_hwdb_cmd)
++endif
+
+ udev_hwdb_generator = custom_target('udev-hwdb',
+ output: 'autosuspend.hwdb',
+@@ -315,12 +320,17 @@ udev_hwdb_generator = custom_target('udev-hwdb',
+ install: false,
+ )
+
++udev_rules_cmd = get_option('udev_rules_cmd')
+ if install_udev_rules
+- udev_rules = executable('fprint-list-udev-rules',
+- 'fprint-list-udev-rules.c',
+- dependencies: libfprint_private_dep,
+- link_with: libfprint_drivers,
+- install: false)
++ if udev_rules_cmd == ''
++ udev_rules = executable('fprint-list-udev-rules',
++ 'fprint-list-udev-rules.c',
++ dependencies: libfprint_private_dep,
++ link_with: libfprint_drivers,
++ install: false)
++ else
++ udev_rules = find_program(udev_rules_cmd)
++ endif
+
+ custom_target('udev-rules',
+ output: '70-@0@.rules'.format(versioned_libname),
+diff --git a/meson_options.txt b/meson_options.txt
+index f9b801f..a6f0c4d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -14,6 +14,10 @@ option('udev_rules_dir',
+ description: 'Installation path for udev rules',
+ type: 'string',
+ value: 'auto')
++option('udev_rules_cmd',
++ description : 'Optional path for native build of fprint-list-udev-rules',
++ type : 'string',
++ value : '')
+ option('udev_hwdb',
+ description: 'Whether to create a udev hwdb for autosuspend (included in systemd v248 and later)',
+ type: 'feature',
+@@ -22,6 +26,10 @@ option('udev_hwdb_dir',
+ description: 'Installation path for udev hwdb',
+ type: 'string',
+ value: 'auto')
++option('udev_hwdb_cmd',
++ description : 'Optional path for native build of fprint-list-udev-hwdb',
++ type : 'string',
++ value : '')
+ option('gtk-examples',
+ description: 'Whether to build GTK+ example applications',
+ type: 'boolean',
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
new file mode 100644
index 000000000..c83ea95e1
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
@@ -0,0 +1,47 @@
+From 8e27d45a7747c9aaf8e619f2de3ad3eae9659da8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:57:35 +0200
+Subject: [PATCH 2/2] Make building tests optional
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ meson.build | 4 +++-
+ meson_options.txt | 4 ++++
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 1badb16..05edb8d 100644
+--- a/meson.build
++++ b/meson.build
+@@ -309,7 +309,9 @@ if get_option('gtk-examples')
+ endif
+
+ subdir('data')
+-subdir('tests')
++if get_option('tests')
++ subdir('tests')
++endif
+
+ pkgconfig = import('pkgconfig')
+ pkgconfig.generate(
+diff --git a/meson_options.txt b/meson_options.txt
+index a6f0c4d..175710d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -38,3 +38,7 @@ option('doc',
+ description: 'Whether to build the API documentation',
+ type: 'boolean',
+ value: true)
++option('tests',
++ description: 'Whether to build the tests',
++ type: 'boolean',
++ value: true)
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
new file mode 100644
index 000000000..b0133409a
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
@@ -0,0 +1,45 @@
+SUMMARY = "Library for fingerprint readers"
+DESCRIPTION = "libfprint is an open source software library \
+designed to make it easy for application developers to add \
+support for consumer fingerprint readers to their software."
+HOMEPAGE = "https://www.freedesktop.org/wiki/Software/fprint/libfprint/"
+
+DEPENDS = "glib-2.0 libgusb udev libgudev nspr nss pixman cairo"
+
+DEPENDS:append:class-target = " libfprint-native "
+
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
+
+#PR = "r1"
+
+SRCREV = "86961a9429d589c387da37351fd6b4ff3caf67ea"
+
+SRC_URI = " \
+ git://anongit.freedesktop.org/git/libfprint/libfprint.git;branch=master;protocol=https \
+ file://0001-Optionally-use-native-generators.patch \
+ file://0002-Make-building-tests-optional.patch \
+"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig useradd python3native gobject-introspection
+
+EXTRA_OEMESON:class-native = "-Ddoc=false -Dtests=false -Dintrospection=false"
+
+EXTRA_OEMESON:class-target = "-Ddoc=false -Dtests=false \
+ -Dudev_hwdb=enabled -Dudev_hwdb_dir=${sysconfdir}/udev/hwdb.d \
+ -Dudev_hwdb_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-hwdb \
+ -Dudev_rules_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-rules \
+"
+
+do_install:append:class-native () {
+ install -d ${D}${bindir}
+ install -m0755 ${B}/libfprint/fprint-list-udev-hwdb ${D}${bindir}/fprint-list-udev-hwdb
+ install -m0755 ${B}/libfprint/fprint-list-udev-rules ${D}${bindir}/fprint-list-udev-rules
+}
+
+BBCLASSEXTEND = "native"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM:${PN} = "fprint"
--
2.39.2


Alexander Kanavin
 

Meson is specifically configured in yocto to user qemu usermode as the
wrapper to run cross binaries, so can libfprint build configuration be
tweaked to use that? This would avoid all the nasty -native extensions
and modifications.

Alex

On Thu, 30 Mar 2023 at 15:43, Zoltan Boszormenyi <zboszor@...> wrote:

libfprint is the library used by fprintd.

Signed-off-by: Zoltán Böszörményi <zboszor@...>
---
...001-Optionally-use-native-generators.patch | 111 ++++++++++++++++++
.../0002-Make-building-tests-optional.patch | 47 ++++++++
.../libfprint/libfprint_1.94.5.bb | 45 +++++++
3 files changed, 203 insertions(+)
create mode 100644 meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
create mode 100644 meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
create mode 100644 meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb

diff --git a/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
new file mode 100644
index 000000000..779d78c28
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
@@ -0,0 +1,111 @@
+From 4f0f84448dbc46c18d2700ddb45acdee67687574 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:45:31 +0200
+Subject: [PATCH 1/2] Optionally use native generators
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+fprint-list-udev-hwdb and fprint-list-udev-rules are run
+during the build to generate autosuspend.hwdb and 70-*.rules,
+respectively.
+
+Since they are not marked as "native: true", a cross-compiled
+version is not possible.
+
+Since these binaries are linked with the libfprint_drivers target,
+marking them as native binaries would also need libfprint_drivers
+to be duplicated as a native version and possibly other library
+targets, too.
+
+Instead, make it the responsibility of the cross-compiler
+framework to build the native variant separately and allow
+the external binaries to be passed in.
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ libfprint/meson.build | 30 ++++++++++++++++++++----------
+ meson_options.txt | 8 ++++++++
+ 2 files changed, 28 insertions(+), 10 deletions(-)
+
+diff --git a/libfprint/meson.build b/libfprint/meson.build
+index d3c8b03..2a4de67 100644
+--- a/libfprint/meson.build
++++ b/libfprint/meson.build
+@@ -301,11 +301,16 @@ libfprint_private_dep = declare_dependency(
+ ]
+ )
+
+-udev_hwdb = executable('fprint-list-udev-hwdb',
+- 'fprint-list-udev-hwdb.c',
+- dependencies: libfprint_private_dep,
+- link_with: libfprint_drivers,
+- install: false)
++udev_hwdb_cmd = get_option('udev_hwdb_cmd')
++if udev_hwdb_cmd == ''
++ udev_hwdb = executable('fprint-list-udev-hwdb',
++ 'fprint-list-udev-hwdb.c',
++ dependencies: libfprint_private_dep,
++ link_with: libfprint_drivers,
++ install: false)
++else
++ udev_hwdb = find_program(udev_hwdb_cmd)
++endif
+
+ udev_hwdb_generator = custom_target('udev-hwdb',
+ output: 'autosuspend.hwdb',
+@@ -315,12 +320,17 @@ udev_hwdb_generator = custom_target('udev-hwdb',
+ install: false,
+ )
+
++udev_rules_cmd = get_option('udev_rules_cmd')
+ if install_udev_rules
+- udev_rules = executable('fprint-list-udev-rules',
+- 'fprint-list-udev-rules.c',
+- dependencies: libfprint_private_dep,
+- link_with: libfprint_drivers,
+- install: false)
++ if udev_rules_cmd == ''
++ udev_rules = executable('fprint-list-udev-rules',
++ 'fprint-list-udev-rules.c',
++ dependencies: libfprint_private_dep,
++ link_with: libfprint_drivers,
++ install: false)
++ else
++ udev_rules = find_program(udev_rules_cmd)
++ endif
+
+ custom_target('udev-rules',
+ output: '70-@0@.rules'.format(versioned_libname),
+diff --git a/meson_options.txt b/meson_options.txt
+index f9b801f..a6f0c4d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -14,6 +14,10 @@ option('udev_rules_dir',
+ description: 'Installation path for udev rules',
+ type: 'string',
+ value: 'auto')
++option('udev_rules_cmd',
++ description : 'Optional path for native build of fprint-list-udev-rules',
++ type : 'string',
++ value : '')
+ option('udev_hwdb',
+ description: 'Whether to create a udev hwdb for autosuspend (included in systemd v248 and later)',
+ type: 'feature',
+@@ -22,6 +26,10 @@ option('udev_hwdb_dir',
+ description: 'Installation path for udev hwdb',
+ type: 'string',
+ value: 'auto')
++option('udev_hwdb_cmd',
++ description : 'Optional path for native build of fprint-list-udev-hwdb',
++ type : 'string',
++ value : '')
+ option('gtk-examples',
+ description: 'Whether to build GTK+ example applications',
+ type: 'boolean',
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
new file mode 100644
index 000000000..c83ea95e1
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
@@ -0,0 +1,47 @@
+From 8e27d45a7747c9aaf8e619f2de3ad3eae9659da8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:57:35 +0200
+Subject: [PATCH 2/2] Make building tests optional
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ meson.build | 4 +++-
+ meson_options.txt | 4 ++++
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 1badb16..05edb8d 100644
+--- a/meson.build
++++ b/meson.build
+@@ -309,7 +309,9 @@ if get_option('gtk-examples')
+ endif
+
+ subdir('data')
+-subdir('tests')
++if get_option('tests')
++ subdir('tests')
++endif
+
+ pkgconfig = import('pkgconfig')
+ pkgconfig.generate(
+diff --git a/meson_options.txt b/meson_options.txt
+index a6f0c4d..175710d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -38,3 +38,7 @@ option('doc',
+ description: 'Whether to build the API documentation',
+ type: 'boolean',
+ value: true)
++option('tests',
++ description: 'Whether to build the tests',
++ type: 'boolean',
++ value: true)
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
new file mode 100644
index 000000000..b0133409a
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
@@ -0,0 +1,45 @@
+SUMMARY = "Library for fingerprint readers"
+DESCRIPTION = "libfprint is an open source software library \
+designed to make it easy for application developers to add \
+support for consumer fingerprint readers to their software."
+HOMEPAGE = "https://www.freedesktop.org/wiki/Software/fprint/libfprint/"
+
+DEPENDS = "glib-2.0 libgusb udev libgudev nspr nss pixman cairo"
+
+DEPENDS:append:class-target = " libfprint-native "
+
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
+
+#PR = "r1"
+
+SRCREV = "86961a9429d589c387da37351fd6b4ff3caf67ea"
+
+SRC_URI = " \
+ git://anongit.freedesktop.org/git/libfprint/libfprint.git;branch=master;protocol=https \
+ file://0001-Optionally-use-native-generators.patch \
+ file://0002-Make-building-tests-optional.patch \
+"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig useradd python3native gobject-introspection
+
+EXTRA_OEMESON:class-native = "-Ddoc=false -Dtests=false -Dintrospection=false"
+
+EXTRA_OEMESON:class-target = "-Ddoc=false -Dtests=false \
+ -Dudev_hwdb=enabled -Dudev_hwdb_dir=${sysconfdir}/udev/hwdb.d \
+ -Dudev_hwdb_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-hwdb \
+ -Dudev_rules_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-rules \
+"
+
+do_install:append:class-native () {
+ install -d ${D}${bindir}
+ install -m0755 ${B}/libfprint/fprint-list-udev-hwdb ${D}${bindir}/fprint-list-udev-hwdb
+ install -m0755 ${B}/libfprint/fprint-list-udev-rules ${D}${bindir}/fprint-list-udev-rules
+}
+
+BBCLASSEXTEND = "native"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM:${PN} = "fprint"
--
2.39.2




Zoltan Boszormenyi
 

2023. 03. 30. 15:50 keltezéssel, Alexander Kanavin írta:
Meson is specifically configured in yocto to user qemu usermode as the
wrapper to run cross binaries, so can libfprint build configuration be
tweaked to use that? This would avoid all the nasty -native extensions
and modifications.
Wasn't the mariadb change I made about 2 years ago
to use cmake's CROSSCOMPILING_EMULATOR that saved
building the whole mariadb-native just for one small binary
reverted recently because qemu doesn't emulate certain
parts of the instruction set and caused crashes?

The same principle applies to meson running binaries via qemu, too.


Alex

On Thu, 30 Mar 2023 at 15:43, Zoltan Boszormenyi <zboszor@...> wrote:
libfprint is the library used by fprintd.

Signed-off-by: Zoltán Böszörményi <zboszor@...>
---
...001-Optionally-use-native-generators.patch | 111 ++++++++++++++++++
.../0002-Make-building-tests-optional.patch | 47 ++++++++
.../libfprint/libfprint_1.94.5.bb | 45 +++++++
3 files changed, 203 insertions(+)
create mode 100644 meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
create mode 100644 meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
create mode 100644 meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb

diff --git a/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
new file mode 100644
index 000000000..779d78c28
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
@@ -0,0 +1,111 @@
+From 4f0f84448dbc46c18d2700ddb45acdee67687574 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:45:31 +0200
+Subject: [PATCH 1/2] Optionally use native generators
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+fprint-list-udev-hwdb and fprint-list-udev-rules are run
+during the build to generate autosuspend.hwdb and 70-*.rules,
+respectively.
+
+Since they are not marked as "native: true", a cross-compiled
+version is not possible.
+
+Since these binaries are linked with the libfprint_drivers target,
+marking them as native binaries would also need libfprint_drivers
+to be duplicated as a native version and possibly other library
+targets, too.
+
+Instead, make it the responsibility of the cross-compiler
+framework to build the native variant separately and allow
+the external binaries to be passed in.
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ libfprint/meson.build | 30 ++++++++++++++++++++----------
+ meson_options.txt | 8 ++++++++
+ 2 files changed, 28 insertions(+), 10 deletions(-)
+
+diff --git a/libfprint/meson.build b/libfprint/meson.build
+index d3c8b03..2a4de67 100644
+--- a/libfprint/meson.build
++++ b/libfprint/meson.build
+@@ -301,11 +301,16 @@ libfprint_private_dep = declare_dependency(
+ ]
+ )
+
+-udev_hwdb = executable('fprint-list-udev-hwdb',
+- 'fprint-list-udev-hwdb.c',
+- dependencies: libfprint_private_dep,
+- link_with: libfprint_drivers,
+- install: false)
++udev_hwdb_cmd = get_option('udev_hwdb_cmd')
++if udev_hwdb_cmd == ''
++ udev_hwdb = executable('fprint-list-udev-hwdb',
++ 'fprint-list-udev-hwdb.c',
++ dependencies: libfprint_private_dep,
++ link_with: libfprint_drivers,
++ install: false)
++else
++ udev_hwdb = find_program(udev_hwdb_cmd)
++endif
+
+ udev_hwdb_generator = custom_target('udev-hwdb',
+ output: 'autosuspend.hwdb',
+@@ -315,12 +320,17 @@ udev_hwdb_generator = custom_target('udev-hwdb',
+ install: false,
+ )
+
++udev_rules_cmd = get_option('udev_rules_cmd')
+ if install_udev_rules
+- udev_rules = executable('fprint-list-udev-rules',
+- 'fprint-list-udev-rules.c',
+- dependencies: libfprint_private_dep,
+- link_with: libfprint_drivers,
+- install: false)
++ if udev_rules_cmd == ''
++ udev_rules = executable('fprint-list-udev-rules',
++ 'fprint-list-udev-rules.c',
++ dependencies: libfprint_private_dep,
++ link_with: libfprint_drivers,
++ install: false)
++ else
++ udev_rules = find_program(udev_rules_cmd)
++ endif
+
+ custom_target('udev-rules',
+ output: '70-@0@.rules'.format(versioned_libname),
+diff --git a/meson_options.txt b/meson_options.txt
+index f9b801f..a6f0c4d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -14,6 +14,10 @@ option('udev_rules_dir',
+ description: 'Installation path for udev rules',
+ type: 'string',
+ value: 'auto')
++option('udev_rules_cmd',
++ description : 'Optional path for native build of fprint-list-udev-rules',
++ type : 'string',
++ value : '')
+ option('udev_hwdb',
+ description: 'Whether to create a udev hwdb for autosuspend (included in systemd v248 and later)',
+ type: 'feature',
+@@ -22,6 +26,10 @@ option('udev_hwdb_dir',
+ description: 'Installation path for udev hwdb',
+ type: 'string',
+ value: 'auto')
++option('udev_hwdb_cmd',
++ description : 'Optional path for native build of fprint-list-udev-hwdb',
++ type : 'string',
++ value : '')
+ option('gtk-examples',
+ description: 'Whether to build GTK+ example applications',
+ type: 'boolean',
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
new file mode 100644
index 000000000..c83ea95e1
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
@@ -0,0 +1,47 @@
+From 8e27d45a7747c9aaf8e619f2de3ad3eae9659da8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:57:35 +0200
+Subject: [PATCH 2/2] Make building tests optional
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ meson.build | 4 +++-
+ meson_options.txt | 4 ++++
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 1badb16..05edb8d 100644
+--- a/meson.build
++++ b/meson.build
+@@ -309,7 +309,9 @@ if get_option('gtk-examples')
+ endif
+
+ subdir('data')
+-subdir('tests')
++if get_option('tests')
++ subdir('tests')
++endif
+
+ pkgconfig = import('pkgconfig')
+ pkgconfig.generate(
+diff --git a/meson_options.txt b/meson_options.txt
+index a6f0c4d..175710d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -38,3 +38,7 @@ option('doc',
+ description: 'Whether to build the API documentation',
+ type: 'boolean',
+ value: true)
++option('tests',
++ description: 'Whether to build the tests',
++ type: 'boolean',
++ value: true)
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
new file mode 100644
index 000000000..b0133409a
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
@@ -0,0 +1,45 @@
+SUMMARY = "Library for fingerprint readers"
+DESCRIPTION = "libfprint is an open source software library \
+designed to make it easy for application developers to add \
+support for consumer fingerprint readers to their software."
+HOMEPAGE = "https://www.freedesktop.org/wiki/Software/fprint/libfprint/"
+
+DEPENDS = "glib-2.0 libgusb udev libgudev nspr nss pixman cairo"
+
+DEPENDS:append:class-target = " libfprint-native "
+
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
+
+#PR = "r1"
+
+SRCREV = "86961a9429d589c387da37351fd6b4ff3caf67ea"
+
+SRC_URI = " \
+ git://anongit.freedesktop.org/git/libfprint/libfprint.git;branch=master;protocol=https \
+ file://0001-Optionally-use-native-generators.patch \
+ file://0002-Make-building-tests-optional.patch \
+"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig useradd python3native gobject-introspection
+
+EXTRA_OEMESON:class-native = "-Ddoc=false -Dtests=false -Dintrospection=false"
+
+EXTRA_OEMESON:class-target = "-Ddoc=false -Dtests=false \
+ -Dudev_hwdb=enabled -Dudev_hwdb_dir=${sysconfdir}/udev/hwdb.d \
+ -Dudev_hwdb_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-hwdb \
+ -Dudev_rules_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-rules \
+"
+
+do_install:append:class-native () {
+ install -d ${D}${bindir}
+ install -m0755 ${B}/libfprint/fprint-list-udev-hwdb ${D}${bindir}/fprint-list-udev-hwdb
+ install -m0755 ${B}/libfprint/fprint-list-udev-rules ${D}${bindir}/fprint-list-udev-rules
+}
+
+BBCLASSEXTEND = "native"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM:${PN} = "fprint"
--
2.39.2



Zoltan Boszormenyi
 

2023. 03. 30. 15:50 keltezéssel, Alexander Kanavin írta:
Meson is specifically configured in yocto to user qemu usermode as the
wrapper to run cross binaries, so can libfprint build configuration be
tweaked to use that? This would avoid all the nasty -native extensions
and modifications.
How would I do that? This is the error if I not use the
externally built executables:

| [122/124] /home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/bin/meson.real --internal exe --capture libfprint/70-libfprint-2.rules --
/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/build/libfprint/fprint-list-udev-rules
| FAILED: libfprint/70-libfprint-2.rules
| /home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/bin/meson.real --internal exe --capture libfprint/70-libfprint-2.rules --
/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/build/libfprint/fprint-list-udev-rules
| Traceback (most recent call last):
|   File "/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/bin/meson.real", line 8, in <module>
|     sys.exit(main())
|              ^^^^^^
|   File "/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/mesonmain.py", line 287, in main
|     return run(sys.argv[1:], launcher)
|            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|   File "/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/mesonmain.py", line 275, in run
|     return run_script_command(args[1], args[2:])
|            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|   File "/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/mesonmain.py", line 223, in run_script_command
|     return module.run(script_args)
|            ^^^^^^^^^^^^^^^^^^^^^^^
|   File "/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/scripts/meson_exe.py", line 121, in run
|     return run_exe(exe)
|            ^^^^^^^^^^^^
|   File "/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/scripts/meson_exe.py", line 66, in run_exe
|     p = subprocess.Popen(cmd_args, env=child_env, cwd=exe.workdir,
|         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|   File "/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/subprocess.py", line 1024, in __init__
|     self._execute_child(args, executable, preexec_fn, close_fds,
|   File "/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/subprocess.py", line 1789, in _execute_child
|     self._posix_spawn(args, executable, env, restore_signals,
|   File "/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/subprocess.py", line 1733, in _posix_spawn
|     self.pid = os.posix_spawn(executable, args, env, **kwargs)
|                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| FileNotFoundError: [Errno 2] No such file or directory: '/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/build/libfprint/fprint-list-udev-rules'

The executable is built, it is there, and it's using the target system's
runtime linker path.

Obviously, meson doesn't run it through the exe_wrapper.


Alex

On Thu, 30 Mar 2023 at 15:43, Zoltan Boszormenyi <zboszor@...> wrote:
libfprint is the library used by fprintd.

Signed-off-by: Zoltán Böszörményi <zboszor@...>
---
...001-Optionally-use-native-generators.patch | 111 ++++++++++++++++++
.../0002-Make-building-tests-optional.patch | 47 ++++++++
.../libfprint/libfprint_1.94.5.bb | 45 +++++++
3 files changed, 203 insertions(+)
create mode 100644 meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
create mode 100644 meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
create mode 100644 meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb

diff --git a/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
new file mode 100644
index 000000000..779d78c28
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
@@ -0,0 +1,111 @@
+From 4f0f84448dbc46c18d2700ddb45acdee67687574 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:45:31 +0200
+Subject: [PATCH 1/2] Optionally use native generators
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+fprint-list-udev-hwdb and fprint-list-udev-rules are run
+during the build to generate autosuspend.hwdb and 70-*.rules,
+respectively.
+
+Since they are not marked as "native: true", a cross-compiled
+version is not possible.
+
+Since these binaries are linked with the libfprint_drivers target,
+marking them as native binaries would also need libfprint_drivers
+to be duplicated as a native version and possibly other library
+targets, too.
+
+Instead, make it the responsibility of the cross-compiler
+framework to build the native variant separately and allow
+the external binaries to be passed in.
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ libfprint/meson.build | 30 ++++++++++++++++++++----------
+ meson_options.txt | 8 ++++++++
+ 2 files changed, 28 insertions(+), 10 deletions(-)
+
+diff --git a/libfprint/meson.build b/libfprint/meson.build
+index d3c8b03..2a4de67 100644
+--- a/libfprint/meson.build
++++ b/libfprint/meson.build
+@@ -301,11 +301,16 @@ libfprint_private_dep = declare_dependency(
+ ]
+ )
+
+-udev_hwdb = executable('fprint-list-udev-hwdb',
+- 'fprint-list-udev-hwdb.c',
+- dependencies: libfprint_private_dep,
+- link_with: libfprint_drivers,
+- install: false)
++udev_hwdb_cmd = get_option('udev_hwdb_cmd')
++if udev_hwdb_cmd == ''
++ udev_hwdb = executable('fprint-list-udev-hwdb',
++ 'fprint-list-udev-hwdb.c',
++ dependencies: libfprint_private_dep,
++ link_with: libfprint_drivers,
++ install: false)
++else
++ udev_hwdb = find_program(udev_hwdb_cmd)
++endif
+
+ udev_hwdb_generator = custom_target('udev-hwdb',
+ output: 'autosuspend.hwdb',
+@@ -315,12 +320,17 @@ udev_hwdb_generator = custom_target('udev-hwdb',
+ install: false,
+ )
+
++udev_rules_cmd = get_option('udev_rules_cmd')
+ if install_udev_rules
+- udev_rules = executable('fprint-list-udev-rules',
+- 'fprint-list-udev-rules.c',
+- dependencies: libfprint_private_dep,
+- link_with: libfprint_drivers,
+- install: false)
++ if udev_rules_cmd == ''
++ udev_rules = executable('fprint-list-udev-rules',
++ 'fprint-list-udev-rules.c',
++ dependencies: libfprint_private_dep,
++ link_with: libfprint_drivers,
++ install: false)
++ else
++ udev_rules = find_program(udev_rules_cmd)
++ endif
+
+ custom_target('udev-rules',
+ output: '70-@0@.rules'.format(versioned_libname),
+diff --git a/meson_options.txt b/meson_options.txt
+index f9b801f..a6f0c4d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -14,6 +14,10 @@ option('udev_rules_dir',
+ description: 'Installation path for udev rules',
+ type: 'string',
+ value: 'auto')
++option('udev_rules_cmd',
++ description : 'Optional path for native build of fprint-list-udev-rules',
++ type : 'string',
++ value : '')
+ option('udev_hwdb',
+ description: 'Whether to create a udev hwdb for autosuspend (included in systemd v248 and later)',
+ type: 'feature',
+@@ -22,6 +26,10 @@ option('udev_hwdb_dir',
+ description: 'Installation path for udev hwdb',
+ type: 'string',
+ value: 'auto')
++option('udev_hwdb_cmd',
++ description : 'Optional path for native build of fprint-list-udev-hwdb',
++ type : 'string',
++ value : '')
+ option('gtk-examples',
+ description: 'Whether to build GTK+ example applications',
+ type: 'boolean',
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
new file mode 100644
index 000000000..c83ea95e1
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
@@ -0,0 +1,47 @@
+From 8e27d45a7747c9aaf8e619f2de3ad3eae9659da8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:57:35 +0200
+Subject: [PATCH 2/2] Make building tests optional
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ meson.build | 4 +++-
+ meson_options.txt | 4 ++++
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 1badb16..05edb8d 100644
+--- a/meson.build
++++ b/meson.build
+@@ -309,7 +309,9 @@ if get_option('gtk-examples')
+ endif
+
+ subdir('data')
+-subdir('tests')
++if get_option('tests')
++ subdir('tests')
++endif
+
+ pkgconfig = import('pkgconfig')
+ pkgconfig.generate(
+diff --git a/meson_options.txt b/meson_options.txt
+index a6f0c4d..175710d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -38,3 +38,7 @@ option('doc',
+ description: 'Whether to build the API documentation',
+ type: 'boolean',
+ value: true)
++option('tests',
++ description: 'Whether to build the tests',
++ type: 'boolean',
++ value: true)
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
new file mode 100644
index 000000000..b0133409a
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
@@ -0,0 +1,45 @@
+SUMMARY = "Library for fingerprint readers"
+DESCRIPTION = "libfprint is an open source software library \
+designed to make it easy for application developers to add \
+support for consumer fingerprint readers to their software."
+HOMEPAGE = "https://www.freedesktop.org/wiki/Software/fprint/libfprint/"
+
+DEPENDS = "glib-2.0 libgusb udev libgudev nspr nss pixman cairo"
+
+DEPENDS:append:class-target = " libfprint-native "
+
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
+
+#PR = "r1"
+
+SRCREV = "86961a9429d589c387da37351fd6b4ff3caf67ea"
+
+SRC_URI = " \
+ git://anongit.freedesktop.org/git/libfprint/libfprint.git;branch=master;protocol=https \
+ file://0001-Optionally-use-native-generators.patch \
+ file://0002-Make-building-tests-optional.patch \
+"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig useradd python3native gobject-introspection
+
+EXTRA_OEMESON:class-native = "-Ddoc=false -Dtests=false -Dintrospection=false"
+
+EXTRA_OEMESON:class-target = "-Ddoc=false -Dtests=false \
+ -Dudev_hwdb=enabled -Dudev_hwdb_dir=${sysconfdir}/udev/hwdb.d \
+ -Dudev_hwdb_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-hwdb \
+ -Dudev_rules_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-rules \
+"
+
+do_install:append:class-native () {
+ install -d ${D}${bindir}
+ install -m0755 ${B}/libfprint/fprint-list-udev-hwdb ${D}${bindir}/fprint-list-udev-hwdb
+ install -m0755 ${B}/libfprint/fprint-list-udev-rules ${D}${bindir}/fprint-list-udev-rules
+}
+
+BBCLASSEXTEND = "native"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM:${PN} = "fprint"
--
2.39.2



Alexander Kanavin
 

How do libfprint's meson rules for producing the executable and then
running it look like?

Any meson based recipe has a similar entry in ${WORKDIR}/meson.cross:

exe_wrapper = '/srv/storage/alex/yocto/build-64-alt/tmp/work/core2-64-poky-linux/glib-2.0/1_2.74.6-r0/meson-qemuwrapper'

And the use of the exe_wrapper is documented here:
https://mesonbuild.com/Cross-compilation.html

Alex

On Thu, 30 Mar 2023 at 17:24, Böszörményi Zoltán <zboszor@...> wrote:

2023. 03. 30. 15:50 keltezéssel, Alexander Kanavin írta:
Meson is specifically configured in yocto to user qemu usermode as the
wrapper to run cross binaries, so can libfprint build configuration be
tweaked to use that? This would avoid all the nasty -native extensions
and modifications.
How would I do that? This is the error if I not use the
externally built executables:

| [122/124]
/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/bin/meson.real
--internal exe --capture libfprint/70-libfprint-2.rules --
/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/build/libfprint/fprint-list-udev-rules
| FAILED: libfprint/70-libfprint-2.rules
|
/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/bin/meson.real
--internal exe --capture libfprint/70-libfprint-2.rules --
/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/build/libfprint/fprint-list-udev-rules
| Traceback (most recent call last):
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/bin/meson.real",
line 8, in <module>
| sys.exit(main())
| ^^^^^^
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/mesonmain.py",
line 287, in main
| return run(sys.argv[1:], launcher)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/mesonmain.py",
line 275, in run
| return run_script_command(args[1], args[2:])
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/mesonmain.py",
line 223, in run_script_command
| return module.run(script_args)
| ^^^^^^^^^^^^^^^^^^^^^^^
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/scripts/meson_exe.py",
line 121, in run
| return run_exe(exe)
| ^^^^^^^^^^^^
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/scripts/meson_exe.py",
line 66, in run_exe
| p = subprocess.Popen(cmd_args, env=child_env, cwd=exe.workdir,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/subprocess.py",
line 1024, in __init__
| self._execute_child(args, executable, preexec_fn, close_fds,
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/subprocess.py",
line 1789, in _execute_child
| self._posix_spawn(args, executable, env, restore_signals,
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/subprocess.py",
line 1733, in _posix_spawn
| self.pid = os.posix_spawn(executable, args, env, **kwargs)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| FileNotFoundError: [Errno 2] No such file or directory:
'/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/build/libfprint/fprint-list-udev-rules'

The executable is built, it is there, and it's using the target system's
runtime linker path.

Obviously, meson doesn't run it through the exe_wrapper.


Alex

On Thu, 30 Mar 2023 at 15:43, Zoltan Boszormenyi <zboszor@...> wrote:
libfprint is the library used by fprintd.

Signed-off-by: Zoltán Böszörményi <zboszor@...>
---
...001-Optionally-use-native-generators.patch | 111 ++++++++++++++++++
.../0002-Make-building-tests-optional.patch | 47 ++++++++
.../libfprint/libfprint_1.94.5.bb | 45 +++++++
3 files changed, 203 insertions(+)
create mode 100644 meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
create mode 100644 meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
create mode 100644 meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb

diff --git a/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
new file mode 100644
index 000000000..779d78c28
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
@@ -0,0 +1,111 @@
+From 4f0f84448dbc46c18d2700ddb45acdee67687574 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:45:31 +0200
+Subject: [PATCH 1/2] Optionally use native generators
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+fprint-list-udev-hwdb and fprint-list-udev-rules are run
+during the build to generate autosuspend.hwdb and 70-*.rules,
+respectively.
+
+Since they are not marked as "native: true", a cross-compiled
+version is not possible.
+
+Since these binaries are linked with the libfprint_drivers target,
+marking them as native binaries would also need libfprint_drivers
+to be duplicated as a native version and possibly other library
+targets, too.
+
+Instead, make it the responsibility of the cross-compiler
+framework to build the native variant separately and allow
+the external binaries to be passed in.
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ libfprint/meson.build | 30 ++++++++++++++++++++----------
+ meson_options.txt | 8 ++++++++
+ 2 files changed, 28 insertions(+), 10 deletions(-)
+
+diff --git a/libfprint/meson.build b/libfprint/meson.build
+index d3c8b03..2a4de67 100644
+--- a/libfprint/meson.build
++++ b/libfprint/meson.build
+@@ -301,11 +301,16 @@ libfprint_private_dep = declare_dependency(
+ ]
+ )
+
+-udev_hwdb = executable('fprint-list-udev-hwdb',
+- 'fprint-list-udev-hwdb.c',
+- dependencies: libfprint_private_dep,
+- link_with: libfprint_drivers,
+- install: false)
++udev_hwdb_cmd = get_option('udev_hwdb_cmd')
++if udev_hwdb_cmd == ''
++ udev_hwdb = executable('fprint-list-udev-hwdb',
++ 'fprint-list-udev-hwdb.c',
++ dependencies: libfprint_private_dep,
++ link_with: libfprint_drivers,
++ install: false)
++else
++ udev_hwdb = find_program(udev_hwdb_cmd)
++endif
+
+ udev_hwdb_generator = custom_target('udev-hwdb',
+ output: 'autosuspend.hwdb',
+@@ -315,12 +320,17 @@ udev_hwdb_generator = custom_target('udev-hwdb',
+ install: false,
+ )
+
++udev_rules_cmd = get_option('udev_rules_cmd')
+ if install_udev_rules
+- udev_rules = executable('fprint-list-udev-rules',
+- 'fprint-list-udev-rules.c',
+- dependencies: libfprint_private_dep,
+- link_with: libfprint_drivers,
+- install: false)
++ if udev_rules_cmd == ''
++ udev_rules = executable('fprint-list-udev-rules',
++ 'fprint-list-udev-rules.c',
++ dependencies: libfprint_private_dep,
++ link_with: libfprint_drivers,
++ install: false)
++ else
++ udev_rules = find_program(udev_rules_cmd)
++ endif
+
+ custom_target('udev-rules',
+ output: '70-@0@.rules'.format(versioned_libname),
+diff --git a/meson_options.txt b/meson_options.txt
+index f9b801f..a6f0c4d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -14,6 +14,10 @@ option('udev_rules_dir',
+ description: 'Installation path for udev rules',
+ type: 'string',
+ value: 'auto')
++option('udev_rules_cmd',
++ description : 'Optional path for native build of fprint-list-udev-rules',
++ type : 'string',
++ value : '')
+ option('udev_hwdb',
+ description: 'Whether to create a udev hwdb for autosuspend (included in systemd v248 and later)',
+ type: 'feature',
+@@ -22,6 +26,10 @@ option('udev_hwdb_dir',
+ description: 'Installation path for udev hwdb',
+ type: 'string',
+ value: 'auto')
++option('udev_hwdb_cmd',
++ description : 'Optional path for native build of fprint-list-udev-hwdb',
++ type : 'string',
++ value : '')
+ option('gtk-examples',
+ description: 'Whether to build GTK+ example applications',
+ type: 'boolean',
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
new file mode 100644
index 000000000..c83ea95e1
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
@@ -0,0 +1,47 @@
+From 8e27d45a7747c9aaf8e619f2de3ad3eae9659da8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:57:35 +0200
+Subject: [PATCH 2/2] Make building tests optional
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ meson.build | 4 +++-
+ meson_options.txt | 4 ++++
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 1badb16..05edb8d 100644
+--- a/meson.build
++++ b/meson.build
+@@ -309,7 +309,9 @@ if get_option('gtk-examples')
+ endif
+
+ subdir('data')
+-subdir('tests')
++if get_option('tests')
++ subdir('tests')
++endif
+
+ pkgconfig = import('pkgconfig')
+ pkgconfig.generate(
+diff --git a/meson_options.txt b/meson_options.txt
+index a6f0c4d..175710d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -38,3 +38,7 @@ option('doc',
+ description: 'Whether to build the API documentation',
+ type: 'boolean',
+ value: true)
++option('tests',
++ description: 'Whether to build the tests',
++ type: 'boolean',
++ value: true)
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
new file mode 100644
index 000000000..b0133409a
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
@@ -0,0 +1,45 @@
+SUMMARY = "Library for fingerprint readers"
+DESCRIPTION = "libfprint is an open source software library \
+designed to make it easy for application developers to add \
+support for consumer fingerprint readers to their software."
+HOMEPAGE = "https://www.freedesktop.org/wiki/Software/fprint/libfprint/"
+
+DEPENDS = "glib-2.0 libgusb udev libgudev nspr nss pixman cairo"
+
+DEPENDS:append:class-target = " libfprint-native "
+
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
+
+#PR = "r1"
+
+SRCREV = "86961a9429d589c387da37351fd6b4ff3caf67ea"
+
+SRC_URI = " \
+ git://anongit.freedesktop.org/git/libfprint/libfprint.git;branch=master;protocol=https \
+ file://0001-Optionally-use-native-generators.patch \
+ file://0002-Make-building-tests-optional.patch \
+"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig useradd python3native gobject-introspection
+
+EXTRA_OEMESON:class-native = "-Ddoc=false -Dtests=false -Dintrospection=false"
+
+EXTRA_OEMESON:class-target = "-Ddoc=false -Dtests=false \
+ -Dudev_hwdb=enabled -Dudev_hwdb_dir=${sysconfdir}/udev/hwdb.d \
+ -Dudev_hwdb_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-hwdb \
+ -Dudev_rules_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-rules \
+"
+
+do_install:append:class-native () {
+ install -d ${D}${bindir}
+ install -m0755 ${B}/libfprint/fprint-list-udev-hwdb ${D}${bindir}/fprint-list-udev-hwdb
+ install -m0755 ${B}/libfprint/fprint-list-udev-rules ${D}${bindir}/fprint-list-udev-rules
+}
+
+BBCLASSEXTEND = "native"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM:${PN} = "fprint"
--
2.39.2




Zoltan Boszormenyi
 

2023. 03. 30. 17:24 keltezéssel, Zoltan Boszormenyi via lists.openembedded.org írta:
2023. 03. 30. 15:50 keltezéssel, Alexander Kanavin írta:
Meson is specifically configured in yocto to user qemu usermode as the
wrapper to run cross binaries, so can libfprint build configuration be
tweaked to use that? This would avoid all the nasty -native extensions
and modifications.
How would I do that? This is the error if I not use the
externally built executables:

| [122/124] /home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/bin/meson.real --internal exe --capture libfprint/70-libfprint-2.rules --
/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/build/libfprint/fprint-list-udev-rules
| FAILED: libfprint/70-libfprint-2.rules
| /home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/bin/meson.real --internal exe --capture libfprint/70-libfprint-2.rules --
/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/build/libfprint/fprint-list-udev-rules
| Traceback (most recent call last):
|   File "/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/bin/meson.real", line 8, in <module>
|     sys.exit(main())
|              ^^^^^^
|   File "/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/mesonmain.py", line 287, in main
|     return run(sys.argv[1:], launcher)
|            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|   File "/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/mesonmain.py", line 275, in run
|     return run_script_command(args[1], args[2:])
|            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|   File "/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/mesonmain.py", line 223, in run_script_command
|     return module.run(script_args)
|            ^^^^^^^^^^^^^^^^^^^^^^^
|   File "/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/scripts/meson_exe.py", line 121, in run
|     return run_exe(exe)
|            ^^^^^^^^^^^^
|   File "/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/scripts/meson_exe.py", line 66, in run_exe
|     p = subprocess.Popen(cmd_args, env=child_env, cwd=exe.workdir,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|   File "/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/subprocess.py", line 1024, in __init__
|     self._execute_child(args, executable, preexec_fn, close_fds,
|   File "/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/subprocess.py", line 1789, in _execute_child
|     self._posix_spawn(args, executable, env, restore_signals,
|   File "/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/subprocess.py", line 1733, in _posix_spawn
|     self.pid = os.posix_spawn(executable, args, env, **kwargs)
|                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| FileNotFoundError: [Errno 2] No such file or directory: '/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/build/libfprint/fprint-list-udev-rules'

The executable is built, it is there, and it's using the target system's
runtime linker path.

Obviously, meson doesn't run it through the exe_wrapper.
It is possible that meson doesn't support running executables
via exe_wrapper whose output is captured in a file?

Maybe rewriting the generators to write their output directly
instead of on stdout will make libfprint more cross compiler
friendly.



Alex

On Thu, 30 Mar 2023 at 15:43, Zoltan Boszormenyi <zboszor@...> wrote:
libfprint is the library used by fprintd.

Signed-off-by: Zoltán Böszörményi <zboszor@...>
---
  ...001-Optionally-use-native-generators.patch | 111 ++++++++++++++++++
  .../0002-Make-building-tests-optional.patch   |  47 ++++++++
  .../libfprint/libfprint_1.94.5.bb             |  45 +++++++
  3 files changed, 203 insertions(+)
  create mode 100644 meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
  create mode 100644 meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
  create mode 100644 meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb

diff --git a/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
new file mode 100644
index 000000000..779d78c28
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
@@ -0,0 +1,111 @@
+From 4f0f84448dbc46c18d2700ddb45acdee67687574 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:45:31 +0200
+Subject: [PATCH 1/2] Optionally use native generators
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+fprint-list-udev-hwdb and fprint-list-udev-rules are run
+during the build to generate autosuspend.hwdb and 70-*.rules,
+respectively.
+
+Since they are not marked as "native: true", a cross-compiled
+version is not possible.
+
+Since these binaries are linked with the libfprint_drivers target,
+marking them as native binaries would also need libfprint_drivers
+to be duplicated as a native version and possibly other library
+targets, too.
+
+Instead, make it the responsibility of the cross-compiler
+framework to build the native variant separately and allow
+the external binaries to be passed in.
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ libfprint/meson.build | 30 ++++++++++++++++++++----------
+ meson_options.txt     |  8 ++++++++
+ 2 files changed, 28 insertions(+), 10 deletions(-)
+
+diff --git a/libfprint/meson.build b/libfprint/meson.build
+index d3c8b03..2a4de67 100644
+--- a/libfprint/meson.build
++++ b/libfprint/meson.build
+@@ -301,11 +301,16 @@ libfprint_private_dep = declare_dependency(
+     ]
+ )
+
+-udev_hwdb = executable('fprint-list-udev-hwdb',
+-    'fprint-list-udev-hwdb.c',
+-    dependencies: libfprint_private_dep,
+-    link_with: libfprint_drivers,
+-    install: false)
++udev_hwdb_cmd = get_option('udev_hwdb_cmd')
++if udev_hwdb_cmd == ''
++    udev_hwdb = executable('fprint-list-udev-hwdb',
++        'fprint-list-udev-hwdb.c',
++        dependencies: libfprint_private_dep,
++        link_with: libfprint_drivers,
++        install: false)
++else
++    udev_hwdb = find_program(udev_hwdb_cmd)
++endif
+
+ udev_hwdb_generator = custom_target('udev-hwdb',
+     output: 'autosuspend.hwdb',
+@@ -315,12 +320,17 @@ udev_hwdb_generator = custom_target('udev-hwdb',
+     install: false,
+ )
+
++udev_rules_cmd = get_option('udev_rules_cmd')
+ if install_udev_rules
+-    udev_rules = executable('fprint-list-udev-rules',
+-        'fprint-list-udev-rules.c',
+-        dependencies: libfprint_private_dep,
+-        link_with: libfprint_drivers,
+-        install: false)
++    if udev_rules_cmd == ''
++        udev_rules = executable('fprint-list-udev-rules',
++            'fprint-list-udev-rules.c',
++            dependencies: libfprint_private_dep,
++            link_with: libfprint_drivers,
++            install: false)
++    else
++        udev_rules = find_program(udev_rules_cmd)
++    endif
+
+     custom_target('udev-rules',
+         output: '70-@0@.rules'.format(versioned_libname),
+diff --git a/meson_options.txt b/meson_options.txt
+index f9b801f..a6f0c4d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -14,6 +14,10 @@ option('udev_rules_dir',
+        description: 'Installation path for udev rules',
+        type: 'string',
+        value: 'auto')
++option('udev_rules_cmd',
++       description : 'Optional path for native build of fprint-list-udev-rules',
++       type : 'string',
++       value : '')
+ option('udev_hwdb',
+        description: 'Whether to create a udev hwdb for autosuspend (included in systemd v248 and later)',
+        type: 'feature',
+@@ -22,6 +26,10 @@ option('udev_hwdb_dir',
+        description: 'Installation path for udev hwdb',
+        type: 'string',
+        value: 'auto')
++option('udev_hwdb_cmd',
++       description : 'Optional path for native build of fprint-list-udev-hwdb',
++       type : 'string',
++       value : '')
+ option('gtk-examples',
+        description: 'Whether to build GTK+ example applications',
+        type: 'boolean',
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
new file mode 100644
index 000000000..c83ea95e1
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
@@ -0,0 +1,47 @@
+From 8e27d45a7747c9aaf8e619f2de3ad3eae9659da8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:57:35 +0200
+Subject: [PATCH 2/2] Make building tests optional
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ meson.build       | 4 +++-
+ meson_options.txt | 4 ++++
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 1badb16..05edb8d 100644
+--- a/meson.build
++++ b/meson.build
+@@ -309,7 +309,9 @@ if get_option('gtk-examples')
+ endif
+
+ subdir('data')
+-subdir('tests')
++if get_option('tests')
++    subdir('tests')
++endif
+
+ pkgconfig = import('pkgconfig')
+ pkgconfig.generate(
+diff --git a/meson_options.txt b/meson_options.txt
+index a6f0c4d..175710d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -38,3 +38,7 @@ option('doc',
+        description: 'Whether to build the API documentation',
+        type: 'boolean',
+        value: true)
++option('tests',
++       description: 'Whether to build the tests',
++       type: 'boolean',
++       value: true)
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
new file mode 100644
index 000000000..b0133409a
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
@@ -0,0 +1,45 @@
+SUMMARY = "Library for fingerprint readers"
+DESCRIPTION = "libfprint is an open source software library \
+designed to make it easy for application developers to add \
+support for consumer fingerprint readers to their software."
+HOMEPAGE = "https://www.freedesktop.org/wiki/Software/fprint/libfprint/"
+
+DEPENDS = "glib-2.0 libgusb udev libgudev nspr nss pixman cairo"
+
+DEPENDS:append:class-target = " libfprint-native "
+
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
+
+#PR = "r1"
+
+SRCREV = "86961a9429d589c387da37351fd6b4ff3caf67ea"
+
+SRC_URI = " \
+ git://anongit.freedesktop.org/git/libfprint/libfprint.git;branch=master;protocol=https \
+       file://0001-Optionally-use-native-generators.patch \
+       file://0002-Make-building-tests-optional.patch \
+"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig useradd python3native gobject-introspection
+
+EXTRA_OEMESON:class-native = "-Ddoc=false -Dtests=false -Dintrospection=false"
+
+EXTRA_OEMESON:class-target = "-Ddoc=false -Dtests=false \
+       -Dudev_hwdb=enabled -Dudev_hwdb_dir=${sysconfdir}/udev/hwdb.d \
+ -Dudev_hwdb_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-hwdb \
+ -Dudev_rules_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-rules \
+"
+
+do_install:append:class-native () {
+       install -d ${D}${bindir}
+       install -m0755 ${B}/libfprint/fprint-list-udev-hwdb ${D}${bindir}/fprint-list-udev-hwdb
+       install -m0755 ${B}/libfprint/fprint-list-udev-rules ${D}${bindir}/fprint-list-udev-rules
+}
+
+BBCLASSEXTEND = "native"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM:${PN} = "fprint"
--
2.39.2





Alexander Kanavin
 

Maybe you can raise the concern with upstream and see what they say?
How, in their opinion, should their component be cross-compiled? Can
the need to run target executables be eliminated from the build in
some other way we're not seeing?

Alex

On Thu, 30 Mar 2023 at 17:52, Böszörményi Zoltán <zboszor@...> wrote:

2023. 03. 30. 17:24 keltezéssel, Zoltan Boszormenyi via lists.openembedded.org írta:
2023. 03. 30. 15:50 keltezéssel, Alexander Kanavin írta:
Meson is specifically configured in yocto to user qemu usermode as the
wrapper to run cross binaries, so can libfprint build configuration be
tweaked to use that? This would avoid all the nasty -native extensions
and modifications.
How would I do that? This is the error if I not use the
externally built executables:

| [122/124]
/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/bin/meson.real
--internal exe --capture libfprint/70-libfprint-2.rules --
/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/build/libfprint/fprint-list-udev-rules
| FAILED: libfprint/70-libfprint-2.rules
|
/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/bin/meson.real
--internal exe --capture libfprint/70-libfprint-2.rules --
/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/build/libfprint/fprint-list-udev-rules
| Traceback (most recent call last):
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/bin/meson.real",
line 8, in <module>
| sys.exit(main())
| ^^^^^^
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/mesonmain.py",
line 287, in main
| return run(sys.argv[1:], launcher)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/mesonmain.py",
line 275, in run
| return run_script_command(args[1], args[2:])
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/mesonmain.py",
line 223, in run_script_command
| return module.run(script_args)
| ^^^^^^^^^^^^^^^^^^^^^^^
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/scripts/meson_exe.py",
line 121, in run
| return run_exe(exe)
| ^^^^^^^^^^^^
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/scripts/meson_exe.py",
line 66, in run_exe
| p = subprocess.Popen(cmd_args, env=child_env, cwd=exe.workdir,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/subprocess.py",
line 1024, in __init__
| self._execute_child(args, executable, preexec_fn, close_fds,
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/subprocess.py",
line 1789, in _execute_child
| self._posix_spawn(args, executable, env, restore_signals,
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/subprocess.py",
line 1733, in _posix_spawn
| self.pid = os.posix_spawn(executable, args, env, **kwargs)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| FileNotFoundError: [Errno 2] No such file or directory:
'/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/build/libfprint/fprint-list-udev-rules'

The executable is built, it is there, and it's using the target system's
runtime linker path.

Obviously, meson doesn't run it through the exe_wrapper.
It is possible that meson doesn't support running executables
via exe_wrapper whose output is captured in a file?

Maybe rewriting the generators to write their output directly
instead of on stdout will make libfprint more cross compiler
friendly.



Alex

On Thu, 30 Mar 2023 at 15:43, Zoltan Boszormenyi <zboszor@...> wrote:
libfprint is the library used by fprintd.

Signed-off-by: Zoltán Böszörményi <zboszor@...>
---
...001-Optionally-use-native-generators.patch | 111 ++++++++++++++++++
.../0002-Make-building-tests-optional.patch | 47 ++++++++
.../libfprint/libfprint_1.94.5.bb | 45 +++++++
3 files changed, 203 insertions(+)
create mode 100644
meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
create mode 100644
meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
create mode 100644 meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb

diff --git
a/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
new file mode 100644
index 000000000..779d78c28
--- /dev/null
+++
b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
@@ -0,0 +1,111 @@
+From 4f0f84448dbc46c18d2700ddb45acdee67687574 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:45:31 +0200
+Subject: [PATCH 1/2] Optionally use native generators
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+fprint-list-udev-hwdb and fprint-list-udev-rules are run
+during the build to generate autosuspend.hwdb and 70-*.rules,
+respectively.
+
+Since they are not marked as "native: true", a cross-compiled
+version is not possible.
+
+Since these binaries are linked with the libfprint_drivers target,
+marking them as native binaries would also need libfprint_drivers
+to be duplicated as a native version and possibly other library
+targets, too.
+
+Instead, make it the responsibility of the cross-compiler
+framework to build the native variant separately and allow
+the external binaries to be passed in.
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ libfprint/meson.build | 30 ++++++++++++++++++++----------
+ meson_options.txt | 8 ++++++++
+ 2 files changed, 28 insertions(+), 10 deletions(-)
+
+diff --git a/libfprint/meson.build b/libfprint/meson.build
+index d3c8b03..2a4de67 100644
+--- a/libfprint/meson.build
++++ b/libfprint/meson.build
+@@ -301,11 +301,16 @@ libfprint_private_dep = declare_dependency(
+ ]
+ )
+
+-udev_hwdb = executable('fprint-list-udev-hwdb',
+- 'fprint-list-udev-hwdb.c',
+- dependencies: libfprint_private_dep,
+- link_with: libfprint_drivers,
+- install: false)
++udev_hwdb_cmd = get_option('udev_hwdb_cmd')
++if udev_hwdb_cmd == ''
++ udev_hwdb = executable('fprint-list-udev-hwdb',
++ 'fprint-list-udev-hwdb.c',
++ dependencies: libfprint_private_dep,
++ link_with: libfprint_drivers,
++ install: false)
++else
++ udev_hwdb = find_program(udev_hwdb_cmd)
++endif
+
+ udev_hwdb_generator = custom_target('udev-hwdb',
+ output: 'autosuspend.hwdb',
+@@ -315,12 +320,17 @@ udev_hwdb_generator = custom_target('udev-hwdb',
+ install: false,
+ )
+
++udev_rules_cmd = get_option('udev_rules_cmd')
+ if install_udev_rules
+- udev_rules = executable('fprint-list-udev-rules',
+- 'fprint-list-udev-rules.c',
+- dependencies: libfprint_private_dep,
+- link_with: libfprint_drivers,
+- install: false)
++ if udev_rules_cmd == ''
++ udev_rules = executable('fprint-list-udev-rules',
++ 'fprint-list-udev-rules.c',
++ dependencies: libfprint_private_dep,
++ link_with: libfprint_drivers,
++ install: false)
++ else
++ udev_rules = find_program(udev_rules_cmd)
++ endif
+
+ custom_target('udev-rules',
+ output: '70-@0@.rules'.format(versioned_libname),
+diff --git a/meson_options.txt b/meson_options.txt
+index f9b801f..a6f0c4d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -14,6 +14,10 @@ option('udev_rules_dir',
+ description: 'Installation path for udev rules',
+ type: 'string',
+ value: 'auto')
++option('udev_rules_cmd',
++ description : 'Optional path for native build of fprint-list-udev-rules',
++ type : 'string',
++ value : '')
+ option('udev_hwdb',
+ description: 'Whether to create a udev hwdb for autosuspend (included in
systemd v248 and later)',
+ type: 'feature',
+@@ -22,6 +26,10 @@ option('udev_hwdb_dir',
+ description: 'Installation path for udev hwdb',
+ type: 'string',
+ value: 'auto')
++option('udev_hwdb_cmd',
++ description : 'Optional path for native build of fprint-list-udev-hwdb',
++ type : 'string',
++ value : '')
+ option('gtk-examples',
+ description: 'Whether to build GTK+ example applications',
+ type: 'boolean',
+--
+2.39.2
+
diff --git
a/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
new file mode 100644
index 000000000..c83ea95e1
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
@@ -0,0 +1,47 @@
+From 8e27d45a7747c9aaf8e619f2de3ad3eae9659da8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:57:35 +0200
+Subject: [PATCH 2/2] Make building tests optional
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ meson.build | 4 +++-
+ meson_options.txt | 4 ++++
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 1badb16..05edb8d 100644
+--- a/meson.build
++++ b/meson.build
+@@ -309,7 +309,9 @@ if get_option('gtk-examples')
+ endif
+
+ subdir('data')
+-subdir('tests')
++if get_option('tests')
++ subdir('tests')
++endif
+
+ pkgconfig = import('pkgconfig')
+ pkgconfig.generate(
+diff --git a/meson_options.txt b/meson_options.txt
+index a6f0c4d..175710d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -38,3 +38,7 @@ option('doc',
+ description: 'Whether to build the API documentation',
+ type: 'boolean',
+ value: true)
++option('tests',
++ description: 'Whether to build the tests',
++ type: 'boolean',
++ value: true)
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
new file mode 100644
index 000000000..b0133409a
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
@@ -0,0 +1,45 @@
+SUMMARY = "Library for fingerprint readers"
+DESCRIPTION = "libfprint is an open source software library \
+designed to make it easy for application developers to add \
+support for consumer fingerprint readers to their software."
+HOMEPAGE = "https://www.freedesktop.org/wiki/Software/fprint/libfprint/"
+
+DEPENDS = "glib-2.0 libgusb udev libgudev nspr nss pixman cairo"
+
+DEPENDS:append:class-target = " libfprint-native "
+
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
+
+#PR = "r1"
+
+SRCREV = "86961a9429d589c387da37351fd6b4ff3caf67ea"
+
+SRC_URI = " \
+
git://anongit.freedesktop.org/git/libfprint/libfprint.git;branch=master;protocol=https \
+ file://0001-Optionally-use-native-generators.patch \
+ file://0002-Make-building-tests-optional.patch \
+"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig useradd python3native gobject-introspection
+
+EXTRA_OEMESON:class-native = "-Ddoc=false -Dtests=false -Dintrospection=false"
+
+EXTRA_OEMESON:class-target = "-Ddoc=false -Dtests=false \
+ -Dudev_hwdb=enabled -Dudev_hwdb_dir=${sysconfdir}/udev/hwdb.d \
+ -Dudev_hwdb_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-hwdb \
+ -Dudev_rules_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-rules \
+"
+
+do_install:append:class-native () {
+ install -d ${D}${bindir}
+ install -m0755 ${B}/libfprint/fprint-list-udev-hwdb
${D}${bindir}/fprint-list-udev-hwdb
+ install -m0755 ${B}/libfprint/fprint-list-udev-rules
${D}${bindir}/fprint-list-udev-rules
+}
+
+BBCLASSEXTEND = "native"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM:${PN} = "fprint"
--
2.39.2






Zoltan Boszormenyi
 

2023. 03. 30. 17:40 keltezéssel, Alexander Kanavin írta:
How do libfprint's meson rules for producing the executable and then
running it look like?
Here are the two generators:
https://gitlab.freedesktop.org/libfprint/libfprint/-/blob/master/libfprint/meson.build#L310
https://gitlab.freedesktop.org/libfprint/libfprint/-/blob/master/libfprint/meson.build#L325

Any meson based recipe has a similar entry in ${WORKDIR}/meson.cross:

exe_wrapper = '/srv/storage/alex/yocto/build-64-alt/tmp/work/core2-64-poky-linux/glib-2.0/1_2.74.6-r0/meson-qemuwrapper'
Yes, and it's created for libfprint, it's just not used.
Otherwise running the executable would have succeeded.

And the use of the exe_wrapper is documented here:
https://mesonbuild.com/Cross-compilation.html

Alex

On Thu, 30 Mar 2023 at 17:24, Böszörményi Zoltán <zboszor@...> wrote:
2023. 03. 30. 15:50 keltezéssel, Alexander Kanavin írta:
Meson is specifically configured in yocto to user qemu usermode as the
wrapper to run cross binaries, so can libfprint build configuration be
tweaked to use that? This would avoid all the nasty -native extensions
and modifications.
How would I do that? This is the error if I not use the
externally built executables:

| [122/124]
/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/bin/meson.real
--internal exe --capture libfprint/70-libfprint-2.rules --
/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/build/libfprint/fprint-list-udev-rules
| FAILED: libfprint/70-libfprint-2.rules
|
/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/bin/meson.real
--internal exe --capture libfprint/70-libfprint-2.rules --
/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/build/libfprint/fprint-list-udev-rules
| Traceback (most recent call last):
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/bin/meson.real",
line 8, in <module>
| sys.exit(main())
| ^^^^^^
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/mesonmain.py",
line 287, in main
| return run(sys.argv[1:], launcher)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/mesonmain.py",
line 275, in run
| return run_script_command(args[1], args[2:])
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/mesonmain.py",
line 223, in run_script_command
| return module.run(script_args)
| ^^^^^^^^^^^^^^^^^^^^^^^
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/scripts/meson_exe.py",
line 121, in run
| return run_exe(exe)
| ^^^^^^^^^^^^
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/mesonbuild/scripts/meson_exe.py",
line 66, in run_exe
| p = subprocess.Popen(cmd_args, env=child_env, cwd=exe.workdir,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/subprocess.py",
line 1024, in __init__
| self._execute_child(args, executable, preexec_fn, close_fds,
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/subprocess.py",
line 1789, in _execute_child
| self._posix_spawn(args, executable, env, restore_signals,
| File
"/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/recipe-sysroot-native/usr/lib/python3.11/subprocess.py",
line 1733, in _posix_spawn
| self.pid = os.posix_spawn(executable, args, env, **kwargs)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| FileNotFoundError: [Errno 2] No such file or directory:
'/home/zozo/dtd-yocto-4.2/tmp-sicom-glibc/work/corei7-64-oe-linux/libfprint/1.94.5-r0/build/libfprint/fprint-list-udev-rules'

The executable is built, it is there, and it's using the target system's
runtime linker path.

Obviously, meson doesn't run it through the exe_wrapper.

Alex

On Thu, 30 Mar 2023 at 15:43, Zoltan Boszormenyi <zboszor@...> wrote:
libfprint is the library used by fprintd.

Signed-off-by: Zoltán Böszörményi <zboszor@...>
---
...001-Optionally-use-native-generators.patch | 111 ++++++++++++++++++
.../0002-Make-building-tests-optional.patch | 47 ++++++++
.../libfprint/libfprint_1.94.5.bb | 45 +++++++
3 files changed, 203 insertions(+)
create mode 100644 meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
create mode 100644 meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
create mode 100644 meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb

diff --git a/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
new file mode 100644
index 000000000..779d78c28
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
@@ -0,0 +1,111 @@
+From 4f0f84448dbc46c18d2700ddb45acdee67687574 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:45:31 +0200
+Subject: [PATCH 1/2] Optionally use native generators
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+fprint-list-udev-hwdb and fprint-list-udev-rules are run
+during the build to generate autosuspend.hwdb and 70-*.rules,
+respectively.
+
+Since they are not marked as "native: true", a cross-compiled
+version is not possible.
+
+Since these binaries are linked with the libfprint_drivers target,
+marking them as native binaries would also need libfprint_drivers
+to be duplicated as a native version and possibly other library
+targets, too.
+
+Instead, make it the responsibility of the cross-compiler
+framework to build the native variant separately and allow
+the external binaries to be passed in.
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ libfprint/meson.build | 30 ++++++++++++++++++++----------
+ meson_options.txt | 8 ++++++++
+ 2 files changed, 28 insertions(+), 10 deletions(-)
+
+diff --git a/libfprint/meson.build b/libfprint/meson.build
+index d3c8b03..2a4de67 100644
+--- a/libfprint/meson.build
++++ b/libfprint/meson.build
+@@ -301,11 +301,16 @@ libfprint_private_dep = declare_dependency(
+ ]
+ )
+
+-udev_hwdb = executable('fprint-list-udev-hwdb',
+- 'fprint-list-udev-hwdb.c',
+- dependencies: libfprint_private_dep,
+- link_with: libfprint_drivers,
+- install: false)
++udev_hwdb_cmd = get_option('udev_hwdb_cmd')
++if udev_hwdb_cmd == ''
++ udev_hwdb = executable('fprint-list-udev-hwdb',
++ 'fprint-list-udev-hwdb.c',
++ dependencies: libfprint_private_dep,
++ link_with: libfprint_drivers,
++ install: false)
++else
++ udev_hwdb = find_program(udev_hwdb_cmd)
++endif
+
+ udev_hwdb_generator = custom_target('udev-hwdb',
+ output: 'autosuspend.hwdb',
+@@ -315,12 +320,17 @@ udev_hwdb_generator = custom_target('udev-hwdb',
+ install: false,
+ )
+
++udev_rules_cmd = get_option('udev_rules_cmd')
+ if install_udev_rules
+- udev_rules = executable('fprint-list-udev-rules',
+- 'fprint-list-udev-rules.c',
+- dependencies: libfprint_private_dep,
+- link_with: libfprint_drivers,
+- install: false)
++ if udev_rules_cmd == ''
++ udev_rules = executable('fprint-list-udev-rules',
++ 'fprint-list-udev-rules.c',
++ dependencies: libfprint_private_dep,
++ link_with: libfprint_drivers,
++ install: false)
++ else
++ udev_rules = find_program(udev_rules_cmd)
++ endif
+
+ custom_target('udev-rules',
+ output: '70-@0@.rules'.format(versioned_libname),
+diff --git a/meson_options.txt b/meson_options.txt
+index f9b801f..a6f0c4d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -14,6 +14,10 @@ option('udev_rules_dir',
+ description: 'Installation path for udev rules',
+ type: 'string',
+ value: 'auto')
++option('udev_rules_cmd',
++ description : 'Optional path for native build of fprint-list-udev-rules',
++ type : 'string',
++ value : '')
+ option('udev_hwdb',
+ description: 'Whether to create a udev hwdb for autosuspend (included in systemd v248 and later)',
+ type: 'feature',
+@@ -22,6 +26,10 @@ option('udev_hwdb_dir',
+ description: 'Installation path for udev hwdb',
+ type: 'string',
+ value: 'auto')
++option('udev_hwdb_cmd',
++ description : 'Optional path for native build of fprint-list-udev-hwdb',
++ type : 'string',
++ value : '')
+ option('gtk-examples',
+ description: 'Whether to build GTK+ example applications',
+ type: 'boolean',
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
new file mode 100644
index 000000000..c83ea95e1
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
@@ -0,0 +1,47 @@
+From 8e27d45a7747c9aaf8e619f2de3ad3eae9659da8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:57:35 +0200
+Subject: [PATCH 2/2] Make building tests optional
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ meson.build | 4 +++-
+ meson_options.txt | 4 ++++
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 1badb16..05edb8d 100644
+--- a/meson.build
++++ b/meson.build
+@@ -309,7 +309,9 @@ if get_option('gtk-examples')
+ endif
+
+ subdir('data')
+-subdir('tests')
++if get_option('tests')
++ subdir('tests')
++endif
+
+ pkgconfig = import('pkgconfig')
+ pkgconfig.generate(
+diff --git a/meson_options.txt b/meson_options.txt
+index a6f0c4d..175710d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -38,3 +38,7 @@ option('doc',
+ description: 'Whether to build the API documentation',
+ type: 'boolean',
+ value: true)
++option('tests',
++ description: 'Whether to build the tests',
++ type: 'boolean',
++ value: true)
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
new file mode 100644
index 000000000..b0133409a
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
@@ -0,0 +1,45 @@
+SUMMARY = "Library for fingerprint readers"
+DESCRIPTION = "libfprint is an open source software library \
+designed to make it easy for application developers to add \
+support for consumer fingerprint readers to their software."
+HOMEPAGE = "https://www.freedesktop.org/wiki/Software/fprint/libfprint/"
+
+DEPENDS = "glib-2.0 libgusb udev libgudev nspr nss pixman cairo"
+
+DEPENDS:append:class-target = " libfprint-native "
+
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
+
+#PR = "r1"
+
+SRCREV = "86961a9429d589c387da37351fd6b4ff3caf67ea"
+
+SRC_URI = " \
+ git://anongit.freedesktop.org/git/libfprint/libfprint.git;branch=master;protocol=https \
+ file://0001-Optionally-use-native-generators.patch \
+ file://0002-Make-building-tests-optional.patch \
+"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig useradd python3native gobject-introspection
+
+EXTRA_OEMESON:class-native = "-Ddoc=false -Dtests=false -Dintrospection=false"
+
+EXTRA_OEMESON:class-target = "-Ddoc=false -Dtests=false \
+ -Dudev_hwdb=enabled -Dudev_hwdb_dir=${sysconfdir}/udev/hwdb.d \
+ -Dudev_hwdb_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-hwdb \
+ -Dudev_rules_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-rules \
+"
+
+do_install:append:class-native () {
+ install -d ${D}${bindir}
+ install -m0755 ${B}/libfprint/fprint-list-udev-hwdb ${D}${bindir}/fprint-list-udev-hwdb
+ install -m0755 ${B}/libfprint/fprint-list-udev-rules ${D}${bindir}/fprint-list-udev-rules
+}
+
+BBCLASSEXTEND = "native"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM:${PN} = "fprint"
--
2.39.2



Alexander Kanavin
 

On Thu, 30 Mar 2023 at 19:20, Böszörményi Zoltán <zboszor@...> wrote:

2023. 03. 30. 17:40 keltezéssel, Alexander Kanavin írta:
How do libfprint's meson rules for producing the executable and then
running it look like?
Here are the two generators:
https://gitlab.freedesktop.org/libfprint/libfprint/-/blob/master/libfprint/meson.build#L310
https://gitlab.freedesktop.org/libfprint/libfprint/-/blob/master/libfprint/meson.build#L325
Right. Welcome to:
https://github.com/mesonbuild/meson/issues/11029

I'm not sure what rules in meson do use the exe_wrapper setting, if
you can investigate that and see if one of them can be used in this
case, would be great. Or those two generators can be patched to prefix
the wrapper.

Alex


Khem Raj
 

It needs to address native deps on udev-native I am seeing

ERROR: Nothing PROVIDES 'udev-native' (but
virtual:native:/mnt/b/yoe/master/sources/meta-openembedded/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
DEPENDS on or otherwise requires it).

On Thu, Mar 30, 2023 at 6:43 AM Zoltan Boszormenyi <zboszor@...> wrote:

libfprint is the library used by fprintd.

Signed-off-by: Zoltán Böszörményi <zboszor@...>
---
...001-Optionally-use-native-generators.patch | 111 ++++++++++++++++++
.../0002-Make-building-tests-optional.patch | 47 ++++++++
.../libfprint/libfprint_1.94.5.bb | 45 +++++++
3 files changed, 203 insertions(+)
create mode 100644 meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
create mode 100644 meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
create mode 100644 meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb

diff --git a/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
new file mode 100644
index 000000000..779d78c28
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
@@ -0,0 +1,111 @@
+From 4f0f84448dbc46c18d2700ddb45acdee67687574 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:45:31 +0200
+Subject: [PATCH 1/2] Optionally use native generators
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+fprint-list-udev-hwdb and fprint-list-udev-rules are run
+during the build to generate autosuspend.hwdb and 70-*.rules,
+respectively.
+
+Since they are not marked as "native: true", a cross-compiled
+version is not possible.
+
+Since these binaries are linked with the libfprint_drivers target,
+marking them as native binaries would also need libfprint_drivers
+to be duplicated as a native version and possibly other library
+targets, too.
+
+Instead, make it the responsibility of the cross-compiler
+framework to build the native variant separately and allow
+the external binaries to be passed in.
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ libfprint/meson.build | 30 ++++++++++++++++++++----------
+ meson_options.txt | 8 ++++++++
+ 2 files changed, 28 insertions(+), 10 deletions(-)
+
+diff --git a/libfprint/meson.build b/libfprint/meson.build
+index d3c8b03..2a4de67 100644
+--- a/libfprint/meson.build
++++ b/libfprint/meson.build
+@@ -301,11 +301,16 @@ libfprint_private_dep = declare_dependency(
+ ]
+ )
+
+-udev_hwdb = executable('fprint-list-udev-hwdb',
+- 'fprint-list-udev-hwdb.c',
+- dependencies: libfprint_private_dep,
+- link_with: libfprint_drivers,
+- install: false)
++udev_hwdb_cmd = get_option('udev_hwdb_cmd')
++if udev_hwdb_cmd == ''
++ udev_hwdb = executable('fprint-list-udev-hwdb',
++ 'fprint-list-udev-hwdb.c',
++ dependencies: libfprint_private_dep,
++ link_with: libfprint_drivers,
++ install: false)
++else
++ udev_hwdb = find_program(udev_hwdb_cmd)
++endif
+
+ udev_hwdb_generator = custom_target('udev-hwdb',
+ output: 'autosuspend.hwdb',
+@@ -315,12 +320,17 @@ udev_hwdb_generator = custom_target('udev-hwdb',
+ install: false,
+ )
+
++udev_rules_cmd = get_option('udev_rules_cmd')
+ if install_udev_rules
+- udev_rules = executable('fprint-list-udev-rules',
+- 'fprint-list-udev-rules.c',
+- dependencies: libfprint_private_dep,
+- link_with: libfprint_drivers,
+- install: false)
++ if udev_rules_cmd == ''
++ udev_rules = executable('fprint-list-udev-rules',
++ 'fprint-list-udev-rules.c',
++ dependencies: libfprint_private_dep,
++ link_with: libfprint_drivers,
++ install: false)
++ else
++ udev_rules = find_program(udev_rules_cmd)
++ endif
+
+ custom_target('udev-rules',
+ output: '70-@0@.rules'.format(versioned_libname),
+diff --git a/meson_options.txt b/meson_options.txt
+index f9b801f..a6f0c4d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -14,6 +14,10 @@ option('udev_rules_dir',
+ description: 'Installation path for udev rules',
+ type: 'string',
+ value: 'auto')
++option('udev_rules_cmd',
++ description : 'Optional path for native build of fprint-list-udev-rules',
++ type : 'string',
++ value : '')
+ option('udev_hwdb',
+ description: 'Whether to create a udev hwdb for autosuspend (included in systemd v248 and later)',
+ type: 'feature',
+@@ -22,6 +26,10 @@ option('udev_hwdb_dir',
+ description: 'Installation path for udev hwdb',
+ type: 'string',
+ value: 'auto')
++option('udev_hwdb_cmd',
++ description : 'Optional path for native build of fprint-list-udev-hwdb',
++ type : 'string',
++ value : '')
+ option('gtk-examples',
+ description: 'Whether to build GTK+ example applications',
+ type: 'boolean',
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
new file mode 100644
index 000000000..c83ea95e1
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
@@ -0,0 +1,47 @@
+From 8e27d45a7747c9aaf8e619f2de3ad3eae9659da8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:57:35 +0200
+Subject: [PATCH 2/2] Make building tests optional
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ meson.build | 4 +++-
+ meson_options.txt | 4 ++++
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 1badb16..05edb8d 100644
+--- a/meson.build
++++ b/meson.build
+@@ -309,7 +309,9 @@ if get_option('gtk-examples')
+ endif
+
+ subdir('data')
+-subdir('tests')
++if get_option('tests')
++ subdir('tests')
++endif
+
+ pkgconfig = import('pkgconfig')
+ pkgconfig.generate(
+diff --git a/meson_options.txt b/meson_options.txt
+index a6f0c4d..175710d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -38,3 +38,7 @@ option('doc',
+ description: 'Whether to build the API documentation',
+ type: 'boolean',
+ value: true)
++option('tests',
++ description: 'Whether to build the tests',
++ type: 'boolean',
++ value: true)
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
new file mode 100644
index 000000000..b0133409a
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
@@ -0,0 +1,45 @@
+SUMMARY = "Library for fingerprint readers"
+DESCRIPTION = "libfprint is an open source software library \
+designed to make it easy for application developers to add \
+support for consumer fingerprint readers to their software."
+HOMEPAGE = "https://www.freedesktop.org/wiki/Software/fprint/libfprint/"
+
+DEPENDS = "glib-2.0 libgusb udev libgudev nspr nss pixman cairo"
+
+DEPENDS:append:class-target = " libfprint-native "
+
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
+
+#PR = "r1"
+
+SRCREV = "86961a9429d589c387da37351fd6b4ff3caf67ea"
+
+SRC_URI = " \
+ git://anongit.freedesktop.org/git/libfprint/libfprint.git;branch=master;protocol=https \
+ file://0001-Optionally-use-native-generators.patch \
+ file://0002-Make-building-tests-optional.patch \
+"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig useradd python3native gobject-introspection
+
+EXTRA_OEMESON:class-native = "-Ddoc=false -Dtests=false -Dintrospection=false"
+
+EXTRA_OEMESON:class-target = "-Ddoc=false -Dtests=false \
+ -Dudev_hwdb=enabled -Dudev_hwdb_dir=${sysconfdir}/udev/hwdb.d \
+ -Dudev_hwdb_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-hwdb \
+ -Dudev_rules_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-rules \
+"
+
+do_install:append:class-native () {
+ install -d ${D}${bindir}
+ install -m0755 ${B}/libfprint/fprint-list-udev-hwdb ${D}${bindir}/fprint-list-udev-hwdb
+ install -m0755 ${B}/libfprint/fprint-list-udev-rules ${D}${bindir}/fprint-list-udev-rules
+}
+
+BBCLASSEXTEND = "native"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM:${PN} = "fprint"
--
2.39.2




Zoltan Boszormenyi
 

2023. 03. 31. 19:41 keltezéssel, Khem Raj írta:
It needs to address native deps on udev-native I am seeing

ERROR: Nothing PROVIDES 'udev-native' (but
virtual:native:/mnt/b/yoe/master/sources/meta-openembedded/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
DEPENDS on or otherwise requires it).
This is a problem with using two different mailing lists
and separate layers. Interconnected changes are often
overlooked without taking the changed in the other layer.

This particular problem is addressed by the systemd change
with BBCLASSEXTEND = "native" and other tweaks which
was sent to the openembedded-core ML and is being debated there.

FWIW, this meson bug prevents libfprint to use the exe_wrapper,
which would make the systemd-native recipe unnecessary:
https://github.com/mesonbuild/meson/issues/11029

On Thu, Mar 30, 2023 at 6:43 AM Zoltan Boszormenyi <zboszor@...> wrote:
libfprint is the library used by fprintd.

Signed-off-by: Zoltán Böszörményi <zboszor@...>
---
...001-Optionally-use-native-generators.patch | 111 ++++++++++++++++++
.../0002-Make-building-tests-optional.patch | 47 ++++++++
.../libfprint/libfprint_1.94.5.bb | 45 +++++++
3 files changed, 203 insertions(+)
create mode 100644 meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
create mode 100644 meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
create mode 100644 meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb

diff --git a/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
new file mode 100644
index 000000000..779d78c28
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
@@ -0,0 +1,111 @@
+From 4f0f84448dbc46c18d2700ddb45acdee67687574 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:45:31 +0200
+Subject: [PATCH 1/2] Optionally use native generators
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+fprint-list-udev-hwdb and fprint-list-udev-rules are run
+during the build to generate autosuspend.hwdb and 70-*.rules,
+respectively.
+
+Since they are not marked as "native: true", a cross-compiled
+version is not possible.
+
+Since these binaries are linked with the libfprint_drivers target,
+marking them as native binaries would also need libfprint_drivers
+to be duplicated as a native version and possibly other library
+targets, too.
+
+Instead, make it the responsibility of the cross-compiler
+framework to build the native variant separately and allow
+the external binaries to be passed in.
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ libfprint/meson.build | 30 ++++++++++++++++++++----------
+ meson_options.txt | 8 ++++++++
+ 2 files changed, 28 insertions(+), 10 deletions(-)
+
+diff --git a/libfprint/meson.build b/libfprint/meson.build
+index d3c8b03..2a4de67 100644
+--- a/libfprint/meson.build
++++ b/libfprint/meson.build
+@@ -301,11 +301,16 @@ libfprint_private_dep = declare_dependency(
+ ]
+ )
+
+-udev_hwdb = executable('fprint-list-udev-hwdb',
+- 'fprint-list-udev-hwdb.c',
+- dependencies: libfprint_private_dep,
+- link_with: libfprint_drivers,
+- install: false)
++udev_hwdb_cmd = get_option('udev_hwdb_cmd')
++if udev_hwdb_cmd == ''
++ udev_hwdb = executable('fprint-list-udev-hwdb',
++ 'fprint-list-udev-hwdb.c',
++ dependencies: libfprint_private_dep,
++ link_with: libfprint_drivers,
++ install: false)
++else
++ udev_hwdb = find_program(udev_hwdb_cmd)
++endif
+
+ udev_hwdb_generator = custom_target('udev-hwdb',
+ output: 'autosuspend.hwdb',
+@@ -315,12 +320,17 @@ udev_hwdb_generator = custom_target('udev-hwdb',
+ install: false,
+ )
+
++udev_rules_cmd = get_option('udev_rules_cmd')
+ if install_udev_rules
+- udev_rules = executable('fprint-list-udev-rules',
+- 'fprint-list-udev-rules.c',
+- dependencies: libfprint_private_dep,
+- link_with: libfprint_drivers,
+- install: false)
++ if udev_rules_cmd == ''
++ udev_rules = executable('fprint-list-udev-rules',
++ 'fprint-list-udev-rules.c',
++ dependencies: libfprint_private_dep,
++ link_with: libfprint_drivers,
++ install: false)
++ else
++ udev_rules = find_program(udev_rules_cmd)
++ endif
+
+ custom_target('udev-rules',
+ output: '70-@0@.rules'.format(versioned_libname),
+diff --git a/meson_options.txt b/meson_options.txt
+index f9b801f..a6f0c4d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -14,6 +14,10 @@ option('udev_rules_dir',
+ description: 'Installation path for udev rules',
+ type: 'string',
+ value: 'auto')
++option('udev_rules_cmd',
++ description : 'Optional path for native build of fprint-list-udev-rules',
++ type : 'string',
++ value : '')
+ option('udev_hwdb',
+ description: 'Whether to create a udev hwdb for autosuspend (included in systemd v248 and later)',
+ type: 'feature',
+@@ -22,6 +26,10 @@ option('udev_hwdb_dir',
+ description: 'Installation path for udev hwdb',
+ type: 'string',
+ value: 'auto')
++option('udev_hwdb_cmd',
++ description : 'Optional path for native build of fprint-list-udev-hwdb',
++ type : 'string',
++ value : '')
+ option('gtk-examples',
+ description: 'Whether to build GTK+ example applications',
+ type: 'boolean',
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
new file mode 100644
index 000000000..c83ea95e1
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
@@ -0,0 +1,47 @@
+From 8e27d45a7747c9aaf8e619f2de3ad3eae9659da8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:57:35 +0200
+Subject: [PATCH 2/2] Make building tests optional
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ meson.build | 4 +++-
+ meson_options.txt | 4 ++++
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 1badb16..05edb8d 100644
+--- a/meson.build
++++ b/meson.build
+@@ -309,7 +309,9 @@ if get_option('gtk-examples')
+ endif
+
+ subdir('data')
+-subdir('tests')
++if get_option('tests')
++ subdir('tests')
++endif
+
+ pkgconfig = import('pkgconfig')
+ pkgconfig.generate(
+diff --git a/meson_options.txt b/meson_options.txt
+index a6f0c4d..175710d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -38,3 +38,7 @@ option('doc',
+ description: 'Whether to build the API documentation',
+ type: 'boolean',
+ value: true)
++option('tests',
++ description: 'Whether to build the tests',
++ type: 'boolean',
++ value: true)
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
new file mode 100644
index 000000000..b0133409a
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
@@ -0,0 +1,45 @@
+SUMMARY = "Library for fingerprint readers"
+DESCRIPTION = "libfprint is an open source software library \
+designed to make it easy for application developers to add \
+support for consumer fingerprint readers to their software."
+HOMEPAGE = "https://www.freedesktop.org/wiki/Software/fprint/libfprint/"
+
+DEPENDS = "glib-2.0 libgusb udev libgudev nspr nss pixman cairo"
+
+DEPENDS:append:class-target = " libfprint-native "
+
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
+
+#PR = "r1"
+
+SRCREV = "86961a9429d589c387da37351fd6b4ff3caf67ea"
+
+SRC_URI = " \
+ git://anongit.freedesktop.org/git/libfprint/libfprint.git;branch=master;protocol=https \
+ file://0001-Optionally-use-native-generators.patch \
+ file://0002-Make-building-tests-optional.patch \
+"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig useradd python3native gobject-introspection
+
+EXTRA_OEMESON:class-native = "-Ddoc=false -Dtests=false -Dintrospection=false"
+
+EXTRA_OEMESON:class-target = "-Ddoc=false -Dtests=false \
+ -Dudev_hwdb=enabled -Dudev_hwdb_dir=${sysconfdir}/udev/hwdb.d \
+ -Dudev_hwdb_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-hwdb \
+ -Dudev_rules_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-rules \
+"
+
+do_install:append:class-native () {
+ install -d ${D}${bindir}
+ install -m0755 ${B}/libfprint/fprint-list-udev-hwdb ${D}${bindir}/fprint-list-udev-hwdb
+ install -m0755 ${B}/libfprint/fprint-list-udev-rules ${D}${bindir}/fprint-list-udev-rules
+}
+
+BBCLASSEXTEND = "native"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM:${PN} = "fprint"
--
2.39.2



Khem Raj
 

i am also seeing this on AB

ERROR: Nothing PROVIDES 'polkit' (but
/home/pokybuild/yocto-worker/meta-oe/build/meta-openembedded/meta-oe/recipes-support/fprintd/fprintd_git.bb
DEPENDS on or otherwise requires it)
polkit was skipped: missing required distro feature 'polkit' (not in
DISTRO_FEATURES)
polkit was skipped: missing required distro feature 'polkit' (not in
DISTRO_FEATURES)
ERROR: Required build target 'meta-world-pkgdata' has no buildable providers.
Missing or unbuildable dependency chain was: ['meta-world-pkgdata',
'fprintd', 'polkit']

On Fri, Mar 31, 2023 at 11:01 PM Böszörményi Zoltán <zboszor@...> wrote:

2023. 03. 31. 19:41 keltezéssel, Khem Raj írta:
It needs to address native deps on udev-native I am seeing

ERROR: Nothing PROVIDES 'udev-native' (but
virtual:native:/mnt/b/yoe/master/sources/meta-openembedded/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
DEPENDS on or otherwise requires it).
This is a problem with using two different mailing lists
and separate layers. Interconnected changes are often
overlooked without taking the changed in the other layer.

This particular problem is addressed by the systemd change
with BBCLASSEXTEND = "native" and other tweaks which
was sent to the openembedded-core ML and is being debated there.

FWIW, this meson bug prevents libfprint to use the exe_wrapper,
which would make the systemd-native recipe unnecessary:
https://github.com/mesonbuild/meson/issues/11029

On Thu, Mar 30, 2023 at 6:43 AM Zoltan Boszormenyi <zboszor@...> wrote:
libfprint is the library used by fprintd.

Signed-off-by: Zoltán Böszörményi <zboszor@...>
---
...001-Optionally-use-native-generators.patch | 111 ++++++++++++++++++
.../0002-Make-building-tests-optional.patch | 47 ++++++++
.../libfprint/libfprint_1.94.5.bb | 45 +++++++
3 files changed, 203 insertions(+)
create mode 100644 meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
create mode 100644 meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
create mode 100644 meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb

diff --git a/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
new file mode 100644
index 000000000..779d78c28
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0001-Optionally-use-native-generators.patch
@@ -0,0 +1,111 @@
+From 4f0f84448dbc46c18d2700ddb45acdee67687574 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:45:31 +0200
+Subject: [PATCH 1/2] Optionally use native generators
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+fprint-list-udev-hwdb and fprint-list-udev-rules are run
+during the build to generate autosuspend.hwdb and 70-*.rules,
+respectively.
+
+Since they are not marked as "native: true", a cross-compiled
+version is not possible.
+
+Since these binaries are linked with the libfprint_drivers target,
+marking them as native binaries would also need libfprint_drivers
+to be duplicated as a native version and possibly other library
+targets, too.
+
+Instead, make it the responsibility of the cross-compiler
+framework to build the native variant separately and allow
+the external binaries to be passed in.
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ libfprint/meson.build | 30 ++++++++++++++++++++----------
+ meson_options.txt | 8 ++++++++
+ 2 files changed, 28 insertions(+), 10 deletions(-)
+
+diff --git a/libfprint/meson.build b/libfprint/meson.build
+index d3c8b03..2a4de67 100644
+--- a/libfprint/meson.build
++++ b/libfprint/meson.build
+@@ -301,11 +301,16 @@ libfprint_private_dep = declare_dependency(
+ ]
+ )
+
+-udev_hwdb = executable('fprint-list-udev-hwdb',
+- 'fprint-list-udev-hwdb.c',
+- dependencies: libfprint_private_dep,
+- link_with: libfprint_drivers,
+- install: false)
++udev_hwdb_cmd = get_option('udev_hwdb_cmd')
++if udev_hwdb_cmd == ''
++ udev_hwdb = executable('fprint-list-udev-hwdb',
++ 'fprint-list-udev-hwdb.c',
++ dependencies: libfprint_private_dep,
++ link_with: libfprint_drivers,
++ install: false)
++else
++ udev_hwdb = find_program(udev_hwdb_cmd)
++endif
+
+ udev_hwdb_generator = custom_target('udev-hwdb',
+ output: 'autosuspend.hwdb',
+@@ -315,12 +320,17 @@ udev_hwdb_generator = custom_target('udev-hwdb',
+ install: false,
+ )
+
++udev_rules_cmd = get_option('udev_rules_cmd')
+ if install_udev_rules
+- udev_rules = executable('fprint-list-udev-rules',
+- 'fprint-list-udev-rules.c',
+- dependencies: libfprint_private_dep,
+- link_with: libfprint_drivers,
+- install: false)
++ if udev_rules_cmd == ''
++ udev_rules = executable('fprint-list-udev-rules',
++ 'fprint-list-udev-rules.c',
++ dependencies: libfprint_private_dep,
++ link_with: libfprint_drivers,
++ install: false)
++ else
++ udev_rules = find_program(udev_rules_cmd)
++ endif
+
+ custom_target('udev-rules',
+ output: '70-@0@.rules'.format(versioned_libname),
+diff --git a/meson_options.txt b/meson_options.txt
+index f9b801f..a6f0c4d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -14,6 +14,10 @@ option('udev_rules_dir',
+ description: 'Installation path for udev rules',
+ type: 'string',
+ value: 'auto')
++option('udev_rules_cmd',
++ description : 'Optional path for native build of fprint-list-udev-rules',
++ type : 'string',
++ value : '')
+ option('udev_hwdb',
+ description: 'Whether to create a udev hwdb for autosuspend (included in systemd v248 and later)',
+ type: 'feature',
+@@ -22,6 +26,10 @@ option('udev_hwdb_dir',
+ description: 'Installation path for udev hwdb',
+ type: 'string',
+ value: 'auto')
++option('udev_hwdb_cmd',
++ description : 'Optional path for native build of fprint-list-udev-hwdb',
++ type : 'string',
++ value : '')
+ option('gtk-examples',
+ description: 'Whether to build GTK+ example applications',
+ type: 'boolean',
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
new file mode 100644
index 000000000..c83ea95e1
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint/0002-Make-building-tests-optional.patch
@@ -0,0 +1,47 @@
+From 8e27d45a7747c9aaf8e619f2de3ad3eae9659da8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@...>
+Date: Thu, 30 Mar 2023 09:57:35 +0200
+Subject: [PATCH 2/2] Make building tests optional
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Submitted
+
+Signed-off-by: Zoltán Böszörményi <zboszor@...>
+---
+ meson.build | 4 +++-
+ meson_options.txt | 4 ++++
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 1badb16..05edb8d 100644
+--- a/meson.build
++++ b/meson.build
+@@ -309,7 +309,9 @@ if get_option('gtk-examples')
+ endif
+
+ subdir('data')
+-subdir('tests')
++if get_option('tests')
++ subdir('tests')
++endif
+
+ pkgconfig = import('pkgconfig')
+ pkgconfig.generate(
+diff --git a/meson_options.txt b/meson_options.txt
+index a6f0c4d..175710d 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -38,3 +38,7 @@ option('doc',
+ description: 'Whether to build the API documentation',
+ type: 'boolean',
+ value: true)
++option('tests',
++ description: 'Whether to build the tests',
++ type: 'boolean',
++ value: true)
+--
+2.39.2
+
diff --git a/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
new file mode 100644
index 000000000..b0133409a
--- /dev/null
+++ b/meta-oe/recipes-support/libfprint/libfprint_1.94.5.bb
@@ -0,0 +1,45 @@
+SUMMARY = "Library for fingerprint readers"
+DESCRIPTION = "libfprint is an open source software library \
+designed to make it easy for application developers to add \
+support for consumer fingerprint readers to their software."
+HOMEPAGE = "https://www.freedesktop.org/wiki/Software/fprint/libfprint/"
+
+DEPENDS = "glib-2.0 libgusb udev libgudev nspr nss pixman cairo"
+
+DEPENDS:append:class-target = " libfprint-native "
+
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
+
+#PR = "r1"
+
+SRCREV = "86961a9429d589c387da37351fd6b4ff3caf67ea"
+
+SRC_URI = " \
+ git://anongit.freedesktop.org/git/libfprint/libfprint.git;branch=master;protocol=https \
+ file://0001-Optionally-use-native-generators.patch \
+ file://0002-Make-building-tests-optional.patch \
+"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig useradd python3native gobject-introspection
+
+EXTRA_OEMESON:class-native = "-Ddoc=false -Dtests=false -Dintrospection=false"
+
+EXTRA_OEMESON:class-target = "-Ddoc=false -Dtests=false \
+ -Dudev_hwdb=enabled -Dudev_hwdb_dir=${sysconfdir}/udev/hwdb.d \
+ -Dudev_hwdb_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-hwdb \
+ -Dudev_rules_cmd=${STAGING_BINDIR_NATIVE}/fprint-list-udev-rules \
+"
+
+do_install:append:class-native () {
+ install -d ${D}${bindir}
+ install -m0755 ${B}/libfprint/fprint-list-udev-hwdb ${D}${bindir}/fprint-list-udev-hwdb
+ install -m0755 ${B}/libfprint/fprint-list-udev-rules ${D}${bindir}/fprint-list-udev-rules
+}
+
+BBCLASSEXTEND = "native"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM:${PN} = "fprint"
--
2.39.2