Sorry dafür. Aber ich wollte nicht ewig danach suchen, wie man vorgehen muss, damit man das so schön hin bekommt, wie ihr es immer macht.
Stefan
Kein Problem,
du musst dich für meine Blindheit nicht entschuldigen.
Sorry dafür. Aber ich wollte nicht ewig danach suchen, wie man vorgehen muss, damit man das so schön hin bekommt, wie ihr es immer macht.
Stefan
Kein Problem,
du musst dich für meine Blindheit nicht entschuldigen.
Na dann mach doch einfach mal nen Thread auf wo du die nochmal postest.
Wenn dann jemand Korekturen hat oder weitere posten will dann ist das allles schön übersichtlich zusammen.
Nachdem die vorgestellte Lösung nach etlichen Tagen endlich korrekt kompiliert hat und die Installation auch schön klappt, habe ich bislang (noch) nicht auf eurem letzten Stand aufgesetzt. Ich bin erst einmal froh, dass ich seitdem wieder "arbeitsfähig" bin...
Mit dem Posting sollte ich deshalb vielleicht besser noch warten, bis klar ist, dass die aktualisierten Makefiles mit Klaus' nächster Version noch zusammenspielen... oder?
Grüße
Stefan
Ich habe mir mal auf die Schnelle den 23er Patch angeschaut. Dabei wundert mich, dass in Make.config.template die Variablen "LOCDIR" und "LIBDIR" für Non-local Build nicht definiert, in den Plugin-Makefiles aber benutzt werden. Damit greift immer die Default-Definition von Makefile, die auf ein festes Verzeichnis verweist. Dort zu ändern ist aber eigentlich nicht gewünscht – wofür hätten wir sonst Make.config? Ich fände es deshalb wünschenswert, wenn "LOCDIR" und "LIBDIR" im Template unter den "Other directories" nochmals referenziert würden.
Desgleichen sollten die unter "ONEDIR" gelisteten Verzeichnisse der Vollständigkeit halber ebenfalls unter "Other directories" aufgeführt werden, denn sonst greifen wieder die Defaults im Makefile und führen ggfs. zu bösen Überraschungen. Denn gebraucht werden die doch alle für die Definition der Defaultwerte (-D...) bei der Kompilierung der Plugins, oder etwa nicht?
Auch fände ich es gut, "PLGCFG" am Ende des Other-directory-Abschnitts zu setzen, weil man dort dann "PREFIX" nutzen könnte, um die Variable zu definieren.
Hier die Gedanken als Patch gegen das originale Make.config.template von 1.7.35:
--- original/Make.config.template
+++ patched/Make.config.template
@@ -14,48 +14,61 @@
CFLAGS = -g -O3 -Wall
CXX = g++
-CXXFLAGS = $(CFLAGS) -Werror=overloaded-virtual -Wno-parentheses
-
-CFLAGS += -fPIC
+CXXFLAGS = -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses
# Use 'make M32=1 ...' to build a 32-bit version of VDR on a 64-bit machine:
ifdef M32
CFLAGS += -m32
+CXXFLAGS += -m32
endif
### The directory environment:
-PREFIX = /usr/local
+# Use 'make LCLBLD=1' to build locale and plugin files under the source directory:
+ifdef LCLBLD
+LOCDIR = $(CWD)/locale
+PLUGINDIR = $(CWD)/PLUGINS
+ifndef PLUGIN # don't overwrite for plugins with old makefiles
+LIBDIR = $(PLUGINDIR)/lib
+endif
+HDRDIR = $(CWD)/include
+endif
+
+# Use 'make ONEDIR=1' to have all data in one single directory:
+ifdef ONEDIR
+VIDEODIR = /video
+CACHEDIR = $(VIDEODIR)
+CONFDIR = $(VIDEODIR)
+RESDIR = $(VIDEODIR)
+endif
+
+# Other directories:
+
+#PREFIX = /usr/local
+#VIDEODIR = /srv/vdr/video
+#CONFDIR = /var/lib/vdr
+#CACHEDIR = /var/cache/vdr
+#BINDIR = $(PREFIX)/bin
#DVBDIR = /usr/src/v4l-dvb/linux
-MANDIR = $(PREFIX)/man
-BINDIR = $(PREFIX)/bin
+#LIBDIR = $(PREFIX)/lib/vdr
+#LOCDIR = $(PREFIX)/share/locale
+#MANDIR = $(PREFIX)/man
+#INCDIR = $(PREFIX)/include
+#PCDIR = $(PREFIX)/lib/pkgconfig
# Use this if you want to have a central place where you configure compile time
# parameters for plugins:
#PLGCFG = /etc/vdr/plugins.conf
-# By default locale and plugin files are built under the source directory:
-INCDIR = $(CWD)/include
-LOCDIR = $(CWD)/locale
-PLUGINDIR = $(CWD)/PLUGINS
-LIBDIR = $(PLUGINDIR)/lib
-# By default VDR requires only one single directory to operate:
-VIDEODIR = /video
-# Activate the following line to build VDR according to the FHS ("File system Hierarchy Standard"):
-#USEFHS = 1
-ifdef USEFHS
-VIDEODIR = /srv/vdr/video
-CONFDIR = /var/lib/vdr
-CACHEDIR = /var/cache/vdr
-RESDIR = $(PREFIX)/share/vdr
-INCDIR = $(PREFIX)/include
-LOCDIR = $(PREFIX)/share/locale
-LIBDIR = $(PREFIX)/lib/vdr
-endif
-
### The remote control:
LIRC_DEVICE = /var/run/lirc/lircd
-## Define if you want vdr to not run as root
+### Define if you want vdr to not run as root:
#VDR_USER = vdr
+
+### Fallback for plugins with old makefiles:
+ifdef PLUGIN
+CFLAGS += -fPIC
+CXXFLAGS += -fPIC
+endif
Alles anzeigen
Zudem kann ich bei näherer Überlegung den Nutzen der Schalter "ONEDIR" und "LCLBLD" nicht wirklich erkennen: Denn ich kann mich doch keinesfalls auf deren Defaulteinstellungen verlassen, sondern muss das Template (dessen Variablen) sowieso nach meinen eigenen Bedürfnissen anpassen. Und wenn solche Schalter als sinnvoll erachtet werden, dann sollten jeweils vollständige Variablensätze definiert werden, wenn eine Option greift (was im obigen Diff noch fehlt). Die jetzige Lösung finde ich jedenfalls ein wenig verwirrend – was auch der fortgeschrittenen Zeit geschuldet sein mag...
Oder habe ich ein grundlegendes Prinzip übersehen bzw. falsch verstanden...?
CU Stefan
Gibts eigentlich eine Empfehlung für die richtige Verzeichnis Struktur.
Ich selbst habe alles zum vdr immer unter /usr/local/vdr/...
Soweit ich das überblicken kann wird nun standardmäßig in einem "Unix-Like-Schema" installiert. Also einfach ohne Make.config bauen und du solltest in Etwa erreichen was du haben willst. Das VDR-Binary landet dann unter /usr/local/bin was in den allermeisten Distributionen im PATH liegt.
Alles anzeigenIch habe mir mal auf die Schnelle den 23er Patch angeschaut. Dabei wundert mich, dass in Make.config.template die Variablen "LOCDIR" und "LIBDIR" für Non-local Build nicht definiert, in den Plugin-Makefiles aber benutzt werden. Damit greift immer die Default-Definition von Makefile, die auf ein festes Verzeichnis verweist. Dort zu ändern ist aber eigentlich nicht gewünscht – wofür hätten wir sonst Make.config? Ich fände es deshalb wünschenswert, wenn "LOCDIR" und "LIBDIR" im Template unter den "Other directories" nochmals referenziert würden.
Desgleichen sollten die unter "ONEDIR" gelisteten Verzeichnisse der Vollständigkeit halber ebenfalls unter "Other directories" aufgeführt werden, denn sonst greifen wieder die Defaults im Makefile und führen ggfs. zu bösen Überraschungen. Denn gebraucht werden die doch alle für die Definition der Defaultwerte (-D...) bei der Kompilierung der Plugins, oder etwa nicht?
Auch fände ich es gut, "PLGCFG" am Ende des Other-directory-Abschnitts zu setzen, weil man dort dann "PREFIX" nutzen könnte, um die Variable zu definieren.
Hier die Gedanken als Patch gegen das originale Make.config.template von 1.7.35:
...
Leider funktioniert dein Patch bei mir nicht gegen die 1.7.35.
Kannst du den bitte nochmal gegen den Stand mit vdr-1.7.35-makefilefix23.diff machen?
Zitat
Zudem kann ich bei näherer Überlegung den Nutzen der Schalter "ONEDIR" und "LCLBLD" nicht wirklich erkennen: Denn ich kann mich doch keinesfalls auf deren Defaulteinstellungen verlassen, sondern muss das Template (dessen Variablen) sowieso nach meinen eigenen Bedürfnissen anpassen. Und wenn solche Schalter als sinnvoll erachtet werden, dann sollten jeweils vollständige Variablensätze definiert werden, wenn eine Option greift (was im obigen Diff noch fehlt). Die jetzige Lösung finde ich jedenfalls ein wenig verwirrend – was auch der fortgeschrittenen Zeit geschuldet sein mag...
Oder habe ich ein grundlegendes Prinzip übersehen bzw. falsch verstanden...?
Mit LCLBLD und ONEDIR kann man halt auf einfache Weise auf die alte Funktionsweise zurückschalten.
Klaus
Daran wäre ich auch interessiert....vor allem, weil das ganze ja mal funktionierte.
Bug-Report-Update: Das alte Problem von hier, dass die Wiedergabe einer noch laufenden Aufnahme an der Stelle abbricht, an der man die Wiedergabe gestartet hat, tritt auch mit vdr-1.7.35 noch auf. Gibts dazu neue Ideen fuer einen Fix?
Das Problem wurde eigentlich schon in der 1.7.34 gefixt.
Bist du ganz sicher, daß das mit der aktuellen Version auftritt?
Klaus
Bist du ganz sicher, daß das mit der aktuellen Version auftritt?
Ich hatte doch eine 1.7.33er Cutter-Test-Version laufen und nicht die 1.7.35er.
Entschuldigung, bin etwas durcheinander gekommen, ziehe den Bug-Report zurueck,
S:oren
Hallo nochmals:
Leider funktioniert dein Patch bei mir nicht gegen die 1.7.35.
Kannst du den bitte nochmal gegen den Stand mit vdr-1.7.35-makefilefix23.diff machen?
Wahrscheinlich habe ich mich so spät am Abend dann doch ein wenig in den diversen Verzeichnissen verstrickt.
Hier mein Vorschlag, wie ich mir (auf Basis von diffx23) Make.config.template wünschen würde:
#
# User defined Makefile options for the Video Disk Recorder
#
# Copy this file to 'Make.config' and change the parameters as necessary.
#
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
# $Id: Make.config.template 2.14 2012/12/28 09:55:22 kls Exp $
### The C compiler and options:
CC = gcc
CFLAGS = -g -O3 -Wall
CXX = g++
CXXFLAGS = -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses
# Use 'make M32=1 ...' to build a 32-bit version of VDR on a 64-bit machine:
ifdef M32
CFLAGS += -m32
CXXFLAGS += -m32
endif
### The directory environment:
# Default directories (adjust as necessary or desired):
#PREFIX = /usr/local
#BINDIR = $(PREFIX)/bin
#INCDIR = $(PREFIX)/include
#LIBDIR = $(PREFIX)/lib/vdr
#LOCDIR = $(PREFIX)/share/locale
#MANDIR = $(PREFIX)/share/man
#PCDIR = $(PREFIX)/lib/pkgconfig
#RESDIR = $(PREFIX)/share/vdr
#VIDEODIR = /srv/vdr/video
#CONFDIR = /var/lib/vdr
#CACHEDIR = /var/cache/vdr
# Overrides for preset/legacy configurations:
# Use 'make LCLBLD=1' to build locale and plugin files under the source directory:
ifdef LCLBLD
LOCDIR = $(CWD)/locale
PLUGINDIR = $(CWD)/PLUGINS
ifndef PLUGIN # don't overwrite for plugins with old makefiles
LIBDIR = $(PLUGINDIR)/lib
endif
HDRDIR = $(CWD)/include
endif
# Use 'make ONEDIR=1' to have all data in one single directory:
ifdef ONEDIR
VIDEODIR = /video
CACHEDIR = $(VIDEODIR)
CONFDIR = $(VIDEODIR)
RESDIR = $(VIDEODIR)
endif
# Use this if you want to have a central place where you configure compile time
# parameters for plugins:
#PLGCFG = $(CONFDIR)/plugins.conf
### The remote control:
LIRC_DEVICE = /var/run/lirc/lircd
### Define if you want vdr to not run as root:
#VDR_USER = vdr
### Fallback for plugins with old makefiles:
ifdef PLUGIN
CFLAGS += -fPIC
CXXFLAGS += -fPIC
endif
Alles anzeigen
Des Weiteren würde ich noch empfehlen, in den Makefiles bei den impliziten Regeln die Zieldatei per "-o $@" immer explizit festzulegen. Das schadet nicht, vermeidet aber Fehler. Bei der Umstellung der Makefiles bin ich ein paar Mal ins Schleudern geraten, weil bei manchen Plugins aufgrund des Fehlens dieser Option die Objektfiles nicht an der erwarteten Stelle gelandet sind.
Anbei das Ganze als Patch gegen vdr-1.7.35 bzw. (damit man die Unterschiede schneller sehen kann) gegen fix23. Und hoffentlich habe ich mich so spät am Abend mit den Patchfiles nicht wieder vertan...
Ich habs gerade auch nochmals durchkompiliert, und mit Ausnahme des menuorg-Plugins (findet aufgrund eines fehlenden Include-Pfades ein Headerfile noch nicht) ist alles ist wie gewünscht durchgelaufen – auch aktualisierten Plugin-Makefiles (siehe Seite 12).
Grüße
Stefan
PS: Aus kosmetischen Gründen müsste noch die Änderung bzgl. DESTDIR nachgezogen werden, da dies ja mittlerweile erst bei der install-Anweisung vorgeschaltet wird und nicht schon bei der Definition der Zielverzeichnisse.
shofmann: menuorg braucht den menuorg-patch (im plugin-Verzeichnis). Evtl. fehlt der Noch bei Deinem VDR?
Ingo, Danke für den Hinweis. Den Patch hatte ich in der Eile übersehen. Danach hat das Plugin schön durchkompiliert.
Grüße
Stefan
### Fallback for plugins with old makefiles:
ifdef PLUGIN
CFLAGS += -fPIC
CXXFLAGS += -fPIC
endif
Ich denke, die obigen Zeilen in Make.config.template sind verzichtbar, denn -fPIC wird im VDR-Makefile immer gesetzt. Wozu also brauchen wir sie?
Damit könnten wir die Makefiles wie angehängt gestalten.
Grüße
Stefan
Die brauchst du dann, wenn du alte Plugins zwar im VDR-Verzeichnis platzierst, das "make" aber im Plugin-Verzeichnis ausführst. Nur über den "-include" der Make.config bekommst du dann das "-fPIC". Diese Zeilen, und etliche andere, können dann entfallen, wenn Klaus die Unterstützung der alten Makefiles entfernt.
Die brauchst du dann, wenn du alte Plugins zwar im VDR-Verzeichnis platzierst, das "make" aber im Plugin-Verzeichnis ausführst. Nur über den "-include" der Make.config bekommst du dann das "-fPIC". Diese Zeilen, und etliche andere, können dann entfallen, wenn Klaus die Unterstützung der alten Makefiles entfernt.
Verstanden, die paar Zeilen stören ja auch nicht... War halt gerade bei Aufräumen...
Noch eine Frage ans Team: Sollten wir in jedem Makefile nicht auch das Makefile selbst sowie – wo referenziert – Make.config, Make.global und $(PLGCFG) als Abhängigkeit für all, install-lib und install-i18n führen?
Ciao, Stefan
Ich habe gerade festgestellt, das xineliboutput nicht gebaut wird.
Ich habe in der Logausgabe von make folgendes gefunden:
WARNING: plugin xineliboutput is using an old Makefile!
Makefile:113: VDRDIR = /usr/src/vdr/vdr-git/vdr
Makefile:114: ********************************************************
Makefile:115: VDR source tree not detected !
Makefile:116: VDR plugins will not be installed.
Makefile:117: ********************************************************
Running configure
Unter /usr/src/vdr/vdr-git/vdr liegen die Sourcen
Noch eine Frage ans Team: Sollten wir in jedem Makefile nicht auch das Makefile selbst sowie – wo referenziert – Make.config, Make.global und $(PLGCFG) als Abhängigkeit für all, install-lib und install-i18n führen?
Make.global ist eine Altlast, die irgendwann entfallen wird. Kein neues Plugin-Makefile zieht diese mehr an.
Make.config dagegen ist optional. Man muss sie nicht anlegen. Kompilieren muss auch ohne möglich sein.
Alles anzeigenIch bin der Meinung dies ist im PLUGIN.html falsch:
cReceiver hat kein drittes Argument.
richtig:
Und der erste Parameter ist keine tChannelId mehr, sondern ein cChannel-Pointer:
Klaus
WARNING: plugin xineliboutput is using an old Makefile!
Makefile:113: VDRDIR = /usr/src/vdr/vdr-git/vdr
Makefile:114: ********************************************************
Makefile:115: VDR source tree not detected !
Makefile:116: VDR plugins will not be installed.
Makefile:117: ********************************************************
Das originale Makefile des Plugins prüft, ob VDRDIR auf "../../.." gesetzt ist. Im Gegensatz zum alten System übergibt das VDR-Makefile jetzt immer VDRDIR mit dem absoluten Pfad.
Das alte VDR-Makefile hingegen hat VDRDIR überhaupt nicht gesetzt, weshalb die alten Plugin-Makefiles diese Variable selbst passend (meist auf "../../..") gesetzt haben. Damit dieser Default-Wert aber wie gewünscht verwendet wird, darf dem alten Plugin-Makefile die Variable aber nicht per make-Parameter mitgegeben werden. Ich würde deshalb vorschlagen, im VDR-Makefile den Aufruf wie folgt abzuändern:
# Old Makefile\
if ! grep -q "PKGCFG" "$(PLUGINDIR)/src/$i/Makefile" ; then\
echo "WARNING: plugin $i is using an old Makefile!";\
oldmakefile="$oldmakefile $i";\
$(MAKE) --no-print-directory -C "$(PLUGINDIR)/src/$i" CFLAGS="$(CFLAGS) $(CDEFINES) $(CINCLUDES)" CXXFLAGS="$(CXXFLAGS) $(CDEFINES) $(CINCLUDES)" LIBDIR="$(PLUGINDIR)/lib" all || failed="$failed $i";\
continue;\
fi;\
Damit kompiliert das Plugin und legt seine Dateien wie gewohnt in PLUGIN/lib ab, von wo aus sie dann ins Installationsverzeichnis kopiert werden. Bei mir hat das Plugin ohne diese Änderung "seine" Objektfiles bei sich behalten und erst per make install installiert.
Das Patchset für die Änderung habe ich beigefügt.
Was ist die Meinung des Teams hierzu?
Ciao, Stefan
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!