- Cherry-pick upstream patch to remove unnecessary Unicode character

* remove_unnecessary_unicode_character.patch
- Use individual %patch statements over %autosetup to allow
  for different levels of path stripping for both patches

OBS-URL: https://build.opensuse.org/package/show/graphics/sane-backends?expand=0&rev=115
This commit is contained in:
Michael Vetter 2024-08-19 05:55:43 +00:00 committed by Git OBS Bridge
commit 54bbcf0ebc
15 changed files with 53031 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.osc

File diff suppressed because it is too large Load Diff

3
baselibs.conf Normal file
View File

@ -0,0 +1,3 @@
libsane1
sane-backends
sane-backends-devel

View File

@ -0,0 +1,89 @@
#! /bin/bash
#
# Johannes Meixner <jsmeix@suse.de>, 2008
#set -x
export PATH="/sbin:/usr/sbin:/usr/bin:/bin"
export LC_ALL="POSIX"
export LANG="POSIX"
umask 022
MY_NAME=${0##*/}
# Input:
# Create a temporary file:
TMP_DATA=$(mktemp -u /tmp/$MY_NAME.XXXXXX) || { echo "Error: Failed to make a temporary file /tmp/$MY_NAME.XXXXXX" 1>&2 ; exit 1 ; }
# Get the raw data:
egrep '^\[|^model[1-9]*|^scan-type|^usb-pid' | sed -e 's/^\[\(.*\)\]$/class=\1/' -e 's/ /_/g' -e 's/=/ /' >$TMP_DATA
# Output:
# Output header:
echo ':backend "hpaio"'
echo ':version "3.9.8"'
echo ':url "http://hplipopensource.com"'
echo ':comment "This backend is not included in SANE because it is included in the HPLIP software."'
echo ':devicetype :scanner'
echo ':mfg "Hewlett-Packard"'
echo ':url "http://www.hp.com/united-states/consumer/gateway/printing_multifunction.html"'
echo
# Add a generic entry (the "Any" with capital 'A' lets it appear at the top of YaST's sorted list):
# This USB ID ("0x03f0" "0x0000") is used as fallback by the YaST scanner autodetection
# via /usr/lib/YaST2/bin/autodetect_scanners which calls "hp-probe -busb -escan"
# because hp-probe does not show the USB ID. With this USB ID the generic entry matches
# to any autodetected HPLIP USB all-in-one device (the "-escan" excludes plain printers)
# so that the usually right driver (hpaio) can be preselected by YaST.
# Nevertheless, to be on the safe side, the support status is set to "untested".
echo ':model "Any all-in-one device"'
echo ':usbid "0x03f0" "0x0000"'
echo ':status :untested'
echo ':comment "fallback entry for HP all-in-one devices"'
echo
# Function to normalize model names:
Normalize()
{ MODELS=$( echo $MODELS | sed -e 's/hp_//ig' -e 's/Aii-in-One/all-in-one/ig' )
for w in LaserJet Mopier DeskJet Business Inkjet Officejet Photosmart PSC Printer Scanner Copier DJ CP CM MFP Apollo series Color all-in-one
do MODELS=$( echo $MODELS | sed -e "s/$w/$w/ig" )
done
}
# Function to output one model entry:
Output()
{ if [ "$TYPE" -gt "0" ]
then Normalize
UNIFIEDMODELS=$( echo $MODELS | tr ' ' '\n' | sort -u | tr '\n' ' ' )
ID=$(( "0x$ID" ))
for MODEL in $( echo $UNIFIEDMODELS )
do MODEL=$( echo $MODEL | sed -e "s/_/ /g" )
echo ":model \"$MODEL\""
if [ "$ID" -gt "0" ] ; then printf ":usbid \"0x03f0\" \"0x%.4x\"\n" $ID ; fi
echo ':status :good'
echo
done
fi
}
# Output model entries:
TYPE="0"
exec <$TMP_DATA
while read KEY VALUE
do case "$KEY" in
class) Output
ID="0"
TYPE="0"
MODELS="$VALUE" ;;
model*) MODELS=$( echo $MODELS $VALUE ) ;;
scan-type) TYPE="$VALUE" ;;
usb-pid) ID="$VALUE" ;;
*) echo "Ignoring key $KEY" 1>&2 ;;
esac
done
# Remove the temporary file
rm $TMP_DATA
exit 0

View File

