[Buildroot] [PATCH v2 4/4] package/libfuse: common files from libfuse3 are prefered

Norbert Lange nolange79 at gmail.com
Fri Mar 15 13:30:33 UTC 2019


if both libfuse and libfuse3 are co-installed,
make sure libfuse3 will be build first and
only install the files unique to libfuse.

The fusermount tool is a simlink to fusermount3,
mimicing debians approach. fuse device and udev rule
is identicall between packages and only one definition
is needed

see the libfuse3 Changelog for 3.0.0 for details.

Signed-off-by: Norbert Lange <norbert.lange at andritz.com>
---
 package/libfuse/libfuse.mk | 35 ++++++++++++++++++++++++++++++-----
 1 file changed, 30 insertions(+), 5 deletions(-)

diff --git a/package/libfuse/libfuse.mk b/package/libfuse/libfuse.mk
index 84027ebedb..a0a00a6532 100644
--- a/package/libfuse/libfuse.mk
+++ b/package/libfuse/libfuse.mk
@@ -10,20 +10,44 @@ LIBFUSE_SITE = https://github.com/libfuse/libfuse/releases/download/fuse-$(LIBFU
 LIBFUSE_LICENSE = GPL-2.0, LGPL-2.1
 LIBFUSE_LICENSE_FILES = COPYING COPYING.LIB
 LIBFUSE_INSTALL_STAGING = YES
-LIBFUSE_DEPENDENCIES = $(if $(BR2_PACKAGE_LIBICONV),libiconv)
+LIBFUSE_DEPENDENCIES = $(if $(BR2_PACKAGE_LIBICONV),libiconv) $(if $(BR2_PACKAGE_LIBFUSE3),libfuse3)
 LIBFUSE_CONF_OPTS = \
 	--disable-example \
 	--enable-lib \
 	--enable-util \
 	UDEV_RULES_PATH=/lib/udev/rules.d
 
-define LIBFUSE_INSTALL_TARGET_CMDS
-	cp -dpf $(STAGING_DIR)/usr/bin/fusermount $(TARGET_DIR)/usr/bin/
-	cp -dpf $(STAGING_DIR)/usr/lib/libfuse.so* $(TARGET_DIR)/usr/lib/
+# From libfuse3 README:
+# libfuse 3 is designed to be co-installable with libfuse 2. However, some
+# files will be installed by both libfuse 2 and libfuse 3
+# (e.g. /etc/fuse.conf, the udev and init scripts, and the mount.fuse(8) manpage).
+# These files should be taken from libfuse 3. The format/content is guaranteed
+# to remain backwards compatible with libfuse 2.
+#
+# The way we handle this is to let libfuse3 install as usual,
+# but libfuse has to be carefull to not overwrite any common files.
+# Also some files are named diferently (udev-rules),
+# but only the newer is needed.
+# To ensure this, we install in a temporary directory and
+# hand-pick the few unique files
+
+LIBFUSE_INSTALL_TARGET_OPTS = install DESTDIR=$(@D)/tmpinstall
+
+define LIBFUSE_INSTALL_TARGET_POST
+	cp -dpf $(@D)/tmpinstall/usr/lib/libfuse.so* $(TARGET_DIR)/usr/lib/
+endef
+
+LIBFUSE_POST_INSTALL_TARGET_HOOKS += LIBFUSE_INSTALL_TARGET_POST
+
+ifeq ($(BR2_PACKAGE_LIBFUSE3),)
+define LIBFUSE_INSTALL_TARGET_POST_COMMON
+	$(INSTALL) -D -m 0755 $(@D)/tmpinstall/usr/bin/fusermount $(TARGET_DIR)/usr/bin/fusermount
 	mkdir -p $(TARGET_DIR)/lib/udev/rules.d
-	cp $(STAGING_DIR)/lib/udev/rules.d/*-fuse.rules $(TARGET_DIR)/lib/udev/rules.d
+	cp $(@D)/tmpinstall/lib/udev/rules.d/*-fuse.rules $(TARGET_DIR)/lib/udev/rules.d
 endef
 
+LIBFUSE_POST_INSTALL_TARGET_HOOKS += LIBFUSE_INSTALL_TARGET_POST_COMMON
+
 define LIBFUSE_DEVICES
 	/dev/fuse  c  666  0  0  10  229  0  0  -
 endef
@@ -31,5 +55,6 @@ endef
 define LIBFUSE_PERMISSIONS
 	/usr/bin/fusermount f 4755 0 0 - - - - -
 endef
+endif
 
 $(eval $(autotools-package))
-- 
2.20.1




More information about the buildroot mailing list