- 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:
commit
54bbcf0ebc
23
.gitattributes
vendored
Normal file
23
.gitattributes
vendored
Normal 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
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.osc
|
4053
adapt_epkowa.desc_for_yast2-scanner.patch
Normal file
4053
adapt_epkowa.desc_for_yast2-scanner.patch
Normal file
File diff suppressed because it is too large
Load Diff
3
baselibs.conf
Normal file
3
baselibs.conf
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
libsane1
|
||||||
|
sane-backends
|
||||||
|
sane-backends-devel
|
89
create_hpaio.desc_from_models.dat
Normal file
89
create_hpaio.desc_from_models.dat
Normal 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
|
||||||
|
|
114
create_sane-backends-autoconfig.rules
Normal file
114
create_sane-backends-autoconfig.rules
Normal 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
183
create_scanner_database
Normal 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
45713
models.dat
Normal file
File diff suppressed because it is too large
Load Diff
33
remove_unnecessary_unicode_character.patch
Normal file
33
remove_unnecessary_unicode_character.patch
Normal 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
|
||||||
|
|
3
sane-backends-1.3.1.tar.gz
Normal file
3
sane-backends-1.3.1.tar.gz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:cc8796701015def1c598f97962a70d63957b9786841391cc412a606568b42b96
|
||||||
|
size 6089639
|
2290
sane-backends.changes
Normal file
2290
sane-backends.changes
Normal file
File diff suppressed because it is too large
Load Diff
486
sane-backends.spec
Normal file
486
sane-backends.spec
Normal 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
15
sane.reg
Normal 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
10
saned.socket
Normal 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
15
saned@.service
Normal 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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user