diff options
Diffstat (limited to 'PKGBUILD')
-rw-r--r-- | PKGBUILD | 146 |
1 files changed, 88 insertions, 58 deletions
@@ -1,7 +1,6 @@ # Maintainer: Chris Severance aur.severach aATt spamgourmet dott com # Contributor: giacomo giacomogiorgianni gmail # Contributor: brenton <brenton taylorbyte com> -# Category: system # There's a new generic lpr driver 3.1.0-1 available but it looks like some # work to get it compatible with the cups driver. @@ -26,14 +25,13 @@ pkgname="brother-${_brotherlnd}" # I'd like to add a dash to the package name and the printer driver but that # could invalidate a lot of cups settings and documents and make us different # from other distros. -pkgver='2.0.4' -pkgrel='2' -_lprpkgver='2.1.0' -_lprpkgrel='1' +pkgver='2.0.4_2' +pkgrel='1' +_lprpkgver='2.1.0_1' pkgdesc="LPR and CUPS driver for the Brother ${_brotheru} printer" arch=('i686' 'x86_64') -url='http://solutions.brother.com/linux/en_us/' -license=('custom:Brother Industries') +url='http://www.brother.com/' +license=('GPL' 'custom') depends=('cups' 'ghostscript' 'psutils' 'a2ps' 'sed' 'grep') depends_x86_64=('lib32-glibc') # We look at the scripts and find these programs from which we decide on the depends above. @@ -45,21 +43,24 @@ depends_x86_64=('lib32-glibc') # sed grep awk # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=670055 # Printing a text file fails when Liberation is the only TrueType font available -optdepends=('ttf-dejavu: printing text files from lpr') -#install="${pkgname}.install" -# The cups wrapper uses the lpr driver. -_brsource="br${_brotherlnd}cups_src-${pkgver}-${pkgrel}" +optdepends=( + 'ttf-dejavu: printing text files from lpr' + 'brscan4: Scanner support' +) +_brsource="br${_brotherlnd}cups_src-${pkgver//_/-}" +_dlf="http://www.brother.com/pub/bsc/linux/dlf" source=( - "http://download.brother.com/welcome/dlf006760/${_brsource}.tar.gz" - "http://download.brother.com/welcome/dlf006238/cupswrapper${_brotherund}-${pkgver}-${pkgrel}.i386.rpm" - "http://www.brother.com/pub/bsc/linux/dlf/${_brotherlnd}lpr-${_lprpkgver}-${_lprpkgrel}.i386.rpm" - #"http://download.brother.com/welcome/dlf101124/brgenml1lpr-3.1.0-1.i386.rpm" + "${_dlf}/cupswrapper${_brotherund}-${pkgver//_/-}.i386.rpm" + "${_dlf}/${_brotherlnd}lpr-${_lprpkgver//_/-}.i386.rpm" + "${_dlf}/${_brsource}.tar.gz" + 'lpr-license.txt' ) -sha256sums=('0330ea2d74627026736842beade0b504816265cdd61b1b1b49a234a1e2c8011c' - '358e37e1d8cfdce25b1ebe17f21fd2cf3abcdc45263c7e007e36c8be74ae2fbf' - 'b3ffe2e882d08763795e2cc18b35e724e5157a57edf6c76696401c4c810af3a9') +sha256sums=('358e37e1d8cfdce25b1ebe17f21fd2cf3abcdc45263c7e007e36c8be74ae2fbf' + 'b3ffe2e882d08763795e2cc18b35e724e5157a57edf6c76696401c4c810af3a9' + '0330ea2d74627026736842beade0b504816265cdd61b1b1b49a234a1e2c8011c' + '576f8d52351b450f417322885106490cdf7b97b45c7f6262f5eafaddf63adf29') -build() { +prepare() { set -u # Do not Install in '/usr/local'. Does not apply to all Brother models. # This may modify binary blobs which only @@ -68,7 +69,7 @@ build() { install -dm755 "${srcdir}/usr/share" mv "${srcdir}/usr/local/Brother/" "${srcdir}/usr/share/brother" rm -rf "${srcdir}/usr/local" - sed -i -e 's:/usr/local/Brother:/usr/share/brother:g' $(grep -lr '/usr/local/Brother' ./) + sed -e 's:/usr/local/Brother:/usr/share/brother:g' -i $(grep -lr '/usr/local/Brother' ./) fi # setup cups-directories @@ -83,6 +84,9 @@ build() { test -f "${_rcfile}" || echo "${}" local _bindir="$(find "`pwd`" -type d -name 'cupswrapper')" test -d "${_bindir}" || echo "${}" # die if blank or invalid before we rm something we don't want to + pushd "${_bindir}" > /dev/null + local _brcupsconf=(brcupsconf*); _brcupsconf="${_brcupsconf[0]}" + test -x "${_brcupsconf}" || echo "${}" rm -f "${_bindir}"/* # We download the cups driver only to throw it all away. All I want is the dir name without hunting for it in the installer. local _basedir="${srcdir}/${_brsource}" test -d "${_basedir}" || echo "${}" @@ -106,15 +110,14 @@ build() { # rid of that either. cd "${_makedir}" if [ -s 'Makefile' ]; then - make -s + 'ma''ke' -s cp -p 'brcupsconfpt1' "${_bindir}" else - # Not sure why it's called brcupsconfig3 some places and brcupsconfig4 in others. - # The version in their binary matches the version in the source so it looks good to me. # gcc options are pulled from other Brother makefiles. - gcc -pipe -Wall -W -O2 -s -o "${_bindir}/brcupsconfig4" "brcupsconfig.c" + gcc -pipe -Wall -W -O2 -s -o "${_bindir}/${_brcupsconf}" "brcupsconfig.c" fi + # Some models supply the ppd in the install script cd "${_bindir}" if [ ! -z "${_ppddir:-}" ]; then # Use the ppd supplied in the source @@ -125,51 +128,85 @@ build() { # Some Brother installers create files here mkdir -p "${srcdir}/var/tmp" - # Fix any sbin reference in the lpr driver. The cups driver uses bin. - sed -i -e 's:/sbin/:/bin/:g' $(find "${srcdir}/usr" -type f -name "psconvert2") + # Fix lpr driver. + sed -e '# Fix sbin reference' \ + -e 's:/sbin/:/bin/:g' \ + -e '#Fix hash bang' \ + -e 's:#/bin/sh:#!/bin/sh:g' \ + -i $(find "${srcdir}/usr" -type f -name 'psconvert2') # Fix page shifted off center that affects some printers # Letter prints off center shifted down and right with PaperType=A4 # I can only test printing A4 on Letter paper. A4 appears to print correctly with PaperType=Letter - sed -i -e 's:^\(PaperType\)=.\+$:\1=Letter:g' "${_rcfile}" + sed -e 's:^\(PaperType\)=.\+$:\1=Letter:g' -i "${_rcfile}" # Modify the installer so we can finish the install here in PKGBUILD. cp -p "${_wrapdir}/${_wrapper_source}" "${_bindir}/" #cp -p "${_wrapper_source}" "${_wrapper_source}.Arch" # debug: diff compare with Total Commander - sed -i -e '# Install to _srcdir. Some folders may not apply to this model.' \ - -e 's:/usr:${_srcdir}&:g' \ - -e 's:/opt:${_srcdir}&:g' \ - -e 's:/var:${_srcdir}&:g' \ - -e "# Stop the Install script after the files are generated. cups doesn't require a reload to see the printer driver." \ - -e 's:^if \[ -e /etc/init:exit 0 #Arch Linux Compatible\n&:g' \ - "${_wrapper_source}" - grep -lq "#Arch Linux Compatible" "${_wrapper_source}" || echo "${}" + sed -e '# Install to _srcdir. Some folders may not apply to this model.' \ + -e 's:/usr:"${_srcdir}"&:g' \ + -e 's:/opt:"${_srcdir}"&:g' \ + -e 's:/var:"${_srcdir}"&:g' \ + -e 's:/etc:"${_srcdir}"&:g' \ + -e 's:""${_srcdir}":"${_srcdir}:g' \ + -e "# Stop the Install script after the files are generated. cups doesn't require a reload to see the printer driver." \ + -e 's:^sleep.*$:exit 0 # & #Arch Linux Compatible:g' \ + -e '# not using set -u allows bugs like this to slip by' \ + -e '#/Nup=/ s:`:\\`:g' \ + -e 's: $errorcode: \\$errorcode:g' \ + -e '# This printer requires the permissions fix that isnt multi user compatible.' \ + -e 's:/usr/local/Brother:/usr/share/brother:g' \ + -i "${_wrapper_source}" + grep -lq "#Arch Linux Compatible$" "${_wrapper_source}" || echo "${}" test -f "${_wrapper_source}.Arch" && echo "${}" # Halt for debugging # Generate PPD and wrapper. Use sh -x to debug # Possible bug: copying to /usr/share/ppd is disabled. - export _srcdir="${srcdir}" - sh -e "${_wrapper_source}" -i - unset _srcdir - + _srcdir="${srcdir}" \ + sh -u -e "${_wrapper_source}" -i + chmod 644 "${srcdir}/usr/share/cups/model"/*.ppd # Some installers make ppd executable rm -rf "${srcdir}/var" # Remove srcdir from the generated wrapper file. # No paths in the generated ppd. - sed -i -e '# Remove the ${_srcdir} variety' \ - -e 's:${_srcdir}::' \ - -e '# Remove the /home/... variety' \ - -e "s:${srcdir}::" "${srcdir}/usr/lib/cups/filter/"*lpdwrapper* + sed -e '# Remove the ${_srcdir} variety' \ + -e 's:${_srcdir}::' \ + -e '# Remove the /home/... variety' \ + -e "s:${srcdir}::" \ + -e '# Remove surplus quotes' \ + -e 's:""/:/:g' \ + -i "${srcdir}/usr/lib/cups/filter"/*lpdwrapper* # We did everything in the installer so we can get rid of it. - rm -f "${_wrapper_source}" - set +u + rm "${_wrapper_source}" + + cd "${srcdir}" + # Misnamed printer does not sort or autodetect properly + sed -e "s:Brother ${_brotherund} :Brother ${_brotheru} :g" -i 'usr/share/cups/model'/*.ppd + + # Check to see if the lpd wrapper is referenced by the ppd + # Check to see if our compiled code is referenced by the lpd wrapper + local _nppdfound=0 + local _ncodefound=0 + local _lwrapper + for _lwrapper in 'usr/lib/cups/filter'/*; do + if grep -q "$(basename "${_lwrapper}")" 'usr/share/cups/model'/*.ppd; then + _nppdfound=$((_nppdfound+1)) + fi + if grep -q "${_brcupsconf}" "${_lwrapper}"; then + _ncodefound=$((_ncodefound+1)) + fi + done + test "${_nppdfound}" -ne 0 || echo "${}" + test "${_ncodefound}" -ne 0 || echo "${}" + + set +u } package() { set -u local _dir # /var/spool is not used anywhere in this package. Maybe it's needed for non cups lprng. - for _dir in usr opt; do # var + for _dir in 'usr' 'opt'; do # 'var' if [ -d "${srcdir}/${_dir}" ]; then cp -pR "${srcdir}/${_dir}" "${pkgdir}" fi @@ -183,18 +220,11 @@ package() { test "$(find "${pkgdir}/usr/lib/cups/filter/" -type f)" # Ensure there are no forbidden paths - grep -alqr "/sbin" "${pkgdir}" && echo "${}" - grep -alqr "/usr/tmp" "${pkgdir}" && echo "${}" - - #install -Dm644 'cupswrapper-license.txt' "${pkgdir}/usr/share/licenses/${pkgname}/cupswrapper-licence.txt" - #install -Dm644 'lpr-license.txt' "${pkgdir}/usr/share/licenses/${pkgname}/lpr-licence.txt" - - # Change mode to avoid warning on reinstall - # This is no longer necessary. Running the installer here in PKGBUILD sets - # the proper permissions for the package. - #install -d -m777 "${pkgdir}/usr/local/Brother/inf/" - # It looks like this is so everyone can write to brMFC7360Nrc (brPRINTERrc) - # I suspect this isn't safe for multiple users. + ! grep -alqr "/sbin" "${pkgdir}" || echo "${}" + ! grep -alqr "/usr/tmp" "${pkgdir}" || echo "${}" + + install -Dpm644 <(sed -e 's:\r::g' "${_brsource}/Copying") "${pkgdir}/usr/share/licenses/${pkgname}/cupswrapper-licence.txt" + install -Dpm644 'lpr-license.txt' "${pkgdir}/usr/share/licenses/${pkgname}/lpr-licence.txt" set +u } set +u |