# Maintainer: Omar Vega Ramos <ovruni@gnu.org.pe>
# Maintainer: David P. <megver83@parabola.nu>
# Maintainer (arch): Andreas Radke <andyrtr@archlinux.org>
# Contributor: Tom Gundersen <teg@jklm.no>
# Contributor: Rémy Oudompheng <remy@archlinux.org>
# Contributor: Morgan LEFIEUX <comete@archlinuxfr.org>
# Contributor: André Silva <emulatorman@hyperbola.info>
# Contributor: Márcio Silva <coadde@hyperbola.info>
# Contributor: Jorge López <jorginho@hyperbola.info>
# Maintainer (arch): Kevin Mihelich <kevin@archlinuxarm.org>
# Contributor: bill-auger <bill-auger@programmer.net>


# parabola changes and rationale:
# - remove recommendations and downloads of non-free binaries
# - disable auto-upgrade download and other online features


pkgname=hplip
pkgver=3.23.12
pkgrel=2
pkgrel+=.parabola1
epoch=1
pkgdesc="Drivers for HP DeskJet, OfficeJet, Photosmart, Business Inkjet and some LaserJet"
arch=('x86_64')
arch+=('i686' 'armv7h')
url="https://hplipopensource.com"
license=('GPL2' 'GPL3' 'custom:MIT' 'custom:BSD3') # arch license array is incomplete
depends=('python-dbus' 'python-distro' 'ghostscript' 'net-snmp'
         'foomatic-db-engine' 'python-gobject' 'libxcrypt'
         'libjpeg-turbo' 'dbus' 'gcc-libs' 'avahi' 'python'
         'xdg-utils' 'zlib' 'libcups' 'glibc')
makedepends=('python-pyqt5' 'sane' 'rpcbind' 'cups' 'libusb')
optdepends=('cups: for printing support'
            'sane: for scanner support'
            'xsane: sane scanner frontend'
            'python-pillow: for commandline scanning support'
            'python-reportlab: for pdf output in hp-scan'
            'rpcbind: for network support'
            'python-pyqt5: for running GUI and hp-toolbox'
            'libusb: for advanced usb support'
            'wget: for network support')
backup=('etc/hp/hplip.conf' 'etc/sane.d/dll.d/hpaio')
source=(https://downloads.sourceforge.net/${pkgname}/$pkgname-$pkgver.tar.gz{,.asc}
        disable_upgrade.patch
        0003-models.dat-Re-add-drivers-missing-from-3.19.1.patch
        0018-Allow-non-JPEG-scanning-on-the-HP-DeskJet-3520-All-i.patch
        0022-Add-include-cups-ppd.h-in-various-places-as-CUPS-2.2.patch
        0023-Fix-handling-of-unicode-filenames-in-sixext.py.patch
        # use the one from Fedora
        hplip-configure-python.patch
        python3.diff
        reproducible-gzip.patch)
