Blob Blame History Raw
# TODO, maybe some day:
# - livebuffer patch, http://www.vdr-portal.de/board/thread.php?threadid=37309
# - channelfilter patch, http://www.u32.de/vdr.html#patches
# - UTF-8 patch, http://www.free-x.de/utf8/

%define videodir  /srv/vdr
%define audiodir  /srv/audio
%define plugindir %{_libdir}/vdr
%define configdir %{_sysconfdir}/vdr
%define datadir   %{_datadir}/vdr
%define cachedir  %{_var}/cache/vdr
%define rundir    %{_var}/run/vdr
%define vardir    %{_var}/lib/vdr
%define logdir    %{_var}/log/vdr
%define vdr_user  vdr
%define vdr_group video
# From APIVERSION in config.h
%define apiver    1.4.5

Name:           vdr
Version:        1.4.7
Release:        3%{?dist}
Summary:        Video Disk Recorder

Group:          Applications/Multimedia
License:        GPLv2+
URL:            http://www.cadsoft.de/vdr/
Source0:        ftp://ftp.cadsoft.de/vdr/%{name}-%{version}.tar.bz2
Source1:        %{name}.init
Source2:        %{name}.sysconfig
Source4:        %{name}-udev.rules
Source5:        %{name}-reccmds.conf
Source6:        %{name}-commands.conf
Source7:        %{name}-runvdr.sh
Source8:        %{name}.consoleperms
Source9:        %{name}-config.sh
Source10:       %{name}-README.package
Source11:       %{name}-skincurses.conf
Source12:       %{name}-sky.conf
Source13:       %{name}-timercmds.conf
Source14:       %{name}-shutdown.sh
Source15:       %{name}-moveto.sh
Source16:       %{name}-CHANGES.package.old
Patch0:         %{name}-channel+epg.patch
Patch1:         http://zap.tartarus.org/~ds/debian/dists/stable/main/source/vdr_1.4.5-2.ds.diff.gz
Patch2:         http://www.saunalahti.fi/~rahrenbe/vdr/patches/vdr-1.4.7-liemikuutio-1.13.diff.gz
Patch3:         %{name}-1.4.6-paths.patch
Patch4:         %{name}-1.4.1-dumpable.patch
# http://article.gmane.org/gmane.linux.vdr/32708
Patch5:         %{name}-1.4.6-1-syncearly.patch
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

BuildRequires:  libjpeg-devel
BuildRequires:  libcap-devel
BuildRequires:  pkgconfig
BuildRequires:  perl(File::Spec)
Requires:       udev
Requires(pre):  shadow-utils
Requires(post): /sbin/chkconfig
Requires(preun): /sbin/chkconfig
Provides:       vdr(abi) = %{apiver}

%description
VDR implements a complete digital set-top-box and video recorder.
It can work with signals received from satellites (DVB-S) as well as
cable (DVB-C) and terrestrial (DVB-T) signals.  At least one DVB card
is required to run VDR.

%package        devel
Summary:        Development files for VDR
Group:          Development/Libraries
Requires:       pkgconfig
Provides:       vdr-devel(api) = %{apiver}

%description    devel
%{summary}.

%package        skincurses
Summary:        Shell window skin plugin for VDR
Group:          Applications/Multimedia
%if 0%{?_with_plugins:1}
BuildRequires:  ncurses-devel
%endif
Requires:       vdr(abi) = %{apiver}

%description    skincurses
The skincurses plugin implements a VDR skin that works in a shell
window, using only plain text output.

%package        sky
Summary:        Sky Digibox plugin for VDR
Group:          Applications/Multimedia
Requires:       vdr(abi) = %{apiver}

%description    sky
The sky plugin implements a new device for VDR, which is based on the
MPEG2 encoder card described at linuxtv.org/mpeg2/kfir.xml.  It allows
you to connect the analog a/v output of your Sky Digibox to VDR, so
that you can enjoy the full recording flexibility of VDR with your Sky
subscription.  You will need a Sky Digibox and a valid subscription in
order to use this plugin.


