diff options
author | Daniel Pielmeier <billie@gentoo.org> | 2012-04-11 18:33:38 +0000 |
---|---|---|
committer | Daniel Pielmeier <billie@gentoo.org> | 2012-04-11 18:33:38 +0000 |
commit | 107363258422cfe73a6e41f3fd3271a1f02af652 (patch) | |
tree | 58c7436170897297457f04e1cd5a1cf255e0447b /net-print/hplip | |
parent | Mask USE=jit on libzpaq for non-x86/amd64. (diff) | |
download | gentoo-2-107363258422cfe73a6e41f3fd3271a1f02af652.tar.gz gentoo-2-107363258422cfe73a6e41f3fd3271a1f02af652.tar.bz2 gentoo-2-107363258422cfe73a6e41f3fd3271a1f02af652.zip |
Version bump.
(Portage version: 2.1.10.49/cvs/Linux i686)
Diffstat (limited to 'net-print/hplip')
-rw-r--r-- | net-print/hplip/ChangeLog | 9 | ||||
-rw-r--r-- | net-print/hplip/files/hplip-3.12.4-cupsddk.patch | 14 | ||||
-rw-r--r-- | net-print/hplip/files/hplip-3.12.4-desktop.patch | 18 | ||||
-rw-r--r-- | net-print/hplip/files/hplip-3.12.4-fast-pp.patch | 855 | ||||
-rw-r--r-- | net-print/hplip/files/hplip-3.12.4-htmldir.patch | 109 | ||||
-rw-r--r-- | net-print/hplip/hplip-3.12.4.ebuild | 264 |
6 files changed, 1268 insertions, 1 deletions
diff --git a/net-print/hplip/ChangeLog b/net-print/hplip/ChangeLog index 246d316a28f4..a18962e2b611 100644 --- a/net-print/hplip/ChangeLog +++ b/net-print/hplip/ChangeLog @@ -1,6 +1,13 @@ # ChangeLog for net-print/hplip # Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/net-print/hplip/ChangeLog,v 1.219 2012/04/11 18:19:01 billie Exp $ +# $Header: /var/cvsroot/gentoo-x86/net-print/hplip/ChangeLog,v 1.220 2012/04/11 18:33:38 billie Exp $ + +*hplip-3.12.4 (11 Apr 2012) + + 11 Apr 2012; Daniel Pielmeier <billie@gentoo.org> +hplip-3.12.4.ebuild, + +files/hplip-3.12.4-cupsddk.patch, +files/hplip-3.12.4-desktop.patch, + +files/hplip-3.12.4-fast-pp.patch, +files/hplip-3.12.4-htmldir.patch: + Version bump. 11 Apr 2012; Daniel Pielmeier <billie@gentoo.org> -files/hplip-3.11.1-udev-attrs.patch: diff --git a/net-print/hplip/files/hplip-3.12.4-cupsddk.patch b/net-print/hplip/files/hplip-3.12.4-cupsddk.patch new file mode 100644 index 000000000000..968ae47e6d27 --- /dev/null +++ b/net-print/hplip/files/hplip-3.12.4-cupsddk.patch @@ -0,0 +1,14 @@ +--- installer/core_install.py.old 2012-04-11 19:19:24.788467395 +0200 ++++ installer/core_install.py 2012-04-11 19:22:31.548172475 +0200 +@@ -1063,9 +1063,8 @@ + def check_cupsddk(self): + log.debug("Checking for cups-ddk...") + # TODO: Compute these paths some way or another... +- #return check_tool("/usr/lib/cups/driver/drv list") and os.path.exists("/usr/share/cupsddk/include/media.defs") +- return (check_file('drv', "/usr/lib/cups/driver") or check_file('drv', "/usr/lib64/cups/driver")) and \ +- check_file('media.defs', "/usr/share/cupsddk/include") ++ #return check_tool(commands.getoutput("cups-config --serverbin") + "/driver/drv list") and os.path.exists("/usr/share/cupsddk/include/media.defs") ++ return check_file('drv', commands.getoutput("cups-config --serverbin") + "/driver") and check_file('media.defs', "/usr/share/cupsddk/include") + + + def check_policykit(self): diff --git a/net-print/hplip/files/hplip-3.12.4-desktop.patch b/net-print/hplip/files/hplip-3.12.4-desktop.patch new file mode 100644 index 000000000000..d14e9a1d7c5e --- /dev/null +++ b/net-print/hplip/files/hplip-3.12.4-desktop.patch @@ -0,0 +1,18 @@ +--- Makefile.am.old 2012-04-10 10:35:14.000000000 +0200 ++++ Makefile.am 2012-04-11 19:17:34.276681669 +0200 +@@ -341,6 +341,7 @@ + hppgsz_CFLAGS = $(libapdk_la_CFLAGS) + hppgsz_LDADD = libapdk.la -ljpeg -ldl + ++if GUI_BUILD + # hplip.desktop + hplip_desktopdir = $(icondir) + hplip_desktop_DATA = hplip.desktop +@@ -348,6 +349,7 @@ + # hplip-systray.desktop + hplip_systraydir = $(systraydir) + hplip_systray_DATA = hplip-systray.desktop ++endif + + # hpipjs (CUPS filter) + hplipjsdir = $(cupsfilterdir) diff --git a/net-print/hplip/files/hplip-3.12.4-fast-pp.patch b/net-print/hplip/files/hplip-3.12.4-fast-pp.patch new file mode 100644 index 000000000000..f809993292eb --- /dev/null +++ b/net-print/hplip/files/hplip-3.12.4-fast-pp.patch @@ -0,0 +1,855 @@ +Speed up HPLIP's parallel port I/O + +HPLIP should stop emulating IEE1284 ECP in userspace; that requires so many +ioctls that it's uncomfortably (and sometimes unusably) slow, even on fast +systems. Instead, it should use ppdev read/write calls, working around ppdev +quirks/bugs as necessary. + +Until now, we avoided this because we feared that using ppdev would make us +susceptible to variations in PC parallel port hardware. However, it turns out +that the kernel already addresses that problem: on PCs, the kernel defaults to +software-emulated ECP, which is exactly what the current HPLIP code does. +Using the kernel code avoids the massive ioctl overhead, and it makes it +possible to use hardware-accelerated ECP in those cases where it works. + +To apply this patch, 'cd' into the unpacked hplip source directory and run: +$ patch -p1 <../hplip-fast-pp-v2.patch +$ libtoolize --force +$ AUTOMAKE="automake --foreign" autoreconf +(Remember to use the --enable-pp-build option with ./configure) + +Patch by Daniel Gnoutcheff <daniel@gnoutcheff.name> +Thanks to Daniel Pielmeir for figuring out the autotools bits + +diff -ur hplip-3.12.2/configure.in hplip-3.12.2-fast-pp/configure.in +--- hplip-3.12.2/configure.in 2012-02-01 06:56:29.000000000 -0500 ++++ hplip-3.12.2-fast-pp/configure.in 2012-02-20 21:09:45.850744922 -0500 +@@ -222,6 +222,7 @@ + else + AC_MSG_RESULT(no) + fi ++AM_CONDITIONAL(PP_BUILD, test x$pp_build = xyes) + + AC_MSG_CHECKING([for scanner build]) + AC_ARG_ENABLE(scan_build, +diff -ur hplip-3.12.2/io/hpmud/pp.c hplip-3.12.2-fast-pp/io/hpmud/pp.c +--- hplip-3.12.2/io/hpmud/pp.c 2012-02-01 06:53:52.000000000 -0500 ++++ hplip-3.12.2-fast-pp/io/hpmud/pp.c 2012-02-20 19:28:27.990747569 -0500 +@@ -28,6 +28,8 @@ + + #include "hpmud.h" + #include "hpmudi.h" ++#include <signal.h> ++#include <time.h> + + mud_device_vf __attribute__ ((visibility ("hidden"))) pp_mud_device_vf = + { +@@ -67,17 +69,6 @@ + .channel_read = musb_dot4_channel_read + }; + +-static int frob_control(int fd, unsigned char mask, unsigned char val) +-{ +- struct ppdev_frob_struct frob; +- +- /* Convert ieee1284 control values to PC-style (invert Strobe, AutoFd and Select) . */ +- frob.val = val ^ (mask & (PARPORT_CONTROL_STROBE | PARPORT_CONTROL_AUTOFD | PARPORT_CONTROL_SELECT)); +- +- frob.mask = mask; +- return ioctl(fd, PPFCONTROL, &frob); +-} +- + static unsigned char read_status(int fd) + { + unsigned char status; +@@ -88,493 +79,6 @@ + return (status ^ PARPORT_STATUS_BUSY); + } + +-static int wait_status(int fd, unsigned char mask, unsigned char val, int usec) +-{ +- struct timeval tmo, now; +- struct timespec min; +- unsigned char status; +- int cnt=0; +- +- gettimeofday (&tmo, NULL); +- tmo.tv_usec += usec; +- tmo.tv_sec += tmo.tv_usec / 1000000; +- tmo.tv_usec %= 1000000; +- +- min.tv_sec = 0; +- min.tv_nsec = 5000000; /* 5ms */ +- +- while (1) +- { +- status = read_status(fd); +- if ((status & mask) == val) +- { +- // bug("found status=%x mask=%x val=%x cnt=%d: %s %d\n", status, mask, val, cnt, __FILE__, __LINE__); +- return 0; +- } +- cnt++; +- // nanosleep(&min, NULL); +- gettimeofday(&now, NULL); +- if ((now.tv_sec > tmo.tv_sec) || (now.tv_sec == tmo.tv_sec && now.tv_usec > tmo.tv_usec)) +- { +- DBG("wait_status timeout status=%x mask=%x val=%x us=%d\n", status, mask, val, usec); +- return -1; /* timeout */ +- } +- } +-} +- +-static int wait(int usec) +-{ +- struct timeval tmo, now; +- int cnt=0; +- +- gettimeofday (&tmo, NULL); +- tmo.tv_usec += usec; +- tmo.tv_sec += tmo.tv_usec / 1000000; +- tmo.tv_usec %= 1000000; +- +- while (1) +- { +- cnt++; +- gettimeofday(&now, NULL); +- if ((now.tv_sec > tmo.tv_sec) || (now.tv_sec == tmo.tv_sec && now.tv_usec > tmo.tv_usec)) +- { +- return 0; /* timeout */ +- } +- } +-} +- +-static int ecp_is_fwd(int fd) +-{ +- unsigned char status; +- +- status = read_status(fd); +- if ((status & PARPORT_STATUS_PAPEROUT) == PARPORT_STATUS_PAPEROUT) +- return 1; +- return 0; +-} +- +-static int ecp_is_rev(int fd) +-{ +- unsigned char status; +- +- status = read_status(fd); +- if ((status & PARPORT_STATUS_PAPEROUT) == 0) +- return 1; +- return 0; +-} +- +-static int ecp_rev_to_fwd(int fd) +-{ +- int dir=0; +- +- if (ecp_is_fwd(fd)) +- return 0; +- +- /* Event 47: write NReverseRequest/nInit=1 */ +- frob_control(fd, PARPORT_CONTROL_INIT, PARPORT_CONTROL_INIT); +- +- /* Event 48: wait PeriphClk/nAck=1, PeriphAck/Busy=0 */ +- // wait_status(fd, PARPORT_STATUS_PAPEROUT | PARPORT_STATUS_BUSY, PARPORT_STATUS_PAPEROUT, SIGNAL_TIMEOUT); +- +- /* Event 49: wait nAckReverse/PError=1 */ +- wait_status(fd, PARPORT_STATUS_PAPEROUT, PARPORT_STATUS_PAPEROUT, PP_SIGNAL_TIMEOUT); +- +- ioctl(fd, PPDATADIR, &dir); +- +- return 0; +-} +- +-static int ecp_fwd_to_rev(int fd) +-{ +- int dir=1; +- +- if (ecp_is_rev(fd)) +- return 0; +- +- /* Event 33: NPeriphRequest/nFault=0, PeriphAck/Busy=0 */ +- wait_status(fd, PARPORT_STATUS_BUSY | PARPORT_STATUS_ERROR, 0, PP_DEVICE_TIMEOUT); +- +- /* Event 38: write HostAck/nAutoFd=0 */ +- ioctl(fd, PPDATADIR, &dir); +- frob_control(fd, PARPORT_CONTROL_AUTOFD, 0); +- wait(PP_SETUP_TIMEOUT); +- +- /* Event 39: write NReverseRequest/nInit=0 (start bus reversal) */ +- frob_control(fd, PARPORT_CONTROL_INIT, 0); +- +- /* Event 40: wait nAckReverse/PError=0 */ +- wait_status(fd, PARPORT_STATUS_PAPEROUT, 0, PP_SIGNAL_TIMEOUT); +- +- return 0; +-} +- +-static int ecp_write_addr(int fd, unsigned char data) +-{ +- int cnt=0, len=0; +- unsigned d=(data | 0x80); /* set channel address bit */ +- +- ecp_rev_to_fwd(fd); +- +- /* Event 33: PeriphAck/Busy=0 */ +- if (wait_status(fd, PARPORT_STATUS_BUSY, 0, PP_SIGNAL_TIMEOUT)) +- { +- BUG("ecp_write_addr transfer stalled\n"); +- goto bugout; +- } +- +- while (1) +- { +- /* Event 34: write HostAck/nAutoFD=0 (channel command), data */ +- frob_control(fd, PARPORT_CONTROL_AUTOFD, 0); +- ioctl(fd, PPWDATA, &d); +- +- /* Event 35: write HostClk/NStrobe=0 */ +- frob_control(fd, PARPORT_CONTROL_STROBE, 0); +- +- /* Event 36: wait PeriphAck/Busy=1 */ +- if (wait_status(fd, PARPORT_STATUS_BUSY, PARPORT_STATUS_BUSY, PP_SIGNAL_TIMEOUT)) +- { +- +- /* Event 72: write NReverseRequest/nInit=0 (Host Transfer Recovery) */ +- frob_control(fd, PARPORT_CONTROL_INIT, 0); +- +- /* Event 73: wait nAckReverse/PError=0 */ +- wait_status(fd, PARPORT_STATUS_PAPEROUT, 0, PP_SIGNAL_TIMEOUT); +- +- /* Event 74: write NReverseRequest/nInit=1 */ +- frob_control(fd, PARPORT_CONTROL_INIT, PARPORT_CONTROL_INIT); +- +- /* Event 75: wait nAckReverse/PError=1 */ +- wait_status(fd, PARPORT_STATUS_PAPEROUT, PARPORT_STATUS_PAPEROUT, PP_SIGNAL_TIMEOUT); +- +- cnt++; +- if (cnt > 4) +- { +- BUG("ecp_write_addr transfer stalled\n"); +- goto bugout; +- } +- BUG("ecp_write_addr host transfer recovery cnt=%d\n", cnt); +- continue; /* retry */ +- } +- break; /* done */ +- } /* while (1) */ +- +- len = 1; +- +-bugout: +- +- /* Event 37: write HostClk/NStrobe=1 */ +- frob_control(fd, PARPORT_CONTROL_STROBE, PARPORT_CONTROL_STROBE); +- +- return len; +-} +- +-static int ecp_write_data(int fd, unsigned char data) +-{ +- int cnt=0, len=0; +- +- // ecp_rev_to_fwd(fd); +- +- /* Event 33: check PeriphAck/Busy=0 */ +- if (wait_status(fd, PARPORT_STATUS_BUSY, 0, PP_SIGNAL_TIMEOUT)) +- { +- BUG("ecp_write_data transfer stalled\n"); +- goto bugout; +- } +- +- while (1) +- { +- /* Event 34: write HostAck/nAutoFD=1 (channel data), data */ +- frob_control(fd, PARPORT_CONTROL_AUTOFD, PARPORT_CONTROL_AUTOFD); +- ioctl(fd, PPWDATA, &data); +- +- /* Event 35: write HostClk/NStrobe=0 */ +- frob_control(fd, PARPORT_CONTROL_STROBE, 0); +- +- /* Event 36: wait PeriphAck/Busy=1 */ +- if (wait_status(fd, PARPORT_STATUS_BUSY, PARPORT_STATUS_BUSY, PP_SIGNAL_TIMEOUT)) +- { +- +- /* Event 72: write NReverseRequest/nInit=0 (Host Transfer Recovery) */ +- frob_control(fd, PARPORT_CONTROL_INIT, 0); +- +- /* Event 73: wait nAckReverse/PError=0 */ +- wait_status(fd, PARPORT_STATUS_PAPEROUT, 0, PP_SIGNAL_TIMEOUT); +- +- /* Event 74: write NReverseRequest/nInit=1 */ +- frob_control(fd, PARPORT_CONTROL_INIT, PARPORT_CONTROL_INIT); +- +- /* Event 75: wait nAckReverse/PError=1 */ +- wait_status(fd, PARPORT_STATUS_PAPEROUT, PARPORT_STATUS_PAPEROUT, PP_SIGNAL_TIMEOUT); +- +- cnt++; +- if (cnt > 4) +- { +- BUG("ecp_write_data transfer stalled\n"); +- goto bugout; +- } +- BUG("ecp_write_data host transfer recovery cnt=%d\n", cnt); +- continue; /* retry */ +- } +- break; /* done */ +- } /* while (1) */ +- +- len = 1; +- +-bugout: +- +- /* Event 37: write HostClk/NStrobe=1 */ +- frob_control(fd, PARPORT_CONTROL_STROBE, PARPORT_CONTROL_STROBE); +- +- return len; +-} +- +-static int ecp_read_data(int fd, unsigned char *data) +-{ +- int len=0; +- +- // ecp_fwd_to_rev(fd); +- +- /* Event 43: wait PeriphClk/NAck=0 */ +- if (wait_status(fd, PARPORT_STATUS_ACK, 0, PP_SIGNAL_TIMEOUT)) +- { +- len = -1; +- goto bugout; +- } +- ioctl(fd, PPRDATA, data); +- +- /* Event 44: write HostAck/nAutoFd=1 */ +- frob_control(fd, PARPORT_CONTROL_AUTOFD, PARPORT_CONTROL_AUTOFD); +- +- /* Event 45: wait PeriphClk/NAck=1 */ +- wait_status(fd, PARPORT_STATUS_ACK, PARPORT_STATUS_ACK, PP_SIGNAL_TIMEOUT); +- +- /* Event 46: write HostAck/nAutoFd=0 */ +- frob_control(fd, PARPORT_CONTROL_AUTOFD, 0); +- +- len = 1; +- +-bugout: +- +- return len; +-} +- +-static int ecp_read(int fd, void *buffer, int size, int usec) +-{ +- int i=0; +- unsigned char *p = (unsigned char *)buffer; +- +- ecp_fwd_to_rev(fd); +- +- while (i < size) +- { +- if (ecp_read_data(fd, p+i) != 1) +- { +- usec-=PP_SIGNAL_TIMEOUT; +- if (usec > 0) +- continue; +- +-// return -1; +- return -ETIMEDOUT; /* timeout */ +- } +- i++; +- } +- return i; +-} +- +-static int ecp_write(int fd, const void *buffer, int size) +-{ +- int i; +- unsigned char *p = (unsigned char *)buffer; +- static int timeout=0; +- +- if (timeout) +- { +- timeout=0; +- return -1; /* report timeout */ +- } +- +- ecp_rev_to_fwd(fd); +- +- for (i=0; i < size; i++) +- { +- if (ecp_write_data(fd, p[i]) != 1) +- { +- if (i) +- timeout=1; /* save timeout, report bytes written */ +- else +- i=-1; /* report timeout */ +- break; +- } +- } +- return i; +-} +- +-static int nibble_read_data(int fd, unsigned char *data) +-{ +- int len=0; +- unsigned char nibble; +- +- /* Event 7: write HostBusy/nAutoFd=0 */ +- frob_control(fd, PARPORT_CONTROL_AUTOFD, 0); +- +- /* Event 8: peripheral sets low-order nibble. */ +- +- /* Event 9: wait PtrClk/NAck=0 */ +- if (wait_status(fd, PARPORT_STATUS_ACK, 0, PP_SIGNAL_TIMEOUT)) +- { +- len = -1; +- goto bugout; +- } +- nibble = read_status(fd) >> 3; +- nibble = ((nibble & 0x10) >> 1) | (nibble & 0x7); +- *data = nibble; +- +- /* Event 10: write HostBusy/nAutoFd=1 */ +- frob_control(fd, PARPORT_CONTROL_AUTOFD, PARPORT_CONTROL_AUTOFD); +- +- /* Event 11: wait PtrClk/NAck=1 */ +- wait_status(fd, PARPORT_STATUS_ACK, PARPORT_STATUS_ACK, PP_SIGNAL_TIMEOUT); +- +- /* Event 7: write HostBusy/nAutoFd=0 */ +- frob_control(fd, PARPORT_CONTROL_AUTOFD, 0); +- +- /* Event 8: peripheral sets high-order nibble. */ +- +- /* Event 9: wait PtrClk/NAck=0 */ +- if (wait_status(fd, PARPORT_STATUS_ACK, 0, PP_SIGNAL_TIMEOUT)) +- { +- len = -1; +- goto bugout; +- } +- nibble = read_status(fd) >> 3; +- nibble = ((nibble & 0x10) >> 1) | (nibble & 0x7); +- *data |= (nibble<<4); +- +- /* Event 10: write HostBusy/nAutoFd=1 */ +- frob_control(fd, PARPORT_CONTROL_AUTOFD, PARPORT_CONTROL_AUTOFD); +- +- /* Event 11: wait PtrClk/NAck=1 */ +- wait_status(fd, PARPORT_STATUS_ACK, PARPORT_STATUS_ACK, PP_SIGNAL_TIMEOUT); +- +- len = 1; +- +-bugout: +- +- return len; +-} +- +-static int nibble_read(int fd, int flag, void *buffer, int size, int usec) +-{ +- int i=0; +- unsigned char *p = (unsigned char *)buffer; +- int m = IEEE1284_MODE_NIBBLE | flag; +- int mc = IEEE1284_MODE_COMPAT; +- unsigned char status; +- +- ioctl (fd, PPNEGOT, &mc); +- if (ioctl (fd, PPNEGOT, &m)) +- { +- DBG("nibble_read negotiation failed: %m\n"); +- return -1; +- } +- +- while (i < size) +- { +- if (nibble_read_data(fd, p+i) != 1) +- { +- usec-=PP_SIGNAL_TIMEOUT; +- if (usec > 0) +- continue; +- +-// return -1; +- return -ETIMEDOUT; /* timeout */ +- } +- +- i++; +- +- /* More data? */ +- status = read_status(fd); +- if (status & PARPORT_STATUS_ERROR) +- { +- /* Event 7: write HostBusy/nAutoFd=0, idle phase */ +- frob_control(fd, PARPORT_CONTROL_AUTOFD, 0); +- +- break; /* done */ +- } +- } +- +- return i; +-} +- +-static int compat_write_data(int fd, unsigned char data) +-{ +- int len=0; +- +- /* wait Busy=0 */ +- if (wait_status(fd, PARPORT_STATUS_BUSY, 0, PP_DEVICE_TIMEOUT)) +- { +- BUG("compat_write_data transfer stalled\n"); +- goto bugout; +- } +- +- ioctl(fd, PPWDATA, &data); +- wait(PP_SETUP_TIMEOUT); +- +- /* write NStrobe=0 */ +- frob_control(fd, PARPORT_CONTROL_STROBE, 0); +- +- /* wait Busy=1 */ +- if (wait_status(fd, PARPORT_STATUS_BUSY, PARPORT_STATUS_BUSY, PP_SIGNAL_TIMEOUT)) +- { +- BUG("compat_write_data transfer stalled\n"); +- goto bugout; +- } +- +- /* write nStrobe=1 */ +- frob_control(fd, PARPORT_CONTROL_STROBE, PARPORT_CONTROL_STROBE); +- +- len = 1; +- +-bugout: +- return len; +-} +- +-static int compat_write(int fd, const void *buffer, int size) +-{ +- int i=0; +- unsigned char *p = (unsigned char *)buffer; +- int m = IEEE1284_MODE_COMPAT; +- static int timeout=0; +- +- if (timeout) +- { +- timeout=0; +- return -1; /* report timeout */ +- } +- +- if (ioctl(fd, PPNEGOT, &m)) +- { +- BUG("compat_write failed: %m\n"); +- goto bugout; +- } +- +- for (i=0; i < size; i++) +- { +- if (compat_write_data(fd, p[i]) != 1) +- { +- if (i) +- timeout=1; /* save timeout, report bytes written */ +- else +- i=-1; /* report timeout */ +- break; +- } +- } +- +-bugout: +- return i; +-} +- + static int claim_pp(int fd) + { + int stat=1; +@@ -617,11 +121,23 @@ + + static int device_id(int fd, char *buffer, int size) + { +- int len=0, maxSize; ++ int len=0, maxSize, mode; + + maxSize = (size > 1024) ? 1024 : size; /* RH8 has a size limit for device id */ + +- len = nibble_read(fd, IEEE1284_DEVICEID, buffer, maxSize, 0); ++ /* reset (in case someone else stopped in the middle of reading the device ++ * ID) */ ++ mode = IEEE1284_MODE_COMPAT; ++ ioctl(fd, PPNEGOT, &mode); ++ ++ mode = IEEE1284_MODE_NIBBLE | IEEE1284_DEVICEID; ++ ioctl(fd, PPNEGOT, &mode); ++ len = read(fd, buffer, maxSize); ++ ++ /* Reset (for safety) */ ++ mode = IEEE1284_MODE_COMPAT; ++ ioctl(fd, PPNEGOT, &mode); ++ + if (len < 0) + { + BUG("unable to read device-id ret=%d\n", len); +@@ -720,24 +236,134 @@ + return 0; + } + ++static int ecp_write_addr(int fd, unsigned char addr) ++{ ++ /* Currently, PPSETMODE always resets the kernel's idea of the current phase ++ * to equal that of the inital phase of the given mode (i.e. ++ * IEEE1284_PH_FWD_IDLE for ECP). However, we're not actually changing the ++ * mode, we're just modifying the "send command bytes" flag; thus, we do ++ * *not* want the phase to change. We workaround the kernel's bad behavor by ++ * forcibly refreshing its phase setting whenever we call PPSETMODE. ++ */ ++ int mode, phase, cmdmode, len, retval; ++ ++ /* To send an address, we send an ECP command byte with the high bit set ++ * and the address in the other 7 bits. */ ++ unsigned char command = addr | 0x80; ++ ++ /* Enable command mode */ ++ ioctl(fd, PPGETMODE, &mode); ++ cmdmode = mode | IEEE1284_ADDR; ++ ioctl(fd, PPGETPHASE, &phase); ++ ioctl(fd, PPSETMODE, &cmdmode); ++ ioctl(fd, PPSETPHASE, &phase); ++ ++ len = write(fd, &command, 1); ++ ++ /* Restore original mode */ ++ ioctl(fd, PPGETPHASE, &phase); ++ ioctl(fd, PPSETMODE, &mode); ++ ioctl(fd, PPSETPHASE, &phase); ++ ++ if (len == 1) ++ retval = len; ++ else ++ { ++ BUG("ecp_write_addr transfer failed\n"); ++ retval = -errno; ++ } ++ ++ return retval; ++} ++ ++static void setup_timeout(int timeout_usec, timer_t *timeout_timer) ++{ ++ struct sigevent timeout_sigevent = ++ { ++ .sigev_notify = SIGEV_NONE ++ }; ++ struct itimerspec timeout = ++ { ++ .it_value = ++ { ++ .tv_sec = timeout_usec / 1000000, ++ .tv_nsec = (timeout_usec % 1000000) * 1000 ++ }, ++ .it_interval = ++ { ++ .tv_sec = 0, ++ .tv_nsec = 0 ++ } ++ }; ++ ++ timer_create(CLOCK_MONOTONIC, &timeout_sigevent, timeout_timer); ++ timer_settime(*timeout_timer, 0, &timeout, NULL); ++} ++ ++static int timeout_not_expired(timer_t *timer) ++{ ++ struct itimerspec timeout; ++ timer_gettime(*timer, &timeout); ++ return timeout.it_value.tv_sec > 0 || timeout.it_value.tv_nsec > 0; ++} ++ ++enum io_operation ++{ ++ IO_READ, ++ IO_WRITE ++}; ++ ++static int ppdev_io_with_timeout(enum io_operation operation, ++ int fd, void *buf, int buf_size, int timeout_usec) ++{ ++ /* As of Linux 2.6.39, ppdev's read and write implementations do not honor ++ * the timeout values given by PPSETTIME ioctls. Furthermore, when using ++ * blocking IO, ppdev reads and writes will block forever until at least one ++ * byte is transfered, which is a problem if, say, the peripheral has lost ++ * power and will never respond. To avoid these issues, we use non-blocking ++ * IO and we implement the timeout ourselves. */ ++ ++ int offset = 0, retval = 0, error = 0; ++ timer_t timeout_timer; ++ ++ setup_timeout(timeout_usec, &timeout_timer); ++ ++ do { ++ switch (operation) ++ { ++ case IO_READ: ++ retval = read(fd, buf + offset, buf_size - offset); ++ break; ++ case IO_WRITE: ++ retval = write(fd, buf + offset, buf_size - offset); ++ break; ++ } ++ ++ if (retval >= 0) ++ offset += retval; ++ else if (errno != EAGAIN) ++ error = errno; ++ } while (!error && offset < buf_size && timeout_not_expired(&timeout_timer)); ++ ++ timer_delete(timeout_timer); ++ ++ if (error) ++ return -error; ++ else if (offset == 0) ++ return -ETIMEDOUT; ++ else ++ return offset; ++} ++ + /********************************************************************************************************************************* + * Parallel port mud_device functions. + */ + + int __attribute__ ((visibility ("hidden"))) pp_write(int fd, const void *buf, int size, int usec) + { +- int len=0, m; ++ int len; + +- ioctl(fd, PPGETMODE, &m); +- +- if (m & (IEEE1284_MODE_ECPSWE | IEEE1284_MODE_ECP)) +- { +- len = ecp_write(fd, buf, size); +- } +- else +- { +- len = compat_write(fd, buf, size); +- } ++ len = ppdev_io_with_timeout(IO_WRITE, fd, (void *)buf, size, usec); + + DBG("write fd=%d len=%d size=%d\n", fd, len, size); + DBG_DUMP(buf, len < 32 ? len : 32); +@@ -747,19 +373,9 @@ + + int __attribute__ ((visibility ("hidden"))) pp_read(int fd, void *buf, int size, int usec) + { +- int len=0, m; +-// int sec = usec/1000000; +- +- ioctl(fd, PPGETMODE, &m); ++ int len; + +- if (m & (IEEE1284_MODE_ECPSWE | IEEE1284_MODE_ECP)) +- { +- len = ecp_read(fd, buf, size, usec); +- } +- else +- { +- len = nibble_read(fd, 0, buf, size, usec); +- } ++ len = ppdev_io_with_timeout(IO_READ, fd, buf, size, usec); + + DBG("read fd=%d len=%d size=%d usec=%d\n", fd, len, size, usec); + DBG_DUMP(buf, len < 32 ? len : 32); +@@ -779,9 +395,11 @@ + + if (pd->id[0] == 0) + { +- /* First client, open actual kernal device, use blocking i/o. */ ++ /* First client, open actual kernal device, use non-blocking i/o. See ++ * comment in ppdev_io_with_timeout() for why we use non-blocking i/o. ++ */ + hpmud_get_uri_datalink(pd->uri, dev, sizeof(dev)); +- if ((fd = open(dev, O_RDWR | O_NOCTTY)) < 0) ++ if ((fd = open(dev, O_RDWR | O_NOCTTY | O_NONBLOCK)) < 0) + { + BUG("unable to open %s: %m\n", pd->uri); + goto bugout; +@@ -1037,7 +655,7 @@ + goto bugout; + + /* Negotiate ECP mode. */ +- m = IEEE1284_MODE_ECPSWE; ++ m = IEEE1284_MODE_ECP; + if (ioctl(pd->open_fd, PPNEGOT, &m)) + { + BUG("unable to negotiate %s ECP mode: %m\n", pd->uri); +@@ -1046,7 +664,7 @@ + + /* Enable MLC mode with ECP channel-77. */ + ecp_write_addr(pd->open_fd, 78); +- ecp_write(pd->open_fd, "\0", 1); ++ write(pd->open_fd, "\0", 1); + ecp_write_addr(pd->open_fd, 77); + + /* MLC initialize */ +@@ -1099,7 +717,7 @@ + pd->mlc_up=0; + + ecp_write_addr(pd->mlc_fd, 78); /* disable MLC mode with ECP channel-78 */ +- ecp_write(pd->mlc_fd, "\0", 1); ++ write(pd->mlc_fd, "\0", 1); + + m = IEEE1284_MODE_NIBBLE; + ioctl(pd->mlc_fd, PPNEGOT, &m); +@@ -1129,7 +747,7 @@ + goto bugout; + + /* Negotiate ECP mode. */ +- m = IEEE1284_MODE_ECPSWE; ++ m = IEEE1284_MODE_ECP; + if (ioctl(pd->open_fd, PPNEGOT, &m)) + { + BUG("unable to negotiate %s ECP mode: %m\n", pd->uri); +@@ -1138,7 +756,7 @@ + + /* Enable MLC mode with ECP channel-77. */ + ecp_write_addr(pd->open_fd, 78); +- ecp_write(pd->open_fd, "\0", 1); ++ write(pd->open_fd, "\0", 1); + ecp_write_addr(pd->open_fd, 77); + + /* DOT4 initialize */ +@@ -1191,7 +809,7 @@ + pd->mlc_up=0; + + ecp_write_addr(pd->mlc_fd, 78); /* disable MLC mode with ECP channel-78 */ +- ecp_write(pd->mlc_fd, "\0", 1); ++ write(pd->mlc_fd, "\0", 1); + + m = IEEE1284_MODE_NIBBLE; + ioctl(pd->mlc_fd, PPNEGOT, &m); +diff -ur hplip-3.12.2/io/hpmud/pp.h hplip-3.12.2-fast-pp/io/hpmud/pp.h +--- hplip-3.12.2/io/hpmud/pp.h 2012-02-01 06:53:52.000000000 -0500 ++++ hplip-3.12.2-fast-pp/io/hpmud/pp.h 2012-02-20 19:28:27.990747569 -0500 +@@ -60,18 +60,11 @@ + * 0 - Strobe * + * + * * inverted +- * +- * Notes: +- * For ECP mode use low-level parport ioctl instead of high-level parport read/writes because its more reliable. High-level support +- * for Compatible and Nibble modes are probably ok, but for consistency low-level parport ioctl is used. +- * + */ + +-#define PP_DEVICE_TIMEOUT 30000000 /* device timeout (us) */ + //#define PP_SIGNAL_TIMEOUT 1000000 /* signal timeout (us), too long for 1ms timeout, DES 8/18/08 */ + //#define PP_SIGNAL_TIMEOUT 1000 /* signal timeout (us), too short for DJ540, DES 8/18/08 */ + #define PP_SIGNAL_TIMEOUT 100000 /* signal timeout (us), DES 8/18/08 */ +-#define PP_SETUP_TIMEOUT 10 /* setup timeout (us) */ + + struct _mud_device; + struct _mud_channel; +diff -ur hplip-3.12.2/Makefile.am hplip-3.12.2-fast-pp/Makefile.am +--- hplip-3.12.2/Makefile.am 2012-02-01 06:53:57.000000000 -0500 ++++ hplip-3.12.2-fast-pp/Makefile.am 2012-02-20 21:26:21.210745149 -0500 +@@ -74,6 +74,9 @@ + libhpmud_la_LDFLAGS = -version-info 0:6:0 -lusb -lpthread + endif + libhpmud_la_CFLAGS = -DMUDNAME=\"$(MUDNAME)\" -DCONFDIR=\"$(hplip_confdir)\" ++if PP_BUILD ++libhpmud_la_LDFLAGS += -lrt ++endif + + # ip library + lib_LTLIBRARIES += libhpip.la diff --git a/net-print/hplip/files/hplip-3.12.4-htmldir.patch b/net-print/hplip/files/hplip-3.12.4-htmldir.patch new file mode 100644 index 000000000000..4a16c29a9da8 --- /dev/null +++ b/net-print/hplip/files/hplip-3.12.4-htmldir.patch @@ -0,0 +1,109 @@ +diff -Naur hplip-3.12.4/work/hplip-3.12.4-old/configure.in hplip-3.12.4//configure.in +--- hplip-3.12.4-old/configure.in 2012-04-10 10:38:27.000000000 +0200 ++++ hplip-3.12.4/configure.in 2012-04-11 19:29:34.883554956 +0200 +@@ -327,6 +327,9 @@ + AC_ARG_WITH(docdir, AC_HELP_STRING([--with-docdir=DIR], [set hplip documentation directory [default=datadir/doc]]), + hpdocdir=$withval, hpdocdir="$datadir/doc/hplip-$VERSION") + ++AC_ARG_WITH(htmldir, AC_HELP_STRING([--with-htmldir=DIR], [set hplip html documentation directory [default=datadir/doc]]), ++ hphtmldir=$withval, hphtmldir="$datadir/doc/hplip-$VERSION") ++ + AC_MSG_CHECKING([for foomatic ppd install]) + AC_ARG_ENABLE(foomatic_ppd_install, + [ --enable-foomatic-ppd-install enable foomatic static ppd install (default=no), uses hpppddir], +@@ -551,6 +554,7 @@ + AC_DEFINE_DIR([abs_sbindir], [sbindir]) + AC_DEFINE_DIR([abs_hpppddir], [hpppddir]) + AC_DEFINE_DIR([abs_docdir], [hpdocdir]) ++AC_DEFINE_DIR([abs_htmldir], [hphtmldir]) + abs_ppddir=${abs_hpppddir%/*} + AC_DEFINE_DIR([abs_drvdir], [drvdir]) + +@@ -558,6 +562,7 @@ + AC_SUBST(abs_sbindir) + AC_SUBST(abs_hpppddir) + AC_SUBST(abs_docdir) ++AC_SUBST(abs_htmldir) + AC_SUBST(abs_ppddir) + AC_SUBST(abs_drvdir) + AC_SUBST(abs_mimedir) +@@ -568,6 +573,7 @@ + AC_SUBST(cupsfilterdir) + AC_SUBST(hpppddir) + AC_SUBST(hpdocdir) ++AC_SUBST(hphtmldir) + AC_SUBST(drvdir) + AC_SUBST(network_build) + AC_SUBST(pp_build) +diff -Naur hplip-3.12.4-old//hplip.conf.in hplip-3.12.4//hplip.conf.in +--- hplip-3.12.4-old/hplip.conf.in 2012-04-10 10:35:14.000000000 +0200 ++++ hplip-3.12.4/hplip.conf.in 2012-04-11 19:29:54.810680844 +0200 +@@ -9,6 +9,7 @@ + ppd=@abs_hpppddir@ + ppdbase=@abs_ppddir@ + doc=@abs_docdir@ ++html=@abs_htmldir@ + icon=@icondir@ + cupsbackend=@cupsbackenddir@ + cupsfilter=@cupsfilterdir@ +@@ -42,4 +43,4 @@ + lite-build=@lite_build@ + udev-acl-rules=@udev_acl_rules@ + hpcups-only-build=@hpcups_only_build@ +-hpijs-only-build=@hpijs_only_build@ +\ Kein Zeilenumbruch am Dateiende. ++hpijs-only-build=@hpijs_only_build@ +diff -Naur hplip-3.12.4-old/hplip.list.in hplip-3.12.4/hplip.list.in +--- hplip-3.12.4-old/hplip.list.in 2012-04-10 10:35:14.000000000 +0200 ++++ hplip-3.12.4/hplip.list.in 2012-04-11 19:31:17.035941466 +0200 +@@ -49,6 +49,7 @@ + $icondir=@icondir@ + $systraydir=@systraydir@ + $docdir=@hpdocdir@ ++$htmldir=@hphtmldirdir@ + $version=@VERSION@ + $internal_tag=@PACKAGE_BUGREPORT@ + +@@ -271,11 +272,11 @@ + @epm_full@f 755 root root $home/diagnose_queues.py diagnose_queues.py + + # docs +-@epm_full@f 644 root root $docdir doc/* +-@epm_full@d 775 root root $docdir/images - +-@epm_full@f 644 root root $docdir/images doc/images/* +-@epm_full@d 775 root root $docdir/styles - +-@epm_full@f 644 root root $docdir/styles doc/styles/* ++@epm_full@f 644 root root $htmldir doc/* ++@epm_full@d 775 root root $htmldir/images - ++@epm_full@f 644 root root $htmldir/images doc/images/* ++@epm_full@d 775 root root $htmldir/styles - ++@epm_full@f 644 root root $htmldir/styles doc/styles/* + # python commands + @epm_full@l 755 root root $bindir/hp-toolbox ../share/hplip/toolbox.py + @epm_full@l 755 root root $bindir/hp-colorcal ../share/hplip/colorcal.py +diff -Naur hplip-3.12.4-old/Makefile.am hplip-3.12.4/Makefile.am +--- hplip-3.12.4-old/Makefile.am 2012-04-10 10:35:14.000000000 +0200 ++++ hplip-3.12.4/Makefile.am 2012-04-11 19:32:31.351056728 +0200 +@@ -9,6 +9,7 @@ + hplipdir = $(datadir)/hplip + + docdir = $(hpdocdir) ++htmldir = $(hphtmldir) + doc_DATA = COPYING copyright prnt/hpijs/README_LIBJPG + EXTRA_DIST = prnt/hpijs/gdevijs-krgb-1.5-gs8.61.patch prnt/hpijs/README_LIBJPG copyright + +@@ -23,11 +24,11 @@ + + if DOC_BUILD + wwwsrc = doc +-www0dir = $(docdir) ++www0dir = $(htmldir) + dist_www0_DATA = $(wwwsrc)/index.html $(wwwsrc)/commandline.html $(wwwsrc)/copying.html $(wwwsrc)/devicemanager.html $(wwwsrc)/faxtrouble.html $(wwwsrc)/gettinghelp.html $(wwwsrc)/hpscan.html $(wwwsrc)/mainttask.html $(wwwsrc)/plugins.html $(wwwsrc)/print.html $(wwwsrc)/printing.html $(wwwsrc)/printoptions.html $(wwwsrc)/printtroubleshooting.html $(wwwsrc)/scanning.html $(wwwsrc)/scantrouble.html $(wwwsrc)/sendfax.html $(wwwsrc)/setup.html $(wwwsrc)/systray.html $(wwwsrc)/troubleshooting.html $(wwwsrc)/uninstalling.html $(wwwsrc)/upgrading.html +-www3dir = $(docdir)/styles ++www3dir = $(htmldir)/styles + dist_www3_DATA = $(wwwsrc)/styles/* +-www4dir = $(docdir)/images ++www4dir = $(htmldir)/images + dist_www4_DATA = $(wwwsrc)/images/* + endif + diff --git a/net-print/hplip/hplip-3.12.4.ebuild b/net-print/hplip/hplip-3.12.4.ebuild new file mode 100644 index 000000000000..c0c4fb18cdb7 --- /dev/null +++ b/net-print/hplip/hplip-3.12.4.ebuild @@ -0,0 +1,264 @@ +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/net-print/hplip/hplip-3.12.4.ebuild,v 1.1 2012/04/11 18:33:38 billie Exp $ + +EAPI=4 + +PYTHON_DEPEND="!minimal? 2" +PYTHON_USE_WITH="threads xml" +PYTHON_USE_WITH_OPT="!minimal" + +inherit fdo-mime linux-info python autotools + +DESCRIPTION="HP Linux Imaging and Printing. Includes printer, scanner, fax drivers and service tools." +HOMEPAGE="http://hplipopensource.com/hplip-web/index.html" +SRC_URI="mirror://sourceforge/hplip/${P}.tar.gz" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~amd64 ~arm ~ppc ~ppc64 ~x86" + +# zeroconf does not work properly with >=cups-1.4. +# Thus support for it is also disabled in hplip. +IUSE="doc fax +hpcups hpijs kde libnotify minimal parport policykit qt4 scanner snmp static-ppds -acl X" + +REQUIRED_USE="|| ( hpijs hpcups )" + +COMMON_DEPEND=" + virtual/jpeg + hpijs? ( >=net-print/foomatic-filters-3.0.20080507[cups] ) + acl? ( || ( >=sys-auth/consolekit-0.4.5-r3[acl] >=sys-fs/udev-171-r5[acl] <sys-fs/udev-171-r5[extras] ) ) + !minimal? ( + >=net-print/cups-1.4.0 + virtual/libusb:0 + scanner? ( >=media-gfx/sane-backends-1.0.19-r1 ) + fax? ( sys-apps/dbus ) + snmp? ( + net-analyzer/net-snmp + dev-libs/openssl + ) + )" + +DEPEND="${COMMON_DEPEND} + dev-util/pkgconfig" + +RDEPEND="${COMMON_DEPEND} + >=app-text/ghostscript-gpl-8.71-r3 + policykit? ( + sys-auth/polkit + ) + !minimal? ( + dev-python/pygobject:2 + kernel_linux? ( >=sys-fs/udev-114 ) + scanner? ( + dev-python/imaging + X? ( || ( + kde? ( kde-misc/skanlite ) + media-gfx/xsane + media-gfx/sane-frontends + ) ) + ) + fax? ( + dev-python/reportlab + dev-python/dbus-python + ) + qt4? ( + dev-python/PyQt4[dbus,X] + libnotify? ( + dev-python/notify-python + ) + ) + )" + +CONFIG_CHECK="~PARPORT ~PPDEV" +ERROR_PARPORT="Please make sure kernel parallel port support is enabled (PARPORT and PPDEV)." + +pkg_setup() { + if ! use minimal; then + python_set_active_version 2 + python_pkg_setup + fi + + ! use qt4 && ewarn "You need USE=qt4 for the hplip GUI." + + use scanner && ! use X && ewarn "You need USE=X for the scanner GUI." + + if use minimal ; then + ewarn "Installing driver portions only, make sure you know what you are doing." + ewarn "Depending on the USE flags set for hpcups or hpijs the appropiate driver" + ewarn "is installed. If both USE flags are set hpijs overrides hpcups." + else + use parport && linux-info_pkg_setup + fi +} + +src_prepare() { + + use !minimal && python_convert_shebangs -q -r 2 . + + # Fix for Gentoo bug #345725 + sed -i -e "s|/etc/udev/rules.d|/lib/udev/rules.d|" \ + $(find ./ -type f -exec grep -l '/etc/udev/rules.d' '{}' '+') \ + || die + + # Do not install desktop files if there is no gui + # Upstream bug: https://bugs.launchpad.net/hplip/+bug/452113 + epatch "${FILESDIR}"/${P}-desktop.patch + + # Browser detection through xdg-open + # Upstream bug: https://bugs.launchpad.net/hplip/+bug/482674 + epatch "${FILESDIR}"/${PN}-3.9.10-browser.patch + + # Use cups-config when checking for cupsddk + # Upstream bug: https://bugs.launchpad.net/hplip/+bug/483136 + epatch "${FILESDIR}"/${P}-cupsddk.patch + + # Htmldocs are not installed under docdir/html so enable htmldir configure + # switch + # Upstream bug: https://bugs.launchpad.net/hplip/+bug/483217 + epatch "${FILESDIR}"/${P}-htmldir.patch + + # Let 56-hpmud_support.rules call hp-mkuri to make it work with newer udev + # Upstream bug: None + epatch "${FILESDIR}"/${PN}-3.11.12-udev-rules.patch + + # CVE-2010-4267 SNMP Response Processing Buffer Overflow Vulnerability + # http://secunia.com/advisories/42956/ + # https://bugzilla.redhat.com/show_bug.cgi?id=662740 + epatch "${FILESDIR}"/${PN}-3.10.9-cve-2010-4267.patch + + # Fix black stripes on pcl5c printouts + # Upstream bug: https://bugs.launchpad.net/hplip/+bug/561264 + epatch "${FILESDIR}"/${PN}-3.11.12-black-stripes-pcl5c.patch + + # Fix parallel port cpu usage + # Upstream bug: https://bugs.launchpad.net/hplip/+bug/750796 + epatch "${FILESDIR}"/${P}-fast-pp.patch + + # Fix minmal/hpijs_only/hpcups_only install + # Upstream bug: https://bugs.launchpad.net/hplip/+bug/932918 + epatch "${FILESDIR}"/${PN}-3.12.2-minimal.patch + + # Force recognition of Gentoo distro by hp-check + sed -i \ + -e "s:file('/etc/issue', 'r').read():'Gentoo':" \ + installer/core_install.py || die + + # 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 + gunzip -c ${i} | sed 's/foomatic-rip-hplip/foomatic-rip/g' | \ + gzip > ${i}.temp || die + mv ${i}.temp ${i} + done + + eautoreconf +} + +src_configure() { + local myconf drv_build minimal_build + + if use fax || use qt4 ; then + myconf="${myconf} --enable-dbus-build" + else + myconf="${myconf} --disable-dbus-build" + fi + + if use hpcups ; then + drv_build="$(use_enable hpcups hpcups-install)" + if use static-ppds ; then + drv_build="${drv_build} --enable-cups-ppd-install" + drv_build="${drv_build} --disable-cups-drv-install" + else + drv_build="${drv_build} --enable-cups-drv-install" + drv_build="${drv_build} --disable-cups-ppd-install" + fi + else + drv_build="--disable-hpcups-install" + drv_build="${drv_build} --disable-cups-drv-install" + drv_build="${drv_build} --disable-cups-ppd-install" + fi + + if use hpijs ; then + drv_build="${drv_build} $(use_enable hpijs hpijs-install)" + if use static-ppds ; then + drv_build="${drv_build} --enable-foomatic-ppd-install" + drv_build="${drv_build} --disable-foomatic-drv-install" + else + drv_build="${drv_build} --enable-foomatic-drv-install" + drv_build="${drv_build} --disable-foomatic-ppd-install" + fi + else + drv_build="${drv_build} --disable-hpijs-install" + drv_build="${drv_build} --disable-foomatic-drv-install" + drv_build="${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="${minimal_build} --enable-hpcups-only-build" + else + minimal_build="${minimal_build} --disable-hpcups-only-build" + fi + fi + + econf \ + --disable-cups11-build \ + --disable-lite-build \ + --disable-foomatic-rip-hplip-install \ + --disable-shadow-build \ + --disable-qt3 \ + --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 \ + ${myconf} \ + ${drv_build} \ + ${minimal_build} \ + $(use_enable doc doc-build) \ + $(use_enable fax fax-build) \ + $(use_enable parport pp-build) \ + $(use_enable scanner scan-build) \ + $(use_enable snmp network-build) \ + $(use_enable acl udev-acl-rules) \ + $(use_enable qt4 gui-build) \ + $(use_enable qt4) \ + $(use_enable policykit) +} + +src_install() { + default + + # Installed by sane-backends + # Gentoo Bug: #201023 + rm -f "${D}"/etc/sane.d/dll.conf || die + + rm -f "${D}"/usr/share/doc/${PF}/{copyright,README_LIBJPG,COPYING} || die + rmdir --ignore-fail-on-non-empty "${D}"/usr/share/doc/${PF}/ || die + + # Remove hal fdi files + rm -rf "${D}"/usr/share/hal || die + + find "${D}" -name '*.la' -exec rm -rf '{}' '+' || die +} + +pkg_postinst() { + use !minimal && python_mod_optimize /usr/share/${PN} + fdo-mime_desktop_database_update + + elog "For more information on setting up your printer please take" + elog "a look at the hplip section of the gentoo printing guide:" + elog "http://www.gentoo.org/doc/en/printing-howto.xml" +} + +pkg_postrm() { + use !minimal && python_mod_cleanup /usr/share/${PN} + fdo-mime_desktop_database_update +} |