mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2026-05-21 21:30:48 -05:00
9535e65bd8
* ensure reproducible builds * improve patch * improve patch * Narrow reproducibility scope to legacy and DEB Keep the verified Linux legacy Makefile and DEB reproducibility paths, but remove the unverified RPM/openSUSE timestamp changes and AppImage reproducibility behavior from this PR. The CPack mtime/mode clamp is now installed only for Debian/Ubuntu packaging, matching the scope covered by the provided reproducibility logs. Retain umask 022 in the RPM/openSUSE wrappers so staged package permissions do not depend on a restrictive caller umask. * Harden reproducible build cleanup Validate SOURCE_DATE_EPOCH before interpolating it into Make, CMake or shell packaging paths. Refuse live DESTDIR values in the CPack mtime clamp and pass makeself options through normal argv construction instead of eval. --------- Co-authored-by: curious-rabbit <curious-rabbit@local> Co-authored-by: Mounir IDRASSI <mounir.idrassi@amcrypto.jp>
569 lines
24 KiB
Makefile
Executable File
569 lines
24 KiB
Makefile
Executable File
#
|
|
# Derived from source code of TrueCrypt 7.1a, which is
|
|
# Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
|
|
# by the TrueCrypt License 3.0.
|
|
#
|
|
# Modifications and additions to the original source code (contained in this file)
|
|
# and all other portions of this file are Copyright (c) 2013-2017 AM Crypto
|
|
# and are governed by the Apache License 2.0 the full text of which is
|
|
# contained in the file License.txt included in VeraCrypt binary and source
|
|
# code distribution packages.
|
|
#
|
|
|
|
OBJS :=
|
|
OBJS += Application.o
|
|
OBJS += CommandLineInterface.o
|
|
OBJS += FavoriteVolume.o
|
|
OBJS += LanguageStrings.o
|
|
OBJS += StringFormatter.o
|
|
OBJS += TextUserInterface.o
|
|
OBJS += UserInterface.o
|
|
OBJS += UserPreferences.o
|
|
OBJS += Xml.o
|
|
OBJS += Unix/Main.o
|
|
OBJS += Resources.o
|
|
|
|
ifndef TC_NO_GUI
|
|
OBJS += FatalErrorHandler.o
|
|
OBJS += GraphicUserInterface.o
|
|
OBJS += VolumeHistory.o
|
|
OBJS += Forms/AboutDialog.o
|
|
OBJS += Forms/BenchmarkDialog.o
|
|
OBJS += Forms/ChangePasswordDialog.o
|
|
OBJS += Forms/DeviceSelectionDialog.o
|
|
OBJS += Forms/EncryptionOptionsWizardPage.o
|
|
OBJS += Forms/EncryptionTestDialog.o
|
|
OBJS += Forms/FavoriteVolumesDialog.o
|
|
OBJS += Forms/Forms.o
|
|
OBJS += Forms/InfoWizardPage.o
|
|
OBJS += Forms/KeyfileGeneratorDialog.o
|
|
OBJS += Forms/KeyfilesDialog.o
|
|
OBJS += Forms/KeyfilesPanel.o
|
|
OBJS += Forms/LegalNoticesDialog.o
|
|
OBJS += Forms/MainFrame.o
|
|
OBJS += Forms/MountOptionsDialog.o
|
|
OBJS += Forms/NewSecurityTokenKeyfileDialog.o
|
|
OBJS += Forms/PreferencesDialog.o
|
|
OBJS += Forms/ProgressWizardPage.o
|
|
OBJS += Forms/RandomPoolEnrichmentDialog.o
|
|
OBJS += Forms/SecurityTokenKeyfilesDialog.o
|
|
OBJS += Forms/SelectDirectoryWizardPage.o
|
|
OBJS += Forms/VolumePasswordPanel.o
|
|
OBJS += Forms/VolumePropertiesDialog.o
|
|
OBJS += Forms/VolumeCreationProgressWizardPage.o
|
|
OBJS += Forms/VolumeCreationWizard.o
|
|
OBJS += Forms/VolumeFormatOptionsWizardPage.o
|
|
OBJS += Forms/VolumeLocationWizardPage.o
|
|
OBJS += Forms/VolumePasswordWizardPage.o
|
|
OBJS += Forms/VolumePimWizardPage.o
|
|
OBJS += Forms/VolumeSizeWizardPage.o
|
|
OBJS += Forms/WaitDialog.o
|
|
OBJS += Forms/WizardFrame.o
|
|
endif
|
|
|
|
ifndef DISABLE_PRECOMPILED_HEADERS
|
|
PCH := SystemPrecompiled.h.gch
|
|
endif
|
|
|
|
RESOURCES :=
|
|
RESOURCES += ../License.txt.h
|
|
RESOURCES += ../Common/Language.xml.h
|
|
ifndef TC_NO_GUI
|
|
RESOURCES += ../Common/Textual_logo_96dpi.bmp.h
|
|
RESOURCES += ../Format/VeraCrypt_Wizard.bmp.h
|
|
RESOURCES += ../Mount/Drive_icon_96dpi.bmp.h
|
|
RESOURCES += ../Mount/Drive_icon_mask_96dpi.bmp.h
|
|
RESOURCES += ../Mount/Logo_96dpi.bmp.h
|
|
endif
|
|
|
|
CXXFLAGS += -I$(BASE_DIR)/Main
|
|
|
|
|
|
#------ wxWidgets configuration ------
|
|
|
|
ifdef TC_NO_GUI
|
|
WX_CONFIG_LIBS := base
|
|
else
|
|
WX_CONFIG_LIBS := adv,core,base
|
|
endif
|
|
|
|
ifeq "$(TC_BUILD_CONFIG)" "Release"
|
|
|
|
CXXFLAGS += $(shell $(WX_CONFIG) $(WX_CONFIG_ARGS) --cxxflags)
|
|
WX_LIBS = $(shell $(WX_CONFIG) $(WX_CONFIG_ARGS) --libs $(WX_CONFIG_LIBS))
|
|
|
|
else
|
|
|
|
CXXFLAGS += $(shell $(WX_CONFIG) --debug $(WX_CONFIG_ARGS) --cxxflags)
|
|
WX_LIBS = $(shell $(WX_CONFIG) --debug $(WX_CONFIG_ARGS) --libs $(WX_CONFIG_LIBS))
|
|
|
|
endif
|
|
|
|
|
|
#------ FUSE configuration ------
|
|
|
|
FUSE_LIBS = $(shell $(PKG_CONFIG) $(VC_FUSE_PACKAGE) --libs)
|
|
|
|
#------ Executable ------
|
|
|
|
export TC_VERSION := $(shell grep VERSION_STRING ../Common/Tcdefs.h | head -n 1 | cut -d'"' -f 2)
|
|
|
|
#------ Linux package naming ------
|
|
ifeq "$(PLATFORM)" "Linux"
|
|
|
|
ifdef TC_NO_GUI
|
|
INSTALLER_TYPE := console
|
|
ifeq "$(origin NOSSE2)" "command line"
|
|
PACKAGE_NAME := $(APPNAME)_$(TC_VERSION)_console_$(PLATFORM_ARCH)_legacy.tar.gz
|
|
else
|
|
PACKAGE_NAME := $(APPNAME)_$(TC_VERSION)_console_$(PLATFORM_ARCH).tar.gz
|
|
endif
|
|
else
|
|
INSTALLER_TYPE := gui
|
|
ifeq "$(origin NOSSE2)" "command line"
|
|
PACKAGE_NAME := $(APPNAME)_$(TC_VERSION)_$(PLATFORM_ARCH)_legacy.tar.gz
|
|
else
|
|
PACKAGE_NAME := $(APPNAME)_$(TC_VERSION)_$(PLATFORM_ARCH).tar.gz
|
|
endif
|
|
endif
|
|
|
|
# Determine GUI/GTK conditions
|
|
GUI_CONDITION := $(filter gui,$(INSTALLER_TYPE))
|
|
GTK2_CONDITION := $(filter 2,$(GTK_VERSION))
|
|
|
|
ifeq "$(origin NOSSE2)" "command line"
|
|
INTERNAL_INSTALLER_NAME := veracrypt_install_$(INSTALLER_TYPE)_$(CPU_ARCH)_legacy.sh
|
|
|
|
ifneq (,$(GUI_CONDITION))
|
|
ifneq (,$(GTK2_CONDITION))
|
|
INSTALLER_NAME := veracrypt-$(TC_VERSION)-setup-gtk2-gui-$(CPU_ARCH)-legacy
|
|
else
|
|
INSTALLER_NAME := veracrypt-$(TC_VERSION)-setup-$(INSTALLER_TYPE)-$(CPU_ARCH)-legacy
|
|
endif
|
|
else
|
|
INSTALLER_NAME := veracrypt-$(TC_VERSION)-setup-$(INSTALLER_TYPE)-$(CPU_ARCH)-legacy
|
|
endif
|
|
|
|
else
|
|
INTERNAL_INSTALLER_NAME := veracrypt_install_$(INSTALLER_TYPE)_$(CPU_ARCH).sh
|
|
|
|
ifneq (,$(GUI_CONDITION))
|
|
ifneq (,$(GTK2_CONDITION))
|
|
INSTALLER_NAME := veracrypt-$(TC_VERSION)-setup-gtk2-gui-$(CPU_ARCH)
|
|
else
|
|
INSTALLER_NAME := veracrypt-$(TC_VERSION)-setup-$(INSTALLER_TYPE)-$(CPU_ARCH)
|
|
endif
|
|
else
|
|
INSTALLER_NAME := veracrypt-$(TC_VERSION)-setup-$(INSTALLER_TYPE)-$(CPU_ARCH)
|
|
endif
|
|
|
|
endif
|
|
|
|
endif
|
|
#-----------------------------------
|
|
|
|
#------ FreeBSD package naming ------
|
|
ifeq "$(PLATFORM)" "FreeBSD"
|
|
|
|
SYSTEMNAME = $(shell uname -n)
|
|
|
|
ifdef TC_NO_GUI
|
|
INSTALLER_TYPE := console
|
|
PACKAGE_NAME := $(APPNAME)_$(TC_VERSION)_$(SYSTEMNAME)_console_$(PLATFORM_ARCH).tar.gz
|
|
else
|
|
INSTALLER_TYPE := gui
|
|
PACKAGE_NAME := $(APPNAME)_$(TC_VERSION)_$(SYSTEMNAME)_$(PLATFORM_ARCH).tar.gz
|
|
endif
|
|
|
|
# Determine GUI/GTK conditions
|
|
GUI_CONDITION := $(filter gui,$(INSTALLER_TYPE))
|
|
GTK2_CONDITION := $(filter 2,$(GTK_VERSION))
|
|
|
|
INTERNAL_INSTALLER_NAME := veracrypt_install_$(SYSTEMNAME)_$(INSTALLER_TYPE)_$(CPU_ARCH).sh
|
|
|
|
ifneq (,$(GUI_CONDITION))
|
|
ifneq (,$(GTK2_CONDITION))
|
|
INSTALLER_NAME := veracrypt-$(TC_VERSION)-$(SYSTEMNAME)-setup-gtk2-gui-$(CPU_ARCH)
|
|
else
|
|
INSTALLER_NAME := veracrypt-$(TC_VERSION)-$(SYSTEMNAME)-setup-$(INSTALLER_TYPE)-$(CPU_ARCH)
|
|
endif
|
|
else
|
|
INSTALLER_NAME := veracrypt-$(TC_VERSION)-$(SYSTEMNAME)-setup-$(INSTALLER_TYPE)-$(CPU_ARCH)
|
|
endif
|
|
|
|
endif
|
|
#-----------------------------------
|
|
|
|
# Probe strip --enable-deterministic-archives against a private object
|
|
# rather than "-V" (which can fail in getopt before printing). All
|
|
# platforms, so non-Linux behaviour matches the original PR.
|
|
STRIP_DETERMINISTIC := $(strip $(shell d=$$(mktemp -d 2>/dev/null) && printf 'int x;\n' | $(CC) -x c -c - -o "$$d/o.o" >/dev/null 2>&1 && strip --enable-deterministic-archives "$$d/o.o" >/dev/null 2>&1 && echo --enable-deterministic-archives; rm -rf "$$d"))
|
|
|
|
$(APPNAME): $(LIBS) $(OBJS)
|
|
@echo Linking $@
|
|
$(CXX) -o $(APPNAME) $(OBJS) $(LIBS) $(AYATANA_LIBS) $(FUSE_LIBS) $(WX_LIBS) $(LFLAGS)
|
|
|
|
ifeq "$(TC_BUILD_CONFIG)" "Release"
|
|
ifndef NOSTRIP
|
|
strip $(STRIP_DETERMINISTIC) $(APPNAME)
|
|
endif
|
|
|
|
ifndef NOTEST
|
|
./$(APPNAME) --text --test >/dev/null || exit 1
|
|
endif
|
|
|
|
ifeq "$(PLATFORM_UNSUPPORTED)" "1"
|
|
@echo; echo "WARNING: This platform may be unsupported. To avoid possible serious problems, please read the chapter pertaining to $(PLATFORM) in Readme.txt."; echo
|
|
endif
|
|
endif
|
|
|
|
ifeq "$(PLATFORM)" "MacOSX"
|
|
prepare: $(APPNAME)
|
|
mkdir -p $(APPNAME).app/Contents/MacOS $(APPNAME).app/Contents/Resources/doc
|
|
rm -rf $(APPNAME).app/Contents/Resources/doc/HTML
|
|
mkdir -p $(APPNAME).app/Contents/Resources/doc/HTML
|
|
mkdir -p $(APPNAME).app/Contents/MacOS $(APPNAME).app/Contents/Resources/languages
|
|
-rm -f $(APPNAME).app/Contents/MacOS/$(APPNAME)
|
|
-rm -f $(APPNAME).app/Contents/MacOS/$(APPNAME)_console
|
|
|
|
ifeq "$(TC_BUILD_CONFIG)" "Release"
|
|
ifdef TC_NO_GUI
|
|
cp $(BASE_DIR)/Main/$(APPNAME) $(APPNAME).app/Contents/MacOS/$(APPNAME)_console
|
|
else
|
|
cp $(BASE_DIR)/Main/$(APPNAME) $(APPNAME).app/Contents/MacOS/$(APPNAME)
|
|
endif
|
|
else
|
|
ifdef TC_NO_GUI
|
|
-rm -f $(BASE_DIR)/Main/$(APPNAME)_console
|
|
cp $(BASE_DIR)/Main/$(APPNAME) $(BASE_DIR)/Main/$(APPNAME)_console
|
|
-ln -sf $(BASE_DIR)/Main/$(APPNAME)_console $(APPNAME).app/Contents/MacOS/$(APPNAME)_console
|
|
else
|
|
-ln -sf $(BASE_DIR)/Main/$(APPNAME) $(APPNAME).app/Contents/MacOS/$(APPNAME)
|
|
endif
|
|
endif
|
|
|
|
cp $(BASE_DIR)/Resources/Icons/VeraCrypt.icns $(APPNAME).app/Contents/Resources
|
|
cp $(BASE_DIR)/Resources/Icons/VeraCrypt_Volume.icns $(APPNAME).app/Contents/Resources
|
|
cp -R $(BASE_DIR)/../doc/html/* $(APPNAME).app/Contents/Resources/doc/HTML
|
|
cp $(BASE_DIR)/../Translations/* $(APPNAME).app/Contents/Resources/languages
|
|
|
|
echo -n APPLTRUE >$(APPNAME).app/Contents/PkgInfo
|
|
ifdef VC_LEGACY_BUILD
|
|
sed -e 's/_VERSION_/$(patsubst %a,%.1,$(patsubst %b,%.2,$(TC_VERSION)))/' ../Build/Resources/MacOSX/Info.plist.legacy.xml >$(APPNAME).app/Contents/Info.plist
|
|
else
|
|
sed -e 's/_VERSION_/$(patsubst %a,%.1,$(patsubst %b,%.2,$(TC_VERSION)))/' ../Build/Resources/MacOSX/Info.plist.xml >$(APPNAME).app/Contents/Info.plist
|
|
endif
|
|
chmod -R go-w $(APPNAME).app
|
|
ifneq ("$(LOCAL_DEVELOPMENT_BUILD)","true")
|
|
codesign -s "Developer ID Application: IDRIX (Z933746L2S)" --timestamp $(APPNAME).app
|
|
endif
|
|
|
|
install: prepare
|
|
cp -R $(APPNAME).app /Applications/.
|
|
|
|
package: prepare
|
|
ifdef VC_LEGACY_BUILD
|
|
/usr/local/bin/packagesbuild $(BASE_DIR)/Setup/MacOSX/veracrypt_Legacy.pkgproj
|
|
productsign --sign "Developer ID Installer: IDRIX (Z933746L2S)" --timestamp "$(BASE_DIR)/Setup/MacOSX/VeraCrypt Legacy $(TC_VERSION).pkg" $(BASE_DIR)/Setup/MacOSX/VeraCrypt_$(TC_VERSION).pkg
|
|
rm -f $(APPNAME)_Legacy_$(TC_VERSION).dmg
|
|
else
|
|
ifeq "$(VC_OSX_FUSET)" "1"
|
|
/usr/local/bin/packagesbuild $(BASE_DIR)/Setup/MacOSX/veracrypt_fuse-t.pkgproj
|
|
else
|
|
/usr/local/bin/packagesbuild $(BASE_DIR)/Setup/MacOSX/veracrypt.pkgproj
|
|
endif
|
|
ifneq ("$(LOCAL_DEVELOPMENT_BUILD)","true")
|
|
productsign --sign "Developer ID Installer: IDRIX (Z933746L2S)" --timestamp "$(BASE_DIR)/Setup/MacOSX/VeraCrypt $(TC_VERSION).pkg" $(BASE_DIR)/Setup/MacOSX/VeraCrypt_$(TC_VERSION).pkg
|
|
else
|
|
# copy the unsigned package to the expected location
|
|
cp "$(BASE_DIR)/Setup/MacOSX/VeraCrypt $(TC_VERSION).pkg" $(BASE_DIR)/Setup/MacOSX/VeraCrypt_$(TC_VERSION).pkg
|
|
endif
|
|
rm -f $(APPNAME)_$(TC_VERSION).dmg
|
|
endif
|
|
rm -f "$(BASE_DIR)/Setup/MacOSX/template.dmg"
|
|
rm -fr "$(BASE_DIR)/Setup/MacOSX/VeraCrypt_dmg"
|
|
mkdir -p "$(BASE_DIR)/Setup/MacOSX/VeraCrypt_dmg"
|
|
bunzip2 -k -f "$(BASE_DIR)/Setup/MacOSX/template.dmg.bz2"
|
|
hdiutil attach "$(BASE_DIR)/Setup/MacOSX/template.dmg" -noautoopen -quiet -mountpoint "$(BASE_DIR)/Setup/MacOSX/VeraCrypt_dmg"
|
|
cp "$(BASE_DIR)/Setup/MacOSX/VeraCrypt_$(TC_VERSION).pkg" "$(BASE_DIR)/Setup/MacOSX/VeraCrypt_dmg/VeraCrypt_Installer.pkg"
|
|
hdiutil detach "$(BASE_DIR)/Setup/MacOSX/VeraCrypt_dmg" -quiet -force
|
|
ifdef VC_LEGACY_BUILD
|
|
hdiutil convert "$(BASE_DIR)/Setup/MacOSX/template.dmg" -quiet -format UDZO -imagekey zlib-level=9 -o $(APPNAME)_Legacy_$(TC_VERSION).dmg
|
|
else
|
|
hdiutil convert "$(BASE_DIR)/Setup/MacOSX/template.dmg" -quiet -format UDZO -imagekey zlib-level=9 -o $(APPNAME)_$(TC_VERSION).dmg
|
|
endif
|
|
rm -f "$(BASE_DIR)/Setup/MacOSX/template.dmg"
|
|
rm -fr "$(BASE_DIR)/Setup/MacOSX/VeraCrypt_dmg"
|
|
endif
|
|
|
|
|
|
|
|
ifeq "$(PLATFORM)" "Linux"
|
|
|
|
# Packaging-tool feature probes. Empty result = host lacks the feature;
|
|
# the recipe falls back to the pre-PR (non-deterministic) form with a
|
|
# warning. $(strip) because $(shell) keeps trailing whitespace which
|
|
# would break the "= yes" equality test in the recipe.
|
|
#
|
|
# All probes act on a private $(mktemp) file and clean it up. touch
|
|
# probing /dev/null fails (EPERM) for unprivileged users and rewrites
|
|
# the device node as root. The tar option set requires GNU tar >= 1.28,
|
|
# so the probe exercises it exactly rather than matching "GNU tar".
|
|
# MAKESELF_TAR_EXTRA needs Makeself >= 2.3.1 (cited in the review).
|
|
TOUCH_REPRODUCIBLE := $(strip $(shell t=$$(mktemp 2>/dev/null) && touch --no-dereference --date=@0 "$$t" >/dev/null 2>&1 && echo yes; rm -f "$$t"))
|
|
TAR_DETERMINISTIC := $(strip $(shell t=$$(mktemp 2>/dev/null) && tar --sort=name --mtime=@0 --owner=0 --group=0 --numeric-owner --mode='go-w,a+rX' --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime -cf "$$t" --files-from /dev/null >/dev/null 2>&1 && echo yes; rm -f "$$t"))
|
|
GZIP_NO_TIMESTAMP := $(strip $(shell printf x | gzip -n -c >/dev/null 2>&1 && echo yes))
|
|
MAKESELF_PACKAGING_DATE := $(strip $(shell makeself --help 2>&1 | grep -q -- '--packaging-date' && echo yes))
|
|
MAKESELF_TAR_EXTRA := $(strip $(shell makeself --help 2>&1 | grep -q -- '--tar-extra' && echo yes))
|
|
|
|
prepare: $(APPNAME)
|
|
rm -fr $(BASE_DIR)/Setup/Linux/usr
|
|
mkdir -p $(BASE_DIR)/Setup/Linux/usr/bin
|
|
mkdir -p $(BASE_DIR)/Setup/Linux/usr/share/doc/$(APPNAME)/HTML
|
|
cp $(BASE_DIR)/Main/$(APPNAME) $(BASE_DIR)/Setup/Linux/usr/bin/$(APPNAME)
|
|
cp $(BASE_DIR)/Setup/Linux/$(APPNAME)-uninstall.sh $(BASE_DIR)/Setup/Linux/usr/bin/$(APPNAME)-uninstall.sh
|
|
chmod +x $(BASE_DIR)/Setup/Linux/usr/bin/$(APPNAME)-uninstall.sh
|
|
cp $(BASE_DIR)/License.txt $(BASE_DIR)/Setup/Linux/usr/share/doc/$(APPNAME)/License.txt
|
|
cp -R $(BASE_DIR)/../doc/html/* "$(BASE_DIR)/Setup/Linux/usr/share/doc/$(APPNAME)/HTML"
|
|
mkdir -p $(BASE_DIR)/Setup/Linux/usr/share/veracrypt/languages
|
|
cp -r $(BASE_DIR)/../Translations/* $(BASE_DIR)/Setup/Linux/usr/share/veracrypt/languages/
|
|
|
|
mkdir -p $(BASE_DIR)/Setup/Linux/usr/sbin
|
|
cp $(BASE_DIR)/Setup/Linux/mount.$(APPNAME) $(BASE_DIR)/Setup/Linux/usr/sbin/mount.$(APPNAME)
|
|
chmod +x $(BASE_DIR)/Setup/Linux/usr/sbin/mount.$(APPNAME)
|
|
ifndef TC_NO_GUI
|
|
mkdir -p $(BASE_DIR)/Setup/Linux/usr/share/applications
|
|
mkdir -p $(BASE_DIR)/Setup/Linux/usr/share/mime/packages
|
|
cp $(BASE_DIR)/Setup/Linux/$(APPNAME).desktop $(BASE_DIR)/Setup/Linux/usr/share/applications/$(APPNAME).desktop
|
|
cp $(BASE_DIR)/Setup/Linux/$(APPNAME).xml $(BASE_DIR)/Setup/Linux/usr/share/mime/packages/$(APPNAME).xml
|
|
|
|
mkdir -p $(BASE_DIR)/Setup/Linux/usr/share/pixmaps
|
|
mkdir -p $(BASE_DIR)/Setup/Linux/usr/share/icons/hicolor/scalable/apps
|
|
mkdir -p $(BASE_DIR)/Setup/Linux/usr/share/icons/hicolor/symbolic/apps
|
|
cp $(BASE_DIR)/Resources/Icons/VeraCrypt-256x256.xpm $(BASE_DIR)/Setup/Linux/usr/share/pixmaps/$(APPNAME).xpm
|
|
cp $(BASE_DIR)/Resources/Icons/VeraCrypt.svg $(BASE_DIR)/Setup/Linux/usr/share/icons/hicolor/scalable/apps/$(APPNAME).svg
|
|
cp $(BASE_DIR)/Resources/Icons/VeraCrypt-symbolic.svg $(BASE_DIR)/Setup/Linux/usr/share/icons/hicolor/symbolic/apps/$(APPNAME)-symbolic.svg
|
|
|
|
for res in 16 22 24 32 48 64 256 512 1024; do \
|
|
mkdir -p $(BASE_DIR)/Setup/Linux/usr/share/icons/hicolor/$${res}x$${res}/apps ;\
|
|
cp $(BASE_DIR)/Resources/Icons/VeraCrypt-$${res}x$${res}.png $(BASE_DIR)/Setup/Linux/usr/share/icons/hicolor/$${res}x$${res}/apps/$(APPNAME).png ;\
|
|
done
|
|
|
|
rm -fr $(BASE_DIR)/Setup/Linux/veracrypt.AppDir/usr
|
|
cp -r $(BASE_DIR)/Setup/Linux/usr $(BASE_DIR)/Setup/Linux/veracrypt.AppDir/.
|
|
ln -sf usr/share/icons/hicolor/1024x1024/apps/$(APPNAME).png $(BASE_DIR)/Setup/Linux/veracrypt.AppDir/$(APPNAME).png
|
|
endif
|
|
# Normalise modification times of every staged file. cp preserves the
|
|
# checkout-time mtimes of the source tree, which would otherwise leak
|
|
# into the tar/makeself archives and break reproducibility.
|
|
# Only run when GNU touch supports the option set. Keep AppImage
|
|
# outside this narrowed reproducibility scope: appimagetool is not
|
|
# verified here, so do not pre-clamp veracrypt.AppDir for that target.
|
|
ifeq "$(TOUCH_REPRODUCIBLE)" "yes"
|
|
_appdir="$(BASE_DIR)/Setup/Linux/veracrypt.AppDir"; \
|
|
if [ -n "$(filter appimage,$(MAKECMDGOALS))" ] || [ ! -d "$$_appdir" ]; then \
|
|
_appdir=""; \
|
|
fi; \
|
|
find $(BASE_DIR)/Setup/Linux/usr $$_appdir \
|
|
-exec touch --no-dereference --date=@$(SOURCE_DATE_EPOCH) {} +
|
|
else
|
|
@echo "Reproducible build: GNU touch unavailable, skipping mtime normalisation"
|
|
endif
|
|
|
|
|
|
install: prepare
|
|
ifneq "$(DESTDIR)" ""
|
|
mkdir -p $(DESTDIR)
|
|
endif
|
|
cp -R $(BASE_DIR)/Setup/Linux/usr $(DESTDIR)/
|
|
|
|
ifeq "$(TC_BUILD_CONFIG)" "Release"
|
|
package: prepare
|
|
# Deterministic tarball: sort members, pin mtime to SOURCE_DATE_EPOCH,
|
|
# drop owner/group identity, and use gzip -n so no timestamp/name is
|
|
# stored in the gzip header.
|
|
# --mode= normalises permission bits so the host umask cannot leak
|
|
# into them. Falls back to plain tar cfz when probes fail.
|
|
ifeq "$(TAR_DETERMINISTIC)$(GZIP_NO_TIMESTAMP)" "yesyes"
|
|
tar --sort=name --mtime=@$(SOURCE_DATE_EPOCH) \
|
|
--owner=0 --group=0 --numeric-owner \
|
|
--mode='go-w,a+rX' \
|
|
--pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime \
|
|
-cf $(BASE_DIR)/Setup/Linux/$(APPNAME)_$(TC_VERSION).tar \
|
|
--directory $(BASE_DIR)/Setup/Linux usr
|
|
gzip -9 -n -c $(BASE_DIR)/Setup/Linux/$(APPNAME)_$(TC_VERSION).tar \
|
|
> $(BASE_DIR)/Setup/Linux/$(PACKAGE_NAME)
|
|
rm -f $(BASE_DIR)/Setup/Linux/$(APPNAME)_$(TC_VERSION).tar
|
|
else
|
|
@echo "Reproducible build: non-deterministic tar.gz fallback (GNU tar=$(if $(TAR_DETERMINISTIC),yes,no), gzip -n=$(if $(GZIP_NO_TIMESTAMP),yes,no))"
|
|
tar cfz $(BASE_DIR)/Setup/Linux/$(PACKAGE_NAME) --directory $(BASE_DIR)/Setup/Linux usr
|
|
endif
|
|
|
|
@rm -fr $(INTERNAL_INSTALLER_NAME)
|
|
@echo "#!/bin/sh" > $(INTERNAL_INSTALLER_NAME)
|
|
@echo "VERSION=$(TC_VERSION)" >> $(INTERNAL_INSTALLER_NAME)
|
|
@echo "PACKAGE_TYPE=tar" >> $(INTERNAL_INSTALLER_NAME)
|
|
@echo "PACKAGE_NAME=$(PACKAGE_NAME)" >> $(INTERNAL_INSTALLER_NAME)
|
|
@template_lines=$$(wc -l < $(BASE_DIR)/Setup/Linux/veracrypt_install_template.sh); \
|
|
echo "PACKAGE_START=$$(($$template_lines + 7))" >> $(INTERNAL_INSTALLER_NAME)
|
|
@echo "INSTALLER_TYPE=$(INSTALLER_TYPE)" >> $(INTERNAL_INSTALLER_NAME)
|
|
|
|
@cat $(BASE_DIR)/Setup/Linux/veracrypt_install_template.sh >> $(INTERNAL_INSTALLER_NAME)
|
|
@cat $(BASE_DIR)/Setup/Linux/$(PACKAGE_NAME) >> $(INTERNAL_INSTALLER_NAME)
|
|
chmod +x $(INTERNAL_INSTALLER_NAME)
|
|
|
|
rm -fr $(BASE_DIR)/Setup/Linux/packaging
|
|
mkdir -p $(BASE_DIR)/Setup/Linux/packaging
|
|
cp $(INTERNAL_INSTALLER_NAME) $(BASE_DIR)/Setup/Linux/packaging/.
|
|
# makeself: --packaging-date pins the banner date, SOURCE_DATE_EPOCH is
|
|
# honoured by the embedded tar/gzip, and the archive is sorted so the
|
|
# self-extracting installer is byte-identical across builds.
|
|
# Flags gated per probe; invoked from Setup/Linux with relative paths
|
|
# so the build path does not end up in makeself's echoed argv.
|
|
@cd $(BASE_DIR)/Setup/Linux && set --; \
|
|
if [ "$(MAKESELF_PACKAGING_DATE)" = yes ]; then \
|
|
set -- "$$@" --packaging-date "@$(SOURCE_DATE_EPOCH)"; \
|
|
fi; \
|
|
if [ "$(MAKESELF_TAR_EXTRA)" = yes ] && [ "$(TAR_DETERMINISTIC)" = yes ]; then \
|
|
set -- "$$@" --tar-extra "--sort=name --mtime=@$(SOURCE_DATE_EPOCH) --owner=0 --group=0 --numeric-owner --mode=go-w,a+rX"; \
|
|
fi; \
|
|
if [ "$$#" -eq 0 ]; then \
|
|
echo "Reproducible build: makeself flags unavailable, installer will not be byte-identical"; \
|
|
fi; \
|
|
makeself "$$@" \
|
|
packaging "$(INSTALLER_NAME)" \
|
|
"VeraCrypt $(TC_VERSION) Installer" "./$(INTERNAL_INSTALLER_NAME)"
|
|
# makeself runs 'gzip -c9 < tmpfile' which writes tmpfile's mtime into
|
|
# the gzip header (SOURCE_DATE_EPOCH is ignored for redirected stdin).
|
|
# Zero the mtime and refresh CRCsum/MD5; installer --check still passes.
|
|
@if command -v python3 >/dev/null 2>&1; then \
|
|
python3 $(BASE_DIR)/Build/Tools/makeself_repro_finalize.py \
|
|
$(BASE_DIR)/Setup/Linux/$(INSTALLER_NAME); \
|
|
else \
|
|
echo "Reproducible build: python3 unavailable, skipping makeself finalize"; \
|
|
fi
|
|
|
|
appimage: prepare
|
|
@set -e; \
|
|
_appimagetool_arch_suffix=""; \
|
|
_final_appimage_arch_suffix=""; \
|
|
case "$(CPU_ARCH)" in \
|
|
x86) \
|
|
_appimagetool_arch_suffix="i686"; \
|
|
_final_appimage_arch_suffix="i686"; \
|
|
;; \
|
|
x64) \
|
|
_appimagetool_arch_suffix="x86_64"; \
|
|
_final_appimage_arch_suffix="x86_64"; \
|
|
;; \
|
|
arm64) \
|
|
_appimagetool_arch_suffix="aarch64"; \
|
|
_final_appimage_arch_suffix="aarch64"; \
|
|
;; \
|
|
arm7) \
|
|
_appimagetool_arch_suffix="armhf"; \
|
|
_final_appimage_arch_suffix="armhf"; \
|
|
;; \
|
|
*) \
|
|
echo "Error: Unsupported CPU_ARCH for AppImage: $(CPU_ARCH). Supported: x86, x64, arm64, arm7" >&2; \
|
|
exit 1; \
|
|
;; \
|
|
esac; \
|
|
_appimagetool_executable_name="appimagetool-$${_appimagetool_arch_suffix}.AppImage"; \
|
|
_appimagetool_executable_path="$(BASE_DIR)/Setup/Linux/$${_appimagetool_executable_name}"; \
|
|
_appimagetool_url="https://github.com/AppImage/appimagetool/releases/download/continuous/$${_appimagetool_executable_name}"; \
|
|
_final_appimage_filename="VeraCrypt-$(TC_VERSION)-$${_final_appimage_arch_suffix}.AppImage"; \
|
|
_final_appimage_path="$(BASE_DIR)/Setup/Linux/$${_final_appimage_filename}"; \
|
|
\
|
|
echo "Preparing AppImage for $(CPU_ARCH) (using $${_appimagetool_arch_suffix})..."; \
|
|
echo "Downloading appimagetool from $${_appimagetool_url}..."; \
|
|
wget --quiet -O "$${_appimagetool_executable_path}" "$${_appimagetool_url}"; \
|
|
chmod +x "$${_appimagetool_executable_path}"; \
|
|
echo "Creating AppImage $${_final_appimage_path}..."; \
|
|
if [ "$(VC_SOURCE_DATE_EPOCH_AUTO)" = "1" ]; then \
|
|
unset SOURCE_DATE_EPOCH; \
|
|
fi; \
|
|
ARCH="$${_final_appimage_arch_suffix}" "$${_appimagetool_executable_path}" "$(BASE_DIR)/Setup/Linux/veracrypt.AppDir" "$${_final_appimage_path}"; \
|
|
echo "AppImage created: $${_final_appimage_path}"; \
|
|
echo "Cleaning up appimagetool..."; \
|
|
rm -f "$${_appimagetool_executable_path}";
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
ifeq "$(PLATFORM)" "FreeBSD"
|
|
prepare: $(APPNAME)
|
|
rm -fr $(BASE_DIR)/Setup/FreeBSD/usr
|
|
mkdir -p $(BASE_DIR)/Setup/FreeBSD/usr/bin
|
|
mkdir -p $(BASE_DIR)/Setup/FreeBSD/usr/share/doc/$(APPNAME)/HTML
|
|
cp $(BASE_DIR)/Main/$(APPNAME) $(BASE_DIR)/Setup/FreeBSD/usr/bin/$(APPNAME)
|
|
cp $(BASE_DIR)/Setup/FreeBSD/$(APPNAME)-uninstall.sh $(BASE_DIR)/Setup/FreeBSD/usr/bin/$(APPNAME)-uninstall.sh
|
|
chmod +x $(BASE_DIR)/Setup/FreeBSD/usr/bin/$(APPNAME)-uninstall.sh
|
|
cp $(BASE_DIR)/License.txt $(BASE_DIR)/Setup/FreeBSD/usr/share/doc/$(APPNAME)/License.txt
|
|
cp -R $(BASE_DIR)/../doc/html/* "$(BASE_DIR)/Setup/FreeBSD/usr/share/doc/$(APPNAME)/HTML"
|
|
mkdir -p $(BASE_DIR)/Setup/FreeBSD/usr/share/veracrypt/languages
|
|
cp -r $(BASE_DIR)/../Translations/* $(BASE_DIR)/Setup/FreeBSD/usr/share/veracrypt/languages/
|
|
|
|
ifndef TC_NO_GUI
|
|
mkdir -p $(BASE_DIR)/Setup/FreeBSD/usr/local/share/applications
|
|
mkdir -p $(BASE_DIR)/Setup/FreeBSD/usr/local/share/mime/packages
|
|
cp $(BASE_DIR)/Setup/FreeBSD/$(APPNAME).desktop $(BASE_DIR)/Setup/FreeBSD/usr/local/share/applications/$(APPNAME).desktop
|
|
cp $(BASE_DIR)/Setup/FreeBSD/$(APPNAME).xml $(BASE_DIR)/Setup/FreeBSD/usr/local/share/mime/packages/$(APPNAME).xml
|
|
|
|
mkdir -p $(BASE_DIR)/Setup/FreeBSD/usr/local/share/pixmaps
|
|
mkdir -p $(BASE_DIR)/Setup/FreeBSD/usr/local/share/icons/hicolor/scalable/apps
|
|
mkdir -p $(BASE_DIR)/Setup/FreeBSD/usr/local/share/icons/hicolor/symbolic/apps
|
|
cp $(BASE_DIR)/Resources/Icons/VeraCrypt-256x256.xpm $(BASE_DIR)/Setup/FreeBSD/usr/local/share/pixmaps/$(APPNAME).xpm
|
|
cp $(BASE_DIR)/Resources/Icons/VeraCrypt.svg $(BASE_DIR)/Setup/FreeBSD/usr/local/share/icons/hicolor/scalable/apps/$(APPNAME).svg
|
|
cp $(BASE_DIR)/Resources/Icons/VeraCrypt-symbolic.svg $(BASE_DIR)/Setup/FreeBSD/usr/local/share/icons/hicolor/symbolic/apps/$(APPNAME)-symbolic.svg
|
|
|
|
for res in 16 22 24 32 48 64 256 512 1024; do \
|
|
mkdir -p $(BASE_DIR)/Setup/FreeBSD/usr/local/share/icons/hicolor/$${res}x$${res}/apps ;\
|
|
cp $(BASE_DIR)/Resources/Icons/VeraCrypt-$${res}x$${res}.png $(BASE_DIR)/Setup/FreeBSD/usr/local/share/icons/hicolor/$${res}x$${res}/apps/$(APPNAME).png ;\
|
|
done
|
|
endif
|
|
chown -R root:wheel $(BASE_DIR)/Setup/FreeBSD/usr
|
|
chmod -R go-w $(BASE_DIR)/Setup/FreeBSD/usr
|
|
|
|
|
|
install: prepare
|
|
ifneq "$(DESTDIR)" ""
|
|
mkdir -p $(DESTDIR)
|
|
endif
|
|
cp -R $(BASE_DIR)/Setup/FreeBSD/usr $(DESTDIR)/.
|
|
|
|
ifeq "$(TC_BUILD_CONFIG)" "Release"
|
|
package: prepare
|
|
tar cfz $(BASE_DIR)/Setup/FreeBSD/$(PACKAGE_NAME) --directory $(BASE_DIR)/Setup/FreeBSD usr
|
|
|
|
@rm -fr $(INTERNAL_INSTALLER_NAME)
|
|
@echo "#!/bin/sh" > $(INTERNAL_INSTALLER_NAME)
|
|
@echo "VERSION=$(TC_VERSION)" >> $(INTERNAL_INSTALLER_NAME)
|
|
@echo "PACKAGE_TYPE=tar" >> $(INTERNAL_INSTALLER_NAME)
|
|
@echo "PACKAGE_NAME=$(PACKAGE_NAME)" >> $(INTERNAL_INSTALLER_NAME)
|
|
@template_lines=$$(wc -l < $(BASE_DIR)/Setup/FreeBSD/veracrypt_install_template.sh); \
|
|
echo "PACKAGE_START=$$(($$template_lines + 7))" >> $(INTERNAL_INSTALLER_NAME)
|
|
@echo "INSTALLER_TYPE=$(INSTALLER_TYPE)" >> $(INTERNAL_INSTALLER_NAME)
|
|
|
|
@cat $(BASE_DIR)/Setup/FreeBSD/veracrypt_install_template.sh >> $(INTERNAL_INSTALLER_NAME)
|
|
@cat $(BASE_DIR)/Setup/FreeBSD/$(PACKAGE_NAME) >> $(INTERNAL_INSTALLER_NAME)
|
|
chmod +x $(INTERNAL_INSTALLER_NAME)
|
|
|
|
rm -fr $(BASE_DIR)/Setup/FreeBSD/packaging
|
|
mkdir -p $(BASE_DIR)/Setup/FreeBSD/packaging
|
|
cp $(INTERNAL_INSTALLER_NAME) $(BASE_DIR)/Setup/FreeBSD/packaging/.
|
|
makeself $(BASE_DIR)/Setup/FreeBSD/packaging $(BASE_DIR)/Setup/FreeBSD/$(INSTALLER_NAME) "VeraCrypt $(TC_VERSION) $(SYSTEMNAME) Installer" ./$(INTERNAL_INSTALLER_NAME)
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
$(OBJS): $(PCH)
|
|
|
|
Resources.o: $(RESOURCES)
|
|
|
|
LanguageStrings.o: $(RESOURCES)
|
|
|
|
include $(BUILD_INC)/Makefile.inc
|