incdir in vdr.pc setzen


  • Keine Änderungen an den Makefiles mehr vor der Version 2.0!


    Jup, schon klar ;)


    Aber den Punkt könnte man ja für später im Hinterkopf behalten.


    cu


  • 99% der Pakete kommen aus einem Sourcepaket und landen in einem Distributionspaket. Und in den allermeisten fällen wird nur "make install" aufgerufen.


    Im Prinzip ja.


    Prima. :)
    Wenn ich in meinem Paket zwei unabhängige install-Targets anbieten würde (z.B. install und install-dev), dann könntest du wahrscheinlich leicht zwei Pakete daraus machen, oder?
    Oder was wäre dafür nötig?


    Lars.

  • Ja theoretisch. Ich müsste aber dem Arch Build Standard folgen und der schreibt mir eigentlich vor, dass alles was aus einer Quelle kommt in einem Paket landen muss.
    Wie gesagt das sind ganz bestimmte Ausnahmen wann ein Paket gesplittet werden darf/soll

  • Ja theoretisch. Ich müsste aber dem Arch Build Standard folgen und der schreibt mir eigentlich vor, dass alles was aus einer Quelle kommt in einem Paket landen muss.
    Wie gesagt das sind ganz bestimmte Ausnahmen wann ein Paket gesplittet werden darf/soll


    Ich will das alles ja auch nicht für alle Plugins, sondern nur für die paar Ausnahmen... :)
    avahi4vdr möchte sowas anbieten, epgsearch hat sowas. Weiß noch jemand von anderen Plugins, die ähnlich wie epgsearch bestimmte Strukturen über die Service-Schnittstelle erwarten?


    Für mich kann es im Falle von epgsearch auch bedeuten, dass es eine getrennte Quelle mit den Service-Headern gibt, die dann auch von epgsearch und allen anderen Interessierten benutzt wird.
    Nennen wir sie einfach mal "libepgsearch". Da muss ja nicht zwingend eine lib drin sein, die Header reichen ja auch schon für eine "lib" aus.
    Dann wäre es Arch-konform und im Debian-Umfeld wäre es auch einfacher, ein extra Paket zu bauen.
    Das Makefile von epgsearch könnte man entsprechend anpassen, dass bei "make dist" zwei tarballs entstehen. Wäre das ok?


    Lars.

  • Weiß noch jemand von anderen Plugins, die ähnlich wie epgsearch bestimmte Strukturen über die Service-Schnittstelle erwarten?


    Wenn ich das richtig verstanden habe die ganzen Plugins von schmirl: http://vdr.schmirler.de/ - IIRC hatte er angekündigt den Header von svdrpservice in die einzelnen Pakete aufzunehmen.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Weiß noch jemand von anderen Plugins, die ähnlich wie epgsearch bestimmte Strukturen über die Service-Schnittstelle erwarten?


    Ja mein Ausgabeplugin SoftHdDevice hat drei Structuren. 1x zum 3D Umschalten, 1x für dfatmo, 1x für sedu atmo.


    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

  • Moin!


    Sammelt sich ja doch so langsam, deshalb finde ich es um so wichtiger, dass wir das Vorgehen vereinheitlichen. Das macht es für alle beteiligten einfacher.


    johns: Du meinst sicherlich softhddevice_service.h, oder?
    Sollten noch andere Dateien in das "softhddevice-dev"-Paket?


    Ich habe vor, nächste Woche dann mal ein paar Beispiel-Patches zu schreiben. softhddevice und seduatmo scheinen übersichtliche Kandidaten zu sein.


    Lars.

  • Wäre das ok?


    Wenn das an mich gerichtet ist: Ich entscheide da gar nichts.


    Das ist Klaus' Entscheidung. Wenn ich mich richtig erinnere hatte Klaus schonmal über eine Art Zertifizierung der Plugins laut nachgedacht.


    Ich vertraue da voll und ganz Klaus. Auch wenn ich in diesem aktuellen Fall die Opposition (schönes Wort :D) gut verstehen kann.

  • Wenn das an mich gerichtet ist: Ich entscheide da gar nichts.


    Entscheiden brauchst du auch nicht. :)
    Ich würde nur gerne wissen, ob das für dich als Paketbauer in Ordnung wäre oder ob du diesbezüglich andere Bedürfnisse/Wünsche/Vorschläge hast.


    Noch befindet sich das alles ja in einem RFC-Stadium.


    Lars.

  • (obwohl Klaus gesagt hat, dass er es nicht will)


    Vor der 2.0 will ich das auch nicht unbedingt.


    Und wenn zwei Plugins vom gleichen "lib"- bzw. "dev"-Paket abhängig sind, sehe ich da keinen Widerspruch zu "die Plugins sollten minimal voneinandern abhängig sein".
    Eine minimalere, vernünftige Abhängigkeit sehe ich nicht. :)


    Lars.

  • Moin!


    (Ich löse mal die Diskussion um dieses Thema aus dem Announce-Thread heraus. Wer den Anfang nicht mitbekommen hat, fange bitte hier an zu lesen)


    Alles in allem viele offene Fragen und faktisch eine komplette Umdefinierung der Idee hinter der Service-Schnittstelle inklusive "Erfinden" von harten Abhängigkeiten zwischen Plugins, die es bisher faktisch nicht gegeben hat.


    Du hast mir nicht zugehört.


    Ich definiere nicht die Service-Schnittstelle um. Die bleibt komplett unangetastet und so wie sie schon immer war.
    PLUGINS.html sagt:

    Zitat


    Id is a unique identification string that identifies the service protocol. To avoid collisions, the string should contain a service name, the plugin name (unless the service is not related to a single plugin) and a protocol version number. Data points to a custom data structure. For each id string there should be a specification that describes the format of the data structure, and any change to the format should be reflected by a change of the id string.


    Die Sache mit der Versionsnummer ist ein Vorschlag, kein Muss. Es gibt keinen Mechanismus außer dem guten Willen der Plugin-Autoren, sich daran zu halten. Wichtig ist nur, dass es eindeutig ist.
    Wenn ich mein Plugin vernünftig programmiere, dann brauche ich die Versionsnummer nämlich gar nicht, weil ich die Parameter versionsunabhängig übergeben kann. Siehe avahi4vdr und wie Parameter über SVDRPCommand hin und her übergeben werden (in einen String verpackte key/value-Liste).


    Mir geht es um ein gemeinsames Verständnis um die "data structure". Da werden gerne irgendwelche structs genommen (weil die für die Übergabe und das Benutzen bequem sind), die kopiert werden müssen. Und das möchte ich vereinfachen für Plugin-Autoren.
    Wenn sich da zwei Plugins uneinig sind, dann kann es (verursacht durch Programmierer-Fehler) dazu kommen, dass ein Plugin auf ungültigen Speicher zugreift und dementsprechend der vdr sich mit einem segfault beendet (oder schlimmer noch, irgendwelchen Speicher überschreibt).
    Leider bietet die C-Schnittstelle da keine vernünftigen runtime type information wie man es von Java, C++ oder C# kennt (es wird einfach eine Referenz auf ein "Object" übergeben, dass dann nach dem Klassennamen gefragt werden kann). Dann könnte man mit Reflection o.ä. arbeiten und mein Vorschlag wäre hinfällig.


    Zur "harten" Abhängigkeit zwischen den Plugins: Ich will und etabliere da keine harten Abhängigkeiten!
    Wenn zwei Plugins die selbe Datenstruktur für eine Kommunikation benutzen wollen, dann gehört die in ein gemeinsam zu nutzendes Headerfile (aka dev-Paket), von dem beide abhängig sind. Aber die Plugins werden dadurch nicht voneinander abhängig!


    Momentan ist es so, dass z.B. epgsearch der "Erfinder" dieser Datenstrukturen ist und die Header deshalb da liegen. Aber das muss ja nicht so sein/bleiben.
    Wenn diese Header, die sich ja wegen der Versionsnummer deiner Meinung nach nie ändern werden (was nicht stimmt, da man am Ende z.B. "reserved"-Felder einfügen kann, die später umdefiniert werden können, was z.B. im Kernel ständig passiert), und die auch in sich vollkommen losgelöst von epgsearch sind, in einem eigenen Paket wären, wäre allen Plugin-Autoren geholfen. Natürlich muss der Verantwortliche dafür Sorge tragen, dass es nur kompatible Änderungen an diesen Definitionen gibt. Das ist selbstverständlich und war vorher auch schon so. Und wenn es eben darauf hinausläuft, einen neuen struct zu bauen, wo andere/neue Felder drin sind. *)
    Aber als "abhängiges" Plugin (im Sinne von Service-Nutzer) muss ich erst wieder aktiv werden und diese Header kopieren, um sie nutzen zu können. Wenn sich aber das Service-Interface-Paket von alleine aktualisiert (mit einer eigenen Versionsnummer), dann kann ich über entsprechende Versionsnummer-Abhängigkeiten in den Build-Abhängigkeiten dafür sorgen, dass mein Plugin immer die richtigen Strukturen benutzt.


    Und als Distributor kann ich dafür sorgen, dass sich alle beteiligten Plugins einig über die structs sind. Dann kann es keine bösen Überraschungen geben.


    Und das Wichtigste: Es ist keine Änderung am vdr nötig! Es ändert sich nichts, auch nicht für Selbstbauer. Ein Plugin ist dann eben nicht nur von z.B. tntnet o.ä. abhängig, sondern eben zusätzlich von "epgsearch-service" oder wie auch immer man es nennen mag. Build-Abhängigkeiten hat es schon immer gegeben und wird es immer geben. Aber es ist keine Abhängigkeit zwischen den Plugins!


    Ich wollte nur die Rahmenbedingungen abklären, damit die Plugins einen gemeinsamen Weg gehen können. Und dazu bietet sich "newplugin" und die vdr.pc an. Dafür sind die da!


    *) Es gibt auch noch diverse Mechanismen, die man einbauen kann, um eine Prüfung vornehmen zu können, z.B. ein "size"-Feld als erstes Element, dass ein Programm mit seiner Vorstellung von der Größe des structs vergleichen kann, um sicherzustellen, dass nicht über den reservierten Speicher hinaus geschrieben wird; und dann noch eine "magic number", wo die "Version" des structs sich widerspiegelt - aber das tut kaum jemand.


    Lars.

  • Moin!


    Hier geht's weiter.


    Falls ein Moderator Lust hat, darf er gerne die vorigen Posts dort hinüber schieben, um die Diskussion herauszulösen. Vielen Dank!


    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/$PLUGIN installiert.


    Das sind aber gerade die Details, die ich eigentlich besprechen wollte... :)
    Ich hoffe, die betroffenen Plugin-Autoren haben Lust, da einen "Standard" mit mir zu erarbeiten. Das würde mich freuen.


    Lars.


  • Zur "harten" Abhängigkeit zwischen den Plugins: Ich will und etabliere da keine harten Abhängigkeiten!
    Wenn zwei Plugins die selbe Datenstruktur für eine Kommunikation benutzen wollen, dann gehört die in ein gemeinsam zu nutzendes Headerfile (aka dev-Paket), von dem beide abhängig sind. Aber die Plugins werden dadurch nicht voneinander abhängig!


    Bei Distributionen, die keine dev-Pakete kennen, kommt das einer harten Abhängigkeit gleich. Bisher waren Plugins *in sich abgeschlossen*.


    Bei deiner Forderung gibt es nur zwei Optionen:


    - Plugins, die Schnittstellen nutzen wollen, setzen faktisch diese hart voraus. Man muss für skinelchi also z.B. zwingend im Voraus dafür sorgen, dass die Header vom avards-Plugin, mailbox-Plugin und epgsearch-Plugin vorhanden sind. Bei "Selberbauern" kommt das einem Zwang, diese Plugins im Voraus zu installieren, gleich
    - Der Plugin-Autor entscheidet sich diese Schnittstellen nicht als zwingende Abhängigkeit zu sehen. Dann muss der Plugin-Autor massiv mit bedingter Kompilierung arbeiten. Wenn man das "Service-Plugin" später noch nachinstalliert, müssen die abhängigen Plugins dann neu gebaut werden. Das war bisher nicht nötig.


    Bisher hat es ausgereicht, einfach das Plugin, das man nutzen will, zu kompilieren. Und um ehrlich zu sein war gerade das eines der Dinge, die ich an der Service-Schnittstelle vom VDR als sehr vorteilhaft angesehen habe.


    Zitat


    Build-Abhängigkeiten hat es schon immer gegeben und wird es immer geben. Aber es ist keine Abhängigkeit zwischen den Plugins!


    Es gibt Distributionen ohne diese dev-Pakete und auch Selberbauer haben keine Dev-Pakete. Für viele kommt das also einer Abhängigkeit gleich.

  • Für viele kommt das also einer Abhängigkeit gleich.


    Ja das ist eine Art Abhängigkeit. Diese Abhängigkeit entsteht aber nicht durch den Vorschlag von mini73, sondern diese Abhängigkeit ist einfach da.
    Ein Plugin bietet eine Service-Schnittstelle an, ein anderes Plugin will sie benutzen. Egal was du machst, diese Abhängigkeit bekommst du nicht weg.


    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.
    Ein Selbstbauer, der gleichzeitig Enduser ist, ist sehr wohl in der Lage die Abhängigkeiten schon während der Compile-Zeit aufzulösen. Lösen muss er das Problem doch sowieso, warum erst vor sich herschieben?


    Es gibt nur zwei Möglichkeiten diese Abhängigkeiten zu verhindern:

    • Die beiden Plugins werden zu einem gemerged. Davon abgesehen, dass das wegen der schlechten Modularisierung keine gute Idee ist, ist das häufig schwer zu machen, weil dort Autoren gezwungen werden zusammen zu arbeiten, die das eventuell gar nicht wollen.
    • Im VDR muss eine geeignete Schnittstelle entstehen und Zentral gepflegt werden, aber ob Klaus sich das auch noch aufhalsen will?


    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

  • Ich versuche mal meine Sicht als Plugin-Entwickler darzulegen.
    Als ich damals die Service-Schnittstelle anderer Plugins (ich nenne sie im folgenden mal Service-Plugins) nutzen wollte stand ich auch vor dem Problem, dass die Header-Files des Service-Plugins nicht verfügbar waren. Ich konnte aber auch nicht voraussetzen, dass man erst das Service-Plugin (Quelltext) installieren muss, um mein Plugin zu übersetzen.
    Deshalb habe ich mich entschieden, die Header-FIles der Service-Plugins in meinen Plugins mitzuliefern. Damit ist mein Plugin immer übersetzbar - ob die Service-Schnittstelle genutzt werden kann wird sowieso zu Laufzeit entschieden, nämlich ob das Service-Plugin geladen ist und es die Schnittstellenversion unterstützt.
    - Wenn sich jetzt die Schnittstellenversion des Service-Plugins ändert, dann muss ich sowieso mein Plugin anpassen, dann kann ich auch grade das neue Header-File mitliefern.
    - Wenn das Service-Plugin z.B. zu Schnittstelle_V1 zusätzlich Schnittstelle_V2 bietet, dann funktioniert mein Plugin auch noch mit Schnittstelle_V1 - da hätte ich also keinen Vorteil von einem aktuelleren Header-File.
    Nach der reinen Lehre wäre es zwar richtig, die Header-Files irgendwo zusammenzufassen, aber ich sehe das eher pragmatisch und liefere die Header-Files einfach in meinem Plugin mit, denn es wird ja zur Laufzeit entschieden, ob der Service in der passenden Version zur Verfügung steht. Ich mache es also den Distri-Entwicklern einfacher, da ich keine Abhängigkeiten zum Quelltext (bzw. installierten Header-Files) anderen Plugins einführe.
    Außerdem musste ich noch nie ein Plugin an eine neue Service-Schnittstelle anpassen - die sind äußerst konstant (Mailboxplugin seit 2006, epgssearch/avards seit 2008 ).

Jetzt mitmachen!

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