# Copyright 1999-2011 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ inherit autotools multilib versionator EAPI=3 DESCRIPTION="Canon InkJet Printer Driver for Linux (Pixus/Pixma-Series)." HOMEPAGE="http://software.canon-europe.com/products/0010837.asp" RESTRICT="fetch" SRC_URI="MX870_Linux_Package.tar" LICENSE="UNKNOWWN" SLOT="0" KEYWORDS="~amd64 ~x86" IUSE="servicetools ip2700 mx340 mx350 mx870 net usb scanner doc" DEPEND=">=sys-devel/gettext-0.10.35 >=x11-libs/gtk+-2.0.0 net-print/cups sys-libs/glibc media-libs/tiff media-libs/libpng dev-libs/libxml2 x86? ( dev-libs/popt ) amd64? ( app-emulation/emul-linux-x86-compat app-emulation/emul-linux-x86-baselibs app-emulation/emul-linux-x86-popt ) scanner? ( >=media-gfx/gimp-2.0.0 media-gfx/sane-backends )" RDEPEND="${DEPEND}" ABI="x86" MY_PV=$(replace_version_separator 2 '-' ) # Arrays of supported Printers, there IDs and compatible models _pruse=("ip2700" "mx340" "mx350" "mx870") _prname=(${_pruse[@]}) _prid=("364" "365" "366" "367") _prcomp=("ip2700series" "mx340series" "mx350series" "mx870series") _max=$((${#_pruse[@]}-1)) # used for iterating through these arrays _cnijfilter_source="${WORKDIR}"/${PN}-source-${MY_PV} _scangearmp_source="${WORKDIR}"/scangearmp-source-1.50-1 _scanenable="false" S="${WORKDIR}" pkg_nofetch() { einfo "Please download ${SRC_URI} from" einfo "http://software.canon-europe.com/products/0010837.asp" einfo "(select Linux and English) and place it in ${DISTDIR}" } pkg_setup() { if [ -z "$LINGUAS" ]; then ewarn "You didn't specify 'LINGUAS' in your make.conf. Assuming" ewarn "english localisation, i.e. 'LINGUAS=\"en\"'." LINGUAS="en" fi _printercount=0 for (( i = 0 ; i <= ${_max} ; i++ )) ; do if use ${_pruse[$i]} ; then _printercount=${_printercount}+1 fi done [[ ${_printercount} -eq 0 ]] && die \ "Printer model not set in USE flags. Set one and try again" if ! use net && ! use usb ; then die "Must select at least one of net or usb" fi # Only the last three in printer array are scanner-capable... for (( i = 1 ; i <= ${_max} ; i++ )) ; do if use ${_pruse[$i]} ; then if use scanner ; then _scanenable="true" fi fi done } src_unpack() { unpack "${A}" unpack ./cnijfilter-source-${MY_PV}.tar.gz unpack ./guidemx870series-pd-${MY_PV}_en.tar.gz unpack ./guidemx870series-sd-1.50-1_en.tar.gz unpack ./scangearmp-source-1.50-1.tar.gz } src_prepare() { epatch "${FILESDIR}"/${PN}_${MY_PV}_amd64-implicit-function-fix.patch epatch "${FILESDIR}"/${PN}_${MY_PV}_printui_m4.patch epatch "${FILESDIR}"/${PN}_${MY_PV}_scangearmp_library_load.patch cd "${_cnijfilter_source}"/libs || die "cd" einfo "preparing libs" autotools_run_tool ${LIBTOOLIZE:-libtoolize} --copy --force --automake eaclocal eautoheader eautomake --gnu eautoconf cd "${_cnijfilter_source}"/pstocanonij || die "cd" einfo "preparing pstocanonij" autotools_run_tool ${LIBTOOLIZE:-libtoolize} --copy --force --automake eaclocal eautoheader eautomake --gnu eautoconf if use usb ; then cd "${_cnijfilter_source}"/backend || die "cd" einfo "preparing backend" autotools_run_tool ${LIBTOOLIZE:-libtoolize} --copy --force --automake eaclocal eautoheader eautomake --gnu eautoconf fi if use net ; then cd "${_cnijfilter_source}"/backendnet || die "cd" einfo "preparing backendnet" autotools_run_tool ${LIBTOOLIZE:-libtoolize} --copy --force --automake eaclocal eautoheader eautomake --gnu eautoconf fi if use servicetools ; then cd "${_cnijfilter_source}"/cngpij || die "cd" einfo "preparing cngpij" autotools_run_tool ${LIBTOOLIZE:-libtoolize} --copy --force --automake eaclocal eautoheader eautomake --gnu eautoconf fi if [[ "${_scanenable}" == "true" ]] ; then cd "${_scangearmp_source}"/scangearmp || die "cd" einfo "preparing scangearmp" echo "no" | glib-gettextize --force --copy autotools_run_tool ${LIBTOOLIZE:-libtoolize} --copy --force --automake eaclocal eautoheader eautomake --gnu eautoconf fi for (( i = 0 ; i <= ${_max} ; i++ )) ; do if use ${_pruse[$i]} ; then src_prepare_pr ${_prname[$i]} fi done cd "${_cnijfilter_source}"/cngpijmon/cnijnpr || die "cd" einfo "preparing cnijnpr" eaclocal eautoheader eautomake --gnu eautoconf } src_configure() { cd "${_cnijfilter_source}"/libs || die "cd" einfo "configuring libs" econf --libdir=/usr/$(get_libdir) || die "econf libs" cd "${_cnijfilter_source}"/pstocanonij || die "cd" einfo "configuring pstocanonij" econf --libdir=/usr/libexec \ --enable-progpath=/usr/bin \ || die "econf pstocanonij" if use usb ; then cd "${_cnijfilter_source}"/backend || die "cd" einfo "configuring backend" econf --libdir=/usr/$(get_libdir) \ --enable-progpath=/usr/bin \ || die "econf backend" fi if use net ; then cd "${_cnijfilter_source}"/backendnet || die "cd" einfo "configuring backendnet" econf --libdir=/usr/$(get_libdir) \ --enable-progpath=/usr/bin \ || die "econf backendnet" fi if use servicetools ; then cd "${_cnijfilter_source}"/cngpij || die "cd" einfo "configuring cngpij" econf --libdir=/usr/$(get_libdir) \ --enable-progpath=/usr/bin \ || die "econf cngpij" fi if [[ "${_scanenable}" == "true" ]] ; then cd "${_scangearmp_source}"/scangearmp || die "cd" econf --libdir=/usr/$(get_libdir) || die "econf scangearmp" fi for (( i = 0 ; i <= ${_max} ; i++ )) ; do if use ${_pruse[$i]} ; then src_configure_pr ${_prname[$i]} fi done cd "${_cnijfilter_source}"/cngpijmon/cnijnpr || die "cd" einfo "configuring cnijnpr" econf --libdir=/usr/$(get_libdir) || die "econf cnijnpr" } src_compile() { cd "${_cnijfilter_source}"/libs || die "cd" einfo "compiling libs" emake || die "emake libs" cd "${_cnijfilter_source}"/pstocanonij || die "cd" einfo "compiling pstocanonij" emake || die "emake pstocanonij" if use usb ; then cd "${_cnijfilter_source}"/backend || die "cd" einfo "compiling backend" emake || die "emake backend" fi if use net ; then cd "${_cnijfilter_source}"/backendnet || die "cd" einfo "compiling backendnet" emake || die "emake backendnet" fi for (( i = 0 ; i <= ${_max} ; i++ )) ; do if use ${_pruse[$i]} ; then src_compile_pr ${_prname[$i]} fi done if use servicetools ; then cd "${_cnijfilter_source}"/cngpij || die "cd" einfo "compiling cngpij" emake || die "emake cngpij" fi if [[ "${_scanenable}" == "true" ]] ; then cd "${_scangearmp_source}"/scangearmp || die "cd" emake || die "emake scangearmp" fi cd "${_cnijfilter_source}"/cngpijmon/cnijnpr || die "cd" einfo "compiling cnijnpr" emake || die "emake cnijnpr" } src_install() { cd "${_cnijfilter_source}"/libs || die "cd" einfo "installing libs" emake DESTDIR="${D}" install || die "emake libs install" cd "${_cnijfilter_source}"/pstocanonij || die "cd" einfo "installing pstocanonij" emake DESTDIR="${D}" install || die "emake pstocanonij install" if use usb ; then cd "${_cnijfilter_source}"/backend || die "cd" einfo "installing backend" emake DESTDIR="${D}" install || die "emake backend install" fi if use net ; then cd "${_cnijfilter_source}"/backendnet || die "cd" einfo "installing backendnet" emake DESTDIR="${D}" install || die "emake backendnet install" mkdir -p "${D}"/usr/libexec/cups/backend || die "mkdir" mv "${D}"/usr/lib/cups/backend/cnijnet \ "${D}"/usr/libexec/cups/backend/cnijnet \ || die "mv" rm -rf "${D}"/usr/lib/cups fi if use servicetools ; then cd "${_cnijfilter_source}"/cngpij || die "cd" einfo "installing cngpij" emake DESTDIR="${D}" install || die "emake cngpijmon install" fi if [[ "${_scanenable}" == "true" ]] ; then cd "${_scangearmp_source}"/scangearmp || die "cd" einfo "installing scangearmp" emake DESTDIR="${D}" install || die "emake scangearmp install" insinto /usr/lib/bjlib insopts -m 0644 -g scanner doins "${_scangearmp_source}"/com/ini/canon_mfp_net.ini \ || die "doins scanner ini" insinto /etc/udev/rules.d insopts -m 0644 doins "${_scangearmp_source}"/scangearmp/etc/80-canon_mfp.rules \ || die "doins udev rules" dosym /usr/lib/bjlib/canon_mfp.conf /etc/sane.d/canon_mfp.conf \ || die "dosym saned config" fi cd "${_cnijfilter_source}"/cngpijmon/cnijnpr || die "cd" einfo "installing cnijnpr" emake DESTDIR="${D}" install || die "emake cnijnpr install" cd "${S}" || die "cd" dolib.so "${_cnijfilter_source}"/com/libs_bin/* \ "${_scangearmp_source}"/com/libs_bin/* \ || die "dolib.so" dodoc "${_cnijfilter_source}"/LICENSE-${PN}-3.30EN.txt \ 2010_English_02_PD.txt 2010_English_02_SD.txt \ "${_scangearmp_source}"/LICENSE-scangearmp-1.50EN.txt \ || die "dodoc" if use doc ; then mv guidemx870series-pd-${MY_PV}_en/MX870series printer mv guidemx870series-sd-1.50-1_en/MX870series scanner dohtml -r printer scanner || die "dohtml" fi for (( i = 0 ; i <= ${_max} ; i++ )) ; do if use ${_pruse[$i]} ; then src_install_pr ${_prname[$i]} ${_prid[$i]} fi done insinto /usr/lib/bjlib insopts -m 644 -g lp -o lp doins "${_cnijfilter_source}"/com/ini/cnnet.ini || die "doins" } pkg_postinst() { einfo "" einfo "For installing a printer:" einfo " * Restart CUPS: /etc/init.d/cupsd restart" einfo " * Go to http://127.0.0.1:631/" einfo " -> Printers -> Add Printer" einfo "" einfo "If you experience problems, please visit:" einfo "http://bugs.gentoo.org/show_bug.cgi?id=130645" } src_prepare_pr() { if use servicetools ; then cp -a "${_cnijfilter_source}"/cngpijmon \ "${_cnijfilter_source}"/cngpijmon$1 cd "${_cnijfilter_source}"/cngpijmon$1 || die "cd" einfo "preparing cngpijmon for printer $1" echo "no" | glib-gettextize --force --copy || die "glib-gettextize" eaclocal eautoheader eautomake --gnu eautoconf cp -a "${_cnijfilter_source}"/printui \ "${_cnijfilter_source}"/printui$1 cd "${_cnijfilter_source}"/printui$1 || die "cd" einfo "preparing printui for printer $1" echo "no" | glib-gettextize --force --copy || die "glib-gettextize" eaclocal eautoheader eautomake --gnu eautoconf fi cp -a "${_cnijfilter_source}"/lgmon "${_cnijfilter_source}"/lgmon$1 cd "${_cnijfilter_source}"/lgmon$1 || die "cd" einfo "preparing lgmon for printer $1" eaclocal eautoheader eautomake --gnu eautoconf cp -a "${_cnijfilter_source}"/ppd "${_cnijfilter_source}"/ppd$1 cd "${_cnijfilter_source}"/ppd$1 || die "cd" einfo "preparing ppd for printer $1" eaclocal eautomake --gnu eautoconf cp -a "${_cnijfilter_source}"/cnijfilter \ "${_cnijfilter_source}"/cnijfilter$1 cd "${_cnijfilter_source}"/cnijfilter$1 || die "cd" einfo "preparing cnijfilter for printer $1" eaclocal eautoheader eautomake --gnu eautoconf } src_configure_pr() { cd "${_cnijfilter_source}"/lgmon$1 || die "cd" einfo "configuring lgmon for printer $1" econf --program-suffix=$1 \ --libdir=/usr/$(get_libdir) \ --enable-progpath=/usr/bin \ || die "econf lgmon$1" if use servicetools ; then cd "${_cnijfilter_source}"/cngpijmon$1 || die "cd" einfo "configuring cngpijmon for printer $1" econf --program-suffix=$1 --libdir=/usr/$(get_libdir) || \ die "econf cngpijmon$1" cd "${_cnijfilter_source}"/printui$1 || die "cd" einfo "configuring printui for printer $1" econf --libdir=/usr/$(get_libdir) --program-suffix=$1 || \ die "econf printui$1" fi cd "${_cnijfilter_source}"/ppd$1 || die "cd" einfo "configuring ppd for printer $1" econf --program-suffix=$1 --libdir=/usr/$(get_libdir) || die "econf ppd$1" cd "${_cnijfilter_source}"/cnijfilter$1 || die "cd" einfo "configuring cnijfilter for printer $1" econf --program-suffix=$1 --libdir=/usr/$(get_libdir) || \ die "econf cnijfilter$1" } src_compile_pr() { cd "${_cnijfilter_source}"/lgmon$1 || die "cd" einfo "compiling lgmon for printer $1" emake || die "emake lgmon$1" ln -sf ../../lgmon$1/src/libbscc2sts.a \ "${_cnijfilter_source}"/lgmon/src/libbscc2sts.a \ || die "ln -sf lgmon" if use servicetools ; then cd "${_cnijfilter_source}"/cngpijmon$1 || die "cd" einfo "compiling cngpijmon for printer $1" emake || die "emake cngpijmon$1" cd "${_cnijfilter_source}"/printui$1 || die "cd" einfo "compiling printui for printer $1" emake || die "emake printui$1" fi cd "${_cnijfilter_source}"/ppd$1 || die "cd" einfo "compiling ppd for printer $1" emake || die "emake ppd$1" cd "${_cnijfilter_source}"/cnijfilter$1 || die "cd" einfo "compiling cnijfilter for printer $1" emake || die "emake cnijfilter$1" } src_install_pr() { cd "${_cnijfilter_source}"/lgmon$1 || die "cd" einfo "installing lgmon for printer $1" emake DESTDIR="${D}" install || die "emake lgmon$1 install" if use servicetools ; then cd "${_cnijfilter_source}"/cngpijmon$1 || die "cd" einfo "installing cngpijmon for printer $1" emake DESTDIR="${D}" install || die "emake cngpijmon$1 install" cd "${_cnijfilter_source}"/printui$1 || die "cd" einfo "installing printui for printer $1" emake DESTDIR="${D}" install || die "emake printui$1 install" fi cd "${_cnijfilter_source}"/ppd$1 || die "cd" einfo "installing ppd for printer $1" emake DESTDIR="${D}" install || die "emake ppd$1 install" cd "${_cnijfilter_source}"/cnijfilter$1 || die "cd" einfo "installing cnijfilter for printer $1" emake DESTDIR="${D}" install || die "emake cnijfilter$1 install" dolib.so "${_cnijfilter_source}"/$2/libs_bin/* \ || die "dolib.so on printer $1" insinto /usr/lib/bjlib insopts -m644 doins "${_cnijfilter_source}"/$2/database/* || die "doins on printer $1" if [[ "${_scanenable}" == "true" ]] ; then dolib.so "${_scangearmp_source}"/$2/libs_bin/* \ || die "dolib.so on printer $1" doins "${_scangearmp_source}"/$2/* || die "doins on printer $1" fi }