summaryrefslogtreecommitdiff
path: root/eclass/ecnij.eclass
diff options
context:
space:
mode:
Diffstat (limited to 'eclass/ecnij.eclass')
-rw-r--r--eclass/ecnij.eclass341
1 files changed, 341 insertions, 0 deletions
diff --git a/eclass/ecnij.eclass b/eclass/ecnij.eclass
new file mode 100644
index 00000000..57d599b3
--- /dev/null
+++ b/eclass/ecnij.eclass
@@ -0,0 +1,341 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: eclass/ecnij.eclass,v 3.4 2016/05/14 19:33:34 Exp $
+
+# @ECLASS: ecnij.eclass
+# @MAINTAINER:
+# bar-overlay <bar@overlay.org>
+# @AUTHOR:
+# Original author: tokiclover <tokiclover@gmail.com>
+# @BLURB: Provide a set of functions to get Canon(R) printers/scanners utilities
+# @DESCRIPTION:
+# Exports base functions used by ebuilds written
+# for net-print/cnijfilter package for canon(r) hardware
+
+if [[ -z "${_ECNIJ_ECLASS}" ]]; then
+_ECNIJ_ECLASS=1
+
+inherit autotools eutils flag-o-matic multilib-build
+
+# @ECLASS-VARIABLE: CANON_PRINTERS
+# @DESCRIPTION:
+# Global use-expand variable
+#
+# CANON_PRINTERS="ip90 ip 100"
+: ${CANON_PRINTERS:=}
+
+# @ECLASS-VARIABLE: PRINTER_MODEL
+# @DESCRIPTION:
+# Array of printer models supported by the ebuild
+# PRINTER_MODEL=(ip90 ip100)
+: ${PRINTER_MODEL:=}
+
+# @ECLASS-VARIABLE: PRINTER_ID
+# @DESCRIPTION:
+# Array of printer ID supported by the ebuild (complement of PRINTER_MODEL)
+# PRINTER_ID=(303 253)
+: ${PRINTER_ID:=}
+
+# @ECLASS-VARIABLE: PRINTER_USE
+# @DESCRIPTION:
+# Array containing the expanded use flags from PRINTER_MODEL
+# PRINTER_USE=(canon_printers_ip{90,100})
+: ${PRINTER_USE:=}
+
+for card in ${PRINTER_MODEL[@]}; do
+ has ${card} ${CANON_PRINTERS} &&
+ PRINTER_USE=(${PRINTER_USE[@]} +canon_printers_${card}) ||
+ PRINTER_USE=(${PRINTER_USE[@]} canon_printers_${card})
+done
+
+IUSE="${IUSE} backends debug +drivers gtk servicetools +usb ${PRINTER_USE[@]}"
+KEYWORDS="~x86 ~amd64"
+
+REQUIRED_USE="${REQUIRED_USE} servicetools? ( gtk )
+ || ( drivers backends ) drivers? ( || ( ${PRINTER_USE[@]} ) )"
+( (( ${PV:0:1} > 3 )) || ( (( ${PV:0:1} == 3 )) && (( ${PV:2:2} >= 10 )) ) ) &&
+REQUIRED_USE+=" servicetools? ( net ) backends? ( || ( net usb ) )" ||
+REQUIRED_USE+=" backends? ( usb )"
+
+LICENSE="GPL-2"
+has net ${IUSE} && LICENSE+=" net? ( CNIJFILTER )"
+
+RDEPEND="${RDEPEND}
+ app-text/ghostscript-gpl
+ dev-libs/glib[${MULTILIB_USEDEP}]
+ dev-libs/popt[${MULTILIB_USEDEP}]
+ servicetools? (
+ gnome-base/libglade[${MULTILIB_USEDEP}]
+ dev-libs/libxml2[${MULTILIB_USEDEP}] )
+ media-libs/tiff[${MULTILIB_USEDEP}]
+ media-libs/libpng[${MULTILIB_USEDEP}]
+ !backends? ( >=${CATEGORY}/${P}[${MULTILIB_USEDEP},backends] )"
+
+( (( ${PV:0:1} >= 3 )) || (( ${PV:2:2} >= 80 )) ) &&
+RDEPEND="${RDEPEND}
+ gtk? ( x11-libs/gtk+:2[${MULTILIB_USEDEP}] )" ||
+RDEPEND="${RDEPEND}
+ gtk? ( x11-libs/gtk+:1[${MULTILIB_USEDEP}] )"
+DEPEND="${DEPEND}
+ virtual/libintl"
+
+: ${EAPI:=5}
+[[ ${EAPI} -lt 4 ]] && die "EAPI=\"${EAPI}\" is not supported"
+
+EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install pkg_postinst
+
+# @FUNCTION: dir_src_prepare
+# @DESCRIPTION:
+# Internal wrapper to handle subdir phase {prepare,config,compilation...}
+dir_src_command()
+{
+ local dirs="${1}" cmd="${2}" args="${3}"
+ (( $# < 2 )) && eeror "Invalid number of argument" && return 1
+
+ for dir in ${dirs}; do
+ pushd ${dir} || die
+ case "${cmd}" in
+ (eautoreconf)
+ [[ -d po ]] && echo "no" | glib-gettextize --force --copy
+ ${cmd} ${args}
+ ;;
+ (econf)
+ case ${dir} in
+ (backendnet|cnijnpr|lgmon2)
+ myeconfargs=(
+ "--enable-progpath=/usr/bin"
+ "--enable-libpath=/var/lib/cnijlib"
+ "${myeconfargs[@]}"
+ )
+ ;;
+ (backend|cngpiji*|cnijbe|lgmon|pstocanonij)
+ myeconfargs=(
+ "--enable-progpath=/usr/bin"
+ "${myeconfargs[@]}"
+ )
+ ;;
+ esac
+ ${cmd} ${args} ${myeconfargs[@]}
+ ;;
+ (*)
+ ${cmd} ${args}
+ ;;
+ esac
+ popd || die
+ done
+}
+
+# @FUNCTION: ecnij_pkg_setup
+# @DESCRIPTION:
+# Default exported pkg_setup() function
+ecnij_pkg_setup()
+{
+ debug-print-function ${FUNCNAME} "${@}"
+
+ [[ "${LINGUAS}" ]] || export LINGUAS="en"
+
+ use abi_x86_32 && use amd64 && multilib_toolchain_setup "x86"
+
+ CNIJFILTER_SRC="libs pstocanonij"
+ PRINTER_SRC="cnijfilter"
+ use usb && CNIJFILTER_SRC+=" backend"
+ use_if_iuse net && CNIJFILTER_SRC+=" backendnet"
+ if use gtk; then
+ CNIJFILTER_SRC+=" cngpij"
+ if (( ${PV:0:1} == 4 )); then
+ PRINTER_SRC+=" lgmon2"
+ use net && PRINTER_SRC+=" cnijnpr"
+ else
+ PRINTER_SRC+=" lgmon cngpijmon"
+ use_if_iuse net && PRINTER_SRC+=" cngpijmon/cnijnpr"
+ fi
+ fi
+ use servicetools &&
+ if (( ${PV:0:1} == 4 )); then
+ CNIJFILTER_SRC+=" cngpijmnt"
+ elif (( ${PV:0:1} == 3 )) && (( ${PV:2:2} >= 80 )); then
+ CNIJFILTER_SRC+=" cngpijmnt maintenance"
+ else
+ PRINTER_SRC+=" printui"
+ fi
+
+ if (( ${PV:0:1} == 4 )); then
+ PRINTER_SRC="bscc2sts ${PRINTER_SRC}"
+ CNIJFILTER_SRC="cmdtocanonij ${CNIJFILTER_SRC} cnijbe"
+ fi
+}
+
+# @FUNCTION: ecnij_src_unpack
+# @DESCRIPTION:
+# Default exported src_unpack() function
+ecnij_src_unpack()
+{
+ debug-print-function ${FUNCNAME} "${@}"
+
+ default
+ cd "${S}"
+}
+
+# @FUNCTION: ecnij_src_prepare
+# @DESCRIPTION:
+# Setup environment and run elibtoolize;
+# Default exported src_prepare() function supporting PATCHES
+ecnij_src_prepare()
+{
+ debug-print-function ${FUNCNAME} "${@}"
+
+ [[ "${PATCHES}" ]] && epatch "${PATCHES[@]}"
+
+ epatch_user
+
+ use backends &&
+ dir_src_command "${CNIJFILTER_SRC}" "eautoreconf"
+
+ local p pr prid
+ for (( p=0; p<${#PRINTER_ID[@]}; p++ )); do
+ pr=${PRINTER_MODEL[$p]} prid=${PRINTER_ID[$p]}
+ if use canon_printers_${pr}; then
+ mkdir ${pr} || die
+ for dir in ${prid} ${PRINTER_SRC}; do
+ cp -a ${dir} ${pr} || die
+ done
+ pushd ${pr} || die
+ [[ -d ../com ]] && ln -s {../,}com
+ dir_src_command "${PRINTER_SRC}" "eautoreconf"
+ popd
+ fi
+ done
+}
+
+# @FUNCTION: ecnij_src_configure
+# @DESCRIPTION:
+# Deafult exported src_configure() function
+ecnij_src_configure()
+{
+ debug-print-function ${FUNCNAME} "${@}"
+
+ use backends &&
+ dir_src_command "${CNIJFILTER_SRC}" "econf"
+
+ local p pr prid
+ for (( p=0; p<${#PRINTER_ID[@]}; p++ )); do
+ pr=${PRINTER_MODEL[$p]} prid=${PRINTER_ID[$p]}
+ if use canon_printers_${pr}; then
+ pushd ${pr} || die
+ dir_src_command "${PRINTER_SRC}" \
+ "econf" "--program-suffix=${pr}"
+ popd
+ fi
+ done
+}
+
+# @FUNCTION: ecnij_src_compile
+# @DESCRIPTION:
+# The base exported src_compile() function
+ecnij_src_compile() {
+ debug-print-function ${FUNCNAME} "${@}"
+
+ local p pr prid
+ for (( p=0; p<${#PRINTER_ID[@]}; p++ )); do
+ pr=${PRINTER_MODEL[$p]} prid=${PRINTER_ID[$p]}
+ if use canon_printers_${pr}; then
+ pushd ${pr} || die
+ dir_src_command "${PRINTER_SRC}" "emake"
+ popd
+ fi
+ done
+
+ use backends &&
+ dir_src_command "${CNIJFILTER_SRC}" "emake"
+}
+
+# @FUNCTION: ecnij_src_install
+# @DESCRIPTION:
+# Default exported src_install() function
+ecnij_src_install()
+{
+ debug-print-function ${FUNCNAME} "${@}"
+
+ local abi_libdir=/usr/$(get_libdir) p pr prid
+ local abi_lib=${abi_libdir#*lib}
+ local lib license lingua lng
+ local -a DOCS
+
+ (( ${#MULTILIB_COMPAT[@]} == 1 )) && abi_lib=
+
+ use backends &&
+ dir_src_command "${CNIJFILTER_SRC}" "emake" "DESTDIR=\"${D}\" install"
+
+ for (( p=0; p<${#PRINTER_ID[@]}; p++ )); do
+ pr=${PRINTER_MODEL[$p]} prid=${PRINTER_ID[$p]}
+ if use canon_printers_${pr}; then
+ pushd ${pr} || die
+ dir_src_command "${PRINTER_SRC}" "emake" "DESTDIR=\"${D}\" install"
+ popd
+
+ dolib.so ${prid}/libs_bin${abi_lib}/*.so*
+ exeinto /var/lib/cnijlib
+ doexe ${prid}/database/*
+ insinto /usr/share/cups/model
+ doins ppd/canon${pr}.ppd
+
+ use_if_iuse doc &&
+ for lingua in ${LINGUAS}; do
+ lng=${lingua^^[a-z]}
+ [[ -f lproptions/lproptions-${pr}-${PV}${lng}.txt ]] &&
+ DOCS+=(lproptions/lproptions-${pr}-${PV}${lng}.txt)
+ done
+ fi
+ done
+
+ use backends &&
+ if use_if_iuse net; then
+ pushd com/libs_bin${abi_lib} || die
+ for lib in lib*.so; do
+ [[ -L ${lib} ]] && continue ||
+ rm ${lib} && ln -s ${lib}.[0-9]* ${lib}
+ done
+ popd
+
+ dolib.so com/libs_bin${abi_lib}/*.so*
+ EXEOPTIONS="-m555 -glp -olp"
+ exeinto /var/lib/cnijlib
+ doexe com/ini/cnnet.ini
+ fi
+
+ use backends &&
+ if (( ${PV:0:1} == 4 )); then
+ mkdir -p "${ED}"/usr/share/${PN} || die
+ mv "${ED}"/usr/share/{cmdtocanonij,${PN}} || die
+ fi
+
+ if use drivers || use_if_iuse net; then
+ for lingua in ${LINGUAS}; do
+ lng=${lingua^^[a-z]}
+ license=LICENSE-${PN}-${PV}${lng}.txt
+ [[ -e ${license%${lng:0:1}.txt}.txt ]] &&
+ mv -f ${license%{lng:0:1}.txt} ${license}
+ [[ -e ${license} ]] && DOCS+=(${license})
+ done
+ fi
+
+ [[ "${DOCS[*]}" ]] && dodoc "${DOCS[@]}"
+}
+
+# @FUNCTION: ecnij_pkg_postinst
+# @DESCRIPTION:
+# Default exported src_postinst() function
+ecnij_pkg_postinst()
+{
+ debug-print-function ${FUNCNAME} "${@}"
+
+ elog "To install a printer:"
+ elog " * First, restart CUPS: /etc/init.d/cupsd restart"
+ elog " * Go to http://127.0.0.1:631/ with your favorite browser"
+ elog " and then go to Printers/Add Printer"
+ elog "You can consult the following for any issue/bug:"
+ elog "https://forums.gentoo.org/viewtopic-p-3217721.html"
+ elog "https://bugs.gentoo.org/show_bug.cgi?id=258244"
+}
+
+fi