mailarchive of the ptxdist mailing list
 help / color / mirror / Atom feed
From: Clemens Gruber <clemens.gruber@pqgruber.com>
To: Michael Olbrich <m.olbrich@pengutronix.de>
Cc: ptxdist@pengutronix.de
Subject: Re: [ptxdist] [PATCH 1/3] hiredis: new package
Date: Mon, 7 Feb 2022 16:51:16 +0100	[thread overview]
Message-ID: <YgE/9H2fXw1PloPj@workstation> (raw)
In-Reply-To: <20220207152543.GA11273@pengutronix.de>

On Mon, Feb 07, 2022 at 04:25:43PM +0100, Michael Olbrich wrote:
> On Mon, Feb 07, 2022 at 04:22:43PM +0100, Michael Olbrich wrote:
> > On Mon, Feb 07, 2022 at 02:33:29PM +0100, Clemens Gruber wrote:
> > > On Mon, Feb 07, 2022 at 02:11:13PM +0100, Alexander Dahl wrote:
> > > > Am Mon, Feb 07, 2022 at 01:54:04PM +0100 schrieb Clemens Gruber:
> > > > > On Mon, Feb 07, 2022 at 11:39:10AM +0100, Alexander Dahl wrote:
> > > > > > On Mon, Feb 07, 2022 at 10:03:21AM +0100, Clemens Gruber wrote:
> > > > > > > On Mon, Feb 07, 2022 at 08:39:36AM +0100, Michael Olbrich wrote:
> > > > > > > > On Fri, Feb 04, 2022 at 05:28:07PM +0100, Clemens Gruber wrote:
> > > > > > > > > Adds a new package for hiredis, a minimalistic C client library for
> > > > > > > > > Redis.
> > > > > > > > > 
> > > > > > > > > Signed-off-by: Clemens Gruber <clemens.gruber@pqgruber.com>
> > > > > > > > > ---
> > > > > > > > >  rules/hiredis.in   |  8 ++++++
> > > > > > > > >  rules/hiredis.make | 61 ++++++++++++++++++++++++++++++++++++++++++++++
> > > > > > > > >  2 files changed, 69 insertions(+)
> > > > > > > > >  create mode 100644 rules/hiredis.in
> > > > > > > > >  create mode 100644 rules/hiredis.make
> > > > > > > > > 
> > > > > > > > > diff --git a/rules/hiredis.in b/rules/hiredis.in
> > > > > > > > > new file mode 100644
> > > > > > > > > index 000000000..d416d69c4
> > > > > > > > > --- /dev/null
> > > > > > > > > +++ b/rules/hiredis.in
> > > > > > > > > @@ -0,0 +1,8 @@
> > > > > > > > > +## SECTION=system_libraries
> > > > > > > > > +
> > > > > > > > > +config HIREDIS
> > > > > > > > > +	tristate
> > > > > > > > > +	select HOST_CMAKE
> > > > > > > > > +	prompt "hiredis                       "
> > > > > > > > > +	help
> > > > > > > > > +	  Hiredis is a minimalistic C client library for the Redis database.
> > > > > > > > > diff --git a/rules/hiredis.make b/rules/hiredis.make
> > > > > > > > > new file mode 100644
> > > > > > > > > index 000000000..10e6d81d2
> > > > > > > > > --- /dev/null
> > > > > > > > > +++ b/rules/hiredis.make
> > > > > > > > > @@ -0,0 +1,61 @@
> > > > > > > > > +# -*-makefile-*-
> > > > > > > > > +#
> > > > > > > > > +# Copyright (C) 2022 by Clemens Gruber <clemens.gruber@pqgruber.com>
> > > > > > > > > +#
> > > > > > > > > +# For further information about the PTXdist project and license conditions
> > > > > > > > > +# see the README file.
> > > > > > > > > +#
> > > > > > > > > +
> > > > > > > > > +#
> > > > > > > > > +# We provide this package
> > > > > > > > > +#
> > > > > > > > > +PACKAGES-$(PTXCONF_HIREDIS) += hiredis
> > > > > > > > > +
> > > > > > > > > +#
> > > > > > > > > +# Paths and names
> > > > > > > > > +#
> > > > > > > > > +HIREDIS_VERSION	:= 1.0.2
> > > > > > > > > +HIREDIS_MD5	:= 58e8313188f66ed1be1c220d14a7752e
> > > > > > > > > +HIREDIS		:= hiredis-$(HIREDIS_VERSION)
> > > > > > > > > +HIREDIS_SUFFIX	:= tar.gz
> > > > > > > > > +HIREDIS_URL	:= https://github.com/redis/hiredis/archive/v$(HIREDIS_VERSION).$(HIREDIS_SUFFIX)
> > > > > > > > > +HIREDIS_SOURCE	:= $(SRCDIR)/$(HIREDIS).$(HIREDIS_SUFFIX)
> > > > > > > > > +HIREDIS_DIR	:= $(BUILDDIR)/$(HIREDIS)
> > > > > > > > > +HIREDIS_LICENSE	:= BSD-3-Clause
> > > > > > > > 
> > > > > > > > Please add _LICENSE_FILES as well.
> > > > > > > > 
> > > > > > > > > +
> > > > > > > > > +# ----------------------------------------------------------------------------
> > > > > > > > > +# Prepare
> > > > > > > > > +# ----------------------------------------------------------------------------
> > > > > > > > > +
> > > > > > > > > +#
> > > > > > > > > +# cmake
> > > > > > > > > +#
> > > > > > > > > +HIREDIS_CONF_TOOL	:= cmake
> > > > > > > > > +
> > > > > > > > > +HIREDIS_CONF_OPT	:= \
> > > > > > > > > +	$(CROSS_CMAKE_USR) \
> > > > > > > > > +	-DDISABLE_TESTS=ON \
> > > > > > > > > +	-DENABLE_SSL=OFF
> > > > > > > > > +
> > > > > > > > > +
> > > > > > > > > +# ----------------------------------------------------------------------------
> > > > > > > > > +# Target-Install
> > > > > > > > > +# ----------------------------------------------------------------------------
> > > > > > > > > +
> > > > > > > > > +$(STATEDIR)/hiredis.targetinstall:
> > > > > > > > > +	@$(call targetinfo)
> > > > > > > > > +
> > > > > > > > > +	@$(call install_init, hiredis)
> > > > > > > > > +	@$(call install_fixup, hiredis,PRIORITY,optional)
> > > > > > > > > +	@$(call install_fixup, hiredis,SECTION,base)
> > > > > > > > > +	@$(call install_fixup, hiredis,AUTHOR,"Clemens Gruber <clemens.gruber@pqgruber.com>")
> > > > > > > > > +	@$(call install_fixup, hiredis,DESCRIPTION,"Minimalistic C client for Redis")
> > > > > > > > > +
> > > > > > > > > +	@$(call install_lib, hiredis, 0, 0, 0644, libhiredis)
> > > > > > > > > +	@$(call install_link, hiredis, libhiredis.so.1.0.0, /usr/lib/libhiredis.so)
> > > > > > > > 
> > > > > > > > In general, this link should not be needed. If it really is needed then
> > > > > > > > please add a comment why.
> > > > > > > 
> > > > > > > Maybe you can help me out here: If I don't call install_link, the
> > > > > > > libhiredis.so link is not present in my rootfs image, even though it is
> > > > > > > present in platform-xyz/packages/hiredis-1.0.2/usr/lib and in
> > > > > > > platform-xyz/root/usr/lib
> > > > > > 
> > > > > > I would expect this. Usually you have three pieces:
> > > > > > 
> > > > > > libfoo.so.1.0.0 (real binary file)
> > > > > > libfoo.so.1 (symlink to libfoo.so.1.0.0, used at runtime by users of the lib)
> > > > > > libfoo.so (symlink, used at build time)
> > > > > > 
> > > > > > > Still in my rootfs image, there is only /usr/lib/libhiredis.so.1.0.0
> > > > > > > It is a normal root.ext2 image with ext2fs type ext4.
> > > > > > > 
> > > > > > > Any idea why that is?
> > > > > > 
> > > > > > No idea why that is, but without further knowledge of that lib I would
> > > > > > expect to see libhiredis.so.1 on the target instead of libhiredis.so
> > > > > > (which is probably only needed in sysroot-target).
> > > > > 
> > > > > I forgot to mention that the libhiredis.so.1 link is also created in
> > > > > platform-xyz/packages/.. and platform-xyz/root/..
> > > > > I should probably have added the create_link for that one as well but
> > > > > did not need it because a binary blob not under my control dynloads
> > > > > /usr/lib/libhiredis.so
> > > 
> > > I have to correct myself here: The libhiredis.so.1 is not created and
> > > not present in platform-xyz/root or platform-xyz/packages/hiredis-1.0.2
> > > This was a leftover from tests/experiments of mine.
> > > 
> > > > This sound like a flaw in that binary blob?!  That ".1" usually marks
> > > > the so version and different numbers are not necessarily compatible,
> > > > so by loading libhiredis.so you are at risk of loading an incompatible
> > > > library?
> > > 
> > > Yes, you are right. This could lead to problems in the future.
> > > 
> > > > 
> > > > > Maybe Michael can shed some light on why the links are not present in
> > > > > the rootfs.
> > > > 
> > > > Maybe libhiredis makes something different than usual. Haven't looked
> > > > into it. O:-)
> > > 
> > > It seems the libhiredis cmake config only sets VERSION but not
> > > SOVERSION, so SOVERSION is assumed to be 1.0.0 as well, which explains
> > > why there is only one symlink, but not why that one is not present in
> > > the rootfs.
> > 
> > Lets see what exactly is needed first. What's the output of:
> > 
> > readelf -d platform-xyz/packages/hiredis-1.0.2/usr/lib/libhiredis.so.1.0.0
> > 
> > If the library is created correctly then there should be something like:
> > [...]
> >  0x000000000000000e (SONAME)             Library soname: [libhiredis.so.1]
> > [...]
> > 
> > The linker (at build-time) will take that and write it into the user of the
> > library, so this link is needed at runtime.