@ -0,0 +1,114 @@
#! /bin/bash
#
# Johannes Meixner <jsmeix@suse.de>, 2004, 2005, 2006
#set -x
export PATH="/sbin:/usr/sbin:/usr/bin:/bin"
export LC_ALL="POSIX"
export LANG="POSIX"
umask 022
MY_NAME=${0##*/}
# Input:
# Create a temporary file:
TMP_DATA=$(mktemp /tmp/$MY_NAME.XXXXXX) || { echo "Error: Failed to make a temporary file /tmp/$MY_NAME.XXXXXX" 1>&2 ; exit 1 ; }
# Extract only those USB scanners from the scanner database
# which are supported by the packages "sane-backends", "iscan-free", or "hplip"
# (i.e. not by the proprietary 32-bit-only i386-only "iscan" package)
# and which do not require firmware upload (i.e. FIRMWARE field is empty)
# (the INTERFACE field does not matter because it could be empty or stuff like "Parport USB" or "SCSI USB IEEE-1394")
# and where the USB-ID is known (i.e. '0x[0-9A-Fa-f][0-9A-Fa-f]*:0x[0-9A-Fa-f][0-9A-Fa-f]*')
# and where the support status is "complete" or "good" (i.e. skip "basic", "minimal", "untested", "unsupported")
# and keep only the fields of interest (i.e. BACKEND and USBID)
# and keep only unique lines (there are many duplicates among the fields of interest)
# and sort according to the USB-ID to have different driver lines for the same model contiguous
# which is needed to choose only one driver which is automatically activated
# because otherwise a scanner will show up multiple times in scanning frontends
# (once for each activated driver which works for this model)
# and finally set the usual input field separator ' ' (there are no blanks in BACKEND or USB-ID).
egrep '^sane-backends|^iscan-free|^hplip' scanner.database | grep '||[^|]*|0x[0-9A-Fa-f][0-9A-Fa-f]*:0x[0-9A-Fa-f][0-9A-Fa-f]*|' | cut -s -d '|' -f 2,7,8 | egrep 'complete$|good$' | cut -s -d '|' -f 1,2 | sort -u | sort -t '|' -k 2 | tr '|' ' ' >$TMP_DATA
# Output:
# Output header:
echo 'ACTION!="add", GOTO="sane_backends_autoconfig_rules_end"'
echo 'SUBSYSTEM!="usb", GOTO="sane_backends_autoconfig_rules_end"'
echo
# Output the scanner model entries:
USED_BACKENDS=""
PREVIOUS_VENDOR=""
PREVIOUS_MODEL=""
BACKENDS_FOR_SAME_MODEL=""
# Append a dummy entry to trigger the output for the last real model in the while loop:
echo 'dummy 0x0000:0x0000' >>$TMP_DATA
exec <$TMP_DATA
while read BACKEND USBID
do [ -z "$BACKEND" ] && { echo "Ignoring $USBID because there is no driver entry." 1>&2 ; continue ; }
VENDOR=$( echo $USBID | cut -s -d ':' -f 1 | sed -e 's/^0x//' )
[ -z "$VENDOR" ] && { echo "Ignoring $USBID because there is no vendor ID." 1>&2 ; continue ; }
MODEL=$( echo $USBID | cut -s -d ':' -f 2 | sed -e 's/^0x//' )
[ -z "$MODEL" ] && { echo "Ignoring $USBID because there is no model ID." 1>&2 ; continue ; }
# If the current model is the same as the previous model,
# add only the current backend to the list of backends for the same model:
if [ "$VENDOR" = "$PREVIOUS_VENDOR" -a "$MODEL" = "$PREVIOUS_MODEL" ]
then BACKENDS_FOR_SAME_MODEL=$( echo "$BACKENDS_FOR_SAME_MODEL $BACKEND" )
continue
fi
# When the model has changed,
# determine the "best" backend for the previous model
# and output only one single entry for it.
# Currently different driver lines for the same model happen only
# for Epson scanners (USB vendor ID 0x04b8):
# Many models are supported by epkowa, epson2, and epson (unmaintained driver).
# Two models are supported by plustek (and the non-free epkowa version in "iscan")
# One model is supported by epson2 and epson.
# The preferred driver is epkowa because
# it supports more models than the other drivers,
# it is made by the manufacturer (via Epson Avasys), and
# it is free software in the iscan-free package ("iscan" is suppressed, see above).
# On the one hand this means that when the iscan-free package is not installed,
# those scanners would not be autoconfigured even if many of those scanners are also
# supported by the epson2 driver (which is not activated because epkowa is preferred).
# On the other hand this avoids that different drivers are activated for the same model
# which lets the model show up several times in the scanning frontend (once for each driver).
# For example imagine there are two Epson USB scanners connected:
# One is supported only by epkowa, the other one is supported by epkowa and epson2.
# If both epkowa and epson2 would be activated, the other one would show up twice.
# Furthermore epson2 is preferred over the meanwhile unmaintained epson driver.
BEST_BACKEND=""
for B in plustek epson epson2 epkowa
do echo $BACKENDS_FOR_SAME_MODEL | grep -q "$B" && BEST_BACKEND="$B"
done
# Do not use 'cut -s' because BACKENDS_FOR_SAME_MODEL contains usually only one entry:
[ -z "$BEST_BACKEND" ] && BEST_BACKEND=$( echo $BACKENDS_FOR_SAME_MODEL | cut -d ' ' -f 1 )
if [ -n "$BEST_BACKEND" ]
then USED_BACKENDS=$( echo "$USED_BACKENDS $BEST_BACKEND" )
echo "ATTR{idVendor}==\"$PREVIOUS_VENDOR\", ATTR{idProduct}==\"$PREVIOUS_MODEL\", ENV{sane_backend_$BEST_BACKEND}=\"yes\""
fi
# Remember the current model:
BACKENDS_FOR_SAME_MODEL="$BACKEND"
PREVIOUS_VENDOR="$VENDOR"
PREVIOUS_MODEL="$MODEL"
done
echo
# Output the driver activation lines:
for B in $( echo $USED_BACKENDS | tr ' ' '\n' | sort -u )
do echo "ENV{sane_backend_$B}==\"yes\", RUN+=\"/bin/sed -i -e 's/^[[:space:]]*#[[:space:]]*$B[[:space:]]*\$\$/$B/' /etc/sane.d/dll.conf\""
done
echo
# Output footer:
echo 'LABEL="sane_backends_autoconfig_rules_end"'
echo
# Remove the temporary file
rm $TMP_DATA
exit 0

183
create_scanner_database Normal file
View File

@ -0,0 +1,183 @@
#! /bin/bash
#
# Johannes Meixner <jsmeix@suse.de>, 2004, 2005, 2006
#set -x
export PATH="/sbin:/usr/sbin:/usr/bin:/bin"
export LC_ALL="POSIX"
export LANG="POSIX"
umask 022
MY_NAME=${0##*/}
OUTPUT_FORMAT="$1"
[ -z "$OUTPUT_FORMAT" ] && OUTPUT_FORMAT="ASCII"
[ "$OUTPUT_FORMAT" != "ASCII" -a "$OUTPUT_FORMAT" != "YCP" ] && { echo -en "\nUsage:\n$MY_NAME {ASCII|YCP}\n" 1>&2 ; exit 1 ; }
# Input:
# Create a temporary file:
TMP_DATA=$(mktemp -u /tmp/$MY_NAME.XXXXXX)
cat /dev/null >$TMP_DATA
# Function to extract entries from a description file with SANE syntax.
# Quoted quotation marks '\"' (happens in comments) are replaced by ' ':
Extract()
{ cat $1 | sed -e 's/\\"/ /g' | egrep -o '^[[:space:]]*:backend[[:space:]]*"[^"]*"|^[[:space:]]*:mfg[[:space:]]*"[^"]*"|^[[:space:]]*:model[[:space:]]*"[^"]*"|^[[:space:]]*:firmware[[:space:]]*"[^"]*"|^[[:space:]]*:interface[[:space:]]*"[^"]*"|^[[:space:]]*:usbid[[:space:]]*"0x[0-9A-Fa-f]*"[[:space:]]*"0x[0-9A-Fa-f]*"|^[[:space:]]*:status[[:space:]]*:[a-z]*|^[[:space:]]*:comment[[:space:]]*"[^"]*"'
}
# Process the SANE description files:
# At least the SANE description files must exist:
PACKAGE="sane-backends"
DESCRIPTION_FILES="/usr/share/sane/descriptions/*.desc"
ls $DESCRIPTION_FILES &>/dev/null || { echo "Error: Required SANE description files $DESCRIPTION_FILES not found." 1>&2 ; exit 3 ; }
# Write the package which is processed:
echo ":package \"$PACKAGE\"" >>$TMP_DATA
# Extract entries from SANE description files:
for DESCRIPTION_FILE in $DESCRIPTION_FILES
do Extract $DESCRIPTION_FILE
done >>$TMP_DATA
# Process the optional HPLIP external description file:
# The package hplip is installed by default.
PACKAGE="hplip"
DESCRIPTION_FILE="/usr/share/sane/descriptions-external/hpaio.desc"
if [ -r "$DESCRIPTION_FILE" ]
then echo ":package \"$PACKAGE\"" >>$TMP_DATA
Extract $DESCRIPTION_FILE >>$TMP_DATA
else echo "Info: Cannot read $DESCRIPTION_FILE" 1>&2
fi
# Process the optional EPSON AVASYS (formerly EPSON KOWA) Image Scan external description file:
# The proprietary binary-only i386-only package iscan cannot be installed by default.
# The package iscan-free is not installed by default.
PACKAGE="iscan"
DESCRIPTION_FILE="/usr/share/sane/descriptions-external/epkowa.desc"
if [ -r "$DESCRIPTION_FILE" ]
then echo ":package \"$PACKAGE\"" >>$TMP_DATA
Extract $DESCRIPTION_FILE >>$TMP_DATA
else echo "Info: Cannot read $DESCRIPTION_FILE" 1>&2
fi
# Process the collected data:
# Replace HTML tags:
sed -i -e 's/<[Bb][Rr]>/, /g' \
-e 's/<[Pp]>/, /g' \
-e 's/<[^>]*>/ /g' $TMP_DATA
# Condense multiple spaces and convert tabs to blanks:
sed -i -e 's/[[:space:]][[:space:]]*/ /g' $TMP_DATA
# Remove leading and trailing spaces:
sed -i -e 's/^[[:space:]]*//' \
-e 's/[[:space:]]*$//' \
-e 's/"[[:space:]]*/"/g' \
-e 's/[[:space:]]*"$/"/' $TMP_DATA
# Convert the usbid values from '"vendor-id""product-id"' to '"vendor-id:product-id"'
# (note that '" "' was changed to '""' in the step before):
sed -i -e '/^:usbid/s/""/:/' $TMP_DATA
# Convert the status value to the usual string format:
sed -i -e 's/^:status :\(.*\)/:status "\1"/' $TMP_DATA
# Equalize different spelling of same manufacturers:
sed -i -e 's/"AGFA"/"Agfa"/g' \
-e 's/"UMAX"/"Umax"/g' $TMP_DATA
# Change meaningless references to a meaningful reference:
sed -i -e 's/see link/see http:\/\/www.sane-project.org/g' \
-e 's/See link/See http:\/\/www.sane-project.org/g' $TMP_DATA
# Output:
# Output header:
if [ "$OUTPUT_FORMAT" = "YCP" ]
then echo "["
else echo "PACKAGE|BACKEND|MANUFACTURER|MODEL|FIRMWARE|INTERFACE|USBID|STATUS|COMMENT"
fi
# Function to output one scanner entry:
Output()
{ if [ -n "$PACKAGE" -a -n "$BACKEND" -a -n "$MANUFACTURER" -a -n "$MODEL" -a -n "$STATUS" ]
then [ -z "$FIRMWARE" ] && FIRMWARE='""'
[ -z "$INTERFACE" ] && INTERFACE='""'
[ -z "$USBID" ] && USBID='""'
[ -z "$COMMENT" ] && COMMENT='""'
if [ "$PACKAGE" = '"iscan"' -o "$PACKAGE" = '"iscan-free"' ]
then if echo "$COMMENT" | egrep -q 'requires a DFSG non-free module|requires DFSG non-free'
then PACKAGE='"iscan"'
else PACKAGE='"iscan-free"'
fi
fi
if [ "$OUTPUT_FORMAT" = "YCP" ]
then echo -e " \$[ \"package\":$PACKAGE,\n \"backend\":$BACKEND,\n \"manufacturer\":$MANUFACTURER,\n \"model\":$MODEL,\n \"firmware\":$FIRMWARE,\n \"interface\":$INTERFACE,\n \"usbid\":$USBID,\n \"status\":$STATUS,\n \"comment\":$COMMENT\n ],"
else echo "$PACKAGE|$BACKEND|$MANUFACTURER|$MODEL|$FIRMWARE|$INTERFACE|$USBID|$STATUS|$COMMENT" | tr -d '"'
fi
fi
}
# Make complete and seperated scanner entries:
# Package, backend, manufacturer and model should appear in this order.
# Interface, status and comment are optional and can appear in any order.
# There is no mandatory key which is always last.
# Therefore the values are collected until package or backend or manufacturer or model changes.
# When package or backend or manufacturer or model changes the values are output.
exec <$TMP_DATA
while read KEY VALUE
do expr "$VALUE" : '"[^"]*"$' &>/dev/null || { echo "Ignoring $VALUE because it has not the right syntax \"...\"." 1>&2 ; continue ; }
case "$KEY" in
:package) Output
PACKAGE="$VALUE"
BACKEND=""
MANUFACTURER=""
MODEL=""
FIRMWARE=""
INTERFACE=""
USBID=""
STATUS=""
COMMENT="" ;;
:backend) Output
BACKEND=$( echo "$VALUE" | tr '[:upper:]' '[:lower:]' )
MANUFACTURER=""
MODEL=""
FIRMWARE=""
INTERFACE=""
USBID=""
STATUS=""
COMMENT="" ;;
:mfg) Output
MANUFACTURER="$VALUE"
MODEL=""
FIRMWARE=""
INTERFACE=""
USBID=""
STATUS=""
COMMENT="" ;;
:model) Output
MODEL="$VALUE"
FIRMWARE=""
INTERFACE=""
USBID=""
STATUS=""
COMMENT="" ;;
:firmware) FIRMWARE="$VALUE" ;;
:interface) INTERFACE="$VALUE" ;;
:usbid) USBID=$( echo "$VALUE" | tr '[:upper:]' '[:lower:]' ) ;;
:status) STATUS="$VALUE" ;;
:comment) COMMENT="$VALUE" ;;
*) echo "Ignoring key $KEY" 1>&2 ;;
esac
done
# Output the last scanner entry and a footer for YCP
Output
if [ "$OUTPUT_FORMAT" = "YCP" ]
then echo -e " \$[]\n]"
fi
# Remove the temporary file
rm $TMP_DATA
exit 0