source_armv7h=(0001-Remove-ImageProcessor.patch) # x86-only
sha512sums=('7461ffec38be68421e4204021f53d2b1641e7a67c14f205390d45f487a1af90956fd221f7e1561635508103ae944f19e04d6052d3f8928f2c9685fdcdcf515df'
            'SKIP'
            'a12aaeece5285ffb86bdbc24871bf512fbc1f29da44ae51ded314378032662074a42b8aca23bebb378bf78ed15bb7f99da59bfb4cd456f3458e7a5ef42a900f8'
            'f79b3f09d022178099f38b9eae1792396e730eb5352a03d088e6610d92b3895f3f65bb92089ce7f5b21d794f9716ceb176d29ca7283e8a48bb04cf6aba305a2f'
            '93e29a9ef893636b2b84443e75525c4ed42531d6e68a182dfbb725c3919c77b966b5e7d9381a34d3b5853423995a7b15efb69ce3e500ec72b25b65b2ad6bd64c'
            '22aeb5b851f78bc6bc62e0bc3da99fecaf42d7604af41e2f3343f8d3666541f7b06b7d1a7d0ddf24f1731ac7b12dfe582375a98e3b94dfa323d6ce954549ca67'
            '763949a0bc460dcc9faefc86f2a91cf342781bfce696ed0c3826758572dd03ac266bbeb7b6a4f9376ac298d7d3c9c4def42d94921a8e1d1695e39396e36d95ff'
            '089c102357ea5fd55d81ae76aaff62713f780fd84500c3b92ecd6b2bb11ccdc3a162978548e9a5f9e98a8354a5be3997e416c52daa18eda4621ed79a29d6fea8'
            'b8a4c860e90a52ec566ca5a9c7f3a5ecb7386ae76e17b2c6c878073e60eeaf0cb63883b740b4725794be9914e1ab8fc91313efb288395f3095f599c07f54cf14'
            '379fcbe9dc2986da828a174a0ac4e71a1da43a98408894d5e713e09d7d9cba1e9fac30f9602b81d48d992abe6b65b6402b8a07664efe97400c5d839be33cf15f')
sha512sums_armv7h=('7f402ed13341ac9a01f28ecdb97effcd15f5fa9d123e554d4dd78e9f5ed01bcf7b4fe7400c53ddf5e7068f9ffd858d8fefe060e2fcacea0a0524145d78e315cc')
validpgpkeys=('4ABA2F66DBD5A95894910E0673D770CDA59047B9') # HPLIP (HP Linux Imaging and Printing) <hplip@hp.com>

