mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2026-06-17 18:16:07 -05:00
Build: bundle matching FUSE library in AppImage
This commit is contained in:
+99
-7
@@ -331,7 +331,14 @@ INSTALL_DESKTOP ?= 1
|
|||||||
INSTALL_MIME ?= 1
|
INSTALL_MIME ?= 1
|
||||||
INSTALL_ICONS ?= 1
|
INSTALL_ICONS ?= 1
|
||||||
INSTALL_APPIMAGE_FILES ?= 1
|
INSTALL_APPIMAGE_FILES ?= 1
|
||||||
APPIMAGE_BUNDLE_FUSE2 ?= 1
|
# Keep the former FUSE2-specific override working for existing packaging scripts.
|
||||||
|
ifeq "$(origin APPIMAGE_BUNDLE_FUSE)" "undefined"
|
||||||
|
ifeq "$(origin APPIMAGE_BUNDLE_FUSE2)" "undefined"
|
||||||
|
APPIMAGE_BUNDLE_FUSE := 1
|
||||||
|
else
|
||||||
|
APPIMAGE_BUNDLE_FUSE := $(APPIMAGE_BUNDLE_FUSE2)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
# These override values are appended below usr and used in shell recipes.
|
# These override values are appended below usr and used in shell recipes.
|
||||||
# Keep command-line/environment overrides literal and path-like.
|
# Keep command-line/environment overrides literal and path-like.
|
||||||
@@ -430,25 +437,110 @@ endif
|
|||||||
ifneq "$(INSTALL_APPIMAGE_FILES)" "0"
|
ifneq "$(INSTALL_APPIMAGE_FILES)" "0"
|
||||||
rm -fr $(BASE_DIR)/Setup/Linux/veracrypt.AppDir/usr
|
rm -fr $(BASE_DIR)/Setup/Linux/veracrypt.AppDir/usr
|
||||||
cp -r $(BASE_DIR)/Setup/Linux/usr $(BASE_DIR)/Setup/Linux/veracrypt.AppDir/.
|
cp -r $(BASE_DIR)/Setup/Linux/usr $(BASE_DIR)/Setup/Linux/veracrypt.AppDir/.
|
||||||
ifneq "$(APPIMAGE_BUNDLE_FUSE2)" "0"
|
ifneq "$(APPIMAGE_BUNDLE_FUSE)" "0"
|
||||||
@set -e; \
|
@set -e; \
|
||||||
_appdir="$(BASE_DIR)/Setup/Linux/veracrypt.AppDir"; \
|
_appdir="$(BASE_DIR)/Setup/Linux/veracrypt.AppDir"; \
|
||||||
_fuse_lib="$$( (ldconfig -p 2>/dev/null || /sbin/ldconfig -p 2>/dev/null || true) | awk '/libfuse\.so\.2[[:space:]]/ { print $$NF; exit }')"; \
|
_fuse_soname=""; \
|
||||||
if [ -z "$$_fuse_lib" ]; then \
|
_fuse_lib=""; \
|
||||||
for _candidate in /lib64/libfuse.so.2 /usr/lib64/libfuse.so.2 /lib/libfuse.so.2 /usr/lib/libfuse.so.2 /lib/*/libfuse.so.2 /usr/lib/*/libfuse.so.2; do \
|
_fuse_link_name=""; \
|
||||||
|
_fuse_lib_prefix=""; \
|
||||||
|
case "$(VC_FUSE_PACKAGE)" in \
|
||||||
|
fuse3) _fuse_link_name="libfuse3.so"; _fuse_lib_prefix="libfuse3.so." ;; \
|
||||||
|
fuse) _fuse_link_name="libfuse.so"; _fuse_lib_prefix="libfuse.so." ;; \
|
||||||
|
esac; \
|
||||||
|
_fuse_soname_from_name() { \
|
||||||
|
printf '%s\n' "$$1" | awk '{ if (match($$0, /^libfuse(3)?\.so\.[0-9]+/)) { print substr($$0, RSTART, RLENGTH); exit } }'; \
|
||||||
|
}; \
|
||||||
|
_fuse_search_dirs() { \
|
||||||
|
$(PKG_CONFIG) --variable=libdir "$(VC_FUSE_PACKAGE)" 2>/dev/null || true; \
|
||||||
|
$(PKG_CONFIG) --libs-only-L "$(VC_FUSE_PACKAGE)" 2>/dev/null | tr ' ' '\n' | sed 's/^-L//' || true; \
|
||||||
|
printf '%s\n' /lib64 /usr/lib64 /lib /usr/lib /lib/* /usr/lib/*; \
|
||||||
|
}; \
|
||||||
|
if command -v readelf >/dev/null 2>&1; then \
|
||||||
|
_fuse_soname="$$(readelf -d "$$_appdir/usr/bin/$(APPNAME)" 2>/dev/null | awk -F'[][]' '/NEEDED/ && $$2 ~ /^libfuse(3)?\.so\./ { print $$2; exit }')"; \
|
||||||
|
fi; \
|
||||||
|
if [ -z "$$_fuse_soname" ] && [ -n "$$_fuse_link_name" ]; then \
|
||||||
|
for _candidate_dir in $$( _fuse_search_dirs ); do \
|
||||||
|
[ -n "$$_candidate_dir" ] || continue; \
|
||||||
|
_candidate="$$_candidate_dir/$$_fuse_link_name"; \
|
||||||
|
if [ -e "$$_candidate" ]; then \
|
||||||
|
_fuse_target="$$(readlink "$$_candidate" 2>/dev/null || true)"; \
|
||||||
|
_fuse_real="$$(readlink -f "$$_candidate" 2>/dev/null || true)"; \
|
||||||
|
if [ -n "$$_fuse_target" ]; then \
|
||||||
|
_fuse_soname="$$( _fuse_soname_from_name "$$(basename "$$_fuse_target")" )"; \
|
||||||
|
fi; \
|
||||||
|
if [ -z "$$_fuse_soname" ]; then \
|
||||||
|
if [ -n "$$_fuse_real" ]; then \
|
||||||
|
_fuse_soname="$$( _fuse_soname_from_name "$$(basename "$$_fuse_real")" )"; \
|
||||||
|
fi; \
|
||||||
|
fi; \
|
||||||
|
if [ -n "$$_fuse_soname" ]; then \
|
||||||
|
if [ -e "$$_candidate_dir/$$_fuse_soname" ]; then \
|
||||||
|
_fuse_lib="$$_candidate_dir/$$_fuse_soname"; \
|
||||||
|
elif [ -n "$$_fuse_real" ]; then \
|
||||||
|
_fuse_lib="$$_fuse_real"; \
|
||||||
|
fi; \
|
||||||
|
break; \
|
||||||
|
fi; \
|
||||||
|
fi; \
|
||||||
|
done; \
|
||||||
|
fi; \
|
||||||
|
if [ -z "$$_fuse_lib" ] && [ -z "$$_fuse_soname" ] && [ -n "$$_fuse_lib_prefix" ]; then \
|
||||||
|
_fuse_soname="$$( (ldconfig -p 2>/dev/null || /sbin/ldconfig -p 2>/dev/null || true) | awk -v prefix="$$_fuse_lib_prefix" 'index($$1, prefix) == 1 { print $$1; exit }')"; \
|
||||||
|
fi; \
|
||||||
|
if [ -z "$$_fuse_lib" ] && [ -z "$$_fuse_soname" ] && [ -n "$$_fuse_lib_prefix" ]; then \
|
||||||
|
for _candidate_dir in $$( _fuse_search_dirs ); do \
|
||||||
|
[ -n "$$_candidate_dir" ] || continue; \
|
||||||
|
for _candidate in "$$_candidate_dir"/"$$_fuse_lib_prefix"*; do \
|
||||||
|
if [ -e "$$_candidate" ]; then \
|
||||||
|
_fuse_soname="$$( _fuse_soname_from_name "$$(basename "$$_candidate")" )"; \
|
||||||
|
if [ -n "$$_fuse_soname" ]; then \
|
||||||
|
_fuse_lib="$$_candidate"; \
|
||||||
|
break; \
|
||||||
|
fi; \
|
||||||
|
fi; \
|
||||||
|
done; \
|
||||||
|
[ -n "$$_fuse_soname" ] && break; \
|
||||||
|
done; \
|
||||||
|
fi; \
|
||||||
|
if [ -z "$$_fuse_soname" ]; then \
|
||||||
|
case "$(VC_FUSE_PACKAGE)" in \
|
||||||
|
fuse) _fuse_soname="libfuse.so.2" ;; \
|
||||||
|
esac; \
|
||||||
|
fi; \
|
||||||
|
if [ -z "$$_fuse_lib" ] && [ -n "$$_fuse_soname" ]; then \
|
||||||
|
for _candidate_dir in $$( _fuse_search_dirs ); do \
|
||||||
|
[ -n "$$_candidate_dir" ] || continue; \
|
||||||
|
_candidate="$$_candidate_dir/$$_fuse_soname"; \
|
||||||
|
if [ -e "$$_candidate" ]; then _fuse_lib="$$_candidate"; break; fi; \
|
||||||
|
done; \
|
||||||
|
fi; \
|
||||||
|
if [ -z "$$_fuse_lib" ] && [ -n "$$_fuse_soname" ]; then \
|
||||||
|
_fuse_lib="$$( (ldconfig -p 2>/dev/null || /sbin/ldconfig -p 2>/dev/null || true) | awk -v soname="$$_fuse_soname" '$$1 == soname { print $$NF; exit }')"; \
|
||||||
|
fi; \
|
||||||
|
if [ -z "$$_fuse_lib" ] && [ -n "$$_fuse_soname" ]; then \
|
||||||
|
for _candidate in /lib64/"$$_fuse_soname" /usr/lib64/"$$_fuse_soname" /lib/"$$_fuse_soname" /usr/lib/"$$_fuse_soname" /lib/*/"$$_fuse_soname" /usr/lib/*/"$$_fuse_soname"; do \
|
||||||
if [ -e "$$_candidate" ]; then _fuse_lib="$$_candidate"; break; fi; \
|
if [ -e "$$_candidate" ]; then _fuse_lib="$$_candidate"; break; fi; \
|
||||||
done; \
|
done; \
|
||||||
fi; \
|
fi; \
|
||||||
if [ -n "$$_fuse_lib" ]; then \
|
if [ -n "$$_fuse_lib" ]; then \
|
||||||
echo "Bundling AppImage FUSE2 userspace library: $$_fuse_lib"; \
|
|
||||||
mkdir -p "$$_appdir/usr/lib"; \
|
mkdir -p "$$_appdir/usr/lib"; \
|
||||||
|
rm -f "$$_appdir/usr/lib"/libfuse.so "$$_appdir/usr/lib"/libfuse.so.* "$$_appdir/usr/lib"/libfuse3.so "$$_appdir/usr/lib"/libfuse3.so.*; \
|
||||||
|
echo "Bundling AppImage FUSE userspace library ($$_fuse_soname): $$_fuse_lib"; \
|
||||||
cp -P "$$_fuse_lib" "$$_appdir/usr/lib/"; \
|
cp -P "$$_fuse_lib" "$$_appdir/usr/lib/"; \
|
||||||
_fuse_real="$$(readlink -f "$$_fuse_lib" 2>/dev/null || true)"; \
|
_fuse_real="$$(readlink -f "$$_fuse_lib" 2>/dev/null || true)"; \
|
||||||
if [ -n "$$_fuse_real" ] && [ "$$_fuse_real" != "$$_fuse_lib" ]; then \
|
if [ -n "$$_fuse_real" ] && [ "$$_fuse_real" != "$$_fuse_lib" ]; then \
|
||||||
cp "$$_fuse_real" "$$_appdir/usr/lib/"; \
|
cp "$$_fuse_real" "$$_appdir/usr/lib/"; \
|
||||||
fi; \
|
fi; \
|
||||||
|
if [ -n "$$_fuse_real" ] && [ -n "$$_fuse_soname" ] && [ ! -e "$$_appdir/usr/lib/$$_fuse_soname" ]; then \
|
||||||
|
ln -s "$$(basename "$$_fuse_real")" "$$_appdir/usr/lib/$$_fuse_soname"; \
|
||||||
|
fi; \
|
||||||
else \
|
else \
|
||||||
echo "Warning: libfuse.so.2 not found; AppImage will rely on a host FUSE2 userspace library"; \
|
if [ -n "$$_fuse_soname" ]; then \
|
||||||
|
echo "Warning: $$_fuse_soname not found; AppImage will rely on a host FUSE userspace library"; \
|
||||||
|
else \
|
||||||
|
echo "Warning: FUSE userspace library not found; AppImage will rely on a host FUSE userspace library"; \
|
||||||
|
fi; \
|
||||||
fi
|
fi
|
||||||
endif
|
endif
|
||||||
ifneq "$(INSTALL_ICONS)" "0"
|
ifneq "$(INSTALL_ICONS)" "0"
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
APPDIR=$(dirname "$(readlink -f "$0")")
|
APPDIR=$(dirname "$(readlink -f "$0")")
|
||||||
|
|
||||||
# Prefer libraries bundled inside the AppImage. This lets the official
|
# Prefer libraries bundled inside the AppImage. This lets the official
|
||||||
# AppImage carry its private FUSE2 userspace library on systems where
|
# AppImage carry the FUSE userspace library required by its VeraCrypt binary
|
||||||
# libfuse.so.2 is no longer installed by default.
|
# on systems where that library is not installed by default.
|
||||||
if [ -d "${APPDIR}/usr/lib" ]; then
|
if [ -d "${APPDIR}/usr/lib" ]; then
|
||||||
if [ -n "${LD_LIBRARY_PATH:-}" ]; then
|
if [ -n "${LD_LIBRARY_PATH:-}" ]; then
|
||||||
export LD_LIBRARY_PATH="${APPDIR}/usr/lib:${LD_LIBRARY_PATH}"
|
export LD_LIBRARY_PATH="${APPDIR}/usr/lib:${LD_LIBRARY_PATH}"
|
||||||
|
|||||||
Reference in New Issue
Block a user