%{!?_pkgdocdir: %global _pkgdocdir %{_docdir}/%{name}-%{version}} %global _hardened_build 1 %bcond_with docs %global varbase %{_var}/lib/vdr %global videodir %{varbase}/video %global vardir %{varbase}/data %global plugindir %{_libdir}/vdr %global configdir %{_sysconfdir}/vdr %global cachedir %{_var}/cache/vdr %global rundir /run/vdr %global vdr_user vdr %global vdr_group video # From APIVERSION in config.h %global apiver 2.4.4 Name: vdr Version: 2.4.4 Release: 1%{?dist} Summary: Video Disk Recorder License: GPLv2+ URL: http://www.tvdr.de/ Source0: ftp://ftp.tvdr.de/vdr/%{name}-%{version}.tar.bz2 Source1: %{name}.service Source2: %{name}.sysconfig Source3: %{name}.sudoers Source5: %{name}-reccmds.conf Source6: %{name}-commands.conf Source7: %{name}-runvdr.sh Source9: %{name}-config.sh Source10: %{name}-README.package Source11: %{name}-skincurses.conf Source13: %{name}-timercmds.conf Source14: %{name}-shutdown.sh Source15: %{name}-moveto.sh Source17: %{name}.macros Source19: %{name}-check-setup.sh Source21: %{name}-set-wakeup.sh Patch4: %{name}-2.4.0-paths.patch Patch15: %{name}-1.7.37-fedora-pkgconfig.patch Patch99: %{name}-2.4.1-mark-obsolete-NidTid.patch BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: libjpeg-devel BuildRequires: libcap-devel BuildRequires: pkgconfig BuildRequires: perl(File::Spec) BuildRequires: fontconfig-devel BuildRequires: freetype-devel BuildRequires: gettext BuildRequires: systemd-devel %if %{with docs} BuildRequires: doxygen BuildRequires: graphviz %endif # udev >= 136-1 for the audio, cdrom, dialout, and video groups Requires: udev >= 136-1 # sudo for the shutdown script, >= 1.7.2p2-3 for sudoers.d functionality Requires: sudo >= 1.7.2p2-3 # util-linux >= 2.15 for "rtcwake -m no" timer driven wakeups Requires: util-linux >= 2.15 Requires: vdrsymbol-fonts # shadow-utils >= 4.1.1 for useradd -N Requires(pre): shadow-utils >= 2:4.1.1 # systemd >= 189 for RestartPreventExitStatus= Requires(post,preun,postun): systemd >= 189 Provides: vdr(abi)%{?_isa} = %{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 Requires: gettext Provides: vdr-devel(api) = %{apiver} %description devel %{summary}. %package docs Summary: Developer documentation for VDR BuildArch: noarch %description docs %{summary}. %package skincurses Summary: Shell window skin plugin for VDR BuildRequires: ncurses-devel Requires: vdr(abi)%{?_isa} = %{apiver} %description skincurses The skincurses plugin implements a VDR skin that works in a shell window, using only plain text output. %prep %setup -q sed \ -e 's|__CACHEDIR__|%{cachedir}|' \ -e 's|__CONFIGDIR__|%{configdir}|' \ -e 's|__PLUGINDIR__|%{plugindir}|' \ -e 's|__VARDIR__|%{vardir}|' \ -e 's|__VIDEODIR__|%{videodir}|' \ %{PATCH4} | %{__patch} -p1 %patch15 -p1 %patch99 -p1 # Patch APIVERSION TO 2.4.4 to match VDRVERSION sed -i 's/2\.4\.3/2.4.4/' config.h sed -i 's/20403/20404/' config.h 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 cp -p %{SOURCE5} reccmds.conf cp -p %{SOURCE13} timercmds.conf cp -p %{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 # 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 # Disable some graphs that end up too big to be useful. for g in COLLABORATION INCLUDE INCLUDED_BY ; do sed -i -e 's/^\(\s*'$g'_GRAPH\s*=\s*\).*/\1NO/' Doxyfile done %build cat << EOF > Make.config CC = %{__cc} CXX = %{__cxx} CFLAGS = \$(shell pkg-config vdr --variable=cflags) CXXFLAGS = \$(shell pkg-config vdr --variable=cxxflags) LDFLAGS = $RPM_LD_FLAGS PREFIX = %{_prefix} MANDIR = \$(shell pkg-config vdr --variable=mandir) BINDIR = \$(shell pkg-config vdr --variable=bindir) LOCDIR = \$(shell pkg-config vdr --variable=locdir) PLUGINLIBDIR = \$(shell pkg-config vdr --variable=libdir) VIDEODIR = \$(shell pkg-config vdr --variable=videodir) CONFDIR = \$(shell pkg-config vdr --variable=configdir) CACHEDIR = \$(shell pkg-config vdr --variable=cachedir) RESDIR = \$(shell pkg-config vdr --variable=resdir) INCDIR = %{_includedir} LIBDIR = \$(PLUGINLIBDIR) PLGCFG = \$(LIBDIR)/plugins.mk LIRC_DEVICE = %{_localstatedir}/run/lirc/lircd VDR_USER = \$(shell pkg-config vdr --variable=user) SDNOTIFY = 1 EOF cat << EOF > plugins.mk LDFLAGS = $RPM_LD_FLAGS EOF cp plugins.mk bundled-plugins.mk cat << EOF >> bundled-plugins.mk CFLAGS += -I$PWD/include CXXFLAGS += -I$PWD/include EOF cflags="${RPM_OPT_FLAGS/-O2/-O3} -fPIC" # see HISTORY for 1.7.17 for -O3 make vdr.pc BINDIR=%{_bindir} MANDIR=%{_mandir} CONFDIR=%{configdir} \ VIDEODIR=%{videodir} CACHEDIR=%{cachedir} RESDIR=%{_datadir}/vdr \ LIBDIR=%{plugindir} LOCDIR=%{_datadir}/locale RUNDIR=%{rundir} \ VARDIR=%{vardir} VDR_USER=%{vdr_user} VDR_GROUP=%{vdr_group} \ LDFLAGS="$RPM_LD_FLAGS" CFLAGS="$cflags" \ CXXFLAGS="$cflags -Werror=overloaded-virtual -Wno-parentheses" PKG_CONFIG_PATH="$PWD:$PKG_CONFIG_PATH" \ %make_build vdr include-dir i18n for plugin in skincurses ; do %make_build -C PLUGINS/src/$plugin VDRDIR=$PWD \ PLGCFG=$PWD/bundled-plugins.mk all done %if %{with docs} %make_build srcdoc %endif %install # Not using the install-pc target to preserve our already good vdr.pc install -Dpm 644 vdr.pc $RPM_BUILD_ROOT%{_libdir}/pkgconfig/vdr.pc PKG_CONFIG_PATH="$RPM_BUILD_ROOT%{_libdir}/pkgconfig:$PKG_CONFIG_PATH" \ make install-bin install-dirs install-conf install-doc install-i18n \ install-includes DESTDIR=$RPM_BUILD_ROOT install -pm 755 epg2html $RPM_BUILD_ROOT%{_bindir} install -dm 755 $RPM_BUILD_ROOT%{_sbindir} mv $RPM_BUILD_ROOT%{_bindir}/vdr $RPM_BUILD_ROOT%{_sbindir} install -dm 755 $RPM_BUILD_ROOT%{configdir}/plugins 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 -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 644 %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/vdr sed -i \ -e 's|/usr/lib/vdr/|%{plugindir}/|' \ $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/vdr touch $RPM_BUILD_ROOT%{videodir}/.update install -dm 755 $RPM_BUILD_ROOT%{plugindir}/bin install -m 755 %{SOURCE14} $RPM_BUILD_ROOT%{plugindir}/bin/%{name}-shutdown.sh sed -i \ -e 's|/etc/sysconfig/|%{_sysconfdir}/sysconfig/|' \ -e 's|/var/run/vdr/|%{rundir}/|' \ $RPM_BUILD_ROOT%{plugindir}/bin/%{name}-shutdown.sh install -m 755 %{SOURCE15} $RPM_BUILD_ROOT%{plugindir}/bin/%{name}-moveto.sh sed -i \ -e 's|/var/lib/vdr/video|%{videodir}|' \ -e 's|/etc/vdr/|%{configdir}/|' \ $RPM_BUILD_ROOT%{plugindir}/bin/%{name}-moveto.sh install -m 755 %{SOURCE19} $RPM_BUILD_ROOT%{plugindir}/bin/%{name}-check-setup sed -i \ -e 's|/etc/vdr/|%{configdir}/|' \ -e 's|VDR_USER|%{vdr_user}|' \ -e 's|VDR_GROUP|%{vdr_group}|' \ $RPM_BUILD_ROOT%{plugindir}/bin/%{name}-check-setup install -m 755 %{SOURCE21} $RPM_BUILD_ROOT%{plugindir}/bin/%{name}-set-wakeup sed -i \ -e 's|/usr/sbin/|%{_sbindir}/|' \ -e 's|/var/run/vdr/|%{rundir}/|' \ $RPM_BUILD_ROOT%{plugindir}/bin/%{name}-set-wakeup install -Dm 644 %{SOURCE1} $RPM_BUILD_ROOT%{_unitdir}/%{name}.service sed -i \ -e 's|/usr/lib/vdr/|%{plugindir}/|' \ -e 's|/usr/sbin/|%{_sbindir}/|' \ -e 's|/usr/share/doc/vdr/|%{_pkgdocdir}/|' \ $RPM_BUILD_ROOT%{_unitdir}/%{name}.service install -Dpm 440 %{SOURCE3} $RPM_BUILD_ROOT%{_sysconfdir}/sudoers.d/vdr touch $RPM_BUILD_ROOT%{cachedir}/epg.data install -dm 755 $RPM_BUILD_ROOT%{_datadir}/vdr/{logos,plugins} install -dm 755 $RPM_BUILD_ROOT%{rundir} touch $RPM_BUILD_ROOT%{rundir}/next-timer install -dm 755 $RPM_BUILD_ROOT%{vardir} install -Dpm 644 %{name}.rwtab $RPM_BUILD_ROOT%{_sysconfdir}/rwtab.d/%{name} install -dm 755 $RPM_BUILD_ROOT%{_pkgdocdir} install -pm 644 CONTRIBUTORS \ HISTORY* INSTALL MANUAL PLUGINS.html README* UPDATE-?.?.0 \ $RPM_BUILD_ROOT%{_pkgdocdir} %if %{with docs} cp -pR srcdoc/html $RPM_BUILD_ROOT%{_pkgdocdir} %endif # devel abs2rel() { perl -MFile::Spec -e 'print File::Spec->abs2rel(@ARGV)' "$@" ; } install -pm 755 %{SOURCE9} $RPM_BUILD_ROOT%{_bindir}/vdr-config install -pm 755 newplugin $RPM_BUILD_ROOT%{_bindir}/vdr-newplugin install -pm 644 Make.{config,global} plugins.mk $RPM_BUILD_ROOT%{_libdir}/vdr ln -s $(abs2rel %{_includedir}/vdr/config.h %{_libdir}/vdr) \ $RPM_BUILD_ROOT%{_libdir}/vdr macrodir=%{_sysconfdir}/rpm [ -d %{_rpmconfigdir}/macros.d ] && macrodir=%{_rpmconfigdir}/macros.d install -Dpm 644 %{SOURCE17} $RPM_BUILD_ROOT$macrodir/macros.vdr echo $macrodir/macros.vdr > %{name}-devel.files # i18n %find_lang %{name} sed -i -e '1i%%defattr(-,root,root,-)' %{name}.lang install -dm 755 $RPM_BUILD_ROOT%{_prefix}/lib/tmpfiles.d echo "d %{rundir} 0755 %{vdr_user} root -" \ > $RPM_BUILD_ROOT%{_prefix}/lib/tmpfiles.d/%{name}.conf echo "%{_prefix}/lib/tmpfiles.d/%{name}.conf" \ >> %{name}.lang # plugins %make_install -C PLUGINS/src/skincurses install -pm 644 %{SOURCE11} \ $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/vdr-plugins.d/skincurses.conf %find_lang %{name}-skincurses %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 %pre # dialout for serial port remote controllers getent passwd %{vdr_user} >/dev/null || \ useradd -r -g %{vdr_group} -d %{vardir} -s /sbin/nologin -M -N \ -G audio,cdrom,dialout -c "Video Disk Recorder" %{vdr_user} || : %post %systemd_post %{name}.service %preun %systemd_preun %{name}.service %postun %systemd_postun_with_restart %{name}.service %files -f %{name}.lang %{_pkgdocdir} %exclude %{_pkgdocdir}/PLUGINS.html %if %{with docs} %exclude %{_pkgdocdir}/html/ %endif %config(noreplace) %{_sysconfdir}/sudoers.d/vdr %config(noreplace) %{_sysconfdir}/sysconfig/vdr %config(noreplace) %{_sysconfdir}/rwtab.d/%{name} %config %dir %{_sysconfdir}/sysconfig/vdr-plugins.d/ %{_bindir}/epg2html %{_bindir}/svdrpsend %{_sbindir}/runvdr %{_sbindir}/vdr %{_unitdir}/%{name}.service %dir %{plugindir}/ %dir %{plugindir}/bin/ %{plugindir}/bin/%{name}-check-setup %{plugindir}/bin/%{name}-moveto.sh %{plugindir}/bin/%{name}-set-wakeup %{plugindir}/bin/%{name}-shutdown.sh %{_datadir}/vdr/ %{_mandir}/man1/svdrpsend.1* %{_mandir}/man1/vdr.1* %{_mandir}/man5/vdr.5* %dir %{varbase}/ %defattr(-,%{vdr_user},%{vdr_group},-) # TODO: tighten ownerships to root:root for some files in %%{configdir} %config(noreplace) %{configdir}/*.conf %dir %{videodir}/ %ghost %{videodir}/.update %ghost %{vardir}/themes/*.theme %ghost %{cachedir}/epg.data %defattr(-,%{vdr_user},root,-) %dir %{configdir}/ %dir %{configdir}/plugins/ %dir %{rundir}/ %ghost %{rundir}/next-timer %dir %{vardir}/ %dir %{vardir}/themes/ %dir %{cachedir}/ %files devel -f %{name}-devel.files %{!?_with_docs:%dir %{_pkgdocdir}} %license COPYING %if ! %{with docs} %{_pkgdocdir}/PLUGINS.html %endif %{_bindir}/vdr-config %{_bindir}/vdr-newplugin %{_includedir}/libsi/ %{_includedir}/vdr/ %{_libdir}/pkgconfig/vdr.pc %dir %{_libdir}/vdr/ %{_libdir}/vdr/Make.config %{_libdir}/vdr/Make.global %{_libdir}/vdr/config.h %{_libdir}/vdr/plugins.mk %if %{with docs} %files docs %dir %{_pkgdocdir} %license COPYING %{_pkgdocdir}/PLUGINS.html %{_pkgdocdir}/html/ %endif %files skincurses -f %{name}-skincurses.lang %license PLUGINS/src/skincurses/COPYING %doc PLUGINS/src/skincurses/{HISTORY,README} %config(noreplace) %{_sysconfdir}/sysconfig/vdr-plugins.d/skincurses.conf %{plugindir}/libvdr-skincurses.so.%{apiver} %changelog * Sun Aug 2 2020 Dirk Nehring - 2.4.4-1 - Rebuild 2.4.4