readelf -d of libhiredis.so.1.0.0 returns:
[...]
 0x0000000e (SONAME)                     Library soname: [libhiredis.so.1.0.0]
[...]

> 
> On Debian I see:
>  0x000000000000000e (SONAME)             Library soname: [libhiredis.so.1.0.0]
> 
> So you probably don't need any symlinks at runtime.
> Check the 'NEEDED' entry in the 'readelf -d' output of the application that
> uses the library.
> 
> Michael

An application of ours that uses it has the following NEEDED entry:
 0x00000001 (NEEDED)                     Shared library: [libhiredis.so.1.0.0]

It does in fact work as is! I just tested it. The problem with the
binary blob is solvable on our end.

And ptxdist_install_shared already ignores the .so links because they are only
needed at build time.. makes sense!

Thanks for your help,
Clemens

_______________________________________________
ptxdist mailing list
ptxdist@pengutronix.de
To unsubscribe, send a mail with subject "unsubscribe" to ptxdist-request@pengutronix.de


  reply	other threads:[~2022-02-07 15:51 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-04 16:28 Clemens Gruber
2022-02-04 16:28 ` [ptxdist] [PATCH 2/3] systemd: add option for openssl support Clemens Gruber
2022-02-14 12:43   ` [ptxdist] [APPLIED] " Michael Olbrich
2022-02-04 16:28 ` [ptxdist] [PATCH 3/3] protobuf: version bump 3.7.1 -> 3.19.4 Clemens Gruber
2022-02-11  9:43   ` Michael Olbrich
2022-02-11 14:30     ` Clemens Gruber
2022-02-07  7:39 ` [ptxdist] [PATCH 1/3] hiredis: new package Michael Olbrich
2022-02-07  9:03   ` Clemens Gruber
2022-02-07 10:39     ` Alexander Dahl
2022-02-07 12:54       ` Clemens Gruber
2022-02-07 13:11         ` Alexander Dahl
2022-02-07 13:33           ` Clemens Gruber
2022-02-07 15:22             ` Michael Olbrich
2022-02-07 15:25               ` Michael Olbrich
2022-02-07 15:51                 ` Clemens Gruber [this message]
2022-02-07 16:30             ` Alexander Dahl

Reply instructions:

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

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

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

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

  git send-email \
    --in-reply-to=YgE/9H2fXw1PloPj@workstation \
    --to=clemens.gruber@pqgruber.com \
    --cc=m.olbrich@pengutronix.de \
    --cc=ptxdist@pengutronix.de \
    /path/to/YOUR_REPLY

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

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