45713
models.dat Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,33 @@
From 8cf5af772cba2c94ff7cee4f052de650ff2cd14b Mon Sep 17 00:00:00 2001
From: Zdenek Dohnal <zdohnal@redhat.com>
Date: Fri, 26 Jul 2024 09:25:35 +0200
Subject: [PATCH] backend/kodakio.c: Remove unnecessary Unicode character
There is an bidirectional Unicode character <202d> in the comment.
The character looks like a typo, because it does not look fitting
there, so IMHO it can be removed.
Checking tools like rpminspect are wary of Unicode characters in the
code after CVE regarding bidirectional Unicode characters from several
years ago, and character <202d> is for left-to-right override in
Unicode, so tools report them as an issue.
---
backend/kodakaio.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/backend/kodakaio.c b/backend/kodakaio.c
index 0241e2a84..da3e234f4 100644
--- a/backend/kodakaio.c
+++ b/backend/kodakaio.c
@@ -1827,7 +1827,7 @@ k_init_parametersta(KodakAio_Scanner * s)
SANE_UNFIX(s->val[OPT_BR_X].w), SANE_UNFIX(s->val[OPT_BR_Y].w));
/*
- * The default color depth is stored in mode_params.depth:
+ * The default color depth is stored in mode_params.depth:
*/
if (mode_params[s->val[OPT_MODE].w].depth == 1)
s->params.depth = 1;
--
GitLab

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:cc8796701015def1c598f97962a70d63957b9786841391cc412a606568b42b96
size 6089639

