sane/sane.spec
2015-10-24 02:03:21 +10:00

444 lines
14 KiB
RPMSpec

%define iscanversion 2.29.3
%define major 1
%define libname %mklibname %{name} %{major}
%define devname %mklibname %{name} %{major} -d
%bcond_without gphoto2
%bcond_without primax
%bcond_without v4l
%bcond_without epkowa
# All sane backends have SONAME libsane.so.1. We do not want
# sane-backends-iscan to provide libsane.so.1, so filter these out.
%define __noautoprovfiles %{_libdir}/sane
%define __libtoolize /bin/true
# Setting this makes the /etc/sane.d/dll.conf empty so that scanning apps
# do not search for all existing scanner models which makes their startup
# slow (the user or "scannerdrake" has to insert the names of the really
# installed scanners then)
%bcond_with empty_dll_conf
Summary: SANE - local and remote scanner access
Name: sane
Version: 1.0.25
Release: 1
# lib/ is LGPLv2+, backends are GPLv2+ with exceptions
# Tools are GPLv2+, docs are public domain
License: GPLv2+ and GPLv2+ with exceptions and Public Domain
Group: Graphics
Url: http://www.sane-project.org/
Source0: http://alioth.debian.org/frs/download.php/file/3958/sane-backends-%{version}.tar.gz
Source3: http://downloads.sourceforge.net/project/px-backend/primaxscan-source/1.1.beta1/primaxscan-1.1.beta1.tar.gz
Source5: saned-xinetd
Source9: http://downloads.sourceforge.net/project/hp44x0backend/hp44x0backend/sane_hp_rts88xx-0.18/sane_hp_rts88xx-0.18.tar.gz
Source10: http://downloads.sourceforge.net/project/brother-mfc/brother-mfc/sane-driver/sane-driver-0.2.tar.gz
Source11: http://www.geocities.com/trsh0101/SANE/primascan.h
Source12: http://www.geocities.com/trsh0101/SANE/primascan.c
# The free part of Epson's scanner driver package IScan, full package
# downloaded from http://www.avasys.jp/english/linux_e/index.html
# Non-free part stripped out with
# mkdir x; cd x; tar -xvzf ../iscan_2.21.0-6.tar.gz; rm -f */non-free/EAPL*.txt */non-free/lib*.so; tar -cvjf ../iscan_2.21.0-6-free.tar.bz2 *; cd ..; rm -rf x
Source13: iscan-%{iscanversion}-3-free.tar.bz2
Source14: http://downloads.sourceforge.net/project/geniusvp2/sane-backend-geniusvp2/1.0.16.1/sane-backend-geniusvp2_1.0.16.1.tar.gz
Source15: sane.rpmlintrc
Patch0: sane-backends-1.0.18-plustek-s12.patch
# (fc) 1.0.19-12mdv fix group for device
Patch1: sane-backends-1.0.20-group.patch
# (fc) list Brother MFC-260C, DCP130C as supported (Mdv bug # 52951)
Patch2: sane-backends-1.0.22-brother2list.patch
Patch3: sane-backends-1.0.20-strformat.patch
Patch4: sane-backends-1.0.23-have-pthread.patch
# Debian patches
# new build system breaks build when using pthreads.
Patch10: 01_missing_pthreads.dpatch
# add back SANE_CAP_ALWAYS_SETTABLE which was mistakenly
# removed from SANE 1.0.20
Patch11: 06_cap_always_settable.dpatch
# Use fedora's patch to remove rpath
# Patch to the dll backend to look for pieces of dll.conf inside the
# /etc/sane.d/dll.d/ directory. This is a facility for packages providing
# external backends (like libsane-extras, hpoj and hplip).
Patch12: 22_dll_backend_conf.dpatch
Patch13: 24_sane-desc.c_debian_mods.dpatch
# Fedora patches
Patch20: sane-backends-1.0.20-open-macro.patch
Patch21: sane-backends-1.0.23-udev.patch
Patch30: iscan-2.29.3-fix-link.patch
Patch31: iscan-2.20.1-no_non-free_please.diff
Patch32: iscan-2.28.1-linkage_fix.patch
BuildRequires: gettext
BuildRequires: gettext-devel
BuildRequires: ieee1284-devel
BuildRequires: jpeg-devel
BuildRequires: libtool-devel
BuildRequires: pkgconfig(gtk+-2.0)
BuildRequires: pkgconfig(libtiff-4)
%if %{with gphoto2}
BuildRequires: pkgconfig(libgphoto2)
%endif
BuildRequires: pkgconfig(libusb)
%if %{with v4l}
BuildRequires: pkgconfig(libv4l1)
%endif
# ensure resmgr is not pulled
BuildConflicts: resmgr-devel
%description
SANE (Scanner Access Now Easy) is a sane and simple interface
to both local and networked scanners and other image acquisition devices
like digital still and video cameras. SANE currently includes modules for
accessing a range of scanners, including models from Agfa SnapScan, Apple,
Artec, Canon, CoolScan, Epson, HP, Microtek, Mustek, Nikon, Siemens,
Tamarack, UMAX, Connectix, QuickCams and other SANE devices via network.
For the latest information on SANE, the SANE standard definition, and
mailing list access, see http://www.mostang.com/sane/
This package does not enable network scanning by default; if you wish
to enable it, install the saned package.
#----------------------------------------------------------------------------
%package -n %{libname}
Summary: Shared libraries for SANE
License: LGPLv2.1+
Group: System/Libraries
%description -n %{libname}
This package contains the shared libraries for %{name}.
%files -n %{libname}
%{_libdir}/libsane.so.%{major}*
%dir %{_libdir}/sane
%{_libdir}/sane/*.so.%{major}*
%if %{with epkowa}
%exclude %{_libdir}/sane/libsane-epkowa.so.%{major}*
%endif
#----------------------------------------------------------------------------
%package -n %{devname}
Summary: Development files for SANE
License: LGPLv2.1+
Group: Development/C
Requires: %{libname} = %{EVRD}
Provides: sane-devel = %{EVRD}
%description -n %{devname}
This package contains the headers and development libraries necessary
to develop applications using SANE.
%files -n %{devname}
%{_bindir}/sane-config
%{_libdir}/libsane.so
%{_libdir}/sane/*.so
%{_includedir}/sane
%{_libdir}/pkgconfig/sane-backends.pc
%if %{with epkowa}
%exclude %{_libdir}/sane/libsane-epkowa.so
%endif
#----------------------------------------------------------------------------
%package backends
Summary: SANE - local and remote scanner access
License: LGPLv2.1+
Group: System/Kernel and hardware
Provides: %{name} = %{EVRD}
%if %{with epkowa}
Suggests: iscan
%endif
Suggests: sane-firmware
Requires(pre,postun): rpm-helper
%description backends
This package contains the backends for different scanners.
%files backends -f sane-backends.lang
%doc %{_docdir}/sane-backends-%{version}
%{_bindir}/sane-find-scanner
%{_bindir}/scanimage
%{_bindir}/gamma4scanimage
%if %{with primax}
%{_bindir}/primax_scan
%endif
%{_bindir}/umax_pp
%{_mandir}/man1/*
%{_mandir}/man5/*
%{_mandir}/man7/*
%dir %{_sysconfdir}/sane.d
%config(noreplace) %{_sysconfdir}/sane.d/*
%{_udevrulesdir}/*-libsane.rules
%attr(1777,root,root) %dir /var/lib/lock/sane
%if %{with epkowa}
# iscan files
%exclude %{_sysconfdir}/sane.d/epkowa.conf
%exclude %{_mandir}/man5/sane-epkowa.5*
%endif
%pre backends
%_pre_groupadd scanner
%postun backends
%_postun_groupdel scanner
#----------------------------------------------------------------------------
%if %{with epkowa}
%package backends-iscan
Summary: SANE - local and remote scanner access
License: LGPLv2.1+
Group: System/Kernel and hardware
Provides: iscan = %{iscanversion}
%description backends-iscan
This package contains the iscan backend, in order to not conflict with
manufacturer-supplied packages.
%files backends-iscan
%{_libdir}/sane/libsane-epkowa.so.%{major}*
%{_libdir}/sane/libsane-epkowa.so
%{_sysconfdir}/sane.d/epkowa.conf
%{_mandir}/man5/sane-epkowa.5*
%{_mandir}/man8/iscan-registry.*
%endif
#----------------------------------------------------------------------------
%package backends-doc
Summary: Documentation for SANE backends
Group: Documentation
%description backends-doc
This package contains the SANE backend documentation for different
scanners.
%files backends-doc
%doc %{_docdir}/sane-backends-doc-%{version}
#----------------------------------------------------------------------------
%package -n saned
Summary: SANE - local and remote scanner access
License: LGPLv2.1+
Group: System/Kernel and hardware
Provides: saned = %{EVRD}
Requires: sane-backends >= %{EVRD}
Requires(post,postun): xinetd
Requires(preun,post): rpm-helper
%description -n saned
This package contains saned, a daemon that allows remote clients to
access image acquisition devices available on the local host.
%files -n saned
%{_sbindir}/*
%{_mandir}/man8/saned*
%attr(644,root,root) %config(noreplace) %{_sysconfdir}/xinetd.d/saned
%post -n saned
systemctl restart xinetd
%pre -n saned
# Add saned to group scanner, cdwriter and usb for scanner access.
/usr/sbin/useradd -r -M -s /bin/false -c "system user for saned" saned -G cdwriter,usb,scanner || :
%preun -n saned
systemctl restart xinetd
%postun -n saned
systemctl restart xinetd
#----------------------------------------------------------------------------
%prep
%setup -qn sane-backends-%{version}
%patch0 -p1 -b .plusteks12
%patch1 -p1 -b .group
%patch2 -p1 -b .brother2list
%patch3 -p1 -b .strformat
%patch4 -p1 -b .pthread
%patch10 -p1
%patch11 -p1
%patch12 -p1
%patch13 -p1
# Fedora patches
%patch20 -p1 -b .open-macro
%patch21 -p1 -b .udev
# Primax parallel port scanners
%if %{with primax}
%setup -q -T -D -a 3 -n sane-backends-%{version}
%endif
# "primascan" backend
# (commented out in dll.conf, as it claims to support every USB scanner)
cat %{SOURCE11} > backend/primascan.h
cat %{SOURCE12} > backend/primascan.c
echo '#primascan' >> backend/dll.conf.in
# Epson Avasys driver for Epson scanners
%if %{with epkowa}
%setup -q -T -D -a 13 -n sane-backends-%{version}
%endif
# lib64 fixes (avoid patch)
# NOTE: don't regenerate configure script past this line
perl -pi -e "s@/lib(\"|\b[^/])@/%_lib\1@g if /LDFLAGS=.*with_ptal/" configure
# Reduce number of retries done by the "snapscan" backend when accessing
# the scanner
perl -p -i -e 's:for \(retries = 20; retries; retries--\):for (retries = 5; retries; retries--):' backend/snapscan-scsi.c
%if %{with epkowa}
pushd iscan-%{iscanversion}
%patch30 -p0 -b .iscan-2.10.0-1_fix_link
%patch31 -p0 -b .no_non-free_please
%patch32 -p2 -b .linkage_fix
popd
%endif
# Remove the backend/dll.conf file generated by the patches, it prevents
# the Makefile from generating the real dll.conf file
rm -f backend/dll.conf
%build
%configure2_5x \
--disable-static \
--enable-rpath=no \
%if !%{with gphoto2}
--without-gphoto2
%endif
%make
# Primax parallel port scanners
%if %{with primax}
chmod a+rx tools/sane-config
cd primaxscan*
autoreconf -fi
PATH=`pwd`/../tools:${PATH}
CFLAGS="${RPM_OPT_FLAGS/-ffast-math/} -fPIC -I`pwd`/../include -L`pwd`/../backend/.libs/"\
%configure2_5x \
--disable-static
%make
%make primax_scan
cd ..
%endif
# Epson Avasys driver for Epson scanners
%if %{with epkowa}
chmod a+rx tools/sane-config
PATH=`pwd`/tools:${PATH}
cd iscan-%{iscanversion}
sh ./bootstrap
export CFLAGS="${RPM_OPT_FLAGS/-ffast-math/} -I`pwd`/../include -L`pwd`/../backend/ -fPIC"
export CXXFLAGS="${RPM_OPT_FLAGS/-ffast-math/} -I`pwd`/../include -L`pwd`/../backend/ -fPIC"
export LIBUSB_1_0_LIBS="-lusb"
%configure2_5x \
--disable-static \
--disable-frontend
%make
cd ..
%endif
%install
%makeinstall_std
# Create missing lock dir
install -d %{buildroot}/var/lib/lock/sane
perl -pi -e "s/installed.*/installed=yes/g" %{buildroot}%{_libdir}/libsane.la
/sbin/ldconfig -n %{buildroot}%{_libdir} %{buildroot}%{_libdir}/sane
# Comment out entry for the "geniusvp2" backend in
# /etc/sane.d/dll.conf as it makes SANE hanging on some systems when
# the appropriate scanner is not present
perl -p -i -e 's/^(\s*geniusvp2)/\#$1/g' %{buildroot}%{_sysconfdir}/sane.d/dll.conf
# Comment out entry for the "epson" backend in /etc/sane.d/dll.conf as
# we have also Epson's "epkowa" backend which supports the same
# scanners
perl -p -i -e 's/^(\s*epson)/\#$1/g' %{buildroot}%{_sysconfdir}/sane.d/dll.conf
# Remove "hpoj" line from /etc/sane.d/dll.con
perl -p -i -e 's/HP\s+OfficeJet/HPLIP/g' %{buildroot}%{_sysconfdir}/sane.d/dll.conf
perl -p -i -e 's/hpoj.sf.net/hplip.sf.net/g' %{buildroot}%{_sysconfdir}/sane.d/dll.conf
perl -p -i -e 's/hpoj/hpaio/g' %{buildroot}%{_sysconfdir}/sane.d/dll.conf
%if %{with empty_dll_conf}
# The /etc/sane.d/dll.conf contains lines for every backend, so every
# backend probes for a scanner when a SANE frontend (e. g. xsane) is
# started. With this the user has always to wait around one minute
# before he can scan. We simply replace the file by a nearly empty one
# and let scannerdrake only insert the needed backends. So the
# frontends will start immediately
mv %{buildroot}%{_sysconfdir}/sane.d/dll.conf %{buildroot}%{_sysconfdir}/sane.d/dll.conf.orig
cat > %{buildroot}%{_sysconfdir}/sane.d/dll.conf <<EOF
# enable the next line if you want to allow access through the network:
net
EOF
%endif
# Move documentation from /usr/doc to /usr/share/doc
install -d %{buildroot}%{_docdir}/sane-backends-%{version}/
install -d %{buildroot}%{_docdir}/sane-backends-doc-%{version}/
pushd %{buildroot}/usr/doc/sane-%{version}
mv `find -mindepth 1 -type d` *.html *.txt %{buildroot}%{_docdir}/sane-backends-doc-%{version}/
mv README README.linux %{buildroot}%{_docdir}/sane-backends-%{version}/
rm -f README.*
mv * %{buildroot}%{_docdir}/sane-backends-%{version}/
popd
# Primax parallel port scanners
%if %{with primax}
cd primaxscan*
%makeinstall_std
rm -f %{buildroot}%{_libdir}/libsane-primax.a %{buildroot}%{_prefix}/lib/sane/libsane-primax.a
cp primax_scan %{buildroot}%{_bindir}
cd ..
%ifarch x86_64
mv -f %{buildroot}%{_prefix}/lib/sane/libsane-primax.* %{buildroot}%{_libdir}/sane/
rm -rf %{buildroot}%{_prefix}/lib/sane/
%endif
%endif
# Epson Avasys driver for Epson scanners
%if %{with epkowa}
cd iscan-%{iscanversion}
%makeinstall_std
rm -f %{buildroot}%{_libdir}/sane/libsane-epkowa.a
rm -f %{buildroot}%{_mandir}/man1/iscan.1*
rm -rf %{buildroot}%{_libdir}/iscan
cp backend/epkowa.conf %{buildroot}%{_sysconfdir}/sane.d/
echo 'epkowa' >> %{buildroot}%{_sysconfdir}/sane.d/dll.conf
cd ..
%endif
# Xinetd.d entry
mkdir %{buildroot}/etc/xinetd.d
cat %{SOURCE5} > %{buildroot}/etc/xinetd.d/saned
# udev rules for libusb user support
mkdir -p %{buildroot}/lib/udev/rules.d
install -m644 tools/udev/libsane.rules %{buildroot}/lib/udev/rules.d/60-libsane.rules
# Shorten too long comments
perl -p -i -e 's/(\#.{500}).*$/$1 .../' %{buildroot}/lib/udev/rules.d/60-libsane.rules
%find_lang sane-backends
sed -i '/^%dir/d' sane-backends.lang