toolchain/toolchain-external: handle case of dangling symlink

copy_toolchain_lib_root was not handling the case of "readlink"
returning nothing, which will happen if the symlink it is trying to
resolve does not point to a valid file on the build host. This
shouldn't happen, but it can.

The end result of this situation would be an endless loop of error
messages that would only end if aborted manually.

    [...]
    cp: missing destination file operand after
    '/local/users/mmayer/buildroot/output/arm64/target//'
    Try 'cp --help' for more information.
    readlink: missing operand
    Try 'readlink --help' for more information.
    basename: missing operand
    Try 'basename --help' for more information.
    dirname: missing operand
    Try 'dirname --help' for more information.
    ^C
    make[1]: *** [package/pkg-generic.mk:384:

Instead of looping endlessly without explanation, let's abort and
inform the user that something seems amiss with their setup.

Signed-off-by: Markus Mayer <mmayer@broadcom.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2023.02.x
Markus Mayer 2022-06-24 15:19:01 -07:00 committed by Thomas Petazzoni
parent d5599cb1b4
commit b11ed25c4a
1 changed files with 5 additions and 0 deletions

View File

@ -19,7 +19,12 @@ copy_toolchain_lib_root = \
rm -fr $(TARGET_DIR)/$${DESTDIR}/$${LIBNAME}; \
if test -h $${LIBPATH} ; then \
cp -d $${LIBPATH} $(TARGET_DIR)/$${DESTDIR}/$${LIBNAME}; \
OLD_LIBPATH="$${LIBPATH}"; \
LIBPATH="`readlink -f $${LIBPATH}`"; \
if [ "$${LIBPATH}" = "" ]; then \
echo "LIBPATH empty after trying to resolve symlink $${OLD_LIBPATH}" 1>&2; \
exit 1; \
fi; \
elif test -f $${LIBPATH}; then \
$(INSTALL) -D -m0755 $${LIBPATH} $(TARGET_DIR)/$${DESTDIR}/$${LIBNAME}; \
break ; \