[vdr] Update to 1.7.21. Clean up specfile constructs no longer needed with Fedora or EL6+.

Ville Skyttä scop at fedoraproject.org
Sun Nov 6 16:30:25 UTC 2011


commit 08a8083c479d865cc0cf56042166d5f65d91d48e
Author: Ville Skyttä <ville.skytta at iki.fi>
Date:   Sun Nov 6 18:30:10 2011 +0200

    Update to 1.7.21.
    Clean up specfile constructs no longer needed with Fedora or EL6+.

 .gitignore                                      |   21 +--
 0002-Add-and-install-pkg-config-file.patch      |   93 +++++++++
 sources                                         |   20 +-
 vdr-1.5.17-progressbar-support-0.0.1.diff       |  106 ----------
 vdr-1.5.18-use-pkgconfig.patch                  |   14 --
 vdr-1.6.0-const.diff                            |   70 -------
 vdr-1.6.0-dxr3-subtitles.patch                  |   29 ---
 vdr-1.6.0-epgsearch-exttimeredit-0.0.2.diff     |  111 ----------
 vdr-1.6.0-fedora-pkgconfig.patch                |   16 --
 vdr-1.6.0-hlcutter-0.2.2-finnish.patch          |   49 -----
 vdr-1.6.0-includes+pkgconfig.patch              |   92 --------
 vdr-1.6.0-man-section.patch                     |  112 ----------
 vdr-1.6.0-msgidbugs.patch                       |   12 -
 vdr-1.6.0-remove-dvb-abi-check.patch            |   13 --
 vdr-1.6.0-scriptnames.patch                     |  113 ----------
 vdr-1.6.0-sky-lirc-device.patch                 |   25 ---
 vdr-1.6.0-v4l2.patch                            |  171 ---------------
 vdr-1.7.21-fedora-pkgconfig.patch               |   16 ++
 vdr-1.7.21-hlcutter-0.2.2-finnish.patch         |   23 ++
 vdr-1.7.21-jumpplay-finnish.patch               |   19 ++
 vdr-1.7.21-jumpplay.patch                       |  249 ++++++++++++++++++++++
 vdr-1.7.21-msgidbugs.patch                      |   12 +
 vdr-1.6.0-paths.patch => vdr-1.7.21-paths.patch |   82 +++-----
 vdr-1.7.21-plugin-missing.patch                 |   25 +++
 vdr-1.7.21-timercmd.patch                       |  107 ++++++++++
 vdr-dvbhddevice.conf                            |    5 +
 vdr-dvbsddevice.conf                            |    5 +
 vdr-jumpplay-1.0-1.6.0-finnish.patch            |   22 --
 vdr-sky.conf                                    |    5 -
 vdr.spec                                        |  254 ++++++++++-------------
 vdr.sysconfig                                   |    4 +-
 31 files changed, 720 insertions(+), 1175 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 1a6c89a..ed48f90 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,14 +1,7 @@