prepare() {
 cd "$pkgname"-$pkgver

 # disable insecure update - https://bugs.archlinux.org/task/38083
 patch -Np0 -i "${srcdir}"/disable_upgrade.patch
 # add missing 'include <cups/ppd.h>' at various places
 patch -Np1 -i "${srcdir}"/0022-Add-include-cups-ppd.h-in-various-places-as-CUPS-2.2.patch
 # fix some handling unicode file names FS#58412
 patch -Np1 -i "${srcdir}"/0023-Fix-handling-of-unicode-filenames-in-sixext.py.patch
 # Workaround patch for missing Python3 transition of the old
 # (pre-USB-storage) photo memory card support (pcardext) - Debian patch
 patch -Np1 -i "${srcdir}"/python3.diff
 # fix model support / Debian patch / FS#74942
 patch -Np1 -i "${srcdir}"/0003-models.dat-Re-add-drivers-missing-from-3.19.1.patch
 # https://bugs.launchpad.net/hplip/+bug/1879445
 # broken scanning - https://bugs.archlinux.org/task/66704
 patch -Np1 -i ../hplip-configure-python.patch
 #  allow non-jpeg scanning on all-in-one devices - FS#78135
 patch -Np1 -i ../0018-Allow-non-JPEG-scanning-on-the-HP-DeskJet-3520-All-i.patch

 # make gzip creation reproducible by removing the timestamp
 patch -Np1 -i ../reproducible-gzip.patch

 # remove imageprocessor
 [[ "${CARCH}" != armv7h ]] || patch -Np1 -i "${srcdir}"/0001-Remove-ImageProcessor.patch


 ## parabola changes ##

 echo "re-wording non-free recommendations/errors and disabling online features"

 # Removing printers not supported with free drivers from the database
 # from: https://gitlab.trisquel.org/trisquel/package-helpers/raw/aramo/helpers/make-hplip
 local tmp=printers.tmp
 local output=printers.out
 local printers='data/models/models.dat'
 # Keep header license
 sed '/\[/,99999d' $printers > $output
 for model in $(grep '\[' $printers | /bin/sed 's/\[//; s/\]//'); do
   sed -n "/\[$model\]/,/^$/p;" $printers > $tmp
   grep '^download=True' -q $tmp && continue
   grep '^plugin=1' -q $tmp && continue
   grep '^support-type=0' -q $tmp && continue
   cat $tmp >> $output
 done
 cp $output $printers
 # Set plugin-optional entries to not-required
 /bin/sed -i 's/plugin=2/plugin=0/g' $printers
 rm $tmp $output

 # re-word non-free firmware recommendations and error messages
 # and disable online features (phone-home, plugin/firmware downlaoder, etc)
 local match_rxs=( # ASSERT: aligns with '$replace_rxs'
    ', requires proprietary plugin'
    'Device requires a proprietary binary Plug-in, run hp-plugin'
    'Your HP Device requires to install HP proprietary plugin\\n'
    "Device proprietary plug-in is missing. Click 'Next' to continue plug-in installation. In case of plugin download failure, run 'hp-plugin' command from the terminal manually."
    "Device requires proprietary plug-in which is missing. Click 'Next' to continue plug-in installation"
    "def download(self, pluginPath='',callback = None):"
    'def download_from_network(weburl, outputFile = None, useURLLIB=False):'
    'def download_via_wget(target):'
    'def download_via_curl(target):'
    'def check_network_via_ping(target):'
    'def check_network_connection(url=HTTP_CHECK_TARGET, ping_server=PING_CHECK_TARGET):'
    'def download(mode, passwordObj):'
    'Network connection not detected.'
 )
 local replace_rxs=( # ASSERT: aligns with '$match_rxs'
    ', (non-free/unsupported)'
    'Device is non-free/unsupported'
    ''
    'Device is non-free/unsupported./'
    'Device is non-free/unsupported./'
    '&\n        return 1'
    '&\n    return -1, ""'
    '&\n    return -1'
    '&\n    return -1'
    '&\n    return -1'
    '&\n    return -1'
    '&\n    return ERROR_NO_NETWORK'
    'Parabola has disabled the networking features of this application.'
 )
 local rx_n
 for (( rx_n = 0 ; rx_n < ${#match_rxs[@]} ; ++rx_n ))
 do  sed -i "s|${match_rxs[$rx_n]}|${replace_rxs[$rx_n]}|" $(grep -rlI "${match_rxs[$rx_n]}")
 done

 # verify libre patching
 local patch_msg='HPLIP upgrade is disabled by Archlinux for security reasons,'
 local err_msg="ERROR: 'disable_upgrade.patch' not applied"
 grep -A 1 "$patch_msg" upgrade.py | tail -n 1 | grep -q 'clean_exit(1)' ||
 ! echo "$err_msg" || return 1

 ## END parabola changes ##


 export AUTOMAKE='automake --foreign'
 autoreconf --force --install
}

build() {
 cd "$pkgname"-$pkgver
 ./configure --prefix=/usr \
             --enable-qt5 \
             --disable-qt4 \
             --enable-hpcups-install \
             --enable-cups-drv-install \
             --disable-imageProcessor-build \
             --enable-pp-build #--help
 sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
 make
}

package() {
 cd "$pkgname"-$pkgver
 make -j1 rulesdir=/usr/lib/udev/rules.d DESTDIR="$pkgdir/" install

 # remove config provided by sane and autostart of hp-daemon
 rm -rf "$pkgdir"/etc/{sane.d,xdg}
 install -dm755 "${pkgdir}"/etc/sane.d/dll.d
 echo hpaio > "${pkgdir}"/etc/sane.d/dll.d/hpaio

 # remove HAL .fdi file because HAL is no longer used
 rm -vrf "$pkgdir"/usr/share/hal

 # remove rc script
 rm -vrf "$pkgdir"/etc/init.d

 # add mixed license file
 install -Dt "${pkgdir}"/usr/share/licenses/${pkgname} -m644 COPYING

 # Compile Python bytecode:
 python -m compileall -d /usr/share "$pkgdir/usr/share"
 python -O -m compileall -d /usr/share "$pkgdir/usr/share"
}
