toolchain: copy_toolchain_lib_root: copy symlinks instead of recreating them
authorThomas De Schampheleire <thomas.de_schampheleire@nokia.com>
Tue, 7 Feb 2017 21:56:49 +0000 (22:56 +0100)
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Wed, 5 Apr 2017 19:33:43 +0000 (21:33 +0200)
copy_toolchain_lib_root handles symlinks by recreating them, disregarding
the original destination and assuming the destination is in the same
directory as the link itself.
When a library link points to the real library file in another directory,
for example:
    usr/lib/octeon2/libcrypt.so -> ../../../lib32/octeon2/libcrypt.so.1
then the link created by copy_toolchain_lib_root is broken.

It is more robust to copy the symlink to keep the destination intact. The
destination path should be present, possibly through other symbolic links.

Signed-off-by: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
toolchain/helpers.mk

index e83bf272e764545b638ce2f57e9e8b988eb653b5..5af38c64210f8d306c052e2df09819eef9fcbd6a 100644 (file)
@@ -19,8 +19,7 @@ copy_toolchain_lib_root = \
                        LIBNAME=`basename $${LIBPATH}`; \
                        rm -fr $(TARGET_DIR)/$${DESTDIR}/$${LIBNAME}; \
                        if test -h $${LIBPATH} ; then \
-                               LINKTARGET=`readlink $${LIBPATH}` ; \
-                               ln -sf `basename $${LINKTARGET}` $(TARGET_DIR)/$${DESTDIR}/$${LIBNAME} ; \
+                               cp -d $${LIBPATH} $(TARGET_DIR)/$${DESTDIR}/$${LIBNAME}; \
                                LIBPATH="`readlink -f $${LIBPATH}`"; \
                        elif test -f $${LIBPATH}; then \
                                $(INSTALL) -D -m0755 $${LIBPATH} $(TARGET_DIR)/$${DESTDIR}/$${LIBNAME}; \