From: Antoine Tenart <antoine.tenart@bootlin.com>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH] package/linux-firmware: fix special cases of symlinks
Date: Wed, 4 Mar 2020 19:37:54 +0100 [thread overview]
Message-ID: <20200304183754.GL3179@kwain> (raw)
In-Reply-To: <20200304170009.GA5357@scaer>
Hi Yann,
On Wed, Mar 04, 2020 at 06:00:09PM +0100, Yann E. MORIN wrote:
> On 2020-03-04 11:53 +0100, Antoine Tenart spake thusly:
> > diff --git a/package/linux-firmware/linux-firmware.mk b/package/linux-firmware/linux-firmware.mk
> > index 009202d604d4..e367d4c5e7b8 100644
> > --- a/package/linux-firmware/linux-firmware.mk
> > +++ b/package/linux-firmware/linux-firmware.mk
> > @@ -609,13 +609,24 @@ endif
> > # automatically by its copy-firmware.sh script during the installation, which
> > # parses the WHENCE file where symlinks are described. We follow the same logic
> > # here, adding symlink only for firmwares installed in the target directory.
> > -# The grep/sed parsing is taken from the script mentioned before.
> > +#
> > +# For testing the presence of firmwares in the target directory we first make
> > +# sure the directories under which the symlinks could be created exist, to
> > +# handle symlinks of the form a/foo -> ../b/foo where a/ doesn't exist. We then
> > +# remove any previously created empty directory. As the symlinks could be in
> > +# nested (empty) directories, we use the --parents option of rmdir; this is why
> > +# we're changing the current directory to $(TARGET_DIR)/lib/firmware/ before
> > +# doing anything.
> > define LINUX_FIRMWARE_CREATE_SYMLINKS
> > + cd $(TARGET_DIR)/lib/firmware/ ; \
> > sed -r -e '/^Link: (.+) -> (.+)$$/!d; s//\1 \2/' $(@D)/WHENCE | \
> > while read f d; do \
> > - if test -f $(TARGET_DIR)/lib/firmware/$$d; then \
> > - ln -sf $$d $(TARGET_DIR)/lib/firmware/$$f || exit 1; \
> > + dir=$$(dirname $$f) ; \
> > + mkdir -p $$dir ; \
> > + if test -f $$dir/$$d; then \
> > + ln -sf $$d $$f || exit 1; \
> > fi ; \
> > + test "$$dir" != "." && rmdir --parents --ignore-fail-on-non-empty $$dir ; \
>
> I was not too happy about this create-a-directory-then-remove-it-if-it-turned-
> out-we-did-not-need-it dance.
>
> So, I hacked it, using readlink -m, and come up with something that I
> think is simpler and easier to grok:
>
> https://patchwork.ozlabs.org/patch/1249126/
I considered `readlink -m`, but its man pages says: "Note realpath(1) is
the preferred command to use for canonicalization functionality". So I
could have used realpath, but to use it I would have to define a
dependency on host-coreutils... which seemed a bit overkill. That's why
I move to a create-then-remove solution which I agree isn't perfect :-)
> I think even the cd into the firmware directory was not even needed, but
> I firgit to remove it to test...
Right, you can drop the cd statement (you have to use the full path in
the ln command then).
Thanks,
Antoine
--
Antoine T?nart, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2020-03-04 18:37 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-04 10:53 [Buildroot] [PATCH] package/linux-firmware: fix special cases of symlinks Antoine Tenart
2020-03-04 17:00 ` Yann E. MORIN
2020-03-04 18:37 ` Antoine Tenart [this message]
2020-03-04 18:54 ` Yann E. MORIN
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=20200304183754.GL3179@kwain \
--to=antoine.tenart@bootlin.com \
--cc=buildroot@busybox.net \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.