2290
sane-backends.changes Normal file

File diff suppressed because it is too large Load Diff

486
sane-backends.spec Normal file
View File

@ -0,0 +1,486 @@
#
# spec file for package sane-backends
#
# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
# Cf. https://rpm.org/user_doc/conditional_builds.html
# by default enable support for PWG eSCL network backend
%bcond_without escl
# by default disable support for PWG eSCL network backend
#bcond_with escl
Name: sane-backends
BuildRequires: autoconf-archive
BuildRequires: automake
BuildRequires: gcc-c++
BuildRequires: libjpeg-devel
BuildRequires: libpng-devel
BuildRequires: libtiff-devel
BuildRequires: libtool
BuildRequires: libv4l-devel
BuildRequires: net-snmp-devel
BuildRequires: pkgconfig
%if %{with escl}
BuildRequires: pkgconfig(avahi-client) >= 0.6.24
BuildRequires: pkgconfig(libcurl)
# since sane-backends 1.0.31 the escl backend requires libpoppler-glib-devel
# cf. https://gitlab.com/sane-project/backends/-/blob/master/INSTALL.linux
BuildRequires: libpoppler-glib-devel
%endif
BuildRequires: pkgconfig(libusb-1.0)
# The pixma backend requires libxml2
BuildRequires: pkgconfig(libxml-2.0)
BuildRequires: pkgconfig(systemd)
%systemd_requires
%define libname libsane1
# SANE build systems mangles backend SONAMEs to be libsane.so.x
%define __provides_exclude_from %{_libdir}/sane
Summary: SANE (Scanner Access Now Easy) Scanner Drivers
License: GPL-2.0-or-later AND SUSE-GPL-2.0+-with-sane-exception AND SUSE-Public-Domain
Group: Hardware/Scanner
Version: 1.3.1
Release: 0
URL: http://www.sane-project.org/
# On https://gitlab.com/sane-project/backends/-/releases , the "Source code (tar.gz)" link
# is a tarball auto-generated by GitLab and contains a snapshot of the git repository.
# The "sane-backends-*.tar.gz" link under "Packages" is a tarball uploaded by the maintainer.
# We use the latter.
Source0: https://gitlab.com/sane-project/backends/-/archive/%{version}/backends-%{version}.tar.gz#/sane-backends-%{version}.tar.gz
# Source100... is SUSE specific stuff:
# Source102 is the OpenSLP registration file for the saned:
Source102: sane.reg
# Source110 creates our hpaio.desc file directly from the models.dat file of HPLIP:
Source110: create_hpaio.desc_from_models.dat
# Source111 is the models.dat file of HPLIP:
Source111: models.dat
# Was initially just dumped in as Source1 to "package baselibs.conf"
# (see the matching explanatory entry in the RPM changelog):
Source190: baselibs.conf
# Source200... is scanner autoconfiguration stuff:
# Source200 and Source201 generate the 56-sane-backends-autoconfig.rules file
# for automated scanner driver activation via udev ("scanner autoconfiguration").
# Source200 is a copy of /usr/lib/YaST2/bin/create_scanner_database
# to avoid yast2-scanner in BuildRequires which would drag in almost the whole YaST:
Source200: create_scanner_database
# Source201 actually generates the 56-sane-backends-autoconfig.rules file
# by reading scanner.database which was created before by create_scanner_database
# to extract the needed info from which create_sane-backends-autoconfig.rules
# generates the 56-sane-backends-autoconfig.rules file:
Source201: create_sane-backends-autoconfig.rules
# Sources 202 and 203 are files to enable socket based service activation which replaced xinetd
Source202: saned@.service
Source203: saned.socket
# PATCH-FIX-UPSTREAM - gl/sane-project/backends#848 - backend/kodakio.c: Remove unnecessary Unicode character
Patch0: remove_unnecessary_unicode_character.patch
# Patch100... is SUSE specific stuff:
# Patch102 adapt_epkowa.desc_for_yast2-scanner.patch adapts epkowa.desc for yast2-scanner
# (see https://bugzilla.opensuse.org/show_bug.cgi?id=788756#c14).
# It adds "requires DFSG non-free Image Scan software from Avasys" to all comments
# (or adds such a comment if there is not yet a comment) so that yast2-scanner
# (via "requires DFSG non-free" string match in create_scanner_database)
# shows always the info regarding "Image Scan" download from Avasys
# (compare https://bugzilla.novell.com/show_bug.cgi?id=569917
# and https://bugzilla.novell.com/show_bug.cgi?id=746038).
# Furthermore it removes "unsupported" models from epkowa.desc because
# otherwise there would be confusing model entries shown in yast2-scanner:
Patch102: adapt_epkowa.desc_for_yast2-scanner.patch
# See https://bugzilla.novell.com/show_bug.cgi?id=437293
%ifarch ppc64
Obsoletes: sane-64bit
%endif
# Up to SLE10 there was the package name 'sane' for 'sane-backends'.
# Therefore this RPM provides 'sane' and it also obsoletes it.
# The {version} is needed in both Provides and Obsoletes
# to avoid a RPMLINT warning that the package obsoletes itself:
Provides: sane = %{version}
Obsoletes: sane < %{version}
# Pull in the same version, not just matching soname
Requires: %{libname} = %{version}
%description
The software consists of SANE scanner drivers,
"scanimage," and the "saned" daemon.
A SANE scanner driver is used via a SANE front-end.
This package contains the command line front-end "scanimage".
There are graphical front-ends in other packages like
XSane (package xsane), Skanlite for KDE4 (package skanlite),
and Kooka for KDE3 (package kdegraphics3-scan).
The "saned" daemon provides the service "sane-port"
to access scanners that are connected to a server
via network from client hosts that run the "net" meta driver.
%package devel
Summary: Development files for sane-backends
License: GPL-2.0-or-later AND SUSE-GPL-2.0+-with-sane-exception AND SUSE-Public-Domain
Group: Development/Libraries/C and C++
Requires: %{libname} = %{version}
%description devel
This package contains the development files for sane-backends.
%package -n %{libname}
Summary: Core SANE library
License: GPL-2.0-or-later AND LGPL-2.1-or-later AND SUSE-Public-Domain
Group: Hardware/Scanner
Conflicts: sane-backends < %{version}
Recommends: sane-backends
%description -n %{libname}
This contains the SANE library. Individual scanner backends are provided
by sane-backends or third party packages.
%package autoconfig
Summary: USB Scanner Autoconfiguration
License: GPL-2.0-or-later AND LGPL-2.1-or-later AND SUSE-Public-Domain
Group: Hardware/Scanner
Requires: %{libname} = %{version}
# When sane-backends is already installed, try to install also sane-backends-autoconfig if available:
Supplements: sane-backends
BuildArch: noarch
%description autoconfig
USB scanner autoconfiguration happens via udev.
The file /udev/rules.d/56-sane-backends-autoconfig.rules contains
entries for those USB scanners where the USB IDs are known, which are
supported by a free driver, where the support status is "complete" or
"good", and which do not require firmware upload.
When a USB scanner is connected and its USB IDs match to an entry in
the 56-sane-backends-autoconfig.rules file, the matching scanner driver
is activated (i.e. the driver line in /etc/sane.d/dll.conf is
activated).
It enables scanner drivers but never disables them. The reason is that
enabled drivers do not hurt so that an automated disable would make it
only overcomplicated because when more than one scanner uses the same
driver, a complicated check would be needed to avoid that the driver is
accidentally disabled when only one scanner was disconnected.
If you do not like automated driver activation, do not install this
package or remove it when it is already installed.
%package -n sane-saned
Summary: Sane network server
License: GPL-2.0-or-later AND LGPL-2.1-or-later AND SUSE-Public-Domain
Group: Hardware/Scanner
Provides: sane-backends:%{_sbindir}/saned
Conflicts: %{name} < %{version}
%description -n sane-saned
Saned allows access to locally attached scanners over the network.
%prep
# Patch100... is SUSE specific stuff:
# Patch102 adapt_epkowa.desc_for_yast2-scanner.patch adapts epkowa.desc for yast2-scanner
# see https://bugzilla.opensuse.org/show_bug.cgi?id=788756#c14
%setup -n backends-%{version}
%patch -P0 -p1
%patch -P102 -p0
# Remove hpoj.desc completely to avoid confusion with its successor hpaio.desc
# because since openSUSE 10.3 the package hp-officeJet (for hpoj.desc) is dropped.
sed -i -e '/descriptions-external\/hpoj.desc / d' doc/Makefile.am
rm doc/descriptions-external/hpoj.desc
# For compliance with the other description files in the sane-backends sources
# change the manufacturer name from "Hewlett Packard" to "Hewlett-Packard":
for d in doc/descriptions-external/hp3770.desc doc/descriptions-external/hp8200.desc
do sed -i -e '/^:mfg/s/Hewlett Packard/Hewlett-Packard/' $d
done
# Create our hpaio.desc descriptions-external file
# (use it as bash input because sources may be installed without execute permissions):
bash %{SOURCE110} <%{SOURCE111} >doc/descriptions-external/hpaio.desc
# Copy the create_scanner_database script from the sources directory to the build directory
# to avoid that the original source becomes modified later in the install section
# and ends up in the source RPM, see https://bugzilla.novell.com/show_bug.cgi?id=463464#c11
cp %{SOURCE200} create_scanner_database
chmod u+x create_scanner_database
%build
export CFLAGS="%{optflags} -D_GNU_SOURCE -DGIMP_ENABLE_COMPAT_CRUFT=1 -fno-strict-aliasing"
export LDFLAGS="-L/%_lib $LDFLAGS"
./autogen.sh
# Enable pthread instead of fork (used in Debian since Feb 2009 and no issues so far),
# see https://bugzilla.novell.com/show_bug.cgi?id=633780
# Disable locking because /var/lock/sane/ would be a world-writable directory.
./configure --prefix=/usr \
--exec-prefix=/usr \
--sysconfdir=%{_sysconfdir} \
--libdir=%{_libdir} \
--sbindir=%{_sbindir} \
--mandir=%{_mandir} \
--datadir=%{_datadir} \
--docdir=%{_defaultdocdir}/sane-backends \
--enable-pthread \
--with-usb \
%if %{with escl}
--with-avahi \
%endif
--disable-locking
# Enable locking for backends where "99" is the group of the lockfile path (LOCKPATH_GROUP)
# because "99" is the group of the user who runs the build when norootforbuild is used
# and set localstatedir to have the lock files in /var/lock/sane (see backend/Makefile.in).
# Disabled because locking requires a world-writable /var/lock/sane/ directory:
# --enable-locking \
# --with-group=99 \
# --localstatedir=/var
%make_build
%install
%makeinstall
# The actual driver modules are installed as libsane-<driver>.so.{version}
# and two libsane-<driver>.so.1 and libsane-<driver>.so links point to them.
# Additionally a libsane-<driver>.la libtool archive file is installed
# which could be used to find the correct module file name to dlopen the module.
# Only the dll meta-backend (/usr/lib/libsane.so.1.0.19) links with driver modules.
# The dll meta-backend looks only for libsane-<driver>.so.1 and uses dlopen(3) directly.
# The dll meta-backend needs neither libsane-<driver>.so nor libsane-<driver>.la.
# RPMLINT complains about libsane-<driver>.so with "devel-file-in-non-devel-package".
# Therefore the libsane-<driver>.so and libsane-<driver>.la files are simply removed.
rm %{buildroot}%{_libdir}/sane/libsane-*.so
rm %{buildroot}%{_libdir}/sane/libsane-*.la
# Because of https://bugzilla.novell.com/show_bug.cgi?id=592143 for openSUSE 11.3
# even the /usr/lib/libsane.la file for the dll meta-backend is removed
# regardless that it is unknown how whatever third-party scanning frontend
# may like to link with SANE (i.e. with the dll meta-backend).
# The frontends which are provided by openSUSE /usr/bin/scanimage,
# /usr/bin/xsane, and /usr/bin/skanlite do not need it.
# The /usr/lib/libsane.so link for the dll meta-backend is kept because it is needed
# during build-time by other packages which need sane-backends to build.
rm %{buildroot}%{_libdir}/libsane.la
# Disable all backends in /etc/sane.d/dll.conf to avoid problems when backends are active by default:
perl -pi -e 's/^([^#].*)$/#$1/' %{buildroot}%{_sysconfdir}/sane.d/dll.conf
# Allow all users to write into /var/lock/sane/ so that the backends work for normal users
# and set the sticky bit (i.e. others are not allowed to remove lock files).
# Disabled because package-specific world-writable directories are not allowed:
#chmod 1777 {buildroot}/var/lock/sane/
# Install the descriptions and descriptions-external files.
# These files are the sources to make {_defaultdocdir}/sane/sane-backends/*.html
# but these source files must also exist in the installed sane package
# because YaST needs them to create its scanner database:
for d in descriptions descriptions-external
do install -d -m755 %{buildroot}%{_datadir}/sane/$d
install -m644 doc/$d/*.desc %{buildroot}%{_datadir}/sane/$d
done
# Add ':firmware "required"' entries for the respective scanners to the descriptions files
# so that YaST can show firmware upload related information to the user of such a scanner.
# This must be done after build because those entries are a SUSE specific extension.
# To determine scanners which require firmware upload, search the man pages
# for backends which provide support for firmware upload.
# Use a command like
# for m in /usr/share/man/man5/sane-*
# do man -E ascii -P cat -l $m 2>/dev/null | grep -q -i firmware && echo $m
# done
# to find backend man pages which mention "firmware".
# In version 1.0.19 the following man pages mention "firmware":
# sane-agfafocus: mentiones only "firmware revision" (no firmware upload)
# sane-apple: mentiones only "firmware revision" (no firmware upload)
# sane-artec: mentiones only "problems with firmware v1.92" (no firmware upload)
# sane-artec_eplus48u: "you need a firmware file for your scanner" (unconditioned firmware upload)
# sane-bh: mentiones only "requires RSC firmware level 1.5" (no firmware upload)
# sane-epjitsu: "these scanners require a firmware file" (unconditioned firmware upload)
# sane-gt68xx: "you need a firmware file for your scanner" (unconditioned firmware upload)
# sane-hp: mentiones only "no firmware support for contrast" (no firmware upload)
# sane-matsushita: mentiones only "scanner with proper firmware" (no firmware upload)
# sane-microtek2: mentiones only "firmware of the scanner provides" (no firmware upload)
# sane-sharp: mentiones only "bug in the firmware" (no firmware upload)
# sane-snapscan: "USB scanners ... scanners that need a firmware upload" (conditioned firmware upload)
# sane-st400: mentiones only "firmware revision" (no firmware upload)
# sane-teco2: mentiones only "firmware 1.09" (no firmware upload)
# As far as we know all scanners which use
# the backend gt68xx and the related backend artec_eplus48u
# or the backend epjitsu require a firmware upload,
# see "man sane-gt68xx" and http://www.meier-geinitz.de/sane/gt68xx-backend/
# and see "man sane-artec_eplus48u" and "man sane-epjitsu":
for b in gt68xx artec_eplus48u epjitsu
do sed -i -e 's/^:model.*$/&\n:firmware "required"/' %{buildroot}%{_datadir}/sane/descriptions/$b.desc
done
# As far as we know (almost) all USB scanners (but not the SCSI scanners)
# which use the backend snapscan require a firmware upload,
# see "man sane-snapscan" and http://snapscan.sourceforge.net/:
sed -i -e 's/^:interface "USB".*$/&\n:firmware "required"/' %{buildroot}%{_datadir}/sane/descriptions/snapscan.desc
# Only the "SnapScan 1236u" needs no firmware upload (see Suse/Novell bug #73960):
sed -i -e '/:model "SnapScan 1236u"/,/:firmware "required"/s/required//' %{buildroot}%{_datadir}/sane/descriptions/snapscan.desc
# Scanner autoconfiguration stuff (packaged in sane-backends-autoconfig):
# It must be done before the udev libsane.rules stuff because the scanner database is needed there.
# This requires the installed descriptions and descriptions-external files
# because create_scanner_database reads the description files to extract the needed info
# to create the scanner database from which create_sane-backends-autoconfig.rules
# extracts the needed info to generate the 56-sane-backends-autoconfig.rules file
# for automated scanner driver activation via udev.
# Note that driver activation alone is not sufficient
# to have a usable "scanner autoconfiguration" for the user.
# What is also needed are appropriate USB device file permissions
# so that the user's scanning software can access the device.
# But this is already in place via the the udev libsane.rules file
# which contains a superset of USB scanner IDs (all known USB scanner IDs)
# compared to the USB scanner IDs in 56-sane-backends-autoconfig.rules,
# see create_sane-backends-autoconfig.rules for which USB scanners
# automated driver activation is done (basically only those scanners
# which are supported by a free driver, which do not require firmware upload,
# and where the support status is "complete" or "good").
# Modify create_scanner_database to find the description files in the BuildRoot directory
# (the usual delimiter '/' cannot be used because buildroot contains it too):
sed -i -e 's|/usr/share/sane/descriptions|%{buildroot}/usr/share/sane/descriptions|' create_scanner_database
# Create the scanner database and store it because it is also needed later
# to disable "unsupported" model entries in the udev libsane.rules file.
# The file name "scanner.database" is used hardcoded in create_sane-backends-autoconfig.rules.
./create_scanner_database >scanner.database
# Run create_sane-backends-autoconfig.rules which reads scanner.database
# (use it as bash input because sources may be installed without execute permissions):
bash %{SOURCE201} >autoconfig.rules
# Install the scanner autoconfiguration udev rules file:
install -d %{buildroot}%{_udevrulesdir}
install -m644 autoconfig.rules %{buildroot}%{_udevrulesdir}/56-sane-backends-autoconfig.rules
# Regarding udev:
# Modify the generated tools/udev/libsane.rules file as follows:
# All GROUP="scanner" are replaced by GROUP="lp".
# There is no group "scanner" in /etc/group for openSUSE.
# For all-in-one devices (i.e. printer + scanner, e.g. "EPSON Stylus" devices)
# the group must be "lp" so that the CUPS usb backend which runs
# as user "lp" (who is member of the group "lp") can send printing data
# to the printer unit (i.e. the printer interface of the USB device).
# It is sufficiently secure and reasonable easy to use by default
# the same group "lp" for printers and scanners because both kind of devices
# usually require physical user access (to get the printed paper or
# to place a paper on the scanner) so that both kind of devices
# should usually require the same kind of security.
sed -i -e 's/GROUP="scanner"/GROUP="lp"/' tools/udev/libsane.rules
# Disable entries for USB scanners which are "unsupported"
# but keep the entries for models for which the support status
# is "complete", "good", "basic", "minimal", "untested"
# because libsane.rules disables USB autosuspend
# which is needed as safe default for any scanner
# (regardless to what extent it is actually supported).
# The only exception are unsupported models
# because it seems to be wrong to have "known but unsupported" devices
# listed in the libsane.rules file because it seems not to make sense
# to set owner, group, and permissions for devices which are not
# supported by SANE which would even cause conflicts if such a
# device is supported by whatever other software,
# see https://bugzilla.novell.com/show_bug.cgi?id=439193
# Extract a list of USB IDs for "unsupported" scanners and store them in unsupportedUSBIDs.
# It can happen that there is a status "unsupported" entry for a backend
# for a model which is actually supported by another backend, for example
# the "Epson Perfection 1670" is "unsupported" by the "epkowa" backend
# but works "good" with the "snapscan" backend
# see https://bugzilla.novell.com/show_bug.cgi?id=439193#c6
sed -n -e '\@|0x.*:0x.*|@ { s/.*|\(0x[0-9A-Fa-f:x]*\)|\([a-z]*\)|.*/\1 S:\2/ ; s/S:unsupported/1_uns/ ; s/S:.*/0_sup/ ; p } ; d' < scanner.database \
| sort -u | uniq -w 13 | sed '/0_sup/ d ; s/\(.*\) 1_uns/\1/' > unsupportedUSBIDs
# Ignore case when using sed to avoid possible problems
# with upper case letters in the USB IDs:
for m in $( sed -e 's/0x/./ig' -e 's/:/.,.ATTR.idProduct.==/' unsupportedUSBIDs )
do if grep -q "^ATTR.idVendor.==$m" tools/udev/libsane.rules
then echo "Disabling unsupported model matching ATTR.idVendor.==$m"
sed -i -e "/^ATTR.idVendor.==$m/Is/^ATTR/# ATTR/" tools/udev/libsane.rules
fi
done
# Install the udev rules file:
install -m644 tools/udev/libsane.rules %{buildroot}%{_udevrulesdir}/55-libsane.rules
# Service files:
# Sources 202 and 203 are files to enable socket based service activation which replaced xinetd
# Source202 is saned@.service and Source203 is saned.socket
# see https://bugzilla.opensuse.org/show_bug.cgi?id=1074054#c5
# and https://bugzilla.opensuse.org/attachment.cgi?id=760460
install -d -m755 %{buildroot}%{_unitdir}
install -m644 %{SOURCE202} %{buildroot}%{_unitdir}
install -m644 %{SOURCE203} %{buildroot}%{_unitdir}
# OpenSLP registration stuff:
install -d -m755 %{buildroot}%{_sysconfdir}/slp.reg.d
install -m644 %{SOURCE102} %{buildroot}%{_sysconfdir}/slp.reg.d
# Delete documentation files for non-Linux platforms:
rm %{buildroot}%{_defaultdocdir}/sane-backends/{README.aix,README.beos,README.darwin,README.djpeg,README.freebsd,README.hp-ux,README.netbsd,README.openbsd,README.os2,README.solaris,README.unixware2,README.unixware7,README.windows,README.zeta}
# Mark locale-dependent files with the respective 'lang' tag in the file list, see
# https://en.opensuse.org/openSUSE:Packaging_Conventions_RPM_Macros#.25find_lang
%find_lang sane-backends
%pre -n sane-saned
if [ $1 = 2 ] ; then
# In case of an upgrade the erroneously created as directories saned.socket and saned@.service
# must be removed, otherwise the upgrade will fail,
# see https://bugzilla.opensuse.org/show_bug.cgi?id=1074054#c5
# and https://bugzilla.opensuse.org/attachment.cgi?id=760460
if [ -d /usr/lib/systemd/system/saned.socket ] ; then
/usr/bin/rmdir /usr/lib/systemd/system/saned.socket
fi
if [ -d /usr/lib/systemd/system/saned@.service ] ; then
/usr/bin/rmdir /usr/lib/systemd/system/saned@.service
fi
fi
%service_add_pre saned.socket
%post -n sane-saned
%service_add_post saned.socket
%preun -n sane-saned
%service_del_preun saned.socket
%postun -n sane-saned
%service_del_postun saned.socket
%post -n %{libname} -p /sbin/ldconfig
%postun -n %{libname} -p /sbin/ldconfig
%files -n sane-saned
%dir %{_sysconfdir}/slp.reg.d
%config(noreplace) %{_sysconfdir}/slp.reg.d/*
%{_sbindir}/saned
%{_unitdir}/saned@.service
%{_unitdir}/saned.socket
%doc %{_mandir}/man8/saned.8.gz
%files -f sane-backends.lang
%dir %{_sysconfdir}/sane.d
%config(noreplace) %{_sysconfdir}/sane.d/*.conf
%{_udevrulesdir}/55-libsane.rules
%{_bindir}/scanimage
%{_bindir}/sane-find-scanner
%{_bindir}/gamma4scanimage
%{_bindir}/umax_pp
%{_datadir}/sane/
%{_libdir}/sane/
%exclude %{_libdir}/sane/libsane-dll.so.*
#dir /var/lock/sane
%doc %{_defaultdocdir}/sane-backends/
%doc %{_mandir}/man1/scanimage.1.gz
%doc %{_mandir}/man1/sane-find-scanner.1.gz
%doc %{_mandir}/man1/gamma4scanimage.1.gz
%doc %{_mandir}/man5/sane-*.5.gz
%doc %{_mandir}/man7/sane.7.gz
%files -n %{libname}
%dir %{_libdir}/sane/
%dir %{_sysconfdir}/sane.d
%dir %{_sysconfdir}/sane.d/dll.d/
%{_libdir}/sane/libsane-dll.so.*
%{_libdir}/libsane.so.*
%files devel
%{_bindir}/sane-config
%{_includedir}/sane/
%{_libdir}/libsane.so
%{_libdir}/pkgconfig/sane-backends.pc
%doc %{_mandir}/man1/sane-config.1.gz
%files autoconfig
%{_udevrulesdir}/56-sane-backends-autoconfig.rules
%changelog

15
sane.reg Normal file
View File

@ -0,0 +1,15 @@
#############################################################################
#
# OpenSLP registration file for the scanner daemon (SANE)
#
#############################################################################
#comment
;comment
##Register a saned service on this system
service:scanner.sane://$HOSTNAME:6566,en,65535
# for inetd usage:
tcp-port=6566
description=SANE scanner daemon

10
saned.socket Normal file
View File

@ -0,0 +1,10 @@
[Unit]
Description=saned incoming socket
[Socket]
ListenStream=6566
Accept=yes
MaxConnections=1
[Install]
WantedBy=sockets.target

15
saned@.service Normal file
View File

@ -0,0 +1,15 @@
[Unit]
Description=Scanner Service
Requires=saned.socket
[Service]
ExecStart=/usr/sbin/saned
User=root
Group=root
StandardInput=socket
Environment=SANE_CONFIG_DIR=/etc/sane.d
[Install]
Also=saned.socket