blob: e9ddd764d0d6c66715877bdda3b48237df7db7a4 [file] [log] [blame]
# Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
PYTHON_COMPAT=( python3_{6..9} )
PYTHON_REQ_USE="threads(+),xml(+)"
inherit cros-fuzzer cros-sanitizers autotools python-single-r1 readme.gentoo-r1 udev
DESCRIPTION="HP Linux Imaging and Printing - Print, scan, fax drivers and service tools"
HOMEPAGE="https://developers.hp.com/hp-linux-imaging-and-printing"
SRC_URI="mirror://sourceforge/hplip/${P}.tar.gz
https://dev.gentoo.org/~billie/distfiles/${PN}-3.22.6-patches-1.tar.xz"
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="*"
IUSE="asan fuzzer doc fax +hpcups hpijs kde libnotify -libusb0 minimal parport policykit qt5 scanner +snmp static-ppds X"
COMMON_DEPEND="
net-print/cups
sys-apps/dbus
virtual/jpeg:0
hpijs? ( net-print/cups-filters[foomatic] )
!minimal? (
!libusb0? ( virtual/libusb:1 )
libusb0? ( virtual/libusb:0 )
scanner? ( media-gfx/sane-backends )
snmp? (
dev-libs/openssl:0=
net-analyzer/net-snmp:=
net-dns/avahi[dbus,python,${PYTHON_SINGLE_USEDEP}]
)
)
"
BDEPEND="
virtual/pkgconfig
"
DEPEND="
${COMMON_DEPEND}
${PYTHON_DEPS}
"
RDEPEND="
${COMMON_DEPEND}
app-text/ghostscript-gpl
!minimal? (
$(python_gen_cond_dep '>=dev-python/dbus-python-1.2.0-r1[${PYTHON_USEDEP}]')
$(python_gen_cond_dep 'dev-python/pygobject:2[${PYTHON_USEDEP}]' 'python2*')
$(python_gen_cond_dep 'dev-python/pygobject:3[${PYTHON_USEDEP}]' 'python3*')
fax? ( $(python_gen_cond_dep 'dev-python/reportlab[${PYTHON_USEDEP}]') )
kernel_linux? ( virtual/udev )
qt5? (
$(python_gen_cond_dep \
'>=dev-python/PyQt5-5.5.1[dbus,gui,widgets,${PYTHON_USEDEP}]')
libnotify? ( $(python_gen_cond_dep 'dev-python/notify2[${PYTHON_USEDEP}]') )
)
scanner? (
$(python_gen_cond_dep '>=dev-python/reportlab-3.2[${PYTHON_USEDEP}]')
$(python_gen_cond_dep '>=dev-python/pillow-3.1.1[${PYTHON_USEDEP}]')
X? (
|| (
kde? ( kde-misc/skanlite )
media-gfx/xsane
media-gfx/sane-frontends
)
)
)
)
policykit? ( sys-auth/polkit )
"
REQUIRED_USE="${PYTHON_REQUIRED_USE}"
PATCHES=(
"${WORKDIR}/patches"
"${FILESDIR}/${PN}-3.21.8-disable-create-ppd.patch"
"${FILESDIR}/${PN}-3.19.6-ignore-prebuilt-shared-objects.patch"
"${FILESDIR}/${PN}-3.19.6-fix-uninitialized-variable.patch"
"${FILESDIR}/${PN}-3.19.6-fix-pixel-color-overflow.patch"
"${FILESDIR}/${PN}-3.21.8-disable-python.patch"
"${FILESDIR}/${PN}-3.21.8-fix-unpack-bits.patch"
"${FILESDIR}/${PN}-3.21.8-fix-cupsbytesperline.patch"
"${FILESDIR}/${PN}-3.21.8-fix-buffer-overflow-in-halftoner.patch"
"${FILESDIR}/${PN}-3.21.8-fix-tempbuffer-size-in-halftoner.patch"
"${FILESDIR}/${PN}-3.21.8-fix-bad-header-read.patch"
"${FILESDIR}/${PN}-3.22.6-gccver.patch"
"${FILESDIR}/${PN}-3.22.6-fix-ub-pointer-overflow.patch"
)
#DISABLE_AUTOFORMATTING="yes"
DOC_CONTENTS="
For more information on setting up your printer please take
a look at the hplip section of the gentoo printing guide:
https://wiki.gentoo.org/wiki/Printing
Any user who wants to print must be in the lp group.
"
pkg_setup() {
python-single-r1_pkg_setup
use scanner && ! use X && einfo "You need USE=X for the scanner GUI."
if use minimal ; then
einfo "Installing driver portions only, make sure you know what you are doing."
einfo "Depending on the USE flags set for hpcups or hpijs the appropiate driver"
einfo "is installed. If both USE flags are set hpijs overrides hpcups."
fi
if ! use hpcups && ! use hpijs ; then
einfo "Installing neither hpcups (USE=-hpcups) nor hpijs (USE=-hpijs) driver,"
einfo "which is probably not what you want."
einfo "You will almost certainly not be able to print."
fi
}
src_prepare() {
default
if use fuzzer ; then
eapply "${FILESDIR}/${PN}-3.21.8-fuzz.patch"
cp "${FILESDIR}"/{hpcups,hpps}_fuzzer.cc "${FILESDIR}"/stdin_util.{h,cc} .
fi
python_fix_shebang .
# Make desktop files follow the specification
# Gentoo bug: https://bugs.gentoo.org/show_bug.cgi?id=443680
# Upstream bug: https://bugs.launchpad.net/hplip/+bug/1080324
sed -i -e '/^Categories=/s/Application;//' \
-e '/^Encoding=.*/d' hplip.desktop.in || die
sed -i -e '/^Categories=/s/Application;//' \
-e '/^Version=.*/d' \
-e '/^Comment=.*/d' hplip-systray.desktop.in || die
# Force recognition of Gentoo distro by hp-check
sed -i \
-e "s:file('/etc/issue', 'r').read():'Gentoo':" \
installer/core_install.py || die
# Forcibly delete prebuilt shared objects that the Chrome OS
# build prefers not to rely upon.
rm -r "${S}/prnt/plugins" || die
eautoreconf
}
src_configure() {
if use fuzzer ; then
fuzzer-setup-env || die
fi
local drv_build=()
local minimal_build=()
sanitizers-setup-env
append-lfs-flags
if use hpcups ; then
drv_build+=("$(use_enable hpcups hpcups-install)")
if use static-ppds ; then
drv_build+=( --enable-cups-ppd-install )
drv_build+=( --disable-cups-drv-install )
else
drv_build+=( --enable-cups-drv-install )
drv_build+=( --disable-cups-ppd-install )
fi
else
drv_build+=( --disable-hpcups-install )
drv_build+=( --disable-cups-drv-install )
drv_build+=( --disable-cups-ppd-install )
fi
if use hpijs ; then
drv_build+=(" $(use_enable hpijs hpijs-install)")
if use static-ppds ; then
drv_build+=( --enable-foomatic-ppd-install )
drv_build+=( --disable-foomatic-drv-install )
else
drv_build+=( --enable-foomatic-drv-install )
drv_build+=( --disable-foomatic-ppd-install )
fi
else
drv_build+=( --disable-hpijs-install )
drv_build+=( --disable-foomatic-drv-install )
drv_build+=( --disable-foomatic-ppd-install )
fi
if use minimal ; then
if use hpijs ; then
minimal_build+=( --enable-hpijs-only-build )
else
minimal_build+=( --disable-hpijs-only-build )
fi
if use hpcups ; then
minimal_build+=( --enable-hpcups-only-build )
else
minimal_build+=( --disable-hpcups-only-build )
fi
minimal_build+=( --disable-fax-build )
minimal_build+=( --disable-network-build )
minimal_build+=( --disable-scan-build )
minimal_build+=( --disable-gui-build )
else
if use fax ; then
minimal_build+=( --enable-fax-build )
else
minimal_build+=( --disable-fax-build )
fi
if use snmp ; then
minimal_build+=( --enable-network-build )
else
minimal_build+=( --disable-network-build )
fi
if use scanner ; then
minimal_build+=( --enable-scan-build )
else
minimal_build+=( --disable-scan-build )
fi
if use qt5 ; then
minimal_build+=( --enable-qt5 )
minimal_build+=( --enable-gui-build )
else
minimal_build+=( --disable-gui-build )
minimal_build+=( --disable-qt5 )
fi
fi
local cups_config="${SYSROOT}/usr/bin/cups-config"
# disable class driver for now
econf \
--enable-class-driver \
--disable-cups11-build \
--disable-foomatic-rip-hplip-install \
--disable-imageProcessor-build \
--disable-lite-build \
--disable-run-create-ppd \
--disable-shadow-build \
--disable-qt3 \
--disable-qt4 \
--disable-udev_sysfs_rules \
--with-cupsbackenddir="$("${cups_config}" --serverbin)"/backend \
--with-cupsfilterdir="$("${cups_config}" --serverbin)"/filter \
--with-docdir=/usr/share/doc/${PF} \
--with-htmldir=/usr/share/doc/${PF}/html \
--enable-hpps-install \
$(use_enable !minimal dbus-build) \
--disable-network-build \
"${drv_build[@]}" \
"${minimal_build[@]}" \
$(use_enable doc doc-build) \
$(use_enable libusb0 libusb01_build) \
$(use_enable parport pp-build) \
$(use_enable policykit)
# hpijs ppds are created at configure time but are not installed (3.17.11)
# Use system foomatic-rip for hpijs driver instead of foomatic-rip-hplip
# The hpcups driver does not use foomatic-rip
#local i
#for i in ppd/hpijs/*.ppd.gz ; do
# rm -f ${i}.temp || die
# gunzip -c ${i} | sed 's/foomatic-rip-hplip/foomatic-rip/g' | \
# gzip > ${i}.temp || die
# mv ${i}.temp ${i} || die
#done
}
src_install() {
# Only install the hpps and hpcups filters.
exeinto /usr/libexec/cups/filter
doexe hpps
doexe hpcups
readme.gentoo_create_doc
if use fuzzer ; then
insinto /usr/share/cups/model
doins "${FILESDIR}"/hpcups.ppd
local fuzzer_component_id="167231"
fuzzer_install "${FILESDIR}"/OWNERS hpcups_fuzzer --comp "${fuzzer_component_id}"
fuzzer_install "${FILESDIR}"/OWNERS hpps_fuzzer --comp "${fuzzer_component_id}"
fi
}
pkg_postinst() {
readme.gentoo_print_elog
}