%prep
%setup -q
%patch0 -p1
%patch1 -p1
#patch -i debian/patches/02_latin-1.dpatch
patch -i debian/patches/02_plugin_missing.dpatch
patch -i debian/patches/02_reload.dpatch
# sort_options would be nice, but it conflicts with channel+epg which is nicer
#patch -i debian/patches/02_sort_options.dpatch
#patch -i debian/patches/03_no-data_timeout.dpatch
#patch -i debian/patches/03_settime_segfault.dpatch
#patch -i debian/patches/04_cmdsubmenu.dpatch
#patch -i debian/patches/05_nissl_dvbplayer.dpatch
#patch -i debian/patches/06_recording_readonly.dpatch
patch -i debian/patches/06_recording_scan_speedup.dpatch
patch -i debian/patches/07_blockify_define.dpatch
#patch -i debian/patches/09_increase_epgscan_timeout.dpatch
patch -i debian/patches/10_livelock.dpatch
patch -i debian/patches/11_atsc.dpatch
echo "DEFINES += -DHAVE_ATSC" >> Makefile
#patch -i debian/patches/12_skinclassic_icons.dpatch
#patch -i debian/patches/15_cut_compensate_start_time.dpatch
patch -i debian/patches/19_debian_osdbase_maxitems.dpatch
patch -i debian/patches/opt-20_epgsearch.dpatch
#patch -i debian/patches/opt-20_liemikuutio.dpatch
patch -i debian/patches/opt-20_subtitles_0.4.0_ttxtsubs_0.0.5.dpatch
patch -i debian/patches/opt-20_suspend.dpatch
patch -i debian/patches/opt-20_vdr-timer-info.dpatch
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p0

# Fix up paths
sed -i \
  -e 's|__CACHEDIR__|%{cachedir}|'   \
  -e 's|__CONFIGDIR__|%{configdir}|' \
  -e 's|__PLUGINDIR__|%{plugindir}|' \
  -e 's|__VARDIR__|%{vardir}|'       \
  -e 's|__VIDEODIR__|%{videodir}|'   \
  epg2html.pl vdr.1 vdr.5 vdr.c PLUGINS/src/sky/README

# Fix up man page section
sed -i -e 's/\bvdr\(\s*\)(1)/vdr\1(8)/' HISTORY UPDATE-1.2.0 vdr.5
sed -i -e 's/\bvdr\([\. ]\)1\b/vdr\18/' HISTORY vdr.1

for f in CONTRIBUTORS HISTORY* UPDATE-1.4.0 ; do
  iconv -f iso-8859-1 -t utf-8 -o $f.utf8 $f && mv $f.utf8 $f
done

sed -i -e 's/epg2html.pl/epg2html/' CONTRIBUTORS HISTORY epg2html.pl
sed -i -e 's/svdrpsend.pl/svdrpsend/' HISTORY
sed -i -e 's/getskyepg.pl/getskyepg/' \
  PLUGINS/src/sky/{getskyepg.pl,README,HISTORY}

cp -p %{SOURCE5} reccmds.conf
cp -p %{SOURCE13} timercmds.conf
sed -e 's|/srv/audio|%{audiodir}|' %{SOURCE6} > commands.conf
# Unfortunately these can't have comments in them, so ship 'em empty.
cat /dev/null > channels.conf
cat /dev/null > remote.conf
cat /dev/null > setup.conf
cat /dev/null > timers.conf

install -pm 644 %{SOURCE10} README.package
install -pm 644 %{SOURCE16} CHANGES.package.old

# Would like to do "files {channels,setup,timers}.conf" from config dir
# only, but rename() in cSafeFile barks "device or resource busy", cf.
# http://lists.suse.com/archive/suse-programming-e/2003-Mar/0051.html
cat << EOF > %{name}.rwtab
dirs    %{cachedir}
files   %{configdir}
files   %{vardir}
EOF