-vdr_1.4.5-2.ds.diff.gz
-vdr-1.6.0.tar.bz2
-/MainMenuHooks-v1_0_1.diff.gz
-timercmd-0.1_1.6.0.diff
-vdr-1.6.0-1.diff
-vdr-1.6.0-2.diff
-vdr-timer-info-0.5-1.5.15.diff
-vdr-1.6.0-2-ttxtsubs.patch
-vdr-1.6.0-subtitles-button.patch.gz
-vdr-1.6.0-ionice.patch.gz
-vdr-1.6.0-cap_sys_nice.patch.gz
-vdr-1.6.0-liemikuutio-1.27.diff.gz
-vdr-jumpplay-1.0-1.6.0.diff
-vdr-1.5.13-hlcutter-0.2.2.diff
+/*.gz
+/*.bz2
+/vdr-1.5.17-progressbar-support-0.0.1.diff
+/vdr-1.7.14-hlcutter-0.2.2.diff
+/vdr-1.7.21-ttxtsubs.patch
+/vdr-timer-info-0.5-1.7.13.diff
+/vdr.epgsearch-exttimeredit-0.0.2.diff
diff --git a/0002-Add-and-install-pkg-config-file.patch b/0002-Add-and-install-pkg-config-file.patch
new file mode 100644
index 0000000..a49ffc1
--- /dev/null
+++ b/0002-Add-and-install-pkg-config-file.patch
@@ -0,0 +1,93 @@
+From cb205323c4102807bc7cbd16baff284a26b465c3 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ville=20Skytt=C3=A4?= <ville.skytta at iki.fi>
+Date: Sun, 3 Apr 2011 18:32:42 +0300
+Subject: [PATCH 2/4] Add and install pkg-config file.
+
+---
+ Makefile |   35 ++++++++++++++++++++++++++++++++---
+ 1 files changed, 32 insertions(+), 3 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 18d7eb9..6fa9588 100644
+--- a/Makefile
++++ b/Makefile
+@@ -33,6 +33,8 @@ CONFDIR  = $(VIDEODIR)
+ DOXYGEN  = /usr/bin/doxygen
+ DOXYFILE = Doxyfile
+ 
++PCDIR   ?= $(firstword $(subst :, , ${PKG_CONFIG_PATH}:$(shell pkg-config --variable=pc_path pkg-config):$(PREFIX)/lib/pkgconfig))
++
+ include Make.global
+ -include Make.config
+ 
+@@ -77,7 +79,7 @@ DEFINES += -DLOCDIR=\"$(LOCDIR)\"
+ VDRVERSION = $(shell sed -ne '/define VDRVERSION/s/^.*"\(.*\)".*$$/\1/p' config.h)
+ APIVERSION = $(shell sed -ne '/define APIVERSION/s/^.*"\(.*\)".*$$/\1/p' config.h)
+ 
+-all: vdr i18n
++all: vdr i18n vdr.pc
+ 
+ # Implicit rules:
+ 
+@@ -103,6 +105,25 @@ vdr: $(OBJS) $(SILIB)
+ $(SILIB):
+ 	$(MAKE) -C $(LSIDIR) all
+ 
++# pkg-config file:
++
++vdr.pc: Makefile Make.global
++	@echo "bindir=$(BINDIR)" > $@
++	@echo "includedir=$(INCDIR)" >> $@
++	@echo "configdir=$(CONFDIR)" >> $@
++	@echo "videodir=$(VIDEODIR)" >> $@
++	@echo "plugindir=$(PLUGINLIBDIR)" >> $@
++	@echo "localedir=$(LOCDIR)" >> $@
++	@echo "apiversion=$(APIVERSION)" >> $@
++	@echo "cflags=$(CXXFLAGS) $(DEFINES) -I\$${includedir}" >> $@
++	@echo "plugincflags=\$${cflags} -fPIC" >> $@
++	@echo "" >> $@
++	@echo "Name: VDR" >> $@
++	@echo "Description: Video Disk Recorder" >> $@
++	@echo "URL: http://www.tvdr.de/" >> $@
++	@echo "Version: $(VDRVERSION)" >> $@
++	@echo "Cflags: \$${cflags}" >> $@
++
+ # Internationalization (I18N):
+ 
+ PODIR     = po
+@@ -163,7 +184,7 @@ clean-plugins:
+ 
+ # Install the files:
+ 
+-install: install-bin install-conf install-doc install-plugins install-i18n install-includes
++install: install-bin install-conf install-doc install-plugins install-i18n install-includes install-pc
+ 
+ # VDR binary:
+ 
+@@ -200,6 +221,14 @@ install-includes: include-dir
+ 	@mkdir -p $(DESTDIR)$(INCDIR)
+ 	@cp -pLR include/vdr include/libsi $(DESTDIR)$(INCDIR)
+ 
++# pkg-config file:
++
++install-pc: vdr.pc
++	if [ -n "$(PCDIR)" ] ; then \
++	    mkdir -p $(DESTDIR)$(PCDIR) ; \
++	    cp vdr.pc $(DESTDIR)$(PCDIR) ; \
++	    fi
++
+ # Source documentation:
+ 
+ srcdoc:
+@@ -212,7 +241,7 @@ srcdoc:
+ 
+ clean:
+ 	$(MAKE) -C $(LSIDIR) clean
+-	-rm -f $(OBJS) $(DEPFILE) vdr core* *~
++	-rm -f $(OBJS) $(DEPFILE) vdr vdr.pc core* *~
+ 	-rm -rf $(LOCALEDIR) $(PODIR)/*.mo $(PODIR)/*.pot
+ 	-rm -rf include
+ 	-rm -rf srcdoc
+-- 
+1.7.6
+
diff --git a/sources b/sources
index 9c292d8..bbcc495 100644
--- a/sources
+++ b/sources
@@ -1,14 +1,10 @@
 3e9287f726df5a667054a15078235791  vdr_1.4.5-2.ds.diff.gz
-76f4ebe6525a35e33313d27a3f8e80c0  vdr-1.6.0.tar.bz2
 c34d06b00218d3c04f5bbca3fc773535  MainMenuHooks-v1_0_1.diff.gz
-e9b82b88c1fa21b6fa9734ca240f6192  timercmd-0.1_1.6.0.diff
-4a6be2d47afa3a275837f1703c4df77b  vdr-1.6.0-1.diff
-875b66a90d1c6f2e25aa1221b319136b  vdr-1.6.0-2.diff
-92ee6cdf60b795d9fbcf4fdcafe401b4  vdr-timer-info-0.5-1.5.15.diff
-ded3dacb4be2958c03a50e3064164eb8  vdr-1.6.0-2-ttxtsubs.patch
-bd3221bb080788a87b4560eb0f323f2b  vdr-1.6.0-subtitles-button.patch.gz
-bc2dbfe11e0ddbc791ceb2f659081c8c  vdr-1.6.0-ionice.patch.gz
-32004893569e9a68f17d2b4b93410ed5  vdr-1.6.0-cap_sys_nice.patch.gz
-189117c22de7932bbfa770091f5d36e0  vdr-1.6.0-liemikuutio-1.27.diff.gz
-1ff8f1a90e02b11a42218ffba18b5f26  vdr-jumpplay-1.0-1.6.0.diff
-6c3dccda1910103449984677ed0bfcf4  vdr-1.5.13-hlcutter-0.2.2.diff
+49db9691fe6023270d443a62bab0411b  vdr-1.5.17-progressbar-support-0.0.1.diff
+65d8616d536c0743efc60f155edcfa1f  vdr-1.7.14-hlcutter-0.2.2.diff
+92cad9fbffa9f810c0c7cdc640732627  vdr-1.7.21-liemikuutio-1.32.patch.gz
+fae3698214bd45de1f675c2b037d5f3b  vdr-1.7.21-ttxtsubs.patch
+7300bfd997db1a848bd774fefe4aec80  vdr-1.7.21.tar.bz2
+04511ae02243eb1bab94f3f45b59e574  vdr-timer-info-0.5-1.7.13.diff
+71f7281d55eba1957f4267f596b11e29  vdr.epgsearch-exttimeredit-0.0.2.diff
+2b6adcd1e09f009ba12d0fb454e29808  vdr_1.7.20-1.debian.tar.bz2
diff --git a/vdr-1.7.21-fedora-pkgconfig.patch b/vdr-1.7.21-fedora-pkgconfig.patch
new file mode 100644
index 0000000..27203f2
--- /dev/null
+++ b/vdr-1.7.21-fedora-pkgconfig.patch
@@ -0,0 +1,16 @@
+--- Makefile~	2011-10-16 16:43:32.153166558 +0300
++++ Makefile	2011-10-16 16:44:43.588716860 +0300
+@@ -120,6 +120,13 @@
+ 	@echo "cflags=$(CXXFLAGS) $(DEFINES) -I\$${includedir}" >> $@
+ 	@echo "plugincflags=\$${cflags} -fPIC" >> $@
+ 	@echo "" >> $@
++	@echo "datadir=$(DATADIR)" >> $@
++	@echo "cachedir=$(CACHEDIR)" >> $@
++	@echo "rundir=$(RUNDIR)" >> $@
++	@echo "vardir=$(VARDIR)" >> $@
++	@echo "user=$(VDR_USER)" >> $@
++	@echo "group=$(VDR_GROUP)" >> $@
++	@echo "" >> $@
+ 	@echo "Name: VDR" >> $@
+ 	@echo "Description: Video Disk Recorder" >> $@
+ 	@echo "URL: http://www.tvdr.de/" >> $@
diff --git a/vdr-1.7.21-hlcutter-0.2.2-finnish.patch b/vdr-1.7.21-hlcutter-0.2.2-finnish.patch
new file mode 100644
index 0000000..fbb0539
--- /dev/null
+++ b/vdr-1.7.21-hlcutter-0.2.2-finnish.patch
@@ -0,0 +1,23 @@
+diff --git a/po/fi_FI.po b/po/fi_FI.po
+index b093e88..92ecbc9 100644
+--- a/po/fi_FI.po
++++ b/po/fi_FI.po
+@@ -1058,12 +1058,18 @@ msgstr "Pikatallennuksen kesto (min)"
+ msgid "Setup.Recording$Max. video file size (MB)"
+ msgstr "Suurin tiedostokoko (Mt)"
+ 
++msgid "Setup.Recording$Max. recording size (GB)"
++msgstr "Suurin tallennekoko (Gt)"
++
+ msgid "Setup.Recording$Split edited files"
+ msgstr "Jaottele muokatut tallenteet"
+ 
+ msgid "Setup.Recording$Delete timeshift recording"
+ msgstr "Poista ajansiirtotallenne"
+ 
++msgid "Setup.Recording$Hard Link Cutter"
++msgstr "Käytä kovia linkkejä muokkauksessa"
++
+ msgid "Replay"
+ msgstr "Toisto"
+ 
diff --git a/vdr-1.7.21-jumpplay-finnish.patch b/vdr-1.7.21-jumpplay-finnish.patch
new file mode 100644
index 0000000..fb68794
--- /dev/null
+++ b/vdr-1.7.21-jumpplay-finnish.patch
@@ -0,0 +1,19 @@
+diff -up vdr-1.7.21/po/fi_FI.po~ vdr-1.7.21/po/fi_FI.po
+--- vdr-1.7.21/po/fi_FI.po~	2011-10-17 21:42:33.775916357 +0300
++++ vdr-1.7.21/po/fi_FI.po	2011-10-17 21:43:11.112400439 +0300
+@@ -1076,6 +1076,15 @@ msgstr "Käytä kovia linkkejä muokkauk
+ msgid "Replay"
+ msgstr "Toisto"
+ 
++msgid "Setup.Replay$Jump&Play"
++msgstr "Jatka toistoa hypyn jälkeen"
++
++msgid "Setup.Replay$Play&Jump"
++msgstr "Ohita merkityt katkot"
++
++msgid "Setup.Replay$Pause at last mark"
++msgstr "Tauko viimeisessä merkinnässä"
++
+ msgid "Setup.Replay$Multi speed mode"
+ msgstr "Käytä toiston moninopeustilaa"
+ 
diff --git a/vdr-1.7.21-jumpplay.patch b/vdr-1.7.21-jumpplay.patch
new file mode 100644
index 0000000..1d62964
--- /dev/null
+++ b/vdr-1.7.21-jumpplay.patch
@@ -0,0 +1,249 @@
+diff -up vdr-1.7.21/config.c~ vdr-1.7.21/config.c
+--- vdr-1.7.21/config.c~	2011-10-19 20:51:42.842811197 +0300
++++ vdr-1.7.21/config.c	2011-10-19 20:53:39.408658278 +0300
+@@ -393,6 +393,9 @@ cSetup::cSetup(void)
+   MultiSpeedMode = 0;
+   ShowReplayMode = 0;
+   ResumeID = 0;
++  JumpPlay = 0;
++  PlayJump = 0;
++  PauseLastMark = 0;
+   CurrentChannel = -1;
+   CurrentVolume = MAXVOLUME;
+   CurrentDolby = 0;
+@@ -586,6 +589,9 @@ bool cSetup::Parse(const char *Name, con
+   else if (!strcasecmp(Name, "MultiSpeedMode"))      MultiSpeedMode     = atoi(Value);
+   else if (!strcasecmp(Name, "ShowReplayMode"))      ShowReplayMode     = atoi(Value);
+   else if (!strcasecmp(Name, "ResumeID"))            ResumeID           = atoi(Value);
++  else if (!strcasecmp(Name, "JumpPlay"))            JumpPlay           = atoi(Value);
++  else if (!strcasecmp(Name, "PlayJump"))            PlayJump           = atoi(Value);
++  else if (!strcasecmp(Name, "PauseLastMark"))       PauseLastMark      = atoi(Value);
+   else if (!strcasecmp(Name, "CurrentChannel"))      CurrentChannel     = atoi(Value);
+   else if (!strcasecmp(Name, "CurrentVolume"))       CurrentVolume      = atoi(Value);
+   else if (!strcasecmp(Name, "CurrentDolby"))        CurrentDolby       = atoi(Value);
+@@ -683,6 +689,9 @@ bool cSetup::Save(void)
+   Store("MultiSpeedMode",     MultiSpeedMode);
+   Store("ShowReplayMode",     ShowReplayMode);
+   Store("ResumeID",           ResumeID);
++  Store("JumpPlay",           JumpPlay);
++  Store("PlayJump",           PlayJump);
++  Store("PauseLastMark",      PauseLastMark);
+   Store("CurrentChannel",     CurrentChannel);
+   Store("CurrentVolume",      CurrentVolume);
+   Store("CurrentDolby",       CurrentDolby);
+diff -up vdr-1.7.21/config.h~ vdr-1.7.21/config.h
+--- vdr-1.7.21/config.h~	2011-10-19 20:51:42.843811290 +0300
++++ vdr-1.7.21/config.h	2011-10-19 20:53:38.807602345 +0300
+@@ -36,6 +36,8 @@
+ // plugins to work with newer versions of the core VDR as long as no
+ // VDR header files have changed.
+ 
++#define JUMPPLAYVERSNUM 100
++
+ #define LIEMIKUUTIO  132
+ 
+ #define MAXPRIORITY 99
+@@ -287,6 +289,9 @@ public:
+   int MultiSpeedMode;
+   int ShowReplayMode;
+   int ResumeID;
++  int JumpPlay;
++  int PlayJump;
++  int PauseLastMark;
+   int CurrentChannel;
+   int CurrentVolume;
+   int CurrentDolby;
+diff -up vdr-1.7.21/dvbplayer.c~ vdr-1.7.21/dvbplayer.c
+--- vdr-1.7.21/dvbplayer.c~	2010-03-07 16:24:26.000000000 +0200
++++ vdr-1.7.21/dvbplayer.c	2011-10-19 20:53:39.809695598 +0300
+@@ -204,6 +204,7 @@ private:
+   cNonBlockingFileReader *nonBlockingFileReader;
+   cRingBufferFrame *ringBuffer;
+   cPtsIndex ptsIndex;
++  cMarks marks;
+   cFileName *fileName;
+   cIndexFile *index;
+   cUnbufferedFile *replayFile;
+@@ -282,6 +283,7 @@ cDvbPlayer::cDvbPlayer(const char *FileN
+      delete index;
+      index = NULL;
+      }
++  marks.Load(FileName, framesPerSecond, isPesRecording);
+ }
+ 
+ cDvbPlayer::~cDvbPlayer()
+@@ -360,6 +362,10 @@ bool cDvbPlayer::Save(void)
+   if (index) {
+      int Index = ptsIndex.FindIndex(DeviceGetSTC());
+      if (Index >= 0) {
++        // set resume position to 0 if replay stops at the first mark
++        if (Setup.PlayJump && marks.First() &&
++            abs(Index - marks.First()->position) <= int(round(RESUMEBACKUP * framesPerSecond)))
++           Index = 0;
+         Index -= int(round(RESUMEBACKUP * framesPerSecond));
+         if (Index > 0)
+            Index = index->GetNextIFrame(Index, false);
+@@ -386,11 +392,26 @@ void cDvbPlayer::Action(void)
+ {
+   uchar *p = NULL;
+   int pc = 0;
++  bool cutIn = false;
++  int total = -1;
+ 
+   readIndex = Resume();
+   if (readIndex >= 0)
+      isyslog("resuming replay at index %d (%s)", readIndex, *IndexToHMSF(readIndex, true, framesPerSecond));
+ 
++  if (Setup.PlayJump && readIndex <= 0 && marks.First() && index) {
++     int Index = marks.First()->position;
++     uint16_t FileNumber;
++     off_t FileOffset;
++     if (index->Get(Index, &FileNumber, &FileOffset) &&
++         NextFile(FileNumber, FileOffset)) {
++        isyslog("PlayJump: start replay at first mark %d (%s)",
++                Index, *IndexToHMSF(Index, true, framesPerSecond));
++        readIndex = Index;
++        }
++     }
++
++  bool LastMarkPause = false;
+   nonBlockingFileReader = new cNonBlockingFileReader;
+   int Length = 0;
+   bool Sleep = false;
+@@ -415,7 +436,7 @@ void cDvbPlayer::Action(void)
+ 
+           // Read the next frame from the file:
+ 
+-          if (playMode != pmStill && playMode != pmPause) {
++          if (playMode != pmStill && playMode != pmPause && !LastMarkPause) {
+              if (!readFrame && (replayFile || readIndex >= 0)) {
+                 if (!nonBlockingFileReader->Reading()) {
+                    if (!SwitchToPlayFrame && (playMode == pmFast || (playMode == pmSlow && playDir == pdBackward))) {
+@@ -452,6 +473,44 @@ void cDvbPlayer::Action(void)
+                    else if (index) {
+                       uint16_t FileNumber;
+                       off_t FileOffset;
++                      if (Setup.PlayJump || Setup.PauseLastMark) {
++                         // check for end mark - jump to next mark or pause
++                         readIndex++;
++                         marks.Update();
++                         cMark *m = marks.Get(readIndex);
++                         if (m && (m->Index() & 0x01) != 0) {
++                            m = marks.Next(m);
++                            int Index;
++                            if (m)
++                               Index = m->position;
++                            else if (Setup.PauseLastMark) {
++                               // pause at last mark
++                               isyslog("PauseLastMark: pause at position %d (%s)",
++                                       readIndex, *IndexToHMSF(readIndex, true, framesPerSecond));
++                               LastMarkPause = true;
++                               Index = -1;
++                               }
++                            else if (total == index->Last())
++                               // at last mark jump to end of recording
++                               Index = index->Last() - 1;
++                            else
++                               // jump but stay off end of live-recordings
++                               Index = index->GetNextIFrame(index->Last() - int(round(MAXSTUCKATEOF * framesPerSecond)), true);
++                            // don't jump in edited recordings
++                            if (Setup.PlayJump && Index > readIndex &&
++                                Index > index->GetNextIFrame(readIndex, true)) {
++                               isyslog("PlayJump: %d frames to %d (%s)",
++                                       Index - readIndex, Index,
++                                       *IndexToHMSF(Index, true, framesPerSecond));
++                               readIndex = Index;
++                               cutIn = true;
++                               }
++                            }
++                         readIndex--;
++                      }
++                      // for detecting growing length of live-recordings
++                      if (index->Get(readIndex + 1, &FileNumber, &FileOffset, &readIndependent) && readIndependent)
++                         total = index->Last();
+                       if (index->Get(readIndex + 1, &FileNumber, &FileOffset, &readIndependent, &Length) && NextFile(FileNumber, FileOffset))
+                          readIndex++;
+                       else
+@@ -496,6 +555,13 @@ void cDvbPlayer::Action(void)
+              // Store the frame in the buffer:
+ 
+              if (readFrame) {
++                if (cutIn) {
++                   if (isPesRecording)
++                      cRemux::SetBrokenLink(readFrame->Data(), readFrame->Count());
++                   else
++                      TsSetTeiOnBrokenPackets(readFrame->Data(), readFrame->Count());
++                   cutIn = false;
++                   }
+                 if (ringBuffer->Put(readFrame))
+                    readFrame = NULL;
+                 else
+@@ -561,8 +627,13 @@ void cDvbPlayer::Action(void)
+                 p = NULL;
+                 }
+              }
+-          else
++          else {
++             if (LastMarkPause) {
++                LastMarkPause = false;
++                playMode = pmPause;
++                }
+              Sleep = true;
++             }
+ 
+           // Handle hitting begin/end of recording:
+ 
+diff -up vdr-1.7.21/menu.c~ vdr-1.7.21/menu.c
+--- vdr-1.7.21/menu.c~	2011-10-19 20:51:42.854812316 +0300
++++ vdr-1.7.21/menu.c	2011-10-19 20:53:38.486572473 +0300
+@@ -3408,6 +3408,9 @@ cMenuSetupReplay::cMenuSetupReplay(void)
+   Add(new cMenuEditBoolItem(tr("Setup.Replay$Multi speed mode"), &data.MultiSpeedMode));
+   Add(new cMenuEditBoolItem(tr("Setup.Replay$Show replay mode"), &data.ShowReplayMode));
+   Add(new cMenuEditIntItem(tr("Setup.Replay$Resume ID"), &data.ResumeID, 0, 99));
++  Add(new cMenuEditBoolItem(tr("Setup.Replay$Jump&Play"), &data.JumpPlay));
++  Add(new cMenuEditBoolItem(tr("Setup.Replay$Play&Jump"), &data.PlayJump));
++  Add(new cMenuEditBoolItem(tr("Setup.Replay$Pause at last mark"), &data.PauseLastMark));
+ }
+ 
+ void cMenuSetupReplay::Store(void)
+@@ -5007,8 +5010,10 @@ void cReplayControl::MarkToggle(void)
+         ShowTimed(2);
+         bool Play, Forward;
+         int Speed;
+-        if (GetReplayMode(Play, Forward, Speed) && !Play)
++        if (GetReplayMode(Play, Forward, Speed) && !Play) {
+            Goto(Current, true);
++           displayFrames = true;
++           }
+         }
+      marks.Save();
+      }
+@@ -5021,8 +5026,17 @@ void cReplayControl::MarkJump(bool Forwa
+      if (GetIndex(Current, Total)) {
+         cMark *m = Forward ? marks.GetNext(Current) : marks.GetPrev(Current);
+         if (m) {
+-           Goto(m->Position(), true);
+-           displayFrames = true;
++           bool Play2, Forward2;
++           int Speed;
++           if (Setup.JumpPlay && GetReplayMode(Play2, Forward2, Speed) &&
++               Play2 && Forward && m->position < Total - SecondsToFrames(3, FramesPerSecond())) {
++              Goto(m->position);
++              Play();
++              }
++           else {
++              Goto(m->position, true);
++              displayFrames = true;
++              }
+            }
+         }
+      }
+@@ -5078,7 +5092,7 @@ void cReplayControl::EditTest(void)
+      if (!m)
+         m = marks.GetNext(Current);
+      if (m) {
+-        if ((m->Index() & 0x01) != 0)
++        if ((m->Index() & 0x01) != 0 && !Setup.PlayJump)
+            m = marks.Next(m);
+         if (m) {
+            Goto(m->Position() - SecondsToFrames(3, FramesPerSecond()));
diff --git a/vdr-1.7.21-msgidbugs.patch b/vdr-1.7.21-msgidbugs.patch
new file mode 100644
index 0000000..cc168f8
--- /dev/null
+++ b/vdr-1.7.21-msgidbugs.patch
@@ -0,0 +1,12 @@
+diff -up vdr-1.7.21/i18n-to-gettext.pl~ vdr-1.7.21/i18n-to-gettext.pl
+--- vdr-1.7.21/i18n-to-gettext.pl~	2009-10-18 17:07:49.000000000 +0300
++++ vdr-1.7.21/i18n-to-gettext.pl	2011-10-16 20:32:19.878167497 +0300
+@@ -90,7 +90,7 @@ $TITLE = "VDR plugin language source fil
+ $COPYRIGHT = "2007 Klaus Schmidinger <kls\@tvdr.de>";
+ $PACKAGE = "VDR";
+ $VERSION = "1.5.7";
+-$MSGIDBUGS = "" || die "enter your email address here"; # escape the '@', as in "user\@domain.tld"
++$MSGIDBUGS = "<vdr\@linuxtv.org>";
+ $LANGUAGETEAM = "<vdr\@linuxtv.org>";
+ 
+ # Gettext environment:
diff --git a/vdr-1.6.0-paths.patch b/vdr-1.7.21-paths.patch
similarity index 62%
rename from vdr-1.6.0-paths.patch
rename to vdr-1.7.21-paths.patch
index e7bdeb7..f43d08f 100644
--- a/vdr-1.6.0-paths.patch
+++ b/vdr-1.7.21-paths.patch
@@ -1,18 +1,6 @@
-diff -up vdr-1.6.0/PLUGINS/src/sky/README~ vdr-1.6.0/PLUGINS/src/sky/README
---- vdr-1.6.0/PLUGINS/src/sky/README~	2007-08-12 14:08:16.000000000 +0300
-+++ vdr-1.6.0/PLUGINS/src/sky/README	2008-03-23 16:24:18.000000000 +0200
-@@ -37,7 +37,7 @@ derived from the actual channel data and
- data for each channel can be found (see below). Copy this file to your
- plugins config directory, in a subdirectory named 'sky', as in
- 
--/video/plugins/sky/channels.conf.sky
-+__CONFIGDIR__/plugins/sky/channels.conf.sky
- 
- The Sky EPG is available on the Internet at http://www.bleb.org.
- The Perl script getskyepg.pl extracts the EPG data from these pages
-diff -up vdr-1.6.0/epg2html.pl~ vdr-1.6.0/epg2html.pl
---- vdr-1.6.0/epg2html.pl~	2006-04-17 15:19:08.000000000 +0300
-+++ vdr-1.6.0/epg2html.pl	2008-03-23 16:24:07.000000000 +0200
+diff -up vdr-1.7.21/epg2html.pl~ vdr-1.7.21/epg2html.pl
+--- vdr-1.7.21/epg2html.pl~	2006-04-17 15:19:08.000000000 +0300
++++ vdr-1.7.21/epg2html.pl	2011-10-16 22:20:16.199200873 +0300
 @@ -2,12 +2,12 @@
  
  # A simple EPG to HTML converter
@@ -23,14 +11,26 @@ diff -up vdr-1.6.0/epg2html.pl~ vdr-1.6.0/epg2html.pl
  # plus an 'index.htm' file. All output files are written into the current
  # directory.
  #
--# Usage: epg2html < /video/epg.data
-+# Usage: epg2html < __CACHEDIR__/epg.data
+-# Usage: epg2html.pl < /video/epg.data
++# Usage: epg2html.pl < __CACHEDIR__/epg.data
  #
  # See the main source file 'vdr.c' for copyright information and
  # how to reach the author.
-diff -up vdr-1.6.0/vdr.1~ vdr-1.6.0/vdr.1
---- vdr-1.6.0/vdr.1~	2008-03-09 18:07:06.000000000 +0200
-+++ vdr-1.6.0/vdr.1	2008-03-23 16:24:04.000000000 +0200
+diff -up vdr-1.7.21/newplugin~ vdr-1.7.21/newplugin
+--- vdr-1.7.21/newplugin~	2011-02-27 12:06:06.000000000 +0200
++++ vdr-1.7.21/newplugin	2011-10-16 22:22:23.996772653 +0300
+@@ -24,7 +24,7 @@ $PLUGIN_VERSION = "0.0.1";
+ $PLUGIN_DESCRIPTION = "Enter description for '$PLUGIN_NAME' plugin";
+ $PLUGIN_MAINENTRY = $PLUGIN_CLASS;
+ 
+-$PLUGINS_SRC = "PLUGINS/src";
++$PLUGINS_SRC = ".";
+ 
+ $README = qq
+ {This is a "plugin" for the Video Disk Recorder (VDR).
+diff -up vdr-1.7.21/vdr.1~ vdr-1.7.21/vdr.1
+--- vdr-1.7.21/vdr.1~	2011-08-15 15:28:54.000000000 +0300
++++ vdr-1.7.21/vdr.1	2011-10-16 22:22:23.006682907 +0300
 @@ -45,7 +45,7 @@ Send Dolby Digital audio to stdin of com
  .TP
  .BI \-c\  dir ,\ \-\-config= dir
@@ -40,7 +40,7 @@ diff -up vdr-1.6.0/vdr.1~ vdr-1.6.0/vdr.1
  .TP
  .B \-d, \-\-daemon
  Run in daemon mode (implies \-\-no\-kbd).
-@@ -56,7 +56,7 @@ There may be several \fB\-D\fR options (
+@@ -61,7 +61,7 @@ The program will return immediately afte
  .TP
  .BI \-E\  file ,\ \-\-epgfile= file
  Write the EPG data into the given \fIfile\fR
@@ -49,7 +49,7 @@ diff -up vdr-1.6.0/vdr.1~ vdr-1.6.0/vdr.1
  Use \fB\-E\-\fR to disable this.
  If \fIfile\fR is a directory, the file \fIepg.data\fR
  will be created in that directory.
-@@ -80,7 +80,7 @@ If logging should be done to LOG_LOCAL\f
+@@ -114,7 +114,7 @@ If logging should be done to LOG_LOCAL\f
  LOG_USER, add '.n' to LEVEL, as in 3.7 (n=0..7).
  .TP
  .BI \-L\  dir ,\ \-\-lib= dir
@@ -58,7 +58,7 @@ diff -up vdr-1.6.0/vdr.1~ vdr-1.6.0/vdr.1
  There can be several \fB\-L\fR options with different \fIdir\fR values.
  Each of them will apply to the \fB\-P\fR options following it.
  .TP
-@@ -151,7 +151,7 @@ with VFAT file systems.
+@@ -190,7 +190,7 @@ with VFAT file systems.
  .TP
  .BI \-v\  dir ,\ \-\-video= dir
  Use \fIdir\fR as video directory.
@@ -67,10 +67,10 @@ diff -up vdr-1.6.0/vdr.1~ vdr-1.6.0/vdr.1
  .TP
  .B \-V, \-\-version
  Print version information and exit.
-diff -up vdr-1.6.0/vdr.5~ vdr-1.6.0/vdr.5
---- vdr-1.6.0/vdr.5~	2008-03-09 17:46:57.000000000 +0200
-+++ vdr-1.6.0/vdr.5	2008-03-23 16:24:02.000000000 +0200
-@@ -506,7 +506,7 @@ The file \fIsetup.conf\fR contains the b
+diff -up vdr-1.7.21/vdr.5~ vdr-1.7.21/vdr.5
+--- vdr-1.7.21/vdr.5~	2011-08-21 17:06:50.000000000 +0300
++++ vdr-1.7.21/vdr.5	2011-10-16 22:22:23.465724517 +0300
+@@ -659,7 +659,7 @@ The file \fIsetup.conf\fR contains the b
  Each line contains one option in the format "Name = Value".
  See the MANUAL file for a description of the available options.
  .SS THEMES
@@ -79,19 +79,19 @@ diff -up vdr-1.6.0/vdr.5~ vdr-1.6.0/vdr.5
  color theme definitions for the various skins. In the actual file names \fI<skin>\fR
  will be replaced by the name if the skin this theme belongs to, and \fI<theme>\fR
  will be the name of this theme.
-diff -up vdr-1.6.0/vdr.c~ vdr-1.6.0/vdr.c
---- vdr-1.6.0/vdr.c~	2008-03-14 15:22:39.000000000 +0200
-+++ vdr-1.6.0/vdr.c	2008-03-23 16:23:59.000000000 +0200
-@@ -403,7 +403,7 @@ int main(int argc, char *argv[])
-                "                           there may be several -D options (default: all DVB\n"
+diff -up vdr-1.7.21/vdr.c~ vdr-1.7.21/vdr.c
+--- vdr-1.7.21/vdr.c~	2011-08-15 15:42:39.000000000 +0300
++++ vdr-1.7.21/vdr.c	2011-10-16 22:22:21.508547111 +0300
+@@ -427,7 +427,7 @@ int main(int argc, char *argv[])
                 "                           devices will be used)\n"
+                "            --edit=REC     cut recording REC and exit\n"
                 "  -E FILE,  --epgfile=FILE write the EPG data into the given FILE (default is\n"
 -               "                           '%s' in the video directory)\n"
 +               "                           __CACHEDIR__/%s)\n"
                 "                           '-E-' disables this\n"
                 "                           if FILE is a directory, the default EPG file will be\n"
                 "                           created in that directory\n"
-@@ -560,7 +560,7 @@ int main(int argc, char *argv[])
+@@ -593,7 +593,7 @@ int main(int argc, char *argv[])
       ConfigDirectory = DEFAULTCONFDIR;
  
    cPlugin::SetConfigDirectory(ConfigDirectory);
@@ -99,8 +99,8 @@ diff -up vdr-1.6.0/vdr.c~ vdr-1.6.0/vdr.c
 +  cThemes::SetThemesDirectory("__VARDIR__/themes");
  
    Setup.Load(AddDirectory(ConfigDirectory, "setup.conf"));
-   if (!(Sources.Load(AddDirectory(ConfigDirectory, "sources.conf"), true, true) &&
-@@ -595,7 +595,7 @@ int main(int argc, char *argv[])
+   Sources.Load(AddDirectory(ConfigDirectory, "sources.conf"), true, true);
+@@ -627,7 +627,7 @@ int main(int argc, char *argv[])
          EpgDataFileName = DEFAULTEPGDATAFILENAME;
          }
       else if (*EpgDataFileName != '/' && *EpgDataFileName != '.')
@@ -109,15 +109,3 @@ diff -up vdr-1.6.0/vdr.c~ vdr-1.6.0/vdr.c
       if (EpgDirectory)
          cSchedules::SetEpgDataFileName(AddDirectory(EpgDirectory, EpgDataFileName));
       else
-diff -up vdr-1.6.0/newplugin~ vdr-1.6.0/newplugin
---- vdr-1.6.0/newplugin~	2008-01-13 15:00:23.000000000 +0200
-+++ vdr-1.6.0/newplugin	2008-03-23 16:23:49.000000000 +0200
-@@ -24,7 +24,7 @@ $PLUGIN_VERSION = "0.0.1";
- $PLUGIN_DESCRIPTION = "Enter description for '$PLUGIN_NAME' plugin";
- $PLUGIN_MAINENTRY = $PLUGIN_CLASS;
- 
--$PLUGINS_SRC = "PLUGINS/src";
-+$PLUGINS_SRC = ".";
- 
- $README = qq
- {This is a "plugin" for the Video Disk Recorder (VDR).
diff --git a/vdr-1.7.21-plugin-missing.patch b/vdr-1.7.21-plugin-missing.patch
new file mode 100644
index 0000000..011a0f1
--- /dev/null
+++ b/vdr-1.7.21-plugin-missing.patch
@@ -0,0 +1,25 @@
+diff -up vdr-1.7.21/plugin.c~ vdr-1.7.21/plugin.c
+--- vdr-1.7.21/plugin.c~	2010-01-06 13:36:46.000000000 +0200
++++ vdr-1.7.21/plugin.c	2011-10-17 21:18:07.432419915 +0300
+@@ -317,6 +317,12 @@ void cPluginManager::AddPlugin(const cha
+   char *p = strchr(s, ' ');
+   if (p)
+      *p = 0;
++  struct stat st;
++  if (stat (cString::sprintf("%s/%s%s%s%s", directory, LIBVDR_PREFIX, s, SO_INDICATOR, APIVERSION), &st) && errno == ENOENT) {
++     esyslog("WARN: missing plugin '%s'", s);
++     fprintf(stderr, "vdr: missing plugin '%s'\n", s);
++     }
++  else
+   dlls.Add(new cDll(cString::sprintf("%s/%s%s%s%s", directory, LIBVDR_PREFIX, s, SO_INDICATOR, APIVERSION), Args));
+   free(s);
+ }
+@@ -325,7 +331,7 @@ bool cPluginManager::LoadPlugins(bool Lo
+ {
+   for (cDll *dll = dlls.First(); dll; dll = dlls.Next(dll)) {
+       if (!dll->Load(Log))
+-         return false;
++         /*return false*/;
+       }
+   return true;
+ }
diff --git a/vdr-1.7.21-timercmd.patch b/vdr-1.7.21-timercmd.patch
new file mode 100644
index 0000000..8d31543
--- /dev/null
+++ b/vdr-1.7.21-timercmd.patch
@@ -0,0 +1,107 @@
+diff -up vdr-1.7.21/config.c~ vdr-1.7.21/config.c
+--- vdr-1.7.21/config.c~	2011-10-18 00:02:51.394223695 +0300
++++ vdr-1.7.21/config.c	2011-10-18 00:12:30.255855027 +0300
+@@ -211,6 +211,7 @@ bool cNestedItemList::Save(void)
+ cNestedItemList Folders;
+ cNestedItemList Commands;
+ cNestedItemList RecordingCommands;
++cNestedItemList TimerCommands;
+ 
+ // --- cSVDRPhosts -----------------------------------------------------------
+ 
+diff -up vdr-1.7.21/config.h~ vdr-1.7.21/config.h
+--- vdr-1.7.21/config.h~	2011-10-18 00:02:51.438227770 +0300
++++ vdr-1.7.21/config.h	2011-10-18 00:12:30.702896536 +0300
+@@ -187,6 +187,7 @@ public:
+ extern cNestedItemList Folders;
+ extern cNestedItemList Commands;
+ extern cNestedItemList RecordingCommands;
++extern cNestedItemList TimerCommands;
+ extern cSVDRPhosts SVDRPhosts;
+ 
+ class cSetupLine : public cListObject {
+diff -up vdr-1.7.21/menu.c~ vdr-1.7.21/menu.c
+--- vdr-1.7.21/menu.c~	2011-10-18 00:02:51.428226843 +0300
++++ vdr-1.7.21/menu.c	2011-10-18 00:12:29.520786768 +0300
+@@ -1142,6 +1142,7 @@ void cTimerEntry::SetDiskStatus(char Dis
+ 
+ class cMenuTimers : public cOsdMenu {
+ private:
++  eOSState Commands(eKeys Key = kNone);
+   int helpKeys;
+   eOSState Edit(void);
+   eOSState New(void);
+@@ -1259,6 +1260,53 @@ eOSState cMenuTimers::Delete(void)
+   return osContinue;
+ }
+ 
++#define CHECK_2PTR_NULL(x_,y_) ((x_)? ((y_)? y_:""):"")
++
++eOSState cMenuTimers::Commands(eKeys Key)
++{
++  if (HasSubMenu() || Count() == 0)
++     return osContinue;
++  cTimer *ti = CurrentTimer();
++  if (ti) {
++     char *parameter = NULL;
++     const cEvent *pEvent = ti->Event();
++     int iRecNumber=0;
++
++     if(!pEvent) {
++        Timers.SetEvents();
++        pEvent = ti->Event();
++     }
++     if(pEvent) {
++// create a dummy recording to get the real filename
++        cRecording *rc_dummy = new cRecording(ti, pEvent);
++        Recordings.Load();
++        cRecording *rc = Recordings.GetByName(rc_dummy->FileName());
++
++        delete rc_dummy;
++        if(rc)
++           iRecNumber=rc->Index() + 1;
++     }
++//Parameter format TimerNumber 'ChannelId' Start Stop 'Titel' 'Subtitel' 'file' RecNumer
++//                 1           2           3     4    5       6          7      8
++     asprintf(&parameter, "%d '%s' %d %d '%s' '%s' '%s' %d", ti->Index(),
++                                                             *ti->Channel()->GetChannelID().ToString(),
++                                                             (int)ti->StartTime(),
++                                                             (int)ti->StopTime(),
++                                                             CHECK_2PTR_NULL(pEvent, pEvent->Title()),
++                                                             CHECK_2PTR_NULL(pEvent, pEvent->ShortText()),
++                                                             ti->File(),
++                                                             iRecNumber);
++     isyslog("timercmd: %s", parameter);
++     cMenuCommands *menu;
++     eOSState state = AddSubMenu(menu = new cMenuCommands(tr("Timer commands"), &TimerCommands, parameter));
++     free(parameter);
++     if (Key != kNone)
++        state = menu->ProcessKey(Key);
++     return state;
++     }
++  return osContinue;
++}
++
+ eOSState cMenuTimers::Info(void)
+ {
+   if (HasSubMenu() || Count() == 0)
+@@ -1346,6 +1394,8 @@ eOSState cMenuTimers::ProcessKey(eKeys K
+        case kInfo:
+        case kBlue:   return Info();
+                      break;
++       case k1...k9: return Commands(Key);
++       case k0:      return (TimerCommands.Count()? Commands():osContinue);
+        default: break;
+        }
+      }
+diff -up vdr-1.7.21/vdr.c~ vdr-1.7.21/vdr.c
+--- vdr-1.7.21/vdr.c~	2011-10-18 00:02:51.284213503 +0300
++++ vdr-1.7.21/vdr.c	2011-10-18 00:12:31.901007794 +0300
+@@ -602,6 +602,7 @@ int main(int argc, char *argv[])
+   Timers.Load(AddDirectory(ConfigDirectory, "timers.conf"));
+   Commands.Load(AddDirectory(ConfigDirectory, "commands.conf"));
+   RecordingCommands.Load(AddDirectory(ConfigDirectory, "reccmds.conf"));
++  TimerCommands.Load(AddDirectory(ConfigDirectory, "timercmds.conf"));
+   SVDRPhosts.Load(AddDirectory(ConfigDirectory, "svdrphosts.conf"), true);
+   Keys.Load(AddDirectory(ConfigDirectory, "remote.conf"));
+   KeyMacros.Load(AddDirectory(ConfigDirectory, "keymacros.conf"), true);
diff --git a/vdr-dvbhddevice.conf b/vdr-dvbhddevice.conf
new file mode 100644
index 0000000..98a0973
--- /dev/null
+++ b/vdr-dvbhddevice.conf
@@ -0,0 +1,5 @@
+# Configuration snippet for vdr-dvbhddevice                          -*- sh -*-
+#
+# Add command line options to pass to the skincurses plugin to PLUGIN_OPTIONS.
+
+PLUGIN_OPTIONS=""
diff --git a/vdr-dvbsddevice.conf b/vdr-dvbsddevice.conf
new file mode 100644
index 0000000..263b2d6
--- /dev/null
+++ b/vdr-dvbsddevice.conf
@@ -0,0 +1,5 @@
+# Configuration snippet for vdr-dvbsddevice                          -*- sh -*-
+#
+# Add command line options to pass to the skincurses plugin to PLUGIN_OPTIONS.
+
+PLUGIN_OPTIONS=""
diff --git a/vdr.spec b/vdr.spec
index 0598d75..050ddc2 100644
--- a/vdr.spec
+++ b/vdr.spec
@@ -20,80 +20,63 @@
 %global vdr_user  vdr
 %global vdr_group video
 # From APIVERSION in config.h
-%global apiver    1.6.0
+%global apiver    1.7.21
 
 Name:           vdr
-Version:        1.6.0
-Release:        41%{?dist}
+Version:        1.7.21
+Release:        1%{?dist}
 Summary:        Video Disk Recorder
 
-Group:          Applications/Multimedia
 License:        GPLv2+
 URL:            http://www.tvdr.de/
-Source0:        ftp://ftp.tvdr.de/vdr/%{name}-%{version}.tar.bz2
+Source0:        ftp://ftp.tvdr.de/vdr/Developer/%{name}-%{version}.tar.bz2
 Source1:        %{name}.init
 Source2:        %{name}.sysconfig
 Source3:        %{name}.sudoers
-# TODO
 Source4:        %{name}-udev.rules
 Source5:        %{name}-reccmds.conf
 Source6:        %{name}-commands.conf
 Source7:        %{name}-runvdr.sh
+Source8:        %{name}-dvbsddevice.conf
 Source9:        %{name}-config.sh
 Source10:       %{name}-README.package
 Source11:       %{name}-skincurses.conf
-Source12:       %{name}-sky.conf
+Source12:       %{name}-dvbhddevice.conf
 Source13:       %{name}-timercmds.conf
 Source14:       %{name}-shutdown.sh
 Source15:       %{name}-moveto.sh
 Source16:       %{name}-CHANGES.package.old
 Source17:       %{name}.macros
+Source18:       http://cdn.debian.net/debian/pool/main/v/vdr/vdr_1.7.20-1.debian.tar.bz2
 Patch0:         %{name}-channel+epg.patch
-# TODO
 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.6.0-liemikuutio-1.27.diff.gz
-Patch3:         %{name}-1.6.0-scriptnames.patch
-Patch4:         %{name}-1.6.0-paths.patch
-Patch5:         %{name}-1.5.18-use-pkgconfig.patch
+Patch2:         http://www.saunalahti.fi/~rahrenbe/vdr/patches/vdr-1.7.21-liemikuutio-1.32.patch.gz
+# Extracted from http://copperhead.htpc-forum.de/downloads/extensionpatch/extpngvdr1.7.21v1.diff.gz
+Patch3:         %{name}-1.7.21-plugin-missing.patch
+Patch4:         %{name}-1.7.21-paths.patch
+Patch5:         http://toms-cafe.de/vdr/download/vdr-timer-info-0.5-1.7.13.diff
 # http://article.gmane.org/gmane.linux.vdr/36097
 Patch6:         %{name}-1.5.18-syncearly.patch
-# http://projects.vdr-developer.org/projects/plg-ttxtsubs/repository/raw/patches/vdr-1.6.0-2-ttxtsubs.patch?rev=release%2Fv0.1.0
-Patch7:         %{name}-1.6.0-2-ttxtsubs.patch
-Patch8:         %{name}-1.6.0-man-section.patch
+Patch7:         http://projects.vdr-developer.org/projects/plg-ttxtsubs/repository/revisions/master/raw/patches/vdr-1.7.21-ttxtsubs.patch
+# Extracted from http://copperhead.htpc-forum.de/downloads/extensionpatch/extpngvdr1.7.21v1.diff.gz
+# Original at http://toms-cafe.de/vdr/download/vdr-jumpplay-1.0-1.7.6.diff
+Patch8:        %{name}-1.7.21-jumpplay.patch
 # http://www.udo-richter.de/vdr/patches.en.html#hlcutter
-Patch9:         http://www.udo-richter.de/vdr/files/vdr-1.5.13-hlcutter-0.2.2.diff
-# Sent to hlcutter upstream 2009-06-15
-Patch10:        %{name}-1.6.0-hlcutter-0.2.2-finnish.patch
+Patch9:         http://www.udo-richter.de/vdr/files/vdr-1.7.14-hlcutter-0.2.2.diff
+# Sent to hlcutter upstream 2009-06-15 and 2011-10-16
+Patch10:        %{name}-1.7.21-hlcutter-0.2.2-finnish.patch
 # http://article.gmane.org/gmane.linux.vdr/43590
 Patch11:        MainMenuHooks-v1_0_1.diff.gz
-# timercmd and progressbar-support from
-# http://winni.vdr-developer.org/epgsearch/downloads/vdr-epgsearch-0.9.24.tgz
-Patch12:        timercmd-0.1_1.6.0.diff
-Patch13:        %{name}-1.5.17-progressbar-support-0.0.1.diff
-Patch14:        %{name}-1.6.0-includes+pkgconfig.patch
-Patch15:        %{name}-1.6.0-fedora-pkgconfig.patch
-Patch16:        %{name}-1.6.0-dxr3-subtitles.patch
-Patch17:        http://toms-cafe.de/vdr/download/vdr-timer-info-0.5-1.5.15.diff
-Patch18:        ftp://ftp.tvdr.de/vdr/Developer/vdr-1.6.0-1.diff
-Patch19:        ftp://ftp.tvdr.de/vdr/Developer/vdr-1.6.0-2.diff
-Patch20:        %{name}-1.6.0-remove-dvb-abi-check.patch
-Patch21:        http://www.saunalahti.fi/~rahrenbe/vdr/patches/vdr-1.6.0-subtitles-button.patch.gz
-Patch22:        http://www.saunalahti.fi/~rahrenbe/vdr/patches/vdr-1.6.0-cap_sys_nice.patch.gz
-Patch23:        http://www.saunalahti.fi/~rahrenbe/vdr/patches/vdr-1.6.0-ionice.patch.gz
-# From openSUSE's vdr-1.6.0-62.3, to fix build with gcc 4.4:
-# http://download.opensuse.org/repositories/vdr/
-Patch24:        %{name}-1.6.0-const.diff
-Patch25:        http://toms-cafe.de/vdr/download/vdr-jumpplay-1.0-1.6.0.diff
-Patch26:        %{name}-jumpplay-1.0-1.6.0-finnish.patch
-# http://projects.vdr-developer.org/git/?p=vdr-plugin-epgsearch.git;a=blob;f=patches/vdr.epgsearch-exttimeredit-0.0.2.diff
-# Modified so that it applies on top of our other patches
-Patch27:        %{name}-1.6.0-epgsearch-exttimeredit-0.0.2.diff
-# https://bugzilla.redhat.com/show_bug.cgi?id=538604, upstreamed 2009-11-22
-Patch28:        %{name}-1.6.0-sky-lirc-device.patch
-Patch29:        %{name}-1.6.0-msgidbugs.patch
-# Backport from VDR 1.7.x
-Patch30:        %{name}-1.6.0-v4l2.patch
-BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+# http://projects.vdr-developer.org/git/vdr-plugin-epgsearch.git/plain/patches/timercmd-0.1_1.7.17.diff
+# Modified so that it applies over the timer-info patch
+Patch12:        %{name}-1.7.21-timercmd.patch
+Patch13:        http://projects.vdr-developer.org/git/vdr-plugin-epgsearch.git/plain/patches/vdr-1.5.17-progressbar-support-0.0.1.diff
+# Sent upstream 2011-10-16
+Patch14:        0002-Add-and-install-pkg-config-file.patch
+Patch15:        %{name}-1.7.21-fedora-pkgconfig.patch
+Patch16:        %{name}-1.7.21-jumpplay-finnish.patch
+Patch17:        http://projects.vdr-developer.org/git/vdr-plugin-epgsearch.git/plain/patches/vdr.epgsearch-exttimeredit-0.0.2.diff
+Patch18:        %{name}-1.7.21-msgidbugs.patch
 
 BuildRequires:  libjpeg-devel
 BuildRequires:  libcap-devel
@@ -123,6 +106,7 @@ Provides:       vdr(abi)%{?_isa} = %{apiver}
 Provides:       vdr(abi) = %{apiver}
 %endif
 Obsoletes:      vdr-subtitles <= 0.5.0
+Obsoletes:      vdr-sky < 1.7.11
 
 %description
 VDR implements a complete digital set-top-box and video recorder.
@@ -132,8 +116,6 @@ is required to run VDR.
 
 %package        devel
 Summary:        Development files for VDR
-Group:          Development/Libraries
-Requires:       pkgconfig
 Requires:       gettext
 Provides:       vdr-devel(api) = %{apiver}
 
@@ -142,55 +124,52 @@ Provides:       vdr-devel(api) = %{apiver}
 
 %package        docs
 Summary:        Developer documentation for VDR
-Group:          Documentation
-%if 0%{?fedora} > 9 || 0%{?rhel} > 5
 BuildArch:      noarch
-%endif
 
 %description    docs
 %{summary}.
 
+%package        dvbhddevice
+Summary:        VDR output device plugin for TechnoTrend S2-6400 DVB cards
+Requires:       vdr(abi)%{?_isa} = %{apiver}
+
+%description    dvbhddevice
+The dvbhddevice plugin implements a VDR output device for the "Full
+Featured TechnoTrend S2-6400" DVB cards.
+
+%package        dvbsddevice
+Summary:        VDR output device plugin for full featured SD DVB cards
+Requires:       vdr(abi)%{?_isa} = %{apiver}
+# To get this subpackage pulled in on upgrades
+Obsoletes:      vdr < 1.7.11
+
+%description    dvbsddevice
+The dvbsddevice plugin implements the output device for the "Full
+Featured" DVB cards based on the TechnoTrend/Fujitsu-Siemens design.
+
 %package        skincurses
 Summary:        Shell window skin plugin for VDR
-Group:          Applications/Multimedia
-%if %{with plugins}
 BuildRequires:  ncurses-devel
-%endif # plugins
 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.
 
-%package        sky
-Summary:        Sky Digibox plugin for VDR
-Group:          Applications/Multimedia
-Requires:       vdr(abi)%{?_isa} = %{apiver}
-Requires:       wget
-Requires:       /usr/bin/logger
-
-%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
+%setup -q -a 18
 %patch0 -p1
 %patch1 -p1
-# TODO: does not apply
-#patch -F 0 -i debian/patches/02_plugin_missing.dpatch
 # sort_options would be nice, but it conflicts with channel+epg which is nicer
 #patch -F 0 -i debian/patches/02_sort_options.dpatch
 patch -F 0 -i debian/patches/06_recording_scan_speedup.dpatch
 patch -F 2 -i debian/patches/07_blockify_define.dpatch
-patch -F 0 -i debian/patches/10_livelock.dpatch
-patch -F 0 -i debian/patches/11_atsc.dpatch
-echo "DEFINES += -DHAVE_ATSC" >> Makefile
+# TODO: does not apply
+#patch -F 0 -i debian/patches/10_livelock.dpatch
+# TODO: does not apply
+#patch -F 0 -i debian/patches/11_atsc.dpatch
+#echo "DEFINES += -DHAVE_ATSC" >> Makefile
 patch -F 0 -i debian/patches/19_debian_osdbase_maxitems.dpatch
 %patch2 -p1
 %patch3 -p1
@@ -200,37 +179,26 @@ sed \
   -e 's|__PLUGINDIR__|%{plugindir}|' \
   -e 's|__VARDIR__|%{vardir}|'       \
   -e 's|__VIDEODIR__|%{videodir}|'   \
-  %{PATCH4} | patch -p1 -F 1
+  %{PATCH4} | patch -F 0 -p1
 %patch5 -p1
-%patch6 -p0
+# TODO: does not apply
+#patch6 -p0
 %patch7 -p1
 %patch8 -p1
-# fuzz=3 so it applies on top of liemikuutio patch (menu.c)
-%patch9 -p0 -F 3
+%patch9 -p1
 %patch10 -p1
 %patch11 -p1 -F 2
-# timer-info patch needs to come before timercmd patch to avoid conflicts
-%patch17 -p1
-%patch12 -p1 -F 2
-%patch13 -p1
-%patch14 -p0 -F 2
+%patch12 -p1
+# TODO: does not apply
+#patch13 -p1
+%patch14 -p1
 %patch15 -p0
-%patch16 -p0
+%patch16 -p1
+# TODO: build failure
+#patch17 -p0 -F 3
 %patch18 -p1
-%patch19 -p1
-%patch20 -p0
-%patch21 -p1
-%patch22 -p1
-%patch23 -p1
-%patch24 -p1
-%patch25 -p1 -F 2
-%patch26 -p1
-%patch27 -p1
-%patch28 -p1
-%patch29 -p1
-%patch30 -p1
-
-for f in CONTRIBUTORS HISTORY* UPDATE-1.4.0 README.{jumpplay,timer-info} ; do
+
+for f in CONTRIBUTORS HISTORY UPDATE-1.4.0 README.timer-info ; do
   iconv -f iso-8859-1 -t utf-8 -o $f.utf8 $f && mv $f.utf8 $f
 done
 
@@ -265,6 +233,8 @@ done
 
 %build
 
+export RPM_OPT_FLAGS="${RPM_OPT_FLAGS/-O2/-O3}" # see HISTORY for 1.7.17
+
 cat << EOF > Make.config
 CC           = %{__cc}
 CXX          = %{__cxx}
@@ -278,9 +248,9 @@ else
   CXXFLAGS   = \$(RPM_OPT_FLAGS) -Wall -Woverloaded-virtual -Wno-parentheses
   LDFLAGS    = \$(RPM_LD_FLAGS)
 endif
+
 ifdef PLUGIN
-  CFLAGS    += -fPIC
-  CXXFLAGS  += -fPIC
+  include \$(VDRDIR)/Make.global # some plugins fail to do this
 endif
 
 MANDIR       = %{_mandir}
@@ -290,7 +260,7 @@ LOCDIR       = \$(shell pkg-config vdr --variable=localedir)
 PLUGINLIBDIR = \$(shell pkg-config vdr --variable=plugindir)
 VIDEODIR     = \$(shell pkg-config vdr --variable=videodir)
 CONFDIR      = \$(shell pkg-config vdr --variable=configdir)
-INCLUDEDIR   = \$(shell pkg-config vdr --variable=includedir)
+INCDIR       = \$(shell pkg-config vdr --variable=includedir)
 LIBDIR       = \$(PLUGINLIBDIR)
 
 LIRC_DEVICE  = %{_localstatedir}/run/lirc/lircd
@@ -298,26 +268,24 @@ VDR_USER     = %{vdr_user}
 EOF
 
 make %{?_smp_mflags} vdr vdr.pc include-dir \
-    BINDIR=%{_sbindir} INCLUDEDIR=%{_includedir} CONFDIR=%{configdir} \
+    BINDIR=%{_sbindir} INCDIR=%{_includedir} CONFDIR=%{configdir} \
     VIDEODIR=%{videodir} PLUGINLIBDIR=%{plugindir} LOCDIR=%{_datadir}/locale \
     DATADIR=%{datadir} CACHEDIR=%{cachedir} \
     RUNDIR=%{rundir} VARDIR=%{vardir} VDR_GROUP=%{vdr_group}
 
 make %{?_smp_mflags} i18n LOCALEDIR=./locale
 
+make %{?_smp_mflags} -C PLUGINS/src/dvbhddevice LIBDIR=. all
+make %{?_smp_mflags} -C PLUGINS/src/dvbsddevice LIBDIR=. all
+make %{?_smp_mflags} -C PLUGINS/src/skincurses LIBDIR=. all
+
 %if %{with docs}
 make %{?_smp_mflags} srcdoc
 find srcdoc -type f -size 0 -delete
 %endif # docs
 
-%if %{with plugins}
-make %{?_smp_mflags} -C PLUGINS/src/skincurses LIBDIR=. all
-make %{?_smp_mflags} -C PLUGINS/src/sky        LIBDIR=. all
-%endif # plugins
-
 
 %install
-rm -rf $RPM_BUILD_ROOT
 
 abs2rel() { perl -MFile::Spec -e 'print File::Spec->abs2rel(@ARGV)' "$@" ; }
 
@@ -330,6 +298,7 @@ install -pm 755 epg2html.pl $RPM_BUILD_ROOT%{_bindir}/epg2html
 make install-pc DESTDIR=$RPM_BUILD_ROOT
 PKG_CONFIG_PATH=$RPM_BUILD_ROOT%{_libdir}/pkgconfig \
 make install-i18n install-includes install-doc DESTDIR=$RPM_BUILD_ROOT
+install -pm 644 debian/svdrpsend.1 $RPM_BUILD_ROOT%{_mandir}/man1
 
 install -dm 755 $RPM_BUILD_ROOT%{configdir}/plugins
 install -pm 644 *.conf $RPM_BUILD_ROOT%{configdir}
@@ -391,16 +360,18 @@ chmod 644 $RPM_BUILD_ROOT%{_sysconfdir}/udev/rules.d/*-%{name}.rules
 install -Dpm 644 %{name}.rwtab $RPM_BUILD_ROOT%{_sysconfdir}/rwtab.d/%{name}
 
 # devel
+
 install -pm 755 %{SOURCE9} $RPM_BUILD_ROOT%{_bindir}/vdr-config
 install -pm 755 i18n-to-gettext.pl \
   $RPM_BUILD_ROOT%{_bindir}/vdr-i18n-to-gettext
 install -pm 755 newplugin $RPM_BUILD_ROOT%{_bindir}/vdr-newplugin
-install -pm 644 Make.config $RPM_BUILD_ROOT%{_libdir}/vdr
+install -pm 644 Make.config Make.global $RPM_BUILD_ROOT%{_libdir}/vdr
 ln -s $(abs2rel %{_includedir}/vdr/config.h %{_libdir}/vdr) \
   $RPM_BUILD_ROOT%{_libdir}/vdr
 install -Dpm 644 %{SOURCE17} $RPM_BUILD_ROOT%{_sysconfdir}/rpm/macros.vdr
 
 # i18n
+
 %find_lang %{name}
 sed -i -e '1i%%defattr(-,root,root,-)' %{name}.lang
 
@@ -413,23 +384,23 @@ echo "%%config(noreplace) %{_sysconfdir}/tmpfiles.d/%{name}.conf" \
 %endif
 
 # plugins
-%if %{with plugins}
+
+install -pm 755 PLUGINS/src/dvbhddevice/libvdr-dvbhddevice.so.%{apiver} \
+  $RPM_BUILD_ROOT%{plugindir}
+install -pm 644 %{SOURCE12} \
+  $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/vdr-plugins.d/dvbhddevice.conf
+%find_lang %{name}-dvbhddevice
+
+install -pm 755 PLUGINS/src/dvbsddevice/libvdr-dvbsddevice.so.%{apiver} \
+  $RPM_BUILD_ROOT%{plugindir}
+install -pm 644 %{SOURCE8} \
+  $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/vdr-plugins.d/dvbsddevice.conf
+
 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
 %find_lang %{name}-skincurses
-sed -i -e '1i%%defattr(-,root,root,-)' %{name}-skincurses.lang
-
-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 # plugins
 
 
 %check
@@ -439,10 +410,6 @@ if [ "$(pkg-config vdr --variable=apiversion)" != "%{apiver}" ] ; then
 fi
 
 
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-
 %pre
 getent passwd %{vdr_user} >/dev/null || \
 useradd -r -g %{vdr_group} -d %{vardir} -s /sbin/nologin -M -N \
@@ -466,7 +433,6 @@ fi
 
 
 %files -f %{name}.lang
-%defattr(-,root,root,-)
 %doc CONTRIBUTORS COPYING HISTORY* INSTALL MANUAL README* UPDATE-1.?.0
 %doc CHANGES.package.old
 %config(noreplace) %{_sysconfdir}/sudoers.d/vdr
@@ -484,7 +450,9 @@ fi
 %{plugindir}/bin/%{name}-moveto.sh
 %{plugindir}/bin/%{name}-shutdown.sh
 %{datadir}/
-%{_mandir}/man[58]/vdr.[58]*
+%{_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}
@@ -503,7 +471,6 @@ fi
 %dir %{cachedir}/
 
 %files devel
-%defattr(-,root,root,-)
 %doc COPYING
 %if ! %{with docs}
 %doc PLUGINS.html
@@ -517,33 +484,38 @@ fi
 %{_libdir}/pkgconfig/vdr.pc
 %dir %{_libdir}/vdr/
 %{_libdir}/vdr/Make.config
+%{_libdir}/vdr/Make.global
 %{_libdir}/vdr/config.h
 
 %if %{with docs}
 %files docs
-%defattr(-,root,root,-)
 %doc COPYING PLUGINS.html srcdoc/html/
 %endif
 
-%if %{with plugins}
+%files dvbhddevice -f %{name}-dvbhddevice.lang
+%doc PLUGINS/src/dvbhddevice/COPYING PLUGINS/src/dvbhddevice/HISTORY
+%doc PLUGINS/src/dvbhddevice/README
+%config(noreplace) %{_sysconfdir}/sysconfig/vdr-plugins.d/dvbhddevice.conf
+%{plugindir}/libvdr-dvbhddevice.so.%{apiver}
+
+%files dvbsddevice
+%doc PLUGINS/src/dvbsddevice/COPYING PLUGINS/src/dvbsddevice/HISTORY
+%doc PLUGINS/src/dvbsddevice/README
+%config(noreplace) %{_sysconfdir}/sysconfig/vdr-plugins.d/dvbsddevice.conf
+%{plugindir}/libvdr-dvbsddevice.so.%{apiver}
+
 %files skincurses -f %{name}-skincurses.lang
-%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 # plugins
 
 %changelog
+* Sun Nov  6 2011 Ville Skyttä <ville.skytta at iki.fi> - 1.7.21-1
+- Update to 1.7.21.
+- Clean up specfile constructs no longer needed with Fedora or EL6+.
+
 * Mon Sep  5 2011 Ville Skyttä <ville.skytta at iki.fi> - 1.6.0-41
 - Build with $RPM_LD_FLAGS, add them to Make.config.
 - Ship various macros in -devel to ease plugin packaging.
diff --git a/vdr.sysconfig b/vdr.sysconfig
index 72cf323..b9c3672 100644
--- a/vdr.sysconfig
+++ b/vdr.sysconfig
@@ -1,7 +1,7 @@
 # System configuration for VDR                                       -*- sh -*-
 
 # The "master" options.  Some examples of options you may want to set
-# here are -r, -t, and --rcu.  See the vdr(8) man page for more info.
+# here are -r, -t, and --rcu.  See the vdr(1) man page for more info.
 #
 # The default shutdown script (/usr/lib*/vdr/bin/vdr-shutdown.sh) needs
 # sudo(8) configuration to work as expected, see the script source for
@@ -23,6 +23,8 @@ softdevice
 streamdev-client
 xine
 xineliboutput
+dvbhddevice
+dvbsddevice
 tvonscreen
 osdteletext
 ttxtsubs


More information about the scm-commits mailing list