blob: caf544ad8bf33745cb8fbe37a5ba69d81566e6ac [file] [log] [blame]
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
EAPI=5
inherit eutils pax-utils
DESCRIPTION="An opencl hash cracker"
HOMEPAGE="http://hashcat.net/oclhashcat-lite/"
MY_P="oclHashcat-lite-${PV}"
SRC_URI="http://hashcat.net/files/${MY_P}.7z"
#license applies to this version per http://hashcat.net/forum/thread-1348.html
LICENSE="hashcat"
SLOT="0"
KEYWORDS="-* ~amd64 ~x86"
IUSE_VIDEO_CARDS="video_cards_fglrx
video_cards_nvidia"
IUSE="virtualcl ${IUSE_VIDEO_CARDS}"
RDEPEND="sys-libs/zlib
video_cards_nvidia? ( >=x11-drivers/nvidia-drivers-310.32 )
video_cards_fglrx? ( >=x11-drivers/ati-drivers-13.1 )"
DEPEND="${RDEPEND}
app-arch/p7zip"
S="${WORKDIR}/${MY_P}"
RESTRICT="strip"
QA_PREBUILT="*Hashcat-lite*.bin"
src_prepare() {
if use x86; then
rm oclHashcat-lite64.bin || die
rm cudaHashcat-lite64.bin || die
fi
if use amd64; then
rm oclHashcat-lite32.bin || die
rm cudaHashcat-lite32.bin || die
fi
if ! use video_cards_fglrx; then
rm -r kernels/4098 || die
rm oclHashcat-lite*.bin || die
fi
if ! use video_cards_nvidia; then
rm -r kernels/4318 || die
rm cudaHashcat-lite*.bin || die
fi
use virtualcl || { rm vclHashcat-lite* || die; }
pax-mark r *Hashcat-lite*.bin
}
src_test() {
printf "%02x" ${PV#0.} > "${S}"/eula.accepted
if use video_cards_nvidia; then
addwrite /dev/nvidia0
addwrite /dev/nvidiactl
if [ ! -w /dev/nvidia0 ]; then
einfo "To run these tests, portage likely must be in the video group."
einfo "Please run \"passwd -a portage video\" if the tests will fail"
fi
if use amd64; then
./cudaHashcat-lite64.bin 6fc33db981c6c55189bbda9625eacd6d
elif use x86; then
./cudaHashcat-lite32.bin 6fc33db981c6c55189bbda9625eacd6d
fi
fi
if use video_cards_fglrx; then
addwrite /dev/ati
if use amd64; then
./oclHashcat-lite64.bin 6fc33db981c6c55189bbda9625eacd6d
elif use x86; then
./oclHashcat-lite32.bin 6fc33db981c6c55189bbda9625eacd6d
fi
fi
rm eula.accepted cudaHashcat-lite.restore
}
src_install() {
dodoc docs/*
rm -r "${S}"/*.exe "${S}"/*.cmd "${S}"/docs || die
insinto /opt/${PN}
doins -r "${S}"/*
dodir /opt/bin
cat <<-EOF > "${ED}"/opt/bin/oclhashcat-lite
#! /bin/sh
echo "oclHashcat-lite and all related files have been installed in /opt/${PN}"
echo "Please run one of the following binaries to use gpu accelerated hashcat:"
EOF
for x in oclHashcat-lite64.bin oclHashcat-lite32.bin cudaHashcat-lite64.bin cudaHashcat-lite32.bin vclHashcat-lite64.bin vclHashcat-lite32.bin
do
if [ -f "${ED}"/opt/${PN}/${x} ]
then
case "${x}" in
oclHashcat-lite64.bin)
echo "echo '64 bit ATI accelerated \"oclHashcat-lite64.bin\"'" >> "${ED}"/opt/bin/oclhashcat-lite
;;
oclHashcat-lite32.bin)
echo "echo '32 bit ATI accelerated \"oclHashcat-lite32.bin\"'" >> "${ED}"/opt/bin/oclhashcat-lite
;;
cudaHashcat-lite64.bin)
echo "echo '64 bit NVIDIA accelerated \"cudaHashcat-lite64.bin\"'" >> "${ED}"/opt/bin/oclhashcat-lite
;;
cudaHashcat-lite32.bin)
echo "echo '32 bit NVIDIA accelerated \"cudaHashcat-lite32.bin\"'" >> "${ED}"/opt/bin/oclhashcat-lite
;;
vclHashcat-lite64.bin)
echo "echo '64 bit VirtualCL Cluster support \"vclHashcat-lite64.bin\"'" >> "${ED}"/opt/bin/oclhashcat-lite
;;
vclHashcat-lite32.bin)
echo "echo '32 bit VirtualCL Cluster support \"vclHashcat-lite32.bin\"'" >> "${ED}"/opt/bin/oclhashcat-lite
;;
esac
fperms +x /opt/${PN}/${x}
cat <<-EOF > "${ED}"/opt/bin/${x}
#! /bin/sh
cd /opt/${PN}
echo "Warning: ${x} is running from /opt/${PN} so be careful of relative paths."
exec ./${x} "\$@"
EOF
fperms +x /opt/bin/${x}
fi
done
fperms +x /opt/bin/oclhashcat-lite
fowners -R root:video /opt/${PN}
fperms g+w /opt/${PN}
einfo "oclhashcat-lite can be run as user if you are in the video group"
}
pkg_preinst() {
#I feel so dirty doing this
#first we remove the eula.accepted because it cannot properly handle and empty or old one (crash or doesn't run at all)
rm -f "${EROOT}"/opt/${PN}/eula.accepted
#next we remove any compiled kernel files as these get built on first run only if they aren't there because there are no timestamp checks
rm -f "${EROOT}"/opt/${PN}/kernels/{4318,4098}/"*.kernel"
#have mercy on my soul
}