%build

# Intentionally not using %{version} or %{apiver} here, see %check
vdrver=$(sed -ne '/define VDRVERSION/s/^.*"\(.*\)".*$/\1/p' config.h)
apiver=$(sed -ne '/define APIVERSION/s/^.*"\(.*\)".*$/\1/p' config.h)

cat << EOF > vdr.pc
videodir=%{videodir}
audiodir=%{audiodir}
plugindir=%{plugindir}
configdir=%{configdir}
datadir=%{datadir}
cachedir=%{cachedir}
rundir=%{rundir}
vardir=%{vardir}
logdir=%{logdir}
user=%{vdr_user}
group=%{vdr_group}
apiversion=$apiver

Name: VDR
Description: Video Disk Recorder
Version: $vdrver
EOF

cat << EOF > Make.config
CC           = %{__cc}
CXX          = %{__cxx}

ifeq (\$(RPM_OPT_FLAGS),)
  CFLAGS     = $RPM_OPT_FLAGS
  CXXFLAGS   = $RPM_OPT_FLAGS -Wall -Woverloaded-virtual
else
  CFLAGS     = \$(RPM_OPT_FLAGS)
  CXXFLAGS   = \$(RPM_OPT_FLAGS) -Wall -Woverloaded-virtual
endif
ifdef PLUGIN
  CFLAGS    += -fPIC
  CXXFLAGS  += -fPIC
endif

PLUGINLIBDIR = \$(DESTDIR)\$(shell pkg-config vdr --variable=plugindir)
VIDEODIR     = \$(DESTDIR)\$(shell pkg-config vdr --variable=videodir)
LIBDIR       = \$(PLUGINLIBDIR)

VDR_USER     = %{vdr_user}
EOF

export PKG_CONFIG_PATH=$(pwd)
make %{?_smp_mflags} all include-dir
%if 0%{?_with_plugins:1}
make %{?_smp_mflags} -C PLUGINS/src/skincurses LIBDIR=. all
make %{?_smp_mflags} -C PLUGINS/src/sky        LIBDIR=. all
%endif


%install
rm -rf $RPM_BUILD_ROOT

abs2rel() { perl -MFile::Spec -e 'print File::Spec->abs2rel(@ARGV)' "$@" ; }

install -Dpm 755 vdr $RPM_BUILD_ROOT%{_sbindir}/vdr

install -dm 755 $RPM_BUILD_ROOT%{_bindir}
install -pm 755 svdrpsend.pl $RPM_BUILD_ROOT%{_bindir}/svdrpsend
install -pm 755 epg2html.pl $RPM_BUILD_ROOT%{_bindir}/epg2html

install -Dpm 644 vdr.1 $RPM_BUILD_ROOT%{_mandir}/man8/vdr.8
install -Dpm 644 vdr.5 $RPM_BUILD_ROOT%{_mandir}/man5/vdr.5

install -dm 755 $RPM_BUILD_ROOT%{configdir}/plugins
install -pm 644 *.conf $RPM_BUILD_ROOT%{configdir}

install -dm 755 $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/vdr-plugins.d

install -dm 755 $RPM_BUILD_ROOT%{vardir}/themes
touch $RPM_BUILD_ROOT%{vardir}/themes/{classic,sttng}-default.theme

install -Dpm 755 %{SOURCE1} $RPM_BUILD_ROOT%{_initrddir}/vdr
sed -i \
  -e 's|/usr/sbin/|%{_sbindir}/|'  \
  -e 's|/etc/vdr/|%{configdir}/|g' \
  -e 's|/var/lib/vdr/|%{vardir}/|' \
  -e 's|VDR_USER|%{vdr_user}|'     \
  -e 's|VDR_GROUP|%{vdr_group}|'   \
  $RPM_BUILD_ROOT%{_initrddir}/vdr

