incdir in vdr.pc setzen


  • Dein Vorschlag das Problem mit Versionsnummern zu lösen und den Enduser dann auf einer Fehlermeldung sitzen zu lassen ist einfach schlecht, weil der Enduser das Problem eventuell nicht lösen kann.


    Wer redet von einer Fehlermeldung? Das Service-Plugin bekommt mitgeteilt, dass da ein Plugin anklopft, welches eine alte Schnittstelle nutzen möchte. Statt Fehlermeldung wäre es also durchaus auch eine Option, dass die alte Struktur noch eine bestimmte Zeit im Service-Plugin vorgehalten wird (Übergangszeit) und das anfragende Plugin dann in der von ihm erwarteten Form versorgt wird.


    Umstellung auf "Fehlermeldung" kann dann immer noch nach einer angemessenen Übergangszeit erfolgen.

  • Wer redet von einer Fehlermeldung? Das Service-Plugin bekommt mitgeteilt, dass da ein Plugin anklopft, welches eine alte Schnittstelle nutzen möchte. Statt Fehlermeldung wäre es also durchaus auch eine Option, dass die alte Struktur noch eine bestimmte Zeit im Service-Plugin vorgehalten wird (Übergangszeit) und das anfragende Plugin dann in der von ihm erwarteten Form versorgt wird.


    Es geht hier aber doch um den Fall, dass es bereits für beide Plugins Versionen gibt, die die neue Schnittstelle kennen. Du weigerst dich aber dich um diese Problematik kümmern zu wollen. Du möchtest dass das alte Plugin A auch noch mit dem neuen Plugin B funktioniert und drückst dem Plugin-Autor Extra-Arbeit auf.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470


  • Im Prinzip wollte ich gerade so ziemlich das gleiche schreiben.
    Wenn ein Plugin einen Service eines anderen Plugins verwenden will, dann muß es eine ganz bestimmte Version dieses Services verwenden. Und wenn das "Service-Plugin" (um mal "FireFly"s Nomenklatur zu verwenden) hierfür ein Header-File anbietet, dann ist es IMHO am besten, wenn das benutzende Plugin sich dieses Header-File (ggf. mit einer Versionsnummer im Namen) in seine eigene Source mit reinkopiert. Denn *dieser* Stand ist sowieso "eingefroren" - sollte er sich jemals ändern, muß es eine neue Versionsnummer geben.


    Ich halte daher den Vorschlag "öffentliche Plugin-Header nach $INCDIR/vdr/plugins/$PLUGIN installieren" für wenig zielführend.


    Klaus

  • Moin!


    Natürlich kann man einfach den Header kopieren und dann ist's gut. Ich finde es einfach nur unkomfortabel.


    Ich würde gerne das Service-Interface (die Header-Datei) aus dem Plugin herauslösen, es vom Plugin unabhängig machen.
    Dann muss man nicht mehr kopieren, braucht nur eine Abhängigkeit auf das Service-Interface-Paket und gut.
    Und das Service-Plugin bekommt auch eine Abhängigkeit auf das Service-Interface.


    Seht den Header als eigenes Source-Paket, das nichts mit dem Service-Plugin zu tun hat. Das Service-Plugin ist quasi auch nur ein Nutzer dieses Interfaces.


    Zum Bauen eines Service-Nutzers muss das Service-Plugin nicht installiert sein, nur das Service-Interface. Das ist nichts anderes, als z.B. libjpeg, das von einem Plugin genutzt wird.
    Dass der Service-Nutzer zusätzlich immer noch prüfen muss, ob das Service-Plugin installiert ist, ist klar (er bekommt dann beim Service-Aufruf ja sowieso ein "false" zurück).


    Mit dem von mir vorgeschlagenen Szenario wäre es wesentlich leichter, alle Nutzer eines Services auf den gleichen Stand zu bringen, weil man die Datei eben nicht ein dutzendmal kopieren muss.
    Das macht den Abgleich beim Entwickeln von Plugins und Erstellen einer Distribution wesentlich leichter.


    Ihr würdet doch auch nicht verlangen, dass jedes Plugin seine eigenen dvb- oder sonstige lib-Header mitbringt. Auch die könnte man natürlich kopieren. Aber das widerspricht doch dem Paket-Ansatz total.
    Wenn mir jetzt jemand sagt, dass das nicht das gleiche ist, dass man das nicht vergleichen kann, bin ich gespannt, wo denn der Unterschied sein soll... :)
    Ob die Build-Abhängigkeit nur aus einem Header oder einem ganzen Schwung an Headern und Libs besteht, ist doch irrelevant.


    "Service" ist ja auch nur ein Beispiel. In meinem Fall ist es eine Hilfsklasse, die nichts mit der Service-Schnittstelle zu tun hat. Es vereinfacht nur die Kommunikation zwischen den Plugins, weil sie eine gemeinsame Lib (im weitesten Sinne, hier eben nur ein Header) benutzen und sich dadurch einig sind.


    Beim Betreff ist mir erst mal nichts besseres eingefallen, letztendlich betrifft es aber wahrscheinlich nur Header-Dateien. Da diese Header aber häufig vom vdr abhängig sind (z.B. wegen Klassen aus dem vdr, cString usw.), finde ich es sinnvoll, sie an einer Stelle zu sammeln, damit sie nicht irgendwo unter /usr/include abgelegt werden.


    Lars.

  • Moin!


    Ich mache es also den Distri-Entwicklern einfacher, da ich keine Abhängigkeiten zum Quelltext (bzw. installierten Header-Files) anderen Plugins einführe.


    Ich finde es nicht einfacher, denn in der Realität kommt es immer wieder mal vor, dass zwei Plugins dann doch nicht richtig zusammen passen.
    Das fängt mit den vdr-Headern an, geht über gemeinsame libs (libjpeg hier mal in Version 6, dort mal in Version 8 ) und sollte nicht vor Service-Definitionen oder anderen gemeinsamen Headern Halt machen.


    Lars.

  • Moin!



    johns:
    Eigentlich müsste der include so lauten:

    Code
    #include <vdr/plugins/softhddevice/service.h>


    Und das Plugin-Makefile müsste wie Keine_Ahnung erwähnt hat, ein "install-includes" bekommen (nur die, die es brauchen), das die öffentlichen Header nach $INCDIR/vdr/plugins/$PLUGIN installiert.


    Oder, wenn man das nicht will, muss man beim Bauen außerhalb des vdr-Source -I/usr/include/vdr/plugins mitgeben und innerhalb dann -I../
    Dann kann man, wie von dir geschrieben, den include so benutzen:

    Code
    #include <softhddevice/service.h>


    Die erste Variante (mit vdr/plugins) finde ich aber schöner, da dann klar ist, dass es ein Header eines vdr-Plugins ist. Außerdem passt es dann auch besser zu den includes von vdr-Headern.
    Es gibt ja z.B. Plugins, die genauso wie andere Programme heißen (z.B. femon). Da könnte es sonst Konflikte geben.


    Lars.


  • Natürlich kann man einfach den Header kopieren und dann ist's gut. Ich finde es einfach nur unkomfortabel.


    Was? Das kopieren?


    Zitat


    Ich würde gerne das Service-Interface (die Header-Datei) aus dem Plugin herauslösen, es vom Plugin unabhängig machen.
    Dann muss man nicht mehr kopieren, braucht nur eine Abhängigkeit auf das Service-Interface-Paket und gut.
    Und das Service-Plugin bekommt auch eine Abhängigkeit auf das Service-Interface.


    Das ist Debian-Denke. Dort ist es wohl beliebt einen Source in möglichst viele kleine Pakete zu teilen ;)


    Für Archlinux würde sowas definitiv in einem einzigen Paket enden.


    Zitat


    Zum Bauen eines Service-Nutzers muss das Service-Plugin nicht installiert sein, nur das Service-Interface. Das ist nichts anderes, als z.B. libjpeg, das von einem Plugin genutzt wird.
    Dass der Service-Nutzer zusätzlich immer noch prüfen muss, ob das Service-Plugin installiert ist, ist klar (er bekommt dann beim Service-Aufruf ja sowieso ein "false" zurück).


    libjpeg wird unter Archlinux auch komplett installiert, wenn dagegen gebaut wird.


    Ich verstehe dich teilweise schon, aber ich finde man kann das mit dem "alles muss an seinem richtigen Ort sein" auch übertreiben. Soll heißen, dass dein Vorschlag in vielerlei Hinsicht auch genau das Gegenteil von dem erreichen könnte, was du erreichen wolltest.


    • Bisher können Plugins in *beliebiger* Reihenfolge gebaut werden. Wenn du von globalen Headern ausgehen willst, dann muss eine genaue Reihenfolge eingehalten werden
    • "make plugins" wird durch deinen Vorschlag wohl schlicht generell unmöglich, da hier keine Reihenfolge beim Bauen vorgesehen ist
    • Wenn Plugin-Autoren anfangen auf die externen Header zu bestehen, dann ist die logische Folge bedingte Kompilierung und Parameter für's Kompilieren ("HAVE_EPGSEARCH=1", ....)
  • Zitat


    Das ist Debian-Denke. Dort ist es wohl beliebt einen Source in möglichst viele kleine Pakete zu teilen ;)


    Für Archlinux würde sowas definitiv in einem einzigen Paket enden.


    archlinux macht es halt falsch.
    ich dachte da soll alles so "schlank" sein. jetzt installiert es absolut alles auf dem system ?
    das ist doch totale scheisse sowas


  • archlinux macht es halt falsch.
    ich dachte da soll alles so "schlank" sein. jetzt installiert es absolut alles auf dem system ?
    das ist doch totale scheisse sowas


    Es gibt sehr wohl das Konzept von "builddepends". Dabei wird aber das *ganze* Paket installiert und kann dann nach dem Bauen (da die Abhängigkeit dann nicht mehr von einem Paket benötigt wird) wieder komplett deinstalliert werden.


    Für mich ist "fehlende dev-Pakete" mit ein Grund dafür, dass ich mich für Archlinux entschieden habe. Es nervt einfach sich erst zig dev-Pakete suchen zu müssen, wenn man mal eben einen Source bauen will. Die paar KB an Header-Dateien fallen auf heutigen Festplatten kaum mehr auf.

  • Zitat


    Für mich ist "fehlende dev-Pakete" mit ein Grund dafür, dass ich mich für Archlinux entschieden habe. Es nervt einfach sich erst zig dev-Pakete suchen zu müssen, wenn man mal eben einen Source bauen will.


    einverstanden.


    aber warum willst du andere erziehen ?
    warum nicht eine lösung finden die für alle "lager" funktioniert ?


    was wäre denn so schlimm wenn für dich auch mit einer "neuen" version alles beim "alten" bleibt ?

  • Es nervt einfach sich erst zig dev-Pakete suchen zu müssen, wenn man mal eben einen Source bauen will.


    Das verstehe ich nicht. Du musst doch genauso die Pakete suchen. Das meint... Ob ich fürs bauen erstmal rausfinden muss das ich libusb-dev brauche oder das du rausfinden musst das du libusb brauchts, wo ist der Unterschied?


    cu

  • Das verstehe ich nicht. Du musst doch genauso die Pakete suchen. Das meint... Ob ich fürs bauen erstmal rausfinden muss das ich libusb-dev brauche oder das du rausfinden musst das du libusb brauchts, wo ist der Unterschied?


    Ich verstehe es auch nicht, vor allen Dingen weil es Debian/Ubuntu einem so leicht macht das Paket zu finden. Wenn einem der Compiler eine fehlende Include-Datei um die Ohren wirft, dann einfach danach suchen:

    Code
    apt-file search <include-datei>

    und man hat das dev-Paket.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470


  • Oder, wenn man das nicht will, muss man beim Bauen außerhalb des vdr-Source -I/usr/include/vdr/plugins mitgeben und innerhalb dann -I../
    Dann kann man, wie von dir geschrieben, den include so benutzen:

    Code
    #include <softhddevice/service.h>


    Die erste Variante (mit vdr/plugins) finde ich aber schöner, da dann klar ist, dass es ein Header eines vdr-Plugins ist. Außerdem passt es dann auch besser zu den includes von vdr-Headern.
    Es gibt ja z.B. Plugins, die genauso wie andere Programme heißen (z.B. femon). Da könnte es sonst Konflikte geben.


    Ich wollte es schon nach /usr/include/vdr/plugins/*plugin*/service.h installieren.
    Wenn du aber in den Sourcen "<vdr/plugins/*plugin*/service.h>" schreibst, dann funktioniert ohne installieren nichts.
    Die Version mit "<*plugin*/service> hätte den schönen Vorteil das sie alles abdeckt.
    Man kann eigene Version mitliefern, man kann aus den VDR Sourcen herausbauen und auch globale verwenden.
    Ohne muß man über #defines arbeiten. z.b. "#include *PLUGIN*_SERVICE" oder erst installieren und dann bauen.


    Mir persöhnlich ist es egal, beide Wege haben ihren Sinn und ich kann beide Seiten vollkommen verstehen.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!