diff mbox series

[meta-oe,1/2] libfido2-initial: new recipe

Message ID 20260316192249.3950474-1-danismostlikely@gmail.com
State New
Headers show
Series [meta-oe,1/2] libfido2-initial: new recipe | expand

Commit Message

Dan McGregor March 16, 2026, 7:22 p.m. UTC
From: Dan McGregor <danmcgr@protonmail.com>

Use this recipe to break a circular dependency between libfido2 and
systemd when systemd's fido PACKAGECONFIG is enabled. systemd depends
on libfido2, and libfido2 depends on udev provided by systemd. However,
systemd only depends on the headers provided by libfido2 and its pkgconf
data. systemd uses only the datatypes provided, and opportunistically
enables fido support if libfido2 is found.

This recipe provides only the headers and pkgconf data. This is
sufficient to allow systemd to build support for libfido2.

It only works with a related change I've submitted to openembedded core.

Signed-off-by: Dan McGregor <danmcgr@protonmail.com>
---
 .../libfido2/libfido2-initial_1.16.0.bb       | 40 +++++++++++++++++++
 1 file changed, 40 insertions(+)
 create mode 100644 meta-oe/recipes-support/libfido2/libfido2-initial_1.16.0.bb

Comments

Khem Raj March 16, 2026, 9:19 p.m. UTC | #1
Please rebase it on top of master-next and resend.

On Mon, Mar 16, 2026 at 12:23 PM Dan McGregor via lists.openembedded.org
<danismostlikely=gmail.com@lists.openembedded.org> wrote:

> From: Dan McGregor <danmcgr@protonmail.com>
>
> Use this recipe to break a circular dependency between libfido2 and
> systemd when systemd's fido PACKAGECONFIG is enabled. systemd depends
> on libfido2, and libfido2 depends on udev provided by systemd. However,
> systemd only depends on the headers provided by libfido2 and its pkgconf
> data. systemd uses only the datatypes provided, and opportunistically
> enables fido support if libfido2 is found.
>
> This recipe provides only the headers and pkgconf data. This is
> sufficient to allow systemd to build support for libfido2.
>
> It only works with a related change I've submitted to openembedded core.
>
> Signed-off-by: Dan McGregor <danmcgr@protonmail.com>
> ---
>  .../libfido2/libfido2-initial_1.16.0.bb       | 40 +++++++++++++++++++
>  1 file changed, 40 insertions(+)
>  create mode 100644 meta-oe/recipes-support/libfido2/
> libfido2-initial_1.16.0.bb
>
> diff --git a/meta-oe/recipes-support/libfido2/libfido2-initial_1.16.0.bb
> b/meta-oe/recipes-support/libfido2/libfido2-initial_1.16.0.bb
> new file mode 100644
> index 00000000000..7d9838b003b
> --- /dev/null
> +++ b/meta-oe/recipes-support/libfido2/libfido2-initial_1.16.0.bb
> @@ -0,0 +1,40 @@
> +SUMMARY = "FIDO 2.0 support library"
> +DESCRIPTION = "libfido2 provides library functionality and command-line
> tools to \
> +communicate with a FIDO device over USB, and to verify attestation and \
> +assertion signatures."
> +HOMEPAGE = "https://developers.yubico.com/libfido2"
> +LICENSE = "BSD-2-Clause"
> +SECTION = "libs/network"
> +
> +LIC_FILES_CHKSUM = "file://LICENSE;md5=20be19aaa222f71738712b26f7f8717b"
> +
> +SRC_URI = "
> https://developers.yubico.com/${BPN}/Releases/${BPN}-${PV}.tar.gz"
> +SRC_URI[sha256sum] =
> "8c2b6fb279b5b42e9ac92ade71832e485852647b53607c43baaafbbcecea04e4"
> +
> +inherit nopackages
> +
> +PACKAGES = ""
> +
> +# The purpose of this recipe is to break a circular dependency between
> libfido2 and
> +# systemd. libfido2 depends on udev (provided by systemd) to build, while
> systemd
> +# depends on libfido2 if the fido feature is enabled. However, systemd
> doesn't
> +# actually link against libfido2. It only needs the headers in place and
> a dummy
> +# shared library. It opportunistically dlopens libfido2 if it's present,
> but
> +# for that to work it needs the headers in place.
> +# Just fake enough to make systemd happy, and have it RRECOMMEND the real
> libfido2.
> +do_install() {
> +    mkdir -p ${D}${includedir}/libfido2-initial/fido
> +    mkdir -p ${D}${datadir}/pkgconfig
> +
> +    install -m 644 ${S}/src/fido.h ${D}${includedir}/libfido2-initial
> +    install -m 644 ${S}/src/fido/*
> ${D}${includedir}/libfido2-initial/fido/
> +
> +    # Real libfido2 installs its pkg conf file in ${libdir}.
> +    sed -e 's,@CMAKE_INSTALL_PREFIX@,${exec_prefix},' \
> +        -e 's,@CMAKE_INSTALL_LIBDIR@,${baselib}/libfido2-initial,' \
> +        -e 's,@FIDO_VERSION@,${PV},' \
> +        -e 's,@PROJECT_NAME@,${BPN},' \
> +        -e '/^Cflags/s,$,/libfido2-initial,' \
> +        ${S}/src/libfido2.pc.in > ${D}${datadir}/pkgconfig/libfido2.pc
> +
> +}
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#125285):
> https://lists.openembedded.org/g/openembedded-devel/message/125285
> Mute This Topic: https://lists.openembedded.org/mt/118351906/1997914
> Group Owner: openembedded-devel+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-devel/unsub [
> raj.khem@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
>
diff mbox series

Patch

diff --git a/meta-oe/recipes-support/libfido2/libfido2-initial_1.16.0.bb b/meta-oe/recipes-support/libfido2/libfido2-initial_1.16.0.bb
new file mode 100644
index 00000000000..7d9838b003b
--- /dev/null
+++ b/meta-oe/recipes-support/libfido2/libfido2-initial_1.16.0.bb
@@ -0,0 +1,40 @@ 
+SUMMARY = "FIDO 2.0 support library"
+DESCRIPTION = "libfido2 provides library functionality and command-line tools to \
+communicate with a FIDO device over USB, and to verify attestation and \
+assertion signatures."
+HOMEPAGE = "https://developers.yubico.com/libfido2"
+LICENSE = "BSD-2-Clause"
+SECTION = "libs/network"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=20be19aaa222f71738712b26f7f8717b"
+
+SRC_URI = "https://developers.yubico.com/${BPN}/Releases/${BPN}-${PV}.tar.gz"
+SRC_URI[sha256sum] = "8c2b6fb279b5b42e9ac92ade71832e485852647b53607c43baaafbbcecea04e4"
+
+inherit nopackages
+
+PACKAGES = ""
+
+# The purpose of this recipe is to break a circular dependency between libfido2 and
+# systemd. libfido2 depends on udev (provided by systemd) to build, while systemd
+# depends on libfido2 if the fido feature is enabled. However, systemd doesn't
+# actually link against libfido2. It only needs the headers in place and a dummy
+# shared library. It opportunistically dlopens libfido2 if it's present, but
+# for that to work it needs the headers in place.
+# Just fake enough to make systemd happy, and have it RRECOMMEND the real libfido2.
+do_install() {
+    mkdir -p ${D}${includedir}/libfido2-initial/fido
+    mkdir -p ${D}${datadir}/pkgconfig
+
+    install -m 644 ${S}/src/fido.h ${D}${includedir}/libfido2-initial
+    install -m 644 ${S}/src/fido/* ${D}${includedir}/libfido2-initial/fido/
+
+    # Real libfido2 installs its pkg conf file in ${libdir}.
+    sed -e 's,@CMAKE_INSTALL_PREFIX@,${exec_prefix},' \
+        -e 's,@CMAKE_INSTALL_LIBDIR@,${baselib}/libfido2-initial,' \
+        -e 's,@FIDO_VERSION@,${PV},' \
+        -e 's,@PROJECT_NAME@,${BPN},' \
+        -e '/^Cflags/s,$,/libfido2-initial,' \
+        ${S}/src/libfido2.pc.in > ${D}${datadir}/pkgconfig/libfido2.pc
+
+}