install -pm 755 %{SOURCE7} $RPM_BUILD_ROOT%{_sbindir}/runvdr
sed -i \
  -e 's|/usr/sbin/|%{_sbindir}/|'                    \
  -e 's|/etc/sysconfig/|%{_sysconfdir}/sysconfig/|g' \
  -e 's|/usr/lib/vdr\b|%{plugindir}|'                \
  -e 's|VDR_PLUGIN_VERSION|%{apiver}|'               \
  $RPM_BUILD_ROOT%{_sbindir}/runvdr

install -dm 755 $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig
sed -e 's|/usr/lib/vdr/|%{plugindir}/|' < %{SOURCE2} \
  > $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/vdr
chmod 644 $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/vdr

install -dm 755 $RPM_BUILD_ROOT%{videodir}
install -dm 755 $RPM_BUILD_ROOT%{audiodir}

install -dm 755 $RPM_BUILD_ROOT%{plugindir}/bin
sed -e 's|/var/lib/vdr/|%{vardir}/|' < %{SOURCE14} \
  > $RPM_BUILD_ROOT%{plugindir}/bin/%{name}-shutdown.sh
chmod 755 $RPM_BUILD_ROOT%{plugindir}/bin/%{name}-shutdown.sh
sed -e 's|/srv/vdr|%{videodir}|' -e 's|/etc/vdr/|%{configdir}/|' \
  < %{SOURCE15} > $RPM_BUILD_ROOT%{plugindir}/bin/%{name}-moveto.sh
chmod 755 $RPM_BUILD_ROOT%{plugindir}/bin/%{name}-moveto.sh

install -dm 755 $RPM_BUILD_ROOT%{cachedir}
touch $RPM_BUILD_ROOT%{cachedir}/epg.data
install -dm 755 $RPM_BUILD_ROOT%{datadir}/logos
install -dm 755 $RPM_BUILD_ROOT%{rundir}
install -dm 755 $RPM_BUILD_ROOT%{vardir}
touch $RPM_BUILD_ROOT%{vardir}/acpi-wakeup
install -dm 755 $RPM_BUILD_ROOT%{logdir}

install -dm 755 $RPM_BUILD_ROOT%{_sysconfdir}/udev/rules.d
sed -e 's/VDR_GROUP/%{vdr_group}/' < %{SOURCE4} \
  > $RPM_BUILD_ROOT%{_sysconfdir}/udev/rules.d/51-%{name}.rules
