View Raw Ebuild
# Copyright 2023-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit shell-completion toolchain-funcs
DESCRIPTION="The PE file analysis toolkit"
HOMEPAGE="https://github.com/mentebinaria/readpe"
SRC_URI="
https://github.com/mentebinaria/readpe/archive/refs/tags/v${PV}.tar.gz
-> ${P}.tar.gz
"
LICENSE="GPL-2+-with-openssl-exception" # gpl-2+ or gpl-2?
SLOT="0"
KEYWORDS="~amd64"
IUSE="doc"
DEPEND="
dev-libs/openssl:=
"
RDEPEND="${DEPEND}"
BDEPEND="
doc? (
app-text/docbook-xsl-stylesheets
dev-libs/libxslt
)
"
src_prepare() {
default
# Let prefix be overriden
sed -i -e 's/prefix =/prefix :=/' src/Makefile lib/libpe/Makefile || die
# Don't compress man pages by default
sed -i \
-e 's:gzip -c -9 \($(MANDIR)/$$prog$(man1ext)\) > \($(DESTDIR)$(man1dir)/$$prog$(man1ext)\).gz:$(INSTALL_PROGRAM) $(INSTALL_FLAGS) \1 \2:' \
src/Makefile || die
# Abuses CFLAGS (with unnecessary flag)
sed -i -e '/override CFLAGS/,/^$/ { s/-c// }' lib/libpe/Makefile || die
# Respect CFLAGS
sed -i \
-e '/^\(ofs2rva\|libpe\|$(PLUGINS)\):/,/^$/ { s/$(LDFLAGS)/$(CFLAGS) $(LDFLAGS)/ }' \
src/Makefile lib/libpe/Makefile src/plugins/Makefile || die
sed -i \
-e '/function test_binary_output_against_expected_output/,/^}$/ { s/\(^\s*\)#/\1/ }' \
-e 's/head -n 5 tmp.diff/diff -u "${expected_output}" "${reported_output}"/' \
tests/run.sh || die
}
src_configure() {
tc-export CC
}
src_compile() {
emake prefix="${EPREFIX}/usr" libdir="${EPREFIX}/usr/$(get_libdir)" all
if use doc; then
emake \
XSL="${EPREFIX}/usr/share/sgml/docbook/xsl-stylesheets/html/chunk.xsl" \
FOXSL="${EPREFIX}/usr/share/sgml/docbook/xsl-stylesheets/fo/docbook.xsl" \
-C doc/manual/en_us html
fi
}
src_test() {
export LD_LIBRARY_PATH="${S}/lib/libpe"
cp "${S}"/lib/libpe/libpe.so{,.1} || die
# pepack segfaults without this lol
cp "${S}"{/src,}/userdb.txt || die
# pe64: "coming soon..."
./tests/run.sh pe32 tests/samples/helloworld.exe
pe32_ret=$?
if [[ ${pe32_ret} == 0 ]]; then
einfo "All tests succeeded"
else
[[ ${pe32_ret} != 0 ]] && ewarn "pe32 failed: ${pe32_ret}"
eerror "Some tests failed"
fi
}
src_install() {
emake DESTDIR="${D}" prefix="${EPREFIX}/usr" libdir="${EPREFIX}/usr/$(get_libdir)" install
use doc && HTML_DOCS="doc/manual/en_us/html/*"
einstalldocs
dobashcomp completion/bash/readpe
bashcomp_alias readpe pedis pehash peldd pepack peres pescan pesec pestr
dozshcomp completion/zsh/_readpe
}