diff options
Diffstat (limited to 'media-gfx')
3 files changed, 775 insertions, 0 deletions
diff --git a/media-gfx/sane-backends/files/sane-backends-1.0.27-revert-samsung.patch b/media-gfx/sane-backends/files/sane-backends-1.0.27-revert-samsung.patch new file mode 100644 index 000000000000..af3e141a010c --- /dev/null +++ b/media-gfx/sane-backends/files/sane-backends-1.0.27-revert-samsung.patch @@ -0,0 +1,406 @@ +From 9b13d4c18b2424eaed02b72a928e9607921ec265 Mon Sep 17 00:00:00 2001 +From: Bernard Cafarelli <bernard.cafarelli@gmail.com> +Date: Tue, 17 Apr 2018 22:43:15 +0200 +Subject: [PATCH] Revert "Color scanning for Samsung models, which support JPEG + Lossy compression." + +This reverts commit 926bfade544de4a4fd5f1a8082b85a97e2443770, leaving +the new IDs in. +As tracked in #315876, this breaks scanning with multiple Samsung scanners + +Conflicts: + backend/xerox_mfp.c + backend/xerox_mfp.h + doc/descriptions/xerox_mfp.desc +--- + backend/Makefile.am | 2 +- + backend/Makefile.in | 7 +- + backend/xerox_mfp.c | 193 +------------------------------- + backend/xerox_mfp.h | 5 - + doc/descriptions/xerox_mfp.desc | 10 +- + 5 files changed, 14 insertions(+), 203 deletions(-) + +diff --git a/backend/Makefile.am b/backend/Makefile.am +index 18695a4a..3225b133 100644 +--- a/backend/Makefile.am ++++ b/backend/Makefile.am +@@ -1086,7 +1086,7 @@ libxerox_mfp_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=xerox_mfp + nodist_libsane_xerox_mfp_la_SOURCES = xerox_mfp-s.c + libsane_xerox_mfp_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=xerox_mfp + libsane_xerox_mfp_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) +-libsane_xerox_mfp_la_LIBADD = $(COMMON_LIBS) libxerox_mfp.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo @SANEI_SANEI_JPEG_LO@ $(JPEG_LIBS) ../sanei/sanei_usb.lo ../sanei/sanei_tcp.lo $(MATH_LIB) $(SOCKET_LIBS) $(USB_LIBS) $(RESMGR_LIBS) ++libsane_xerox_mfp_la_LIBADD = $(COMMON_LIBS) libxerox_mfp.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_tcp.lo $(MATH_LIB) $(SOCKET_LIBS) $(USB_LIBS) $(RESMGR_LIBS) + EXTRA_DIST += xerox_mfp.conf.in + + libdll_preload_la_SOURCES = dll.c +diff --git a/backend/Makefile.in b/backend/Makefile.in +index d1dca4a2..2643bb77 100644 +--- a/backend/Makefile.in ++++ b/backend/Makefile.in +@@ -1430,10 +1430,9 @@ libsane_v4l_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + libsane_xerox_mfp_la_DEPENDENCIES = $(COMMON_LIBS) libxerox_mfp.la \ + ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo \ + ../sanei/sanei_config.lo sane_strstatus.lo \ +- $(am__DEPENDENCIES_1) ../sanei/sanei_usb.lo \ +- ../sanei/sanei_tcp.lo $(am__DEPENDENCIES_1) \ ++ ../sanei/sanei_usb.lo ../sanei/sanei_tcp.lo \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ +- $(am__DEPENDENCIES_1) ++ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) + nodist_libsane_xerox_mfp_la_OBJECTS = \ + libsane_xerox_mfp_la-xerox_mfp-s.lo + libsane_xerox_mfp_la_OBJECTS = $(nodist_libsane_xerox_mfp_la_OBJECTS) +@@ -2754,7 +2753,7 @@ libxerox_mfp_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=xerox_mfp + nodist_libsane_xerox_mfp_la_SOURCES = xerox_mfp-s.c + libsane_xerox_mfp_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=xerox_mfp + libsane_xerox_mfp_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) +-libsane_xerox_mfp_la_LIBADD = $(COMMON_LIBS) libxerox_mfp.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo @SANEI_SANEI_JPEG_LO@ $(JPEG_LIBS) ../sanei/sanei_usb.lo ../sanei/sanei_tcp.lo $(MATH_LIB) $(SOCKET_LIBS) $(USB_LIBS) $(RESMGR_LIBS) ++libsane_xerox_mfp_la_LIBADD = $(COMMON_LIBS) libxerox_mfp.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_tcp.lo $(MATH_LIB) $(SOCKET_LIBS) $(USB_LIBS) $(RESMGR_LIBS) + libdll_preload_la_SOURCES = dll.c + libdll_preload_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dll -DENABLE_PRELOAD + libdll_la_SOURCES = dll.c +diff --git a/backend/xerox_mfp.c b/backend/xerox_mfp.c +index 8b8c8956..d37a6237 100644 +--- a/backend/xerox_mfp.c ++++ b/backend/xerox_mfp.c +@@ -33,9 +33,6 @@ + #include "../include/sane/sanei_usb.h" + #include "../include/sane/sanei_config.h" + #include "../include/sane/sanei_backend.h" +-#ifdef HAVE_LIBJPEG +-#include <jpeglib.h> +-#endif + #include "xerox_mfp.h" + + #define BACKEND_BUILD 13 +@@ -93,128 +90,6 @@ static char *str_cmd(int cmd) + } + + #define MAX_DUMP 70 +-const char *encTmpFileName = "/tmp/stmp_enc.tmp"; +- +-static int decompress(struct device __sane_unused__ *dev, +- const char __sane_unused__ *infilename) +-{ +-#ifdef HAVE_LIBJPEG +- int rc; +- int row_stride, width, height, pixel_size; +- struct jpeg_decompress_struct cinfo; +- struct jpeg_error_mgr jerr; +- unsigned long bmp_size = 0; +- FILE *pInfile = NULL; +- JSAMPARRAY buffer; +- +- if ((pInfile = fopen(infilename, "rb")) == NULL) { +- fprintf(stderr, "can't open %s\n", infilename); +- return -1; +- } +- +- cinfo.err = jpeg_std_error(&jerr); +- +- jpeg_create_decompress(&cinfo); +- +- jpeg_stdio_src(&cinfo, pInfile); +- +- rc = jpeg_read_header(&cinfo, TRUE); +- if (rc != 1) { +- jpeg_destroy_decompress(&cinfo); +- fclose(pInfile); +- return -1; +- } +- +- jpeg_start_decompress(&cinfo); +- +- width = cinfo.output_width; +- height = cinfo.output_height; +- pixel_size = cinfo.output_components; +- bmp_size = width * height * pixel_size; +- dev->decDataSize = bmp_size; +- +- row_stride = width * pixel_size; +- +- buffer = (*cinfo.mem->alloc_sarray) +- ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1); +- +- while (cinfo.output_scanline < cinfo.output_height) { +- buffer[0] = dev->decData + \ +- (cinfo.output_scanline) * row_stride; +- jpeg_read_scanlines(&cinfo, buffer, 1); +- } +- jpeg_finish_decompress(&cinfo); +- jpeg_destroy_decompress(&cinfo); +- fclose(pInfile); +- return 0; +-#else +- return -1; +-#endif +-} +- +-static int copy_decompress_data(struct device *dev, unsigned char *pDest, int maxlen, int *destLen) +-{ +- int data_size = 0; +- size_t result = 0, retVal = 0; +- +- +- if (0 == dev->decDataSize) { +- *destLen = 0; +- return retVal; +- } +- data_size = dev->decDataSize - dev->currentDecDataIndex; +- if (data_size > maxlen) { +- data_size = maxlen; +- } +- memcpy(pDest, dev->decData+dev->currentDecDataIndex, data_size); +- result = data_size; +- *destLen = result; +- dev->currentDecDataIndex += result; +- retVal = result; +- +- if (dev->decDataSize == dev->currentDecDataIndex) { +- dev->currentDecDataIndex = 0; +- dev->decDataSize = 0; +- } +- +- return retVal; +-} +- +-static int decompress_tempfile(struct device *dev) +-{ +- decompress(dev, encTmpFileName); +- remove(encTmpFileName); +- return 0; +-} +- +-static int dump_to_tmp_file(struct device *dev) +-{ +- unsigned char *pSrc = dev->data; +- int srcLen = dev->datalen; +- FILE *pInfile; +- if ((pInfile = fopen(encTmpFileName, "a")) == NULL) { +- fprintf(stderr, "can't open %s\n", encTmpFileName); +- return 0; +- } +- +- fwrite(pSrc, 1, srcLen, pInfile); +- fclose(pInfile); +- return srcLen; +-} +- +-static int isSupportedDevice(struct device __sane_unused__ *dev) +-{ +-#ifdef HAVE_LIBJPEG +- /* Checking device which supports JPEG Lossy compression for color scanning*/ +- if (dev->compressionTypes & (1 << 6)) +- return 1; +- else +- return 0; +-#else +- return 0; +-#endif +-} +- + static void dbg_dump(struct device *dev) + { + int i; +@@ -639,11 +514,9 @@ static void set_parameters(struct device *dev) + dev->para.pixels_per_line = dev->win_width / px_to_len; + dev->para.bytes_per_line = dev->para.pixels_per_line; + +- if (!isSupportedDevice(dev)) { + #if BETTER_BASEDPI +- px_to_len = 1213.9 / dev->val[OPT_RESOLUTION].w; ++ px_to_len = 1213.9 / dev->val[OPT_RESOLUTION].w; + #endif +- } + dev->para.lines = dev->win_len / px_to_len; + if (dev->composition == MODE_LINEART || + dev->composition == MODE_HALFTONE) { +@@ -765,13 +638,6 @@ static int dev_set_window(struct device *dev) + cmd[0x11] = (SANE_Byte)floor(dev->win_off_y); + cmd[0x12] = (SANE_Byte)((dev->win_off_y - floor(dev->win_off_y)) * 100); + cmd[0x13] = dev->composition; +- /* Set to JPEG Lossy Compression, if mode is color (only for supported model)... +- * else go with Uncompressed (For backard compatibility with old models )*/ +- if (dev->composition == MODE_RGB24) { +- if (isSupportedDevice(dev)) { +- cmd[0x14] = 0x6; +- } +- } + cmd[0x16] = dev->threshold; + cmd[0x17] = dev->doc_source; + +@@ -843,7 +709,6 @@ dev_inquiry(struct device *dev) + dev->res[0x3e] << 8 | + dev->res[0x3f]; + dev->line_order = dev->res[0x31]; +- dev->compressionTypes = dev->res[0x32]; + dev->doc_loaded = (dev->res[0x35] == 0x02) && + (dev->res[0x26] & 0x03); + +@@ -942,10 +807,6 @@ dev_free(struct device *dev) + free(UNCONST(dev->sane.type)); + if (dev->data) + free(dev->data); +- if (dev->decData) { +- free(dev->decData); +- dev->decData = NULL; +- } + memset(dev, 0, sizeof(*dev)); + free(dev); + } +@@ -1283,19 +1144,6 @@ sane_read(SANE_Handle h, SANE_Byte *buf, SANE_Int maxlen, SANE_Int *lenp) + /* if there is no data to read or output from buffer */ + if (!dev->blocklen && dev->datalen <= PADDING_SIZE) { + +- /* copying uncompressed data */ +- if (dev->composition == MODE_RGB24 && +- isSupportedDevice(dev) && +- dev->decDataSize > 0) { +- int diff = dev->total_img_size - dev->total_out_size; +- int bufLen = (diff < maxlen) ? diff : maxlen; +- if (0 < diff && +- 0 < copy_decompress_data(dev, buf, bufLen, lenp)) { +- dev->total_out_size += *lenp; +- return SANE_STATUS_GOOD; +- } +- } +- + /* and we don't need to acquire next block */ + if (dev->final_block) { + int slack = dev->total_img_size - dev->total_out_size; +@@ -1311,10 +1159,7 @@ sane_read(SANE_Handle h, SANE_Byte *buf, SANE_Int maxlen, SANE_Int *lenp) + /* this will never happen */ + DBG(1, "image overflow %d bytes\n", dev->total_img_size - dev->total_out_size); + } +- if (isSupportedDevice(dev) && +- dev->composition == MODE_RGB24) { +- remove(encTmpFileName); +- } ++ + /* that's all */ + dev_stop(dev); + return SANE_STATUS_EOF; +@@ -1365,18 +1210,9 @@ sane_read(SANE_Handle h, SANE_Byte *buf, SANE_Int maxlen, SANE_Int *lenp) + + if (buf && lenp) { /* read mode */ + /* copy will do minimal of valid data */ +- if (dev->para.format == SANE_FRAME_RGB && dev->line_order) { +- if (isSupportedDevice(dev)) { +- clrlen = dump_to_tmp_file(dev); +- /* decompress after reading entire block data*/ +- if (0 == dev->blocklen) { +- decompress_tempfile(dev); +- } +- copy_decompress_data(dev, buf, maxlen, &olen); +- } else { +- clrlen = copy_mix_bands_trim(dev, buf, maxlen, &olen); +- } +- } else ++ if (dev->para.format == SANE_FRAME_RGB && dev->line_order) ++ clrlen = copy_mix_bands_trim(dev, buf, maxlen, &olen); ++ else + clrlen = copy_plain_trim(dev, buf, maxlen, &olen); + + dev->datalen -= clrlen; +@@ -1455,9 +1291,6 @@ sane_start(SANE_Handle h) + if (!dev->data && !(dev->data = malloc(DATASIZE))) + return ret_cancel(dev, SANE_STATUS_NO_MEM); + +- if (!dev->decData && !(dev->decData = malloc(POST_DATASIZE))) +- return ret_cancel(dev, SANE_STATUS_NO_MEM); +- + if (!dev_acquire(dev)) + return dev->state; + +@@ -1479,22 +1312,6 @@ sane_start(SANE_Handle h) + + dev->total_img_size = dev->para.bytes_per_line * dev->para.lines; + +- if (isSupportedDevice(dev) && +- dev->composition == MODE_RGB24) { +- int fd; +- remove(encTmpFileName); +- +- /* Precreate temporary file in exclusive mode. */ +- fd = open(encTmpFileName, O_CREAT|O_EXCL, 0600); +- if (fd == -1) { +- DBG(3, "%s: %p, can't create temporary file %s: %s\n", __func__, +- (void *)dev, encTmpFileName, strerror(errno)); +- return ret_cancel(dev, SANE_STATUS_ACCESS_DENIED); +- } +- close(fd); +- } +- dev->currentDecDataIndex = 0; +- + return SANE_STATUS_GOOD; + } + +diff --git a/backend/xerox_mfp.h b/backend/xerox_mfp.h +index 3d93f06d..ea89dda2 100644 +--- a/backend/xerox_mfp.h ++++ b/backend/xerox_mfp.h +@@ -74,10 +74,6 @@ struct device { + #define DATATAIL(dev) ((dev->dataoff + dev->datalen) & DATAMASK) + #define DATAROOM(dev) dataroom(dev) + +-#define POST_DATASIZE 0xFFFFFF +- SANE_Byte *decData; +- int decDataSize; +- int currentDecDataIndex; + /* data from CMD_INQUIRY: */ + int resolutions; /* supported resolution bitmask */ + int compositions; /* supported image compositions bitmask */ +@@ -102,7 +98,6 @@ struct device { + int composition; /* MODE_ */ + int doc_source; /* document source */ + int threshold; /* brightness */ +- int compressionTypes; + + /* CMD_READ data. It is per block only, image could be in many blocks */ + int blocklen; /* image data block len (padding incl.) */ +diff --git a/doc/descriptions/xerox_mfp.desc b/doc/descriptions/xerox_mfp.desc +index d21a6be6..67253b38 100644 +--- a/doc/descriptions/xerox_mfp.desc ++++ b/doc/descriptions/xerox_mfp.desc +@@ -320,7 +320,7 @@ + + :model "SCX-3405W" + :interface "Ethernet" +-:status :good ++:status :basic + + :model "SCX-3400" + :interface "USB" +@@ -335,17 +335,17 @@ + :model "SCX-4729FD" + :interface "USB" + :usbid "0x04e8" "0x3453" +-:status :good ++:status :basic + + :model "CLX-6260" + :interface "USB" + :usbid "0x04e8" "0x3455" +-:status :good ++:status :minimal + + :model "CLX-3300 Series" + :interface "USB" + :usbid "0x04e8" "0x3456" +-:status :good ++:status :basic + + :model "SCX-470x" + :interface "USB" +@@ -355,7 +355,7 @@ + :model "CLX-4190" + :interface "USB" + :usbid "0x04e8" "0x345a" +-:status :good ++:status :minimal + + :model "SCX-4650 4x21S Series" + :interface "USB" +-- +2.17.0 + diff --git a/media-gfx/sane-backends/files/sane-backends-1.0.27-uninitialized-variable.patch b/media-gfx/sane-backends/files/sane-backends-1.0.27-uninitialized-variable.patch new file mode 100644 index 000000000000..0311975c0ce8 --- /dev/null +++ b/media-gfx/sane-backends/files/sane-backends-1.0.27-uninitialized-variable.patch @@ -0,0 +1,25 @@ +From dd61ef1cc84299781e382b9258d97102cee192b4 Mon Sep 17 00:00:00 2001 +From: Olaf Meeuwissen <paddy-hack@member.fsf.org> +Date: Thu, 3 Aug 2017 18:50:05 +0900 +Subject: [PATCH] genesys: Fix use of uninitialized variable + +See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=869673 +--- + backend/genesys.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/backend/genesys.c b/backend/genesys.c +index 1c1bbf4..0b644c4 100644 +--- a/backend/genesys.c ++++ b/backend/genesys.c +@@ -6237,6 +6237,7 @@ attach (SANE_String_Const devname, Genesys_Device ** devp, SANE_Bool may_wait) + dev->model = genesys_usb_device_list[i].model; + dev->vendorId = genesys_usb_device_list[i].vendor; + dev->productId = genesys_usb_device_list[i].product; ++ dev->usb_mode = 0; /* i.e. unset */ + dev->already_initialized = SANE_FALSE; + + DBG (DBG_info, "attach: found %s flatbed scanner %s at %s\n", +-- +2.1.4 + diff --git a/media-gfx/sane-backends/sane-backends-1.0.27-r2.ebuild b/media-gfx/sane-backends/sane-backends-1.0.27-r2.ebuild new file mode 100644 index 000000000000..4ce3733007d1 --- /dev/null +++ b/media-gfx/sane-backends/sane-backends-1.0.27-r2.ebuild @@ -0,0 +1,344 @@ +# Copyright 1999-2018 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 +inherit flag-o-matic multilib-minimal systemd toolchain-funcs udev user + +# gphoto and v4l are handled by their usual USE flags. +# The pint backend was disabled because I could not get it to compile. +IUSE_SANE_BACKENDS=" + abaton + agfafocus + apple + artec + artec_eplus48u + as6e + avision + bh + canon + canon630u + canon_dr + canon_pp + cardscan + coolscan + coolscan2 + coolscan3 + dc210 + dc240 + dc25 + dell1600n_net + dmc + epjitsu + epson + epson2 + fujitsu + genesys + gt68xx + hp + hp3500 + hp3900 + hp4200 + hp5400 + hp5590 + hpljm1005 + hpsj5s + hs2p + ibm + kodak + kodakaio + kvs1025 + kvs20xx + kvs40xx + leo + lexmark + ma1509 + magicolor + matsushita + microtek + microtek2 + mustek + mustek_pp + mustek_usb + mustek_usb2 + nec + net + niash + p5 + pie + pixma + plustek + plustek_pp + pnm + qcam + ricoh + rts8891 + s9036 + sceptre + sharp + sm3600 + sm3840 + snapscan + sp15c + st400 + stv680 + tamarack + teco1 + teco2 + teco3 + test + u12 + umax + umax1220u + umax_pp + xerox_mfp" + +IUSE="gphoto2 ipv6 snmp systemd threads usb v4l xinetd zeroconf" + +for backend in ${IUSE_SANE_BACKENDS}; do + case ${backend} in + # Disable backends that require parallel ports as no one has those anymore. + canon_pp|hpsj5s|mustek_pp|\ + pnm) + IUSE+=" -sane_backends_${backend}" + ;; + mustek_usb2|kvs40xx) + IUSE+=" sane_backends_${backend}" + ;; + *) + IUSE+=" +sane_backends_${backend}" + esac +done + +REQUIRED_USE=" + sane_backends_mustek_usb2? ( threads ) + sane_backends_kvs40xx? ( threads ) +" + +DESCRIPTION="Scanner Access Now Easy - Backends" +HOMEPAGE="http://www.sane-project.org/" +MY_P="${P}" +FRS_ID="4224" +SRC_URI="https://alioth.debian.org/frs/download.php/file/${FRS_ID}/${P}.tar.gz" + +LICENSE="GPL-2 public-domain" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~x86-fbsd ~amd64-linux ~x86-linux" + +RDEPEND=" + sane_backends_dc210? ( >=virtual/jpeg-0-r2:0=[${MULTILIB_USEDEP}] ) + sane_backends_dc240? ( >=virtual/jpeg-0-r2:0=[${MULTILIB_USEDEP}] ) + sane_backends_dell1600n_net? ( + >=virtual/jpeg-0-r2:0=[${MULTILIB_USEDEP}] + >=media-libs/tiff-3.9.7-r1:0=[${MULTILIB_USEDEP}] + ) + sane_backends_canon_pp? ( >=sys-libs/libieee1284-0.2.11-r3[${MULTILIB_USEDEP}] ) + sane_backends_hpsj5s? ( >=sys-libs/libieee1284-0.2.11-r3[${MULTILIB_USEDEP}] ) + sane_backends_mustek_pp? ( >=sys-libs/libieee1284-0.2.11-r3[${MULTILIB_USEDEP}] ) + usb? ( >=virtual/libusb-1-r1:1=[${MULTILIB_USEDEP}] ) + gphoto2? ( + >=media-libs/libgphoto2-2.5.3.1:=[${MULTILIB_USEDEP}] + >=virtual/jpeg-0-r2:0=[${MULTILIB_USEDEP}] + ) + v4l? ( >=media-libs/libv4l-0.9.5[${MULTILIB_USEDEP}] ) + xinetd? ( sys-apps/xinetd ) + snmp? ( net-analyzer/net-snmp ) + systemd? ( sys-apps/systemd:0= ) + zeroconf? ( >=net-dns/avahi-0.6.31-r2[${MULTILIB_USEDEP}] ) +" + +DEPEND="${RDEPEND} + v4l? ( sys-kernel/linux-headers ) + >=sys-devel/gettext-0.18.1 + >=virtual/pkgconfig-0-r1[${MULTILIB_USEDEP}] +" + +MULTILIB_CHOST_TOOLS=( + /usr/bin/sane-config +) + +pkg_setup() { + enewgroup scanner + enewuser saned -1 -1 -1 scanner +} + +src_prepare() { + default + + cat >> backend/dll.conf.in <<-EOF + # Add support for the HP-specific backend. Needs net-print/hplip installed. + hpaio + # Add support for the Epson-specific backend. Needs media-gfx/iscan installed. + epkowa + EOF + + eapply "${FILESDIR}"/${PN}-1.0.24-saned_pidfile_location.patch + eapply "${FILESDIR}"/${PN}-1.0.27-disable-usb-tests.patch + + # From Arch + eapply "${FILESDIR}"/${PN}-1.0.27-network.patch + + # From Fedora + # Fix https://bugs.gentoo.org/635348 + eapply "${FILESDIR}"/${PN}-1.0.27-canon-lide-100.patch + # Fix https://bugs.gentoo.org/653300 + eapply "${FILESDIR}"/${PN}-1.0.27-revert-samsung.patch + + # From Debian + eapply "${FILESDIR}"/${PN}-1.0.27-uninitialized-variable.patch + + # Fix for "make check". Upstream sometimes forgets to update this. + local ver=$(./configure --version | awk '{print $NF; exit 0}') + sed -i \ + -e "/by sane-desc 3.5 from sane-backends/s:sane-backends .*:sane-backends ${ver}:" \ + testsuite/tools/data/html* || die +} + +src_configure() { + append-flags -fno-strict-aliasing # From Fedora + + # if LINGUAS is set, just use the listed and supported localizations. + if [[ ${LINGUAS+set} == "set" ]]; then + mkdir -p po || die + strip-linguas -u po + printf '%s\n' ${LINGUAS} > po/LINGUAS + fi + + multilib-minimal_src_configure +} + +multilib_src_configure() { + # the blank is intended - an empty string would result in building ALL backends. + local BACKENDS=" " + + use gphoto2 && BACKENDS="gphoto2" + use v4l && BACKENDS="${BACKENDS} v4l" + for backend in ${IUSE_SANE_BACKENDS}; do + if use "sane_backends_${backend}" && [ ${backend} != pnm ]; then + BACKENDS="${BACKENDS} ${backend}" + fi + done + + local myconf=( + $(use_with usb) + $(multilib_native_use_with snmp) + ) + + # you can only enable this backend, not disable it... + if use sane_backends_pnm; then + myconf+=( --enable-pnm-backend ) + fi + if use sane_backends_mustek_pp; then + myconf+=( --enable-parport-directio ) + fi + if ! { use sane_backends_canon_pp || use sane_backends_hpsj5s || use sane_backends_mustek_pp; }; then + myconf+=( sane_cv_use_libieee1284=no ) + fi + + # relative path must be used for tests to work properly + ECONF_SOURCE=${S} \ + SANEI_JPEG="sanei_jpeg.o" SANEI_JPEG_LO="sanei_jpeg.lo" \ + BACKENDS="${BACKENDS}" \ + # All distributions pass --disable-locking because /var/lock/sane/ would be a world-writable directory + # --without-api-spec to not automagically depend on tons of stuff + # that break in many ways, bug #636202, #668232, #668350 + # People can refer to the "Programmer's Documentation" at http://www.sane-project.org/docs.html + econf \ + --disable-locking \ + --without-api-spec \ + $(use_with gphoto2) \ + $(multilib_native_use_with systemd) \ + $(use_with v4l) \ + $(use_enable ipv6) \ + $(use_enable threads pthread) \ + $(use_enable zeroconf avahi) \ + "${myconf[@]}" +} + +multilib_src_compile() { + emake VARTEXFONTS="${T}/fonts" + + if tc-is-cross-compiler; then + pushd "${BUILD_DIR}"/tools >/dev/null || die + + # The build system sucks and doesn't handle this properly. + # https://alioth.debian.org/tracker/index.php?func=detail&aid=314236&group_id=30186&atid=410366 + tc-export_build_env BUILD_CC + ${BUILD_CC} ${BUILD_CPPFLAGS} ${BUILD_CFLAGS} ${BUILD_LDFLAGS} \ + -I. -I../include -I"${S}"/include \ + "${S}"/sanei/sanei_config.c "${S}"/sanei/sanei_constrain_value.c \ + "${S}"/sanei/sanei_init_debug.c "${S}"/tools/sane-desc.c -o sane-desc || die + local dirs=( hal hotplug hotplug-ng udev ) + local targets=( + hal/libsane.fdi + hotplug/libsane.usermap + hotplug-ng/libsane.db + udev/libsane.rules + ) + mkdir -p "${dirs[@]}" || die + emake "${targets[@]}" + + popd >/dev/null + fi + + if use usb; then + sed -i -e '/^$/d' \ + tools/hotplug/libsane.usermap || die + fi +} + +multilib_src_install() { + emake INSTALL_LOCKPATH="" DESTDIR="${D}" install \ + docdir="${EPREFIX}"/usr/share/doc/${PF} + + if multilib_is_native_abi; then + if use usb; then + insinto /etc/hotplug/usb + doins tools/hotplug/libsane.usermap + fi + + udev_newrules tools/udev/libsane.rules 41-libsane.rules + insinto "/usr/share/pkgconfig" + doins tools/sane-backends.pc + fi +} + +multilib_src_install_all() { + keepdir /var/lib/lock/sane + fowners root:scanner /var/lib/lock/sane + fperms g+w /var/lib/lock/sane + dodir /etc/env.d + + if use systemd; then + systemd_newunit "${FILESDIR}"/saned_at.service "saned@.service" + systemd_newunit "${FILESDIR}"/saned.socket saned.socket + fi + + if use usb; then + exeinto /etc/hotplug/usb + doexe tools/hotplug/libusbscanner + newdoc tools/hotplug/README README.hotplug + fi + + dodoc NEWS AUTHORS ChangeLog* PROBLEMS README README.linux + find "${D}" -name '*.la' -delete || die + + if use xinetd; then + insinto /etc/xinetd.d + doins "${FILESDIR}"/saned + fi + + newinitd "${FILESDIR}"/saned.initd saned + newconfd "${FILESDIR}"/saned.confd saned +} + +pkg_postinst() { + if use xinetd; then + elog "If you want remote clients to connect, edit" + elog "/etc/sane.d/saned.conf and /etc/hosts.allow" + fi + + if ! use systemd; then + elog "If you are using a USB scanner, add all users who want" + elog "to access your scanner to the \"scanner\" group." + fi +} |