chmod 644 $RPM_BUILD_ROOT%{_sysconfdir}/udev/rules.d/*-%{name}.rules

install -dm 755 $RPM_BUILD_ROOT%{_sysconfdir}/security/console.perms.d
sed -e 's/VDR_GROUP/%{vdr_group}/' < %{SOURCE8} \
  > $RPM_BUILD_ROOT%{_sysconfdir}/security/console.perms.d/95-%{name}.perms
chmod 644 $RPM_BUILD_ROOT%{_sysconfdir}/security/console.perms.d/*%{name}.perms

install -Dpm 644 %{name}.rwtab $RPM_BUILD_ROOT%{_sysconfdir}/rwtab.d/%{name}

# devel
install -Dpm 644 vdr.pc $RPM_BUILD_ROOT%{_libdir}/pkgconfig/vdr.pc
install -pm 755 %{SOURCE9} $RPM_BUILD_ROOT%{_bindir}/vdr-config
install -pm 755 newplugin $RPM_BUILD_ROOT%{_bindir}/vdr-newplugin
install -dm 755 $RPM_BUILD_ROOT%{_libdir}/vdr/include/vdr
install -pm 644 Make.config $RPM_BUILD_ROOT%{_libdir}/vdr
install -dm 755 $RPM_BUILD_ROOT%{_includedir}/{vdr,libsi}
cp -pLR include/* $RPM_BUILD_ROOT%{_includedir}/
ln -s $(abs2rel %{_includedir}/vdr/config.h %{_libdir}/vdr) \
  $RPM_BUILD_ROOT%{_libdir}/vdr

# plugins
%if 0%{?_with_plugins:1}
install -pm 755 PLUGINS/src/skincurses/libvdr-skincurses.so.%{apiver} \
  $RPM_BUILD_ROOT%{plugindir}
install -pm 644 %{SOURCE11} \
  $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/vdr-plugins.d/skincurses.conf
install -pm 755 PLUGINS/src/sky/libvdr-sky.so.%{apiver} \
  $RPM_BUILD_ROOT%{plugindir}
install -pm 644 %{SOURCE12} \
  $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/vdr-plugins.d/sky.conf
install -pm 755 PLUGINS/src/sky/getskyepg.pl \
  $RPM_BUILD_ROOT%{_bindir}/getskyepg
install -Dpm 644 PLUGINS/src/sky/channels.conf.sky \
  $RPM_BUILD_ROOT%{configdir}/plugins/sky/channels.conf.sky
%endif


%check
export PKG_CONFIG_PATH=$RPM_BUILD_ROOT%{_libdir}/pkgconfig
if [ "$(pkg-config vdr --variable=apiversion)" != "%{apiver}" ] ; then
    echo "ERROR: API version mismatch in vdr.pc / package / config.h" ; exit 1
fi


%clean
rm -rf $RPM_BUILD_ROOT


%pre
getent group %{vdr_group} >/dev/null || groupadd -r %{vdr_group}
getent passwd %{vdr_user} >/dev/null || \
useradd -r -g %{vdr_group} -d %{videodir} -s /sbin/nologin -M -n \
    -c "Video Disk Recorder" %{vdr_user}
:

%post
/sbin/chkconfig --add vdr || :

%preun
if [ $1 -eq 0 ] ; then
    %{_initrddir}/vdr stop >/dev/null 2>&1
    /sbin/chkconfig --del vdr
fi
:

%postun
[ $1 -gt 0 ] && %{_initrddir}/vdr try-restart >/dev/null || :


%files
%defattr(-,root,root,-)
%doc CONTRIBUTORS COPYING HISTORY* INSTALL MANUAL README* UPDATE-1.[24].0
%doc CHANGES.package.old
%config(noreplace) %{_sysconfdir}/sysconfig/vdr
%config(noreplace) %{_sysconfdir}/udev/rules.d/*-%{name}.rules
%config(noreplace) %{_sysconfdir}/security/console.perms.d/*-%{name}.perms
%config(noreplace) %{_sysconfdir}/rwtab.d/%{name}
%config %{_sysconfdir}/sysconfig/vdr-plugins.d/
%{_initrddir}/vdr
%{_bindir}/epg2html
%{_bindir}/svdrpsend
%{_sbindir}/runvdr
%{_sbindir}/vdr
%dir %{plugindir}/
%dir %{plugindir}/bin/
%{plugindir}/bin/%{name}-moveto.sh
%{plugindir}/bin/%{name}-shutdown.sh
%{datadir}/
%{_mandir}/man[58]/vdr.[58]*
%defattr(-,%{vdr_user},%{vdr_group},-)
# TODO: tighten ownerships to root:root for some files in %{configdir}
%config(noreplace) %{configdir}/*.conf
%dir %{videodir}/
%dir %{audiodir}/
%ghost %{vardir}/acpi-wakeup
%ghost %{vardir}/themes/*.theme
%ghost %{cachedir}/epg.data
%defattr(-,%{vdr_user},root,-)
%dir %{configdir}/
%dir %{configdir}/plugins/
%dir %{logdir}/
%dir %{rundir}/
%dir %{vardir}/
%dir %{vardir}/themes/
%dir %{cachedir}/

%files devel
%defattr(-,root,root,-)
%doc COPYING PLUGINS.html
%{_bindir}/vdr-config
%{_bindir}/vdr-newplugin
%{_includedir}/libsi/
%{_includedir}/vdr/
%{_libdir}/pkgconfig/vdr.pc
%dir %{_libdir}/vdr/
%{_libdir}/vdr/Make.config
%{_libdir}/vdr/config.h

%if 0%{?_with_plugins:1}
%files skincurses
%defattr(-,root,root,-)
%doc PLUGINS/src/skincurses/COPYING PLUGINS/src/skincurses/HISTORY
%doc PLUGINS/src/skincurses/README
%config(noreplace) %{_sysconfdir}/sysconfig/vdr-plugins.d/skincurses.conf
%{plugindir}/libvdr-skincurses.so.%{apiver}

%files sky
%defattr(-,root,root,-)
%doc PLUGINS/src/sky/COPYING PLUGINS/src/sky/HISTORY
%doc PLUGINS/src/sky/README PLUGINS/src/sky/lircd.conf.sky
%{_bindir}/getskyepg
%config(noreplace) %{configdir}/plugins/sky/channels.conf.sky
%config(noreplace) %{_sysconfdir}/sysconfig/vdr-plugins.d/sky.conf
%{plugindir}/libvdr-sky.so.%{apiver}
%endif

%changelog
* Wed Aug  1 2007 Ville Skyttä <ville.skytta at iki.fi> - 1.4.7-3
- Sync user/group handling with current packaging guideline draft.
- Include vdr-moveto.sh, a script for organizing recordings.
- Refresh patches, include GPL version info in License tag.
- Move pre-2007 %%changelog entries to CHANGES.package.old.
- Make sure all package scriptlets exit with zero status.
- Add LSB comment block to init script.

* Mon Jun 11 2007 Ville Skyttä <ville.skytta at iki.fi> - 1.4.7-2
- Apply Reinhard Nißl's "sync early" patch for smoother channel changes.

* Sat May 12 2007 Ville Skyttä <ville.skytta at iki.fi> - 1.4.7-1
- 1.4.7.

* Tue May  1 2007 Ville Skyttä <ville.skytta at iki.fi> - 1.4.6-3
- Upstream 1.4.6-1, refresh other patches.

* Mon Apr 23 2007 Ville Skyttä <ville.skytta at iki.fi> - 1.4.6-2
- Relocate themes to /var/lib/vdr/themes (#216355).
- Tighten up some directory permissions.

* Sun Mar  4 2007 Ville Skyttä <ville.skytta at iki.fi> - 1.4.6-1
- 1.4.6.

* Sat Feb 24 2007 Ville Skyttä <ville.skytta at iki.fi> - 1.4.5-4
- Upstream 1.4.5-2.

* Sun Jan 28 2007 Ville Skyttä <ville.skytta at iki.fi> - 1.4.5-3
- Upstream 1.4.5-1, refresh other patches.
- Fix xineliboutput plugin name in sysconfig's VDR_PLUGIN_ORDER.
- Delay a bit in the init script's stop function for clean shutdown.
- Update CDDA_TRANSPORT workaround status in commands.conf abcde example.
- Improve /sbin/halt.local explanation in README.package.
- Minor specfile cleanups.

* Sun Jan  7 2007 Ville Skyttä <ville.skytta at iki.fi> - 1.4.5-2
- 1.4.5, Darren Salt's 1.4.4-1.ds.
- Make it possible to disable installed plugins in plugin sysconfig snippet.
- Add shutdown script, document ACPI wakeup usage in README.package.
- Shut down earlier by default for better experience with the -s option.
- Include INSTALL in docs, it contains useful post-install info.
- Improve remote control examples in udev rules snippet.
- Honor $TMPDIR when running with core dumps enabled.
- Add read only root/temporary state config.
- Add ttxtsubs to default plugin order list.
- Include log dir for plugins.