summaryrefslogtreecommitdiff
path: root/app-crypt/veracrypt/veracrypt-1.26.29-r3.ebuild
blob: 59f0b12844938a1183e75d3074afc97101fb9d2c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

WX_GTK_VER="3.2-gtk3"
inherit eapi9-ver linux-info pax-utils toolchain-funcs wxwidgets xdg

DESCRIPTION="Disk encryption with strong security based on TrueCrypt"
HOMEPAGE="https://veracrypt.io/en/Home.html"
SRC_URI="https://github.com/${PN}/VeraCrypt/archive/VeraCrypt_${PV}.tar.gz -> ${P}.tar.gz"
S="${WORKDIR}/VeraCrypt-VeraCrypt_${PV}/src"

# The modules not linked against in Linux include (but not limited to):
#   libzip, chacha-xmm, chacha256, chachaRng, rdrand, t1ha2
# Tested by actually removing the source files and performing a build
# For this reason, we don't have to worry about their licenses
LICENSE="Apache-2.0 BSD RSA truecrypt-3.0"
SLOT="0"
KEYWORDS="amd64"
IUSE="+asm cpu_flags_x86_aes cpu_flags_x86_sse2 doc gui"
REQUIRED_USE="cpu_flags_x86_sse2? ( asm )"
RESTRICT="bindist mirror"

RDEPEND="
	app-admin/sudo
	sys-apps/pcsc-lite
	sys-fs/fuse:3=
	sys-fs/lvm2
	x11-libs/wxGTK:${WX_GTK_VER}=
	gui? ( x11-libs/wxGTK:${WX_GTK_VER}=[X] )
"
DEPEND="${RDEPEND}"
BDEPEND="
	asm? ( dev-lang/yasm )
	virtual/pkgconfig
"

CONFIG_CHECK="~BLK_DEV_DM ~CRYPTO ~CRYPTO_XTS ~DM_CRYPT ~FUSE_FS"

PATCHES=(
	"${FILESDIR}"/${P}-fix-release-date.patch
	"${FILESDIR}"/${P}-Argon2-fix-build-with-march-x86-64-v3-v4-and-XOP.patch
	"${FILESDIR}"/${PN}-1.26.29-fix-nosse2.patch
)

src_prepare() {
	default

	# Respect *FLAGS
	sed -i -e 's/^.* += $(REPRODUCIBLE_/#&/' Makefile || die
}

src_configure() {
	setup-wxwidgets

	myemakeargs=(
		NOSTRIP=1
		NOTEST=1
		VERBOSE=1
		WITHFUSE3=1
		AR="$(tc-getAR)"
		CC="$(tc-getCC)"
		CXX="$(tc-getCXX)"
		RANLIB="$(tc-getRANLIB)"
		TC_EXTRA_CFLAGS="${CFLAGS}"
		TC_EXTRA_CXXFLAGS="${CXXFLAGS}"
		TC_EXTRA_LFLAGS="${LDFLAGS}"
		WX_CONFIG="${WX_CONFIG}"
		$(usex gui "" "NOGUI=1")
	)

	# x86-specific options causing build failures on other arches
	if use x86 || use amd64; then
		myemakeargs+=(
			$(usev !asm "NOASM=1")
			$(usev !cpu_flags_x86_aes "NOAESNI=1")
			$(usev !cpu_flags_x86_sse2 "NOSSE2=1")
		)
	fi
}

src_compile() {
	emake "${myemakeargs[@]}"
}

src_test() {
	./Main/veracrypt --text --test || die "tests failed"
}

src_install() {
	local DOCS=( Readme.txt )

	# TODO: install translations
	myemakeargs+=(
		INSTALL_UNINSTALLER=0
		INSTALL_LICENSE=0
		INSTALL_DOCS=0
		INSTALL_LANGUAGES=0
		INSTALL_APPIMAGE_FILES=0
	)

	if use gui; then
		myemakeargs+=(
			INSTALL_DESKTOP=1
			INSTALL_MIME=1
			INSTALL_ICONS=1
		)
	else
		myemakeargs+=(
			INSTALL_DESKTOP=0
			INSTALL_MIME=0
			INSTALL_ICONS=0
		)
	fi

	emake DESTDIR="${D}" "${myemakeargs[@]}" install

	if use doc; then
		DOCS+=( "${S}"/../doc/EFI-DCS )
		docompress -x /usr/share/doc/${PF}/EFI-DCS
		HTML_DOCS=( "${S}"/../doc/html/. )
	fi
	einstalldocs

	newinitd "${FILESDIR}"/veracrypt.init veracrypt

	pax-mark -m "${ED}"/usr/bin/veracrypt
}

pkg_postinst() {
	use gui && xdg_pkg_postinst

	ewarn "VeraCrypt has a very restrictive license. Please be explicitly aware"
	ewarn "of the limitations on redistribution of binaries or modified source."

	# Remove this when we remove veracrypt-1.25.9.ebuild from the tree.
	if ver_replacing -lt "1.26.7"; then
		ewarn "Starting with 1.26.7, TrueCrypt volumes are no longer supported."
		ewarn "Please explore alternatives such as dm-crypt to mount truecrypt volumes."
		ewarn "Moreover, support for RIPEMD160 and GOST89 is dropped."
		ewarn "Volumes using these algoritms will no longer mount."
	fi
}

pkg_postrm() {
	use gui && xdg_pkg_postrm
}